Name: series-workflowpdtfx Phase: Succeeded StartedAt: 2026-09-05 18:10:41 +0000 UTC FinishedAt: 2026-09-05 22:38:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[0] Phase: Succeeded StartedAt: 2026-09-05 18:10:41 +0000 UTC FinishedAt: 2026-09-05 18:55:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 18:10:41 +0000 UTC FinishedAt: 2026-09-05 18:55:13 +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": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DSA", "NET_DSA_LOOP", "NF_FLOW_TABLE", "NF_TABLES" ], "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": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DSA", "NET_DSA_LOOP", "NF_FLOW_TABLE", "NF_TABLES" ], "series_id": "26811bd3-9752-40fc-9e9c-afbd2e758e36" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dsa_user_setup_ft_block", "dsa_user_setup_tc", "nf_flow_table_offload_cmd", "nf_flow_table_offload_setup" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9EU0EmIzM0OywKICAgICYjMzQ7TkVUX0RTQV9MT09QJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2smIzM0OywKICAgICYjMzQ7ZHNhX3VzZXJfc2V0dXBfdGMmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIERTQSBmbG93dGFibGUgYmxvY2sgc2V0dXAgbG9naWMgKFRDX1NFVFVQX0ZUKSB0byByb3V0ZSBiaW5kL3VuYmluZCByZXF1ZXN0cyB0byBlaXRoZXIgdGhlIERTQSBzd2l0Y2ggZHJpdmVyIG9yIHRoZSBjb25kdWl0IG5ldGRldiwgdHJhY2tpbmcgc3RhdGUgdmlhIGEgbmV3IGBmdF9vbl9zd2l0Y2hgIGZpZWxkIGluIGBzdHJ1Y3QgZHNhX3BvcnRgLiBgc3RydWN0IGRzYV9wb3J0YCBpbnN0YW5jZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBuZXcgZmllbGQuIFRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGNvcGllcywgbm8gdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBmbG93dGFibGUgYmxvY2sgc2V0dXAgbG9naWMgYnkgYWRkaW5nIHN0YXRlIHRyYWNraW5nIChmdF9vbl9zd2l0Y2gpIG9uIHN0cnVjdCBkc2FfcG9ydCB0byBlbnN1cmUgdW5iaW5kaW5nIHJvdXRlcyB0byB0aGUgc2FtZSBlbnRpdHkgKHN3aXRjaCBvciBjb25kdWl0KSB0aGF0IGhhbmRsZWQgYmluZGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIGZsb3d0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zIG9uIERTQSB1c2VyIHBvcnRzIChzdWNoIGFzIHdpdGggdGhlIHNvZnR3YXJlIGRzYV9sb29wIG1vY2sgZHJpdmVyKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBwb3RlbnRpYWwgc3RhdGUgbWlzbWF0Y2hlcywgYmluZC91bmJpbmQgZXJyb3IgcGF0aHMsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjkyMWYzMTFhYjUyZDBmYWVlNDE3NmE5YTY0NDA4YmUxNjUzZWY1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NTM6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaFxuaW5kZXggNzUwN2Q2MzJlN2M2ZC4uZGJjYjAyZGUwNmZjZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9kc2EuaFxuQEAgLTI5Nyw2ICYjNDM7Mjk3LDEyIEBAIHN0cnVjdCBkc2FfcG9ydCB7XG4gXG4gXHR1OFx0XHRcdHNldHVwOjE7XG4gXG4mIzQzO1x0LyogRmxvd3RhYmxlIGJsb2NrcyBvbiB0aGlzIHVzZXIgcG9ydCBnbyB0byB0aGUgc3dpdGNoLCBub3QgdGhlXG4mIzQzO1x0ICogY29uZHVpdDsgZGVjaWRlZCBhdCBiaW5kIHRpbWUuIFdyaXR0ZW4gd2l0aG91dCBydG5sLCBzbyBub3Qgb25lIG9mXG4mIzQzO1x0ICogdGhlIGJpdCBmaWVsZHMgYWJvdmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbFx0XHRcdGZ0X29uX3N3aXRjaDtcbiYjNDM7XG4gXHRzdHJ1Y3QgZGV2aWNlX25vZGVcdCpkbjtcbiBcdHVuc2lnbmVkIGludFx0XHRhZ2VpbmdfdGltZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jXG5pbmRleCAwNDFmOTA2MGM4ZWYwLi5mNGNkNDhkZjI1MTlkIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdXNlci5jXG5AQCAtMTcxOCwxNSAmIzQzOzE3MTgsMzAgQEAgc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3N0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibylcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHNhX3RvX3BvcnQoZHMsIHBvcnQpKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApO1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVx1MDAzZWRzO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB1bmJpbmQgZ29lcyB0byB0aGUgc2lkZSB0aGF0IHRvb2sgdGhlIGJpbmQuICovXG4mIzQzO1x0aWYgKGJvLVx1MDAzZWNvbW1hbmQgPT0gRkxPV19CTE9DS19CSU5EKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGlmIChkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90YylcbiYjNDM7XHRcdFx0ZXJyID0gZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBibyk7XG4mIzQzO1x0XHRkcC1cdTAwM2VmdF9vbl9zd2l0Y2ggPSBlcnIgIT0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRpZiAoZHAtXHUwMDNlZnRfb25fc3dpdGNoKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH0gZWxzZSBpZiAoZHAtXHUwMDNlZnRfb25fc3dpdGNoKSB7XG4mIzQzO1x0XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCwgYm8pO1xuJiM0MztcdH1cbiBcbiBcdGlmICghY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90YylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIHR5cGVfZGF0YSk7XG4mIzQzO1x0cmV0dXJuIGNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIGJvKTtcbiB9XG4gXG4gc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbkBAIC0xNzM5LDcgJiM0MzsxNzU0LDcgQEAgc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0ZUOlxuLVx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHMsIGRwLVx1MDAzZWluZGV4LCB0eXBlX2RhdGEpO1xuJiM0MztcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RTQSYjMzQ7LAogICAgJiMzNDtORVRfRFNBX0xPT1AmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayYjMzQ7LAogICAgJiMzNDtkc2FfdXNlcl9zZXR1cF90YyYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyBieSBhZGRpbmcgc3RhdGUgdHJhY2tpbmcgKGZ0X29uX3N3aXRjaCkgb24gc3RydWN0IGRzYV9wb3J0IHRvIGVuc3VyZSB1bmJpbmRpbmcgcm91dGVzIHRvIHRoZSBzYW1lIGVudGl0eSAoc3dpdGNoIG9yIGNvbmR1aXQpIHRoYXQgaGFuZGxlZCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb24gRFNBIHVzZXIgcG9ydHMgKHN1Y2ggYXMgd2l0aCB0aGUgc29mdHdhcmUgZHNhX2xvb3AgbW9jayBkcml2ZXIpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHBvdGVudGlhbCBzdGF0ZSBtaXNtYXRjaGVzLCBiaW5kL3VuYmluZCBlcnJvciBwYXRocywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiOTIxZjMxMWFiNTJkMGZhZWU0MTc2YTlhNjQ0MDhiZTE2NTNlZjUwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxODo1MzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmgKaW5kZXggNzUwN2Q2MzJlN2M2ZC4uZGJjYjAyZGUwNmZjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmgKQEAgLTI5Nyw2ICYjNDM7Mjk3LDEyIEBAIHN0cnVjdCBkc2FfcG9ydCB7CiAKIAl1OAkJCXNldHVwOjE7CiAKJiM0MzsJLyogRmxvd3RhYmxlIGJsb2NrcyBvbiB0aGlzIHVzZXIgcG9ydCBnbyB0byB0aGUgc3dpdGNoLCBub3QgdGhlCiYjNDM7CSAqIGNvbmR1aXQ7IGRlY2lkZWQgYXQgYmluZCB0aW1lLiBXcml0dGVuIHdpdGhvdXQgcnRubCwgc28gbm90IG9uZSBvZgomIzQzOwkgKiB0aGUgYml0IGZpZWxkcyBhYm92ZS4KJiM0MzsJICovCiYjNDM7CWJvb2wJCQlmdF9vbl9zd2l0Y2g7CiYjNDM7CiAJc3RydWN0IGRldmljZV9ub2RlCSpkbjsKIAl1bnNpZ25lZCBpbnQJCWFnZWluZ190aW1lOwogCmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jCmluZGV4IDA0MWY5MDYwYzhlZjAuLmY0Y2Q0OGRmMjUxOWQgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdXNlci5jCkBAIC0xNzE4LDE1ICYjNDM7MTcxOCwzMCBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfQogfQogCi1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCi0JCQkJICAgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3N0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCwKJiM0MzsJCQkJICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRzYV90b19wb3J0KGRzLCBwb3J0KSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLSZndDtkczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi8KJiM0MzsJaWYgKGJvLSZndDtjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkgewomIzQzOwkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoZHMtJmd0O29wcy0mZ3Q7cG9ydF9zZXR1cF90YykKJiM0MzsJCQllcnIgPSBkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjKGRzLCBkcC0mZ3Q7aW5kZXgsIFRDX1NFVFVQX0ZULAomIzQzOwkJCQkJCSAgICAgYm8pOwomIzQzOwkJZHAtJmd0O2Z0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWlmIChkcC0mZ3Q7ZnRfb25fc3dpdGNoKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0gZWxzZSBpZiAoZHAtJmd0O2Z0X29uX3N3aXRjaCkgewomIzQzOwkJcmV0dXJuIGRzLSZndDtvcHMtJmd0O3BvcnRfc2V0dXBfdGMoZHMsIGRwLSZndDtpbmRleCwgVENfU0VUVVBfRlQsIGJvKTsKJiM0MzsJfQogCiAJaWYgKCFjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIHR5cGVfZGF0YSk7CiYjNDM7CXJldHVybiBjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIGJvKTsKIH0KIAogc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKQEAgLTE3MzksNyAmIzQzOzE3NTQsNyBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLAogCWNhc2UgVENfU0VUVVBfQkxPQ0s6CiAJCXJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9GVDoKLQkJcmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRzLCBkcC0mZ3Q7aW5kZXgsIHR5cGVfZGF0YSk7CiYjNDM7CQlyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHAsIHR5cGVfZGF0YSk7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFNBIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6IGlzIHRoaXMgcGF0Y2ggZnV6emFibGUsIHdoYXQgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMsIGFuZCB3aGF0IHN5bWJvbHMgYXJlIG1vc3QgcmVsZXZhbnQ/CgpGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEl0JiMzOTtzIHRvdWNoaW5nIGBpbmNsdWRlL25ldC9kc2EuaGAgYW5kIGBuZXQvZHNhL3VzZXIuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGRyYXdzIG15IGF0dGVudGlvbiB0byB0aGUgRFNBIGFyY2hpdGVjdHVyZS4KClNwZWNpZmljYWxseSwgYGluY2x1ZGUvbmV0L2RzYS5oYCBhZGRzIGEgYGJvb2wgZnRfb25fc3dpdGNoYCB0byB0aGUgYHN0cnVjdCBkc2FfcG9ydGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBzdGF0ZSB0cmFja2luZyBmbG93IHRhYmxlcyBvbiB0aGUgc3dpdGNoLiBOb3csIGxvb2tpbmcgYXQgYG5ldC9kc2EvdXNlci5jYCwgSSBzZWUgc29tZSBjcml0aWNhbCBjaGFuZ2VzIGluIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AuIFRoaXMgc3RhdGljIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYGRzYV91c2VyX3NldHVwX3RjYCwgaGFuZGxlcyBgVENfU0VUVVBfRlRgLCB3aGljaCBzZWVtcyB0byBiZSBhYm91dCBmbG93IHRhYmxlIHNldHVwLiBJdCYjMzk7cyBoYW5kbGluZyB0aGUgYEZMT1dfQkxPQ0tfQklORGAgYW5kIHVuYmluZGluZyBjb21tYW5kcy4gSWYgYGRzLSZndDtvcHMtJmd0O3BvcnRfc2V0dXBfdGNgIGlzIHN1cHBvcnRlZCwgaXQgaW5kaWNhdGVzIGZsb3cgdGFibGUgaGFuZGxpbmcgb24gdGhlIHN3aXRjaCBieSBzZXR0aW5nIGBkcC0mZ3Q7ZnRfb25fc3dpdGNoYCB0byB0cnVlLiBJZiBub3QsIGl0IGZvcndhcmRzIHRvIHRoZSBjb25kdWl0JiMzOTtzIGBuZG9fc2V0dXBfdGNgLiBTbyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1hbmFnaW5nIHdoZXRoZXIgdGhlIGZsb3cgdGFibGUgaXMgbWFuYWdlZCBvbiB0aGUgc3dpdGNoIG9yIGZvcndhcmRlZC4gV2hlbiB1bmJpbmRpbmcsIGl0IGNoZWNrcyBgZHAtJmd0O2Z0X29uX3N3aXRjaGAgYW5kIGNhbGxzIGBkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjYCB3aGljaCBzdWdnZXN0cyB0aGVyZSYjMzk7cyBhIG5lZWQgdG8gaGFuZGxlIGZsb3cgdGFibGVzIG9uIHRoZSBzd2l0Y2ggd2hlbiB1bmJpbmRpbmcgdG9vLgoKTm93LCBteSBuZXh0IHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuIGdldCB0byB0aGlzIGluIGEgZnV6emluZyBlbnZpcm9ubWVudD8gQ2FuIERTQSBkZXZpY2VzIG9yIERTQSB1c2VyIGRldmljZXMgYmUgaW5zdGFudGlhdGVkIG9yIGFjY2Vzc2VkIHRocm91Z2ggbmV0bGluaywgbW9jayBpbnRlcmZhY2VzLCBtYXliZSBgZHNhX2xvb3BgLCBvciB3aXRoaW4gYSB2aXJ0dWFsaXplZCBzZXR1cD8gVGltZSB0byBjaGVjayBpZiBJIGNhbiBnZXQgYSBEU0EgZGV2aWNlIGluc3RhbmNlIGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUga2VybmVsIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9EU0EmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvS2NvbmZpZy0yLVxubmV0L2RzYS9LY29uZmlnOjM6bWVudWNvbmZpZyBORVRfRFNBXG5uZXQvZHNhL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0Rpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWc9MTc9aWYgTkVUX0RTQVxuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMC1cbm5ldC9kc2EvS2NvbmZpZzoyMTpjb25maWcgTkVUX0RTQV9UQUdfTk9ORVxubmV0L2RzYS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7Tm8tb3AgdGFnIGRyaXZlclwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yNi1cbm5ldC9kc2EvS2NvbmZpZzoyNzpjb25maWcgTkVUX0RTQV9UQUdfQVI5MzMxXG5uZXQvZHNhL0tjb25maWctMjgtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBBdGhlcm9zIEFSOTMzMSBTb0Mgd2l0aCBidWlsdC1pbiBzd2l0Y2hcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMzItXG5uZXQvZHNhL0tjb25maWc6MzM6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXG5uZXQvZHNhL0tjb25maWctMzQtXHR0cmlzdGF0ZVxuLS1cbm5ldC9kc2EvS2NvbmZpZy0zNi1cbm5ldC9kc2EvS2NvbmZpZzozNzpjb25maWcgTkVUX0RTQV9UQUdfQlJDTVxubmV0L2RzYS9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQnJvYWRjb20gc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy00My1cbm5ldC9kc2EvS2NvbmZpZzo0NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9MRUdBQ1lcbm5ldC9kc2EvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEJDTTYzeHggbGVnYWN5IHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctNTMtXG5uZXQvZHNhL0tjb25maWc6NTQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fTEVHQUNZX0ZDU1xubmV0L2RzYS9LY29uZmlnLTU1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQkNNNTN4eCBsZWdhY3kgc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy02My1cbm5ldC9kc2EvS2NvbmZpZzo2NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9QUkVQRU5EXG5uZXQvZHNhL0tjb25maWctNjUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBCcm9hZGNvbSBzd2l0Y2hlcyB1c2luZyBwcmVwZW5kZWQgaGVhZGVyc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy03MS1cbm5ldC9kc2EvS2NvbmZpZzo3Mjpjb25maWcgTkVUX0RTQV9UQUdfSEVMTENSRUVLXG5uZXQvZHNhL0tjb25maWctNzMtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBIaXJzY2htYW5uIEhlbGxjcmVlayBUU04gc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctNzctXG5uZXQvZHNhL0tjb25maWc6Nzg6Y29uZmlnIE5FVF9EU0FfVEFHX0dTV0lQXG5uZXQvZHNhL0tjb25maWctNzktXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBMYW50aXEgLyBJbnRlbCBHU1dJUCBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy04My1cbm5ldC9kc2EvS2NvbmZpZzo4NDpjb25maWcgTkVUX0RTQV9UQUdfRFNBX0NPTU1PTlxubmV0L2RzYS9LY29uZmlnLTg1LVx0dHJpc3RhdGVcbm5ldC9kc2EvS2NvbmZpZy04Ni1cbm5ldC9kc2EvS2NvbmZpZzo4Nzpjb25maWcgTkVUX0RTQV9UQUdfRFNBXG5uZXQvZHNhL0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIERTQSBoZWFkZXJzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTkzLVxubmV0L2RzYS9LY29uZmlnOjk0OmNvbmZpZyBORVRfRFNBX1RBR19FRFNBXG5uZXQvZHNhL0tjb25maWctOTUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIEV0aGVyVHlwZSBEU0EgaGVhZGVyc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xMDAtXG5uZXQvZHNhL0tjb25maWc6MTAxOmNvbmZpZyBORVRfRFNBX1RBR19NVDc2Mjhcbm5ldC9kc2EvS2NvbmZpZy0xMDItXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciB0aGUgTVQ3NjI4IGVtYmVkZGVkIHN3aXRjaFwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xMDYtXG5uZXQvZHNhL0tjb25maWc6MTA3OmNvbmZpZyBORVRfRFNBX1RBR19NVEtcbm5ldC9kc2EvS2NvbmZpZy0xMDgtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNZWRpYXRlayBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xMTItXG5uZXQvZHNhL0tjb25maWc6MTEzOmNvbmZpZyBORVRfRFNBX1RBR19NWExfODYyWFhcbm5ldC9kc2EvS2NvbmZpZy0xMTQtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTE5LVxubmV0L2RzYS9LY29uZmlnOjEyMDpjb25maWcgTkVUX0RTQV9UQUdfTVhMX0dTVzFYWFxubmV0L2RzYS9LY29uZmlnLTEyMS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1heExpbmVhciBHU1cxeHggc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTI3LVxubmV0L2RzYS9LY29uZmlnOjEyODpjb25maWcgTkVUX0RTQV9UQUdfS1NaXG5uZXQvZHNhL0tjb25maWctMTI5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWljcm9jaGlwIDg3OTUvOTM3eC85NDc3Lzk4OTMgZmFtaWxpZXMgb2Ygc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTMzLVxubmV0L2RzYS9LY29uZmlnOjEzNDpjb25maWcgTkVUX0RTQV9UQUdfTkVUQ1xubmV0L2RzYS9LY29uZmlnLTEzNS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE5YUCBORVRDIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE0My1cbm5ldC9kc2EvS2NvbmZpZzoxNDQ6Y29uZmlnIE5FVF9EU0FfVEFHX09DRUxPVFxubmV0L2RzYS9LY29uZmlnLTE0NS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE9jZWxvdCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIE5QSSBwb3J0XCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE1NC1cbm5ldC9kc2EvS2NvbmZpZzoxNTU6Y29uZmlnIE5FVF9EU0FfVEFHX09DRUxPVF84MDIxUVxubmV0L2RzYS9LY29uZmlnLTE1Ni1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE9jZWxvdCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTY0LVxubmV0L2RzYS9LY29uZmlnOjE2NTpjb25maWcgTkVUX0RTQV9UQUdfUUNBXG5uZXQvZHNhL0tjb25maWctMTY2LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xNzAtXG5uZXQvZHNhL0tjb25maWc6MTcxOmNvbmZpZyBORVRfRFNBX1RBR19SVEw0X0Fcbm5ldC9kc2EvS2NvbmZpZy0xNzItXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBSZWFsdGVrIDQgYnl0ZSBwcm90b2NvbCBBIHRhZ3NcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTc3LVxubmV0L2RzYS9LY29uZmlnOjE3ODpjb25maWcgTkVUX0RTQV9UQUdfUlRMOF80XG5uZXQvZHNhL0tjb25maWctMTc5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUmVhbHRlayA4IGJ5dGUgcHJvdG9jb2wgNCB0YWdzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE4My1cbm5ldC9kc2EvS2NvbmZpZzoxODQ6Y29uZmlnIE5FVF9EU0FfVEFHX1JaTjFfQTVQU1dcbm5ldC9kc2EvS2NvbmZpZy0xODUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBSZW5lc2FzIFJaL04xIEE1UFNXIHN3aXRjaFwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xOTAtXG5uZXQvZHNhL0tjb25maWc6MTkxOmNvbmZpZyBORVRfRFNBX1RBR19MQU45MzAzXG5uZXQvZHNhL0tjb25maWctMTkyLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgU01TQy9NaWNyb2NoaXAgTEFOOTMwMyBmYW1pbHkgb2Ygc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTk2LVxubmV0L2RzYS9LY29uZmlnOjE5Nzpjb25maWcgTkVUX0RTQV9UQUdfU0pBMTEwNVxubmV0L2RzYS9LY29uZmlnLTE5OC1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE5YUCBTSkExMTA1IHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTIwNS1cbm5ldC9kc2EvS2NvbmZpZzoyMDY6Y29uZmlnIE5FVF9EU0FfVEFHX1RSQUlMRVJcbm5ldC9kc2EvS2NvbmZpZy0yMDctXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBzd2l0Y2hlcyB1c2luZyBhIHRyYWlsZXIgdGFnXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTIxMS1cbm5ldC9kc2EvS2NvbmZpZzoyMTI6Y29uZmlnIE5FVF9EU0FfVEFHX1ZTQzczWFhfODAyMVFcbm5ldC9kc2EvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNaWNyb2NoaXAvVml0ZXNzZSBWU0M3M3h4IGZhbWlseSBvZiBzd2l0Y2hlcywgdXNpbmcgVkxBTlwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMTctXG5uZXQvZHNhL0tjb25maWc6MjE4OmNvbmZpZyBORVRfRFNBX1RBR19YUlM3MDBYXG5uZXQvZHNhL0tjb25maWctMjE5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgWFJTNzAweCBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMjMtXG5uZXQvZHNhL0tjb25maWc6MjI0OmNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcbm5ldC9kc2EvS2NvbmZpZy0yMjUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IHN3aXRjaGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERTQSBEcml2ZXIgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGRyaXZlcnMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZS4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgbG9jYXRpb24sIGBkcml2ZXJzL25ldC9kc2EvYC4gVGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkgZm9yIHRoZXNlIGRyaXZlcnMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hhdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBsaXN0aW5nIHRoZSBjb250ZW50cyBvZiB0aGF0IGRpcmVjdG9yeS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRyaXZlciBmaWxlcywgbW9kdWxlIHNvdXJjZSBhbmQgcG90ZW50aWFsbHkgc29tZSBjb21tb24gRFNBIHN1cHBvcnQgY29kZS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgY3VyaW91cyB0byBzZWUgaWYgYSAmIzM5O2RzYV9sb29wJiMzOTsgZHJpdmVyIGV4aXN0cyAtIGEgY29tbW9uIHByYWN0aWNlIGZvciBsb29wYmFjayB0ZXN0aW5nLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHRvIHVzZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZmlsZSBuYW1lcyB0aGVtc2VsdmVzLCBwb3RlbnRpYWxseSB1c2luZyBhIG1vcmUgc3lzdGVtYXRpYyBtZXRob2QgdG8gYnVpbGQgYSBxdWljayB2aWV3IG9mIHRoZSBEU0EgZHJpdmVyIGxhbmRzY2FwZSwgcHJvYmFibHkgdXNpbmcgYSBgZmluZGAgY29tbWFuZCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZW4gbW92ZSBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzYV9sb29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZT0zPWJjbS1zZjItb2Jqc1x0XHRcdDo9IGJjbV9zZjIubyBiY21fc2YyX2NmcC5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfTkVUX0RTQV9MT09QKVx0JiM0Mzs9IGRzYV9sb29wLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXHQmIzQzOz0ga3M4OTk1Lm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI2LVx0dTE2IG1lbWJlcnM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMDpzdHJ1Y3QgZHNhX2xvb3BfbWliX2VudHJ5IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVx0Y2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTplbnVtIGRzYV9sb29wX21pYl9jb3VudGVycyB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNi1cdERTQV9MT09QX1BIWV9SRUFEX09LLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ6XHRzdHJ1Y3QgZHNhX2xvb3BfbWliX2VudHJ5IG1pYltfX0RTQV9MT09QX0NOVF9NQVhdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXHR1MTYgcHZpZDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5OnN0cnVjdCBkc2FfbG9vcF9wcml2IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwLVx0c3RydWN0IG1paV9idXNcdCpidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MS1cdHVuc2lnbmVkIGludFx0cG9ydF9iYXNlO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTI6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUzLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0Olx0c3RydWN0IGRzYV9sb29wX3BvcnQgcG9ydHNbRFNBX01BWF9QT1JUU107XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01NS19O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1NzpzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTgtXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjgtXHRbRFNBX0xPT1BfUEhZX1JFQURfT0tdXHQ9IHsgXCYjMzQ7cGh5X3JlYWRfb2tcJiMzNDssIH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NzU9c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZSAqc3dpdGNoX21kaW9kZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy03Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy03OC1cdERTQV9MT09QX0RFVkxJTktfUEFSQU1fSURfTk9ORSwgIC8qIERFVkxJTktfUkVTT1VSQ0VfSURfUEFSRU5UX1RPUCAqL1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODI6c3RhdGljIHU2NCBkc2FfbG9vcF9kZXZsaW5rX3Z0dV9nZXQodm9pZCAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjg0Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVx0dW5zaWduZWQgaW50IGksIGNvdW50ID0gMDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjg2Olx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODctXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo5NzpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVx0c3RydWN0IGRldmxpbmtfcmVzb3VyY2Vfc2l6ZV9wYXJhbXMgc2l6ZV9wYXJhbXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMDA6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTAxLVx0aW50IGVycjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMTUtXHRcdFx0XHRcdCAgICAgIERTQV9MT09QX0RFVkxJTktfUEFSQU1fSURfVlRVLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTE2Olx0XHRcdFx0XHQgICAgICBkc2FfbG9vcF9kZXZsaW5rX3Z0dV9nZXQsIHBzKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMjU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBkc2FfbG9vcF9nZXRfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVx0XHRcdFx0XHRcdCAgIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEzMy1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEzNS17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMzY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM3LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHMtXHUwMDNlbnVtX3BvcnRzOyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0MDpcdFx0bWVtY3B5KHBzLVx1MDAzZXBvcnRzW2ldLm1pYiwgZHNhX2xvb3BfbWlicyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0MTpcdFx0ICAgICAgIHNpemVvZihkc2FfbG9vcF9taWJzKSk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDItXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQ1Olx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ni19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDctXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNTM6c3RhdGljIGludCBkc2FfbG9vcF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE1NC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTYxOnN0YXRpYyB2b2lkIGRzYV9sb29wX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXHRcdFx0XHQgdTMyIHN0cmluZ3NldCwgdWludDhfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2My17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTc0OnN0YXRpYyB2b2lkIGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzUtXHRcdFx0XHQgICAgICAgdWludDY0X3QgKmRhdGEpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzYte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTc3Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3OC1cdHVuc2lnbmVkIGludCBpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4My1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xODUte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTg2Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4Ny1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTk5OnN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3dyaXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDAtXHRcdFx0ICAgICAgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIwMjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDMtXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIxNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIxNi1cdFx0XHRcdCAgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIyNS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIyNjpzdGF0aWMgdm9pZCBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMzM6c3RhdGljIHZvaWQgZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzQtXHRcdFx0XHRcdHU4IHN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI0MDpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0MS1cdFx0XHRcdFx0Ym9vbCB2bGFuX2ZpbHRlcmluZyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTEtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTUtXHRib29sIHB2aWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1BWSUQ7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVx1MDAzZWJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcdHN0cnVjdCBkc2FfbG9vcF92bGFuICp2bDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1OS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODM6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbilcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXHRib29sIHVudGFnZ2VkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4NzpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODgtXHR1MTYgcHZpZCA9IHBzLVx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODktXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjkwOlx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEyLVx0XHRcdFx0ICAgIGludCBuZXdfbXR1KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxNDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxNS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjE6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyMi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzI1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzYSwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBkc2FfbG9vcF9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzU6XHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBkc2FfbG9vcF9nZXRfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzY6XHQuc2V0dXBcdFx0XHQ9IGRzYV9sb29wX3NldHVwLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM3Olx0LnRlYXJkb3duXHRcdD0gZHNhX2xvb3BfdGVhcmRvd24sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzg6XHQuZ2V0X3N0cmluZ3NcdFx0PSBkc2FfbG9vcF9nZXRfc3RyaW5ncyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcdC5nZXRfc3NldF9jb3VudFx0XHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQxOlx0LmdldF9ldGh0b29sX3BoeV9zdGF0c1x0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MjpcdC5waHlfcmVhZFx0XHQ9IGRzYV9sb29wX3BoeV9yZWFkLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQzOlx0LnBoeV93cml0ZVx0XHQ9IGRzYV9sb29wX3BoeV93cml0ZSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcdC5wb3J0X2JyaWRnZV9qb2luXHQ9IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XHQucG9ydF9icmlkZ2VfbGVhdmVcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2VfbGVhdmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XHQucG9ydF9zdHBfc3RhdGVfc2V0XHQ9IGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcdC5wb3J0X3ZsYW5fZmlsdGVyaW5nXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9maWx0ZXJpbmcsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XHQucG9ydF92bGFuX2FkZFx0XHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDk6XHQucG9ydF92bGFuX2RlbFx0XHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTA6XHQucG9ydF9jaGFuZ2VfbXR1XHQ9IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MTpcdC5wb3J0X21heF9tdHVcdFx0PSBkc2FfbG9vcF9wb3J0X21heF9tdHUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XHQucGh5bGlua19nZXRfY2Fwc1x0PSBkc2FfbG9vcF9waHlsaW5rX2dldF9jYXBzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTU6c3RhdGljIGludCBkc2FfbG9vcF9kcnZfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NzpcdHN0cnVjdCBkc2FfbG9vcF9wZGF0YSAqcGRhdGEgPSBtZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU4Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cdGRzLVx1MDAzZWRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzgzOlx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2ZHNhX2xvb3BfZHJpdmVyO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVx0ZHMtXHUwMDNlcHJpdiA9IHBzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5NzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9kcnZfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTktXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDAwOlx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDAxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQxMTpzdGF0aWMgdm9pZCBkc2FfbG9vcF9kcnZfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MjM6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBkc2FfbG9vcF9kcnYgPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXHQubWRpb2Rydi5kcml2ZXJcdD0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNi1cdH0sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XHQucHJvYmVcdD0gZHNhX2xvb3BfZHJ2X3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4Olx0LnJlbW92ZVx0PSBkc2FfbG9vcF9kcnZfcmVtb3ZlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5Olx0LnNodXRkb3duID0gZHNhX2xvb3BfZHJ2X3NodXRkb3duLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDMwLX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzI6c3RhdGljIGludCBkc2FfbG9vcF9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDMzLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM1Olx0cmV0dXJuIGRydiA9PSBcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzYtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM3LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDY6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDcte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4Olx0c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9wZGF0YSBkc2FfbG9vcF9wZGF0YSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0OS1cdFx0LmNkID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MTpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MjpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NzMtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDgxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDgyOnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDg2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3Olx0cmV0ID0gZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcdHJldCA9IG1kaW9fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTY6XHRcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk3LVx0XHRtZGlvX2RldmljZV9yZW1vdmUoc3dpdGNoX21kaW9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDM6bW9kdWxlX2luaXQoZHNhX2xvb3BfaW5pdCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNi17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDc6XHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDg6XHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwOS1cdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTExLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUxMjptb2R1bGVfZXhpdChkc2FfbG9vcF9leGl0KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM0MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIGBuZXQvZHNhL3VzZXIuY2AgYXJvdW5kIGBkc2FfdXNlcl9zZXR1cF90Y2A6CgoqKkRpdmluZyBpbnRvIERTQSBVc2VyIFRDIFNldHVwKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIGBuZXQvZHNhL3VzZXIuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBkc2FfdXNlcl9zZXR1cF90Y2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGhhcHBlbnMgaW4gdGhlIGNvbnRleHQgb2YgdHJhZmZpYyBjb250cm9sLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgbWFkbmVzcywgZGVwZW5kaW5nIG9uIGhvdyB5b3UgbG9vayBhdCBpdCEpIG9mIGJyaWRnaW5nIHVzZXJsYW5kIGNvbmZpZ3VyYXRpb25zIHRvIHRoZSBrZXJuZWwmIzM5O3MgVEMgZnJhbWV3b3JrIGxpa2VseSByZXNpZGVzLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQmIzM5O3MgZXhwZWN0aW5nLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb25maWd1cmluZyBRRGlzY3MsIGZpbHRlcnMsIG9yIGJvdGg/CgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgdHlwaWNhbCBUQyBvcGVyYXRpb25zOiBjcmVhdGluZywgZGVsZXRpbmcsIGFuZCBtb2RpZnlpbmcgdHJhZmZpYyBjb250cm9sIHJ1bGVzLiBJcyBpdCB0YWtpbmcgbmV0bGluayBtZXNzYWdlcyBhbmQgdGhlbiB0cmFuc2xhdGluZyB0aGVtIGludG8gdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBjYWxscz8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzIGhlcmUgZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5PyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkLgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBlcnJvciBoYW5kbGluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgdXNlci1mYWNpbmcgY29tcG9uZW50LCByb2J1c3QgZXJyb3IgY2hlY2tpbmcgaXMgcGFyYW1vdW50LiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYWxsb3cgYSB1c2VyIHRvIGJ5cGFzcyBhY2Nlc3MgcmVzdHJpY3Rpb25zIG9yIGV2ZW4gY3Jhc2ggdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbiBhcyB3ZWxsLCBtYWtpbmcgc3VyZSBhbGwgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSBtYW5hZ2VkIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIGFyZSBhdm9pZGVkLiBJJiMzOTtsbCBhbHNvIGNoZWNrIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBicmlkZ2Ugb3IgVkxBTiBpbnRlcmZhY2VzOyB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0IHdpdGggZXhpc3RpbmcgVEMgY29uZmlndXJhdGlvbnM/IEhvdyBhcmUgdGhlIERTQS1zcGVjaWZpYyBwYXJhbWV0ZXJzIGhhbmRsZWQsIGFuZCBob3cgYXJlIHRoZXkgdHJhbnNsYXRlZCBpbnRvIHRoZSBUQyBkYXRhIHN0cnVjdHVyZXM/IExldCYjMzk7cyBnZXQgY3JhY2tpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZHNhL3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcwMDpcdFxuMTcwMTpcdFx0XHRibG9ja19jYiA9IGZsb3dfYmxvY2tfY2JfYWxsb2MoY2IsIGRldiwgZGV2LCBOVUxMKTtcbjE3MDI6XHRcdFx0aWYgKElTX0VSUihibG9ja19jYikpXG4xNzAzOlx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYmxvY2tfY2IpO1xuMTcwNDpcdFxuMTcwNTpcdFx0XHRmbG93X2Jsb2NrX2NiX2FkZChibG9ja19jYiwgZik7XG4xNzA2Olx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YmxvY2tfY2ItXHUwMDNlZHJpdmVyX2xpc3QsIFx1MDAyNmRzYV91c2VyX2Jsb2NrX2NiX2xpc3QpO1xuMTcwNzpcdFx0XHRyZXR1cm4gMDtcbjE3MDg6XHRcdGNhc2UgRkxPV19CTE9DS19VTkJJTkQ6XG4xNzA5Olx0XHRcdGJsb2NrX2NiID0gZmxvd19ibG9ja19jYl9sb29rdXAoZi1cdTAwM2VibG9jaywgY2IsIGRldik7XG4xNzEwOlx0XHRcdGlmICghYmxvY2tfY2IpXG4xNzExOlx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNzEyOlx0XG4xNzEzOlx0XHRcdGZsb3dfYmxvY2tfY2JfcmVtb3ZlKGJsb2NrX2NiLCBmKTtcbjE3MTQ6XHRcdFx0bGlzdF9kZWwoXHUwMDI2YmxvY2tfY2ItXHUwMDNlZHJpdmVyX2xpc3QpO1xuMTcxNTpcdFx0XHRyZXR1cm4gMDtcbjE3MTY6XHRcdGRlZmF1bHQ6XG4xNzE3Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE3MTg6XHRcdH1cbjE3MTk6XHR9XG4xNzIwOlx0XG4xNzIxOlx0c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxuMTcyMjpcdFx0XHRcdFx0ICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pXG4xNzIzOlx0e1xuMTcyNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRwKTtcbjE3MjU6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVx1MDAzZWRzO1xuMTcyNjpcdFx0aW50IGVycjtcbjE3Mjc6XHRcbjE3Mjg6XHRcdC8qIFRoZSB1bmJpbmQgZ29lcyB0byB0aGUgc2lkZSB0aGF0IHRvb2sgdGhlIGJpbmQuICovXG4xNzI5Olx0XHRpZiAoYm8tXHUwMDNlY29tbWFuZCA9PSBGTE9XX0JMT0NLX0JJTkQpIHtcbjE3MzA6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4xNzMxOlx0XHRcdGlmIChkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90YylcbjE3MzI6XHRcdFx0XHRlcnIgPSBkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXHUwMDNlaW5kZXgsIFRDX1NFVFVQX0ZULFxuMTczMzpcdFx0XHRcdFx0XHRcdCAgICAgYm8pO1xuMTczNDpcdFx0XHRkcC1cdTAwM2VmdF9vbl9zd2l0Y2ggPSBlcnIgIT0gLUVPUE5PVFNVUFA7XG4xNzM1Olx0XHRcdGlmIChkcC1cdTAwM2VmdF9vbl9zd2l0Y2gpXG4xNzM2Olx0XHRcdFx0cmV0dXJuIGVycjtcbjE3Mzc6XHRcdH0gZWxzZSBpZiAoZHAtXHUwMDNlZnRfb25fc3dpdGNoKSB7XG4xNzM4Olx0XHRcdHJldHVybiBkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXHUwMDNlaW5kZXgsIFRDX1NFVFVQX0ZULCBibyk7XG4xNzM5Olx0XHR9XG4xNzQwOlx0XG4xNzQxOlx0XHRpZiAoIWNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMpXG4xNzQyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE3NDM6XHRcbjE3NDQ6XHRcdHJldHVybiBjb25kdWl0LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldHVwX3RjKGNvbmR1aXQsIFRDX1NFVFVQX0ZULCBibyk7XG4xNzQ1Olx0fVxuMTc0NjpcdFxuMTc0NzpcdHN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4xNzQ4Olx0XHRcdFx0ICAgICB2b2lkICp0eXBlX2RhdGEpXG4xNzQ5Olx0e1xuMTc1MDpcdFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcbjE3NTE6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVx1MDAzZWRzO1xuMTc1MjpcdFxuMTc1MzpcdFx0c3dpdGNoICh0eXBlKSB7XG4xNzU0Olx0XHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuMTc1NTpcdFx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soZGV2LCB0eXBlX2RhdGEpO1xuMTc1NjpcdFx0Y2FzZSBUQ19TRVRVUF9GVDpcbjE3NTc6XHRcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xuMTc1ODpcdFx0ZGVmYXVsdDpcbjE3NTk6XHRcdFx0YnJlYWs7XG4xNzYwOlx0XHR9XG4xNzYxOlx0XG4xNzYyOlx0XHRpZiAoIWRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKVxuMTc2MzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xNzY0Olx0XG4xNzY1Olx0XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVx1MDAzZWluZGV4LCB0eXBlLCB0eXBlX2RhdGEpO1xuMTc2NjpcdH1cbjE3Njc6XHRcbjE3Njg6XHRzdGF0aWMgaW50IGRzYV91c2VyX2dldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuMTc2OTpcdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICpuZmMsIHUzMiAqcnVsZV9sb2NzKVxuMTc3MDpcdHtcbjE3NzE6XHRcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KGRldik7XG4xNzcyOlx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cdTAwM2VkcztcbjE3NzM6XHRcbjE3NzQ6XHRcdGlmICghZHMtXHUwMDNlb3BzLVx1MDAzZWdldF9yeG5mYylcbjE3NzU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTc3NjpcdFxuMTc3NzpcdFx0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2VnZXRfcnhuZmMoZHMsIGRwLVx1MDAzZWluZGV4LCBuZmMsIHJ1bGVfbG9jcyk7XG4xNzc4Olx0fVxuMTc3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDgzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB0aGUgZXhlY3V0aW9uIGZsb3cgaGVyZS4gVGhlIGZ1bmN0aW9uIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2Agc2VlbXMgdG8gYmUgdGhlIGtleSBwbGF5ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVuIGRvZXMgdGhpcyBhY3R1YWxseSBnZXQgdHJpZ2dlcmVkPyBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBkc2FfdXNlcl9zZXR1cF90Y2AsIHNwZWNpZmljYWxseSB3aGVuIGBkc2FfdXNlcl9zZXR1cF90Y2AgaXMgaW52b2tlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIHR5cGUgYFRDX1NFVFVQX0ZUYC4gCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogd2hhdCYjMzk7cyB0aGUgY2FsbCBzdGFjayBoZXJlPyBXaGVuIGRvZXMgYG5kb19zZXR1cF90Y2AsIHRoZSBuZXQgZGV2aWNlIG9wZXJhdG9yIHNldHVwIGZ1bmN0aW9uLCBnZXQgY2FsbGVkIHdpdGggYFRDX1NFVFVQX0ZUYD8gTmVlZCB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIGdyYXBoLiBMb29rcyBsaWtlIEkmIzM5O2xsIG5lZWQgdG8gZ3JlcCB0aGUga2VybmVsIHNvdXJjZSBmb3IgdGhlIHVzZSBvZiB0aGF0IGZsYWcuIExldCYjMzk7cyBzdGFydCB0aGVyZSB0byBmaW5kIHRoZSBwYXJlbnQgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VENfU0VUVVBfRlQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTMwNT1uZG9fc2V0dXBfdGM6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTMwOS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDozMTA6XHRGb3IgYGBUQ19TRVRVUF9CTE9DS2BgIGFuZCBgYFRDX1NFVFVQX0ZUYGAgYGBydG5sX2xvY2tgYCBtYXkgb3JcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMTEtXHRtYXkgbm90IGJlIGhlbGQsIGFuZCB0aGUgbmV0ZGV2IGluc3RhbmNlIGxvY2sgaXMgbm90IGhlbGQuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6MzEyOlx0YGBUQ19TRVRVUF9CTE9DS2BgIHJ1bnMgdW5kZXIgYGBibG9jay1cdTAwM2VjYl9sb2NrYGAgYW5kIGBgVENfU0VUVVBfRlRgYFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTMxMy1cdHJ1bnMgdW5kZXIgYGBmbG93dGFibGUtXHUwMDNlZmxvd19ibG9ja19sb2NrYGAuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zMzI0PXN0YXRpYyBpbnQgYWlyb2hhX2Rldl90Y19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzMzMi1cdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjMzMzM6XHRjYXNlIFRDX1NFVFVQX0ZUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zMzM0LVx0XHRyZXR1cm4gYWlyb2hhX2Rldl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM9NjY5PWludCBtdGtfZXRoX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTY3My1cdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzo2NzQ6XHRjYXNlIFRDX1NFVFVQX0ZUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtNjc1LVx0XHRyZXR1cm4gbXRrX2V0aF9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3dlZC5jPTI3NjA9bXRrX3dlZF9zZXR1cF90YyhzdHJ1Y3QgbXRrX3dlZF9kZXZpY2UgKndlZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfd2VkLmMtMjc2OS1cdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfd2VkLmM6Mjc3MDpcdGNhc2UgVENfU0VUVVBfRlQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfd2VkLmMtMjc3MS1cdFx0cmV0dXJuIG10a193ZWRfc2V0dXBfdGNfYmxvY2soaHcsIGRldiwgdHlwZV9kYXRhKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcmVwL3RjLmM9MjQ3PWludCBtbHg1ZV9yZXBfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3JlcC90Yy5jLTI2MC1cdFx0XHRcdFx0XHQgIHByaXYsIHByaXYsIHRydWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3JlcC90Yy5jOjI2MTpcdGNhc2UgVENfU0VUVVBfRlQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcmVwL3RjLmMtMjYyLVx0XHRyZXR1cm4gZmxvd19ibG9ja19jYl9zZXR1cF9zaW1wbGUodHlwZV9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYz02NjI9aW50IG1seDVlX3JlcF9pbmRyX3NldHVwX2NiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBRZGlzYyAqc2NoLCB2b2lkICpjYl9wcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYy02NzQtXHRcdFx0XHRcdFx0ICBkYXRhLCBjbGVhbnVwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYzo2NzU6XHRjYXNlIFRDX1NFVFVQX0ZUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3JlcC90Yy5jLTY3Ni1cdFx0cmV0dXJuIG1seDVlX3JlcF9pbmRyX3NldHVwX2Jsb2NrKG5ldGRldiwgc2NoLCBjYl9wcml2LCB0eXBlX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3RjLmM9Nzc9bnNpbV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90Yy5jLTkwLVx0XHRcdFx0XHRcdCAgbnMsIG5zLCB0cnVlKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90Yy5jOjkxOlx0Y2FzZSBUQ19TRVRVUF9GVDpcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90Yy5jLTkyLVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L25wdS5jPTM3MT1pbnQgbXQ3Nl9ucHVfbmV0X3NldHVwX3RjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbnB1LmMtMzg0LVx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbnB1LmM6Mzg1Olx0Y2FzZSBUQ19TRVRVUF9GVDpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbnB1LmMtMzg2LVx0XHRyZXR1cm4gbXQ3Nl9ucHVfc2V0dXBfdGNfYmxvY2socGh5LCBkZXYsIHR5cGVfZGF0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD05NTg9ZW51bSB0Y19zZXR1cF90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTk3My1cdFRDX1NFVFVQX1FESVNDX1RBUFJJTyxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6OTc0Olx0VENfU0VUVVBfRlQsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTk3NS1cdFRDX1NFVFVQX1FESVNDX0VUUyxcbi0tXG5uZXQvZHNhL3VzZXIuYz0xNzIxPXN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCxcbi0tXG5uZXQvZHNhL3VzZXIuYy0xNzMxLVx0XHRpZiAoZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMpXG5uZXQvZHNhL3VzZXIuYzoxNzMyOlx0XHRcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsXG5uZXQvZHNhL3VzZXIuYy0xNzMzLVx0XHRcdFx0XHRcdCAgICAgYm8pO1xuLS1cbm5ldC9kc2EvdXNlci5jLTE3MzctXHR9IGVsc2UgaWYgKGRwLVx1MDAzZWZ0X29uX3N3aXRjaCkge1xubmV0L2RzYS91c2VyLmM6MTczODpcdFx0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsIGJvKTtcbm5ldC9kc2EvdXNlci5jLTE3MzktXHR9XG4tLVxubmV0L2RzYS91c2VyLmMtMTc0My1cbm5ldC9kc2EvdXNlci5jOjE3NDQ6XHRyZXR1cm4gY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xubmV0L2RzYS91c2VyLmMtMTc0NS19XG4tLVxubmV0L2RzYS91c2VyLmM9MTc0Nz1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuLS1cbm5ldC9kc2EvdXNlci5jLTE3NTUtXHRcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XG5uZXQvZHNhL3VzZXIuYzoxNzU2Olx0Y2FzZSBUQ19TRVRVUF9GVDpcbm5ldC9kc2EvdXNlci5jLTE3NTctXHRcdHJldHVybiBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhkcCwgdHlwZV9kYXRhKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyMzg9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX2luZHJfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjQ2LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjQ3Olx0cmV0dXJuIGZsb3dfaW5kcl9kZXZfc2V0dXBfb2ZmbG9hZChkZXYsIE5VTEwsIFRDX1NFVFVQX0ZULCBmbG93dGFibGUsIGJvLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjQ4LVx0XHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX2luZHJfY2xlYW51cCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjUxPXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNjEtXHRkb3duX3dyaXRlKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjYyOlx0ZXJyID0gZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldHVwX3RjKGRldiwgVENfU0VUVVBfRlQsIGJvKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI2My1cdHVwX3dyaXRlKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUzNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERTQSBPZmZsb2FkIFBhdGgqKgoKT2theSwgc28gaWYgSSB1bmRlcnN0YW5kIHRoaXMgY29ycmVjdGx5LCBgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJdCYjMzk7cyBjYWxsaW5nIGBkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19zZXR1cF90YyhkZXYsIFRDX1NFVFVQX0ZULCBibylgLiBSaWdodCwgYW5kIHRoYXQgYG5kb19zZXR1cF90Y2AgZnVuY3Rpb24gaXMgYmVpbmcgYXNzaWduZWQgd2l0aGluIGBuZXQvZHNhL3VzZXIuY2AgdG8gYGRzYV91c2VyX25ldGRldl9vcHNgIGFzIGBkc2FfdXNlcl9zZXR1cF90Y2AuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHdlIGNvbmZpZ3VyZSB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgdXNpbmcgc29tZXRoaW5nIGxpa2UgdGhhdCBgbmZ0YCBjb21tYW5kIChhbmQgc3BlY2lmeWluZyB0aGUgYGRzYV91c2VyX2RldmApLCBpdCBldmVudHVhbGx5IGdvZXMgdGhyb3VnaCB0aGlzIHBhdGg6IGBuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kYCAtJmd0OyAgYG5kb19zZXR1cF90Y2AsIHdpdGggdGhlIGBUQ19TRVRVUF9GVGAgcGFyYW1ldGVyLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgZXhwZWN0ZWQgY2hhaW4gb2YgZXZlbnRzLgoKTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uIGFyaXNlcyBpbiBteSBtaW5kOiBjYW4gdGhlc2UgRFNBIGRldmljZXMgYWN0dWFsbHkgYmUgaW5zdGFudGlhdGVkIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFNvbWV0aGluZyBsaWtlIFFFTVUgb3IgZXZlbiBzeXprYWxsZXI/IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSB0ZXN0YWJpbGl0eSBvZiB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgRFNBIHN3aXRjaGVzIGFuZCBkZXZpY2VzIGFyZSBhY3R1YWxseSBjcmVhdGVkIGFuZCB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCBwcm92aWRlcyBhIGNvbXBhdGlibGUgaW50ZXJmYWNlLgoKSeKAmW0gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgYGRzYV9sb29wYC4gSXMgdGhhdCBhIHNvZnR3YXJlIG9yIG1vY2sgZHJpdmVyLCBvciBpcyBpdCBzb21ldGhpbmcgbW9yZSB0YW5naWJsZT8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgIGFuZCBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wX2JkaW5mby5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGxvYWRlZCBhbmQgY3JlYXRlZC4gR2V0dGluZyB0aGF0IGFuc3dlcmVkIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRvIGJlc3QgYXBwcm9hY2ggdGhlIGV2YWx1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzYV9sb29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTM9YmNtLXNmMi1vYmpzXHRcdFx0Oj0gYmNtX3NmMi5vIGJjbV9zZjJfY2ZwLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXHQmIzQzOz0gZHNhX2xvb3Aub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX05FVF9EU0FfS1M4OTk1KSBcdCYjNDM7PSBrczg5OTUub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU6c3RydWN0IGRzYV9sb29wX3ZsYW4ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjYtXHR1MTYgbWVtYmVycztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEtXHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1OmVudW0gZHNhX2xvb3BfbWliX2NvdW50ZXJzIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVx0RFNBX0xPT1BfUEhZX1JFQURfT0ssXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzpzdHJ1Y3QgZHNhX2xvb3BfcG9ydCB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDpcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NS1cdHUxNiBwdmlkO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk6c3RydWN0IGRzYV9sb29wX3ByaXYge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXHRzdHJ1Y3QgbWlpX2J1c1x0KmJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVx0dW5zaWduZWQgaW50XHRwb3J0X2Jhc2U7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcdHN0cnVjdCBkc2FfbG9vcF92bGFuIHZsYW5zW1ZMQU5fTl9WSURdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTMtXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcG9ydCBwb3J0c1tEU0FfTUFYX1BPUlRTXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU3OnN0cnVjdCBkc2FfbG9vcF9wZGF0YSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cdC8qIE11c3QgYmUgZmlyc3QsIHN1Y2ggdGhhdCBkc2FfcmVnaXN0ZXJfc3dpdGNoKCkgY2FuIGFjY2VzcyB0aGlzXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo2NzpzdGF0aWMgc3RydWN0IGRzYV9sb29wX21pYl9lbnRyeSBkc2FfbG9vcF9taWJzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy02OC1cdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cdD0geyBcJiMzNDtwaHlfcmVhZF9va1wmIzM0OywgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz03NT1zdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlICpzd2l0Y2hfbWRpb2RldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Nzc6ZW51bSBkc2FfbG9vcF9kZXZsaW5rX3Jlc291cmNlX2lkIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc4LVx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODUtXHR1bnNpZ25lZCBpbnQgaSwgY291bnQgPSAwO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04Ny1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy05Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjk3OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTktXHRzdHJ1Y3QgZGV2bGlua19yZXNvdXJjZV9zaXplX3BhcmFtcyBzaXplX3BhcmFtcztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXHRpbnQgZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cdFx0XHRcdFx0ICAgICAgRFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9WVFUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XHRcdFx0XHRcdCAgICAgIGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCwgcHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEyNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjYtXHRcdFx0XHRcdFx0ICAgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTM0OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM1LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQwOlx0XHRtZW1jcHkocHMtXHUwMDNlcG9ydHNbaV0ubWliLCBkc2FfbG9vcF9taWJzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlx0XHQgICAgICAgc2l6ZW9mKGRzYV9sb29wX21pYnMpKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XHRyZXR1cm4gZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ2LX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0ODpzdGF0aWMgdm9pZCBkc2FfbG9vcF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE1Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE1MzpzdGF0aWMgaW50IGRzYV9sb29wX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2Mi1cdFx0XHRcdCB1MzIgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE2NDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjUtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzQ6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cdFx0XHRcdCAgICAgICB1aW50NjRfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3Ni17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTg0OnN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3JlYWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4NS17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVx1MDAzZWJ1cztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xOTgtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxOTk6c3RhdGljIGludCBkc2FfbG9vcF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cdFx0XHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDEte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjAyOlx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMy1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjE1OnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjctXHRcdFx0XHQgICAgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIzMzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cdFx0XHRcdFx0dTggc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjM5LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjQwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVx0XHRcdFx0XHRib29sIHZsYW5fZmlsdGVyaW5nLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0OS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1MDpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cdGJvb2wgcHZpZCA9IHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1NjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTctXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU4Olx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4NC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Ni1cdGJvb2wgdW50YWdnZWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mjg3Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OC1cdHUxNiBwdmlkID0gcHMtXHUwMDNlcG9ydHNbcG9ydF0ucHZpZDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OS1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyOTA6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOTEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzExOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTItXHRcdFx0XHQgICAgaW50IG5ld19tdHUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzE0Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMyMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNy1cdFx0XHRcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMzMy1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNDpzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGRzYV9sb29wX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IGRzYV9sb29wX2dldF9wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcdC5zZXR1cFx0XHRcdD0gZHNhX2xvb3Bfc2V0dXAsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzc6XHQudGVhcmRvd25cdFx0PSBkc2FfbG9vcF90ZWFyZG93bixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcdC5nZXRfc3RyaW5nc1x0XHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM5Olx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQwOlx0LmdldF9zc2V0X2NvdW50XHRcdD0gZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDE6XHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQyOlx0LnBoeV9yZWFkXHRcdD0gZHNhX2xvb3BfcGh5X3JlYWQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XHQucGh5X3dyaXRlXHRcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ0Olx0LnBvcnRfYnJpZGdlX2pvaW5cdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NTpcdC5wb3J0X2JyaWRnZV9sZWF2ZVx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NjpcdC5wb3J0X3N0cF9zdGF0ZV9zZXRcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ3Olx0LnBvcnRfdmxhbl9maWx0ZXJpbmdcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0ODpcdC5wb3J0X3ZsYW5fYWRkXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2FkZCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0OTpcdC5wb3J0X3ZsYW5fZGVsXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2RlbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcdC5wb3J0X2NoYW5nZV9tdHVcdD0gZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlx0LnBvcnRfbWF4X210dVx0XHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MjpcdC5waHlsaW5rX2dldF9jYXBzXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTMtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM1NC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTYte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU3Olx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTg6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTktXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgyLVx0ZHMtXHUwMDNlZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODQtXHRkcy1cdTAwM2Vwcml2ID0gcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OS1cdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MDEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDExOnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNC1cdC5tZGlvZHJ2LmRyaXZlclx0PSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDI2LVx0fSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyNzpcdC5wcm9iZVx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjg6XHQucmVtb3ZlXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjk6XHQuc2h1dGRvd24gPSBkc2FfbG9vcF9kcnZfc2h1dGRvd24sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzMS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzMjpzdGF0aWMgaW50IGRzYV9sb29wX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNC17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzU6XHRyZXR1cm4gZHJ2ID09IFx1MDAyNmRzYV9sb29wX2Rydi5tZGlvZHJ2LmRyaXZlcjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNi19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mzg6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00Mzkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0NS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0NjpzdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDg6XHRzdGF0aWMgc3RydWN0IGRzYV9sb29wX3BkYXRhIGRzYV9sb29wX3BkYXRhID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVx0XHQuY2QgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDcwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcxOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlYnVzX21hdGNoID0gZHNhX2xvb3BfYnVzX21hdGNoO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcyOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBcdTAwMjZkc2FfbG9vcF9wZGF0YTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDgzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODc6XHRyZXQgPSBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk0Olx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcdFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXHRcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAyLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwMzptb2R1bGVfaW5pdChkc2FfbG9vcF9pbml0KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNTpzdGF0aWMgdm9pZCBfX2V4aXQgZHNhX2xvb3BfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcdG1kaW9fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA5LVx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MTEtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc0MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYGRzYV9sb29wYCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkc2FfbG9vcGAuIFJpZ2h0LCBpdCYjMzk7cyBhIHNvZnR3YXJlIG1vY2sgZm9yIGEgRFNBIHN3aXRjaCBkcml2ZXIuIFRoZSBpbXBvcnRhbnQgYml0IGlzIHRoYXQgaXQgc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBjb25uZWN0aW9ucyB0byBhIGZpeGVkIFBIWSwgTURJTywgYW5kLCBlc3NlbnRpYWxseSwgbG9vcGJhY2sgdGVzdGluZy4gR29vZCB0byBrbm93LiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgc291cmNlIGZpbGUgSSBleHBlY3QgdG8gYmUgaW52b2x2ZWQgaW4gaXRzIGNvcmUgZnVuY3Rpb25hbGl0eTogYGRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcF9iZGluZm8uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBoYW5kbGVzIGl0cyBidXMgZGF0YSBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YmNtX3NmMi5jJiMzNDssCiAgICAmIzM0O2JjbV9zZjIuaCYjMzQ7LAogICAgJiMzNDtiY21fc2YyX2NmcC5jJiMzNDssCiAgICAmIzM0O2JjbV9zZjJfcmVncy5oJiMzNDssCiAgICAmIzM0O2RzYV9sb29wLmMmIzM0OywKICAgICYjMzQ7a3M4OTk1LmMmIzM0OywKICAgICYjMzQ7bGFuOTMwMy1jb3JlLmMmIzM0OywKICAgICYjMzQ7bGFuOTMwMy5oJiMzNDssCiAgICAmIzM0O2xhbjkzMDNfaTJjLmMmIzM0OywKICAgICYjMzQ7bGFuOTMwM19tZGlvLmMmIzM0OywKICAgICYjMzQ7bXQ3NTMwLW1kaW8uYyYjMzQ7LAogICAgJiMzNDttdDc1MzAtbW1pby5jJiMzNDssCiAgICAmIzM0O210NzUzMC5jJiMzNDssCiAgICAmIzM0O210NzUzMC5oJiMzNDssCiAgICAmIzM0O210NzYyOC5jJiMzNDssCiAgICAmIzM0O212ODhlNjA2MC5jJiMzNDssCiAgICAmIzM0O212ODhlNjA2MC5oJiMzNDssCiAgICAmIzM0O3J6bjFfYTVwc3cuYyYjMzQ7LAogICAgJiMzNDtyem4xX2E1cHN3LmgmIzM0OywKICAgICYjMzQ7dml0ZXNzZS12c2M3M3h4LWNvcmUuYyYjMzQ7LAogICAgJiMzNDt2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0uYyYjMzQ7LAogICAgJiMzNDt2aXRlc3NlLXZzYzczeHgtc3BpLmMmIzM0OywKICAgICYjMzQ7dml0ZXNzZS12c2M3M3h4LmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7YjUzJiMzNDssCiAgICAmIzM0O2hpcnNjaG1hbm4mIzM0OywKICAgICYjMzQ7bGFudGlxJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcCYjMzQ7LAogICAgJiMzNDttb3RvcmNvbW0mIzM0OywKICAgICYjMzQ7bXY4OGU2eHh4JiMzNDssCiAgICAmIzM0O214bDg2Mnh4JiMzNDssCiAgICAmIzM0O25ldGMmIzM0OywKICAgICYjMzQ7b2NlbG90JiMzNDssCiAgICAmIzM0O3FjYSYjMzQ7LAogICAgJiMzNDtyZWFsdGVrJiMzNDssCiAgICAmIzM0O3NqYTExMDUmIzM0OywKICAgICYjMzQ7eHJzNzAweCYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzUyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHByb21wdCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQgd291bGQgdGhpbmsgYWJvdXQgaXQ6CgoqKkV4YW1pbmluZyBEU0EgTG9vcCBDcmVhdGlvbiBhbmQgQ29uZHVpdCBCaW5kaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEU0EgbG9vcCBpcyBiZWluZyBjcmVhdGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0JiMzOTtzIGFjdHVhbGx5IHRpZWQgaW50byBhIGNvbmR1aXQuIFRoZSBjb3JlIGxvZ2ljIGlzIGxpa2VseSB3aXRoaW4gYGRzYV9sb29wLmNgLCBhbmQgdGhlIGtleSBmdW5jdGlvbiB0byBkaXNzZWN0IGlzIGBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXZgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IGdvb2QgaGludCDigJMgaXQgc3VnZ2VzdHMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgbG9vcCwgdGhlIHN3aXRjaCwgYW5kIHRoZSBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBpbnRlcmZhY2UsIHdoaWNoIGlzIHZlcnkgcmVsZXZhbnQgZm9yIGludGVyYWN0aW5nIHdpdGggUEhZcy4gTXkgZ3Vlc3MgaXMgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyB3aGVyZSB0aGUgbG9vcCBpcyBpbml0aWFsaXplZCwgYW5kIHRoZW4gc29tZWhvdywgYSBjb25kdWl0IChvciBpdHMgcmVwcmVzZW50YXRpb24pIGdldHMgYXNzb2NpYXRlZCB3aXRoIGl0LCBwcm9iYWJseSB1c2luZyBhIHBvaW50ZXIgb3Igc29tZSBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXMgd2VsbCwgYXMgdGhvc2Ugd291bGQgY29udGFpbiBhbGwgdGhlIHJlbGV2YW50IGRhdGEuIExldCYjMzk7cyBzdGFydCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDU6XHRcbiA0NDY6XHRzdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbiA0NDc6XHR7XG4gNDQ4Olx0XHRzdGF0aWMgc3RydWN0IGRzYV9sb29wX3BkYXRhIGRzYV9sb29wX3BkYXRhID0ge1xuIDQ0OTpcdFx0XHQuY2QgPSB7XG4gNDUwOlx0XHRcdFx0LnBvcnRfbmFtZXNbMF0gPSBcJiMzNDtsYW4xXCYjMzQ7LFxuIDQ1MTpcdFx0XHRcdC5wb3J0X25hbWVzWzFdID0gXCYjMzQ7bGFuMlwmIzM0OyxcbiA0NTI6XHRcdFx0XHQucG9ydF9uYW1lc1syXSA9IFwmIzM0O2xhbjNcJiMzNDssXG4gNDUzOlx0XHRcdFx0LnBvcnRfbmFtZXNbM10gPSBcJiMzNDtsYW40XCYjMzQ7LFxuIDQ1NDpcdFx0XHRcdC5wb3J0X25hbWVzW0RTQV9MT09QX0NQVV9QT1JUXSA9IFwmIzM0O2NwdVwmIzM0OyxcbiA0NTU6XHRcdFx0fSxcbiA0NTY6XHRcdFx0Lm5hbWUgPSBcJiMzNDtEU0EgbW9ja3VwIGRyaXZlclwmIzM0OyxcbiA0NTc6XHRcdFx0LmVuYWJsZWRfcG9ydHMgPSAweDFmLFxuIDQ1ODpcdFx0XHQubmV0ZGV2ID0gXCYjMzQ7ZXRoMFwmIzM0OyxcbiA0NTk6XHRcdH07XG4gNDYwOlx0XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuIDQ2MTpcdFx0aW50IHJldCA9IC1FTk9ERVY7XG4gNDYyOlx0XG4gNDYzOlx0XHRidXMgPSBtZGlvX2ZpbmRfYnVzKFwmIzM0O2ZpeGVkLTBcJiMzNDspO1xuIDQ2NDpcdFx0aWYgKFdBUk5fT04oIWJ1cykpXG4gNDY1Olx0XHRcdHJldHVybiByZXQ7XG4gNDY2Olx0XG4gNDY3Olx0XHRzd2l0Y2hfbWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIDMxKTtcbiA0Njg6XHRcdGlmIChJU19FUlIoc3dpdGNoX21kaW9kZXYpKVxuIDQ2OTpcdFx0XHRnb3RvIG91dDtcbiA0NzA6XHRcbiA0NzE6XHRcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcbiA0NzI6XHRcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XG4gNDczOlx0XG4gNDc0Olx0XHRyZXQgPSBtZGlvX2RldmljZV9yZWdpc3Rlcihzd2l0Y2hfbWRpb2Rldik7XG4gNDc1Olx0XHRpZiAocmV0KVxuIDQ3NjpcdFx0XHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcbiA0Nzc6XHRvdXQ6XG4gNDc4Olx0XHRwdXRfZGV2aWNlKFx1MDAyNmJ1cy1cdTAwM2VkZXYpO1xuIDQ3OTpcdFx0cmV0dXJuIHJldDtcbiA0ODA6XHR9XG4gNDgxOlx0XG4gNDgyOlx0c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuIDQ4MzpcdHtcbiA0ODQ6XHRcdHVuc2lnbmVkIGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI3OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEU0EgRnJhbWV3b3JrIGFuZCBTeXprYWxsZXImIzM5O3MgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gYE5FVF9EU0FgIGxvb2tzIGxpa2UgdGhlIGNlbnRyYWwgRFNBIGZyYW1ld29yaywgbGl2aW5nIGluIGBuZXQvZHNhL2AsIHNwZWNpZmljYWxseSBpbiBgdXNlci5jYCwgYGNvbmR1aXQuY2AsIGFuZCBgZHNhLmNgLCBhcyB5b3Ugd291bGQgZXhwZWN0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBEU0EuIEFyZSB0aGVyZSBhbnkgc3lzIGRlc2NyaXB0aW9ucyBpbiBzeXprYWxsZXIgcmVsYXRlZCB0byBpdCwgb3IgaXMgaXQgdHJ5aW5nIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIG5ldGxpbmsgZmxvd3RhYmxlIG9mZmxvYWRzIG9yIG5ldGRldmljZXMgaW4gYSB3YXkgdGhhdCByZWxhdGVzPwoKSSBrbm93IHN5emthbGxlciBoYXMgdGhlIGNhcGFiaWxpdHkgdG8gY3JlYXRlIGFuZCBjb25maWd1cmUgYWxsIHNvcnRzIG9mIG5ldHdvcmsgZWxlbWVudHM6IGRldmljZXMsIGJyaWRnZXMsIHZldGggcGFpcnMsIG5ldGZpbHRlciB0YWJsZXMvZmxvd3RhYmxlcywgdGMgZmlsdGVycy9ibG9ja3MsIGFuZCBkZXZsaW5rIG9iamVjdHMuIEl0JiMzOTtzIGV4dGVuc2l2ZS4gQW5kIHNpbmNlIGBuZXQvZHNhL2Agc2l0cyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHNwYWNlIChgbmV0L2ApLCBpdCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBjaGVjay4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgcGF0Y2ggZGV0YWlscyBwcm92aWRlZC4KClRoZSBkaWZmIGludHJvZHVjZXMgYSBgZnRfb25fc3dpdGNoYCBib29sZWFuIHRvIHRoZSBgZHNhX3BvcnRgIHN0cnVjdC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXQgaW5kaWNhdGVzIGEgZGVjaXNpb24gcG9pbnQ6IHdoZXRoZXIgZmxvd3RhYmxlIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggYSB1c2VyIHBvcnQgYXJlIGhhbmRsZWQgYnkgdGhlIHN3aXRjaCBkaXJlY3RseSBvciB0aHJvdWdoIHRoZSBjb25kdWl0LiBUaGUgY29tbWVudHMgc3BlY2lmeSB0aGF0IHRoaXMgaXMgZGVjaWRlZCBhdCBiaW5kIHRpbWUgYW5kIGRvZXNuJiMzOTt0IHVzZSB0aGUgdXN1YWwgYml0IGZpZWxkcywgc28gaXQgbGlrZWx5IG5lZWRzIGEgc3BlY2lhbCBoYW5kbGluZy4KClRoZSBrZXkgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBmbG93dGFibGUgYmxvY2sgaXMgc2V0IHVwIChgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgKS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIG5vdyB0YWtlcyBhIGBkc2FfcG9ydGAgc3RydWN0dXJlIGFuZCBgZmxvd19ibG9ja19vZmZsb2FkYCBhcyBhcmd1bWVudHMuIFRoZSBpbXBvcnRhbnQgbG9naWMgc2VlbXMgdG8gYmUgYXJvdW5kIHRoaXMgbmV3IGJvb2xlYW4gZmxhZyBgZHAtJmd0O2Z0X29uX3N3aXRjaGAuCgpXaGVuIGJpbmRpbmcsIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgc3dpdGNoJiMzOTtzIG9wZXJhdGlvbnMgc3VwcG9ydCBwb3J0IHNldHVwIGZvciB0cmFmZmljIGNvbnRyb2wuIElmIHNvLCBgZnRfb25fc3dpdGNoYCBpcyBzZXQgYmFzZWQgb24gdGhpcy4gIElmIG5vdCwgaXQgZmFsbHMgYmFjayB0byB0aGUgY29uZHVpdCYjMzk7cyBgbmRvX3NldHVwX3RjYC4gVGhlIHVuYmluZCBhY3Rpb24gaXMgZGlyZWN0ZWQgdG8gdGhlIHBhcnR5IHdoaWNoIHRvb2sgdGhlIGJpbmQuCgpUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHN3aXRjaCBoYXMgaXRzIG93biB3YXkgb2YgaGFuZGxpbmcgZmxvd3RhYmxlcywgdGhlbiBpdCB3aWxsOyBvdGhlcndpc2UsIGl0IGlzIHBhc3NlZCBvbiB0byB0aGUgY29uZHVpdC4gVGhpcyBtYWtlcyBzZW5zZS4KCkxhc3RseSwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYE5FVF9EU0FgIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfRFNBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RzYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvS2NvbmZpZy0yLVxubmV0L2RzYS9LY29uZmlnOjM6bWVudWNvbmZpZyBORVRfRFNBXG5uZXQvZHNhL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0Rpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTYtXG5uZXQvZHNhL0tjb25maWc6MTc6aWYgTkVUX0RTQVxubmV0L2RzYS9LY29uZmlnLTE4LVxuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMC1cbm5ldC9kc2EvS2NvbmZpZzoyMTpjb25maWcgTkVUX0RTQV9UQUdfTk9ORVxubmV0L2RzYS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7Tm8tb3AgdGFnIGRyaXZlclwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yNi1cbm5ldC9kc2EvS2NvbmZpZzoyNzpjb25maWcgTkVUX0RTQV9UQUdfQVI5MzMxXG5uZXQvZHNhL0tjb25maWctMjgtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBBdGhlcm9zIEFSOTMzMSBTb0Mgd2l0aCBidWlsdC1pbiBzd2l0Y2hcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMzItXG5uZXQvZHNhL0tjb25maWc6MzM6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXG5uZXQvZHNhL0tjb25maWctMzQtXHR0cmlzdGF0ZVxuLS1cbm5ldC9kc2EvS2NvbmZpZy0zNi1cbm5ldC9kc2EvS2NvbmZpZzozNzpjb25maWcgTkVUX0RTQV9UQUdfQlJDTVxubmV0L2RzYS9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQnJvYWRjb20gc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1wmIzM0O1xubmV0L2RzYS9LY29uZmlnOjM5Olx0c2VsZWN0IE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXG5uZXQvZHNhL0tjb25maWctNDAtXHRoZWxwXG4tLVxubmV0L2RzYS9LY29uZmlnLTQzLVxubmV0L2RzYS9LY29uZmlnOjQ0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0xFR0FDWVxubmV0L2RzYS9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQkNNNjN4eCBsZWdhY3kgc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1wmIzM0O1xubmV0L2RzYS9LY29uZmlnOjQ2Olx0c2VsZWN0IE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXG5uZXQvZHNhL0tjb25maWctNDctXHRoZWxwXG4tLVxubmV0L2RzYS9LY29uZmlnLTUzLVxubmV0L2RzYS9LY29uZmlnOjU0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0xFR0FDWV9GQ1Ncbm5ldC9kc2EvS2NvbmZpZy01NS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEJDTTUzeHggbGVnYWN5IHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcJiMzNDtcbm5ldC9kc2EvS2NvbmZpZzo1NjpcdHNlbGVjdCBORVRfRFNBX1RBR19CUkNNX0NPTU1PTlxubmV0L2RzYS9LY29uZmlnLTU3LVx0aGVscFxuLS1cbm5ldC9kc2EvS2NvbmZpZy02My1cbm5ldC9kc2EvS2NvbmZpZzo2NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9QUkVQRU5EXG5uZXQvZHNhL0tjb25maWctNjUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBCcm9hZGNvbSBzd2l0Y2hlcyB1c2luZyBwcmVwZW5kZWQgaGVhZGVyc1wmIzM0O1xubmV0L2RzYS9LY29uZmlnOjY2Olx0c2VsZWN0IE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXG5uZXQvZHNhL0tjb25maWctNjctXHRoZWxwXG4tLVxubmV0L2RzYS9LY29uZmlnLTcxLVxubmV0L2RzYS9LY29uZmlnOjcyOmNvbmZpZyBORVRfRFNBX1RBR19IRUxMQ1JFRUtcbm5ldC9kc2EvS2NvbmZpZy03My1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEhpcnNjaG1hbm4gSGVsbGNyZWVrIFRTTiBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy03Ny1cbm5ldC9kc2EvS2NvbmZpZzo3ODpjb25maWcgTkVUX0RTQV9UQUdfR1NXSVBcbm5ldC9kc2EvS2NvbmZpZy03OS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIExhbnRpcSAvIEludGVsIEdTV0lQIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTgzLVxubmV0L2RzYS9LY29uZmlnOjg0OmNvbmZpZyBORVRfRFNBX1RBR19EU0FfQ09NTU9OXG5uZXQvZHNhL0tjb25maWctODUtXHR0cmlzdGF0ZVxubmV0L2RzYS9LY29uZmlnLTg2LVxubmV0L2RzYS9LY29uZmlnOjg3OmNvbmZpZyBORVRfRFNBX1RBR19EU0Fcbm5ldC9kc2EvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1hcnZlbGwgc3dpdGNoZXMgdXNpbmcgRFNBIGhlYWRlcnNcJiMzNDtcbm5ldC9kc2EvS2NvbmZpZzo4OTpcdHNlbGVjdCBORVRfRFNBX1RBR19EU0FfQ09NTU9OXG5uZXQvZHNhL0tjb25maWctOTAtXHRoZWxwXG4tLVxubmV0L2RzYS9LY29uZmlnLTkzLVxubmV0L2RzYS9LY29uZmlnOjk0OmNvbmZpZyBORVRfRFNBX1RBR19FRFNBXG5uZXQvZHNhL0tjb25maWctOTUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIEV0aGVyVHlwZSBEU0EgaGVhZGVyc1wmIzM0O1xubmV0L2RzYS9LY29uZmlnOjk2Olx0c2VsZWN0IE5FVF9EU0FfVEFHX0RTQV9DT01NT05cbm5ldC9kc2EvS2NvbmZpZy05Ny1cdGhlbHBcbi0tXG5uZXQvZHNhL0tjb25maWctMTAwLVxubmV0L2RzYS9LY29uZmlnOjEwMTpjb25maWcgTkVUX0RTQV9UQUdfTVQ3NjI4XG5uZXQvZHNhL0tjb25maWctMTAyLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgdGhlIE1UNzYyOCBlbWJlZGRlZCBzd2l0Y2hcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTA2LVxubmV0L2RzYS9LY29uZmlnOjEwNzpjb25maWcgTkVUX0RTQV9UQUdfTVRLXG5uZXQvZHNhL0tjb25maWctMTA4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWVkaWF0ZWsgc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTEyLVxubmV0L2RzYS9LY29uZmlnOjExMzpjb25maWcgTkVUX0RTQV9UQUdfTVhMXzg2MlhYXG5uZXQvZHNhL0tjb25maWctMTE0LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTExOS1cbm5ldC9kc2EvS2NvbmZpZzoxMjA6Y29uZmlnIE5FVF9EU0FfVEFHX01YTF9HU1cxWFhcbm5ldC9kc2EvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgR1NXMXh4IHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTEyNy1cbm5ldC9kc2EvS2NvbmZpZzoxMjg6Y29uZmlnIE5FVF9EU0FfVEFHX0tTWlxubmV0L2RzYS9LY29uZmlnLTEyOS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1pY3JvY2hpcCA4Nzk1LzkzN3gvOTQ3Ny85ODkzIGZhbWlsaWVzIG9mIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTEzMy1cbm5ldC9kc2EvS2NvbmZpZzoxMzQ6Y29uZmlnIE5FVF9EU0FfVEFHX05FVENcbm5ldC9kc2EvS2NvbmZpZy0xMzUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBOWFAgTkVUQyBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xNDMtXG5uZXQvZHNhL0tjb25maWc6MTQ0OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1Rcbm5ldC9kc2EvS2NvbmZpZy0xNDUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBOUEkgcG9ydFwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xNTQtXG5uZXQvZHNhL0tjb25maWc6MTU1OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1RfODAyMVFcbm5ldC9kc2EvS2NvbmZpZy0xNTYtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBWTEFOXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE2NC1cbm5ldC9kc2EvS2NvbmZpZzoxNjU6Y29uZmlnIE5FVF9EU0FfVEFHX1FDQVxubmV0L2RzYS9LY29uZmlnLTE2Ni1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFF1YWxjb21tIEF0aGVyb3MgUUNBOEsgc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTcwLVxubmV0L2RzYS9LY29uZmlnOjE3MTpjb25maWcgTkVUX0RTQV9UQUdfUlRMNF9BXG5uZXQvZHNhL0tjb25maWctMTcyLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUmVhbHRlayA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE3Ny1cbm5ldC9kc2EvS2NvbmZpZzoxNzg6Y29uZmlnIE5FVF9EU0FfVEFHX1JUTDhfNFxubmV0L2RzYS9LY29uZmlnLTE3OS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFJlYWx0ZWsgOCBieXRlIHByb3RvY29sIDQgdGFnc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xODMtXG5uZXQvZHNhL0tjb25maWc6MTg0OmNvbmZpZyBORVRfRFNBX1RBR19SWk4xX0E1UFNXXG5uZXQvZHNhL0tjb25maWctMTg1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUmVuZXNhcyBSWi9OMSBBNVBTVyBzd2l0Y2hcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTkwLVxubmV0L2RzYS9LY29uZmlnOjE5MTpjb25maWcgTkVUX0RTQV9UQUdfTEFOOTMwM1xubmV0L2RzYS9LY29uZmlnLTE5Mi1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFNNU0MvTWljcm9jaGlwIExBTjkzMDMgZmFtaWx5IG9mIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE5Ni1cbm5ldC9kc2EvS2NvbmZpZzoxOTc6Y29uZmlnIE5FVF9EU0FfVEFHX1NKQTExMDVcbm5ldC9kc2EvS2NvbmZpZy0xOTgtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBOWFAgU0pBMTEwNSBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMDUtXG5uZXQvZHNhL0tjb25maWc6MjA2OmNvbmZpZyBORVRfRFNBX1RBR19UUkFJTEVSXG5uZXQvZHNhL0tjb25maWctMjA3LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3Igc3dpdGNoZXMgdXNpbmcgYSB0cmFpbGVyIHRhZ1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMTEtXG5uZXQvZHNhL0tjb25maWc6MjEyOmNvbmZpZyBORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRXG5uZXQvZHNhL0tjb25maWctMjEzLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWljcm9jaGlwL1ZpdGVzc2UgVlNDNzN4eCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMjE3LVxubmV0L2RzYS9LY29uZmlnOjIxODpjb25maWcgTkVUX0RTQV9UQUdfWFJTNzAwWFxubmV0L2RzYS9LY29uZmlnLTIxOS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFhSUzcwMHggc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMjIzLVxubmV0L2RzYS9LY29uZmlnOjIyNDpjb25maWcgTkVUX0RTQV9UQUdfWVQ5MjFYXG5uZXQvZHNhL0tjb25maWctMjI1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI3MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgbmV0L2RzYS9NYWtlZmlsZWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG5ldC9kc2EvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGJ1aWxkaW5nIGFsbCB0aGluZ3MgRFNBIOKAkyB0aGUgd2hvbGUgaW5mcmFzdHJ1Y3R1cmUsIGZyb20gdGhlIGJhc2ljIGRldmljZSBkcml2ZXJzIHRvIHRoZSBzd2l0Y2ggbWFuYWdlbWVudCB0b29scy4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIGEgbmV3IHRhcmdldCBmb3IgYSBjdXN0b20gc3dpdGNoIGNvbmZpZ3VyYXRpb24gSSYjMzk7bSB3b3JraW5nIG9uLCBvciBwZXJoYXBzIEkgc3VzcGVjdCBhIGJ1aWxkIGRlcGVuZGVuY3kgaXNzdWUgcmVsYXRlZCB0byBhIHJlY2VudCBrZXJuZWwgdXBkYXRlLiBPciBtYXliZSBJJiMzOTttIGNoYXNpbmcgZG93biBhIGxpbmdlcmluZyBsaW5rZXIgZXJyb3IgdGhhdCYjMzk7cyBiZWVuIGJ1Z2dpbmcgbWUgZm9yIGRheXMuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBkZWZpbmVkIHRoZXJlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBzZWVpbmcgaG93IHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBpbnRyaWNhY2llcyBvZiBLYnVpbGQgdmFyaWFibGVzIGFuZCBob3cgdGhleSB0cmFuc2xhdGUgdG8gb2JqZWN0IGZpbGUgaW5jbHVzaW9uLCBhbmQgaG93IGl0IGFsbCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIHBhcnNlIHRocm91Z2ggdGhpcyBjYXJlZnVsbHksIHRoYXQgTWFrZWZpbGUgaXMgYWx3YXlzIGZ1bGwgb2Ygc3VycHJpc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL01ha2VmaWxlPTQ9aWZkZWYgQ09ORklHX05FVF9EU0Fcbm5ldC9kc2EvTWFrZWZpbGU6NTpvYmoteSA6PSBzdHVicy5vXG5uZXQvZHNhL01ha2VmaWxlLTYtZW5kaWZcbi0tXG5uZXQvZHNhL01ha2VmaWxlLTgtIyB0aGUgY29yZVxubmV0L2RzYS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORVRfRFNBKSAmIzQzOz0gZHNhX2NvcmUub1xubmV0L2RzYS9NYWtlZmlsZS0xMC1kc2FfY29yZS15ICYjNDM7PSBcXFxuLS1cbm5ldC9kc2EvTWFrZWZpbGUtMjItIyB0YWdnaW5nIGZvcm1hdHNcbm5ldC9kc2EvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0FSOTMzMSkgJiM0Mzs9IHRhZ19hcjkzMzEub1xubmV0L2RzYS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfQlJDTV9DT01NT04pICYjNDM7PSB0YWdfYnJjbS5vXG5uZXQvZHNhL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19EU0FfQ09NTU9OKSAmIzQzOz0gdGFnX2RzYS5vXG5uZXQvZHNhL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19HU1dJUCkgJiM0Mzs9IHRhZ19nc3dpcC5vXG5uZXQvZHNhL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19IRUxMQ1JFRUspICYjNDM7PSB0YWdfaGVsbGNyZWVrLm9cbm5ldC9kc2EvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0tTWikgJiM0Mzs9IHRhZ19rc3oub1xubmV0L2RzYS9NYWtlZmlsZToyOTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTEFOOTMwMykgJiM0Mzs9IHRhZ19sYW45MzAzLm9cbm5ldC9kc2EvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01UNzYyOCkgJiM0Mzs9IHRhZ19tdDc2Mjgub1xubmV0L2RzYS9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVRLKSAmIzQzOz0gdGFnX210ay5vXG5uZXQvZHNhL01ha2VmaWxlOjMyOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19NWExfODYyWFgpICYjNDM7PSB0YWdfbXhsODYyeHgub1xubmV0L2RzYS9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVhMX0dTVzFYWCkgJiM0Mzs9IHRhZ19teGwtZ3N3MXh4Lm9cbm5ldC9kc2EvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX05FVEMpICYjNDM7PSB0YWdfbmV0Yy5vXG5uZXQvZHNhL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19OT05FKSAmIzQzOz0gdGFnX25vbmUub1xubmV0L2RzYS9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfT0NFTE9UKSAmIzQzOz0gdGFnX29jZWxvdC5vXG5uZXQvZHNhL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19PQ0VMT1RfODAyMVEpICYjNDM7PSB0YWdfb2NlbG90XzgwMjFxLm9cbm5ldC9kc2EvTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1FDQSkgJiM0Mzs9IHRhZ19xY2Eub1xubmV0L2RzYS9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfUlRMNF9BKSAmIzQzOz0gdGFnX3J0bDRfYS5vXG5uZXQvZHNhL01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19SVEw4XzQpICYjNDM7PSB0YWdfcnRsOF80Lm9cbm5ldC9kc2EvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1JaTjFfQTVQU1cpICYjNDM7PSB0YWdfcnpuMV9hNXBzdy5vXG5uZXQvZHNhL01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19TSkExMTA1KSAmIzQzOz0gdGFnX3NqYTExMDUub1xubmV0L2RzYS9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfVFJBSUxFUikgJiM0Mzs9IHRhZ190cmFpbGVyLm9cbm5ldC9kc2EvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1ZTQzczWFhfODAyMVEpICYjNDM7PSB0YWdfdnNjNzN4eF84MDIxcS5vXG5uZXQvZHNhL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19YUlM3MDBYKSAmIzQzOz0gdGFnX3hyczcwMHgub1xubmV0L2RzYS9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWVQ5MjFYKSAmIzQzOz0gdGFnX3l0OTIxeC5vXG5uZXQvZHNhL01ha2VmaWxlLTQ3LVxuLS1cbm5ldC9kc2EvdXNlci5jPTczOD1zdGF0aWMgaW50IGRzYV91c2VyX3BvcnRfb2JqX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpjdHgsXG4tLVxubmV0L2RzYS91c2VyLmMtNzQ3LVxubmV0L2RzYS91c2VyLmM6NzQ4Olx0c3dpdGNoIChvYmotXHUwMDNlaWQpIHtcbm5ldC9kc2EvdXNlci5jLTc0OS1cdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX01EQjpcbm5ldC9kc2EvdXNlci5jOjc1MDpcdFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChkcCwgb2JqLVx1MDAzZW9yaWdfZGV2KSlcbm5ldC9kc2EvdXNlci5jLTc1MS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2RzYS91c2VyLmMtNzU1LVx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX0hPU1RfTURCOlxubmV0L2RzYS91c2VyLmM6NzU2Olx0XHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cdTAwM2VvcmlnX2RldikpXG5uZXQvZHNhL3VzZXIuYy03NTctXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9kc2EvdXNlci5jLTc2MS1cdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU46XG5uZXQvZHNhL3VzZXIuYzo3NjI6XHRcdGlmIChkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChkcCwgb2JqLVx1MDAzZW9yaWdfZGV2KSlcbm5ldC9kc2EvdXNlci5jLTc2My1cdFx0XHRlcnIgPSBkc2FfdXNlcl92bGFuX2FkZChkZXYsIG9iaiwgZXh0YWNrKTtcbi0tXG5uZXQvZHNhL3VzZXIuYy03NjctXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfTVJQOlxubmV0L2RzYS91c2VyLmM6NzY4Olx0XHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cdTAwM2VvcmlnX2RldikpXG5uZXQvZHNhL3VzZXIuYy03NjktXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9kc2EvdXNlci5jLTc3My1cdGNhc2UgU1dJVENIREVWX09CSl9JRF9SSU5HX1JPTEVfTVJQOlxubmV0L2RzYS91c2VyLmM6Nzc0Olx0XHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cdTAwM2VvcmlnX2RldikpXG5uZXQvZHNhL3VzZXIuYy03NzUtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9kc2EvdXNlci5jPTgyMD1zdGF0aWMgaW50IGRzYV91c2VyX3BvcnRfb2JqX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpjdHgsXG4tLVxubmV0L2RzYS91c2VyLmMtODI4LVxubmV0L2RzYS91c2VyLmM6ODI5Olx0c3dpdGNoIChvYmotXHUwMDNlaWQpIHtcbm5ldC9kc2EvdXNlci5jLTgzMC1cdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX01EQjpcbm5ldC9kc2EvdXNlci5jOjgzMTpcdFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChkcCwgb2JqLVx1MDAzZW9yaWdfZGV2KSlcbm5ldC9kc2EvdXNlci5jLTgzMi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2RzYS91c2VyLmMtODM2LVx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX0hPU1RfTURCOlxubmV0L2RzYS91c2VyLmM6ODM3Olx0XHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cdTAwM2VvcmlnX2RldikpXG5uZXQvZHNhL3VzZXIuYy04MzgtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9kc2EvdXNlci5jLTg0Mi1cdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU46XG5uZXQvZHNhL3VzZXIuYzo4NDM6XHRcdGlmIChkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChkcCwgb2JqLVx1MDAzZW9yaWdfZGV2KSlcbm5ldC9kc2EvdXNlci5jLTg0NC1cdFx0XHRlcnIgPSBkc2FfdXNlcl92bGFuX2RlbChkZXYsIG9iaik7XG4tLVxubmV0L2RzYS91c2VyLmMtODQ4LVx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX01SUDpcbm5ldC9kc2EvdXNlci5jOjg0OTpcdFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfZGV2KGRwLCBvYmotXHUwMDNlb3JpZ19kZXYpKVxubmV0L2RzYS91c2VyLmMtODUwLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvZHNhL3VzZXIuYy04NTQtXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfUklOR19ST0xFX01SUDpcbm5ldC9kc2EvdXNlci5jOjg1NTpcdFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfZGV2KGRwLCBvYmotXHUwMDNlb3JpZ19kZXYpKVxubmV0L2RzYS91c2VyLmMtODU2LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2MzIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEU0EgVXNlciBOZXRkZXYgU2V0dXAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgbmV0L2RzYS91c2VyLmNgIGdldHMgY29tcGlsZWQgaW50byBgZHNhX2NvcmUub2AgYXMgbG9uZyBhcyBgQ09ORklHX05FVF9EU0FgIGlzIGZsaXBwZWQgb24uIFRoYXQgbWVhbnMgdGhlIERTQSBjb3JlIGZ1bmN0aW9uYWxpdGllcyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBidWlsZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgbmV0ZGV2IGlzIHNldCB1cCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgaW4gYG5ldC9kc2EvdXNlci5jYC4KCkkgc2VlIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AgYW5kIGBkc2FfdXNlcl9zZXR1cF90Y2AuIEFscmlnaHQsIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AgaXMgc3RhdGljOyBpbnRlcm5hbCB0byB0aGF0IGZpbGUuIEFuZCBgZHNhX3VzZXJfc2V0dXBfdGNgIGlzIGFsc28gc3RhdGljLCBidXQgdGhhdCBmdW5jdGlvbiBpcyBhc3NpZ25lZCB0byBgZHNhX3VzZXJfbmV0ZGV2X29wcy5uZG9fc2V0dXBfdGNgLiBTbywgd2hlbiB0aGUgYG5kb19zZXR1cF90Y2AgbmV0ZGV2IG9wZXJhdGlvbiBpcyBjYWxsZWQgb24gYSBEU0EgdXNlciBuZXRkZXYsIGBkc2FfdXNlcl9zZXR1cF90Y2AgZ2V0cyBleGVjdXRlZC4gR290IGl0LiBBbmQgd2l0aGluIHRoYXQsIGBkc2FfdXNlcl9zZXR1cF90Y2AgY2FsbHMgYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYC4KCk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBzZWUgd2hhdCBzd2l0Y2ggZHJpdmVycyBhcmUgdXNpbmcgdGhlIGBwb3J0X3NldHVwX3RjYCBmdW5jdGlvbi4gSSB3aWxsIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5wb3J0X3NldHVwX3RjXFxzKj0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM9MTkwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGhlbGxjcmVla19kc19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmMtMTkyMC1cdC5wb3J0X3J4dHN0YW1wXHQgICAgICAgPSBoZWxsY3JlZWtfcG9ydF9yeHRzdGFtcCxcbmRyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL2hlbGxjcmVlay5jOjE5MjE6XHQucG9ydF9zZXR1cF90Y1x0ICAgICAgID0gaGVsbGNyZWVrX3BvcnRfc2V0dXBfdGMsXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYy0xOTIyLVx0LnBvcnRfc3RwX3N0YXRlX3NldCAgICA9IGhlbGxjcmVla19wb3J0X3N0cF9zdGF0ZV9zZXQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzExND1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxNTAtXHQucG9ydF9yeHRzdGFtcFx0XHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzE1MTpcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6OF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxNTItXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzE2MT1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMyMDAtXHQucG9ydF9yeHRzdGFtcFx0XHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzIwMTpcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6ODd4eF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMyMDItXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzIxMT1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODh4eF9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMyNTMtXHQucG9ydF9yeHRzdGFtcFx0XHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzI1NDpcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6OF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMyNTUtXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MjIxNT1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6OTQ3N19zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTIyNjItXHQuY2xzX2Zsb3dlcl9kZWxcdFx0PSBrc3o5NDc3X2Nsc19mbG93ZXJfZGVsLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MjI2MzpcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6X3NldHVwX3RjLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMjI2NC1cdC5zdXBwb3J0X2VlZVx0XHQ9IGtzejk0Nzdfc3VwcG9ydF9lZWUsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz05NDk9Y29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGxhbjkzN3hfc3dpdGNoX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTk4OS1cdC5wb3J0X3J4dHN0YW1wXHRcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjk5MDpcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6X3NldHVwX3RjLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy05OTEtXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDYwNz1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjI1LVx0LnBvcnRfcG9saWNlcl9hZGRcdD0geXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfYWRkLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDYyNjpcdC5wb3J0X3NldHVwX3RjXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwX3RjLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDYyNy1cdC8qIGFjbCAqL1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zMzk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NTMwX3N3aXRjaF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTM0MzMtXHQuY29uZHVpdF9zdGF0ZV9jaGFuZ2VcdD0gbXQ3NTN4X2NvbmR1aXRfc3RhdGVfY2hhbmdlLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM0MzQ6XHQucG9ydF9zZXR1cF90Y1x0XHQ9IG10NzUzeF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zNDM1LVx0LnBvcnRfaHNyX2pvaW5cdFx0PSBkc2FfcG9ydF9zaW1wbGVfaHNyX2pvaW4sXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTIzMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBmZWxpeF9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzYxLVx0LmNsc19mbG93ZXJfc3RhdHNcdFx0PSBmZWxpeF9jbHNfZmxvd2VyX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzNjI6XHQucG9ydF9zZXR1cF90Y1x0XHRcdD0gZmVsaXhfcG9ydF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzYzLVx0LmRldmxpbmtfc2JfcG9vbF9nZXRcdFx0PSBmZWxpeF9zYl9wb29sX2dldCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yNjU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmVsaXhfaW5mbyBmZWxpeF9pbmZvX3ZzYzk5NTkgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjY3OC1cdC5wb3J0X21vZGVzXHRcdD0gdnNjOTk1OV9wb3J0X21vZGVzLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MjY3OTpcdC5wb3J0X3NldHVwX3RjXHRcdD0gdnNjOTk1OV9wb3J0X3NldHVwX3RjLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjY4MC1cdC5wb3J0X3NjaGVkX3NwZWVkX3NldFx0PSB2c2M5OTU5X3NjaGVkX3NwZWVkX3NldCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0zMTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgc2phMTEwNV9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMxNzMtXHQucG9ydF90eHRzdGFtcFx0XHQ9IHNqYTExMDVfcG9ydF90eHRzdGFtcCxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjMxNzQ6XHQucG9ydF9zZXR1cF90Y1x0XHQ9IHNqYTExMDVfcG9ydF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMxNzUtXHQucG9ydF9taXJyb3JfYWRkXHQ9IHNqYTExMDVfbWlycm9yX2FkZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUxMjYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERTQSBGbG93dGFibGUgT2ZmbG9hZGluZyBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZmxvdyB0YWJsZSBjb25maWd1cmF0aW9uIHdvcmtzIHdpdGhpbiB0aGUgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSAoRFNBKSBpbiB0aGUga2VybmVsLiBJJiMzOTttIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IGZ1bmN0aW9ucyBsaWtlIGBmZWxpeF9wb3J0X3NldHVwX3RjYCwgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLCBvciByZWFsbHkgYW55IERTQSBkcml2ZXIuCgpNeSBtYWluIGZvY3VzIHJpZ2h0IG5vdyBpcyBgZHNhX3VzZXJfc2V0dXBfdGNgIGFuZCBlc3BlY2lhbGx5IGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AuIEkgc2VlIHRoaXMgZnVuY3Rpb24gdGFrZXMgYSBgZHNhX3BvcnRgIGFuZCBgZmxvd19ibG9ja19vZmZsb2FkYCBzdHJ1Y3QuIExvb2tpbmcgYXQgdGhlIGNvZGU6CgpgYGBjCnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCwKCQkJCSAgIHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvKQp7CglzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApOwoJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtJmd0O2RzOwoJaW50IGVycjsKCgkvKiBUaGUgdW5iaW5kIGdvZXMgdG8gdGhlIHNpZGUgdGhhdCB0b29rIHRoZSBiaW5kLiAqLwoJaWYgKGJvLSZndDtjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkgewoJCWVyciA9IC1FT1BOT1RTVVBQOwoJCWlmIChkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjKQoJCQllcnIgPSBkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjKGRzLCBkcC0mZ3Q7aW5kZXgsIFRDX1NFVFVQX0ZULAoJCQkJCQkgICAgIGJvKTsKCQlkcC0mZ3Q7ZnRfb25fc3dpdGNoID0gZXJyICE9IC1FT1BOT1RTVVBQOwoJCWlmIChkcC0mZ3Q7ZnRfb25fc3dpdGNoKQoJCQlyZXR1cm4gZXJyOwoJfSBlbHNlIGlmIChkcC0mZ3Q7ZnRfb25fc3dpdGNoKSB7CgkJcmV0dXJuIGRzLSZndDtvcHMtJmd0O3BvcnRfc2V0dXBfdGMoZHMsIGRwLSZndDtpbmRleCwgVENfU0VUVVBfRlQsIGJvKTsKCX0KCglpZiAoIWNvbmR1aXQtJmd0O25ldGRldl9vcHMtJmd0O25kb19zZXR1cF90YykKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CgoJcmV0dXJuIGNvbmR1aXQtJmd0O25ldGRldl9vcHMtJmd0O25kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pOwp9CmBgYAoKVGhlIGZsb3cgaGVyZSBpcyBpbnRlcmVzdGluZy4gV2hlbiBiaW5kaW5nIGEgZmxvdyBibG9jayAoYGJvLSZndDtjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORGApLCB0aGUgY29kZSBmaXJzdCBjaGVja3MgaWYgdGhlIHN3aXRjaCBpbXBsZW1lbnRzIGBwb3J0X3NldHVwX3RjYC4gSWYgaXQgZG9lcywgdGhlIG9wZXJhdGlvbiBpcyBvZmZsb2FkZWQgdG8gdGhlIHN3aXRjaCwgYW5kIGBkcC0mZ3Q7ZnRfb25fc3dpdGNoYCBpcyBzZXQgYWNjb3JkaW5nbHkuIElmIHRoZSBzd2l0Y2ggZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIChyZXR1cm5zIGAtRU9QTk9UU1VQUGApLCBvciBkb2VzbiYjMzk7dCBoYXZlIGBwb3J0X3NldHVwX3RjYCwgdGhlIG9wZXJhdGlvbiBmYWxscyBiYWNrIHRvIHRoZSBjb25kdWl0IGRldmljZSYjMzk7cyBgbmRvX3NldHVwX3RjYCBmdW5jdGlvbi4gVGhlIGtleSBpcyBob3cgYGRwLSZndDtmdF9vbl9zd2l0Y2hgIHRyYWNrcyB3aGVyZSB0aGUgYmluZGluZyBoYXBwZW5lZC4gT24gdW5iaW5kLCB0aGlzIGlzIGNoZWNrZWQgdG8gc2VuZCB0aGUgY2FsbCB0byB0aGUgcmlnaHQgcGxhY2UuIFRoZSBjb21tZW50IGluIGBpbmNsdWRlL25ldC9kc2EuaGAgY2xhcmlmaWVzIHRoYXQgdGhlIGRlY2lzaW9uIG9mIHdoZXRoZXIgdG8gdXNlIHRoZSBzd2l0Y2ggb3IgdGhlIGNvbmR1aXQgaXMgbWFkZSBhdCBiaW5kIHRpbWUuIFRoaXMgbG9va3MgcHJvbWlzaW5nIGJlY2F1c2Ugb2YgdGhpcyBjb25kaXRpb25hbCBiZWhhdmlvci4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgd2hvbGUgRFNBIHRoaW5nIGlzIGV2ZW4gcmVsZXZhbnQgZm9yIGZ1enppbmcuIENhbiBJIHRyaWdnZXIgdGhpcyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQ/IFRoZSBhbnN3ZXIgaXMgeWVzLiBUaGUgYE5FVF9EU0FgIHdpdGggYE5FVF9EU0FfTE9PUGAgKG9yIG1vY2sgb3IgZml4ZWQgcGh5KSBjcmVhdGVzIERTQSBzd2l0Y2hlcyBhbmQgdXNlciBkZXZpY2VzIGxpa2UgYGxhbjFgLCBgbGFuMmAsIGV0Yy4gVGhpcyBsb29rcyBwZXJmZWN0IGZvciBRRU1VLiBGdXJ0aGVybW9yZSwgc3l6a2FsbGVyIGFscmVhZHkgaGFzIHRoaXMgY29uZmlndXJhdGlvbiEgSXQgdXNlcyBgQ09ORklHX05FVF9EU0E9eWAsIGBDT05GSUdfTkVUX0RTQV9MT09QPXlgLCBgQ09ORklHX05FVEZJTFRFUmAsIGFuZCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGFuZCBjYW4gbWFuaXB1bGF0ZSBmbG93IHRhYmxlcyB3aXRoIGBuZnRgIG9yIGBpcCBsaW5rYCAvIGB0Y2AuIEV4Y2VsbGVudC4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFdoZXJlJiMzOTtzIGBORVRfRFNBYCBkZWZpbmVkPyBJdCYjMzk7cyBpbiBgbmV0L2RzYS9LY29uZmlnYDoKCmBgYAptZW51Y29uZmlnIE5FVF9EU0EKCXRyaXN0YXRlICYjMzQ7RGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSYjMzQ7CglkZXBlbmRzIG9uIEhBVkVfTkVUX0RTQQoJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBJTkVUCglzZWxlY3QgTkVUX1NXSVRDSERFVgoJc2VsZWN0IFBIWUxJTksKCXNlbGVjdCBORVRfREVWTElOSwpgYGAKCkFuZCBJIHdpbGwgZ28gZmlndXJlIG91dCB3aGF0IGVuYWJsZXMgYEhBVkVfTkVUX0RTQWAuIFRoaXMgY29uZmlybXMgdGhhdCBpdCYjMzk7cyBhbGwgYnVpbHQtaW4gYW5kIGFscmVhZHkgZW5hYmxlZCBieSBzeXprYWxsZXIuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgaG93IHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhpcyBgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgIHdpdGggY2FyZWZ1bGx5IGNyYWZ0ZWQgZmxvdyB0YWJsZSBjb21tYW5kcy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9ORVRfRFNBJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwNjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gRGF0YSBTdHVjdHVyZSBBY2NlbGVyYXRvciAoRFNBKS4gSW5zdGVhZCBvZiB3YW5kZXJpbmcgYWltbGVzc2x5IHRocm91Z2ggdGhlIHNvdXJjZSB0cmVlLCBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBuZXQvZHNhL0tjb25maWdgIGZpbGUuIEkmIzM5O20gcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN0cnVjdHVyZSwgYW5kIGhpdHRpbmcgdGhlIHJlbGV2YW50IEtjb25maWcgZGlyZWN0bHkgdXN1YWxseSBnaXZlcyBtZSB0aGUgcXVpY2tlc3QgcGF0aCB0byB1bmRlcnN0YW5kaW5nIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgYmUgYSBtdWNoIG1vcmUgZWZmaWNpZW50IHVzZSBvZiBteSB0aW1lIHRoYW4gc3RhcnRpbmcgYXQgc29tZSBicm9hZGVyLCBwb3NzaWJseSB1bnJlbGF0ZWQgY29uZmlndXJhdGlvbiBtZW51IGFuZCBoYXZpbmcgdG8gZHJpbGwgZG93bi4gTGV0JiMzOTtzIHNlZSB3aGF0IGBuZXQvZHNhL0tjb25maWdgIHJldmVhbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZHNhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51Y29uZmlnIE5FVF9EU0FcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0Rpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gQlJJREdFIHx8IEJSSURHRT1uXG4gICA2Olx0XHRkZXBlbmRzIG9uIEhTUiB8fCBIU1I9blxuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRERVZJQ0VTXG4gICA4Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gICA5Olx0XHRzZWxlY3QgTkVUX1NXSVRDSERFVlxuICAxMDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMTE6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAxMjpcdFx0aW1wbHkgTkVUX1NFTEZURVNUU1xuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIGhhcmR3YXJlIHN3aXRjaGVzIHN1cHBvcnRlZFxuICAxNTpcdFx0ICBieSB0aGUgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZS5cbiAgMTY6XHRcbiAgMTc6XHRpZiBORVRfRFNBXG4gIDE4Olx0XG4gIDE5Olx0IyBEcml2ZXJzIG11c3Qgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSB0YWdnaW5nIGZvcm1hdChzKVxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBORVRfRFNBX1RBR19OT05FXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOby1vcCB0YWcgZHJpdmVyXCYjMzQ7XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHN3aXRjaGVzIHdoaWNoIGRvbiYjMzk7dCB0YWdcbiAgMjU6XHRcdCAgZnJhbWVzIG92ZXIgdGhlIENQVSBwb3J0LlxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBORVRfRFNBX1RBR19BUjkzMzFcbiAgMjg6XHRcdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEF0aGVyb3MgQVI5MzMxIFNvQyB3aXRoIGJ1aWx0LWluIHN3aXRjaFwmIzM0O1xuICAyOTpcdFx0aGVscFxuICAzMDpcdFx0ICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0YWdnaW5nIGZyYW1lcyBmb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc2NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgdGhlIE5ldHdvcmsgRFNBIExvb3AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2RzYWAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRoZSBgTkVUX0RTQV9MT09QYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gS25vd2luZyB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbCBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIGhvdyBpdCBtaWdodCBiZSBjb25maWd1cmVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwIHdoZW4gdHJvdWJsZXNob290aW5nIG9yIGN1c3RvbWl6aW5nIGFueSBhc3BlY3Qgb2YgdGhlIG5ldHdvcmsgRFNBIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgaXRzIGN1cnJlbnQgZGVmaW5pdGlvbiBiZWZvcmUgbW92aW5nIG9uIHRvIGFueXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfRFNBX0xPT1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL0tjb25maWc9Nz1jb25maWcgTkVUX0RTQV9CQ01fU0YyXG4tLVxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctMTgtXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZzoxOTpjb25maWcgTkVUX0RTQV9MT09QXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O0RTQSBtb2NrLXVwIEV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5NDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgRFNBIEtjb25maWcgRmlsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYGRyaXZlcnMvbmV0L2RzYS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDE5OyB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgb3IgdGhlIG1haW4gbW9kdWxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcGxhY2VkLCBzbyB0aGF0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEkmIzM5O20gbG9va2luZyBmb3IgYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmVhdHVyZSwgYnV0IEkgbmVlZCB0byBzdGFydCB3aXRoIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQnJvYWRjb20gU3RhcmZpZ2h0ZXIgMiBFdGhlcm5ldFxuICAxNzpcdFx0ICBzd2l0Y2ggY2hpcHMuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIE5FVF9EU0FfTE9PUFxuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7RFNBIG1vY2stdXAgRXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwmIzM0O1xuICAyMTpcdFx0c2VsZWN0IE5FVF9EU0FfVEFHX05PTkVcbiAgMjI6XHRcdHNlbGVjdCBGSVhFRF9QSFlcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGEgZmFrZSBtb2NrLXVwIHN3aXRjaCBjaGlwIHdoaWNoXG4gIDI1Olx0XHQgIGV4ZXJjaXNlcyB0aGUgRFNBIEFQSXMuXG4gIDI2Olx0XG4gIDI3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL0tjb25maWdcJiMzNDtcbiAgMjg6XHRcbiAgMjk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9LY29uZmlnXCYjMzQ7XG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIE5FVF9EU0FfTVQ3NTMwXG4gIDMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc1MzAgYW5kIE1UNzUzMSBFdGhlcm5ldCBzd2l0Y2ggc3VwcG9ydFwmIzM0O1xuICAzMzpcdFx0c2VsZWN0IE5FVF9EU0FfVEFHX01US1xuICAzNDpcdFx0c2VsZWN0IFJFR01BUF9JUlFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0MjAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb25maWd1cmF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIEZsb3cgVGFibGUgT2ZmbG9hZCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhlIGFwcHJvcHJpYXRlIG1vZHVsZXMgYXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLCBgQ09ORklHX05FVF9BQ1RfQ1RgLCBgQ09ORklHX05FVEZJTFRFUmAsIGFuZCBgQ09ORklHX05GX1RBQkxFU2AuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEnigJlsbCBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgcGllY2VzIGFyZSBpbiBwbGFjZSBmb3IgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgZGlnZ2luZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkgY2FuIGdldCBhIGdyYW51bGFyIGxvb2sgYXQgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzLiBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNrIGRvd24gdGhlIHNwZWNpZmljcyByZWxhdGVkIHRvIGZsb3cgdGFibGUgb2ZmbG9hZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjItXHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIE9mZmxvYWQgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIHRoZSBmbG93IG9mZmxvYWQgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AuIEZpcnN0IHRoaW5ncyBmaXJzdDogSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlIGNvbXBpbGF0aW9uIG9wdGlvbnMgYXJlIHNldCB1cC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgZ3VhcmQgd2l0aGluIHRoZSBmaWxlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgY29kZSBldmVuICpleGlzdHMqIGluIHRoZSBidWlsZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc3VycHJpc2UgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cy4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlIEkmIzM5O20gYWJvdXQgdG8gYW5hbHl6ZSBhbmQgdG8gYXZvaWQgd2FzdGluZyB0aW1lIG9uIHBhcnRzIHRoYXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvdXQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgYW55IGNvbmZpZyBmbGFncyBJIHNlZSB0byBrZWVwIHRoZW0gaW4gbWluZCBhcyBJIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDM9bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDU6XHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0Ni1uZl9mbG93X3RhYmxlLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfUFJPQ0ZTKSAmIzQzOz0gbmZfZmxvd190YWJsZV9wcm9jZnMub1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzQ0PXZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc0OC1cdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc0OTpcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93dGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NTAtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzYzPXZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NjktXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VnY193b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzcwOlx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3dfdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzEtXHQvKiAuLi4gbm8gbW9yZSBwZW5kaW5nIHdvcmsgYWZ0ZXIgdGhpcyBzdGFnZSAuLi4gKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc3My1cdG5mX2Zsb3dfdGFibGVfZ2NfcnVuKGZsb3dfdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NzQ6XHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChmbG93X3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzc1LVx0cmhhc2h0YWJsZV9kZXN0cm95KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz04MjQ9c3RhdGljIGludCBfX2luaXQgbmZfZmxvd190YWJsZV9tb2R1bGVfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODM1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo4MzY6XHRyZXQgPSBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCgpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04MzctXHRpZiAocmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODQ2LW91dF9icGY6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjg0NzpcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg0OC1vdXRfb2ZmbG9hZDpcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTg1NT1zdGF0aWMgdm9pZCBfX2V4aXQgbmZfZmxvd190YWJsZV9tb2R1bGVfZXhpdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NTYte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo4NTc6XHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCgpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NTgtXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2bmZfZmxvd190YWJsZV9uZXRfb3BzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTY4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03MC1cdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo3MTpcdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzItXHQuYWN0aW9uXHRcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2luZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz03OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY0ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODAtXHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6ODE6XHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgyLVx0LmFjdGlvblx0XHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9ODg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkwLVx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjkxOlx0LnNldHVwXHRcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05Mi1cdC5hY3Rpb25cdFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaXB2Nixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNDg9dm9pZCBuZl9mbG93X29mZmxvYWRfc3RhdHMoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE2NC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2NTp2b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE2Ni17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTcyLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTczOnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjM4PXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9pbmRyX29mZmxvYWRfY21kKHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI1MC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI1MTpzdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNTItXHRcdFx0XHQgICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNjktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyNzA6aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNzEtXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4MS1cdGlmIChkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyODI6XHRcdGVyciA9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWQoXHUwMDI2Ym8sIGZsb3d0YWJsZSwgZGV2LCBjbWQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyODMtXHRcdFx0XHRcdFx0XHUwMDI2ZXh0YWNrKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTEtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyOTQ6aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMxOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyMDp2b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTI3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGbG93IFRhYmxlIE9mZmxvYWQgb24gRFNBOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGZsb3cgdGFibGUgb2ZmbG9hZCBwcm9jZXNzIG9uIERTQSBpbnRlcmZhY2VzLiBJdCBzdGFydHMgd2l0aCBhIHVzZXIgY29uZmlndXJpbmcgYSBmbG93IHRhYmxlLCBsaWtlIHdpdGggYG5mdGAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIG9mZmxvYWQgZmxhZyBpcyBzZXQgb24gYSBEU0EgdXNlciBpbnRlcmZhY2UsIGxpa2UgYGxhbjFgLiBUaGUga2VybmVsIHRoZW4gdGFrZXMgb3Zlci4KCk15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRvIHdhbGsgdGhyb3VnaCB0aGUgZnVuY3Rpb24gY2FsbHMuIEZpcnN0LCBpdCBnb2VzIHRocm91Z2ggYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAsIHdoaWNoIHRoZW4gaGl0cyBgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZGAsIHVsdGltYXRlbHkgY2FsbGluZyBgZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMoZGV2LCBUQ19TRVRVUF9GVCwgYm8pYC4gTm93LCB0aGF0IGBuZG9fc2V0dXBfdGNgIGZ1bmN0aW9uIHBvaW50ZXIgaXMga2V5LiBJbiB0aGlzIGNhc2UsIGl0JiMzOTtzIGBkc2FfdXNlcl9zZXR1cF90Y2AuIFRoaXMgaXMgd2hlcmUgdGhlIERTQS1zcGVjaWZpYyBzdHVmZiBraWNrcyBpbiBiZWNhdXNlIGBkc2FfdXNlcl9zZXR1cF90Y2AgaGFuZGxlcyB0aGUgYFRDX1NFVFVQX0ZUYCBzZXR1cC4gVGhpcyB0aGVuIGxlYWRzIHRvIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AuCgpUaGUgYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBzdGF0ZSBtYW5hZ2VtZW50IGhhcHBlbnMuIEl0IHNldHMgYGRwLSZndDtmdF9vbl9zd2l0Y2hgIGR1cmluZyBiaW5kaW5nIGFuZCB1bmJpbmRzIGZyb20gdGhlIHN3aXRjaCBvciBjb25kdWl0IGFwcHJvcHJpYXRlbHkuIFRoaXMgaXMgd2hlcmUgSSBzZWUgdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzLCBwcmltYXJpbHkgaW4gdGhlIGxvZ2ljIG9mIHRoZSBiaW5kL3VuYmluZCBvcGVyYXRpb25zLgoKTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uOiBBcmUgdGhlc2UgZnVuY3Rpb25zIGV2ZW4gcmVhY2hhYmxlPyBUaGUgdGV4dCBhc3NlcnRzIHRoYXQgdGhleSAqYXJlKiByZWFjaGFibGUgaW4gUUVNVSBhbmQgc3RhbmRhcmQgZW52aXJvbm1lbnRzLCBwYXJ0aWN1bGFybHkgd2l0aCB0aG9zZSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIG9wdGlvbnMgc2V0LiBUaGF0JiMzOTtzIGEgZ3JlZW4gbGlnaHQgZm9yIG1lLgoKTXkgbmV4dCB0aG91Z2h0IGlzIGFib3V0IGZ1enppbmcuIEFic29sdXRlbHkuIFRoaXMgY29kZSBtb2RpZmllcyBjb250cm9sIGZsb3cgYW5kIHN0YXRlIHJlbGF0ZWQgdG8gdGhhdCBgZnRfb25fc3dpdGNoYCBmbGFnIGR1cmluZyB0aGVzZSBmbG93dGFibGUgYmxvY2sgYmluZC91bmJpbmQgb3BlcmF0aW9ucyBvbiBEU0EgdXNlciBuZXRkZXZzLiBUaGF0JiMzOTtzIGEganVpY3kgdGFyZ2V0IGZvciBmdXp6aW5nLiBTdGF0ZSB0cmFja2luZyBidWdzIGluIHRoZSBiaW5kL3VuYmluZCBsb2dpYyBjb3VsZCBsZWFkIHRvIG1lbW9yeSBsZWFrcywgZG91YmxlIGZyZWVzLCBvciwgY3JpdGljYWxseSwgbWlzbWF0Y2hlZCBiaW5kaW5nL3VuYmluZGluZyBzdGF0ZXMsIGNyZWF0aW5nIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGZvY3VzIHN5bWJvbHMgYW5kIHRhcmdldHMgbm93LgpJIG5lZWQgdG8gZXhhbWluZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3aXRoIGEgYml0IG1vcmUgcmlnb3I6Ci0gICBgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgOiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb21waWxlciBkb2VzbiYjMzk7dCBpbmxpbmUgaXQgb3IgSSBjYW4gc3RpbGwgdXNlIHRoZSBzeW1ib2wgYWRkcmVzcyBpbiBgdm1saW51eGAuCi0gICBgZHNhX3VzZXJfc2V0dXBfdGNgOiBBbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIHVzZWQgYXMgYSBjYWxsYmFjayBpbiBhIGBuZXRkZXZfb3BzYCBzdHJ1Y3QsIHNvIEkmIzM5O20gY29uZmlkZW50IGl0JiMzOTtzIGFjY2Vzc2libGUuCi0gICBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYDogVGhpcyBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiwgbm8gaXNzdWVzIHRoZXJlLgotICAgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWRgOiBTdGF0aWMsIGJ1dCBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBwYXRoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdC4KClRvIGdldCBhIGJyb2FkZXIgcGljdHVyZSBvZiBEU0EsIEkgc2hvdWxkIGFsc28gbG9vayBmb3Igb3RoZXIgcG90ZW50aWFsIERTQS11c2VyIGZ1bmN0aW9ucy4gSSYjMzk7bGwgY2hlY2sgYG5ldC9kc2EvdXNlci5jYCBmb3IgYW55IG90aGVyIGludGVyZXN0aW5nIHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgRFNBIHVzZXIgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkc2FfdXNlcl9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EvdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvdXNlci5jPTE1NDM9c3RhdGljIHZvaWQgZHNhX3VzZXJfZGVsX2Nsc19tYXRjaGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9kc2EvdXNlci5jLTE1NzItXG5uZXQvZHNhL3VzZXIuYzoxNTczOnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfY2xzX21hdGNoYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZHNhL3VzZXIuYy0xNTc0LVx0XHRcdFx0XHQgIHN0cnVjdCB0Y19jbHNfbWF0Y2hhbGxfb2ZmbG9hZCAqY2xzLFxuLS1cbm5ldC9kc2EvdXNlci5jPTE2MTk9c3RhdGljIGludCBkc2FfdXNlcl9zdGF0c19jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2RzYS91c2VyLmMtMTYzMi1cbm5ldC9kc2EvdXNlci5jOjE2MzM6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZHNhL3VzZXIuYy0xNjM0LVx0XHRcdFx0XHRzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzLFxuLS1cbm5ldC9kc2EvdXNlci5jLTE2NDgtXG5uZXQvZHNhL3VzZXIuYzoxNjQ5OnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSxcbm5ldC9kc2EvdXNlci5jLTE2NTAtXHRcdFx0XHQgICAgICB2b2lkICpjYl9wcml2LCBib29sIGluZ3Jlc3MpXG4tLVxubmV0L2RzYS91c2VyLmMtMTY1OC1cdGNhc2UgVENfU0VUVVBfQ0xTTUFUQ0hBTEw6XG5uZXQvZHNhL3VzZXIuYzoxNjU5Olx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfY2xzX21hdGNoYWxsKGRldiwgdHlwZV9kYXRhLCBpbmdyZXNzKTtcbm5ldC9kc2EvdXNlci5jLTE2NjAtXHRjYXNlIFRDX1NFVFVQX0NMU0ZMT1dFUjpcbm5ldC9kc2EvdXNlci5jOjE2NjE6XHRcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19jbHNfZmxvd2VyKGRldiwgdHlwZV9kYXRhLCBpbmdyZXNzKTtcbm5ldC9kc2EvdXNlci5jLTE2NjItXHRkZWZhdWx0OlxuLS1cbm5ldC9kc2EvdXNlci5jLTE2NjYtXG5uZXQvZHNhL3VzZXIuYzoxNjY3OnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2JfaWcoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5uZXQvZHNhL3VzZXIuYy0xNjY4LVx0XHRcdFx0XHQgdm9pZCAqdHlwZV9kYXRhLCB2b2lkICpjYl9wcml2KVxubmV0L2RzYS91c2VyLmMtMTY2OS17XG5uZXQvZHNhL3VzZXIuYzoxNjcwOlx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrX2NiKHR5cGUsIHR5cGVfZGF0YSwgY2JfcHJpdiwgdHJ1ZSk7XG5uZXQvZHNhL3VzZXIuYy0xNjcxLX1cbm5ldC9kc2EvdXNlci5jLTE2NzItXG5uZXQvZHNhL3VzZXIuYzoxNjczOnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2JfZWcoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5uZXQvZHNhL3VzZXIuYy0xNjc0LVx0XHRcdFx0XHQgdm9pZCAqdHlwZV9kYXRhLCB2b2lkICpjYl9wcml2KVxubmV0L2RzYS91c2VyLmMtMTY3NS17XG5uZXQvZHNhL3VzZXIuYzoxNjc2Olx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrX2NiKHR5cGUsIHR5cGVfZGF0YSwgY2JfcHJpdiwgZmFsc2UpO1xubmV0L2RzYS91c2VyLmMtMTY3Ny19XG4tLVxubmV0L2RzYS91c2VyLmM9MTY3OT1zdGF0aWMgTElTVF9IRUFEKGRzYV91c2VyX2Jsb2NrX2NiX2xpc3QpO1xubmV0L2RzYS91c2VyLmMtMTY4MC1cbm5ldC9kc2EvdXNlci5jOjE2ODE6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2RzYS91c2VyLmMtMTY4Mi1cdFx0XHRcdCAgIHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmYpXG4tLVxubmV0L2RzYS91c2VyLmMtMTY4Ny1cdGlmIChmLVx1MDAzZWJpbmRlcl90eXBlID09IEZMT1dfQkxPQ0tfQklOREVSX1RZUEVfQ0xTQUNUX0lOR1JFU1MpXG5uZXQvZHNhL3VzZXIuYzoxNjg4Olx0XHRjYiA9IGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrX2NiX2lnO1xubmV0L2RzYS91c2VyLmMtMTY4OS1cdGVsc2UgaWYgKGYtXHUwMDNlYmluZGVyX3R5cGUgPT0gRkxPV19CTE9DS19CSU5ERVJfVFlQRV9DTFNBQ1RfRUdSRVNTKVxubmV0L2RzYS91c2VyLmM6MTY5MDpcdFx0Y2IgPSBkc2FfdXNlcl9zZXR1cF90Y19ibG9ja19jYl9lZztcbm5ldC9kc2EvdXNlci5jLTE2OTEtXHRlbHNlXG4tLVxubmV0L2RzYS91c2VyLmMtMTcyMC1cbm5ldC9kc2EvdXNlci5jOjE3MjE6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS91c2VyLmMtMTcyMi1cdFx0XHRcdCAgIHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvKVxuLS1cbm5ldC9kc2EvdXNlci5jLTE3NDYtXG5uZXQvZHNhL3VzZXIuYzoxNzQ3OnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5uZXQvZHNhL3VzZXIuYy0xNzQ4LVx0XHRcdCAgICAgdm9pZCAqdHlwZV9kYXRhKVxuLS1cbm5ldC9kc2EvdXNlci5jLTE3NTQtXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxubmV0L2RzYS91c2VyLmM6MTc1NTpcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKGRldiwgdHlwZV9kYXRhKTtcbm5ldC9kc2EvdXNlci5jLTE3NTYtXHRjYXNlIFRDX1NFVFVQX0ZUOlxubmV0L2RzYS91c2VyLmM6MTc1NzpcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xubmV0L2RzYS91c2VyLmMtMTc1OC1cdGRlZmF1bHQ6XG4tLVxubmV0L2RzYS91c2VyLmM9MjYwMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV91c2VyX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2RzYS91c2VyLmMtMjYxNS0jZW5kaWZcbm5ldC9kc2EvdXNlci5jOjI2MTY6XHQubmRvX3NldHVwX3RjXHRcdD0gZHNhX3VzZXJfc2V0dXBfdGMsXG5uZXQvZHNhL3VzZXIuYy0yNjE3LVx0Lm5kb19nZXRfc3RhdHM2NFx0PSBkc2FfdXNlcl9nZXRfc3RhdHM2NCxcbi0tXG5uZXQvZHNhL3VzZXIuYz0yNjY5PXN0YXRpYyBpbnQgZHNhX3VzZXJfcGh5X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyX2Rldilcbi0tXG5uZXQvZHNhL3VzZXIuYy0yNzExLVxubmV0L2RzYS91c2VyLmM6MjcxMjp2b2lkIGRzYV91c2VyX3NldHVwX3RhZ2dlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcilcbm5ldC9kc2EvdXNlci5jLTI3MTMte1xuLS1cbm5ldC9kc2EvdXNlci5jPTI3NzM9aW50IGRzYV91c2VyX2NyZWF0ZShzdHJ1Y3QgZHNhX3BvcnQgKnBvcnQpXG4tLVxubmV0L2RzYS91c2VyLmMtMjgzMS1cdHBvcnQtXHUwMDNldXNlciA9IHVzZXJfZGV2O1xubmV0L2RzYS91c2VyLmM6MjgzMjpcdGRzYV91c2VyX3NldHVwX3RhZ2dlcih1c2VyX2Rldik7XG5uZXQvZHNhL3VzZXIuYy0yODMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDIxNgoJCQkJCQkJb3V0cHV0OiAyMTIKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRFNBIFVzZXIgU2V0dXAgYW5kIEZsb3cgVGFibGUgT2ZmbG9hZCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBhbmQgYGRzYV91c2VyX3NldHVwX3RjYCwgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBEU0EgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZy4gSSYjMzk7bGwgYWxzbyBrZWVwIGEgY2xvc2UgZXllIG9uIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kYCBhbmQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAgYXMgdGhleSYjMzk7cmUgY3JpdGljYWwgdG8gdGhlIG5ldGZpbHRlciBzaWRlIG9mIHRoaW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIGNvbm5lY3RlZC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgd2UgbmVlZCBgTkVUX0RTQWAgdG8gZW5hYmxlIHRoZSBEU0EgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBgbmV0L2RzYS91c2VyLmNgIGFuZCBgaW5jbHVkZS9uZXQvZHNhLmhgLiBUaGVuLCBgTkZfRkxPV19UQUJMRWAgZW5hYmxlcyB0aGUgY29yZSBmbG93IHRhYmxlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gQW5kIG9mIGNvdXJzZSwgYE5GX1RBQkxFU2AgaXMgZXNzZW50aWFsIGZvciB0aGUgbmV0ZmlsdGVyIHRhYmxlIGluZnJhc3RydWN0dXJlLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBtYWtpbmcgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcy4gR29vZCwgbG9va3MgbGlrZSB0aG9zZSB0aHJlZSBhcmUgdGhlIHByaW1hcnkgb25lcyBmb3IgdGhpcyBhcmVhLgoKVGltZSBmb3IgYSBzYW5pdHkgY2hlY2suIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29yZSBzdWJzeXN0ZW1zOiBuZXR3b3JraW5nLCBzcGVjaWZpY2FsbHkgRFNBIChgbmV0L2RzYS9gKSBhbmQgbmV0ZmlsdGVyIG9mZmxvYWQuIFRoZSByZWFjaGFiaWxpdHkgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBhY2Nlc3NpYmxlIHRocm91Z2ggdmlydHVhbCBkZXZpY2VzICh0aGFua3MgdG8gYE5FVF9EU0FfTE9PUGAsIHdoaWNoIGlzIGdyZWF0IGZvciB0ZXN0aW5nKSBhbmQgdXNlci1zcGFjZSB0b29scyBsaWtlIG5ldGxpbmssIG5mdGFibGVzLCBhbmQgdGMgZm9yIGZsb3cgdGFibGUgb3BlcmF0aW9ucy4gQW5kIHllcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRoaXMsIHdoaWNoIGlzIGNvbmZpcm1lZCBieSB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSB3aGF0IEkgYWxyZWFkeSBpZGVudGlmaWVkLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgdGhvc2UgdGhyZWUgSSBqdXN0IGNvbmZpcm1lZC4KCkFscmlnaHQsIHRoYXQmIzM5O3MgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBmb3IgdGhpcyBhbmFseXNpcy4gTm93LCBJJiMzOTtsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RTQSYjMzQ7LAogICAgJiMzNDtORVRfRFNBX0xPT1AmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayYjMzQ7LAogICAgJiMzNDtkc2FfdXNlcl9zZXR1cF90YyYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyBieSBhZGRpbmcgc3RhdGUgdHJhY2tpbmcgKGZ0X29uX3N3aXRjaCkgb24gc3RydWN0IGRzYV9wb3J0IHRvIGVuc3VyZSB1bmJpbmRpbmcgcm91dGVzIHRvIHRoZSBzYW1lIGVudGl0eSAoc3dpdGNoIG9yIGNvbmR1aXQpIHRoYXQgaGFuZGxlZCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb24gRFNBIHVzZXIgcG9ydHMgKHN1Y2ggYXMgd2l0aCB0aGUgc29mdHdhcmUgZHNhX2xvb3AgbW9jayBkcml2ZXIpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHBvdGVudGlhbCBzdGF0ZSBtaXNtYXRjaGVzLCBiaW5kL3VuYmluZCBlcnJvciBwYXRocywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9EU0EmIzM0OywKICAgICYjMzQ7TkVUX0RTQV9MT09QJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2smIzM0OywKICAgICYjMzQ7ZHNhX3VzZXJfc2V0dXBfdGMmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBmbG93dGFibGUgYmxvY2sgc2V0dXAgbG9naWMgYnkgYWRkaW5nIHN0YXRlIHRyYWNraW5nIChmdF9vbl9zd2l0Y2gpIG9uIHN0cnVjdCBkc2FfcG9ydCB0byBlbnN1cmUgdW5iaW5kaW5nIHJvdXRlcyB0byB0aGUgc2FtZSBlbnRpdHkgKHN3aXRjaCBvciBjb25kdWl0KSB0aGF0IGhhbmRsZWQgYmluZGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIGZsb3d0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zIG9uIERTQSB1c2VyIHBvcnRzIChzdWNoIGFzIHdpdGggdGhlIHNvZnR3YXJlIGRzYV9sb29wIG1vY2sgZHJpdmVyKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBwb3RlbnRpYWwgc3RhdGUgbWlzbWF0Y2hlcywgYmluZC91bmJpbmQgZXJyb3IgcGF0aHMsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBEU0EgZmxvd3RhYmxlIGJsb2NrIHNldHVwIGxvZ2ljIChUQ19TRVRVUF9GVCkgdG8gcm91dGUgYmluZC91bmJpbmQgcmVxdWVzdHMgdG8gZWl0aGVyIHRoZSBEU0Egc3dpdGNoIGRyaXZlciBvciB0aGUgY29uZHVpdCBuZXRkZXYsIHRyYWNraW5nIHN0YXRlIHZpYSBhIG5ldyBgZnRfb25fc3dpdGNoYCBmaWVsZCBpbiBgc3RydWN0IGRzYV9wb3J0YC4gYHN0cnVjdCBkc2FfcG9ydGAgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgbmV3IGZpZWxkLiBUaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiOTIxZjMxMWFiNTJkMGZhZWU0MTc2YTlhNjQ0MDhiZTE2NTNlZjUwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxODo1MzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmgKaW5kZXggNzUwN2Q2MzJlN2M2ZC4uZGJjYjAyZGUwNmZjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmgKQEAgLTI5Nyw2ICYjNDM7Mjk3LDEyIEBAIHN0cnVjdCBkc2FfcG9ydCB7CiAKIAl1OAkJCXNldHVwOjE7CiAKJiM0MzsJLyogRmxvd3RhYmxlIGJsb2NrcyBvbiB0aGlzIHVzZXIgcG9ydCBnbyB0byB0aGUgc3dpdGNoLCBub3QgdGhlCiYjNDM7CSAqIGNvbmR1aXQ7IGRlY2lkZWQgYXQgYmluZCB0aW1lLiBXcml0dGVuIHdpdGhvdXQgcnRubCwgc28gbm90IG9uZSBvZgomIzQzOwkgKiB0aGUgYml0IGZpZWxkcyBhYm92ZS4KJiM0MzsJICovCiYjNDM7CWJvb2wJCQlmdF9vbl9zd2l0Y2g7CiYjNDM7CiAJc3RydWN0IGRldmljZV9ub2RlCSpkbjsKIAl1bnNpZ25lZCBpbnQJCWFnZWluZ190aW1lOwogCmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jCmluZGV4IDA0MWY5MDYwYzhlZjAuLmY0Y2Q0OGRmMjUxOWQgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdXNlci5jCkBAIC0xNzE4LDE1ICYjNDM7MTcxOCwzMCBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfQogfQogCi1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCi0JCQkJICAgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3N0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCwKJiM0MzsJCQkJICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRzYV90b19wb3J0KGRzLCBwb3J0KSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLSZndDtkczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi8KJiM0MzsJaWYgKGJvLSZndDtjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkgewomIzQzOwkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoZHMtJmd0O29wcy0mZ3Q7cG9ydF9zZXR1cF90YykKJiM0MzsJCQllcnIgPSBkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjKGRzLCBkcC0mZ3Q7aW5kZXgsIFRDX1NFVFVQX0ZULAomIzQzOwkJCQkJCSAgICAgYm8pOwomIzQzOwkJZHAtJmd0O2Z0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWlmIChkcC0mZ3Q7ZnRfb25fc3dpdGNoKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0gZWxzZSBpZiAoZHAtJmd0O2Z0X29uX3N3aXRjaCkgewomIzQzOwkJcmV0dXJuIGRzLSZndDtvcHMtJmd0O3BvcnRfc2V0dXBfdGMoZHMsIGRwLSZndDtpbmRleCwgVENfU0VUVVBfRlQsIGJvKTsKJiM0MzsJfQogCiAJaWYgKCFjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIHR5cGVfZGF0YSk7CiYjNDM7CXJldHVybiBjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIGJvKTsKIH0KIAogc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKQEAgLTE3MzksNyAmIzQzOzE3NTQsNyBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLAogCWNhc2UgVENfU0VUVVBfQkxPQ0s6CiAJCXJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9GVDoKLQkJcmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRzLCBkcC0mZ3Q7aW5kZXgsIHR5cGVfZGF0YSk7CiYjNDM7CQlyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHAsIHR5cGVfZGF0YSk7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggdG8gdGhlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgY29kZSBpbiB0aGUga2VybmVsIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGJlIGVmZmljaWVudCBoZXJlLCBzbyBsZXQmIzM5O3MgYW5hbHl6ZSB0aGlzIG1ldGhvZGljYWxseS4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2UuIEEgbmV3IGJvb2xlYW4sIGBmdF9vbl9zd2l0Y2hgLCBpcyBhZGRlZCB0byB0aGUgYGRzYV9wb3J0YCBzdHJ1Y3QgaW4gYGluY2x1ZGUvbmV0L2RzYS5oYC4gVGhpcyBmbGFnIGRldGVybWluZXMgaWYgZmxvd3RhYmxlIGJsb2NrcyBmb3IgYSB1c2VyIHBvcnQgYXJlIGhhbmRsZWQgYnkgdGhlIHN3aXRjaCBkaXJlY3RseSBvciB0aGUgJiMzNDtjb25kdWl0JiMzNDsgKHdoaWNoIEkgaW5mZXIgaXMgc29tZSBzb3J0IG9mIGludGVybWVkaWFyeSkuIFRoZSBsb2dpYyBkaWN0YXRlcyB0aGF0IHRoaXMgZGV0ZXJtaW5hdGlvbiBpcyBtYWRlIGF0IGJpbmQgdGltZSBhbmQgY2FuIGJlIHN1YnNlcXVlbnRseSB1bmJvdW5kLiBUaGlzIGlzIGtleSwgYSBib29sZWFuIHRvIGRldGVybWluZSBleGVjdXRpb24gcGF0aC4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBtb2RpZmljYXRpb24gdG8gYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBpbiBgbmV0L2RzYS91c2VyLmNgLiBUaGUgZnVuY3Rpb24gbm93IHRha2VzIGEgYGRzYV9wb3J0YCBzdHJ1Y3QgYXMgaW5wdXQgaW5zdGVhZCBvZiBkaXJlY3RseSByZWNlaXZpbmcgYGRzYV9zd2l0Y2hgIGFuZCBwb3J0IG51bWJlci4gVGhpcyBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBgZHNhX3BvcnRgIGRhdGEuIEl0IGFsc28gZGlyZWN0bHkgcmVmZXJlbmNlcyB0aGUgYGZ0X29uX3N3aXRjaGAgZmxhZy4gTW9zdCBpbXBvcnRhbnRseSwgdGhlIGxvZ2ljIGZvciBzZXR0aW5nIHVwIHRoZSBmbG93dGFibGUgYmxvY2tzIG5vdyBicmFuY2hlcyBiYXNlZCBvbiB0aGlzIGZsYWcmIzM5O3MgdmFsdWUuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBjb25kaXRpb25hbCBibG9jayB0aGF0IGNhbGxzIGBkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjYCBpZiBgZnRfb25fc3dpdGNoYCBpcyB0cnVlLCBpbXBseWluZyBhIGRpZmZlcmVudCBjb2RlIHBhdGguIFRoZSBjb25kaXRpb25hbCBlbnN1cmVzIHRoYXQgdW5iaW5kaW5nIGlzIHNpbWlsYXJseSBoYW5kbGVkIG9uIHRoZSBjb3JyZWN0IHNpZGUsIGFzIGRldGVybWluZWQgYnkgdGhlIGJpbmQuCgpUaGUgY29kZSBzZWVtcyB0byBiZSBoYW5kbGluZyB0aGUgdW5iaW5kIGNhc2UgdG9vLiBJdCBsb29rcyBsaWtlIGl0IGlzIGNhbGxpbmcgdGhlIHNhbWUgYHBvcnRfc2V0dXBfdGNgIGZ1bmN0aW9uIGZvciB0aGUgdW5iaW5kIG9wZXJhdGlvbi4gVGhpcyBjb3VsZCBiZSBhbiBpbXBvcnRhbnQgcGxhY2UgdG8gaGF2ZSB0aGUgZnV6emluZyB0YXJnZXQuCgpOb3csIHRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZHNhX3BvcnRgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQsIGhvdyBgZnRfb25fc3dpdGNoYCBpcyBzZXQsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGF0IGhhcyBmb3IgdGhlIGNvZGUgZmxvdy4gRXNzZW50aWFsbHksIHdoYXQmIzM5O3MgdGhlIHdob2xlIHBpY3R1cmUgaGVyZT8gV2hhdCBhcmUgdGhlIHBvc3NpYmxlIHN0YXRlcywgaG93IGRvIHRoZXkgdHJhbnNpdGlvbiwgYW5kIHdoYXQgYXJlIHRoZSBpbXBvcnRhbnQgY29uZGl0aW9ucz8KCkkgYW0gZ29pbmcgdG8gdXNlIGBncmVwcGVyYCAob3IgbXkgZXF1aXZhbGVudCBmaWxlIHJlYWRpbmcgdG9vbHMpIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyB0aGUgYGRzYV9wb3J0YCBzdHJ1Y3QgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSSBuZWVkIHRvIGtub3cgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGF0IGZsYWcgYW5kIGhvdyBpdCYjMzk7cyBjaGFuZ2VkLiBXaXRoIHRoYXQgaW5mb3JtYXRpb24sIEkmIzM5O2xsIGJlIGFibGUgdG8gZGVjaWRlIGlmIEtNU0FOIGZ1enppbmcgd291bGQgYmUgYmVuZWZpY2lhbCBpbiBpZGVudGlmeWluZyBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHRoZSBjb25kaXRpb25hbCBjb2RlIHBhdGhzLiBNeSBndXQgc2F5cyB0aGlzIGRlc2VydmVzIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkc2FfcG9ydF9hbGxvY3xremFsbG9jLipkc2FfcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGRlbHZpbmcgaW50byB0aGUgY29kZToKCioqRmluZGluZyB0aGUgQWxsb2NhdGlvbiBvZiBgc3RydWN0IGRzYV9wb3J0YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgYHN0cnVjdCBkc2FfcG9ydGAgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgYG5ldC9kc2EvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIEkgY291bGQganVzdCB1c2UgYGdyZXBgIHJlY3Vyc2l2ZWx5LCBidXQgdGhhdCBjYW4gcmV0dXJuIGEgbG90IG9mIGZhbHNlIHBvc2l0aXZlcywgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBvZnRlbiB0aGUgYWN0dWFsIGFsbG9jYXRpb24gbWlnaHQgaW52b2x2ZSBtb3JlIHRoYW4ganVzdCBhIGRpcmVjdCBga21hbGxvY2Agb3Igc2ltaWxhciBjYWxsLiBJdCBjb3VsZCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIHN0cnVjdHVyZSwgYWxsb2NhdGVkIHdpdGhpbiBhbm90aGVyIGNvbnRleHQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIG1vc3QgbGlrZWx5IGN1bHByaXRzOgoKKiAgICoqSGVhZGVyIEZpbGVzOioqIFRoZSBoZWFkZXIgZmlsZXMgd2l0aGluIGBuZXQvZHNhL2AgYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LCBhcyBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSB0aGUgc3RydWN0dXJlIGlzIGxpa2VseSBkZWZpbmVkLiBJJiMzOTtsbCBsb29rIGZvciB3aGVyZSBgc3RydWN0IGRzYV9wb3J0YCBpcyBhY3R1YWxseSBkZWZpbmVkLCBhbmQgYW55IHJlbGF0ZWQgdHlwZWRlZnMuIEEgcXVpY2sgc2VhcmNoIGZvciB0aGUgZGVjbGFyYXRpb24gbWlnaHQgZXZlbiBsZWFkIG1lIHRvIHRoZSBhbGxvY2F0aW9uLgoqICAgKipJbml0aWFsaXphdGlvbiBGdW5jdGlvbnM6KiogVGhlbiBJJiMzOTtsbCBsb29rIGZvciBhbnkgbGlrZWx5IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHdpdGhpbiB0aGUgRFNBIHN1YnN5c3RlbS4gVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgdGhlIGxpa2VseSBwbGFjZXMgdGhhdCBhIHN0cnVjdCB3b3VsZCBiZSBhbGxvY2F0ZWQuIENvbW1vbiBuYW1pbmcgY29udmVudGlvbnMgbGlrZSBgZHNhX3BvcnRfYWxsb2NgLCBgZHNhX3BvcnRfaW5pdGAsIG9yIHNpbWlsYXIuCiogICAqKkRTQSBEcml2ZXJzOioqIFRoZSBkZXZpY2UgZHJpdmVycyB0aGVtc2VsdmVzIGFyZSBhIGdvb2QgYmV0LiBPZnRlbiwgdGhlIGFsbG9jYXRpb24gaGFwcGVucyBkdXJpbmcgZGV2aWNlIHJlZ2lzdHJhdGlvbiBvciBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgcGF5IHNwZWNpZmljIGF0dGVudGlvbiB0byB0aGUgZHJpdmVycyBmb3IgdmFyaW91cyBEU0Egc3dpdGNoZXMgYW5kIHBvcnRzLgoKSSYjMzk7bGwga2VlcCBhIHNoYXJwIGV5ZSBvdXQgZm9yIGluZGlyZWN0IGFsbG9jYXRpb25zIHRvby4gRm9yIGV4YW1wbGUsIGlzIGl0IGEgbWVtYmVyIG9mIGEgbGFyZ2VyIGBzdHJ1Y3QgZHNhX3N3aXRjaGA/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhbm90aGVyIHN0cnVjdHVyZSwgd2hpY2ggaXMgYWxsb2NhdGVkLCBhbmQgdGhlIGBkc2FfcG9ydGAgaXMgZW1iZWRkZWQgc29tZWhvdz8KCkkmIzM5O20gbWVudGFsbHkgcmVhZHkgdG8gZGl2ZSBkZWVwIGludG8gdGhlIHNvdXJjZSBjb2RlLCB0cmFjZSBjYWxscywgYW5kIGZvbGxvdyBhbnkgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBoYXZlIGEgZmVlbGluZyB0aGUgYW5zd2VyJiMzOTtzIHNvbWV3aGVyZSBidXJpZWQgaW5zaWRlIGFuIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZHNhX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjAyNyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L2RzYS9jb25kdWl0LmM9MjA9c3RhdGljIGludCBkc2FfY29uZHVpdF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9kc2EvY29uZHVpdC5jLTIxLXtcbm5ldC9kc2EvY29uZHVpdC5jOjIyOlx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTIzLVx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXHUwMDNlb3JpZ19ldGh0b29sX29wcztcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz00OT1zdGF0aWMgdm9pZCBkc2FfY29uZHVpdF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTUxLXtcbm5ldC9kc2EvY29uZHVpdC5jOjUyOlx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTUzLVx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXHUwMDNlb3JpZ19ldGh0b29sX29wcztcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz0xMDI9c3RhdGljIHZvaWQgZHNhX2NvbmR1aXRfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYy0xMDUte1xubmV0L2RzYS9jb25kdWl0LmM6MTA2Olx0c3RydWN0IGRzYV9wb3J0ICpkcCwgKmNwdV9kcCA9IGRldi1cdTAwM2Vkc2FfcHRyO1xubmV0L2RzYS9jb25kdWl0LmMtMTA3LVx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXHUwMDNlb3JpZ19ldGh0b29sX29wcztcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz0xMjk9c3RhdGljIHZvaWQgZHNhX2NvbmR1aXRfZ2V0X2V0aHRvb2xfcGh5X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2RzYS9jb25kdWl0LmMtMTMyLXtcbm5ldC9kc2EvY29uZHVpdC5jOjEzMzpcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVx1MDAzZWRzYV9wdHI7XG5uZXQvZHNhL2NvbmR1aXQuYy0xMzQtXHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGNwdV9kcC1cdTAwM2VvcmlnX2V0aHRvb2xfb3BzO1xuLS1cbm5ldC9kc2EvY29uZHVpdC5jPTE2Mj1zdGF0aWMgaW50IGRzYV9jb25kdWl0X2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KVxubmV0L2RzYS9jb25kdWl0LmMtMTYzLXtcbm5ldC9kc2EvY29uZHVpdC5jOjE2NDpcdHN0cnVjdCBkc2FfcG9ydCAqZHAsICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTE2NS1cdGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gY3B1X2RwLVx1MDAzZW9yaWdfZXRodG9vbF9vcHM7XG4tLVxubmV0L2RzYS9jb25kdWl0LmM9MjIyPXN0YXRpYyB2b2lkIGRzYV9jb25kdWl0X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsXG4tLVxubmV0L2RzYS9jb25kdWl0LmMtMjI0LXtcbm5ldC9kc2EvY29uZHVpdC5jOjIyNTpcdHN0cnVjdCBkc2FfcG9ydCAqZHAsICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTIyNi1cdGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gY3B1X2RwLVx1MDAzZW9yaWdfZXRodG9vbF9vcHM7XG4tLVxubmV0L2RzYS9jb25kdWl0LmM9MjYxPWludCBfX2RzYV9jb25kdWl0X2h3dHN0YW1wX3ZhbGlkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2RzYS9jb25kdWl0LmMtMjY0LXtcbm5ldC9kc2EvY29uZHVpdC5jOjI2NTpcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVx1MDAzZWRzYV9wdHI7XG5uZXQvZHNhL2NvbmR1aXQuYy0yNjYtXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBjcHVfZHAtXHUwMDNlZHM7XG5uZXQvZHNhL2NvbmR1aXQuYy0yNjctXHRzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3Q7XG5uZXQvZHNhL2NvbmR1aXQuYzoyNjg6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9jb25kdWl0LmMtMjY5LVxuLS1cbm5ldC9kc2EvY29uZHVpdC5jPTI4Mz1zdGF0aWMgaW50IGRzYV9jb25kdWl0X2V0aHRvb2xfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9kc2EvY29uZHVpdC5jLTI4NC17XG5uZXQvZHNhL2NvbmR1aXQuYzoyODU6XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRldi1cdTAwM2Vkc2FfcHRyO1xubmV0L2RzYS9jb25kdWl0LmMtMjg2LVx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gY3B1X2RwLVx1MDAzZWRzO1xuLS1cbm5ldC9kc2EvY29uZHVpdC5jPTMxMj1zdGF0aWMgdm9pZCBkc2FfY29uZHVpdF9ldGh0b29sX3RlYXJkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvZHNhL2NvbmR1aXQuYy0zMTMte1xubmV0L2RzYS9jb25kdWl0LmM6MzE0Olx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTMxNS1cbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz0zNDA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTM0My1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGQpO1xubmV0L2RzYS9jb25kdWl0LmM6MzQ0Olx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTM0NS1cbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz0zNTA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYy0zNTUtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihkKTtcbm5ldC9kc2EvY29uZHVpdC5jOjM1NjpcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVx1MDAzZWRzYV9wdHI7XG5uZXQvZHNhL2NvbmR1aXQuYy0zNTctXHRzaXplX3QgbGVuID0gZW5kIC0gYnVmO1xuLS1cbm5ldC9kc2EvY29uZHVpdC5jPTQwOT1zdGF0aWMgdm9pZCBkc2FfY29uZHVpdF9yZXNldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYy00MTgtXG5uZXQvZHNhL2NvbmR1aXQuYzo0MTk6aW50IGRzYV9jb25kdWl0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwKVxubmV0L2RzYS9jb25kdWl0LmMtNDIwLXtcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz00NzQ9dm9pZCBkc2FfY29uZHVpdF90ZWFyZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTQ4OS1cbm5ldC9kc2EvY29uZHVpdC5jOjQ5MDppbnQgZHNhX2NvbmR1aXRfbGFnX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpsYWdfZGV2LCBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCxcbm5ldC9kc2EvY29uZHVpdC5jLTQ5MS1cdFx0XHQgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKnVpbmZvLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jPTUyMj12b2lkIGRzYV9jb25kdWl0X2xhZ190ZWFyZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqbGFnX2Rldixcbm5ldC9kc2EvY29uZHVpdC5jOjUyMzpcdFx0XHQgICAgICBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcClcbm5ldC9kc2EvY29uZHVpdC5jLTUyNC17XG4tLVxubmV0L2RzYS9jb25kdWl0LmgtNS1cbm5ldC9kc2EvY29uZHVpdC5oOjY6c3RydWN0IGRzYV9wb3J0O1xubmV0L2RzYS9jb25kdWl0LmgtNy1zdHJ1Y3QgbmV0X2RldmljZTtcbi0tXG5uZXQvZHNhL2NvbmR1aXQuaD05PXN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7XG5uZXQvZHNhL2NvbmR1aXQuaC0xMC1cbm5ldC9kc2EvY29uZHVpdC5oOjExOmludCBkc2FfY29uZHVpdF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCk7XG5uZXQvZHNhL2NvbmR1aXQuaC0xMi12b2lkIGRzYV9jb25kdWl0X3RlYXJkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L2RzYS9jb25kdWl0Lmg6MTM6aW50IGRzYV9jb25kdWl0X2xhZ19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbGFnX2Rldiwgc3RydWN0IGRzYV9wb3J0ICpjcHVfZHAsXG5uZXQvZHNhL2NvbmR1aXQuaC0xNC1cdFx0XHQgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKnVpbmZvLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5oPTE2PXZvaWQgZHNhX2NvbmR1aXRfbGFnX3RlYXJkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpsYWdfZGV2LFxubmV0L2RzYS9jb25kdWl0Lmg6MTc6XHRcdFx0ICAgICAgc3RydWN0IGRzYV9wb3J0ICpjcHVfZHApO1xubmV0L2RzYS9jb25kdWl0LmgtMTgtaW50IF9fZHNhX2NvbmR1aXRfaHd0c3RhbXBfdmFsaWRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZHNhL2RldmxpbmsuYz0yODM9ZHNhX2RldmxpbmtfcG9ydF9yZWdpb25fY3JlYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbi0tXG5uZXQvZHNhL2RldmxpbmsuYy0yODcte1xubmV0L2RzYS9kZXZsaW5rLmM6Mjg4Olx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbm5ldC9kc2EvZGV2bGluay5jLTI4OS1cbi0tXG5uZXQvZHNhL2RldmxpbmsuYz0zMDA9RVhQT1JUX1NZTUJPTF9HUEwoZHNhX2RldmxpbmtfcmVnaW9uX2Rlc3Ryb3kpO1xubmV0L2RzYS9kZXZsaW5rLmMtMzAxLVxubmV0L2RzYS9kZXZsaW5rLmM6MzAyOmludCBkc2FfcG9ydF9kZXZsaW5rX3NldHVwKHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL2RldmxpbmsuYy0zMDMte1xuLS1cbm5ldC9kc2EvZGV2bGluay5jLTM1NC1cbm5ldC9kc2EvZGV2bGluay5jOjM1NTp2b2lkIGRzYV9wb3J0X2RldmxpbmtfdGVhcmRvd24oc3RydWN0IGRzYV9wb3J0ICpkcClcbm5ldC9kc2EvZGV2bGluay5jLTM1Ni17XG4tLVxubmV0L2RzYS9kZXZsaW5rLmgtNS1cbm5ldC9kc2EvZGV2bGluay5oOjY6c3RydWN0IGRzYV9wb3J0O1xubmV0L2RzYS9kZXZsaW5rLmgtNy1zdHJ1Y3QgZHNhX3N3aXRjaDtcbm5ldC9kc2EvZGV2bGluay5oLTgtXG5uZXQvZHNhL2RldmxpbmsuaDo5OmludCBkc2FfcG9ydF9kZXZsaW5rX3NldHVwKHN0cnVjdCBkc2FfcG9ydCAqZHApO1xubmV0L2RzYS9kZXZsaW5rLmg6MTA6dm9pZCBkc2FfcG9ydF9kZXZsaW5rX3RlYXJkb3duKHN0cnVjdCBkc2FfcG9ydCAqZHApO1xubmV0L2RzYS9kZXZsaW5rLmgtMTEtdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbi0tXG5uZXQvZHNhL2RzYS5jPTEwNj1zdHJ1Y3QgZHNhX2xhZyAqZHNhX3RyZWVfbGFnX2ZpbmQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTA4LXtcbm5ldC9kc2EvZHNhLmM6MTA5Olx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtMTEwLVxuLS1cbm5ldC9kc2EvZHNhLmM9MTE4PXN0cnVjdCBkc2FfYnJpZGdlICpkc2FfdHJlZV9icmlkZ2VfZmluZChzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXG4tLVxubmV0L2RzYS9kc2EuYy0xMjAte1xubmV0L2RzYS9kc2EuYzoxMjE6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9kc2EuYy0xMjItXG4tLVxubmV0L2RzYS9kc2EuYz0xODE9c3RydWN0IGRzYV9zd2l0Y2ggKmRzYV9zd2l0Y2hfZmluZChpbnQgdHJlZV9pbmRleCwgaW50IHN3X2luZGV4KVxuLS1cbm5ldC9kc2EvZHNhLmMtMTgzLVx0c3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0O1xubmV0L2RzYS9kc2EuYzoxODQ6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9kc2EuYy0xODUtXG4tLVxubmV0L2RzYS9kc2EuYz0yNzE9c3RhdGljIHZvaWQgZHNhX3RyZWVfcHV0KHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcbi0tXG5uZXQvZHNhL2RzYS5jLTI3Ni1cbm5ldC9kc2EvZHNhLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgZHNhX3BvcnQgKmRzYV90cmVlX2ZpbmRfcG9ydF9ieV9ub2RlKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbm5ldC9kc2EvZHNhLmMtMjc4LVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pXG5uZXQvZHNhL2RzYS5jLTI3OS17XG5uZXQvZHNhL2RzYS5jOjI4MDpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTI4MS1cbi0tXG5uZXQvZHNhL2RzYS5jLTI4OC1cbm5ldC9kc2EvZHNhLmM6Mjg5OnN0YXRpYyBzdHJ1Y3QgZHNhX2xpbmsgKmRzYV9saW5rX3RvdWNoKHN0cnVjdCBkc2FfcG9ydCAqZHAsXG5uZXQvZHNhL2RzYS5jOjI5MDpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZHNhX3BvcnQgKmxpbmtfZHApXG5uZXQvZHNhL2RzYS5jLTI5MS17XG4tLVxubmV0L2RzYS9kc2EuYy0zMTQtXG5uZXQvZHNhL2RzYS5jOjMxNTpzdGF0aWMgYm9vbCBkc2FfcG9ydF9zZXR1cF9yb3V0aW5nX3RhYmxlKHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL2RzYS5jLTMxNi17XG4tLVxubmV0L2RzYS9kc2EuYy0zMjAtXHRzdHJ1Y3Qgb2ZfcGhhbmRsZV9pdGVyYXRvciBpdDtcbm5ldC9kc2EvZHNhLmM6MzIxOlx0c3RydWN0IGRzYV9wb3J0ICpsaW5rX2RwO1xubmV0L2RzYS9kc2EuYy0zMjItXHRzdHJ1Y3QgZHNhX2xpbmsgKmRsO1xuLS1cbm5ldC9kc2EvZHNhLmM9MzQyPXN0YXRpYyBib29sIGRzYV90cmVlX3NldHVwX3JvdXRpbmdfdGFibGUoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxuLS1cbm5ldC9kc2EvZHNhLmMtMzQ0LVx0Ym9vbCBjb21wbGV0ZSA9IHRydWU7XG5uZXQvZHNhL2RzYS5jOjM0NTpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTM0Ni1cbi0tXG5uZXQvZHNhL2RzYS5jLTM1Ny1cbm5ldC9kc2EvZHNhLmM6MzU4OnN0YXRpYyBzdHJ1Y3QgZHNhX3BvcnQgKmRzYV90cmVlX2ZpbmRfZmlyc3RfY3B1KHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcbm5ldC9kc2EvZHNhLmMtMzU5LXtcbm5ldC9kc2EvZHNhLmM6MzYwOlx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtMzYxLVxuLS1cbm5ldC9kc2EvZHNhLmM9MzY5PXN0cnVjdCBuZXRfZGV2aWNlICpkc2FfdHJlZV9maW5kX2ZpcnN0X2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxubmV0L2RzYS9kc2EuYy0zNzAte1xubmV0L2RzYS9kc2EuYzozNzE6XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcbm5ldC9kc2EvZHNhLmMtMzcyLVxuLS1cbm5ldC9kc2EvZHNhLmM9MzgwPXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfZGVmYXVsdF9jcHUoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxubmV0L2RzYS9kc2EuYy0zODEte1xubmV0L2RzYS9kc2EuYzozODI6XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCwgKmRwO1xubmV0L2RzYS9kc2EuYy0zODMtXG4tLVxubmV0L2RzYS9kc2EuYy00MDAtXG5uZXQvZHNhL2RzYS5jOjQwMTpzdGF0aWMgc3RydWN0IGRzYV9wb3J0ICpcbm5ldC9kc2EvZHNhLmMtNDAyLWRzYV9zd2l0Y2hfcHJlZmVycmVkX2RlZmF1bHRfbG9jYWxfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxubmV0L2RzYS9kc2EuYy00MDMte1xubmV0L2RzYS9kc2EuYzo0MDQ6XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcbm5ldC9kc2EvZHNhLmMtNDA1LVxuLS1cbm5ldC9kc2EvZHNhLmM9NDI0PXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfY3B1X3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcbm5ldC9kc2EvZHNhLmMtNDI1LXtcbm5ldC9kc2EvZHNhLmM6NDI2Olx0c3RydWN0IGRzYV9wb3J0ICpwcmVmZXJyZWRfY3B1X2RwLCAqY3B1X2RwLCAqZHA7XG5uZXQvZHNhL2RzYS5jLTQyNy1cbi0tXG5uZXQvZHNhL2RzYS5jPTQ1MD1zdGF0aWMgdm9pZCBkc2FfdHJlZV90ZWFyZG93bl9jcHVfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxubmV0L2RzYS9kc2EuYy00NTEte1xubmV0L2RzYS9kc2EuYzo0NTI6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9kc2EuYy00NTMtXG4tLVxubmV0L2RzYS9kc2EuYy00NTgtXG5uZXQvZHNhL2RzYS5jOjQ1OTpzdGF0aWMgaW50IGRzYV9wb3J0X3NldHVwKHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL2RzYS5jLTQ2MC17XG4tLVxubmV0L2RzYS9kc2EuYy01MzItXG5uZXQvZHNhL2RzYS5jOjUzMzpzdGF0aWMgdm9pZCBkc2FfcG9ydF90ZWFyZG93bihzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxubmV0L2RzYS9kc2EuYy01MzQte1xuLS1cbm5ldC9kc2EvZHNhLmMtNTYzLVxubmV0L2RzYS9kc2EuYzo1NjQ6c3RhdGljIGludCBkc2FfcG9ydF9zZXR1cF9hc191bnVzZWQoc3RydWN0IGRzYV9wb3J0ICpkcClcbm5ldC9kc2EvZHNhLmMtNTY1LXtcbi0tXG5uZXQvZHNhL2RzYS5jPTcxNT1zdGF0aWMgdm9pZCBkc2FfdHJlZV90ZWFyZG93bl9wb3J0cyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXG5uZXQvZHNhL2RzYS5jLTcxNi17XG5uZXQvZHNhL2RzYS5jOjcxNzpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTcxOC1cbi0tXG5uZXQvZHNhL2RzYS5jPTczMD1zdGF0aWMgdm9pZCBkc2FfdHJlZV90ZWFyZG93bl9zd2l0Y2hlcyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXG5uZXQvZHNhL2RzYS5jLTczMS17XG5uZXQvZHNhL2RzYS5jOjczMjpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTczMy1cbi0tXG5uZXQvZHNhL2RzYS5jPTczOT1zdGF0aWMgaW50IGRzYV90cmVlX3NldHVwX3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcbm5ldC9kc2EvZHNhLmMtNzQwLXtcbm5ldC9kc2EvZHNhLmM6NzQxOlx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtNzQyLVx0aW50IGVyciA9IDA7XG4tLVxubmV0L2RzYS9kc2EuYz03NzE9c3RhdGljIGludCBkc2FfdHJlZV9zZXR1cF9zd2l0Y2hlcyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXG5uZXQvZHNhL2RzYS5jLTc3Mi17XG5uZXQvZHNhL2RzYS5jOjc3MzpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTc3NC1cdGludCBlcnIgPSAwO1xuLS1cbm5ldC9kc2EvZHNhLmM9Nzg3PXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfY29uZHVpdChzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXG5uZXQvZHNhL2RzYS5jLTc4OC17XG5uZXQvZHNhL2RzYS5jOjc4OTpcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xubmV0L2RzYS9kc2EuYy03OTAtXHRpbnQgZXJyID0gMDtcbi0tXG5uZXQvZHNhL2RzYS5jPTgxND1zdGF0aWMgdm9pZCBkc2FfdHJlZV90ZWFyZG93bl9jb25kdWl0KHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcbm5ldC9kc2EvZHNhLmMtODE1LXtcbm5ldC9kc2EvZHNhLmM6ODE2Olx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHA7XG5uZXQvZHNhL2RzYS5jLTgxNy1cbi0tXG5uZXQvZHNhL2RzYS5jPTgzNT1zdGF0aWMgaW50IGRzYV90cmVlX3NldHVwX2xhZ3Moc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxuLS1cbm5ldC9kc2EvZHNhLmMtODM3LVx0dW5zaWduZWQgaW50IGxlbiA9IDA7XG5uZXQvZHNhL2RzYS5jOjgzODpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTgzOS1cbi0tXG5uZXQvZHNhL2RzYS5jPTk4Mz1pbnQgZHNhX3RyZWVfY2hhbmdlX3RhZ19wcm90byhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXG4tLVxubmV0L2RzYS9kc2EuYy05ODctXHRzdHJ1Y3QgZHNhX25vdGlmaWVyX3RhZ19wcm90b19pbmZvIGluZm87XG5uZXQvZHNhL2RzYS5jOjk4ODpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTk4OS1cdGludCBlcnIgPSAtRUJVU1k7XG4tLVxubmV0L2RzYS9kc2EuYz0xMDI5PXN0YXRpYyB2b2lkIGRzYV90cmVlX2NvbmR1aXRfc3RhdGVfY2hhbmdlKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbi0tXG5uZXQvZHNhL2RzYS5jLTEwMzItXHRzdHJ1Y3QgZHNhX25vdGlmaWVyX2NvbmR1aXRfc3RhdGVfaW5mbyBpbmZvO1xubmV0L2RzYS9kc2EuYzoxMDMzOlx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBjb25kdWl0LVx1MDAzZWRzYV9wdHI7XG5uZXQvZHNhL2RzYS5jLTEwMzQtXG4tLVxubmV0L2RzYS9kc2EuYz0xMDQxPXZvaWQgZHNhX3RyZWVfY29uZHVpdF9hZG1pbl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTA0NC17XG5uZXQvZHNhL2RzYS5jOjEwNDU6XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGNvbmR1aXQtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvZHNhLmMtMTA0Ni1cdGJvb2wgbm90aWZ5ID0gZmFsc2U7XG4tLVxubmV0L2RzYS9kc2EuYz0xMDY0PXZvaWQgZHNhX3RyZWVfY29uZHVpdF9vcGVyX3N0YXRlX2NoYW5nZShzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXG4tLVxubmV0L2RzYS9kc2EuYy0xMDY3LXtcbm5ldC9kc2EvZHNhLmM6MTA2ODpcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gY29uZHVpdC1cdTAwM2Vkc2FfcHRyO1xubmV0L2RzYS9kc2EuYy0xMDY5LVx0Ym9vbCBub3RpZnkgPSBmYWxzZTtcbi0tXG5uZXQvZHNhL2RzYS5jLTEwODYtXG5uZXQvZHNhL2RzYS5jOjEwODc6c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqZHNhX3BvcnRfdG91Y2goc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgaW5kZXgpXG5uZXQvZHNhL2RzYS5jLTEwODgte1xubmV0L2RzYS9kc2EuYy0xMDg5LVx0c3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHMtXHUwMDNlZHN0O1xubmV0L2RzYS9kc2EuYzoxMDkwOlx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtMTA5MS1cbi0tXG5uZXQvZHNhL2RzYS5jLTExMTMtXG5uZXQvZHNhL2RzYS5jOjExMTQ6c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV91c2VyKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGNvbnN0IGNoYXIgKm5hbWUpXG5uZXQvZHNhL2RzYS5jLTExMTUte1xuLS1cbm5ldC9kc2EvZHNhLmMtMTEyMS1cbm5ldC9kc2EvZHNhLmM6MTEyMjpzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2RzYShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxubmV0L2RzYS9kc2EuYy0xMTIzLXtcbi0tXG5uZXQvZHNhL2RzYS5jLTExMjgtXG5uZXQvZHNhL2RzYS5jOjExMjk6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBkc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS9kc2EuYy0xMTMwLVx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQpXG4tLVxubmV0L2RzYS9kc2EuYy0xMTM0LVx0dW5zaWduZWQgaW50IG1kcF91cHN0cmVhbTtcbm5ldC9kc2EvZHNhLmM6MTEzNTpcdHN0cnVjdCBkc2FfcG9ydCAqbWRwO1xubmV0L2RzYS9kc2EuYy0xMTM2LVxuLS1cbm5ldC9kc2EvZHNhLmMtMTE1NC1cbm5ldC9kc2EvZHNhLmM6MTE1NTpzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2NwdShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcbm5ldC9kc2EvZHNhLmMtMTE1Ni1cdFx0XHQgICAgICBjb25zdCBjaGFyICp1c2VyX3Byb3RvY29sKVxuLS1cbm5ldC9kc2EvZHNhLmMtMTIzOS1cbm5ldC9kc2EvZHNhLmM6MTI0MDpzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX29mKHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pXG5uZXQvZHNhL2RzYS5jLTEyNDEte1xuLS1cbm5ldC9kc2EvZHNhLmM9MTI3OD1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfcGFyc2VfcG9ydHNfb2Yoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbm5ldC9kc2EvZHNhLmMtMTI4MS1cdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydHMsICpwb3J0O1xubmV0L2RzYS9kc2EuYzoxMjgyOlx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtMTI4My1cdGludCBlcnIgPSAwO1xuLS1cbm5ldC9kc2EvZHNhLmM9MTM1NT1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfdG91Y2hfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxubmV0L2RzYS9kc2EuYy0xMzU2LXtcbm5ldC9kc2EvZHNhLmM6MTM1NzpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTEzNTgtXHRpbnQgcG9ydDtcbi0tXG5uZXQvZHNhL2RzYS5jPTEzOTI9c3RhdGljIHN0cnVjdCBkZXZpY2UgKmRldl9maW5kX2NsYXNzKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgY2hhciAqY2xhc3MpXG4tLVxubmV0L2RzYS9kc2EuYy0xNDAxLVxubmV0L2RzYS9kc2EuYzoxNDAyOnN0YXRpYyBpbnQgZHNhX3BvcnRfcGFyc2Uoc3RydWN0IGRzYV9wb3J0ICpkcCwgY29uc3QgY2hhciAqbmFtZSxcbm5ldC9kc2EvZHNhLmMtMTQwMy1cdFx0XHQgIHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5uZXQvZHNhL2RzYS5jPTE0MzQ9c3RhdGljIGludCBkc2Ffc3dpdGNoX3BhcnNlX3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbi0tXG5uZXQvZHNhL2RzYS5jLTE0MzctXHRib29sIHZhbGlkX25hbWVfZm91bmQgPSBmYWxzZTtcbm5ldC9kc2EvZHNhLmM6MTQzODpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTE0MzktXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4tLVxubmV0L2RzYS9kc2EuYz0xNDg2PXN0YXRpYyB2b2lkIGRzYV9zd2l0Y2hfcmVsZWFzZV9wb3J0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxubmV0L2RzYS9kc2EuYy0xNDg4LVx0c3RydWN0IGRzYV9tYWNfYWRkciAqYSwgKnRtcDtcbm5ldC9kc2EvZHNhLmM6MTQ4OTpcdHN0cnVjdCBkc2FfcG9ydCAqZHAsICpuZXh0O1xubmV0L2RzYS9kc2EuYy0xNDkwLVx0c3RydWN0IGRzYV92bGFuICp2LCAqbjtcbi0tXG5uZXQvZHNhL2RzYS5jPTE2MTE9dm9pZCBkc2Ffc3dpdGNoX3NodXRkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5uZXQvZHNhL2RzYS5jLTE2MTQtXHRMSVNUX0hFQUQoY2xvc2VfbGlzdCk7XG5uZXQvZHNhL2RzYS5jOjE2MTU6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9kc2EuYy0xNjE2LVxuLS1cbm5ldC9kc2EvZHNhLmM9MTY2Mj1FWFBPUlRfU1lNQk9MX0dQTChkc2Ffc3dpdGNoX3NodXRkb3duKTtcbi0tXG5uZXQvZHNhL2RzYS5jLTE2NjQtI2lmZGVmIENPTkZJR19QTV9TTEVFUFxubmV0L2RzYS9kc2EuYzoxNjY1OnN0YXRpYyBib29sIGRzYV9wb3J0X2lzX2luaXRpYWxpemVkKGNvbnN0IHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL2RzYS5jLTE2NjYte1xuLS1cbm5ldC9kc2EvZHNhLmM9MTY3MD1pbnQgZHNhX3N3aXRjaF9zdXNwZW5kKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbm5ldC9kc2EvZHNhLmMtMTY3MS17XG5uZXQvZHNhL2RzYS5jOjE2NzI6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9kc2EuYy0xNjczLVx0aW50IHJldCA9IDA7XG4tLVxubmV0L2RzYS9kc2EuYz0xNjkyPWludCBkc2Ffc3dpdGNoX3Jlc3VtZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5uZXQvZHNhL2RzYS5jLTE2OTMte1xubmV0L2RzYS9kc2EuYzoxNjk0Olx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtMTY5NS1cdGludCByZXQgPSAwO1xuLS1cbm5ldC9kc2EvZHNhLmM9MTcxNT1FWFBPUlRfU1lNQk9MX0dQTChkc2Ffc3dpdGNoX3Jlc3VtZSk7XG4tLVxubmV0L2RzYS9kc2EuYy0xNzE3LVxubmV0L2RzYS9kc2EuYzoxNzE4OnN0cnVjdCBkc2FfcG9ydCAqZHNhX3BvcnRfZnJvbV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbm5ldC9kc2EvZHNhLmMtMTcxOS17XG4tLVxubmV0L2RzYS9kc2EuYz0xNzQ1PWJvb2wgZHNhX2ZkYl9wcmVzZW50X2luX290aGVyX2RiKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxubmV0L2RzYS9kc2EuYy0xNzQ4LXtcbm5ldC9kc2EvZHNhLmM6MTc0OTpcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG5uZXQvZHNhL2RzYS5jLTE3NTAtXHRzdHJ1Y3QgZHNhX21hY19hZGRyICphO1xuLS1cbm5ldC9kc2EvZHNhLmM9MTc2Nj1ib29sIGRzYV9tZGJfcHJlc2VudF9pbl9vdGhlcl9kYihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTc2OS17XG5uZXQvZHNhL2RzYS5jOjE3NzA6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xubmV0L2RzYS9kc2EuYy0xNzcxLVx0c3RydWN0IGRzYV9tYWNfYWRkciAqYTtcbi0tXG5uZXQvZHNhL2RzYS5jPTE4MTE9aW50IGRzYV9wb3J0X3NpbXBsZV9oc3Jfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTgxNC17XG5uZXQvZHNhL2RzYS5jOjE4MTU6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpLCAqb3RoZXJfZHA7XG5uZXQvZHNhL2RzYS5jLTE4MTYtXHRpbnQgZXJyO1xuLS1cbm5ldC9kc2EvZHNhLmM9MTgzND1pbnQgZHNhX3BvcnRfc2ltcGxlX2hzcl9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTgzNi17XG5uZXQvZHNhL2RzYS5jOjE4Mzc6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpLCAqb3RoZXJfZHA7XG5uZXQvZHNhL2RzYS5jLTE4MzgtXG4tLVxubmV0L2RzYS9uZXRsaW5rLmM9NTU9c3RydWN0IHJ0bmxfbGlua19vcHMgZHNhX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvZHNhL25ldGxpbmsuYy01Ni1cdC5raW5kXHRcdFx0PSBcJiMzNDtkc2FcJiMzNDssXG5uZXQvZHNhL25ldGxpbmsuYzo1NzpcdC5wcml2X3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IGRzYV9wb3J0KSxcbm5ldC9kc2EvbmV0bGluay5jLTU4LVx0Lm1heHR5cGVcdFx0PSBJRkxBX0RTQV9NQVgsXG4tLVxubmV0L2RzYS9wb3J0LmMtMzItICovXG5uZXQvZHNhL3BvcnQuYzozMzpzdGF0aWMgaW50IGRzYV9wb3J0X25vdGlmeShjb25zdCBzdHJ1Y3QgZHNhX3BvcnQgKmRwLCB1bnNpZ25lZCBsb25nIGUsIHZvaWQgKnYpXG5uZXQvZHNhL3BvcnQuYy0zNC17XG4tLVxubmV0L2RzYS9wb3J0LmMtMzctXG5uZXQvZHNhL3BvcnQuYzozODpzdGF0aWMgdm9pZCBkc2FfcG9ydF9ub3RpZnlfYnJpZGdlX2ZkYl9mbHVzaChjb25zdCBzdHJ1Y3QgZHNhX3BvcnQgKmRwLCB1MTYgdmlkKVxubmV0L2RzYS9wb3J0LmMtMzkte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTU0LVxubmV0L2RzYS9wb3J0LmM6NTU6c3RhdGljIHZvaWQgZHNhX3BvcnRfZmFzdF9hZ2UoY29uc3Qgc3RydWN0IGRzYV9wb3J0ICpkcClcbm5ldC9kc2EvcG9ydC5jLTU2LXtcbi0tXG5uZXQvZHNhL3BvcnQuYy02Ny1cbm5ldC9kc2EvcG9ydC5jOjY4OnN0YXRpYyBpbnQgZHNhX3BvcnRfdmxhbl9mYXN0X2FnZShjb25zdCBzdHJ1Y3QgZHNhX3BvcnQgKmRwLCB1MTYgdmlkKVxubmV0L2RzYS9wb3J0LmMtNjkte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTgzLVxubmV0L2RzYS9wb3J0LmM6ODQ6c3RhdGljIGludCBkc2FfcG9ydF9tc3RpX2Zhc3RfYWdlKGNvbnN0IHN0cnVjdCBkc2FfcG9ydCAqZHAsIHUxNiBtc3RpKVxubmV0L2RzYS9wb3J0LmMtODUte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTEwMS1cbm5ldC9kc2EvcG9ydC5jOjEwMjpzdGF0aWMgYm9vbCBkc2FfcG9ydF9jYW5fY29uZmlndXJlX2xlYXJuaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL3BvcnQuYy0xMDMte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTExNi1cbm5ldC9kc2EvcG9ydC5jOjExNzpib29sIGRzYV9wb3J0X3N1cHBvcnRzX2h3dHN0YW1wKHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL3BvcnQuYy0xMTgte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTEzMC1cbm5ldC9kc2EvcG9ydC5jOjEzMTppbnQgZHNhX3BvcnRfc2V0X3N0YXRlKHN0cnVjdCBkc2FfcG9ydCAqZHAsIHU4IHN0YXRlLCBib29sIGRvX2Zhc3RfYWdlKVxubmV0L2RzYS9wb3J0LmMtMTMyLXtcbi0tXG5uZXQvZHNhL3BvcnQuYy0xNjMtXG5uZXQvZHNhL3BvcnQuYzoxNjQ6c3RhdGljIHZvaWQgZHNhX3BvcnRfc2V0X3N0YXRlX25vdyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLCB1OCBzdGF0ZSxcbm5ldC9kc2EvcG9ydC5jLTE2NS1cdFx0XHRcdCAgIGJvb2wgZG9fZmFzdF9hZ2UpXG4tLVxubmV0L2RzYS9wb3J0LmMtMTc2LVxubmV0L2RzYS9wb3J0LmM6MTc3OmludCBkc2FfcG9ydF9zZXRfbXN0X3N0YXRlKHN0cnVjdCBkc2FfcG9ydCAqZHAsXG5uZXQvZHNhL3BvcnQuYy0xNzgtXHRcdFx0ICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9tc3Rfc3RhdGUgKnN0YXRlLFxuLS1cbm5ldC9kc2EvcG9ydC5jLTIxMi1cbm5ldC9kc2EvcG9ydC5jOjIxMzppbnQgZHNhX3BvcnRfZW5hYmxlX3J0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG5uZXQvZHNhL3BvcnQuYy0yMTQte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTIzMy1cbm5ldC9kc2EvcG9ydC5jOjIzNDppbnQgZHNhX3BvcnRfZW5hYmxlKHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG5uZXQvZHNhL3BvcnQuYy0yMzUte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTI0NC1cbm5ldC9kc2EvcG9ydC5jOjI0NTp2b2lkIGRzYV9wb3J0X2Rpc2FibGVfcnQoc3RydWN0IGRzYV9wb3J0ICpkcClcbm5ldC9kc2EvcG9ydC5jLTI0Ni17XG4tLVxubmV0L2RzYS9wb3J0LmMtMjU5LVxubmV0L2RzYS9wb3J0LmM6MjYwOnZvaWQgZHNhX3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxubmV0L2RzYS9wb3J0LmMtMjYxLXtcbi0tXG5uZXQvZHNhL3BvcnQuYy0yNjYtXG5uZXQvZHNhL3BvcnQuYzoyNjc6c3RhdGljIHZvaWQgZHNhX3BvcnRfcmVzZXRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCxcbm5ldC9kc2EvcG9ydC5jLTI2OC1cdFx0XHRcdFx0ICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXG4tLVxubmV0L2RzYS9wb3J0LmMtMjcyLVx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG5uZXQvZHNhL3BvcnQuYzoyNzM6XHRzdHJ1Y3QgZHNhX3BvcnQgKm90aGVyX2RwO1xubmV0L2RzYS9wb3J0LmMtMjc0LVx0Ym9vbCB2bGFuX2ZpbHRlcmluZztcbi0tXG5uZXQvZHNhL3BvcnQuYy0zMjAtXG5uZXQvZHNhL3BvcnQuYzozMjE6c3RhdGljIGludCBkc2FfcG9ydF9pbmhlcml0X2JycG9ydF9mbGFncyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS9wb3J0LmMtMzIyLVx0XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9kc2EvcG9ydC5jLTM0NC1cbm5ldC9kc2EvcG9ydC5jOjM0NTpzdGF0aWMgdm9pZCBkc2FfcG9ydF9jbGVhcl9icnBvcnRfZmxhZ3Moc3RydWN0IGRzYV9wb3J0ICpkcClcbm5ldC9kc2EvcG9ydC5jLTM0Ni17XG4tLVxubmV0L2RzYS9wb3J0LmMtMzY1LVxubmV0L2RzYS9wb3J0LmM6MzY2OnN0YXRpYyBpbnQgZHNhX3BvcnRfc3dpdGNoZGV2X3N5bmNfYXR0cnMoc3RydWN0IGRzYV9wb3J0ICpkcCxcbm5ldC9kc2EvcG9ydC5jLTM2Ny1cdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvZHNhL3BvcnQuYy0zOTEtXG5uZXQvZHNhL3BvcnQuYzozOTI6c3RhdGljIHZvaWQgZHNhX3BvcnRfc3dpdGNoZGV2X3Vuc3luY19hdHRycyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS9wb3J0LmMtMzkzLVx0XHRcdFx0XHQgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxuLS1cbm5ldC9kc2EvcG9ydC5jLTQxOS1cbm5ldC9kc2EvcG9ydC5jOjQyMDpzdGF0aWMgaW50IGRzYV9wb3J0X2JyaWRnZV9jcmVhdGUoc3RydWN0IGRzYV9wb3J0ICpkcCxcbm5ldC9kc2EvcG9ydC5jLTQyMS1cdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmJyLFxuLS1cbm5ldC9kc2EvcG9ydC5jLTQ1NC1cbm5ldC9kc2EvcG9ydC5jOjQ1NTpzdGF0aWMgdm9pZCBkc2FfcG9ydF9icmlkZ2VfZGVzdHJveShzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS9wb3J0LmMtNDU2LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicilcbi0tXG5uZXQvZHNhL3BvcnQuYy00NzAtXG5uZXQvZHNhL3BvcnQuYzo0NzE6c3RhdGljIGJvb2wgZHNhX3BvcnRfc3VwcG9ydHNfbXN0KHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL3BvcnQuYy00NzIte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTQ4MC1cbm5ldC9kc2EvcG9ydC5jOjQ4MTppbnQgZHNhX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJyLFxubmV0L2RzYS9wb3J0LmMtNDgyLVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2RzYS9wb3J0LmMtNTM2LVxubmV0L2RzYS9wb3J0LmM6NTM3OnZvaWQgZHNhX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqYnIpXG5uZXQvZHNhL3BvcnQuYy01Mzgte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTU1MS1cbm5ldC9kc2EvcG9ydC5jOjU1Mjp2b2lkIGRzYV9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqYnIpXG5uZXQvZHNhL3BvcnQuYy01NTMte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTU4MC1cbm5ldC9kc2EvcG9ydC5jOjU4MTppbnQgZHNhX3BvcnRfbGFnX2NoYW5nZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS9wb3J0LmMtNTgyLVx0XHRcdHN0cnVjdCBuZXRkZXZfbGFnX2xvd2VyX3N0YXRlX2luZm8gKmxpbmZvKVxuLS1cbm5ldC9kc2EvcG9ydC5jLTYwNi1cbm5ldC9kc2EvcG9ydC5jOjYwNzpzdGF0aWMgaW50IGRzYV9wb3J0X2xhZ19jcmVhdGUoc3RydWN0IGRzYV9wb3J0ICpkcCxcbm5ldC9kc2EvcG9ydC5jLTYwOC1cdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmxhZ19kZXYpXG4tLVxubmV0L2RzYS9wb3J0LmMtNjMzLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlOgoKKipEaXZpbmcgaW50byBgZHNhX3BvcnRfdG91Y2hgKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gYGRzYV9wb3J0X3RvdWNoYCB3aXRoaW4gYG5ldC9kc2EvZHNhLmNgLiBMZXQgbWUgZ2V0IHN0cmFpZ2h0IHRvIHRoZSBjb2RlIGFuZCBjaGVjayBvdXQgbGluZXMgMTA4MCB0byAxMTEwLiBGcm9tIHRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lIGFuZCBpdHMgbG9jYXRpb24gd2l0aGluIHRoZSBEU0EgZnJhbWV3b3JrLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgaW52b2x2ZWQgaW4gc29tZSBraW5kIG9mIGxvdy1sZXZlbCBwb3J0IGludGVyYWN0aW9uIG9yIG1heWJlIGNhY2hlIG1haW50ZW5hbmNlIGZvciBhIERTQSBzd2l0Y2guIEJhc2VkIG9uIHRoZSBuYW1lIEkgYmV0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBtYW5hZ2luZyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgcG9ydC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGFjZSwgYW5kIGhvdyB0aGUgbmV0d29yayBkZXZpY2UgaXMgdXBkYXRlZCBpZiB0aGVyZSBhcmUgYW55IHBvcnQgc3RhdGUgY2hhbmdlcy4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgcGFydHMgb2YgdGhhdCByb3V0aW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9kc2EvZHNhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcbjEwODE6XHRcdGNwdV9kcC1cdTAwM2Vjb25kdWl0X29wZXJfdXAgPSB1cDtcbjEwODI6XHRcbjEwODM6XHRcdGlmIChub3RpZnkpXG4xMDg0Olx0XHRcdGRzYV90cmVlX2NvbmR1aXRfc3RhdGVfY2hhbmdlKGRzdCwgY29uZHVpdCk7XG4xMDg1Olx0fVxuMTA4NjpcdFxuMTA4NzpcdHN0YXRpYyBzdHJ1Y3QgZHNhX3BvcnQgKmRzYV9wb3J0X3RvdWNoKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IGluZGV4KVxuMTA4ODpcdHtcbjEwODk6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzLVx1MDAzZWRzdDtcbjEwOTA6XHRcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4xMDkxOlx0XG4xMDkyOlx0XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKVxuMTA5MzpcdFx0XHRpZiAoZHAtXHUwMDNlaW5kZXggPT0gaW5kZXgpXG4xMDk0Olx0XHRcdFx0cmV0dXJuIGRwO1xuMTA5NTpcdFxuMTA5NjpcdFx0ZHAgPSBremFsbG9jX29iaigqZHApO1xuMTA5NzpcdFx0aWYgKCFkcClcbjEwOTg6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMDk5Olx0XG4xMTAwOlx0XHRkcC1cdTAwM2VkcyA9IGRzO1xuMTEwMTpcdFx0ZHAtXHUwMDNlaW5kZXggPSBpbmRleDtcbjExMDI6XHRcbjExMDM6XHRcdG11dGV4X2luaXQoXHUwMDI2ZHAtXHUwMDNlYWRkcl9saXN0c19sb2NrKTtcbjExMDQ6XHRcdG11dGV4X2luaXQoXHUwMDI2ZHAtXHUwMDNldmxhbnNfbG9jayk7XG4xMTA1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZkcC1cdTAwM2VmZGJzKTtcbjExMDY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRwLVx1MDAzZW1kYnMpO1xuMTEwNzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZHAtXHUwMDNldmxhbnMpOyAvKiBhbHNvIGluaXRpYWxpemVzIFx1MDAyNmRwLVx1MDAzZXVzZXJfdmxhbnMgKi9cbjExMDg6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRwLVx1MDAzZWxpc3QpO1xuMTEwOTpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkcC1cdTAwM2VsaXN0LCBcdTAwMjZkc3QtXHUwMDNlcG9ydHMpO1xuMTExMDpcdFxuMTExMTpcdFx0cmV0dXJuIGRwO1xuMTExMjpcdH1cbjExMTM6XHRcbjExMTQ6XHRzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX3VzZXIoc3RydWN0IGRzYV9wb3J0ICpkcCwgY29uc3QgY2hhciAqbmFtZSlcbjExMTU6XHR7XG4xMTE2Olx0XHRkcC1cdTAwM2V0eXBlID0gRFNBX1BPUlRfVFlQRV9VU0VSO1xuMTExNzpcdFx0ZHAtXHUwMDNlbmFtZSA9IG5hbWU7XG4xMTE4Olx0XG4xMTE5Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIERTQSBVc2VyIFNldHVwKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEU0EgdXNlciBzZXR1cCBpcyBiZWluZyBoYW5kbGVkLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBhcm91bmQgdGhlIGBuZXQvZHNhL3VzZXIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHNhX3VzZXJfc2V0dXBfdGNgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBmb3IgaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgRFNBIHN0YWNrLCBhbmQgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBleHBlY3QgdG8gZmluZCBjbHVlcyBhYm91dCB0cmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbiwgaW50ZXJmYWNlIGFzc2lnbm1lbnQsIGFuZCBob3cgdXNlci1zcGFjZSB0b29scyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgRFNBIGRyaXZlci4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIHRoZSBhcmd1bWVudHMgaXQgdGFrZXMsIHRoZSBpbnRlcm5hbCB3b3JraW5ncywgYW5kIGFueSBjYWxscyBpdCBtYWtlcyB0byBvdGhlciBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiB0aGUgRFNBIHVzZXItc3BhY2UgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2RzYS91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MTA6XHRcdFx0aWYgKCFibG9ja19jYilcbjE3MTE6XHRcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjE3MTI6XHRcbjE3MTM6XHRcdFx0Zmxvd19ibG9ja19jYl9yZW1vdmUoYmxvY2tfY2IsIGYpO1xuMTcxNDpcdFx0XHRsaXN0X2RlbChcdTAwMjZibG9ja19jYi1cdTAwM2Vkcml2ZXJfbGlzdCk7XG4xNzE1Olx0XHRcdHJldHVybiAwO1xuMTcxNjpcdFx0ZGVmYXVsdDpcbjE3MTc6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTcxODpcdFx0fVxuMTcxOTpcdH1cbjE3MjA6XHRcbjE3MjE6XHRzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2FfcG9ydCAqZHAsXG4xNzIyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibylcbjE3MjM6XHR7XG4xNzI0Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApO1xuMTcyNTpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG4xNzI2Olx0XHRpbnQgZXJyO1xuMTcyNzpcdFxuMTcyODpcdFx0LyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi9cbjE3Mjk6XHRcdGlmIChiby1cdTAwM2Vjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkge1xuMTczMDpcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjE3MzE6XHRcdFx0aWYgKGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKVxuMTczMjpcdFx0XHRcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsXG4xNzMzOlx0XHRcdFx0XHRcdFx0ICAgICBibyk7XG4xNzM0Olx0XHRcdGRwLVx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcbjE3MzU6XHRcdFx0aWYgKGRwLVx1MDAzZWZ0X29uX3N3aXRjaClcbjE3MzY6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTczNzpcdFx0fSBlbHNlIGlmIChkcC1cdTAwM2VmdF9vbl9zd2l0Y2gpIHtcbjE3Mzg6XHRcdFx0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsIGJvKTtcbjE3Mzk6XHRcdH1cbjE3NDA6XHRcbjE3NDE6XHRcdGlmICghY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90YylcbjE3NDI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTc0MzpcdFxuMTc0NDpcdFx0cmV0dXJuIGNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIGJvKTtcbjE3NDU6XHR9XG4xNzQ2Olx0XG4xNzQ3Olx0c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbjE3NDg6XHRcdFx0XHQgICAgIHZvaWQgKnR5cGVfZGF0YSlcbjE3NDk6XHR7XG4xNzUwOlx0XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xuMTc1MTpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG4xNzUyOlx0XG4xNzUzOlx0XHRzd2l0Y2ggKHR5cGUpIHtcbjE3NTQ6XHRcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4xNzU1Olx0XHRcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XG4xNzU2Olx0XHRjYXNlIFRDX1NFVFVQX0ZUOlxuMTc1NzpcdFx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHAsIHR5cGVfZGF0YSk7XG4xNzU4Olx0XHRkZWZhdWx0OlxuMTc1OTpcdFx0XHRicmVhaztcbjE3NjA6XHRcdH1cbjE3NjE6XHRcbjE3NjI6XHRcdGlmICghZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMpXG4xNzYzOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE3NjQ6XHRcbjE3NjU6XHRcdHJldHVybiBkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXHUwMDNlaW5kZXgsIHR5cGUsIHR5cGVfZGF0YSk7XG4xNzY2Olx0fVxuMTc2NzpcdFxuMTc2ODpcdHN0YXRpYyBpbnQgZHNhX3VzZXJfZ2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4xNzY5Olx0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYywgdTMyICpydWxlX2xvY3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjU0CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDgwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBgYm9vbCBmdF9vbl9zd2l0Y2hgIG1lbWJlciB0byB0aGUgYHN0cnVjdCBkc2FfcG9ydGAuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBhbGxvY2F0aW9uIGZvciB0aGUgYGRzYV9wb3J0YCBzdHJ1Y3R1cmUgKnNwZWNpZmljYWxseSogdXNlcyBga3phbGxvY19vYmpgLCBvciBgcnRubF9saW5rX29wc2AgcHJpdl9zaXplIGt6YWxsb2MsIGd1YXJhbnRlZWluZyB0aGF0IHRoaXMgbmV3IGJvb2xlYW4sIGBmdF9vbl9zd2l0Y2hgLCBzdGFydHMgYXQgYGZhbHNlYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIHdoZXJlIGRvZXMgdGhpcyBib29sZWFuIGdldCBzZXQ/IEl0IGhhcHBlbnMgd2l0aGluIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AuIFdoZW4gYSBmbG93IGJsb2NrIGlzIGJlaW5nICpib3VuZCogKGBGTE9XX0JMT0NLX0JJTkRgKSwgdGhlIGNvZGUgZmlyc3QgY2hlY2tzIGlmIHRoZSBzd2l0Y2ggZHJpdmVyIGNhbiBoYW5kbGUgdGhlIGBUQ19TRVRVUF9GVGAgb3BlcmF0aW9uIHZpYSBgcG9ydF9zZXR1cF90Y2AuIFRoZSAqcmVzdWx0KiBvZiB0aGF0IGNoZWNrIGRldGVybWluZXMgYGRwLSZndDtmdF9vbl9zd2l0Y2hgLiBJZiBgcG9ydF9zZXR1cF90Y2Agc3VwcG9ydHMgdGhlIGZsb3cgdGFibGUgb3BlcmF0aW9ucywgYW5kIHJldHVybnMgbm8gZXJyb3IsIGBmdF9vbl9zd2l0Y2hgIGlzIHNldCB0byBgdHJ1ZWA7IG90aGVyd2lzZSwgaXQgcmVtYWlucyBgZmFsc2VgLiBUaGUgcGF0Y2ggdGhlbiB1c2VzIHRoaXMgYm9vbGVhbiB0byBkZXRlcm1pbmUgd2hlcmUgdG8gcGFzcyB0aGUgZmxvdyB0YWJsZSBzZXR1cC4gSWYgdGhlIGJpbmRpbmcgZmFpbGVkLCBhbmQgYGZ0X29uX3N3aXRjaGAgaXMgYHRydWVgLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGRzYSBkcml2ZXIuIElmIGl0JiMzOTtzIGZhbHNlLCB0aGUgY29kZSBwYXNzZXMgdGhlIHNldHVwIHRvIHRoZSBjb25kdWl0LiBXaGVuICp1bmJpbmRpbmcqIHRoZSBzYW1lIGBGTE9XX0JMT0NLX1VOQklORGAsIHRoZSBsb2dpYyBtaXJyb3JzIHRoaXMuCgpNeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJcyB0aGVyZSBhbnkgcG9pbnQgd2hlcmUgYSByZWFkIGNvdWxkIG9jY3VyIGJlZm9yZSBhIHdyaXRlPyBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaDoKCiogICBUaGUgYWxsb2NhdGlvbiBvZiBgZHBgIGlzIHplcm9lZCBieSBga3phbGxvY19vYmpgLiBTbywgdGhlIGluaXRpYWwgc3RhdGUgaXMgc2FmZS4KKiAgIGBmdF9vbl9zd2l0Y2hgIGdldHMgZXhwbGljaXRseSBzZXQgZHVyaW5nIHRoZSBCSU5EIG9wZXJhdGlvbi4gVGhpcyBjb3ZlcnMgdGhlIG1vc3QgaW1wb3J0YW50IHBvaW50IG9mIHRoZSBsb2dpYy4KKiAgIFRoZSBgYm9gIChmbG93IGJsb2NrIG9mZmxvYWQpIGRhdGEgc3RydWN0dXJlIGNvbWVzIGZyb20gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGF0JiMzOTtzIGV4dGVybmFsLCBidXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhhdCBzdWJzeXN0ZW0uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBpcyBzYWZlbHkgaW5pdGlhbGl6ZWQuCiogICBJIHNlZSBubyBuZXcgYWxsb2NhdGlvbnMgb2Ygc3RhY2sgb3IgaGVhcCBidWZmZXJzIHRoYXQgY291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIG1ham9yIGFyZWEgb2YgY29uY2VybiBmb3IgbGVha3MuCiogICBUaGVyZSYjMzk7cyBubyBjb3B5aW5nIG9yIHJlYWRpbmcgb2YgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0cnVjdHMsIGFuZCB0aGF0IGlzIHZlcnkgaW1wb3J0YW50LgoqICAgVGhlcmUgYXJlIG5vIGJyYW5jaGluZyBkZWNpc2lvbnMsIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYSBtZXRob2RpY2FsbHk6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZToqKiBOb3BlLiBUaGUgc3RydWN0dXJlcyBhcmUgaW50ZXJuYWwuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBOby4gYGZ0X29uX3N3aXRjaGAgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXQmIzM5O3MgdXNlZC4KMy4gICoqQWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHBvdGVudGlhbGx5IHJlYWQgbGF0ZXI6KiogTm9wZS4gVGhlIGBkc2FfcG9ydGAgc3RydWN0dXJlIGlzIGNhcmVmdWxseSBpbml0aWFsaXplZC4KNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM6KiogTm8uCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggKmRvZXMgbm90KiBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2Ugc2hvdWxkIG5vdCBoYXZlIGFueSBLTVNBTiBpc3N1ZXMgaGVyZS4KCktNU0FOIHZzLiBLQVNBTiBpcyBjcnVjaWFsIGNvbnRleHQgaGVyZS4gS0FTQU4vTE9DS0RFUC9zdGFuZGFyZCBzYW5pdGl6ZXJzIHdvdWxkIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIFVBRiBidWdzLCBsb2NraW5nIHByb2JsZW1zLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBLTVNBTiwgc3BlY2lmaWNhbGx5LCBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBJbiB0aGlzIGNhc2UsIGBremFsbG9jX29iamAgYW5kIHRoZSBleHBsaWNpdCBzZXR0aW5nIG9mIGBmdF9vbl9zd2l0Y2hgIHdpdGhpbiB0aGUgYmluZC91bmJpbmQgbG9naWMgZWZmZWN0aXZlbHkgcHJldmVudCBLTVNBTiBmcm9tIGZsYWdnaW5nIGFueXRoaW5nLiBUaGlzIHBhdGNoIGlzIGp1c3QgaW50ZXJuYWwgZmxvdyB0YWJsZSBvZmZsb2FkIGRpc3BhdGNoIGxvZ2ljIHRoYXQmIzM5O3Mgc2FmZWx5IGltcGxlbWVudGVkLiBObyB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgbm8gc3RhY2sgYnVmZmVyIG1hbmlwdWxhdGlvbiwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCgpJJiMzOTttIGNvbmZpZGVudCB3ZSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgRFNBIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyAoVENfU0VUVVBfRlQpIHRvIHJvdXRlIGJpbmQvdW5iaW5kIHJlcXVlc3RzIHRvIGVpdGhlciB0aGUgRFNBIHN3aXRjaCBkcml2ZXIgb3IgdGhlIGNvbmR1aXQgbmV0ZGV2LCB0cmFja2luZyBzdGF0ZSB2aWEgYSBuZXcgYGZ0X29uX3N3aXRjaGAgZmllbGQgaW4gYHN0cnVjdCBkc2FfcG9ydGAuIGBzdHJ1Y3QgZHNhX3BvcnRgIGluc3RhbmNlcyBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBmaWVsZC4gVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBEU0EgZmxvd3RhYmxlIGJsb2NrIHNldHVwIGxvZ2ljIChUQ19TRVRVUF9GVCkgdG8gcm91dGUgYmluZC91bmJpbmQgcmVxdWVzdHMgdG8gZWl0aGVyIHRoZSBEU0Egc3dpdGNoIGRyaXZlciBvciB0aGUgY29uZHVpdCBuZXRkZXYsIHRyYWNraW5nIHN0YXRlIHZpYSBhIG5ldyBgZnRfb25fc3dpdGNoYCBmaWVsZCBpbiBgc3RydWN0IGRzYV9wb3J0YC4gYHN0cnVjdCBkc2FfcG9ydGAgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgbmV3IGZpZWxkLiBUaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjIwLjU2MDE3MDE1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTI2MTAwODY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfRFNBXCIsXG4gICAgXCJORVRfRFNBX0xPT1BcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrXCIsXG4gICAgXCJkc2FfdXNlcl9zZXR1cF90Y1wiLFxuICAgIFwibmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIERTQSBmbG93dGFibGUgYmxvY2sgc2V0dXAgbG9naWMgKFRDX1NFVFVQX0ZUKSB0byByb3V0ZSBiaW5kL3VuYmluZCByZXF1ZXN0cyB0byBlaXRoZXIgdGhlIERTQSBzd2l0Y2ggZHJpdmVyIG9yIHRoZSBjb25kdWl0IG5ldGRldiwgdHJhY2tpbmcgc3RhdGUgdmlhIGEgbmV3IGBmdF9vbl9zd2l0Y2hgIGZpZWxkIGluIGBzdHJ1Y3QgZHNhX3BvcnRgLiBgc3RydWN0IGRzYV9wb3J0YCBpbnN0YW5jZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBuZXcgZmllbGQuIFRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGNvcGllcywgbm8gdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyBieSBhZGRpbmcgc3RhdGUgdHJhY2tpbmcgKGZ0X29uX3N3aXRjaCkgb24gc3RydWN0IGRzYV9wb3J0IHRvIGVuc3VyZSB1bmJpbmRpbmcgcm91dGVzIHRvIHRoZSBzYW1lIGVudGl0eSAoc3dpdGNoIG9yIGNvbmR1aXQpIHRoYXQgaGFuZGxlZCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb24gRFNBIHVzZXIgcG9ydHMgKHN1Y2ggYXMgd2l0aCB0aGUgc29mdHdhcmUgZHNhX2xvb3AgbW9jayBkcml2ZXIpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHBvdGVudGlhbCBzdGF0ZSBtaXNtYXRjaGVzLCBiaW5kL3VuYmluZCBlcnJvciBwYXRocywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjIwLjU2MDE3NDgzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NTgxMTAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI5MjFmMzExYWI1MmQwZmFlZTQxNzZhOWE2NDQwOGJlMTY1M2VmNTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxODo1MzoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuaW5kZXggNzUwN2Q2MzJlN2M2ZC4uZGJjYjAyZGUwNmZjZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuQEAgLTI5Nyw2ICsyOTcsMTIgQEAgc3RydWN0IGRzYV9wb3J0IHtcXG4gXFxuIFxcdHU4XFx0XFx0XFx0c2V0dXA6MTtcXG4gXFxuK1xcdC8qIEZsb3d0YWJsZSBibG9ja3Mgb24gdGhpcyB1c2VyIHBvcnQgZ28gdG8gdGhlIHN3aXRjaCwgbm90IHRoZVxcbitcXHQgKiBjb25kdWl0OyBkZWNpZGVkIGF0IGJpbmQgdGltZS4gV3JpdHRlbiB3aXRob3V0IHJ0bmwsIHNvIG5vdCBvbmUgb2ZcXG4rXFx0ICogdGhlIGJpdCBmaWVsZHMgYWJvdmUuXFxuK1xcdCAqL1xcbitcXHRib29sXFx0XFx0XFx0ZnRfb25fc3dpdGNoO1xcbitcXG4gXFx0c3RydWN0IGRldmljZV9ub2RlXFx0KmRuO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRhZ2VpbmdfdGltZTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9kc2EvdXNlci5jIGIvbmV0L2RzYS91c2VyLmNcXG5pbmRleCAwNDFmOTA2MGM4ZWYwLi5mNGNkNDhkZjI1MTlkIDEwMDY0NFxcbi0tLSBhL25ldC9kc2EvdXNlci5jXFxuKysrIGIvbmV0L2RzYS91c2VyLmNcXG5AQCAtMTcxOCwxNSArMTcxOCwzMCBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi1cXHRcXHRcXHRcXHQgICB2b2lkICp0eXBlX2RhdGEpXFxuK3N0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pXFxuIHtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRzYV90b19wb3J0KGRzLCBwb3J0KSk7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qIFRoZSB1bmJpbmQgZ29lcyB0byB0aGUgc2lkZSB0aGF0IHRvb2sgdGhlIGJpbmQuICovXFxuK1xcdGlmIChiby1cXHUwMDNlY29tbWFuZCA9PSBGTE9XX0JMT0NLX0JJTkQpIHtcXG4rXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGlmIChkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKVxcbitcXHRcXHRcXHRlcnIgPSBkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cXHUwMDNlaW5kZXgsIFRDX1NFVFVQX0ZULFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJvKTtcXG4rXFx0XFx0ZHAtXFx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0aWYgKGRwLVxcdTAwM2VmdF9vbl9zd2l0Y2gpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH0gZWxzZSBpZiAoZHAtXFx1MDAzZWZ0X29uX3N3aXRjaCkge1xcbitcXHRcXHRyZXR1cm4gZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXFx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCwgYm8pO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIWNvbmR1aXQtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90YylcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0cmV0dXJuIGNvbmR1aXQtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgdHlwZV9kYXRhKTtcXG4rXFx0cmV0dXJuIGNvbmR1aXQtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbkBAIC0xNzM5LDcgKzE3NTQsNyBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbiBcXHRcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soZGV2LCB0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbi1cXHRcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHMsIGRwLVxcdTAwM2VpbmRleCwgdHlwZV9kYXRhKTtcXG4rXFx0XFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1MzoyMi4wMDY3NTg4NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY4NzAwNjA3MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9EU0FcIixcbiAgICBcIk5FVF9EU0FfTE9PUFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tcIixcbiAgICBcImRzYV91c2VyX3NldHVwX3RjXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyBieSBhZGRpbmcgc3RhdGUgdHJhY2tpbmcgKGZ0X29uX3N3aXRjaCkgb24gc3RydWN0IGRzYV9wb3J0IHRvIGVuc3VyZSB1bmJpbmRpbmcgcm91dGVzIHRvIHRoZSBzYW1lIGVudGl0eSAoc3dpdGNoIG9yIGNvbmR1aXQpIHRoYXQgaGFuZGxlZCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb24gRFNBIHVzZXIgcG9ydHMgKHN1Y2ggYXMgd2l0aCB0aGUgc29mdHdhcmUgZHNhX2xvb3AgbW9jayBkcml2ZXIpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHBvdGVudGlhbCBzdGF0ZSBtaXNtYXRjaGVzLCBiaW5kL3VuYmluZCBlcnJvciBwYXRocywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjkyMWYzMTFhYjUyZDBmYWVlNDE3NmE5YTY0NDA4YmUxNjUzZWY1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NTM6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA3NTA3ZDYzMmU3YzZkLi5kYmNiMDJkZTA2ZmNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXG5AQCAtMjk3LDYgKzI5NywxMiBAQCBzdHJ1Y3QgZHNhX3BvcnQge1xuIFxuIFx0dThcdFx0XHRzZXR1cDoxO1xuIFxuK1x0LyogRmxvd3RhYmxlIGJsb2NrcyBvbiB0aGlzIHVzZXIgcG9ydCBnbyB0byB0aGUgc3dpdGNoLCBub3QgdGhlXG4rXHQgKiBjb25kdWl0OyBkZWNpZGVkIGF0IGJpbmQgdGltZS4gV3JpdHRlbiB3aXRob3V0IHJ0bmwsIHNvIG5vdCBvbmUgb2ZcbitcdCAqIHRoZSBiaXQgZmllbGRzIGFib3ZlLlxuK1x0ICovXG4rXHRib29sXHRcdFx0ZnRfb25fc3dpdGNoO1xuK1xuIFx0c3RydWN0IGRldmljZV9ub2RlXHQqZG47XG4gXHR1bnNpZ25lZCBpbnRcdFx0YWdlaW5nX3RpbWU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS91c2VyLmMgYi9uZXQvZHNhL3VzZXIuY1xuaW5kZXggMDQxZjkwNjBjOGVmMC4uZjRjZDQ4ZGYyNTE5ZCAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdXNlci5jXG4rKysgYi9uZXQvZHNhL3VzZXIuY1xuQEAgLTE3MTgsMTUgKzE3MTgsMzAgQEAgc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEpXG4rc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxuK1x0XHRcdFx0ICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRzYV90b19wb3J0KGRzLCBwb3J0KSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApO1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0LyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi9cbitcdGlmIChiby1cdTAwM2Vjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkge1xuK1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKVxuK1x0XHRcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsXG4rXHRcdFx0XHRcdFx0ICAgICBibyk7XG4rXHRcdGRwLVx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGRwLVx1MDAzZWZ0X29uX3N3aXRjaClcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fSBlbHNlIGlmIChkcC1cdTAwM2VmdF9vbl9zd2l0Y2gpIHtcbitcdFx0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsIGJvKTtcbitcdH1cbiBcbiBcdGlmICghY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90YylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIHR5cGVfZGF0YSk7XG4rXHRyZXR1cm4gY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuQEAgLTE3MzksNyArMTc1NCw3IEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9GVDpcbi1cdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRzLCBkcC1cdTAwM2VpbmRleCwgdHlwZV9kYXRhKTtcbitcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1MzoyMi4wMDY3NjEyNjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDIwODcxMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRFNBIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBpcyB0aGlzIHBhdGNoIGZ1enphYmxlLCB3aGF0IGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLCBhbmQgd2hhdCBzeW1ib2xzIGFyZSBtb3N0IHJlbGV2YW50P1xuXG5GaXJzdCwgSSdtIGxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyB0b3VjaGluZyBgaW5jbHVkZS9uZXQvZHNhLmhgIGFuZCBgbmV0L2RzYS91c2VyLmNgLCB3aGljaCBpbW1lZGlhdGVseSBkcmF3cyBteSBhdHRlbnRpb24gdG8gdGhlIERTQSBhcmNoaXRlY3R1cmUuXG5cblNwZWNpZmljYWxseSwgYGluY2x1ZGUvbmV0L2RzYS5oYCBhZGRzIGEgYGJvb2wgZnRfb25fc3dpdGNoYCB0byB0aGUgYHN0cnVjdCBkc2FfcG9ydGAuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIHN0YXRlIHRyYWNraW5nIGZsb3cgdGFibGVzIG9uIHRoZSBzd2l0Y2guIE5vdywgbG9va2luZyBhdCBgbmV0L2RzYS91c2VyLmNgLCBJIHNlZSBzb21lIGNyaXRpY2FsIGNoYW5nZXMgaW4gYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYC4gVGhpcyBzdGF0aWMgZnVuY3Rpb24sIGNhbGxlZCBieSBgZHNhX3VzZXJfc2V0dXBfdGNgLCBoYW5kbGVzIGBUQ19TRVRVUF9GVGAsIHdoaWNoIHNlZW1zIHRvIGJlIGFib3V0IGZsb3cgdGFibGUgc2V0dXAuIEl0J3MgaGFuZGxpbmcgdGhlIGBGTE9XX0JMT0NLX0JJTkRgIGFuZCB1bmJpbmRpbmcgY29tbWFuZHMuIElmIGBkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90Y2AgaXMgc3VwcG9ydGVkLCBpdCBpbmRpY2F0ZXMgZmxvdyB0YWJsZSBoYW5kbGluZyBvbiB0aGUgc3dpdGNoIGJ5IHNldHRpbmcgYGRwLVx1MDAzZWZ0X29uX3N3aXRjaGAgdG8gdHJ1ZS4gSWYgbm90LCBpdCBmb3J3YXJkcyB0byB0aGUgY29uZHVpdCdzIGBuZG9fc2V0dXBfdGNgLiBTbyBpdCBsb29rcyBsaWtlIGl0J3MgbWFuYWdpbmcgd2hldGhlciB0aGUgZmxvdyB0YWJsZSBpcyBtYW5hZ2VkIG9uIHRoZSBzd2l0Y2ggb3IgZm9yd2FyZGVkLiBXaGVuIHVuYmluZGluZywgaXQgY2hlY2tzIGBkcC1cdTAwM2VmdF9vbl9zd2l0Y2hgIGFuZCBjYWxscyBgZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGNgIHdoaWNoIHN1Z2dlc3RzIHRoZXJlJ3MgYSBuZWVkIHRvIGhhbmRsZSBmbG93IHRhYmxlcyBvbiB0aGUgc3dpdGNoIHdoZW4gdW5iaW5kaW5nIHRvby5cblxuTm93LCBteSBuZXh0IHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuIGdldCB0byB0aGlzIGluIGEgZnV6emluZyBlbnZpcm9ubWVudD8gQ2FuIERTQSBkZXZpY2VzIG9yIERTQSB1c2VyIGRldmljZXMgYmUgaW5zdGFudGlhdGVkIG9yIGFjY2Vzc2VkIHRocm91Z2ggbmV0bGluaywgbW9jayBpbnRlcmZhY2VzLCBtYXliZSBgZHNhX2xvb3BgLCBvciB3aXRoaW4gYSB2aXJ0dWFsaXplZCBzZXR1cD8gVGltZSB0byBjaGVjayBpZiBJIGNhbiBnZXQgYSBEU0EgZGV2aWNlIGluc3RhbmNlIGluIHRoZSBrZXJuZWwuIExldCdzIHNlZSB3aGF0IHRoZSBrZXJuZWwgaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjMxLjAyNzYzNTE2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTk3NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfRFNBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9LY29uZmlnLTItXFxubmV0L2RzYS9LY29uZmlnOjM6bWVudWNvbmZpZyBORVRfRFNBXFxubmV0L2RzYS9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkRpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWc9MTc9aWYgTkVUX0RTQVxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIwLVxcbm5ldC9kc2EvS2NvbmZpZzoyMTpjb25maWcgTkVUX0RTQV9UQUdfTk9ORVxcbm5ldC9kc2EvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwiTm8tb3AgdGFnIGRyaXZlclxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0yNi1cXG5uZXQvZHNhL0tjb25maWc6Mjc6Y29uZmlnIE5FVF9EU0FfVEFHX0FSOTMzMVxcbm5ldC9kc2EvS2NvbmZpZy0yOC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgQXRoZXJvcyBBUjkzMzEgU29DIHdpdGggYnVpbHQtaW4gc3dpdGNoXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTMyLVxcbm5ldC9kc2EvS2NvbmZpZzozMzpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9DT01NT05cXG5uZXQvZHNhL0tjb25maWctMzQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0zNi1cXG5uZXQvZHNhL0tjb25maWc6Mzc6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01cXG5uZXQvZHNhL0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEJyb2FkY29tIHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctNDMtXFxubmV0L2RzYS9LY29uZmlnOjQ0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0xFR0FDWVxcbm5ldC9kc2EvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgQkNNNjN4eCBsZWdhY3kgc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy01My1cXG5uZXQvZHNhL0tjb25maWc6NTQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fTEVHQUNZX0ZDU1xcbm5ldC9kc2EvS2NvbmZpZy01NS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgQkNNNTN4eCBsZWdhY3kgc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy02My1cXG5uZXQvZHNhL0tjb25maWc6NjQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fUFJFUEVORFxcbm5ldC9kc2EvS2NvbmZpZy02NS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgQnJvYWRjb20gc3dpdGNoZXMgdXNpbmcgcHJlcGVuZGVkIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctNzEtXFxubmV0L2RzYS9LY29uZmlnOjcyOmNvbmZpZyBORVRfRFNBX1RBR19IRUxMQ1JFRUtcXG5uZXQvZHNhL0tjb25maWctNzMtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEhpcnNjaG1hbm4gSGVsbGNyZWVrIFRTTiBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy03Ny1cXG5uZXQvZHNhL0tjb25maWc6Nzg6Y29uZmlnIE5FVF9EU0FfVEFHX0dTV0lQXFxubmV0L2RzYS9LY29uZmlnLTc5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBMYW50aXEgLyBJbnRlbCBHU1dJUCBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy04My1cXG5uZXQvZHNhL0tjb25maWc6ODQ6Y29uZmlnIE5FVF9EU0FfVEFHX0RTQV9DT01NT05cXG5uZXQvZHNhL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG5uZXQvZHNhL0tjb25maWctODYtXFxubmV0L2RzYS9LY29uZmlnOjg3OmNvbmZpZyBORVRfRFNBX1RBR19EU0FcXG5uZXQvZHNhL0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE1hcnZlbGwgc3dpdGNoZXMgdXNpbmcgRFNBIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctOTMtXFxubmV0L2RzYS9LY29uZmlnOjk0OmNvbmZpZyBORVRfRFNBX1RBR19FRFNBXFxubmV0L2RzYS9LY29uZmlnLTk1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIEV0aGVyVHlwZSBEU0EgaGVhZGVyc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xMDAtXFxubmV0L2RzYS9LY29uZmlnOjEwMTpjb25maWcgTkVUX0RTQV9UQUdfTVQ3NjI4XFxubmV0L2RzYS9LY29uZmlnLTEwMi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgdGhlIE1UNzYyOCBlbWJlZGRlZCBzd2l0Y2hcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTA2LVxcbm5ldC9kc2EvS2NvbmZpZzoxMDc6Y29uZmlnIE5FVF9EU0FfVEFHX01US1xcbm5ldC9kc2EvS2NvbmZpZy0xMDgtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE1lZGlhdGVrIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTExMi1cXG5uZXQvZHNhL0tjb25maWc6MTEzOmNvbmZpZyBORVRfRFNBX1RBR19NWExfODYyWFhcXG5uZXQvZHNhL0tjb25maWctMTE0LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTE5LVxcbm5ldC9kc2EvS2NvbmZpZzoxMjA6Y29uZmlnIE5FVF9EU0FfVEFHX01YTF9HU1cxWFhcXG5uZXQvZHNhL0tjb25maWctMTIxLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgR1NXMXh4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEyNy1cXG5uZXQvZHNhL0tjb25maWc6MTI4OmNvbmZpZyBORVRfRFNBX1RBR19LU1pcXG5uZXQvZHNhL0tjb25maWctMTI5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNaWNyb2NoaXAgODc5NS85Mzd4Lzk0NzcvOTg5MyBmYW1pbGllcyBvZiBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xMzMtXFxubmV0L2RzYS9LY29uZmlnOjEzNDpjb25maWcgTkVUX0RTQV9UQUdfTkVUQ1xcbm5ldC9kc2EvS2NvbmZpZy0xMzUtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE5YUCBORVRDIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE0My1cXG5uZXQvZHNhL0tjb25maWc6MTQ0OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1RcXG5uZXQvZHNhL0tjb25maWctMTQ1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBOUEkgcG9ydFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNTQtXFxubmV0L2RzYS9LY29uZmlnOjE1NTpjb25maWcgTkVUX0RTQV9UQUdfT0NFTE9UXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTE1Ni1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgT2NlbG90IGZhbWlseSBvZiBzd2l0Y2hlcywgdXNpbmcgVkxBTlxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNjQtXFxubmV0L2RzYS9LY29uZmlnOjE2NTpjb25maWcgTkVUX0RTQV9UQUdfUUNBXFxubmV0L2RzYS9LY29uZmlnLTE2Ni1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNzAtXFxubmV0L2RzYS9LY29uZmlnOjE3MTpjb25maWcgTkVUX0RTQV9UQUdfUlRMNF9BXFxubmV0L2RzYS9LY29uZmlnLTE3Mi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUmVhbHRlayA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE3Ny1cXG5uZXQvZHNhL0tjb25maWc6MTc4OmNvbmZpZyBORVRfRFNBX1RBR19SVEw4XzRcXG5uZXQvZHNhL0tjb25maWctMTc5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZWFsdGVrIDggYnl0ZSBwcm90b2NvbCA0IHRhZ3NcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTgzLVxcbm5ldC9kc2EvS2NvbmZpZzoxODQ6Y29uZmlnIE5FVF9EU0FfVEFHX1JaTjFfQTVQU1dcXG5uZXQvZHNhL0tjb25maWctMTg1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZW5lc2FzIFJaL04xIEE1UFNXIHN3aXRjaFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xOTAtXFxubmV0L2RzYS9LY29uZmlnOjE5MTpjb25maWcgTkVUX0RTQV9UQUdfTEFOOTMwM1xcbm5ldC9kc2EvS2NvbmZpZy0xOTItXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIFNNU0MvTWljcm9jaGlwIExBTjkzMDMgZmFtaWx5IG9mIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE5Ni1cXG5uZXQvZHNhL0tjb25maWc6MTk3OmNvbmZpZyBORVRfRFNBX1RBR19TSkExMTA1XFxubmV0L2RzYS9LY29uZmlnLTE5OC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTlhQIFNKQTExMDUgc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjA1LVxcbm5ldC9kc2EvS2NvbmZpZzoyMDY6Y29uZmlnIE5FVF9EU0FfVEFHX1RSQUlMRVJcXG5uZXQvZHNhL0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBzd2l0Y2hlcyB1c2luZyBhIHRyYWlsZXIgdGFnXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIxMS1cXG5uZXQvZHNhL0tjb25maWc6MjEyOmNvbmZpZyBORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWljcm9jaGlwL1ZpdGVzc2UgVlNDNzN4eCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjE3LVxcbm5ldC9kc2EvS2NvbmZpZzoyMTg6Y29uZmlnIE5FVF9EU0FfVEFHX1hSUzcwMFhcXG5uZXQvZHNhL0tjb25maWctMjE5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBYUlM3MDB4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIyMy1cXG5uZXQvZHNhL0tjb25maWc6MjI0OmNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcXG5uZXQvZHNhL0tjb25maWctMjI1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IHN3aXRjaGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1MzozMS4wNzYyMzUzODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjgyMDc4MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEU0EgRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGRyaXZlcnMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZS4gSSdsbCBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiwgYGRyaXZlcnMvbmV0L2RzYS9gLiBUaGlzIGRpcmVjdG9yeSBzaG91bGQgYmUgdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSBmb3IgdGhlc2UgZHJpdmVycy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgYSBxdWljayBvdmVydmlldyBvZiB3aGF0J3MgaW1wbGVtZW50ZWQuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGxpc3RpbmcgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZGlyZWN0b3J5LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBkcml2ZXIgZmlsZXMsIG1vZHVsZSBzb3VyY2UgYW5kIHBvdGVudGlhbGx5IHNvbWUgY29tbW9uIERTQSBzdXBwb3J0IGNvZGUuIEknbSBwYXJ0aWN1bGFybHkgY3VyaW91cyB0byBzZWUgaWYgYSAnZHNhX2xvb3AnIGRyaXZlciBleGlzdHMgLSBhIGNvbW1vbiBwcmFjdGljZSBmb3IgbG9vcGJhY2sgdGVzdGluZy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiYXNlbGluZSB0byB1c2UuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZmlsZSBuYW1lcyB0aGVtc2VsdmVzLCBwb3RlbnRpYWxseSB1c2luZyBhIG1vcmUgc3lzdGVtYXRpYyBtZXRob2QgdG8gYnVpbGQgYSBxdWljayB2aWV3IG9mIHRoZSBEU0EgZHJpdmVyIGxhbmRzY2FwZSwgcHJvYmFibHkgdXNpbmcgYSBgZmluZGAgY29tbWFuZCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZW4gbW92ZSBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6MzMuMzU4MzE1NDczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODQ5MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9sb29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9Mz1iY20tc2YyLW9ianNcXHRcXHRcXHQ6PSBiY21fc2YyLm8gYmNtX3NmMl9jZnAub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXFx0Kz0gZHNhX2xvb3Aub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNi1cXHR1MTYgbWVtYmVycztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVxcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU6ZW51bSBkc2FfbG9vcF9taWJfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVxcdERTQV9MT09QX1BIWV9SRUFEX09LLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0OlxcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXFx0dTE2IHB2aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTpzdHJ1Y3QgZHNhX2xvb3BfcHJpdiB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXFx0c3RydWN0IG1paV9idXNcXHQqYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVxcdHVuc2lnbmVkIGludFxcdHBvcnRfYmFzZTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0OlxcdHN0cnVjdCBkc2FfbG9vcF9wb3J0IHBvcnRzW0RTQV9NQVhfUE9SVFNdO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTc6c3RydWN0IGRzYV9sb29wX3BkYXRhIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY4LVxcdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cXHQ9IHsgXFxcInBoeV9yZWFkX29rXFxcIiwgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc1PXN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzgtXFx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4NDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVxcdHVuc2lnbmVkIGludCBpLCBjb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XFx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6OTc6c3RhdGljIGludCBkc2FfbG9vcF9zZXR1cF9kZXZsaW5rX3Jlc291cmNlcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHNpemVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cXHRcXHRcXHRcXHRcXHQgICAgICBEU0FfTE9PUF9ERVZMSU5LX1BBUkFNX0lEX1ZUVSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgZHNhX2xvb3BfZGV2bGlua192dHVfZ2V0LCBwcyk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzUte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDA6XFx0XFx0bWVtY3B5KHBzLVxcdTAwM2Vwb3J0c1tpXS5taWIsIGRzYV9sb29wX21pYnMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlxcdFxcdCAgICAgICBzaXplb2YoZHNhX2xvb3BfbWlicykpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XFx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDYtfVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTUzOnN0YXRpYyBpbnQgZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXFx0XFx0XFx0XFx0IHUzMiBzdHJpbmdzZXQsIHVpbnQ4X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE3NDpzdGF0aWMgdm9pZCBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICAgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg1LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5OTpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cXHRcXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMDI6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAzLVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjMzOnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cXHRcXHRcXHRcXHRcXHR1OCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNDA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjUwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXFx0Ym9vbCB1bnRhZ2dlZCA9IHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg4LVxcdHUxNiBwdmlkID0gcHMtXFx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI5MDpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMi1cXHRcXHRcXHRcXHQgICAgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMTQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzIxOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZHNhX2xvb3BfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gZHNhX2xvb3BfZ2V0X3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcXHQuc2V0dXBcXHRcXHRcXHQ9IGRzYV9sb29wX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNzpcXHQudGVhcmRvd25cXHRcXHQ9IGRzYV9sb29wX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MTpcXHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXFx0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDI6XFx0LnBoeV9yZWFkXFx0XFx0PSBkc2FfbG9vcF9waHlfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XFx0LnBoeV93cml0ZVxcdFxcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XFx0LnBvcnRfYnJpZGdlX2xlYXZlXFx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XFx0LnBvcnRfc3RwX3N0YXRlX3NldFxcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ5OlxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBkc2FfbG9vcF9wb3J0X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XFx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVxcdGRzLVxcdTAwM2Vwcml2ID0gcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXFx0Lm1kaW9kcnYuZHJpdmVyXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjYtXFx0fSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XFx0LnByb2JlXFx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4OlxcdC5yZW1vdmVcXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5OlxcdC5zaHV0ZG93biA9IGRzYV9sb29wX2Rydl9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDMyOnN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcXHRyZXR1cm4gZHJ2ID09IFxcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgZHNhX2xvb3BfcGRhdGEgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVxcdFxcdC5jZCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXFx1MDAyNmRzYV9sb29wX3BkYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3OlxcdHJldCA9IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldigpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcXHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcXHRcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTAzOm1vZHVsZV9pbml0KGRzYV9sb29wX2luaXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDktXFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6MzMuNDA5MTY4NjIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0OTA4MzczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIGBuZXQvZHNhL3VzZXIuY2AgYXJvdW5kIGBkc2FfdXNlcl9zZXR1cF90Y2A6XG5cbioqRGl2aW5nIGludG8gRFNBIFVzZXIgVEMgU2V0dXAqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIGBuZXQvZHNhL3VzZXIuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBkc2FfdXNlcl9zZXR1cF90Y2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGhhcHBlbnMgaW4gdGhlIGNvbnRleHQgb2YgdHJhZmZpYyBjb250cm9sLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgbWFkbmVzcywgZGVwZW5kaW5nIG9uIGhvdyB5b3UgbG9vayBhdCBpdCEpIG9mIGJyaWRnaW5nIHVzZXJsYW5kIGNvbmZpZ3VyYXRpb25zIHRvIHRoZSBrZXJuZWwncyBUQyBmcmFtZXdvcmsgbGlrZWx5IHJlc2lkZXMuIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBob3cgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhbmQgd2hhdCBwYXJhbWV0ZXJzIGl0J3MgZXhwZWN0aW5nLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb25maWd1cmluZyBRRGlzY3MsIGZpbHRlcnMsIG9yIGJvdGg/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB0eXBpY2FsIFRDIG9wZXJhdGlvbnM6IGNyZWF0aW5nLCBkZWxldGluZywgYW5kIG1vZGlmeWluZyB0cmFmZmljIGNvbnRyb2wgcnVsZXMuIElzIGl0IHRha2luZyBuZXRsaW5rIG1lc3NhZ2VzIGFuZCB0aGVuIHRyYW5zbGF0aW5nIHRoZW0gaW50byB0aGUgYXBwcm9wcmlhdGUga2VybmVsIGNhbGxzPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgaGVyZSBmb3IgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHk/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgdGhhdCBjb3VsZCBiZSBleHBsb2l0ZWQuXG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBlcnJvciBoYW5kbGluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgdXNlci1mYWNpbmcgY29tcG9uZW50LCByb2J1c3QgZXJyb3IgY2hlY2tpbmcgaXMgcGFyYW1vdW50LiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBhbGxvdyBhIHVzZXIgdG8gYnlwYXNzIGFjY2VzcyByZXN0cmljdGlvbnMgb3IgZXZlbiBjcmFzaCB0aGUga2VybmVsLiBJJ20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoaXMgZnVuY3Rpb24gYXMgd2VsbCwgbWFraW5nIHN1cmUgYWxsIHJlc291cmNlcyBhcmUgcHJvcGVybHkgbWFuYWdlZCBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBhcmUgYXZvaWRlZC4gSSdsbCBhbHNvIGNoZWNrIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBicmlkZ2Ugb3IgVkxBTiBpbnRlcmZhY2VzOyB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBUQyBjb25maWd1cmF0aW9ucz8gSG93IGFyZSB0aGUgRFNBLXNwZWNpZmljIHBhcmFtZXRlcnMgaGFuZGxlZCwgYW5kIGhvdyBhcmUgdGhleSB0cmFuc2xhdGVkIGludG8gdGhlIFRDIGRhdGEgc3RydWN0dXJlcz8gTGV0J3MgZ2V0IGNyYWNraW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjM2LjQ1ODI1NDg5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZHNhL3VzZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzAwOlxcdFxcbjE3MDE6XFx0XFx0XFx0YmxvY2tfY2IgPSBmbG93X2Jsb2NrX2NiX2FsbG9jKGNiLCBkZXYsIGRldiwgTlVMTCk7XFxuMTcwMjpcXHRcXHRcXHRpZiAoSVNfRVJSKGJsb2NrX2NiKSlcXG4xNzAzOlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJsb2NrX2NiKTtcXG4xNzA0OlxcdFxcbjE3MDU6XFx0XFx0XFx0Zmxvd19ibG9ja19jYl9hZGQoYmxvY2tfY2IsIGYpO1xcbjE3MDY6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2YmxvY2tfY2ItXFx1MDAzZWRyaXZlcl9saXN0LCBcXHUwMDI2ZHNhX3VzZXJfYmxvY2tfY2JfbGlzdCk7XFxuMTcwNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNzA4OlxcdFxcdGNhc2UgRkxPV19CTE9DS19VTkJJTkQ6XFxuMTcwOTpcXHRcXHRcXHRibG9ja19jYiA9IGZsb3dfYmxvY2tfY2JfbG9va3VwKGYtXFx1MDAzZWJsb2NrLCBjYiwgZGV2KTtcXG4xNzEwOlxcdFxcdFxcdGlmICghYmxvY2tfY2IpXFxuMTcxMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xNzEyOlxcdFxcbjE3MTM6XFx0XFx0XFx0Zmxvd19ibG9ja19jYl9yZW1vdmUoYmxvY2tfY2IsIGYpO1xcbjE3MTQ6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmJsb2NrX2NiLVxcdTAwM2Vkcml2ZXJfbGlzdCk7XFxuMTcxNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNzE2OlxcdFxcdGRlZmF1bHQ6XFxuMTcxNzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTcxODpcXHRcXHR9XFxuMTcxOTpcXHR9XFxuMTcyMDpcXHRcXG4xNzIxOlxcdHN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCxcXG4xNzIyOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvKVxcbjE3MjM6XFx0e1xcbjE3MjQ6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRwKTtcXG4xNzI1OlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG4xNzI2OlxcdFxcdGludCBlcnI7XFxuMTcyNzpcXHRcXG4xNzI4OlxcdFxcdC8qIFRoZSB1bmJpbmQgZ29lcyB0byB0aGUgc2lkZSB0aGF0IHRvb2sgdGhlIGJpbmQuICovXFxuMTcyOTpcXHRcXHRpZiAoYm8tXFx1MDAzZWNvbW1hbmQgPT0gRkxPV19CTE9DS19CSU5EKSB7XFxuMTczMDpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4xNzMxOlxcdFxcdFxcdGlmIChkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKVxcbjE3MzI6XFx0XFx0XFx0XFx0ZXJyID0gZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXFx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCxcXG4xNzMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYm8pO1xcbjE3MzQ6XFx0XFx0XFx0ZHAtXFx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcXG4xNzM1OlxcdFxcdFxcdGlmIChkcC1cXHUwMDNlZnRfb25fc3dpdGNoKVxcbjE3MzY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNzM3OlxcdFxcdH0gZWxzZSBpZiAoZHAtXFx1MDAzZWZ0X29uX3N3aXRjaCkge1xcbjE3Mzg6XFx0XFx0XFx0cmV0dXJuIGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVxcdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsIGJvKTtcXG4xNzM5OlxcdFxcdH1cXG4xNzQwOlxcdFxcbjE3NDE6XFx0XFx0aWYgKCFjb25kdWl0LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0dXBfdGMpXFxuMTc0MjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTc0MzpcXHRcXG4xNzQ0OlxcdFxcdHJldHVybiBjb25kdWl0LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIGJvKTtcXG4xNzQ1OlxcdH1cXG4xNzQ2OlxcdFxcbjE3NDc6XFx0c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4xNzQ4OlxcdFxcdFxcdFxcdCAgICAgdm9pZCAqdHlwZV9kYXRhKVxcbjE3NDk6XFx0e1xcbjE3NTA6XFx0XFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcXG4xNzUxOlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG4xNzUyOlxcdFxcbjE3NTM6XFx0XFx0c3dpdGNoICh0eXBlKSB7XFxuMTc1NDpcXHRcXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbjE3NTU6XFx0XFx0XFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKGRldiwgdHlwZV9kYXRhKTtcXG4xNzU2OlxcdFxcdGNhc2UgVENfU0VUVVBfRlQ6XFxuMTc1NzpcXHRcXHRcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHAsIHR5cGVfZGF0YSk7XFxuMTc1ODpcXHRcXHRkZWZhdWx0OlxcbjE3NTk6XFx0XFx0XFx0YnJlYWs7XFxuMTc2MDpcXHRcXHR9XFxuMTc2MTpcXHRcXG4xNzYyOlxcdFxcdGlmICghZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9zZXR1cF90YylcXG4xNzYzOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xNzY0OlxcdFxcbjE3NjU6XFx0XFx0cmV0dXJuIGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVxcdTAwM2VpbmRleCwgdHlwZSwgdHlwZV9kYXRhKTtcXG4xNzY2OlxcdH1cXG4xNzY3OlxcdFxcbjE3Njg6XFx0c3RhdGljIGludCBkc2FfdXNlcl9nZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4xNzY5OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICpuZmMsIHUzMiAqcnVsZV9sb2NzKVxcbjE3NzA6XFx0e1xcbjE3NzE6XFx0XFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcXG4xNzcyOlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0aWYgKCFkcy1cXHUwMDNlb3BzLVxcdTAwM2VnZXRfcnhuZmMpXFxuMTc3NTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTc3NjpcXHRcXG4xNzc3OlxcdFxcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VnZXRfcnhuZmMoZHMsIGRwLVxcdTAwM2VpbmRleCwgbmZjLCBydWxlX2xvY3MpO1xcbjE3Nzg6XFx0fVxcbjE3Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjM2LjQ1ODQxNTgzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTU0Njg0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIENoYWluKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUuIFRoZSBmdW5jdGlvbiBgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgIHNlZW1zIHRvIGJlIHRoZSBrZXkgcGxheWVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hlbiBkb2VzIHRoaXMgYWN0dWFsbHkgZ2V0IHRyaWdnZXJlZD8gSSBzZWUgaXQncyBjYWxsZWQgd2l0aGluIGBkc2FfdXNlcl9zZXR1cF90Y2AsIHNwZWNpZmljYWxseSB3aGVuIGBkc2FfdXNlcl9zZXR1cF90Y2AgaXMgaW52b2tlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIHR5cGUgYFRDX1NFVFVQX0ZUYC4gXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzOiB3aGF0J3MgdGhlIGNhbGwgc3RhY2sgaGVyZT8gV2hlbiBkb2VzIGBuZG9fc2V0dXBfdGNgLCB0aGUgbmV0IGRldmljZSBvcGVyYXRvciBzZXR1cCBmdW5jdGlvbiwgZ2V0IGNhbGxlZCB3aXRoIGBUQ19TRVRVUF9GVGA/IE5lZWQgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBncmFwaC4gTG9va3MgbGlrZSBJJ2xsIG5lZWQgdG8gZ3JlcCB0aGUga2VybmVsIHNvdXJjZSBmb3IgdGhlIHVzZSBvZiB0aGF0IGZsYWcuIExldCdzIHN0YXJ0IHRoZXJlIHRvIGZpbmQgdGhlIHBhcmVudCBjYWxsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA4MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6MzguNDUzODg2NzUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY1NDM2NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRDX1NFVFVQX0ZUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0zMDU9bmRvX3NldHVwX3RjOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTMwOS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6MzEwOlxcdEZvciBgYFRDX1NFVFVQX0JMT0NLYGAgYW5kIGBgVENfU0VUVVBfRlRgYCBgYHJ0bmxfbG9ja2BgIG1heSBvclxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMTEtXFx0bWF5IG5vdCBiZSBoZWxkLCBhbmQgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGlzIG5vdCBoZWxkLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDozMTI6XFx0YGBUQ19TRVRVUF9CTE9DS2BgIHJ1bnMgdW5kZXIgYGBibG9jay1cXHUwMDNlY2JfbG9ja2BgIGFuZCBgYFRDX1NFVFVQX0ZUYGBcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMzEzLVxcdHJ1bnMgdW5kZXIgYGBmbG93dGFibGUtXFx1MDAzZWZsb3dfYmxvY2tfbG9ja2BgLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zMzI0PXN0YXRpYyBpbnQgYWlyb2hhX2Rldl90Y19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zMzMyLVxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozMzMzOlxcdGNhc2UgVENfU0VUVVBfRlQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zMzM0LVxcdFxcdHJldHVybiBhaXJvaGFfZGV2X3NldHVwX3RjX2Jsb2NrKGRldiwgdHlwZV9kYXRhKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTY2OT1pbnQgbXRrX2V0aF9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTY3My1cXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjY3NDpcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTY3NS1cXHRcXHRyZXR1cm4gbXRrX2V0aF9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfd2VkLmM9Mjc2MD1tdGtfd2VkX3NldHVwX3RjKHN0cnVjdCBtdGtfd2VkX2RldmljZSAqd2VkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3dlZC5jLTI3NjktXFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfd2VkLmM6Mjc3MDpcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a193ZWQuYy0yNzcxLVxcdFxcdHJldHVybiBtdGtfd2VkX3NldHVwX3RjX2Jsb2NrKGh3LCBkZXYsIHR5cGVfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcmVwL3RjLmM9MjQ3PWludCBtbHg1ZV9yZXBfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcmVwL3RjLmMtMjYwLVxcdFxcdFxcdFxcdFxcdFxcdCAgcHJpdiwgcHJpdiwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3JlcC90Yy5jOjI2MTpcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYy0yNjItXFx0XFx0cmV0dXJuIGZsb3dfYmxvY2tfY2Jfc2V0dXBfc2ltcGxlKHR5cGVfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYz02NjI9aW50IG1seDVlX3JlcF9pbmRyX3NldHVwX2NiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBRZGlzYyAqc2NoLCB2b2lkICpjYl9wcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3JlcC90Yy5jLTY3NC1cXHRcXHRcXHRcXHRcXHRcXHQgIGRhdGEsIGNsZWFudXApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYzo2NzU6XFx0Y2FzZSBUQ19TRVRVUF9GVDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcmVwL3RjLmMtNjc2LVxcdFxcdHJldHVybiBtbHg1ZV9yZXBfaW5kcl9zZXR1cF9ibG9jayhuZXRkZXYsIHNjaCwgY2JfcHJpdiwgdHlwZV9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3RjLmM9Nzc9bnNpbV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3RjLmMtOTAtXFx0XFx0XFx0XFx0XFx0XFx0ICBucywgbnMsIHRydWUpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90Yy5jOjkxOlxcdGNhc2UgVENfU0VUVVBfRlQ6XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3RjLmMtOTItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L25wdS5jPTM3MT1pbnQgbXQ3Nl9ucHVfbmV0X3NldHVwX3RjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9ucHUuYy0zODQtXFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L25wdS5jOjM4NTpcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbnB1LmMtMzg2LVxcdFxcdHJldHVybiBtdDc2X25wdV9zZXR1cF90Y19ibG9jayhwaHksIGRldiwgdHlwZV9kYXRhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9OTU4PWVudW0gdGNfc2V0dXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTk3My1cXHRUQ19TRVRVUF9RRElTQ19UQVBSSU8sXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo5NzQ6XFx0VENfU0VUVVBfRlQsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC05NzUtXFx0VENfU0VUVVBfUURJU0NfRVRTLFxcbi0tXFxubmV0L2RzYS91c2VyLmM9MTcyMT1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNzMxLVxcdFxcdGlmIChkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKVxcbm5ldC9kc2EvdXNlci5jOjE3MzI6XFx0XFx0XFx0ZXJyID0gZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXFx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCxcXG5uZXQvZHNhL3VzZXIuYy0xNzMzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYm8pO1xcbi0tXFxubmV0L2RzYS91c2VyLmMtMTczNy1cXHR9IGVsc2UgaWYgKGRwLVxcdTAwM2VmdF9vbl9zd2l0Y2gpIHtcXG5uZXQvZHNhL3VzZXIuYzoxNzM4OlxcdFxcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cXHUwMDNlaW5kZXgsIFRDX1NFVFVQX0ZULCBibyk7XFxubmV0L2RzYS91c2VyLmMtMTczOS1cXHR9XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNzQzLVxcbm5ldC9kc2EvdXNlci5jOjE3NDQ6XFx0cmV0dXJuIGNvbmR1aXQtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xcbm5ldC9kc2EvdXNlci5jLTE3NDUtfVxcbi0tXFxubmV0L2RzYS91c2VyLmM9MTc0Nz1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTc1NS1cXHRcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soZGV2LCB0eXBlX2RhdGEpO1xcbm5ldC9kc2EvdXNlci5jOjE3NTY6XFx0Y2FzZSBUQ19TRVRVUF9GVDpcXG5uZXQvZHNhL3VzZXIuYy0xNzU3LVxcdFxcdHJldHVybiBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhkcCwgdHlwZV9kYXRhKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTIzOD1zdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfaW5kcl9vZmZsb2FkX2NtZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI0Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyNDc6XFx0cmV0dXJuIGZsb3dfaW5kcl9kZXZfc2V0dXBfb2ZmbG9hZChkZXYsIE5VTEwsIFRDX1NFVFVQX0ZULCBmbG93dGFibGUsIGJvLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI0OC1cXHRcXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX2luZHJfY2xlYW51cCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyNTE9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kKHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjYxLVxcdGRvd25fd3JpdGUoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmxvd19ibG9ja19sb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyNjI6XFx0ZXJyID0gZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0dXBfdGMoZGV2LCBUQ19TRVRVUF9GVCwgYm8pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI2My1cXHR1cF93cml0ZShcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo0MC4zMTkzMzAwMTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE3NTkzNDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERTQSBPZmZsb2FkIFBhdGgqKlxuXG5Pa2F5LCBzbyBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIEl0J3MgY2FsbGluZyBgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldHVwX3RjKGRldiwgVENfU0VUVVBfRlQsIGJvKWAuIFJpZ2h0LCBhbmQgdGhhdCBgbmRvX3NldHVwX3RjYCBmdW5jdGlvbiBpcyBiZWluZyBhc3NpZ25lZCB3aXRoaW4gYG5ldC9kc2EvdXNlci5jYCB0byBgZHNhX3VzZXJfbmV0ZGV2X29wc2AgYXMgYGRzYV91c2VyX3NldHVwX3RjYC4gVGhpcyBtZWFucyB0aGF0IHdoZW4gd2UgY29uZmlndXJlIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCB1c2luZyBzb21ldGhpbmcgbGlrZSB0aGF0IGBuZnRgIGNvbW1hbmQgKGFuZCBzcGVjaWZ5aW5nIHRoZSBgZHNhX3VzZXJfZGV2YCksIGl0IGV2ZW50dWFsbHkgZ29lcyB0aHJvdWdoIHRoaXMgcGF0aDogYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWRgIC1cdTAwM2UgIGBuZG9fc2V0dXBfdGNgLCB3aXRoIHRoZSBgVENfU0VUVVBfRlRgIHBhcmFtZXRlci4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgZXhwZWN0ZWQgY2hhaW4gb2YgZXZlbnRzLlxuXG5Ob3csIGEgY3JpdGljYWwgcXVlc3Rpb24gYXJpc2VzIGluIG15IG1pbmQ6IGNhbiB0aGVzZSBEU0EgZGV2aWNlcyBhY3R1YWxseSBiZSBpbnN0YW50aWF0ZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gU29tZXRoaW5nIGxpa2UgUUVNVSBvciBldmVuIHN5emthbGxlcj8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgdGVzdGFiaWxpdHkgb2YgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IERTQSBzd2l0Y2hlcyBhbmQgZGV2aWNlcyBhcmUgYWN0dWFsbHkgY3JlYXRlZCBhbmQgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgcHJvdmlkZXMgYSBjb21wYXRpYmxlIGludGVyZmFjZS5cblxuSeKAmW0gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgYGRzYV9sb29wYC4gSXMgdGhhdCBhIHNvZnR3YXJlIG9yIG1vY2sgZHJpdmVyLCBvciBpcyBpdCBzb21ldGhpbmcgbW9yZSB0YW5naWJsZT8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuY2AgYW5kIGBkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3BfYmRpbmZvLmNgIHRvIHNlZSBob3cgaXQncyBsb2FkZWQgYW5kIGNyZWF0ZWQuIEdldHRpbmcgdGhhdCBhbnN3ZXJlZCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0byBiZXN0IGFwcHJvYWNoIHRoZSBldmFsdWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUzNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo0My40OTUyNjcwMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNDY4NjE3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkc2FfbG9vcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9Mz1iY20tc2YyLW9ianNcXHRcXHRcXHQ6PSBiY21fc2YyLm8gYmNtX3NmMl9jZnAub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXFx0Kz0gZHNhX2xvb3Aub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNi1cXHR1MTYgbWVtYmVycztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVxcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU6ZW51bSBkc2FfbG9vcF9taWJfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVxcdERTQV9MT09QX1BIWV9SRUFEX09LLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0OlxcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXFx0dTE2IHB2aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTpzdHJ1Y3QgZHNhX2xvb3BfcHJpdiB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXFx0c3RydWN0IG1paV9idXNcXHQqYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVxcdHVuc2lnbmVkIGludFxcdHBvcnRfYmFzZTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0OlxcdHN0cnVjdCBkc2FfbG9vcF9wb3J0IHBvcnRzW0RTQV9NQVhfUE9SVFNdO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTc6c3RydWN0IGRzYV9sb29wX3BkYXRhIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY4LVxcdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cXHQ9IHsgXFxcInBoeV9yZWFkX29rXFxcIiwgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc1PXN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzgtXFx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4NDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVxcdHVuc2lnbmVkIGludCBpLCBjb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XFx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6OTc6c3RhdGljIGludCBkc2FfbG9vcF9zZXR1cF9kZXZsaW5rX3Jlc291cmNlcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHNpemVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cXHRcXHRcXHRcXHRcXHQgICAgICBEU0FfTE9PUF9ERVZMSU5LX1BBUkFNX0lEX1ZUVSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgZHNhX2xvb3BfZGV2bGlua192dHVfZ2V0LCBwcyk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzUte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDA6XFx0XFx0bWVtY3B5KHBzLVxcdTAwM2Vwb3J0c1tpXS5taWIsIGRzYV9sb29wX21pYnMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlxcdFxcdCAgICAgICBzaXplb2YoZHNhX2xvb3BfbWlicykpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XFx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDYtfVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTUzOnN0YXRpYyBpbnQgZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXFx0XFx0XFx0XFx0IHUzMiBzdHJpbmdzZXQsIHVpbnQ4X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE3NDpzdGF0aWMgdm9pZCBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICAgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg1LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5OTpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cXHRcXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMDI6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAzLVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjMzOnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cXHRcXHRcXHRcXHRcXHR1OCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNDA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjUwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXFx0Ym9vbCB1bnRhZ2dlZCA9IHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg4LVxcdHUxNiBwdmlkID0gcHMtXFx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI5MDpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMi1cXHRcXHRcXHRcXHQgICAgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMTQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzIxOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZHNhX2xvb3BfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gZHNhX2xvb3BfZ2V0X3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcXHQuc2V0dXBcXHRcXHRcXHQ9IGRzYV9sb29wX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNzpcXHQudGVhcmRvd25cXHRcXHQ9IGRzYV9sb29wX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MTpcXHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXFx0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDI6XFx0LnBoeV9yZWFkXFx0XFx0PSBkc2FfbG9vcF9waHlfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XFx0LnBoeV93cml0ZVxcdFxcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XFx0LnBvcnRfYnJpZGdlX2xlYXZlXFx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XFx0LnBvcnRfc3RwX3N0YXRlX3NldFxcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ5OlxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBkc2FfbG9vcF9wb3J0X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XFx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVxcdGRzLVxcdTAwM2Vwcml2ID0gcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXFx0Lm1kaW9kcnYuZHJpdmVyXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjYtXFx0fSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XFx0LnByb2JlXFx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4OlxcdC5yZW1vdmVcXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5OlxcdC5zaHV0ZG93biA9IGRzYV9sb29wX2Rydl9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDMyOnN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcXHRyZXR1cm4gZHJ2ID09IFxcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgZHNhX2xvb3BfcGRhdGEgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVxcdFxcdC5jZCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXFx1MDAyNmRzYV9sb29wX3BkYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3OlxcdHJldCA9IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldigpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcXHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcXHRcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTAzOm1vZHVsZV9pbml0KGRzYV9sb29wX2luaXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDktXFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6NDQuMzA5OTU3NzY4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDU0NDU5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgYGRzYV9sb29wYCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZHNhX2xvb3BgLiBSaWdodCwgaXQncyBhIHNvZnR3YXJlIG1vY2sgZm9yIGEgRFNBIHN3aXRjaCBkcml2ZXIuIFRoZSBpbXBvcnRhbnQgYml0IGlzIHRoYXQgaXQgc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBjb25uZWN0aW9ucyB0byBhIGZpeGVkIFBIWSwgTURJTywgYW5kLCBlc3NlbnRpYWxseSwgbG9vcGJhY2sgdGVzdGluZy4gR29vZCB0byBrbm93LiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSBzb3VyY2UgZmlsZSBJIGV4cGVjdCB0byBiZSBpbnZvbHZlZCBpbiBpdHMgY29yZSBmdW5jdGlvbmFsaXR5OiBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wX2JkaW5mby5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGhhbmRsZXMgaXRzIGJ1cyBkYXRhIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc0MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjQ2LjM1NTQwNzA1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvZHNhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImJjbV9zZjIuY1wiLFxuICAgIFwiYmNtX3NmMi5oXCIsXG4gICAgXCJiY21fc2YyX2NmcC5jXCIsXG4gICAgXCJiY21fc2YyX3JlZ3MuaFwiLFxuICAgIFwiZHNhX2xvb3AuY1wiLFxuICAgIFwia3M4OTk1LmNcIixcbiAgICBcImxhbjkzMDMtY29yZS5jXCIsXG4gICAgXCJsYW45MzAzLmhcIixcbiAgICBcImxhbjkzMDNfaTJjLmNcIixcbiAgICBcImxhbjkzMDNfbWRpby5jXCIsXG4gICAgXCJtdDc1MzAtbWRpby5jXCIsXG4gICAgXCJtdDc1MzAtbW1pby5jXCIsXG4gICAgXCJtdDc1MzAuY1wiLFxuICAgIFwibXQ3NTMwLmhcIixcbiAgICBcIm10NzYyOC5jXCIsXG4gICAgXCJtdjg4ZTYwNjAuY1wiLFxuICAgIFwibXY4OGU2MDYwLmhcIixcbiAgICBcInJ6bjFfYTVwc3cuY1wiLFxuICAgIFwicnpuMV9hNXBzdy5oXCIsXG4gICAgXCJ2aXRlc3NlLXZzYzczeHgtY29yZS5jXCIsXG4gICAgXCJ2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0uY1wiLFxuICAgIFwidml0ZXNzZS12c2M3M3h4LXNwaS5jXCIsXG4gICAgXCJ2aXRlc3NlLXZzYzczeHguaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJiNTNcIixcbiAgICBcImhpcnNjaG1hbm5cIixcbiAgICBcImxhbnRpcVwiLFxuICAgIFwibWljcm9jaGlwXCIsXG4gICAgXCJtb3RvcmNvbW1cIixcbiAgICBcIm12ODhlNnh4eFwiLFxuICAgIFwibXhsODYyeHhcIixcbiAgICBcIm5ldGNcIixcbiAgICBcIm9jZWxvdFwiLFxuICAgIFwicWNhXCIsXG4gICAgXCJyZWFsdGVrXCIsXG4gICAgXCJzamExMTA1XCIsXG4gICAgXCJ4cnM3MDB4XCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6NDYuMzU1NDg4ODU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjUyMjY0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IHByb21wdCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQgd291bGQgdGhpbmsgYWJvdXQgaXQ6XG5cbioqRXhhbWluaW5nIERTQSBMb29wIENyZWF0aW9uIGFuZCBDb25kdWl0IEJpbmRpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEU0EgbG9vcCBpcyBiZWluZyBjcmVhdGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0J3MgYWN0dWFsbHkgdGllZCBpbnRvIGEgY29uZHVpdC4gVGhlIGNvcmUgbG9naWMgaXMgbGlrZWx5IHdpdGhpbiBgZHNhX2xvb3AuY2AsIGFuZCB0aGUga2V5IGZ1bmN0aW9uIHRvIGRpc3NlY3QgaXMgYGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldmAuIFRoYXQgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBwcmV0dHkgZ29vZCBoaW50IOKAkyBpdCBzdWdnZXN0cyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBsb29wLCB0aGUgc3dpdGNoLCBhbmQgdGhlIE1ESU8gKE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQpIGludGVyZmFjZSwgd2hpY2ggaXMgdmVyeSByZWxldmFudCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBQSFlzLiBNeSBndWVzcyBpcyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHdoZXJlIHRoZSBsb29wIGlzIGluaXRpYWxpemVkLCBhbmQgdGhlbiBzb21laG93LCBhIGNvbmR1aXQgKG9yIGl0cyByZXByZXNlbnRhdGlvbikgZ2V0cyBhc3NvY2lhdGVkIHdpdGggaXQsIHByb2JhYmx5IHVzaW5nIGEgcG9pbnRlciBvciBzb21lIGRhdGEgc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFzIHdlbGwsIGFzIHRob3NlIHdvdWxkIGNvbnRhaW4gYWxsIHRoZSByZWxldmFudCBkYXRhLiBMZXQncyBzdGFydCByZWFkaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM1MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo0OC43ODA3MTc4MDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQ1OlxcdFxcbiA0NDY6XFx0c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KHZvaWQpXFxuIDQ0NzpcXHR7XFxuIDQ0ODpcXHRcXHRzdGF0aWMgc3RydWN0IGRzYV9sb29wX3BkYXRhIGRzYV9sb29wX3BkYXRhID0ge1xcbiA0NDk6XFx0XFx0XFx0LmNkID0ge1xcbiA0NTA6XFx0XFx0XFx0XFx0LnBvcnRfbmFtZXNbMF0gPSBcXFwibGFuMVxcXCIsXFxuIDQ1MTpcXHRcXHRcXHRcXHQucG9ydF9uYW1lc1sxXSA9IFxcXCJsYW4yXFxcIixcXG4gNDUyOlxcdFxcdFxcdFxcdC5wb3J0X25hbWVzWzJdID0gXFxcImxhbjNcXFwiLFxcbiA0NTM6XFx0XFx0XFx0XFx0LnBvcnRfbmFtZXNbM10gPSBcXFwibGFuNFxcXCIsXFxuIDQ1NDpcXHRcXHRcXHRcXHQucG9ydF9uYW1lc1tEU0FfTE9PUF9DUFVfUE9SVF0gPSBcXFwiY3B1XFxcIixcXG4gNDU1OlxcdFxcdFxcdH0sXFxuIDQ1NjpcXHRcXHRcXHQubmFtZSA9IFxcXCJEU0EgbW9ja3VwIGRyaXZlclxcXCIsXFxuIDQ1NzpcXHRcXHRcXHQuZW5hYmxlZF9wb3J0cyA9IDB4MWYsXFxuIDQ1ODpcXHRcXHRcXHQubmV0ZGV2ID0gXFxcImV0aDBcXFwiLFxcbiA0NTk6XFx0XFx0fTtcXG4gNDYwOlxcdFxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuIDQ2MTpcXHRcXHRpbnQgcmV0ID0gLUVOT0RFVjtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0YnVzID0gbWRpb19maW5kX2J1cyhcXFwiZml4ZWQtMFxcXCIpO1xcbiA0NjQ6XFx0XFx0aWYgKFdBUk5fT04oIWJ1cykpXFxuIDQ2NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0NjY6XFx0XFxuIDQ2NzpcXHRcXHRzd2l0Y2hfbWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIDMxKTtcXG4gNDY4OlxcdFxcdGlmIChJU19FUlIoc3dpdGNoX21kaW9kZXYpKVxcbiA0Njk6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdFxcdHN3aXRjaF9tZGlvZGV2LVxcdTAwM2VidXNfbWF0Y2ggPSBkc2FfbG9vcF9idXNfbWF0Y2g7XFxuIDQ3MjpcXHRcXHRzd2l0Y2hfbWRpb2Rldi1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBcXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XFxuIDQ3MzpcXHRcXG4gNDc0OlxcdFxcdHJldCA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN3aXRjaF9tZGlvZGV2KTtcXG4gNDc1OlxcdFxcdGlmIChyZXQpXFxuIDQ3NjpcXHRcXHRcXHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcXG4gNDc3OlxcdG91dDpcXG4gNDc4OlxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2KTtcXG4gNDc5OlxcdFxcdHJldHVybiByZXQ7XFxuIDQ4MDpcXHR9XFxuIDQ4MTpcXHRcXG4gNDgyOlxcdHN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcXG4gNDgzOlxcdHtcXG4gNDg0OlxcdFxcdHVuc2lnbmVkIGludCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo0OC43ODA3ODU1MjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA3NjY1NTA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERTQSBGcmFtZXdvcmsgYW5kIFN5emthbGxlcidzIEludGVyYWN0aW9uKipcblxuT2theSwgc28gYE5FVF9EU0FgIGxvb2tzIGxpa2UgdGhlIGNlbnRyYWwgRFNBIGZyYW1ld29yaywgbGl2aW5nIGluIGBuZXQvZHNhL2AsIHNwZWNpZmljYWxseSBpbiBgdXNlci5jYCwgYGNvbmR1aXQuY2AsIGFuZCBgZHNhLmNgLCBhcyB5b3Ugd291bGQgZXhwZWN0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBEU0EuIEFyZSB0aGVyZSBhbnkgc3lzIGRlc2NyaXB0aW9ucyBpbiBzeXprYWxsZXIgcmVsYXRlZCB0byBpdCwgb3IgaXMgaXQgdHJ5aW5nIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIG5ldGxpbmsgZmxvd3RhYmxlIG9mZmxvYWRzIG9yIG5ldGRldmljZXMgaW4gYSB3YXkgdGhhdCByZWxhdGVzP1xuXG5JIGtub3cgc3l6a2FsbGVyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBjcmVhdGUgYW5kIGNvbmZpZ3VyZSBhbGwgc29ydHMgb2YgbmV0d29yayBlbGVtZW50czogZGV2aWNlcywgYnJpZGdlcywgdmV0aCBwYWlycywgbmV0ZmlsdGVyIHRhYmxlcy9mbG93dGFibGVzLCB0YyBmaWx0ZXJzL2Jsb2NrcywgYW5kIGRldmxpbmsgb2JqZWN0cy4gSXQncyBleHRlbnNpdmUuIEFuZCBzaW5jZSBgbmV0L2RzYS9gIHNpdHMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzcGFjZSAoYG5ldC9gKSwgaXQgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gY2hlY2suXG5cbkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgcGF0Y2ggZGV0YWlscyBwcm92aWRlZC5cblxuVGhlIGRpZmYgaW50cm9kdWNlcyBhIGBmdF9vbl9zd2l0Y2hgIGJvb2xlYW4gdG8gdGhlIGBkc2FfcG9ydGAgc3RydWN0LiBUaGlzIGlzIGludGVyZXN0aW5nLiBJdCBpbmRpY2F0ZXMgYSBkZWNpc2lvbiBwb2ludDogd2hldGhlciBmbG93dGFibGUgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCBhIHVzZXIgcG9ydCBhcmUgaGFuZGxlZCBieSB0aGUgc3dpdGNoIGRpcmVjdGx5IG9yIHRocm91Z2ggdGhlIGNvbmR1aXQuIFRoZSBjb21tZW50cyBzcGVjaWZ5IHRoYXQgdGhpcyBpcyBkZWNpZGVkIGF0IGJpbmQgdGltZSBhbmQgZG9lc24ndCB1c2UgdGhlIHVzdWFsIGJpdCBmaWVsZHMsIHNvIGl0IGxpa2VseSBuZWVkcyBhIHNwZWNpYWwgaGFuZGxpbmcuXG5cblRoZSBrZXkgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBmbG93dGFibGUgYmxvY2sgaXMgc2V0IHVwIChgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgKS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIG5vdyB0YWtlcyBhIGBkc2FfcG9ydGAgc3RydWN0dXJlIGFuZCBgZmxvd19ibG9ja19vZmZsb2FkYCBhcyBhcmd1bWVudHMuIFRoZSBpbXBvcnRhbnQgbG9naWMgc2VlbXMgdG8gYmUgYXJvdW5kIHRoaXMgbmV3IGJvb2xlYW4gZmxhZyBgZHAtXHUwMDNlZnRfb25fc3dpdGNoYC5cblxuV2hlbiBiaW5kaW5nLCB0aGUgY29kZSBjaGVja3MgaWYgdGhlIHN3aXRjaCdzIG9wZXJhdGlvbnMgc3VwcG9ydCBwb3J0IHNldHVwIGZvciB0cmFmZmljIGNvbnRyb2wuIElmIHNvLCBgZnRfb25fc3dpdGNoYCBpcyBzZXQgYmFzZWQgb24gdGhpcy4gIElmIG5vdCwgaXQgZmFsbHMgYmFjayB0byB0aGUgY29uZHVpdCdzIGBuZG9fc2V0dXBfdGNgLiBUaGUgdW5iaW5kIGFjdGlvbiBpcyBkaXJlY3RlZCB0byB0aGUgcGFydHkgd2hpY2ggdG9vayB0aGUgYmluZC5cblxuVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzd2l0Y2ggaGFzIGl0cyBvd24gd2F5IG9mIGhhbmRsaW5nIGZsb3d0YWJsZXMsIHRoZW4gaXQgd2lsbDsgb3RoZXJ3aXNlLCBpdCBpcyBwYXNzZWQgb24gdG8gdGhlIGNvbmR1aXQuIFRoaXMgbWFrZXMgc2Vuc2UuXG5cbkxhc3RseSwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYE5FVF9EU0FgIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI3OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo1NC44NTc0NDI4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNTg2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX0RTQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9LY29uZmlnLTItXFxubmV0L2RzYS9LY29uZmlnOjM6bWVudWNvbmZpZyBORVRfRFNBXFxubmV0L2RzYS9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkRpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTYtXFxubmV0L2RzYS9LY29uZmlnOjE3OmlmIE5FVF9EU0FcXG5uZXQvZHNhL0tjb25maWctMTgtXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjAtXFxubmV0L2RzYS9LY29uZmlnOjIxOmNvbmZpZyBORVRfRFNBX1RBR19OT05FXFxubmV0L2RzYS9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJOby1vcCB0YWcgZHJpdmVyXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTI2LVxcbm5ldC9kc2EvS2NvbmZpZzoyNzpjb25maWcgTkVUX0RTQV9UQUdfQVI5MzMxXFxubmV0L2RzYS9LY29uZmlnLTI4LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBBdGhlcm9zIEFSOTMzMSBTb0Mgd2l0aCBidWlsdC1pbiBzd2l0Y2hcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMzItXFxubmV0L2RzYS9LY29uZmlnOjMzOmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0NPTU1PTlxcbm5ldC9kc2EvS2NvbmZpZy0zNC1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTM2LVxcbm5ldC9kc2EvS2NvbmZpZzozNzpjb25maWcgTkVUX0RTQV9UQUdfQlJDTVxcbm5ldC9kc2EvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgQnJvYWRjb20gc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1xcXCJcXG5uZXQvZHNhL0tjb25maWc6Mzk6XFx0c2VsZWN0IE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXFxubmV0L2RzYS9LY29uZmlnLTQwLVxcdGhlbHBcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy00My1cXG5uZXQvZHNhL0tjb25maWc6NDQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fTEVHQUNZXFxubmV0L2RzYS9LY29uZmlnLTQ1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBCQ002M3h4IGxlZ2FjeSBzd2l0Y2hlcyB1c2luZyBpbi1mcmFtZSBoZWFkZXJzXFxcIlxcbm5ldC9kc2EvS2NvbmZpZzo0NjpcXHRzZWxlY3QgTkVUX0RTQV9UQUdfQlJDTV9DT01NT05cXG5uZXQvZHNhL0tjb25maWctNDctXFx0aGVscFxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTUzLVxcbm5ldC9kc2EvS2NvbmZpZzo1NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9MRUdBQ1lfRkNTXFxubmV0L2RzYS9LY29uZmlnLTU1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBCQ001M3h4IGxlZ2FjeSBzd2l0Y2hlcyB1c2luZyBpbi1mcmFtZSBoZWFkZXJzXFxcIlxcbm5ldC9kc2EvS2NvbmZpZzo1NjpcXHRzZWxlY3QgTkVUX0RTQV9UQUdfQlJDTV9DT01NT05cXG5uZXQvZHNhL0tjb25maWctNTctXFx0aGVscFxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTYzLVxcbm5ldC9kc2EvS2NvbmZpZzo2NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9QUkVQRU5EXFxubmV0L2RzYS9LY29uZmlnLTY1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBCcm9hZGNvbSBzd2l0Y2hlcyB1c2luZyBwcmVwZW5kZWQgaGVhZGVyc1xcXCJcXG5uZXQvZHNhL0tjb25maWc6NjY6XFx0c2VsZWN0IE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXFxubmV0L2RzYS9LY29uZmlnLTY3LVxcdGhlbHBcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy03MS1cXG5uZXQvZHNhL0tjb25maWc6NzI6Y29uZmlnIE5FVF9EU0FfVEFHX0hFTExDUkVFS1xcbm5ldC9kc2EvS2NvbmZpZy03My1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgSGlyc2NobWFubiBIZWxsY3JlZWsgVFNOIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTc3LVxcbm5ldC9kc2EvS2NvbmZpZzo3ODpjb25maWcgTkVUX0RTQV9UQUdfR1NXSVBcXG5uZXQvZHNhL0tjb25maWctNzktXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIExhbnRpcSAvIEludGVsIEdTV0lQIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTgzLVxcbm5ldC9kc2EvS2NvbmZpZzo4NDpjb25maWcgTkVUX0RTQV9UQUdfRFNBX0NPTU1PTlxcbm5ldC9kc2EvS2NvbmZpZy04NS1cXHR0cmlzdGF0ZVxcbm5ldC9kc2EvS2NvbmZpZy04Ni1cXG5uZXQvZHNhL0tjb25maWc6ODc6Y29uZmlnIE5FVF9EU0FfVEFHX0RTQVxcbm5ldC9kc2EvS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWFydmVsbCBzd2l0Y2hlcyB1c2luZyBEU0EgaGVhZGVyc1xcXCJcXG5uZXQvZHNhL0tjb25maWc6ODk6XFx0c2VsZWN0IE5FVF9EU0FfVEFHX0RTQV9DT01NT05cXG5uZXQvZHNhL0tjb25maWctOTAtXFx0aGVscFxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTkzLVxcbm5ldC9kc2EvS2NvbmZpZzo5NDpjb25maWcgTkVUX0RTQV9UQUdfRURTQVxcbm5ldC9kc2EvS2NvbmZpZy05NS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWFydmVsbCBzd2l0Y2hlcyB1c2luZyBFdGhlclR5cGUgRFNBIGhlYWRlcnNcXFwiXFxubmV0L2RzYS9LY29uZmlnOjk2OlxcdHNlbGVjdCBORVRfRFNBX1RBR19EU0FfQ09NTU9OXFxubmV0L2RzYS9LY29uZmlnLTk3LVxcdGhlbHBcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xMDAtXFxubmV0L2RzYS9LY29uZmlnOjEwMTpjb25maWcgTkVUX0RTQV9UQUdfTVQ3NjI4XFxubmV0L2RzYS9LY29uZmlnLTEwMi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgdGhlIE1UNzYyOCBlbWJlZGRlZCBzd2l0Y2hcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTA2LVxcbm5ldC9kc2EvS2NvbmZpZzoxMDc6Y29uZmlnIE5FVF9EU0FfVEFHX01US1xcbm5ldC9kc2EvS2NvbmZpZy0xMDgtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE1lZGlhdGVrIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTExMi1cXG5uZXQvZHNhL0tjb25maWc6MTEzOmNvbmZpZyBORVRfRFNBX1RBR19NWExfODYyWFhcXG5uZXQvZHNhL0tjb25maWctMTE0LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTE5LVxcbm5ldC9kc2EvS2NvbmZpZzoxMjA6Y29uZmlnIE5FVF9EU0FfVEFHX01YTF9HU1cxWFhcXG5uZXQvZHNhL0tjb25maWctMTIxLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgR1NXMXh4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEyNy1cXG5uZXQvZHNhL0tjb25maWc6MTI4OmNvbmZpZyBORVRfRFNBX1RBR19LU1pcXG5uZXQvZHNhL0tjb25maWctMTI5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNaWNyb2NoaXAgODc5NS85Mzd4Lzk0NzcvOTg5MyBmYW1pbGllcyBvZiBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xMzMtXFxubmV0L2RzYS9LY29uZmlnOjEzNDpjb25maWcgTkVUX0RTQV9UQUdfTkVUQ1xcbm5ldC9kc2EvS2NvbmZpZy0xMzUtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE5YUCBORVRDIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE0My1cXG5uZXQvZHNhL0tjb25maWc6MTQ0OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1RcXG5uZXQvZHNhL0tjb25maWctMTQ1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBOUEkgcG9ydFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNTQtXFxubmV0L2RzYS9LY29uZmlnOjE1NTpjb25maWcgTkVUX0RTQV9UQUdfT0NFTE9UXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTE1Ni1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgT2NlbG90IGZhbWlseSBvZiBzd2l0Y2hlcywgdXNpbmcgVkxBTlxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNjQtXFxubmV0L2RzYS9LY29uZmlnOjE2NTpjb25maWcgTkVUX0RTQV9UQUdfUUNBXFxubmV0L2RzYS9LY29uZmlnLTE2Ni1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNzAtXFxubmV0L2RzYS9LY29uZmlnOjE3MTpjb25maWcgTkVUX0RTQV9UQUdfUlRMNF9BXFxubmV0L2RzYS9LY29uZmlnLTE3Mi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUmVhbHRlayA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE3Ny1cXG5uZXQvZHNhL0tjb25maWc6MTc4OmNvbmZpZyBORVRfRFNBX1RBR19SVEw4XzRcXG5uZXQvZHNhL0tjb25maWctMTc5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZWFsdGVrIDggYnl0ZSBwcm90b2NvbCA0IHRhZ3NcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTgzLVxcbm5ldC9kc2EvS2NvbmZpZzoxODQ6Y29uZmlnIE5FVF9EU0FfVEFHX1JaTjFfQTVQU1dcXG5uZXQvZHNhL0tjb25maWctMTg1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZW5lc2FzIFJaL04xIEE1UFNXIHN3aXRjaFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xOTAtXFxubmV0L2RzYS9LY29uZmlnOjE5MTpjb25maWcgTkVUX0RTQV9UQUdfTEFOOTMwM1xcbm5ldC9kc2EvS2NvbmZpZy0xOTItXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIFNNU0MvTWljcm9jaGlwIExBTjkzMDMgZmFtaWx5IG9mIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE5Ni1cXG5uZXQvZHNhL0tjb25maWc6MTk3OmNvbmZpZyBORVRfRFNBX1RBR19TSkExMTA1XFxubmV0L2RzYS9LY29uZmlnLTE5OC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTlhQIFNKQTExMDUgc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjA1LVxcbm5ldC9kc2EvS2NvbmZpZzoyMDY6Y29uZmlnIE5FVF9EU0FfVEFHX1RSQUlMRVJcXG5uZXQvZHNhL0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBzd2l0Y2hlcyB1c2luZyBhIHRyYWlsZXIgdGFnXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIxMS1cXG5uZXQvZHNhL0tjb25maWc6MjEyOmNvbmZpZyBORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWljcm9jaGlwL1ZpdGVzc2UgVlNDNzN4eCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjE3LVxcbm5ldC9kc2EvS2NvbmZpZzoyMTg6Y29uZmlnIE5FVF9EU0FfVEFHX1hSUzcwMFhcXG5uZXQvZHNhL0tjb25maWctMjE5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBYUlM3MDB4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIyMy1cXG5uZXQvZHNhL0tjb25maWc6MjI0OmNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcXG5uZXQvZHNhL0tjb25maWctMjI1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IHN3aXRjaGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo1NC45MDM2MDQzMzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUzMjc5NzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBuZXQvZHNhL01ha2VmaWxlYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBuZXQvZHNhL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbid0IGl0PyBJdCdzIHRoZSBjZW50cmFsIHBvaW50IGZvciBidWlsZGluZyBhbGwgdGhpbmdzIERTQSDigJMgdGhlIHdob2xlIGluZnJhc3RydWN0dXJlLCBmcm9tIHRoZSBiYXNpYyBkZXZpY2UgZHJpdmVycyB0byB0aGUgc3dpdGNoIG1hbmFnZW1lbnQgdG9vbHMuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIGEgbmV3IHRhcmdldCBmb3IgYSBjdXN0b20gc3dpdGNoIGNvbmZpZ3VyYXRpb24gSSdtIHdvcmtpbmcgb24sIG9yIHBlcmhhcHMgSSBzdXNwZWN0IGEgYnVpbGQgZGVwZW5kZW5jeSBpc3N1ZSByZWxhdGVkIHRvIGEgcmVjZW50IGtlcm5lbCB1cGRhdGUuIE9yIG1heWJlIEknbSBjaGFzaW5nIGRvd24gYSBsaW5nZXJpbmcgbGlua2VyIGVycm9yIHRoYXQncyBiZWVuIGJ1Z2dpbmcgbWUgZm9yIGRheXMuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBkZWZpbmVkIHRoZXJlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBzZWVpbmcgaG93IHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGludHJpY2FjaWVzIG9mIEtidWlsZCB2YXJpYWJsZXMgYW5kIGhvdyB0aGV5IHRyYW5zbGF0ZSB0byBvYmplY3QgZmlsZSBpbmNsdXNpb24sIGFuZCBob3cgaXQgYWxsIHJlbGF0ZXMgdG8gdGhlIG92ZXJhbGwga2VybmVsIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gcGFyc2UgdGhyb3VnaCB0aGlzIGNhcmVmdWxseSwgdGhhdCBNYWtlZmlsZSBpcyBhbHdheXMgZnVsbCBvZiBzdXJwcmlzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjcyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6NTcuNDM2NDA0MTY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE1NjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9NYWtlZmlsZT00PWlmZGVmIENPTkZJR19ORVRfRFNBXFxubmV0L2RzYS9NYWtlZmlsZTo1Om9iai15IDo9IHN0dWJzLm9cXG5uZXQvZHNhL01ha2VmaWxlLTYtZW5kaWZcXG4tLVxcbm5ldC9kc2EvTWFrZWZpbGUtOC0jIHRoZSBjb3JlXFxubmV0L2RzYS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORVRfRFNBKSArPSBkc2FfY29yZS5vXFxubmV0L2RzYS9NYWtlZmlsZS0xMC1kc2FfY29yZS15ICs9IFxcXFxcXG4tLVxcbm5ldC9kc2EvTWFrZWZpbGUtMjItIyB0YWdnaW5nIGZvcm1hdHNcXG5uZXQvZHNhL01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19BUjkzMzEpICs9IHRhZ19hcjkzMzEub1xcbm5ldC9kc2EvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0JSQ01fQ09NTU9OKSArPSB0YWdfYnJjbS5vXFxubmV0L2RzYS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfRFNBX0NPTU1PTikgKz0gdGFnX2RzYS5vXFxubmV0L2RzYS9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfR1NXSVApICs9IHRhZ19nc3dpcC5vXFxubmV0L2RzYS9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfSEVMTENSRUVLKSArPSB0YWdfaGVsbGNyZWVrLm9cXG5uZXQvZHNhL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19LU1opICs9IHRhZ19rc3oub1xcbm5ldC9kc2EvTWFrZWZpbGU6Mjk6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0xBTjkzMDMpICs9IHRhZ19sYW45MzAzLm9cXG5uZXQvZHNhL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19NVDc2MjgpICs9IHRhZ19tdDc2Mjgub1xcbm5ldC9kc2EvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01USykgKz0gdGFnX210ay5vXFxubmV0L2RzYS9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVhMXzg2MlhYKSArPSB0YWdfbXhsODYyeHgub1xcbm5ldC9kc2EvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01YTF9HU1cxWFgpICs9IHRhZ19teGwtZ3N3MXh4Lm9cXG5uZXQvZHNhL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19ORVRDKSArPSB0YWdfbmV0Yy5vXFxubmV0L2RzYS9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTk9ORSkgKz0gdGFnX25vbmUub1xcbm5ldC9kc2EvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX09DRUxPVCkgKz0gdGFnX29jZWxvdC5vXFxubmV0L2RzYS9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfT0NFTE9UXzgwMjFRKSArPSB0YWdfb2NlbG90XzgwMjFxLm9cXG5uZXQvZHNhL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19RQ0EpICs9IHRhZ19xY2Eub1xcbm5ldC9kc2EvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1JUTDRfQSkgKz0gdGFnX3J0bDRfYS5vXFxubmV0L2RzYS9NYWtlZmlsZTo0MDpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfUlRMOF80KSArPSB0YWdfcnRsOF80Lm9cXG5uZXQvZHNhL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19SWk4xX0E1UFNXKSArPSB0YWdfcnpuMV9hNXBzdy5vXFxubmV0L2RzYS9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfU0pBMTEwNSkgKz0gdGFnX3NqYTExMDUub1xcbm5ldC9kc2EvTWFrZWZpbGU6NDM6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1RSQUlMRVIpICs9IHRhZ190cmFpbGVyLm9cXG5uZXQvZHNhL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRKSArPSB0YWdfdnNjNzN4eF84MDIxcS5vXFxubmV0L2RzYS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWFJTNzAwWCkgKz0gdGFnX3hyczcwMHgub1xcbm5ldC9kc2EvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1lUOTIxWCkgKz0gdGFnX3l0OTIxeC5vXFxubmV0L2RzYS9NYWtlZmlsZS00Ny1cXG4tLVxcbm5ldC9kc2EvdXNlci5jPTczOD1zdGF0aWMgaW50IGRzYV91c2VyX3BvcnRfb2JqX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpjdHgsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy03NDctXFxubmV0L2RzYS91c2VyLmM6NzQ4OlxcdHN3aXRjaCAob2JqLVxcdTAwM2VpZCkge1xcbm5ldC9kc2EvdXNlci5jLTc0OS1cXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfUE9SVF9NREI6XFxubmV0L2RzYS91c2VyLmM6NzUwOlxcdFxcdGlmICghZHNhX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQoZHAsIG9iai1cXHUwMDNlb3JpZ19kZXYpKVxcbm5ldC9kc2EvdXNlci5jLTc1MS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy03NTUtXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX0hPU1RfTURCOlxcbm5ldC9kc2EvdXNlci5jOjc1NjpcXHRcXHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cXHUwMDNlb3JpZ19kZXYpKVxcbm5ldC9kc2EvdXNlci5jLTc1Ny1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy03NjEtXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTjpcXG5uZXQvZHNhL3VzZXIuYzo3NjI6XFx0XFx0aWYgKGRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KGRwLCBvYmotXFx1MDAzZW9yaWdfZGV2KSlcXG5uZXQvZHNhL3VzZXIuYy03NjMtXFx0XFx0XFx0ZXJyID0gZHNhX3VzZXJfdmxhbl9hZGQoZGV2LCBvYmosIGV4dGFjayk7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy03NjctXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX01SUDpcXG5uZXQvZHNhL3VzZXIuYzo3Njg6XFx0XFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfZGV2KGRwLCBvYmotXFx1MDAzZW9yaWdfZGV2KSlcXG5uZXQvZHNhL3VzZXIuYy03NjktXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2RzYS91c2VyLmMtNzczLVxcdGNhc2UgU1dJVENIREVWX09CSl9JRF9SSU5HX1JPTEVfTVJQOlxcbm5ldC9kc2EvdXNlci5jOjc3NDpcXHRcXHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cXHUwMDNlb3JpZ19kZXYpKVxcbm5ldC9kc2EvdXNlci5jLTc3NS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYz04MjA9c3RhdGljIGludCBkc2FfdXNlcl9wb3J0X29ial9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxubmV0L2RzYS91c2VyLmMtODI4LVxcbm5ldC9kc2EvdXNlci5jOjgyOTpcXHRzd2l0Y2ggKG9iai1cXHUwMDNlaWQpIHtcXG5uZXQvZHNhL3VzZXIuYy04MzAtXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfTURCOlxcbm5ldC9kc2EvdXNlci5jOjgzMTpcXHRcXHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KGRwLCBvYmotXFx1MDAzZW9yaWdfZGV2KSlcXG5uZXQvZHNhL3VzZXIuYy04MzItXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2RzYS91c2VyLmMtODM2LVxcdGNhc2UgU1dJVENIREVWX09CSl9JRF9IT1NUX01EQjpcXG5uZXQvZHNhL3VzZXIuYzo4Mzc6XFx0XFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfZGV2KGRwLCBvYmotXFx1MDAzZW9yaWdfZGV2KSlcXG5uZXQvZHNhL3VzZXIuYy04MzgtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2RzYS91c2VyLmMtODQyLVxcdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU46XFxubmV0L2RzYS91c2VyLmM6ODQzOlxcdFxcdGlmIChkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChkcCwgb2JqLVxcdTAwM2VvcmlnX2RldikpXFxubmV0L2RzYS91c2VyLmMtODQ0LVxcdFxcdFxcdGVyciA9IGRzYV91c2VyX3ZsYW5fZGVsKGRldiwgb2JqKTtcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTg0OC1cXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfTVJQOlxcbm5ldC9kc2EvdXNlci5jOjg0OTpcXHRcXHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cXHUwMDNlb3JpZ19kZXYpKVxcbm5ldC9kc2EvdXNlci5jLTg1MC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy04NTQtXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1JJTkdfUk9MRV9NUlA6XFxubmV0L2RzYS91c2VyLmM6ODU1OlxcdFxcdGlmICghZHNhX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX2RldihkcCwgb2JqLVxcdTAwM2VvcmlnX2RldikpXFxubmV0L2RzYS91c2VyLmMtODU2LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6NTcuNDgyNTY1MzY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MjQ5Mjc0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEU0EgVXNlciBOZXRkZXYgU2V0dXAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYG5ldC9kc2EvdXNlci5jYCBnZXRzIGNvbXBpbGVkIGludG8gYGRzYV9jb3JlLm9gIGFzIGxvbmcgYXMgYENPTkZJR19ORVRfRFNBYCBpcyBmbGlwcGVkIG9uLiBUaGF0IG1lYW5zIHRoZSBEU0EgY29yZSBmdW5jdGlvbmFsaXRpZXMgYXJlIGludGVncmF0ZWQgaW50byB0aGUgYnVpbGQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIG5ldGRldiBpcyBzZXQgdXAsIHNvIEknbSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgaW4gYG5ldC9kc2EvdXNlci5jYC5cblxuSSBzZWUgYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBhbmQgYGRzYV91c2VyX3NldHVwX3RjYC4gQWxyaWdodCwgYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBpcyBzdGF0aWM7IGludGVybmFsIHRvIHRoYXQgZmlsZS4gQW5kIGBkc2FfdXNlcl9zZXR1cF90Y2AgaXMgYWxzbyBzdGF0aWMsIGJ1dCB0aGF0IGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIGBkc2FfdXNlcl9uZXRkZXZfb3BzLm5kb19zZXR1cF90Y2AuIFNvLCB3aGVuIHRoZSBgbmRvX3NldHVwX3RjYCBuZXRkZXYgb3BlcmF0aW9uIGlzIGNhbGxlZCBvbiBhIERTQSB1c2VyIG5ldGRldiwgYGRzYV91c2VyX3NldHVwX3RjYCBnZXRzIGV4ZWN1dGVkLiBHb3QgaXQuIEFuZCB3aXRoaW4gdGhhdCwgYGRzYV91c2VyX3NldHVwX3RjYCBjYWxscyBgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgLlxuXG5Ob3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIHdoYXQgc3dpdGNoIGRyaXZlcnMgYXJlIHVzaW5nIHRoZSBgcG9ydF9zZXR1cF90Y2AgZnVuY3Rpb24uIEkgd2lsbCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2MzIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MDAuMjA3NDk0Nzk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxODY3NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwucG9ydF9zZXR1cF90Y1xcXFxzKj1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM9MTkwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGhlbGxjcmVla19kc19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYy0xOTIwLVxcdC5wb3J0X3J4dHN0YW1wXFx0ICAgICAgID0gaGVsbGNyZWVrX3BvcnRfcnh0c3RhbXAsXFxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM6MTkyMTpcXHQucG9ydF9zZXR1cF90Y1xcdCAgICAgICA9IGhlbGxjcmVla19wb3J0X3NldHVwX3RjLFxcbmRyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL2hlbGxjcmVlay5jLTE5MjItXFx0LnBvcnRfc3RwX3N0YXRlX3NldCAgICA9IGhlbGxjcmVla19wb3J0X3N0cF9zdGF0ZV9zZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0zMTE0PWNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMTUwLVxcdC5wb3J0X3J4dHN0YW1wXFx0XFx0PSBrc3pfcG9ydF9yeHRzdGFtcCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTUxOlxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3o4X3NldHVwX3RjLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxNTItXFx0LnBvcnRfZ2V0X2RlZmF1bHRfcHJpb1xcdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTMxNjE9Y29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg3eHhfc3dpdGNoX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMyMDAtXFx0LnBvcnRfcnh0c3RhbXBcXHRcXHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMyMDE6XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IGtzejg3eHhfc2V0dXBfdGMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzIwMi1cXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXFx0PSBrc3pfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzIxMT1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODh4eF9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzI1My1cXHQucG9ydF9yeHRzdGFtcFxcdFxcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzI1NDpcXHQucG9ydF9zZXR1cF90Y1xcdFxcdD0ga3N6OF9zZXR1cF90YyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMjU1LVxcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0yMjE1PWNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o5NDc3X3N3aXRjaF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0yMjYyLVxcdC5jbHNfZmxvd2VyX2RlbFxcdFxcdD0ga3N6OTQ3N19jbHNfZmxvd2VyX2RlbCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzoyMjYzOlxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3pfc2V0dXBfdGMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMjI2NC1cXHQuc3VwcG9ydF9lZWVcXHRcXHQ9IGtzejk0Nzdfc3VwcG9ydF9lZWUsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jPTk0OT1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbGFuOTM3eF9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy05ODktXFx0LnBvcnRfcnh0c3RhbXBcXHRcXHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6OTkwOlxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3pfc2V0dXBfdGMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy05OTEtXFx0LnBvcnRfZ2V0X2RlZmF1bHRfcHJpb1xcdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ2MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjI1LVxcdC5wb3J0X3BvbGljZXJfYWRkXFx0PSB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDYyNjpcXHQucG9ydF9zZXR1cF90Y1xcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwX3RjLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2MjctXFx0LyogYWNsICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MzM5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzUzMF9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTM0MzMtXFx0LmNvbmR1aXRfc3RhdGVfY2hhbmdlXFx0PSBtdDc1M3hfY29uZHVpdF9zdGF0ZV9jaGFuZ2UsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM0MzQ6XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IG10NzUzeF9zZXR1cF90YyxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzQzNS1cXHQucG9ydF9oc3Jfam9pblxcdFxcdD0gZHNhX3BvcnRfc2ltcGxlX2hzcl9qb2luLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTIzMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBmZWxpeF9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzNjEtXFx0LmNsc19mbG93ZXJfc3RhdHNcXHRcXHQ9IGZlbGl4X2Nsc19mbG93ZXJfc3RhdHMsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzNjI6XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHRcXHQ9IGZlbGl4X3BvcnRfc2V0dXBfdGMsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzNjMtXFx0LmRldmxpbmtfc2JfcG9vbF9nZXRcXHRcXHQ9IGZlbGl4X3NiX3Bvb2xfZ2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9MjY1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZlbGl4X2luZm8gZmVsaXhfaW5mb192c2M5OTU5ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjY3OC1cXHQucG9ydF9tb2Rlc1xcdFxcdD0gdnNjOTk1OV9wb3J0X21vZGVzLFxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjI2Nzk6XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IHZzYzk5NTlfcG9ydF9zZXR1cF90YyxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0yNjgwLVxcdC5wb3J0X3NjaGVkX3NwZWVkX3NldFxcdD0gdnNjOTk1OV9zY2hlZF9zcGVlZF9zZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0zMTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgc2phMTEwNV9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzE3My1cXHQucG9ydF90eHRzdGFtcFxcdFxcdD0gc2phMTEwNV9wb3J0X3R4dHN0YW1wLFxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjMxNzQ6XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IHNqYTExMDVfcG9ydF9zZXR1cF90YyxcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMTc1LVxcdC5wb3J0X21pcnJvcl9hZGRcXHQ9IHNqYTExMDVfbWlycm9yX2FkZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MDIuMDI5MzY3MDg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4MDUwNzExNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERTQSBGbG93dGFibGUgT2ZmbG9hZGluZyBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZsb3cgdGFibGUgY29uZmlndXJhdGlvbiB3b3JrcyB3aXRoaW4gdGhlIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgKERTQSkgaW4gdGhlIGtlcm5lbC4gSSdtIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IGZ1bmN0aW9ucyBsaWtlIGBmZWxpeF9wb3J0X3NldHVwX3RjYCwgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLCBvciByZWFsbHkgYW55IERTQSBkcml2ZXIuXG5cbk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIGBkc2FfdXNlcl9zZXR1cF90Y2AgYW5kIGVzcGVjaWFsbHkgYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYC4gSSBzZWUgdGhpcyBmdW5jdGlvbiB0YWtlcyBhIGBkc2FfcG9ydGAgYW5kIGBmbG93X2Jsb2NrX29mZmxvYWRgIHN0cnVjdC4gTG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxuXHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibylcbntcblx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRwKTtcblx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG5cdGludCBlcnI7XG5cblx0LyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi9cblx0aWYgKGJvLVx1MDAzZWNvbW1hbmQgPT0gRkxPV19CTE9DS19CSU5EKSB7XG5cdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5cdFx0aWYgKGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKVxuXHRcdFx0ZXJyID0gZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCxcblx0XHRcdFx0XHRcdCAgICAgYm8pO1xuXHRcdGRwLVx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcblx0XHRpZiAoZHAtXHUwMDNlZnRfb25fc3dpdGNoKVxuXHRcdFx0cmV0dXJuIGVycjtcblx0fSBlbHNlIGlmIChkcC1cdTAwM2VmdF9vbl9zd2l0Y2gpIHtcblx0XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCwgYm8pO1xuXHR9XG5cblx0aWYgKCFjb25kdWl0LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldHVwX3RjKVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcblxuXHRyZXR1cm4gY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xufVxuYGBgXG5cblRoZSBmbG93IGhlcmUgaXMgaW50ZXJlc3RpbmcuIFdoZW4gYmluZGluZyBhIGZsb3cgYmxvY2sgKGBiby1cdTAwM2Vjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORGApLCB0aGUgY29kZSBmaXJzdCBjaGVja3MgaWYgdGhlIHN3aXRjaCBpbXBsZW1lbnRzIGBwb3J0X3NldHVwX3RjYC4gSWYgaXQgZG9lcywgdGhlIG9wZXJhdGlvbiBpcyBvZmZsb2FkZWQgdG8gdGhlIHN3aXRjaCwgYW5kIGBkcC1cdTAwM2VmdF9vbl9zd2l0Y2hgIGlzIHNldCBhY2NvcmRpbmdseS4gSWYgdGhlIHN3aXRjaCBkb2Vzbid0IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiAocmV0dXJucyBgLUVPUE5PVFNVUFBgKSwgb3IgZG9lc24ndCBoYXZlIGBwb3J0X3NldHVwX3RjYCwgdGhlIG9wZXJhdGlvbiBmYWxscyBiYWNrIHRvIHRoZSBjb25kdWl0IGRldmljZSdzIGBuZG9fc2V0dXBfdGNgIGZ1bmN0aW9uLiBUaGUga2V5IGlzIGhvdyBgZHAtXHUwMDNlZnRfb25fc3dpdGNoYCB0cmFja3Mgd2hlcmUgdGhlIGJpbmRpbmcgaGFwcGVuZWQuIE9uIHVuYmluZCwgdGhpcyBpcyBjaGVja2VkIHRvIHNlbmQgdGhlIGNhbGwgdG8gdGhlIHJpZ2h0IHBsYWNlLiBUaGUgY29tbWVudCBpbiBgaW5jbHVkZS9uZXQvZHNhLmhgIGNsYXJpZmllcyB0aGF0IHRoZSBkZWNpc2lvbiBvZiB3aGV0aGVyIHRvIHVzZSB0aGUgc3dpdGNoIG9yIHRoZSBjb25kdWl0IGlzIG1hZGUgYXQgYmluZCB0aW1lLiBUaGlzIGxvb2tzIHByb21pc2luZyBiZWNhdXNlIG9mIHRoaXMgY29uZGl0aW9uYWwgYmVoYXZpb3IuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgd2hvbGUgRFNBIHRoaW5nIGlzIGV2ZW4gcmVsZXZhbnQgZm9yIGZ1enppbmcuIENhbiBJIHRyaWdnZXIgdGhpcyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQ/IFRoZSBhbnN3ZXIgaXMgeWVzLiBUaGUgYE5FVF9EU0FgIHdpdGggYE5FVF9EU0FfTE9PUGAgKG9yIG1vY2sgb3IgZml4ZWQgcGh5KSBjcmVhdGVzIERTQSBzd2l0Y2hlcyBhbmQgdXNlciBkZXZpY2VzIGxpa2UgYGxhbjFgLCBgbGFuMmAsIGV0Yy4gVGhpcyBsb29rcyBwZXJmZWN0IGZvciBRRU1VLiBGdXJ0aGVybW9yZSwgc3l6a2FsbGVyIGFscmVhZHkgaGFzIHRoaXMgY29uZmlndXJhdGlvbiEgSXQgdXNlcyBgQ09ORklHX05FVF9EU0E9eWAsIGBDT05GSUdfTkVUX0RTQV9MT09QPXlgLCBgQ09ORklHX05FVEZJTFRFUmAsIGFuZCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGFuZCBjYW4gbWFuaXB1bGF0ZSBmbG93IHRhYmxlcyB3aXRoIGBuZnRgIG9yIGBpcCBsaW5rYCAvIGB0Y2AuIEV4Y2VsbGVudC5cblxuTm93LCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBXaGVyZSdzIGBORVRfRFNBYCBkZWZpbmVkPyBJdCdzIGluIGBuZXQvZHNhL0tjb25maWdgOlxuXG5gYGBcbm1lbnVjb25maWcgTkVUX0RTQVxuXHR0cmlzdGF0ZSBcIkRpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcIlxuXHRkZXBlbmRzIG9uIEhBVkVfTkVUX0RTQVxuXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgSU5FVFxuXHRzZWxlY3QgTkVUX1NXSVRDSERFVlxuXHRzZWxlY3QgUEhZTElOS1xuXHRzZWxlY3QgTkVUX0RFVkxJTktcbmBgYFxuXG5BbmQgSSB3aWxsIGdvIGZpZ3VyZSBvdXQgd2hhdCBlbmFibGVzIGBIQVZFX05FVF9EU0FgLiBUaGlzIGNvbmZpcm1zIHRoYXQgaXQncyBhbGwgYnVpbHQtaW4gYW5kIGFscmVhZHkgZW5hYmxlZCBieSBzeXprYWxsZXIuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgaG93IHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhpcyBgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgIHdpdGggY2FyZWZ1bGx5IGNyYWZ0ZWQgZmxvdyB0YWJsZSBjb21tYW5kcy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjA4LjgzNDQ0MTA4OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTk4Njk2NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9ORVRfRFNBXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoxMC4zMzQ0Mzg3MjRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MDQ2Mzk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gRGF0YSBTdHVjdHVyZSBBY2NlbGVyYXRvciAoRFNBKS4gSW5zdGVhZCBvZiB3YW5kZXJpbmcgYWltbGVzc2x5IHRocm91Z2ggdGhlIHNvdXJjZSB0cmVlLCBsZXQncyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYG5ldC9kc2EvS2NvbmZpZ2AgZmlsZS4gSSdtIHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwncyBLY29uZmlnIHN0cnVjdHVyZSwgYW5kIGhpdHRpbmcgdGhlIHJlbGV2YW50IEtjb25maWcgZGlyZWN0bHkgdXN1YWxseSBnaXZlcyBtZSB0aGUgcXVpY2tlc3QgcGF0aCB0byB1bmRlcnN0YW5kaW5nIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgYmUgYSBtdWNoIG1vcmUgZWZmaWNpZW50IHVzZSBvZiBteSB0aW1lIHRoYW4gc3RhcnRpbmcgYXQgc29tZSBicm9hZGVyLCBwb3NzaWJseSB1bnJlbGF0ZWQgY29uZmlndXJhdGlvbiBtZW51IGFuZCBoYXZpbmcgdG8gZHJpbGwgZG93bi4gTGV0J3Mgc2VlIHdoYXQgYG5ldC9kc2EvS2NvbmZpZ2AgcmV2ZWFscy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzA2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjEyLjQyNDkwNjI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9kc2EvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51Y29uZmlnIE5FVF9EU0FcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlXFxcIlxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0UgfHwgQlJJREdFPW5cXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gSFNSIHx8IEhTUj1uXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVUREVWSUNFU1xcbiAgIDg6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAgIDk6XFx0XFx0c2VsZWN0IE5FVF9TV0lUQ0hERVZcXG4gIDEwOlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAxMTpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDEyOlxcdFxcdGltcGx5IE5FVF9TRUxGVEVTVFNcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSBzd2l0Y2hlcyBzdXBwb3J0ZWRcXG4gIDE1OlxcdFxcdCAgYnkgdGhlIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGlmIE5FVF9EU0FcXG4gIDE4OlxcdFxcbiAgMTk6XFx0IyBEcml2ZXJzIG11c3Qgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSB0YWdnaW5nIGZvcm1hdChzKVxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgTkVUX0RTQV9UQUdfTk9ORVxcbiAgMjI6XFx0XFx0dHJpc3RhdGUgXFxcIk5vLW9wIHRhZyBkcml2ZXJcXFwiXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHN3aXRjaGVzIHdoaWNoIGRvbid0IHRhZ1xcbiAgMjU6XFx0XFx0ICBmcmFtZXMgb3ZlciB0aGUgQ1BVIHBvcnQuXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBORVRfRFNBX1RBR19BUjkzMzFcXG4gIDI4OlxcdFxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBBdGhlcm9zIEFSOTMzMSBTb0Mgd2l0aCBidWlsdC1pbiBzd2l0Y2hcXFwiXFxuICAyOTpcXHRcXHRoZWxwXFxuICAzMDpcXHRcXHQgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRhZ2dpbmcgZnJhbWVzIGZvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoxMi40MjQ5NzU3OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc4ODI4NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIE5ldHdvcmsgRFNBIExvb3AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9kc2FgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiB0aGUgYE5FVF9EU0FfTE9PUGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEtub3dpbmcgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBob3cgaXQgbWlnaHQgYmUgY29uZmlndXJlZC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCB3aGVuIHRyb3VibGVzaG9vdGluZyBvciBjdXN0b21pemluZyBhbnkgYXNwZWN0IG9mIHRoZSBuZXR3b3JrIERTQSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IGl0cyBjdXJyZW50IGRlZmluaXRpb24gYmVmb3JlIG1vdmluZyBvbiB0byBhbnl0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MTQuMjAzODA3ODMyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE0NTk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RTQV9MT09QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvS2NvbmZpZz03PWNvbmZpZyBORVRfRFNBX0JDTV9TRjJcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjE5OmNvbmZpZyBORVRfRFNBX0xPT1BcXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiRFNBIG1vY2stdXAgRXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MTQuMjU3OTU4ODkxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTI1MDg1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBEU0EgS2NvbmZpZyBGaWxlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGNvbmZpZ3VyYXRpb24uIExldCdzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYGRyaXZlcnMvbmV0L2RzYS9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgYXJvdW5kIGxpbmUgMTk7IHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb25zIG9yIHRoZSBtYWluIG1vZHVsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHBsYWNlZCwgc28gdGhhdCdzIHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEknbSBsb29raW5nIGZvciBhIHNwZWNpZmljIG1vZHVsZSBvciBmZWF0dXJlLCBidXQgSSBuZWVkIHRvIHN0YXJ0IHdpdGggY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoxNS45NzA0Njk4NDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEJyb2FkY29tIFN0YXJmaWdodGVyIDIgRXRoZXJuZXRcXG4gIDE3OlxcdFxcdCAgc3dpdGNoIGNoaXBzLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgTkVUX0RTQV9MT09QXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiRFNBIG1vY2stdXAgRXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4gIDIxOlxcdFxcdHNlbGVjdCBORVRfRFNBX1RBR19OT05FXFxuICAyMjpcXHRcXHRzZWxlY3QgRklYRURfUEhZXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBhIGZha2UgbW9jay11cCBzd2l0Y2ggY2hpcCB3aGljaFxcbiAgMjU6XFx0XFx0ICBleGVyY2lzZXMgdGhlIERTQSBBUElzLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL0tjb25maWdcXFwiXFxuICAyODpcXHRcXG4gIDI5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9LY29uZmlnXFxcIlxcbiAgMzA6XFx0XFxuICAzMTpcXHRjb25maWcgTkVUX0RTQV9NVDc1MzBcXG4gIDMyOlxcdFxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc1MzAgYW5kIE1UNzUzMSBFdGhlcm5ldCBzd2l0Y2ggc3VwcG9ydFxcXCJcXG4gIDMzOlxcdFxcdHNlbGVjdCBORVRfRFNBX1RBR19NVEtcXG4gIDM0OlxcdFxcdHNlbGVjdCBSRUdNQVBfSVJRXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjE1Ljk3MDUyOTgxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjg5NjQ4MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29uZmlndXJhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEZsb3cgVGFibGUgT2ZmbG9hZCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhlIGFwcHJvcHJpYXRlIG1vZHVsZXMgYXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBDT05GSUdfTkZfRkxPV19UQUJMRWAsIGBDT05GSUdfTkVUX0FDVF9DVGAsIGBDT05GSUdfTkVURklMVEVSYCwgYW5kIGBDT05GSUdfTkZfVEFCTEVTYC4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSeKAmWxsIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgYXJlIGluIHBsYWNlIGZvciB0aGUgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSBkaWdnaW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBJIGNhbiBnZXQgYSBncmFudWxhciBsb29rIGF0IHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBkb3duIHRoZSBzcGVjaWZpY3MgcmVsYXRlZCB0byBmbG93IHRhYmxlIG9mZmxvYWQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDIwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoxOC4yNjAxODA0OThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzExMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoxOC4zMDg4OTQzMjZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0OTA4MjgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIE9mZmxvYWQgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGZsb3cgb2ZmbG9hZCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC4gRmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGUgY29tcGlsYXRpb24gb3B0aW9ucyBhcmUgc2V0IHVwLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY29uZmlnIGd1YXJkIHdpdGhpbiB0aGUgZmlsZS4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgY29kZSBldmVuICpleGlzdHMqIGluIHRoZSBidWlsZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIHRoYXQgdGhlcmUgYXJlbid0IGFueSBzdXJwcmlzZSBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3RzLiBUaGlzIGluaXRpYWwgY2hlY2sgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgSSdtIGFib3V0IHRvIGFuYWx5emUgYW5kIHRvIGF2b2lkIHdhc3RpbmcgdGltZSBvbiBwYXJ0cyB0aGF0IG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3V0LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgYW55IGNvbmZpZyBmbGFncyBJIHNlZSB0byBrZWVwIHRoZW0gaW4gbWluZCBhcyBJIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTIxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MjAuNTU3OTc5OTcxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYyOTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mz1uZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ0LVxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NTpcXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDYtbmZfZmxvd190YWJsZS0kKENPTkZJR19ORl9GTE9XX1RBQkxFX1BST0NGUykgKz0gbmZfZmxvd190YWJsZV9wcm9jZnMub1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03NDQ9dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NDgtXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmspO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzQ5OlxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93dGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzUwLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzYzPXZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc2OS1cXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWdjX3dvcmspO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzcwOlxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93X3RhYmxlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc3MS1cXHQvKiAuLi4gbm8gbW9yZSBwZW5kaW5nIHdvcmsgYWZ0ZXIgdGhpcyBzdGFnZSAuLi4gKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzczLVxcdG5mX2Zsb3dfdGFibGVfZ2NfcnVuKGZsb3dfdGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzc0OlxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzc1LVxcdHJoYXNodGFibGVfZGVzdHJveShcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlcmhhc2h0YWJsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTgyND1zdGF0aWMgaW50IF9faW5pdCBuZl9mbG93X3RhYmxlX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTgzNS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjgzNjpcXHRyZXQgPSBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODM3LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg0Ni1vdXRfYnBmOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODQ3OlxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NDgtb3V0X29mZmxvYWQ6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTg1NT1zdGF0aWMgdm9pZCBfX2V4aXQgbmZfZmxvd190YWJsZV9tb2R1bGVfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODU2LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjg1NzpcXHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODU4LVxcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2bmZfZmxvd190YWJsZV9uZXRfb3BzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Njg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaW5ldCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzAtXFx0LmluaXRcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjcxOlxcdC5zZXR1cFxcdFxcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzItXFx0LmFjdGlvblxcdFxcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2luZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTc4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgwLVxcdC5pbml0XFx0XFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo4MTpcXHQuc2V0dXBcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgyLVxcdC5hY3Rpb25cXHRcXHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz04OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY2ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05MC1cXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6OTE6XFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05Mi1cXHQuYWN0aW9uXFx0XFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaXB2NixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE0OD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNjQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTY1OnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE2Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzItXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTczOnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjM4PXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9pbmRyX29mZmxvYWRfY21kKHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjUwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI1MTpzdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjUyLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjY5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI3MDppbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNzEtXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4MS1cXHRpZiAoZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0dXBfdGMpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjgyOlxcdFxcdGVyciA9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWQoXFx1MDAyNmJvLCBmbG93dGFibGUsIGRldiwgY21kLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4My1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZXh0YWNrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI5MS19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI5NDppbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2luaXQodm9pZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzE5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyMDp2b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MjAuNjA2NjEyOTRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQwNzgxNTcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGbG93IFRhYmxlIE9mZmxvYWQgb24gRFNBOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBmbG93IHRhYmxlIG9mZmxvYWQgcHJvY2VzcyBvbiBEU0EgaW50ZXJmYWNlcy4gSXQgc3RhcnRzIHdpdGggYSB1c2VyIGNvbmZpZ3VyaW5nIGEgZmxvdyB0YWJsZSwgbGlrZSB3aXRoIGBuZnRgLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIG9mZmxvYWQgZmxhZyBpcyBzZXQgb24gYSBEU0EgdXNlciBpbnRlcmZhY2UsIGxpa2UgYGxhbjFgLiBUaGUga2VybmVsIHRoZW4gdGFrZXMgb3Zlci5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdG8gd2FsayB0aHJvdWdoIHRoZSBmdW5jdGlvbiBjYWxscy4gRmlyc3QsIGl0IGdvZXMgdGhyb3VnaCBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYCwgd2hpY2ggdGhlbiBoaXRzIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kYCwgdWx0aW1hdGVseSBjYWxsaW5nIGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoZGV2LCBUQ19TRVRVUF9GVCwgYm8pYC4gTm93LCB0aGF0IGBuZG9fc2V0dXBfdGNgIGZ1bmN0aW9uIHBvaW50ZXIgaXMga2V5LiBJbiB0aGlzIGNhc2UsIGl0J3MgYGRzYV91c2VyX3NldHVwX3RjYC4gVGhpcyBpcyB3aGVyZSB0aGUgRFNBLXNwZWNpZmljIHN0dWZmIGtpY2tzIGluIGJlY2F1c2UgYGRzYV91c2VyX3NldHVwX3RjYCBoYW5kbGVzIHRoZSBgVENfU0VUVVBfRlRgIHNldHVwLiBUaGlzIHRoZW4gbGVhZHMgdG8gYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYC5cblxuVGhlIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGNydWNpYWwgc3RhdGUgbWFuYWdlbWVudCBoYXBwZW5zLiBJdCBzZXRzIGBkcC1cdTAwM2VmdF9vbl9zd2l0Y2hgIGR1cmluZyBiaW5kaW5nIGFuZCB1bmJpbmRzIGZyb20gdGhlIHN3aXRjaCBvciBjb25kdWl0IGFwcHJvcHJpYXRlbHkuIFRoaXMgaXMgd2hlcmUgSSBzZWUgdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzLCBwcmltYXJpbHkgaW4gdGhlIGxvZ2ljIG9mIHRoZSBiaW5kL3VuYmluZCBvcGVyYXRpb25zLlxuXG5Ob3csIGEgY3JpdGljYWwgcXVlc3Rpb246IEFyZSB0aGVzZSBmdW5jdGlvbnMgZXZlbiByZWFjaGFibGU/IFRoZSB0ZXh0IGFzc2VydHMgdGhhdCB0aGV5ICphcmUqIHJlYWNoYWJsZSBpbiBRRU1VIGFuZCBzdGFuZGFyZCBlbnZpcm9ubWVudHMsIHBhcnRpY3VsYXJseSB3aXRoIHRob3NlIHNwZWNpZmljIGtlcm5lbCBjb25maWcgb3B0aW9ucyBzZXQuIFRoYXQncyBhIGdyZWVuIGxpZ2h0IGZvciBtZS5cblxuTXkgbmV4dCB0aG91Z2h0IGlzIGFib3V0IGZ1enppbmcuIEFic29sdXRlbHkuIFRoaXMgY29kZSBtb2RpZmllcyBjb250cm9sIGZsb3cgYW5kIHN0YXRlIHJlbGF0ZWQgdG8gdGhhdCBgZnRfb25fc3dpdGNoYCBmbGFnIGR1cmluZyB0aGVzZSBmbG93dGFibGUgYmxvY2sgYmluZC91bmJpbmQgb3BlcmF0aW9ucyBvbiBEU0EgdXNlciBuZXRkZXZzLiBUaGF0J3MgYSBqdWljeSB0YXJnZXQgZm9yIGZ1enppbmcuIFN0YXRlIHRyYWNraW5nIGJ1Z3MgaW4gdGhlIGJpbmQvdW5iaW5kIGxvZ2ljIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yLCBjcml0aWNhbGx5LCBtaXNtYXRjaGVkIGJpbmRpbmcvdW5iaW5kaW5nIHN0YXRlcywgY3JlYXRpbmcgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHZ1bG5lcmFiaWxpdGllcy5cblxuSSdtIHRoaW5raW5nIGFib3V0IGZvY3VzIHN5bWJvbHMgYW5kIHRhcmdldHMgbm93LlxuSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2l0aCBhIGJpdCBtb3JlIHJpZ29yOlxuLSAgIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2A6IEl0J3Mgc3RhdGljLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgZG9lc24ndCBpbmxpbmUgaXQgb3IgSSBjYW4gc3RpbGwgdXNlIHRoZSBzeW1ib2wgYWRkcmVzcyBpbiBgdm1saW51eGAuXG4tICAgYGRzYV91c2VyX3NldHVwX3RjYDogQW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCdzIHVzZWQgYXMgYSBjYWxsYmFjayBpbiBhIGBuZXRkZXZfb3BzYCBzdHJ1Y3QsIHNvIEknbSBjb25maWRlbnQgaXQncyBhY2Nlc3NpYmxlLlxuLSAgIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBgOiBUaGlzIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBubyBpc3N1ZXMgdGhlcmUuXG4tICAgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWRgOiBTdGF0aWMsIGJ1dCBpdCdzIHBhcnQgb2YgdGhlIHBhdGgsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0LlxuXG5UbyBnZXQgYSBicm9hZGVyIHBpY3R1cmUgb2YgRFNBLCBJIHNob3VsZCBhbHNvIGxvb2sgZm9yIG90aGVyIHBvdGVudGlhbCBEU0EtdXNlciBmdW5jdGlvbnMuIEknbGwgY2hlY2sgYG5ldC9kc2EvdXNlci5jYCBmb3IgYW55IG90aGVyIGludGVyZXN0aW5nIHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgRFNBIHVzZXIgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTI3MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoyNi4wMTQ0MzA5NjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDg3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV91c2VyX3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2EvdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvdXNlci5jPTE1NDM9c3RhdGljIHZvaWQgZHNhX3VzZXJfZGVsX2Nsc19tYXRjaGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTU3Mi1cXG5uZXQvZHNhL3VzZXIuYzoxNTczOnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfY2xzX21hdGNoYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2RzYS91c2VyLmMtMTU3NC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y19jbHNfbWF0Y2hhbGxfb2ZmbG9hZCAqY2xzLFxcbi0tXFxubmV0L2RzYS91c2VyLmM9MTYxOT1zdGF0aWMgaW50IGRzYV91c2VyX3N0YXRzX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTE2MzItXFxubmV0L2RzYS91c2VyLmM6MTYzMzpzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvZHNhL3VzZXIuYy0xNjM0LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHMsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNjQ4LVxcbm5ldC9kc2EvdXNlci5jOjE2NDk6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhLFxcbm5ldC9kc2EvdXNlci5jLTE2NTAtXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqY2JfcHJpdiwgYm9vbCBpbmdyZXNzKVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTY1OC1cXHRjYXNlIFRDX1NFVFVQX0NMU01BVENIQUxMOlxcbm5ldC9kc2EvdXNlci5jOjE2NTk6XFx0XFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Nsc19tYXRjaGFsbChkZXYsIHR5cGVfZGF0YSwgaW5ncmVzcyk7XFxubmV0L2RzYS91c2VyLmMtMTY2MC1cXHRjYXNlIFRDX1NFVFVQX0NMU0ZMT1dFUjpcXG5uZXQvZHNhL3VzZXIuYzoxNjYxOlxcdFxcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19jbHNfZmxvd2VyKGRldiwgdHlwZV9kYXRhLCBpbmdyZXNzKTtcXG5uZXQvZHNhL3VzZXIuYy0xNjYyLVxcdGRlZmF1bHQ6XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNjY2LVxcbm5ldC9kc2EvdXNlci5jOjE2Njc6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9ja19jYl9pZyhlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG5uZXQvZHNhL3VzZXIuYy0xNjY4LVxcdFxcdFxcdFxcdFxcdCB2b2lkICp0eXBlX2RhdGEsIHZvaWQgKmNiX3ByaXYpXFxubmV0L2RzYS91c2VyLmMtMTY2OS17XFxubmV0L2RzYS91c2VyLmM6MTY3MDpcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2IodHlwZSwgdHlwZV9kYXRhLCBjYl9wcml2LCB0cnVlKTtcXG5uZXQvZHNhL3VzZXIuYy0xNjcxLX1cXG5uZXQvZHNhL3VzZXIuYy0xNjcyLVxcbm5ldC9kc2EvdXNlci5jOjE2NzM6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9ja19jYl9lZyhlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG5uZXQvZHNhL3VzZXIuYy0xNjc0LVxcdFxcdFxcdFxcdFxcdCB2b2lkICp0eXBlX2RhdGEsIHZvaWQgKmNiX3ByaXYpXFxubmV0L2RzYS91c2VyLmMtMTY3NS17XFxubmV0L2RzYS91c2VyLmM6MTY3NjpcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2IodHlwZSwgdHlwZV9kYXRhLCBjYl9wcml2LCBmYWxzZSk7XFxubmV0L2RzYS91c2VyLmMtMTY3Ny19XFxuLS1cXG5uZXQvZHNhL3VzZXIuYz0xNjc5PXN0YXRpYyBMSVNUX0hFQUQoZHNhX3VzZXJfYmxvY2tfY2JfbGlzdCk7XFxubmV0L2RzYS91c2VyLmMtMTY4MC1cXG5uZXQvZHNhL3VzZXIuYzoxNjgxOnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvZHNhL3VzZXIuYy0xNjgyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmYpXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNjg3LVxcdGlmIChmLVxcdTAwM2ViaW5kZXJfdHlwZSA9PSBGTE9XX0JMT0NLX0JJTkRFUl9UWVBFX0NMU0FDVF9JTkdSRVNTKVxcbm5ldC9kc2EvdXNlci5jOjE2ODg6XFx0XFx0Y2IgPSBkc2FfdXNlcl9zZXR1cF90Y19ibG9ja19jYl9pZztcXG5uZXQvZHNhL3VzZXIuYy0xNjg5LVxcdGVsc2UgaWYgKGYtXFx1MDAzZWJpbmRlcl90eXBlID09IEZMT1dfQkxPQ0tfQklOREVSX1RZUEVfQ0xTQUNUX0VHUkVTUylcXG5uZXQvZHNhL3VzZXIuYzoxNjkwOlxcdFxcdGNiID0gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2JfZWc7XFxubmV0L2RzYS91c2VyLmMtMTY5MS1cXHRlbHNlXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNzIwLVxcbm5ldC9kc2EvdXNlci5jOjE3MjE6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbm5ldC9kc2EvdXNlci5jLTE3MjItXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNzQ2LVxcbm5ldC9kc2EvdXNlci5jOjE3NDc6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG5uZXQvZHNhL3VzZXIuYy0xNzQ4LVxcdFxcdFxcdCAgICAgdm9pZCAqdHlwZV9kYXRhKVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTc1NC1cXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbm5ldC9kc2EvdXNlci5jOjE3NTU6XFx0XFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKGRldiwgdHlwZV9kYXRhKTtcXG5uZXQvZHNhL3VzZXIuYy0xNzU2LVxcdGNhc2UgVENfU0VUVVBfRlQ6XFxubmV0L2RzYS91c2VyLmM6MTc1NzpcXHRcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHAsIHR5cGVfZGF0YSk7XFxubmV0L2RzYS91c2VyLmMtMTc1OC1cXHRkZWZhdWx0Olxcbi0tXFxubmV0L2RzYS91c2VyLmM9MjYwMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV91c2VyX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0yNjE1LSNlbmRpZlxcbm5ldC9kc2EvdXNlci5jOjI2MTY6XFx0Lm5kb19zZXR1cF90Y1xcdFxcdD0gZHNhX3VzZXJfc2V0dXBfdGMsXFxubmV0L2RzYS91c2VyLmMtMjYxNy1cXHQubmRvX2dldF9zdGF0czY0XFx0PSBkc2FfdXNlcl9nZXRfc3RhdHM2NCxcXG4tLVxcbm5ldC9kc2EvdXNlci5jPTI2Njk9c3RhdGljIGludCBkc2FfdXNlcl9waHlfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKnVzZXJfZGV2KVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMjcxMS1cXG5uZXQvZHNhL3VzZXIuYzoyNzEyOnZvaWQgZHNhX3VzZXJfc2V0dXBfdGFnZ2VyKHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyKVxcbm5ldC9kc2EvdXNlci5jLTI3MTMte1xcbi0tXFxubmV0L2RzYS91c2VyLmM9Mjc3Mz1pbnQgZHNhX3VzZXJfY3JlYXRlKHN0cnVjdCBkc2FfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTI4MzEtXFx0cG9ydC1cXHUwMDNldXNlciA9IHVzZXJfZGV2O1xcbm5ldC9kc2EvdXNlci5jOjI4MzI6XFx0ZHNhX3VzZXJfc2V0dXBfdGFnZ2VyKHVzZXJfZGV2KTtcXG5uZXQvZHNhL3VzZXIuYy0yODMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoyNi4wNjI5MjA0MDNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3MDIzNTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEU0EgVXNlciBTZXR1cCBhbmQgRmxvdyBUYWJsZSBPZmZsb2FkKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBhbmQgYGRzYV91c2VyX3NldHVwX3RjYCwgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBEU0EgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZy4gSSdsbCBhbHNvIGtlZXAgYSBjbG9zZSBleWUgb24gYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWRgIGFuZCBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYCBhcyB0aGV5J3JlIGNyaXRpY2FsIHRvIHRoZSBuZXRmaWx0ZXIgc2lkZSBvZiB0aGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBjb25uZWN0ZWQuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkga25vdyB3ZSBuZWVkIGBORVRfRFNBYCB0byBlbmFibGUgdGhlIERTQSBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGBuZXQvZHNhL3VzZXIuY2AgYW5kIGBpbmNsdWRlL25ldC9kc2EuaGAuIFRoZW4sIGBORl9GTE9XX1RBQkxFYCBlbmFibGVzIHRoZSBjb3JlIGZsb3cgdGFibGUgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBBbmQgb2YgY291cnNlLCBgTkZfVEFCTEVTYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBuZXRmaWx0ZXIgdGFibGUgaW5mcmFzdHJ1Y3R1cmUuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbSBtYWtpbmcgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzLiBHb29kLCBsb29rcyBsaWtlIHRob3NlIHRocmVlIGFyZSB0aGUgcHJpbWFyeSBvbmVzIGZvciB0aGlzIGFyZWEuXG5cblRpbWUgZm9yIGEgc2FuaXR5IGNoZWNrLiBJJ20gbG9va2luZyBhdCB0aGUgY29yZSBzdWJzeXN0ZW1zOiBuZXR3b3JraW5nLCBzcGVjaWZpY2FsbHkgRFNBIChgbmV0L2RzYS9gKSBhbmQgbmV0ZmlsdGVyIG9mZmxvYWQuIFRoZSByZWFjaGFiaWxpdHkgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGFjY2Vzc2libGUgdGhyb3VnaCB2aXJ0dWFsIGRldmljZXMgKHRoYW5rcyB0byBgTkVUX0RTQV9MT09QYCwgd2hpY2ggaXMgZ3JlYXQgZm9yIHRlc3RpbmcpIGFuZCB1c2VyLXNwYWNlIHRvb2xzIGxpa2UgbmV0bGluaywgbmZ0YWJsZXMsIGFuZCB0YyBmb3IgZmxvdyB0YWJsZSBvcGVyYXRpb25zLiBBbmQgeWVzLCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhpcywgd2hpY2ggaXMgY29uZmlybWVkIGJ5IHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHdoYXQgSSBhbHJlYWR5IGlkZW50aWZpZWQsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSB0aG9zZSB0aHJlZSBJIGp1c3QgY29uZmlybWVkLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBmb3IgdGhpcyBhbmFseXNpcy4gTm93LCBJJ2xsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MjE2LCJPdXRwdXRUb2tlbnMiOjIxMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDozMC42MzMxNTc1MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjA2MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfRFNBXCIsXG4gICAgXCJORVRfRFNBX0xPT1BcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrXCIsXG4gICAgXCJkc2FfdXNlcl9zZXR1cF90Y1wiLFxuICAgIFwibmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBmbG93dGFibGUgYmxvY2sgc2V0dXAgbG9naWMgYnkgYWRkaW5nIHN0YXRlIHRyYWNraW5nIChmdF9vbl9zd2l0Y2gpIG9uIHN0cnVjdCBkc2FfcG9ydCB0byBlbnN1cmUgdW5iaW5kaW5nIHJvdXRlcyB0byB0aGUgc2FtZSBlbnRpdHkgKHN3aXRjaCBvciBjb25kdWl0KSB0aGF0IGhhbmRsZWQgYmluZGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIGZsb3d0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zIG9uIERTQSB1c2VyIHBvcnRzIChzdWNoIGFzIHdpdGggdGhlIHNvZnR3YXJlIGRzYV9sb29wIG1vY2sgZHJpdmVyKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBwb3RlbnRpYWwgc3RhdGUgbWlzbWF0Y2hlcywgYmluZC91bmJpbmQgZXJyb3IgcGF0aHMsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9EU0FcIixcbiAgICBcIk5FVF9EU0FfTE9PUFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tcIixcbiAgICBcImRzYV91c2VyX3NldHVwX3RjXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyBieSBhZGRpbmcgc3RhdGUgdHJhY2tpbmcgKGZ0X29uX3N3aXRjaCkgb24gc3RydWN0IGRzYV9wb3J0IHRvIGVuc3VyZSB1bmJpbmRpbmcgcm91dGVzIHRvIHRoZSBzYW1lIGVudGl0eSAoc3dpdGNoIG9yIGNvbmR1aXQpIHRoYXQgaGFuZGxlZCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb24gRFNBIHVzZXIgcG9ydHMgKHN1Y2ggYXMgd2l0aCB0aGUgc29mdHdhcmUgZHNhX2xvb3AgbW9jayBkcml2ZXIpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHBvdGVudGlhbCBzdGF0ZSBtaXNtYXRjaGVzLCBiaW5kL3VuYmluZCBlcnJvciBwYXRocywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjMwLjcwNzM2OTM3OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzExMTM3OTk3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDozMC43MDc4NDgxMjlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTExMzMxNzI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBEU0EgZmxvd3RhYmxlIGJsb2NrIHNldHVwIGxvZ2ljIChUQ19TRVRVUF9GVCkgdG8gcm91dGUgYmluZC91bmJpbmQgcmVxdWVzdHMgdG8gZWl0aGVyIHRoZSBEU0Egc3dpdGNoIGRyaXZlciBvciB0aGUgY29uZHVpdCBuZXRkZXYsIHRyYWNraW5nIHN0YXRlIHZpYSBhIG5ldyBgZnRfb25fc3dpdGNoYCBmaWVsZCBpbiBgc3RydWN0IGRzYV9wb3J0YC4gYHN0cnVjdCBkc2FfcG9ydGAgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgbmV3IGZpZWxkLiBUaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjkyMWYzMTFhYjUyZDBmYWVlNDE3NmE5YTY0NDA4YmUxNjUzZWY1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NTM6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA3NTA3ZDYzMmU3YzZkLi5kYmNiMDJkZTA2ZmNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXG5AQCAtMjk3LDYgKzI5NywxMiBAQCBzdHJ1Y3QgZHNhX3BvcnQge1xuIFxuIFx0dThcdFx0XHRzZXR1cDoxO1xuIFxuK1x0LyogRmxvd3RhYmxlIGJsb2NrcyBvbiB0aGlzIHVzZXIgcG9ydCBnbyB0byB0aGUgc3dpdGNoLCBub3QgdGhlXG4rXHQgKiBjb25kdWl0OyBkZWNpZGVkIGF0IGJpbmQgdGltZS4gV3JpdHRlbiB3aXRob3V0IHJ0bmwsIHNvIG5vdCBvbmUgb2ZcbitcdCAqIHRoZSBiaXQgZmllbGRzIGFib3ZlLlxuK1x0ICovXG4rXHRib29sXHRcdFx0ZnRfb25fc3dpdGNoO1xuK1xuIFx0c3RydWN0IGRldmljZV9ub2RlXHQqZG47XG4gXHR1bnNpZ25lZCBpbnRcdFx0YWdlaW5nX3RpbWU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS91c2VyLmMgYi9uZXQvZHNhL3VzZXIuY1xuaW5kZXggMDQxZjkwNjBjOGVmMC4uZjRjZDQ4ZGYyNTE5ZCAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdXNlci5jXG4rKysgYi9uZXQvZHNhL3VzZXIuY1xuQEAgLTE3MTgsMTUgKzE3MTgsMzAgQEAgc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEpXG4rc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxuK1x0XHRcdFx0ICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRzYV90b19wb3J0KGRzLCBwb3J0KSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApO1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0LyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi9cbitcdGlmIChiby1cdTAwM2Vjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkge1xuK1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKVxuK1x0XHRcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsXG4rXHRcdFx0XHRcdFx0ICAgICBibyk7XG4rXHRcdGRwLVx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGRwLVx1MDAzZWZ0X29uX3N3aXRjaClcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fSBlbHNlIGlmIChkcC1cdTAwM2VmdF9vbl9zd2l0Y2gpIHtcbitcdFx0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsIGJvKTtcbitcdH1cbiBcbiBcdGlmICghY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90YylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIHR5cGVfZGF0YSk7XG4rXHRyZXR1cm4gY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuQEAgLTE3MzksNyArMTc1NCw3IEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9GVDpcbi1cdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRzLCBkcC1cdTAwM2VpbmRleCwgdHlwZV9kYXRhKTtcbitcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDozMC43MDc4NDg5NjlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMxMjg3MTMxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB0byB0aGUgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBjb2RlIGluIHRoZSBrZXJuZWwgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGhlcmUsIHNvIGxldCdzIGFuYWx5emUgdGhpcyBtZXRob2RpY2FsbHkuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2UuIEEgbmV3IGJvb2xlYW4sIGBmdF9vbl9zd2l0Y2hgLCBpcyBhZGRlZCB0byB0aGUgYGRzYV9wb3J0YCBzdHJ1Y3QgaW4gYGluY2x1ZGUvbmV0L2RzYS5oYC4gVGhpcyBmbGFnIGRldGVybWluZXMgaWYgZmxvd3RhYmxlIGJsb2NrcyBmb3IgYSB1c2VyIHBvcnQgYXJlIGhhbmRsZWQgYnkgdGhlIHN3aXRjaCBkaXJlY3RseSBvciB0aGUgXCJjb25kdWl0XCIgKHdoaWNoIEkgaW5mZXIgaXMgc29tZSBzb3J0IG9mIGludGVybWVkaWFyeSkuIFRoZSBsb2dpYyBkaWN0YXRlcyB0aGF0IHRoaXMgZGV0ZXJtaW5hdGlvbiBpcyBtYWRlIGF0IGJpbmQgdGltZSBhbmQgY2FuIGJlIHN1YnNlcXVlbnRseSB1bmJvdW5kLiBUaGlzIGlzIGtleSwgYSBib29sZWFuIHRvIGRldGVybWluZSBleGVjdXRpb24gcGF0aC5cblxuVGhlbiwgdGhlcmUncyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AgaW4gYG5ldC9kc2EvdXNlci5jYC4gVGhlIGZ1bmN0aW9uIG5vdyB0YWtlcyBhIGBkc2FfcG9ydGAgc3RydWN0IGFzIGlucHV0IGluc3RlYWQgb2YgZGlyZWN0bHkgcmVjZWl2aW5nIGBkc2Ffc3dpdGNoYCBhbmQgcG9ydCBudW1iZXIuIFRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYGRzYV9wb3J0YCBkYXRhLiBJdCBhbHNvIGRpcmVjdGx5IHJlZmVyZW5jZXMgdGhlIGBmdF9vbl9zd2l0Y2hgIGZsYWcuIE1vc3QgaW1wb3J0YW50bHksIHRoZSBsb2dpYyBmb3Igc2V0dGluZyB1cCB0aGUgZmxvd3RhYmxlIGJsb2NrcyBub3cgYnJhbmNoZXMgYmFzZWQgb24gdGhpcyBmbGFnJ3MgdmFsdWUuIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgY2FsbHMgYGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjYCBpZiBgZnRfb25fc3dpdGNoYCBpcyB0cnVlLCBpbXBseWluZyBhIGRpZmZlcmVudCBjb2RlIHBhdGguIFRoZSBjb25kaXRpb25hbCBlbnN1cmVzIHRoYXQgdW5iaW5kaW5nIGlzIHNpbWlsYXJseSBoYW5kbGVkIG9uIHRoZSBjb3JyZWN0IHNpZGUsIGFzIGRldGVybWluZWQgYnkgdGhlIGJpbmQuXG5cblRoZSBjb2RlIHNlZW1zIHRvIGJlIGhhbmRsaW5nIHRoZSB1bmJpbmQgY2FzZSB0b28uIEl0IGxvb2tzIGxpa2UgaXQgaXMgY2FsbGluZyB0aGUgc2FtZSBgcG9ydF9zZXR1cF90Y2AgZnVuY3Rpb24gZm9yIHRoZSB1bmJpbmQgb3BlcmF0aW9uLiBUaGlzIGNvdWxkIGJlIGFuIGltcG9ydGFudCBwbGFjZSB0byBoYXZlIHRoZSBmdXp6aW5nIHRhcmdldC5cblxuTm93LCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGRzYV9wb3J0YCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCBob3cgYGZ0X29uX3N3aXRjaGAgaXMgc2V0LCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgZm9yIHRoZSBjb2RlIGZsb3cuIEVzc2VudGlhbGx5LCB3aGF0J3MgdGhlIHdob2xlIHBpY3R1cmUgaGVyZT8gV2hhdCBhcmUgdGhlIHBvc3NpYmxlIHN0YXRlcywgaG93IGRvIHRoZXkgdHJhbnNpdGlvbiwgYW5kIHdoYXQgYXJlIHRoZSBpbXBvcnRhbnQgY29uZGl0aW9ucz9cblxuSSBhbSBnb2luZyB0byB1c2UgYGdyZXBwZXJgIChvciBteSBlcXVpdmFsZW50IGZpbGUgcmVhZGluZyB0b29scykgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZSBgZHNhX3BvcnRgIHN0cnVjdCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBJIG5lZWQgdG8ga25vdyB0aGUgcG9zc2libGUgdmFsdWVzIG9mIHRoYXQgZmxhZyBhbmQgaG93IGl0J3MgY2hhbmdlZC4gV2l0aCB0aGF0IGluZm9ybWF0aW9uLCBJJ2xsIGJlIGFibGUgdG8gZGVjaWRlIGlmIEtNU0FOIGZ1enppbmcgd291bGQgYmUgYmVuZWZpY2lhbCBpbiBpZGVudGlmeWluZyBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHRoZSBjb25kaXRpb25hbCBjb2RlIHBhdGhzLiBNeSBndXQgc2F5cyB0aGlzIGRlc2VydmVzIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjQzLjgzNjU2NDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODAwNzk5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkc2FfcG9ydF9hbGxvY3xremFsbG9jLipkc2FfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6NDMuODgzMzY4ODY5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMTM4MzcyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBkZWx2aW5nIGludG8gdGhlIGNvZGU6XG5cbioqRmluZGluZyB0aGUgQWxsb2NhdGlvbiBvZiBgc3RydWN0IGRzYV9wb3J0YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyBgc3RydWN0IGRzYV9wb3J0YCBpcyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBgbmV0L2RzYS9gIGRpcmVjdG9yeS4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBJIGNvdWxkIGp1c3QgdXNlIGBncmVwYCByZWN1cnNpdmVseSwgYnV0IHRoYXQgY2FuIHJldHVybiBhIGxvdCBvZiBmYWxzZSBwb3NpdGl2ZXMsIGFuZCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgb2Z0ZW4gdGhlIGFjdHVhbCBhbGxvY2F0aW9uIG1pZ2h0IGludm9sdmUgbW9yZSB0aGFuIGp1c3QgYSBkaXJlY3QgYGttYWxsb2NgIG9yIHNpbWlsYXIgY2FsbC4gSXQgY291bGQgYmUgcGFydCBvZiBhIGxhcmdlciBzdHJ1Y3R1cmUsIGFsbG9jYXRlZCB3aXRoaW4gYW5vdGhlciBjb250ZXh0LiBMZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgbW9zdCBsaWtlbHkgY3VscHJpdHM6XG5cbiogICAqKkhlYWRlciBGaWxlczoqKiBUaGUgaGVhZGVyIGZpbGVzIHdpdGhpbiBgbmV0L2RzYS9gIGFyZSBnb29kIHBsYWNlcyB0byBzdGFydCwgYXMgSSBrbm93IHRoYXQncyB3aGVyZSB0aGUgc3RydWN0dXJlIGlzIGxpa2VseSBkZWZpbmVkLiBJJ2xsIGxvb2sgZm9yIHdoZXJlIGBzdHJ1Y3QgZHNhX3BvcnRgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGFuZCBhbnkgcmVsYXRlZCB0eXBlZGVmcy4gQSBxdWljayBzZWFyY2ggZm9yIHRoZSBkZWNsYXJhdGlvbiBtaWdodCBldmVuIGxlYWQgbWUgdG8gdGhlIGFsbG9jYXRpb24uXG4qICAgKipJbml0aWFsaXphdGlvbiBGdW5jdGlvbnM6KiogVGhlbiBJJ2xsIGxvb2sgZm9yIGFueSBsaWtlbHkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgd2l0aGluIHRoZSBEU0Egc3Vic3lzdGVtLiBUaGVzZSBmdW5jdGlvbnMgd2lsbCBiZSB0aGUgbGlrZWx5IHBsYWNlcyB0aGF0IGEgc3RydWN0IHdvdWxkIGJlIGFsbG9jYXRlZC4gQ29tbW9uIG5hbWluZyBjb252ZW50aW9ucyBsaWtlIGBkc2FfcG9ydF9hbGxvY2AsIGBkc2FfcG9ydF9pbml0YCwgb3Igc2ltaWxhci5cbiogICAqKkRTQSBEcml2ZXJzOioqIFRoZSBkZXZpY2UgZHJpdmVycyB0aGVtc2VsdmVzIGFyZSBhIGdvb2QgYmV0LiBPZnRlbiwgdGhlIGFsbG9jYXRpb24gaGFwcGVucyBkdXJpbmcgZGV2aWNlIHJlZ2lzdHJhdGlvbiBvciBpbml0aWFsaXphdGlvbi4gSSdsbCBwYXkgc3BlY2lmaWMgYXR0ZW50aW9uIHRvIHRoZSBkcml2ZXJzIGZvciB2YXJpb3VzIERTQSBzd2l0Y2hlcyBhbmQgcG9ydHMuXG5cbkknbGwga2VlcCBhIHNoYXJwIGV5ZSBvdXQgZm9yIGluZGlyZWN0IGFsbG9jYXRpb25zIHRvby4gRm9yIGV4YW1wbGUsIGlzIGl0IGEgbWVtYmVyIG9mIGEgbGFyZ2VyIGBzdHJ1Y3QgZHNhX3N3aXRjaGA/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhbm90aGVyIHN0cnVjdHVyZSwgd2hpY2ggaXMgYWxsb2NhdGVkLCBhbmQgdGhlIGBkc2FfcG9ydGAgaXMgZW1iZWRkZWQgc29tZWhvdz9cblxuSSdtIG1lbnRhbGx5IHJlYWR5IHRvIGRpdmUgZGVlcCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgdHJhY2UgY2FsbHMsIGFuZCBmb2xsb3cgYW55IG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIGFuc3dlcidzIHNvbWV3aGVyZSBidXJpZWQgaW5zaWRlIGFuIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDo0Ny4wOTcyMDgzMzhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjEyNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBkc2FfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDIwMjcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9kc2EvY29uZHVpdC5jPTIwPXN0YXRpYyBpbnQgZHNhX2NvbmR1aXRfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2RzYS9jb25kdWl0LmMtMjEte1xcbm5ldC9kc2EvY29uZHVpdC5jOjIyOlxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvY29uZHVpdC5jLTIzLVxcdGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gY3B1X2RwLVxcdTAwM2VvcmlnX2V0aHRvb2xfb3BzO1xcbi0tXFxubmV0L2RzYS9jb25kdWl0LmM9NDk9c3RhdGljIHZvaWQgZHNhX2NvbmR1aXRfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTUxLXtcXG5uZXQvZHNhL2NvbmR1aXQuYzo1MjpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy01My1cXHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGNwdV9kcC1cXHUwMDNlb3JpZ19ldGh0b29sX29wcztcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jPTEwMj1zdGF0aWMgdm9pZCBkc2FfY29uZHVpdF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmMtMTA1LXtcXG5uZXQvZHNhL2NvbmR1aXQuYzoxMDY6XFx0c3RydWN0IGRzYV9wb3J0ICpkcCwgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy0xMDctXFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXFx1MDAzZW9yaWdfZXRodG9vbF9vcHM7XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz0xMjk9c3RhdGljIHZvaWQgZHNhX2NvbmR1aXRfZ2V0X2V0aHRvb2xfcGh5X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYy0xMzIte1xcbm5ldC9kc2EvY29uZHVpdC5jOjEzMzpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy0xMzQtXFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXFx1MDAzZW9yaWdfZXRodG9vbF9vcHM7XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz0xNjI9c3RhdGljIGludCBkc2FfY29uZHVpdF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldClcXG5uZXQvZHNhL2NvbmR1aXQuYy0xNjMte1xcbm5ldC9kc2EvY29uZHVpdC5jOjE2NDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwLCAqY3B1X2RwID0gZGV2LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvY29uZHVpdC5jLTE2NS1cXHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGNwdV9kcC1cXHUwMDNlb3JpZ19ldGh0b29sX29wcztcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jPTIyMj1zdGF0aWMgdm9pZCBkc2FfY29uZHVpdF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LFxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmMtMjI0LXtcXG5uZXQvZHNhL2NvbmR1aXQuYzoyMjU6XFx0c3RydWN0IGRzYV9wb3J0ICpkcCwgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy0yMjYtXFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXFx1MDAzZW9yaWdfZXRodG9vbF9vcHM7XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz0yNjE9aW50IF9fZHNhX2NvbmR1aXRfaHd0c3RhbXBfdmFsaWRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTI2NC17XFxubmV0L2RzYS9jb25kdWl0LmM6MjY1OlxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvY29uZHVpdC5jLTI2Ni1cXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBjcHVfZHAtXFx1MDAzZWRzO1xcbm5ldC9kc2EvY29uZHVpdC5jLTI2Ny1cXHRzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3Q7XFxubmV0L2RzYS9jb25kdWl0LmM6MjY4OlxcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxubmV0L2RzYS9jb25kdWl0LmMtMjY5LVxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmM9MjgzPXN0YXRpYyBpbnQgZHNhX2NvbmR1aXRfZXRodG9vbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9kc2EvY29uZHVpdC5jLTI4NC17XFxubmV0L2RzYS9jb25kdWl0LmM6Mjg1OlxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvY29uZHVpdC5jLTI4Ni1cXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBjcHVfZHAtXFx1MDAzZWRzO1xcbi0tXFxubmV0L2RzYS9jb25kdWl0LmM9MzEyPXN0YXRpYyB2b2lkIGRzYV9jb25kdWl0X2V0aHRvb2xfdGVhcmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvZHNhL2NvbmR1aXQuYy0zMTMte1xcbm5ldC9kc2EvY29uZHVpdC5jOjMxNDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy0zMTUtXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz0zNDA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmMtMzQzLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGQpO1xcbm5ldC9kc2EvY29uZHVpdC5jOjM0NDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy0zNDUtXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz0zNTA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTM1NS1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihkKTtcXG5uZXQvZHNhL2NvbmR1aXQuYzozNTY6XFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkZXYtXFx1MDAzZWRzYV9wdHI7XFxubmV0L2RzYS9jb25kdWl0LmMtMzU3LVxcdHNpemVfdCBsZW4gPSBlbmQgLSBidWY7XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz00MDk9c3RhdGljIHZvaWQgZHNhX2NvbmR1aXRfcmVzZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYy00MTgtXFxubmV0L2RzYS9jb25kdWl0LmM6NDE5OmludCBkc2FfY29uZHVpdF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcClcXG5uZXQvZHNhL2NvbmR1aXQuYy00MjAte1xcbi0tXFxubmV0L2RzYS9jb25kdWl0LmM9NDc0PXZvaWQgZHNhX2NvbmR1aXRfdGVhcmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTQ4OS1cXG5uZXQvZHNhL2NvbmR1aXQuYzo0OTA6aW50IGRzYV9jb25kdWl0X2xhZ19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbGFnX2Rldiwgc3RydWN0IGRzYV9wb3J0ICpjcHVfZHAsXFxubmV0L2RzYS9jb25kdWl0LmMtNDkxLVxcdFxcdFxcdCAgc3RydWN0IG5ldGRldl9sYWdfdXBwZXJfaW5mbyAqdWluZm8sXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz01MjI9dm9pZCBkc2FfY29uZHVpdF9sYWdfdGVhcmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmxhZ19kZXYsXFxubmV0L2RzYS9jb25kdWl0LmM6NTIzOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwKVxcbm5ldC9kc2EvY29uZHVpdC5jLTUyNC17XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuaC01LVxcbm5ldC9kc2EvY29uZHVpdC5oOjY6c3RydWN0IGRzYV9wb3J0O1xcbm5ldC9kc2EvY29uZHVpdC5oLTctc3RydWN0IG5ldF9kZXZpY2U7XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuaD05PXN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7XFxubmV0L2RzYS9jb25kdWl0LmgtMTAtXFxubmV0L2RzYS9jb25kdWl0Lmg6MTE6aW50IGRzYV9jb25kdWl0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwKTtcXG5uZXQvZHNhL2NvbmR1aXQuaC0xMi12b2lkIGRzYV9jb25kdWl0X3RlYXJkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbm5ldC9kc2EvY29uZHVpdC5oOjEzOmludCBkc2FfY29uZHVpdF9sYWdfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmxhZ19kZXYsIHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwLFxcbm5ldC9kc2EvY29uZHVpdC5oLTE0LVxcdFxcdFxcdCAgc3RydWN0IG5ldGRldl9sYWdfdXBwZXJfaW5mbyAqdWluZm8sXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuaD0xNj12b2lkIGRzYV9jb25kdWl0X2xhZ190ZWFyZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqbGFnX2RldixcXG5uZXQvZHNhL2NvbmR1aXQuaDoxNzpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCk7XFxubmV0L2RzYS9jb25kdWl0LmgtMTgtaW50IF9fZHNhX2NvbmR1aXRfaHd0c3RhbXBfdmFsaWRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9kc2EvZGV2bGluay5jPTI4Mz1kc2FfZGV2bGlua19wb3J0X3JlZ2lvbl9jcmVhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxubmV0L2RzYS9kZXZsaW5rLmMtMjg3LXtcXG5uZXQvZHNhL2RldmxpbmsuYzoyODg6XFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcXG5uZXQvZHNhL2RldmxpbmsuYy0yODktXFxuLS1cXG5uZXQvZHNhL2RldmxpbmsuYz0zMDA9RVhQT1JUX1NZTUJPTF9HUEwoZHNhX2RldmxpbmtfcmVnaW9uX2Rlc3Ryb3kpO1xcbm5ldC9kc2EvZGV2bGluay5jLTMwMS1cXG5uZXQvZHNhL2RldmxpbmsuYzozMDI6aW50IGRzYV9wb3J0X2Rldmxpbmtfc2V0dXAoc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL2RldmxpbmsuYy0zMDMte1xcbi0tXFxubmV0L2RzYS9kZXZsaW5rLmMtMzU0LVxcbm5ldC9kc2EvZGV2bGluay5jOjM1NTp2b2lkIGRzYV9wb3J0X2RldmxpbmtfdGVhcmRvd24oc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL2RldmxpbmsuYy0zNTYte1xcbi0tXFxubmV0L2RzYS9kZXZsaW5rLmgtNS1cXG5uZXQvZHNhL2RldmxpbmsuaDo2OnN0cnVjdCBkc2FfcG9ydDtcXG5uZXQvZHNhL2RldmxpbmsuaC03LXN0cnVjdCBkc2Ffc3dpdGNoO1xcbm5ldC9kc2EvZGV2bGluay5oLTgtXFxubmV0L2RzYS9kZXZsaW5rLmg6OTppbnQgZHNhX3BvcnRfZGV2bGlua19zZXR1cChzdHJ1Y3QgZHNhX3BvcnQgKmRwKTtcXG5uZXQvZHNhL2RldmxpbmsuaDoxMDp2b2lkIGRzYV9wb3J0X2RldmxpbmtfdGVhcmRvd24oc3RydWN0IGRzYV9wb3J0ICpkcCk7XFxubmV0L2RzYS9kZXZsaW5rLmgtMTEtdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTA2PXN0cnVjdCBkc2FfbGFnICpkc2FfdHJlZV9sYWdfZmluZChzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTEwOC17XFxubmV0L2RzYS9kc2EuYzoxMDk6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTExMC1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTE4PXN0cnVjdCBkc2FfYnJpZGdlICpkc2FfdHJlZV9icmlkZ2VfZmluZChzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTEyMC17XFxubmV0L2RzYS9kc2EuYzoxMjE6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTEyMi1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTgxPXN0cnVjdCBkc2Ffc3dpdGNoICpkc2Ffc3dpdGNoX2ZpbmQoaW50IHRyZWVfaW5kZXgsIGludCBzd19pbmRleClcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTgzLVxcdHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdDtcXG5uZXQvZHNhL2RzYS5jOjE4NDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMTg1LVxcbi0tXFxubmV0L2RzYS9kc2EuYz0yNzE9c3RhdGljIHZvaWQgZHNhX3RyZWVfcHV0KHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMjc2LVxcbm5ldC9kc2EvZHNhLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgZHNhX3BvcnQgKmRzYV90cmVlX2ZpbmRfcG9ydF9ieV9ub2RlKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG5uZXQvZHNhL2RzYS5jLTI3OC1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKVxcbm5ldC9kc2EvZHNhLmMtMjc5LXtcXG5uZXQvZHNhL2RzYS5jOjI4MDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMjgxLVxcbi0tXFxubmV0L2RzYS9kc2EuYy0yODgtXFxubmV0L2RzYS9kc2EuYzoyODk6c3RhdGljIHN0cnVjdCBkc2FfbGluayAqZHNhX2xpbmtfdG91Y2goc3RydWN0IGRzYV9wb3J0ICpkcCxcXG5uZXQvZHNhL2RzYS5jOjI5MDpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRzYV9wb3J0ICpsaW5rX2RwKVxcbm5ldC9kc2EvZHNhLmMtMjkxLXtcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMzE0LVxcbm5ldC9kc2EvZHNhLmM6MzE1OnN0YXRpYyBib29sIGRzYV9wb3J0X3NldHVwX3JvdXRpbmdfdGFibGUoc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL2RzYS5jLTMxNi17XFxuLS1cXG5uZXQvZHNhL2RzYS5jLTMyMC1cXHRzdHJ1Y3Qgb2ZfcGhhbmRsZV9pdGVyYXRvciBpdDtcXG5uZXQvZHNhL2RzYS5jOjMyMTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmxpbmtfZHA7XFxubmV0L2RzYS9kc2EuYy0zMjItXFx0c3RydWN0IGRzYV9saW5rICpkbDtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MzQyPXN0YXRpYyBib29sIGRzYV90cmVlX3NldHVwX3JvdXRpbmdfdGFibGUoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbi0tXFxubmV0L2RzYS9kc2EuYy0zNDQtXFx0Ym9vbCBjb21wbGV0ZSA9IHRydWU7XFxubmV0L2RzYS9kc2EuYzozNDU6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTM0Ni1cXG4tLVxcbm5ldC9kc2EvZHNhLmMtMzU3LVxcbm5ldC9kc2EvZHNhLmM6MzU4OnN0YXRpYyBzdHJ1Y3QgZHNhX3BvcnQgKmRzYV90cmVlX2ZpbmRfZmlyc3RfY3B1KHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcXG5uZXQvZHNhL2RzYS5jLTM1OS17XFxubmV0L2RzYS9kc2EuYzozNjA6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTM2MS1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9MzY5PXN0cnVjdCBuZXRfZGV2aWNlICpkc2FfdHJlZV9maW5kX2ZpcnN0X2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtMzcwLXtcXG5uZXQvZHNhL2RzYS5jOjM3MTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcXG5uZXQvZHNhL2RzYS5jLTM3Mi1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9MzgwPXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfZGVmYXVsdF9jcHUoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtMzgxLXtcXG5uZXQvZHNhL2RzYS5jOjM4MjpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCwgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMzgzLVxcbi0tXFxubmV0L2RzYS9kc2EuYy00MDAtXFxubmV0L2RzYS9kc2EuYzo0MDE6c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqXFxubmV0L2RzYS9kc2EuYy00MDItZHNhX3N3aXRjaF9wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxubmV0L2RzYS9kc2EuYy00MDMte1xcbm5ldC9kc2EvZHNhLmM6NDA0OlxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xcbm5ldC9kc2EvZHNhLmMtNDA1LVxcbi0tXFxubmV0L2RzYS9kc2EuYz00MjQ9c3RhdGljIGludCBkc2FfdHJlZV9zZXR1cF9jcHVfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtNDI1LXtcXG5uZXQvZHNhL2RzYS5jOjQyNjpcXHRzdHJ1Y3QgZHNhX3BvcnQgKnByZWZlcnJlZF9jcHVfZHAsICpjcHVfZHAsICpkcDtcXG5uZXQvZHNhL2RzYS5jLTQyNy1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9NDUwPXN0YXRpYyB2b2lkIGRzYV90cmVlX3RlYXJkb3duX2NwdV9wb3J0cyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXFxubmV0L2RzYS9kc2EuYy00NTEte1xcbm5ldC9kc2EvZHNhLmM6NDUyOlxcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxubmV0L2RzYS9kc2EuYy00NTMtXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTQ1OC1cXG5uZXQvZHNhL2RzYS5jOjQ1OTpzdGF0aWMgaW50IGRzYV9wb3J0X3NldHVwKHN0cnVjdCBkc2FfcG9ydCAqZHApXFxubmV0L2RzYS9kc2EuYy00NjAte1xcbi0tXFxubmV0L2RzYS9kc2EuYy01MzItXFxubmV0L2RzYS9kc2EuYzo1MzM6c3RhdGljIHZvaWQgZHNhX3BvcnRfdGVhcmRvd24oc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL2RzYS5jLTUzNC17XFxuLS1cXG5uZXQvZHNhL2RzYS5jLTU2My1cXG5uZXQvZHNhL2RzYS5jOjU2NDpzdGF0aWMgaW50IGRzYV9wb3J0X3NldHVwX2FzX3VudXNlZChzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxcbm5ldC9kc2EvZHNhLmMtNTY1LXtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9NzE1PXN0YXRpYyB2b2lkIGRzYV90cmVlX3RlYXJkb3duX3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcXG5uZXQvZHNhL2RzYS5jLTcxNi17XFxubmV0L2RzYS9kc2EuYzo3MTc6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTcxOC1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9NzMwPXN0YXRpYyB2b2lkIGRzYV90cmVlX3RlYXJkb3duX3N3aXRjaGVzKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcXG5uZXQvZHNhL2RzYS5jLTczMS17XFxubmV0L2RzYS9kc2EuYzo3MzI6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTczMy1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9NzM5PXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtNzQwLXtcXG5uZXQvZHNhL2RzYS5jOjc0MTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtNzQyLVxcdGludCBlcnIgPSAwO1xcbi0tXFxubmV0L2RzYS9kc2EuYz03NzE9c3RhdGljIGludCBkc2FfdHJlZV9zZXR1cF9zd2l0Y2hlcyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXFxubmV0L2RzYS9kc2EuYy03NzIte1xcbm5ldC9kc2EvZHNhLmM6NzczOlxcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxubmV0L2RzYS9kc2EuYy03NzQtXFx0aW50IGVyciA9IDA7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTc4Nz1zdGF0aWMgaW50IGRzYV90cmVlX3NldHVwX2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtNzg4LXtcXG5uZXQvZHNhL2RzYS5jOjc4OTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcXG5uZXQvZHNhL2RzYS5jLTc5MC1cXHRpbnQgZXJyID0gMDtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9ODE0PXN0YXRpYyB2b2lkIGRzYV90cmVlX3RlYXJkb3duX2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtODE1LXtcXG5uZXQvZHNhL2RzYS5jOjgxNjpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcXG5uZXQvZHNhL2RzYS5jLTgxNy1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9ODM1PXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfbGFncyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTgzNy1cXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcXG5uZXQvZHNhL2RzYS5jOjgzODpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtODM5LVxcbi0tXFxubmV0L2RzYS9kc2EuYz05ODM9aW50IGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LFxcbi0tXFxubmV0L2RzYS9kc2EuYy05ODctXFx0c3RydWN0IGRzYV9ub3RpZmllcl90YWdfcHJvdG9faW5mbyBpbmZvO1xcbm5ldC9kc2EvZHNhLmM6OTg4OlxcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxubmV0L2RzYS9kc2EuYy05ODktXFx0aW50IGVyciA9IC1FQlVTWTtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTAyOT1zdGF0aWMgdm9pZCBkc2FfdHJlZV9jb25kdWl0X3N0YXRlX2NoYW5nZShzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTEwMzItXFx0c3RydWN0IGRzYV9ub3RpZmllcl9jb25kdWl0X3N0YXRlX2luZm8gaW5mbztcXG5uZXQvZHNhL2RzYS5jOjEwMzM6XFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBjb25kdWl0LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvZHNhLmMtMTAzNC1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTA0MT12b2lkIGRzYV90cmVlX2NvbmR1aXRfYWRtaW5fc3RhdGVfY2hhbmdlKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTA0NC17XFxubmV0L2RzYS9kc2EuYzoxMDQ1OlxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gY29uZHVpdC1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2RzYS5jLTEwNDYtXFx0Ym9vbCBub3RpZnkgPSBmYWxzZTtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTA2ND12b2lkIGRzYV90cmVlX2NvbmR1aXRfb3Blcl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LFxcbi0tXFxubmV0L2RzYS9kc2EuYy0xMDY3LXtcXG5uZXQvZHNhL2RzYS5jOjEwNjg6XFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBjb25kdWl0LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvZHNhLmMtMTA2OS1cXHRib29sIG5vdGlmeSA9IGZhbHNlO1xcbi0tXFxubmV0L2RzYS9kc2EuYy0xMDg2LVxcbm5ldC9kc2EvZHNhLmM6MTA4NzpzdGF0aWMgc3RydWN0IGRzYV9wb3J0ICpkc2FfcG9ydF90b3VjaChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBpbmRleClcXG5uZXQvZHNhL2RzYS5jLTEwODgte1xcbm5ldC9kc2EvZHNhLmMtMTA4OS1cXHRzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkcy1cXHUwMDNlZHN0O1xcbm5ldC9kc2EvZHNhLmM6MTA5MDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMTA5MS1cXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTExMy1cXG5uZXQvZHNhL2RzYS5jOjExMTQ6c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV91c2VyKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGNvbnN0IGNoYXIgKm5hbWUpXFxubmV0L2RzYS9kc2EuYy0xMTE1LXtcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTEyMS1cXG5uZXQvZHNhL2RzYS5jOjExMjI6c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9kc2Eoc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL2RzYS5jLTExMjMte1xcbi0tXFxubmV0L2RzYS9kc2EuYy0xMTI4LVxcbm5ldC9kc2EvZHNhLmM6MTEyOTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxubmV0L2RzYS9kc2EuYy0xMTMwLVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQpXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTExMzQtXFx0dW5zaWduZWQgaW50IG1kcF91cHN0cmVhbTtcXG5uZXQvZHNhL2RzYS5jOjExMzU6XFx0c3RydWN0IGRzYV9wb3J0ICptZHA7XFxubmV0L2RzYS9kc2EuYy0xMTM2LVxcbi0tXFxubmV0L2RzYS9kc2EuYy0xMTU0LVxcbm5ldC9kc2EvZHNhLmM6MTE1NTpzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2NwdShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG5uZXQvZHNhL2RzYS5jLTExNTYtXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqdXNlcl9wcm90b2NvbClcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTIzOS1cXG5uZXQvZHNhL2RzYS5jOjEyNDA6c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9vZihzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKVxcbm5ldC9kc2EvZHNhLmMtMTI0MS17XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTEyNzg9c3RhdGljIGludCBkc2Ffc3dpdGNoX3BhcnNlX3BvcnRzX29mKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTI4MS1cXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnRzLCAqcG9ydDtcXG5uZXQvZHNhL2RzYS5jOjEyODI6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTEyODMtXFx0aW50IGVyciA9IDA7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTEzNTU9c3RhdGljIGludCBkc2Ffc3dpdGNoX3RvdWNoX3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5uZXQvZHNhL2RzYS5jLTEzNTYte1xcbm5ldC9kc2EvZHNhLmM6MTM1NzpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMTM1OC1cXHRpbnQgcG9ydDtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTM5Mj1zdGF0aWMgc3RydWN0IGRldmljZSAqZGV2X2ZpbmRfY2xhc3Moc3RydWN0IGRldmljZSAqcGFyZW50LCBjaGFyICpjbGFzcylcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTQwMS1cXG5uZXQvZHNhL2RzYS5jOjE0MDI6c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBjb25zdCBjaGFyICpuYW1lLFxcbm5ldC9kc2EvZHNhLmMtMTQwMy1cXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTQzND1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfcGFyc2VfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxubmV0L2RzYS9kc2EuYy0xNDM3LVxcdGJvb2wgdmFsaWRfbmFtZV9mb3VuZCA9IGZhbHNlO1xcbm5ldC9kc2EvZHNhLmM6MTQzODpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMTQzOS1cXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTE0ODY9c3RhdGljIHZvaWQgZHNhX3N3aXRjaF9yZWxlYXNlX3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTQ4OC1cXHRzdHJ1Y3QgZHNhX21hY19hZGRyICphLCAqdG1wO1xcbm5ldC9kc2EvZHNhLmM6MTQ4OTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwLCAqbmV4dDtcXG5uZXQvZHNhL2RzYS5jLTE0OTAtXFx0c3RydWN0IGRzYV92bGFuICp2LCAqbjtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTYxMT12b2lkIGRzYV9zd2l0Y2hfc2h1dGRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxubmV0L2RzYS9kc2EuYy0xNjE0LVxcdExJU1RfSEVBRChjbG9zZV9saXN0KTtcXG5uZXQvZHNhL2RzYS5jOjE2MTU6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTE2MTYtXFxuLS1cXG5uZXQvZHNhL2RzYS5jPTE2NjI9RVhQT1JUX1NZTUJPTF9HUEwoZHNhX3N3aXRjaF9zaHV0ZG93bik7XFxuLS1cXG5uZXQvZHNhL2RzYS5jLTE2NjQtI2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbm5ldC9kc2EvZHNhLmM6MTY2NTpzdGF0aWMgYm9vbCBkc2FfcG9ydF9pc19pbml0aWFsaXplZChjb25zdCBzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxcbm5ldC9kc2EvZHNhLmMtMTY2Ni17XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTE2NzA9aW50IGRzYV9zd2l0Y2hfc3VzcGVuZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxubmV0L2RzYS9kc2EuYy0xNjcxLXtcXG5uZXQvZHNhL2RzYS5jOjE2NzI6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTE2NzMtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTE2OTI9aW50IGRzYV9zd2l0Y2hfcmVzdW1lKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5uZXQvZHNhL2RzYS5jLTE2OTMte1xcbm5ldC9kc2EvZHNhLmM6MTY5NDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMTY5NS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTcxNT1FWFBPUlRfU1lNQk9MX0dQTChkc2Ffc3dpdGNoX3Jlc3VtZSk7XFxuLS1cXG5uZXQvZHNhL2RzYS5jLTE3MTctXFxubmV0L2RzYS9kc2EuYzoxNzE4OnN0cnVjdCBkc2FfcG9ydCAqZHNhX3BvcnRfZnJvbV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5uZXQvZHNhL2RzYS5jLTE3MTkte1xcbi0tXFxubmV0L2RzYS9kc2EuYz0xNzQ1PWJvb2wgZHNhX2ZkYl9wcmVzZW50X2luX290aGVyX2RiKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTE3NDgte1xcbm5ldC9kc2EvZHNhLmM6MTc0OTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xcbm5ldC9kc2EvZHNhLmMtMTc1MC1cXHRzdHJ1Y3QgZHNhX21hY19hZGRyICphO1xcbi0tXFxubmV0L2RzYS9kc2EuYz0xNzY2PWJvb2wgZHNhX21kYl9wcmVzZW50X2luX290aGVyX2RiKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTE3Njkte1xcbm5ldC9kc2EvZHNhLmM6MTc3MDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xcbm5ldC9kc2EvZHNhLmMtMTc3MS1cXHRzdHJ1Y3QgZHNhX21hY19hZGRyICphO1xcbi0tXFxubmV0L2RzYS9kc2EuYz0xODExPWludCBkc2FfcG9ydF9zaW1wbGVfaHNyX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTgxNC17XFxubmV0L2RzYS9kc2EuYzoxODE1OlxcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCksICpvdGhlcl9kcDtcXG5uZXQvZHNhL2RzYS5jLTE4MTYtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTgzND1pbnQgZHNhX3BvcnRfc2ltcGxlX2hzcl9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxubmV0L2RzYS9kc2EuYy0xODM2LXtcXG5uZXQvZHNhL2RzYS5jOjE4Mzc6XFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KSwgKm90aGVyX2RwO1xcbm5ldC9kc2EvZHNhLmMtMTgzOC1cXG4tLVxcbm5ldC9kc2EvbmV0bGluay5jPTU1PXN0cnVjdCBydG5sX2xpbmtfb3BzIGRzYV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9kc2EvbmV0bGluay5jLTU2LVxcdC5raW5kXFx0XFx0XFx0PSBcXFwiZHNhXFxcIixcXG5uZXQvZHNhL25ldGxpbmsuYzo1NzpcXHQucHJpdl9zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGRzYV9wb3J0KSxcXG5uZXQvZHNhL25ldGxpbmsuYy01OC1cXHQubWF4dHlwZVxcdFxcdD0gSUZMQV9EU0FfTUFYLFxcbi0tXFxubmV0L2RzYS9wb3J0LmMtMzItICovXFxubmV0L2RzYS9wb3J0LmM6MzM6c3RhdGljIGludCBkc2FfcG9ydF9ub3RpZnkoY29uc3Qgc3RydWN0IGRzYV9wb3J0ICpkcCwgdW5zaWduZWQgbG9uZyBlLCB2b2lkICp2KVxcbm5ldC9kc2EvcG9ydC5jLTM0LXtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTM3LVxcbm5ldC9kc2EvcG9ydC5jOjM4OnN0YXRpYyB2b2lkIGRzYV9wb3J0X25vdGlmeV9icmlkZ2VfZmRiX2ZsdXNoKGNvbnN0IHN0cnVjdCBkc2FfcG9ydCAqZHAsIHUxNiB2aWQpXFxubmV0L2RzYS9wb3J0LmMtMzkte1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtNTQtXFxubmV0L2RzYS9wb3J0LmM6NTU6c3RhdGljIHZvaWQgZHNhX3BvcnRfZmFzdF9hZ2UoY29uc3Qgc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL3BvcnQuYy01Ni17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy02Ny1cXG5uZXQvZHNhL3BvcnQuYzo2ODpzdGF0aWMgaW50IGRzYV9wb3J0X3ZsYW5fZmFzdF9hZ2UoY29uc3Qgc3RydWN0IGRzYV9wb3J0ICpkcCwgdTE2IHZpZClcXG5uZXQvZHNhL3BvcnQuYy02OS17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy04My1cXG5uZXQvZHNhL3BvcnQuYzo4NDpzdGF0aWMgaW50IGRzYV9wb3J0X21zdGlfZmFzdF9hZ2UoY29uc3Qgc3RydWN0IGRzYV9wb3J0ICpkcCwgdTE2IG1zdGkpXFxubmV0L2RzYS9wb3J0LmMtODUte1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtMTAxLVxcbm5ldC9kc2EvcG9ydC5jOjEwMjpzdGF0aWMgYm9vbCBkc2FfcG9ydF9jYW5fY29uZmlndXJlX2xlYXJuaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHApXFxubmV0L2RzYS9wb3J0LmMtMTAzLXtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTExNi1cXG5uZXQvZHNhL3BvcnQuYzoxMTc6Ym9vbCBkc2FfcG9ydF9zdXBwb3J0c19od3RzdGFtcChzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxcbm5ldC9kc2EvcG9ydC5jLTExOC17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xMzAtXFxubmV0L2RzYS9wb3J0LmM6MTMxOmludCBkc2FfcG9ydF9zZXRfc3RhdGUoc3RydWN0IGRzYV9wb3J0ICpkcCwgdTggc3RhdGUsIGJvb2wgZG9fZmFzdF9hZ2UpXFxubmV0L2RzYS9wb3J0LmMtMTMyLXtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTE2My1cXG5uZXQvZHNhL3BvcnQuYzoxNjQ6c3RhdGljIHZvaWQgZHNhX3BvcnRfc2V0X3N0YXRlX25vdyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLCB1OCBzdGF0ZSxcXG5uZXQvZHNhL3BvcnQuYy0xNjUtXFx0XFx0XFx0XFx0ICAgYm9vbCBkb19mYXN0X2FnZSlcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTE3Ni1cXG5uZXQvZHNhL3BvcnQuYzoxNzc6aW50IGRzYV9wb3J0X3NldF9tc3Rfc3RhdGUoc3RydWN0IGRzYV9wb3J0ICpkcCxcXG5uZXQvZHNhL3BvcnQuYy0xNzgtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9tc3Rfc3RhdGUgKnN0YXRlLFxcbi0tXFxubmV0L2RzYS9wb3J0LmMtMjEyLVxcbm5ldC9kc2EvcG9ydC5jOjIxMzppbnQgZHNhX3BvcnRfZW5hYmxlX3J0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXFxubmV0L2RzYS9wb3J0LmMtMjE0LXtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTIzMy1cXG5uZXQvZHNhL3BvcnQuYzoyMzQ6aW50IGRzYV9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxcbm5ldC9kc2EvcG9ydC5jLTIzNS17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0yNDQtXFxubmV0L2RzYS9wb3J0LmM6MjQ1OnZvaWQgZHNhX3BvcnRfZGlzYWJsZV9ydChzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxcbm5ldC9kc2EvcG9ydC5jLTI0Ni17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0yNTktXFxubmV0L2RzYS9wb3J0LmM6MjYwOnZvaWQgZHNhX3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxcbm5ldC9kc2EvcG9ydC5jLTI2MS17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0yNjYtXFxubmV0L2RzYS9wb3J0LmM6MjY3OnN0YXRpYyB2b2lkIGRzYV9wb3J0X3Jlc2V0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxubmV0L2RzYS9wb3J0LmMtMjY4LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxcbi0tXFxubmV0L2RzYS9wb3J0LmMtMjcyLVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG5uZXQvZHNhL3BvcnQuYzoyNzM6XFx0c3RydWN0IGRzYV9wb3J0ICpvdGhlcl9kcDtcXG5uZXQvZHNhL3BvcnQuYy0yNzQtXFx0Ym9vbCB2bGFuX2ZpbHRlcmluZztcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTMyMC1cXG5uZXQvZHNhL3BvcnQuYzozMjE6c3RhdGljIGludCBkc2FfcG9ydF9pbmhlcml0X2JycG9ydF9mbGFncyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbm5ldC9kc2EvcG9ydC5jLTMyMi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2RzYS9wb3J0LmMtMzQ0LVxcbm5ldC9kc2EvcG9ydC5jOjM0NTpzdGF0aWMgdm9pZCBkc2FfcG9ydF9jbGVhcl9icnBvcnRfZmxhZ3Moc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL3BvcnQuYy0zNDYte1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtMzY1LVxcbm5ldC9kc2EvcG9ydC5jOjM2NjpzdGF0aWMgaW50IGRzYV9wb3J0X3N3aXRjaGRldl9zeW5jX2F0dHJzKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxubmV0L2RzYS9wb3J0LmMtMzY3LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0zOTEtXFxubmV0L2RzYS9wb3J0LmM6MzkyOnN0YXRpYyB2b2lkIGRzYV9wb3J0X3N3aXRjaGRldl91bnN5bmNfYXR0cnMoc3RydWN0IGRzYV9wb3J0ICpkcCxcXG5uZXQvZHNhL3BvcnQuYy0zOTMtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSlcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTQxOS1cXG5uZXQvZHNhL3BvcnQuYzo0MjA6c3RhdGljIGludCBkc2FfcG9ydF9icmlkZ2VfY3JlYXRlKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxubmV0L2RzYS9wb3J0LmMtNDIxLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmJyLFxcbi0tXFxubmV0L2RzYS9wb3J0LmMtNDU0LVxcbm5ldC9kc2EvcG9ydC5jOjQ1NTpzdGF0aWMgdm9pZCBkc2FfcG9ydF9icmlkZ2VfZGVzdHJveShzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbm5ldC9kc2EvcG9ydC5jLTQ1Ni1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyKVxcbi0tXFxubmV0L2RzYS9wb3J0LmMtNDcwLVxcbm5ldC9kc2EvcG9ydC5jOjQ3MTpzdGF0aWMgYm9vbCBkc2FfcG9ydF9zdXBwb3J0c19tc3Qoc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL3BvcnQuYy00NzIte1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtNDgwLVxcbm5ldC9kc2EvcG9ydC5jOjQ4MTppbnQgZHNhX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJyLFxcbm5ldC9kc2EvcG9ydC5jLTQ4Mi1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2RzYS9wb3J0LmMtNTM2LVxcbm5ldC9kc2EvcG9ydC5jOjUzNzp2b2lkIGRzYV9wb3J0X3ByZV9icmlkZ2VfbGVhdmUoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJyKVxcbm5ldC9kc2EvcG9ydC5jLTUzOC17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy01NTEtXFxubmV0L2RzYS9wb3J0LmM6NTUyOnZvaWQgZHNhX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpicilcXG5uZXQvZHNhL3BvcnQuYy01NTMte1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtNTgwLVxcbm5ldC9kc2EvcG9ydC5jOjU4MTppbnQgZHNhX3BvcnRfbGFnX2NoYW5nZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbm5ldC9kc2EvcG9ydC5jLTU4Mi1cXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2xhZ19sb3dlcl9zdGF0ZV9pbmZvICpsaW5mbylcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTYwNi1cXG5uZXQvZHNhL3BvcnQuYzo2MDc6c3RhdGljIGludCBkc2FfcG9ydF9sYWdfY3JlYXRlKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxubmV0L2RzYS9wb3J0LmMtNjA4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbGFnX2RldilcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTYzMy1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6NDcuMTQ1NDI0MjI3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDQxNjkyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGRzYV9wb3J0X3RvdWNoYCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBpbiBvbiBgZHNhX3BvcnRfdG91Y2hgIHdpdGhpbiBgbmV0L2RzYS9kc2EuY2AuIExldCBtZSBnZXQgc3RyYWlnaHQgdG8gdGhlIGNvZGUgYW5kIGNoZWNrIG91dCBsaW5lcyAxMDgwIHRvIDExMTAuIEZyb20gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBhbmQgaXRzIGxvY2F0aW9uIHdpdGhpbiB0aGUgRFNBIGZyYW1ld29yaywgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgaW52b2x2ZWQgaW4gc29tZSBraW5kIG9mIGxvdy1sZXZlbCBwb3J0IGludGVyYWN0aW9uIG9yIG1heWJlIGNhY2hlIG1haW50ZW5hbmNlIGZvciBhIERTQSBzd2l0Y2guIEJhc2VkIG9uIHRoZSBuYW1lIEkgYmV0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBtYW5hZ2luZyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgcG9ydC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCBoZXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciwgYW55IHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMgdGhhdCBhcmUgaW4gcGxhY2UsIGFuZCBob3cgdGhlIG5ldHdvcmsgZGV2aWNlIGlzIHVwZGF0ZWQgaWYgdGhlcmUgYXJlIGFueSBwb3J0IHN0YXRlIGNoYW5nZXMuIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIHBhcnRzIG9mIHRoYXQgcm91dGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDo0OS4yNDk1OTY3NjRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9kc2EvZHNhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MDpcXHRcXG4xMDgxOlxcdFxcdGNwdV9kcC1cXHUwMDNlY29uZHVpdF9vcGVyX3VwID0gdXA7XFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdGlmIChub3RpZnkpXFxuMTA4NDpcXHRcXHRcXHRkc2FfdHJlZV9jb25kdWl0X3N0YXRlX2NoYW5nZShkc3QsIGNvbmR1aXQpO1xcbjEwODU6XFx0fVxcbjEwODY6XFx0XFxuMTA4NzpcXHRzdGF0aWMgc3RydWN0IGRzYV9wb3J0ICpkc2FfcG9ydF90b3VjaChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBpbmRleClcXG4xMDg4OlxcdHtcXG4xMDg5OlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzLVxcdTAwM2Vkc3Q7XFxuMTA5MDpcXHRcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbjEwOTE6XFx0XFxuMTA5MjpcXHRcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKVxcbjEwOTM6XFx0XFx0XFx0aWYgKGRwLVxcdTAwM2VpbmRleCA9PSBpbmRleClcXG4xMDk0OlxcdFxcdFxcdFxcdHJldHVybiBkcDtcXG4xMDk1OlxcdFxcbjEwOTY6XFx0XFx0ZHAgPSBremFsbG9jX29iaigqZHApO1xcbjEwOTc6XFx0XFx0aWYgKCFkcClcXG4xMDk4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjEwOTk6XFx0XFxuMTEwMDpcXHRcXHRkcC1cXHUwMDNlZHMgPSBkcztcXG4xMTAxOlxcdFxcdGRwLVxcdTAwM2VpbmRleCA9IGluZGV4O1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkcC1cXHUwMDNlYWRkcl9saXN0c19sb2NrKTtcXG4xMTA0OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRwLVxcdTAwM2V2bGFuc19sb2NrKTtcXG4xMTA1OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkcC1cXHUwMDNlZmRicyk7XFxuMTEwNjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZHAtXFx1MDAzZW1kYnMpO1xcbjExMDc6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRwLVxcdTAwM2V2bGFucyk7IC8qIGFsc28gaW5pdGlhbGl6ZXMgXFx1MDAyNmRwLVxcdTAwM2V1c2VyX3ZsYW5zICovXFxuMTEwODpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZHAtXFx1MDAzZWxpc3QpO1xcbjExMDk6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZHAtXFx1MDAzZWxpc3QsIFxcdTAwMjZkc3QtXFx1MDAzZXBvcnRzKTtcXG4xMTEwOlxcdFxcbjExMTE6XFx0XFx0cmV0dXJuIGRwO1xcbjExMTI6XFx0fVxcbjExMTM6XFx0XFxuMTExNDpcXHRzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX3VzZXIoc3RydWN0IGRzYV9wb3J0ICpkcCwgY29uc3QgY2hhciAqbmFtZSlcXG4xMTE1OlxcdHtcXG4xMTE2OlxcdFxcdGRwLVxcdTAwM2V0eXBlID0gRFNBX1BPUlRfVFlQRV9VU0VSO1xcbjExMTc6XFx0XFx0ZHAtXFx1MDAzZW5hbWUgPSBuYW1lO1xcbjExMTg6XFx0XFxuMTExOTpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6NDkuMjQ5Njk5MjU0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4OTg4NjU0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gRFNBIFVzZXIgU2V0dXAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEU0EgdXNlciBzZXR1cCBpcyBiZWluZyBoYW5kbGVkLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBhcm91bmQgdGhlIGBuZXQvZHNhL3VzZXIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHNhX3VzZXJfc2V0dXBfdGNgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBmb3IgaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgRFNBIHN0YWNrLCBhbmQgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBleHBlY3QgdG8gZmluZCBjbHVlcyBhYm91dCB0cmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbiwgaW50ZXJmYWNlIGFzc2lnbm1lbnQsIGFuZCBob3cgdXNlci1zcGFjZSB0b29scyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgRFNBIGRyaXZlci4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSwgdGhlIGFyZ3VtZW50cyBpdCB0YWtlcywgdGhlIGludGVybmFsIHdvcmtpbmdzLCBhbmQgYW55IGNhbGxzIGl0IG1ha2VzIHRvIG90aGVyIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHRoZSBEU0EgdXNlci1zcGFjZSBpbnRlZ3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjUxLjE0ODU2NzMxNFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RzYS91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcxMDpcXHRcXHRcXHRpZiAoIWJsb2NrX2NiKVxcbjE3MTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTcxMjpcXHRcXG4xNzEzOlxcdFxcdFxcdGZsb3dfYmxvY2tfY2JfcmVtb3ZlKGJsb2NrX2NiLCBmKTtcXG4xNzE0OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZibG9ja19jYi1cXHUwMDNlZHJpdmVyX2xpc3QpO1xcbjE3MTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTcxNjpcXHRcXHRkZWZhdWx0OlxcbjE3MTc6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE3MTg6XFx0XFx0fVxcbjE3MTk6XFx0fVxcbjE3MjA6XFx0XFxuMTcyMTpcXHRzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxuMTcyMjpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibylcXG4xNzIzOlxcdHtcXG4xNzI0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7XFxuMTcyNTpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cXHUwMDNlZHM7XFxuMTcyNjpcXHRcXHRpbnQgZXJyO1xcbjE3Mjc6XFx0XFxuMTcyODpcXHRcXHQvKiBUaGUgdW5iaW5kIGdvZXMgdG8gdGhlIHNpZGUgdGhhdCB0b29rIHRoZSBiaW5kLiAqL1xcbjE3Mjk6XFx0XFx0aWYgKGJvLVxcdTAwM2Vjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkge1xcbjE3MzA6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuMTczMTpcXHRcXHRcXHRpZiAoZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9zZXR1cF90YylcXG4xNzMyOlxcdFxcdFxcdFxcdGVyciA9IGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVxcdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsXFxuMTczMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJvKTtcXG4xNzM0OlxcdFxcdFxcdGRwLVxcdTAwM2VmdF9vbl9zd2l0Y2ggPSBlcnIgIT0gLUVPUE5PVFNVUFA7XFxuMTczNTpcXHRcXHRcXHRpZiAoZHAtXFx1MDAzZWZ0X29uX3N3aXRjaClcXG4xNzM2OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTczNzpcXHRcXHR9IGVsc2UgaWYgKGRwLVxcdTAwM2VmdF9vbl9zd2l0Y2gpIHtcXG4xNzM4OlxcdFxcdFxcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cXHUwMDNlaW5kZXgsIFRDX1NFVFVQX0ZULCBibyk7XFxuMTczOTpcXHRcXHR9XFxuMTc0MDpcXHRcXG4xNzQxOlxcdFxcdGlmICghY29uZHVpdC1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3NldHVwX3RjKVxcbjE3NDI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE3NDM6XFx0XFxuMTc0NDpcXHRcXHRyZXR1cm4gY29uZHVpdC1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3NldHVwX3RjKGNvbmR1aXQsIFRDX1NFVFVQX0ZULCBibyk7XFxuMTc0NTpcXHR9XFxuMTc0NjpcXHRcXG4xNzQ3OlxcdHN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuMTc0ODpcXHRcXHRcXHRcXHQgICAgIHZvaWQgKnR5cGVfZGF0YSlcXG4xNzQ5OlxcdHtcXG4xNzUwOlxcdFxcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KGRldik7XFxuMTc1MTpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cXHUwMDNlZHM7XFxuMTc1MjpcXHRcXG4xNzUzOlxcdFxcdHN3aXRjaCAodHlwZSkge1xcbjE3NTQ6XFx0XFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcXG4xNzU1OlxcdFxcdFxcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XFxuMTc1NjpcXHRcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbjE3NTc6XFx0XFx0XFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xcbjE3NTg6XFx0XFx0ZGVmYXVsdDpcXG4xNzU5OlxcdFxcdFxcdGJyZWFrO1xcbjE3NjA6XFx0XFx0fVxcbjE3NjE6XFx0XFxuMTc2MjpcXHRcXHRpZiAoIWRzLVxcdTAwM2VvcHMtXFx1MDAzZXBvcnRfc2V0dXBfdGMpXFxuMTc2MzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTc2NDpcXHRcXG4xNzY1OlxcdFxcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cXHUwMDNlaW5kZXgsIHR5cGUsIHR5cGVfZGF0YSk7XFxuMTc2NjpcXHR9XFxuMTc2NzpcXHRcXG4xNzY4OlxcdHN0YXRpYyBpbnQgZHNhX3VzZXJfZ2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMTc2OTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjLCB1MzIgKnJ1bGVfbG9jcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6NTEuMTQ4NzIzNTYzWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNjcyNDE5OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBib29sIGZ0X29uX3N3aXRjaGAgbWVtYmVyIHRvIHRoZSBgc3RydWN0IGRzYV9wb3J0YC4gVGhpcyBpcyBjcml0aWNhbC4gVGhlIGFsbG9jYXRpb24gZm9yIHRoZSBgZHNhX3BvcnRgIHN0cnVjdHVyZSAqc3BlY2lmaWNhbGx5KiB1c2VzIGBremFsbG9jX29iamAsIG9yIGBydG5sX2xpbmtfb3BzYCBwcml2X3NpemUga3phbGxvYywgZ3VhcmFudGVlaW5nIHRoYXQgdGhpcyBuZXcgYm9vbGVhbiwgYGZ0X29uX3N3aXRjaGAsIHN0YXJ0cyBhdCBgZmFsc2VgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhpcyBib29sZWFuIGdldCBzZXQ/IEl0IGhhcHBlbnMgd2l0aGluIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AuIFdoZW4gYSBmbG93IGJsb2NrIGlzIGJlaW5nICpib3VuZCogKGBGTE9XX0JMT0NLX0JJTkRgKSwgdGhlIGNvZGUgZmlyc3QgY2hlY2tzIGlmIHRoZSBzd2l0Y2ggZHJpdmVyIGNhbiBoYW5kbGUgdGhlIGBUQ19TRVRVUF9GVGAgb3BlcmF0aW9uIHZpYSBgcG9ydF9zZXR1cF90Y2AuIFRoZSAqcmVzdWx0KiBvZiB0aGF0IGNoZWNrIGRldGVybWluZXMgYGRwLVx1MDAzZWZ0X29uX3N3aXRjaGAuIElmIGBwb3J0X3NldHVwX3RjYCBzdXBwb3J0cyB0aGUgZmxvdyB0YWJsZSBvcGVyYXRpb25zLCBhbmQgcmV0dXJucyBubyBlcnJvciwgYGZ0X29uX3N3aXRjaGAgaXMgc2V0IHRvIGB0cnVlYDsgb3RoZXJ3aXNlLCBpdCByZW1haW5zIGBmYWxzZWAuIFRoZSBwYXRjaCB0aGVuIHVzZXMgdGhpcyBib29sZWFuIHRvIGRldGVybWluZSB3aGVyZSB0byBwYXNzIHRoZSBmbG93IHRhYmxlIHNldHVwLiBJZiB0aGUgYmluZGluZyBmYWlsZWQsIGFuZCBgZnRfb25fc3dpdGNoYCBpcyBgdHJ1ZWAsIGl0IGlzIHBhc3NlZCB0byB0aGUgZHNhIGRyaXZlci4gSWYgaXQncyBmYWxzZSwgdGhlIGNvZGUgcGFzc2VzIHRoZSBzZXR1cCB0byB0aGUgY29uZHVpdC4gV2hlbiAqdW5iaW5kaW5nKiB0aGUgc2FtZSBgRkxPV19CTE9DS19VTkJJTkRgLCB0aGUgbG9naWMgbWlycm9ycyB0aGlzLlxuXG5NeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJcyB0aGVyZSBhbnkgcG9pbnQgd2hlcmUgYSByZWFkIGNvdWxkIG9jY3VyIGJlZm9yZSBhIHdyaXRlPyBMZXQncyB0cmFjZSB0aHJvdWdoOlxuXG4qICAgVGhlIGFsbG9jYXRpb24gb2YgYGRwYCBpcyB6ZXJvZWQgYnkgYGt6YWxsb2Nfb2JqYC4gU28sIHRoZSBpbml0aWFsIHN0YXRlIGlzIHNhZmUuXG4qICAgYGZ0X29uX3N3aXRjaGAgZ2V0cyBleHBsaWNpdGx5IHNldCBkdXJpbmcgdGhlIEJJTkQgb3BlcmF0aW9uLiBUaGlzIGNvdmVycyB0aGUgbW9zdCBpbXBvcnRhbnQgcG9pbnQgb2YgdGhlIGxvZ2ljLlxuKiAgIFRoZSBgYm9gIChmbG93IGJsb2NrIG9mZmxvYWQpIGRhdGEgc3RydWN0dXJlIGNvbWVzIGZyb20gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGF0J3MgZXh0ZXJuYWwsIGJ1dCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGF0IHN1YnN5c3RlbS4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgc2FmZWx5IGluaXRpYWxpemVkLlxuKiAgIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIG1ham9yIGFyZWEgb2YgY29uY2VybiBmb3IgbGVha3MuXG4qICAgVGhlcmUncyBubyBjb3B5aW5nIG9yIHJlYWRpbmcgb2YgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0cnVjdHMsIGFuZCB0aGF0IGlzIHZlcnkgaW1wb3J0YW50LlxuKiAgIFRoZXJlIGFyZSBubyBicmFuY2hpbmcgZGVjaXNpb25zLCBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIGxldCdzIGdvIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhIG1ldGhvZGljYWxseTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZS4gVGhlIHN0cnVjdHVyZXMgYXJlIGludGVybmFsLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLiBgZnRfb25fc3dpdGNoYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdCdzIHVzZWQuXG4zLiAgKipBbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgcG90ZW50aWFsbHkgcmVhZCBsYXRlcjoqKiBOb3BlLiBUaGUgYGRzYV9wb3J0YCBzdHJ1Y3R1cmUgaXMgY2FyZWZ1bGx5IGluaXRpYWxpemVkLlxuNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM6KiogTm8uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSBzaG91bGQgbm90IGhhdmUgYW55IEtNU0FOIGlzc3VlcyBoZXJlLlxuXG5LTVNBTiB2cy4gS0FTQU4gaXMgY3J1Y2lhbCBjb250ZXh0IGhlcmUuIEtBU0FOL0xPQ0tERVAvc3RhbmRhcmQgc2FuaXRpemVycyB3b3VsZCBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBVQUYgYnVncywgbG9ja2luZyBwcm9ibGVtcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gS01TQU4sIHNwZWNpZmljYWxseSwgZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gSW4gdGhpcyBjYXNlLCBga3phbGxvY19vYmpgIGFuZCB0aGUgZXhwbGljaXQgc2V0dGluZyBvZiBgZnRfb25fc3dpdGNoYCB3aXRoaW4gdGhlIGJpbmQvdW5iaW5kIGxvZ2ljIGVmZmVjdGl2ZWx5IHByZXZlbnQgS01TQU4gZnJvbSBmbGFnZ2luZyBhbnl0aGluZy4gVGhpcyBwYXRjaCBpcyBqdXN0IGludGVybmFsIGZsb3cgdGFibGUgb2ZmbG9hZCBkaXNwYXRjaCBsb2dpYyB0aGF0J3Mgc2FmZWx5IGltcGxlbWVudGVkLiBObyB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgbm8gc3RhY2sgYnVmZmVyIG1hbmlwdWxhdGlvbiwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cbkknbSBjb25maWRlbnQgd2UgY2FuIGNhbGwgYHNldC1yZXN1bHRzYCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI1NCwiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NTowMS44MjExNDY2NzNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgRFNBIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyAoVENfU0VUVVBfRlQpIHRvIHJvdXRlIGJpbmQvdW5iaW5kIHJlcXVlc3RzIHRvIGVpdGhlciB0aGUgRFNBIHN3aXRjaCBkcml2ZXIgb3IgdGhlIGNvbmR1aXQgbmV0ZGV2LCB0cmFja2luZyBzdGF0ZSB2aWEgYSBuZXcgYGZ0X29uX3N3aXRjaGAgZmllbGQgaW4gYHN0cnVjdCBkc2FfcG9ydGAuIGBzdHJ1Y3QgZHNhX3BvcnRgIGluc3RhbmNlcyBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBmaWVsZC4gVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgRFNBIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyAoVENfU0VUVVBfRlQpIHRvIHJvdXRlIGJpbmQvdW5iaW5kIHJlcXVlc3RzIHRvIGVpdGhlciB0aGUgRFNBIHN3aXRjaCBkcml2ZXIgb3IgdGhlIGNvbmR1aXQgbmV0ZGV2LCB0cmFja2luZyBzdGF0ZSB2aWEgYSBuZXcgYGZ0X29uX3N3aXRjaGAgZmllbGQgaW4gYHN0cnVjdCBkc2FfcG9ydGAuIGBzdHJ1Y3QgZHNhX3BvcnRgIGluc3RhbmNlcyBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBmaWVsZC4gVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpdtfx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 18:10:41 +0000 UTC FinishedAt: 2026-09-05 18:55:03 +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": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DSA", "NET_DSA_LOOP", "NF_FLOW_TABLE", "NF_TABLES" ], "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": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DSA", "NET_DSA_LOOP", "NF_FLOW_TABLE", "NF_TABLES" ], "series_id": "26811bd3-9752-40fc-9e9c-afbd2e758e36" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dsa_user_setup_ft_block", "dsa_user_setup_tc", "nf_flow_table_offload_cmd", "nf_flow_table_offload_setup" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9EU0EmIzM0OywKICAgICYjMzQ7TkVUX0RTQV9MT09QJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2smIzM0OywKICAgICYjMzQ7ZHNhX3VzZXJfc2V0dXBfdGMmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIERTQSBmbG93dGFibGUgYmxvY2sgc2V0dXAgbG9naWMgKFRDX1NFVFVQX0ZUKSB0byByb3V0ZSBiaW5kL3VuYmluZCByZXF1ZXN0cyB0byBlaXRoZXIgdGhlIERTQSBzd2l0Y2ggZHJpdmVyIG9yIHRoZSBjb25kdWl0IG5ldGRldiwgdHJhY2tpbmcgc3RhdGUgdmlhIGEgbmV3IGBmdF9vbl9zd2l0Y2hgIGZpZWxkIGluIGBzdHJ1Y3QgZHNhX3BvcnRgLiBgc3RydWN0IGRzYV9wb3J0YCBpbnN0YW5jZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBuZXcgZmllbGQuIFRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGNvcGllcywgbm8gdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBmbG93dGFibGUgYmxvY2sgc2V0dXAgbG9naWMgYnkgYWRkaW5nIHN0YXRlIHRyYWNraW5nIChmdF9vbl9zd2l0Y2gpIG9uIHN0cnVjdCBkc2FfcG9ydCB0byBlbnN1cmUgdW5iaW5kaW5nIHJvdXRlcyB0byB0aGUgc2FtZSBlbnRpdHkgKHN3aXRjaCBvciBjb25kdWl0KSB0aGF0IGhhbmRsZWQgYmluZGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIGZsb3d0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zIG9uIERTQSB1c2VyIHBvcnRzIChzdWNoIGFzIHdpdGggdGhlIHNvZnR3YXJlIGRzYV9sb29wIG1vY2sgZHJpdmVyKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBwb3RlbnRpYWwgc3RhdGUgbWlzbWF0Y2hlcywgYmluZC91bmJpbmQgZXJyb3IgcGF0aHMsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjkyMWYzMTFhYjUyZDBmYWVlNDE3NmE5YTY0NDA4YmUxNjUzZWY1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NTM6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaFxuaW5kZXggNzUwN2Q2MzJlN2M2ZC4uZGJjYjAyZGUwNmZjZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9kc2EuaFxuQEAgLTI5Nyw2ICYjNDM7Mjk3LDEyIEBAIHN0cnVjdCBkc2FfcG9ydCB7XG4gXG4gXHR1OFx0XHRcdHNldHVwOjE7XG4gXG4mIzQzO1x0LyogRmxvd3RhYmxlIGJsb2NrcyBvbiB0aGlzIHVzZXIgcG9ydCBnbyB0byB0aGUgc3dpdGNoLCBub3QgdGhlXG4mIzQzO1x0ICogY29uZHVpdDsgZGVjaWRlZCBhdCBiaW5kIHRpbWUuIFdyaXR0ZW4gd2l0aG91dCBydG5sLCBzbyBub3Qgb25lIG9mXG4mIzQzO1x0ICogdGhlIGJpdCBmaWVsZHMgYWJvdmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbFx0XHRcdGZ0X29uX3N3aXRjaDtcbiYjNDM7XG4gXHRzdHJ1Y3QgZGV2aWNlX25vZGVcdCpkbjtcbiBcdHVuc2lnbmVkIGludFx0XHRhZ2VpbmdfdGltZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jXG5pbmRleCAwNDFmOTA2MGM4ZWYwLi5mNGNkNDhkZjI1MTlkIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdXNlci5jXG5AQCAtMTcxOCwxNSAmIzQzOzE3MTgsMzAgQEAgc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3N0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibylcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHNhX3RvX3BvcnQoZHMsIHBvcnQpKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApO1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVx1MDAzZWRzO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB1bmJpbmQgZ29lcyB0byB0aGUgc2lkZSB0aGF0IHRvb2sgdGhlIGJpbmQuICovXG4mIzQzO1x0aWYgKGJvLVx1MDAzZWNvbW1hbmQgPT0gRkxPV19CTE9DS19CSU5EKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGlmIChkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90YylcbiYjNDM7XHRcdFx0ZXJyID0gZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBibyk7XG4mIzQzO1x0XHRkcC1cdTAwM2VmdF9vbl9zd2l0Y2ggPSBlcnIgIT0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRpZiAoZHAtXHUwMDNlZnRfb25fc3dpdGNoKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH0gZWxzZSBpZiAoZHAtXHUwMDNlZnRfb25fc3dpdGNoKSB7XG4mIzQzO1x0XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCwgYm8pO1xuJiM0MztcdH1cbiBcbiBcdGlmICghY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90YylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIHR5cGVfZGF0YSk7XG4mIzQzO1x0cmV0dXJuIGNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIGJvKTtcbiB9XG4gXG4gc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbkBAIC0xNzM5LDcgJiM0MzsxNzU0LDcgQEAgc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0ZUOlxuLVx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHMsIGRwLVx1MDAzZWluZGV4LCB0eXBlX2RhdGEpO1xuJiM0MztcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RTQSYjMzQ7LAogICAgJiMzNDtORVRfRFNBX0xPT1AmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayYjMzQ7LAogICAgJiMzNDtkc2FfdXNlcl9zZXR1cF90YyYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyBieSBhZGRpbmcgc3RhdGUgdHJhY2tpbmcgKGZ0X29uX3N3aXRjaCkgb24gc3RydWN0IGRzYV9wb3J0IHRvIGVuc3VyZSB1bmJpbmRpbmcgcm91dGVzIHRvIHRoZSBzYW1lIGVudGl0eSAoc3dpdGNoIG9yIGNvbmR1aXQpIHRoYXQgaGFuZGxlZCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb24gRFNBIHVzZXIgcG9ydHMgKHN1Y2ggYXMgd2l0aCB0aGUgc29mdHdhcmUgZHNhX2xvb3AgbW9jayBkcml2ZXIpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHBvdGVudGlhbCBzdGF0ZSBtaXNtYXRjaGVzLCBiaW5kL3VuYmluZCBlcnJvciBwYXRocywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiOTIxZjMxMWFiNTJkMGZhZWU0MTc2YTlhNjQ0MDhiZTE2NTNlZjUwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxODo1MzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmgKaW5kZXggNzUwN2Q2MzJlN2M2ZC4uZGJjYjAyZGUwNmZjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmgKQEAgLTI5Nyw2ICYjNDM7Mjk3LDEyIEBAIHN0cnVjdCBkc2FfcG9ydCB7CiAKIAl1OAkJCXNldHVwOjE7CiAKJiM0MzsJLyogRmxvd3RhYmxlIGJsb2NrcyBvbiB0aGlzIHVzZXIgcG9ydCBnbyB0byB0aGUgc3dpdGNoLCBub3QgdGhlCiYjNDM7CSAqIGNvbmR1aXQ7IGRlY2lkZWQgYXQgYmluZCB0aW1lLiBXcml0dGVuIHdpdGhvdXQgcnRubCwgc28gbm90IG9uZSBvZgomIzQzOwkgKiB0aGUgYml0IGZpZWxkcyBhYm92ZS4KJiM0MzsJICovCiYjNDM7CWJvb2wJCQlmdF9vbl9zd2l0Y2g7CiYjNDM7CiAJc3RydWN0IGRldmljZV9ub2RlCSpkbjsKIAl1bnNpZ25lZCBpbnQJCWFnZWluZ190aW1lOwogCmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jCmluZGV4IDA0MWY5MDYwYzhlZjAuLmY0Y2Q0OGRmMjUxOWQgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdXNlci5jCkBAIC0xNzE4LDE1ICYjNDM7MTcxOCwzMCBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfQogfQogCi1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCi0JCQkJICAgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3N0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCwKJiM0MzsJCQkJICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRzYV90b19wb3J0KGRzLCBwb3J0KSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLSZndDtkczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi8KJiM0MzsJaWYgKGJvLSZndDtjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkgewomIzQzOwkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoZHMtJmd0O29wcy0mZ3Q7cG9ydF9zZXR1cF90YykKJiM0MzsJCQllcnIgPSBkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjKGRzLCBkcC0mZ3Q7aW5kZXgsIFRDX1NFVFVQX0ZULAomIzQzOwkJCQkJCSAgICAgYm8pOwomIzQzOwkJZHAtJmd0O2Z0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWlmIChkcC0mZ3Q7ZnRfb25fc3dpdGNoKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0gZWxzZSBpZiAoZHAtJmd0O2Z0X29uX3N3aXRjaCkgewomIzQzOwkJcmV0dXJuIGRzLSZndDtvcHMtJmd0O3BvcnRfc2V0dXBfdGMoZHMsIGRwLSZndDtpbmRleCwgVENfU0VUVVBfRlQsIGJvKTsKJiM0MzsJfQogCiAJaWYgKCFjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIHR5cGVfZGF0YSk7CiYjNDM7CXJldHVybiBjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIGJvKTsKIH0KIAogc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKQEAgLTE3MzksNyAmIzQzOzE3NTQsNyBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLAogCWNhc2UgVENfU0VUVVBfQkxPQ0s6CiAJCXJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9GVDoKLQkJcmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRzLCBkcC0mZ3Q7aW5kZXgsIHR5cGVfZGF0YSk7CiYjNDM7CQlyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHAsIHR5cGVfZGF0YSk7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFNBIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6IGlzIHRoaXMgcGF0Y2ggZnV6emFibGUsIHdoYXQgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMsIGFuZCB3aGF0IHN5bWJvbHMgYXJlIG1vc3QgcmVsZXZhbnQ/CgpGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEl0JiMzOTtzIHRvdWNoaW5nIGBpbmNsdWRlL25ldC9kc2EuaGAgYW5kIGBuZXQvZHNhL3VzZXIuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGRyYXdzIG15IGF0dGVudGlvbiB0byB0aGUgRFNBIGFyY2hpdGVjdHVyZS4KClNwZWNpZmljYWxseSwgYGluY2x1ZGUvbmV0L2RzYS5oYCBhZGRzIGEgYGJvb2wgZnRfb25fc3dpdGNoYCB0byB0aGUgYHN0cnVjdCBkc2FfcG9ydGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBzdGF0ZSB0cmFja2luZyBmbG93IHRhYmxlcyBvbiB0aGUgc3dpdGNoLiBOb3csIGxvb2tpbmcgYXQgYG5ldC9kc2EvdXNlci5jYCwgSSBzZWUgc29tZSBjcml0aWNhbCBjaGFuZ2VzIGluIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AuIFRoaXMgc3RhdGljIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYGRzYV91c2VyX3NldHVwX3RjYCwgaGFuZGxlcyBgVENfU0VUVVBfRlRgLCB3aGljaCBzZWVtcyB0byBiZSBhYm91dCBmbG93IHRhYmxlIHNldHVwLiBJdCYjMzk7cyBoYW5kbGluZyB0aGUgYEZMT1dfQkxPQ0tfQklORGAgYW5kIHVuYmluZGluZyBjb21tYW5kcy4gSWYgYGRzLSZndDtvcHMtJmd0O3BvcnRfc2V0dXBfdGNgIGlzIHN1cHBvcnRlZCwgaXQgaW5kaWNhdGVzIGZsb3cgdGFibGUgaGFuZGxpbmcgb24gdGhlIHN3aXRjaCBieSBzZXR0aW5nIGBkcC0mZ3Q7ZnRfb25fc3dpdGNoYCB0byB0cnVlLiBJZiBub3QsIGl0IGZvcndhcmRzIHRvIHRoZSBjb25kdWl0JiMzOTtzIGBuZG9fc2V0dXBfdGNgLiBTbyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1hbmFnaW5nIHdoZXRoZXIgdGhlIGZsb3cgdGFibGUgaXMgbWFuYWdlZCBvbiB0aGUgc3dpdGNoIG9yIGZvcndhcmRlZC4gV2hlbiB1bmJpbmRpbmcsIGl0IGNoZWNrcyBgZHAtJmd0O2Z0X29uX3N3aXRjaGAgYW5kIGNhbGxzIGBkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjYCB3aGljaCBzdWdnZXN0cyB0aGVyZSYjMzk7cyBhIG5lZWQgdG8gaGFuZGxlIGZsb3cgdGFibGVzIG9uIHRoZSBzd2l0Y2ggd2hlbiB1bmJpbmRpbmcgdG9vLgoKTm93LCBteSBuZXh0IHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuIGdldCB0byB0aGlzIGluIGEgZnV6emluZyBlbnZpcm9ubWVudD8gQ2FuIERTQSBkZXZpY2VzIG9yIERTQSB1c2VyIGRldmljZXMgYmUgaW5zdGFudGlhdGVkIG9yIGFjY2Vzc2VkIHRocm91Z2ggbmV0bGluaywgbW9jayBpbnRlcmZhY2VzLCBtYXliZSBgZHNhX2xvb3BgLCBvciB3aXRoaW4gYSB2aXJ0dWFsaXplZCBzZXR1cD8gVGltZSB0byBjaGVjayBpZiBJIGNhbiBnZXQgYSBEU0EgZGV2aWNlIGluc3RhbmNlIGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUga2VybmVsIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9EU0EmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvS2NvbmZpZy0yLVxubmV0L2RzYS9LY29uZmlnOjM6bWVudWNvbmZpZyBORVRfRFNBXG5uZXQvZHNhL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0Rpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWc9MTc9aWYgTkVUX0RTQVxuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMC1cbm5ldC9kc2EvS2NvbmZpZzoyMTpjb25maWcgTkVUX0RTQV9UQUdfTk9ORVxubmV0L2RzYS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7Tm8tb3AgdGFnIGRyaXZlclwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yNi1cbm5ldC9kc2EvS2NvbmZpZzoyNzpjb25maWcgTkVUX0RTQV9UQUdfQVI5MzMxXG5uZXQvZHNhL0tjb25maWctMjgtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBBdGhlcm9zIEFSOTMzMSBTb0Mgd2l0aCBidWlsdC1pbiBzd2l0Y2hcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMzItXG5uZXQvZHNhL0tjb25maWc6MzM6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXG5uZXQvZHNhL0tjb25maWctMzQtXHR0cmlzdGF0ZVxuLS1cbm5ldC9kc2EvS2NvbmZpZy0zNi1cbm5ldC9kc2EvS2NvbmZpZzozNzpjb25maWcgTkVUX0RTQV9UQUdfQlJDTVxubmV0L2RzYS9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQnJvYWRjb20gc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy00My1cbm5ldC9kc2EvS2NvbmZpZzo0NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9MRUdBQ1lcbm5ldC9kc2EvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEJDTTYzeHggbGVnYWN5IHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctNTMtXG5uZXQvZHNhL0tjb25maWc6NTQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fTEVHQUNZX0ZDU1xubmV0L2RzYS9LY29uZmlnLTU1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQkNNNTN4eCBsZWdhY3kgc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy02My1cbm5ldC9kc2EvS2NvbmZpZzo2NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9QUkVQRU5EXG5uZXQvZHNhL0tjb25maWctNjUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBCcm9hZGNvbSBzd2l0Y2hlcyB1c2luZyBwcmVwZW5kZWQgaGVhZGVyc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy03MS1cbm5ldC9kc2EvS2NvbmZpZzo3Mjpjb25maWcgTkVUX0RTQV9UQUdfSEVMTENSRUVLXG5uZXQvZHNhL0tjb25maWctNzMtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBIaXJzY2htYW5uIEhlbGxjcmVlayBUU04gc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctNzctXG5uZXQvZHNhL0tjb25maWc6Nzg6Y29uZmlnIE5FVF9EU0FfVEFHX0dTV0lQXG5uZXQvZHNhL0tjb25maWctNzktXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBMYW50aXEgLyBJbnRlbCBHU1dJUCBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy04My1cbm5ldC9kc2EvS2NvbmZpZzo4NDpjb25maWcgTkVUX0RTQV9UQUdfRFNBX0NPTU1PTlxubmV0L2RzYS9LY29uZmlnLTg1LVx0dHJpc3RhdGVcbm5ldC9kc2EvS2NvbmZpZy04Ni1cbm5ldC9kc2EvS2NvbmZpZzo4Nzpjb25maWcgTkVUX0RTQV9UQUdfRFNBXG5uZXQvZHNhL0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIERTQSBoZWFkZXJzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTkzLVxubmV0L2RzYS9LY29uZmlnOjk0OmNvbmZpZyBORVRfRFNBX1RBR19FRFNBXG5uZXQvZHNhL0tjb25maWctOTUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIEV0aGVyVHlwZSBEU0EgaGVhZGVyc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xMDAtXG5uZXQvZHNhL0tjb25maWc6MTAxOmNvbmZpZyBORVRfRFNBX1RBR19NVDc2Mjhcbm5ldC9kc2EvS2NvbmZpZy0xMDItXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciB0aGUgTVQ3NjI4IGVtYmVkZGVkIHN3aXRjaFwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xMDYtXG5uZXQvZHNhL0tjb25maWc6MTA3OmNvbmZpZyBORVRfRFNBX1RBR19NVEtcbm5ldC9kc2EvS2NvbmZpZy0xMDgtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNZWRpYXRlayBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xMTItXG5uZXQvZHNhL0tjb25maWc6MTEzOmNvbmZpZyBORVRfRFNBX1RBR19NWExfODYyWFhcbm5ldC9kc2EvS2NvbmZpZy0xMTQtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTE5LVxubmV0L2RzYS9LY29uZmlnOjEyMDpjb25maWcgTkVUX0RTQV9UQUdfTVhMX0dTVzFYWFxubmV0L2RzYS9LY29uZmlnLTEyMS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1heExpbmVhciBHU1cxeHggc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTI3LVxubmV0L2RzYS9LY29uZmlnOjEyODpjb25maWcgTkVUX0RTQV9UQUdfS1NaXG5uZXQvZHNhL0tjb25maWctMTI5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWljcm9jaGlwIDg3OTUvOTM3eC85NDc3Lzk4OTMgZmFtaWxpZXMgb2Ygc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTMzLVxubmV0L2RzYS9LY29uZmlnOjEzNDpjb25maWcgTkVUX0RTQV9UQUdfTkVUQ1xubmV0L2RzYS9LY29uZmlnLTEzNS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE5YUCBORVRDIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE0My1cbm5ldC9kc2EvS2NvbmZpZzoxNDQ6Y29uZmlnIE5FVF9EU0FfVEFHX09DRUxPVFxubmV0L2RzYS9LY29uZmlnLTE0NS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE9jZWxvdCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIE5QSSBwb3J0XCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE1NC1cbm5ldC9kc2EvS2NvbmZpZzoxNTU6Y29uZmlnIE5FVF9EU0FfVEFHX09DRUxPVF84MDIxUVxubmV0L2RzYS9LY29uZmlnLTE1Ni1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE9jZWxvdCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTY0LVxubmV0L2RzYS9LY29uZmlnOjE2NTpjb25maWcgTkVUX0RTQV9UQUdfUUNBXG5uZXQvZHNhL0tjb25maWctMTY2LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xNzAtXG5uZXQvZHNhL0tjb25maWc6MTcxOmNvbmZpZyBORVRfRFNBX1RBR19SVEw0X0Fcbm5ldC9kc2EvS2NvbmZpZy0xNzItXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBSZWFsdGVrIDQgYnl0ZSBwcm90b2NvbCBBIHRhZ3NcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTc3LVxubmV0L2RzYS9LY29uZmlnOjE3ODpjb25maWcgTkVUX0RTQV9UQUdfUlRMOF80XG5uZXQvZHNhL0tjb25maWctMTc5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUmVhbHRlayA4IGJ5dGUgcHJvdG9jb2wgNCB0YWdzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE4My1cbm5ldC9kc2EvS2NvbmZpZzoxODQ6Y29uZmlnIE5FVF9EU0FfVEFHX1JaTjFfQTVQU1dcbm5ldC9kc2EvS2NvbmZpZy0xODUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBSZW5lc2FzIFJaL04xIEE1UFNXIHN3aXRjaFwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xOTAtXG5uZXQvZHNhL0tjb25maWc6MTkxOmNvbmZpZyBORVRfRFNBX1RBR19MQU45MzAzXG5uZXQvZHNhL0tjb25maWctMTkyLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgU01TQy9NaWNyb2NoaXAgTEFOOTMwMyBmYW1pbHkgb2Ygc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTk2LVxubmV0L2RzYS9LY29uZmlnOjE5Nzpjb25maWcgTkVUX0RTQV9UQUdfU0pBMTEwNVxubmV0L2RzYS9LY29uZmlnLTE5OC1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE5YUCBTSkExMTA1IHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTIwNS1cbm5ldC9kc2EvS2NvbmZpZzoyMDY6Y29uZmlnIE5FVF9EU0FfVEFHX1RSQUlMRVJcbm5ldC9kc2EvS2NvbmZpZy0yMDctXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBzd2l0Y2hlcyB1c2luZyBhIHRyYWlsZXIgdGFnXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTIxMS1cbm5ldC9kc2EvS2NvbmZpZzoyMTI6Y29uZmlnIE5FVF9EU0FfVEFHX1ZTQzczWFhfODAyMVFcbm5ldC9kc2EvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNaWNyb2NoaXAvVml0ZXNzZSBWU0M3M3h4IGZhbWlseSBvZiBzd2l0Y2hlcywgdXNpbmcgVkxBTlwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMTctXG5uZXQvZHNhL0tjb25maWc6MjE4OmNvbmZpZyBORVRfRFNBX1RBR19YUlM3MDBYXG5uZXQvZHNhL0tjb25maWctMjE5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgWFJTNzAweCBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMjMtXG5uZXQvZHNhL0tjb25maWc6MjI0OmNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcbm5ldC9kc2EvS2NvbmZpZy0yMjUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IHN3aXRjaGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERTQSBEcml2ZXIgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGRyaXZlcnMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZS4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgbG9jYXRpb24sIGBkcml2ZXJzL25ldC9kc2EvYC4gVGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkgZm9yIHRoZXNlIGRyaXZlcnMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hhdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBsaXN0aW5nIHRoZSBjb250ZW50cyBvZiB0aGF0IGRpcmVjdG9yeS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRyaXZlciBmaWxlcywgbW9kdWxlIHNvdXJjZSBhbmQgcG90ZW50aWFsbHkgc29tZSBjb21tb24gRFNBIHN1cHBvcnQgY29kZS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgY3VyaW91cyB0byBzZWUgaWYgYSAmIzM5O2RzYV9sb29wJiMzOTsgZHJpdmVyIGV4aXN0cyAtIGEgY29tbW9uIHByYWN0aWNlIGZvciBsb29wYmFjayB0ZXN0aW5nLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHRvIHVzZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZmlsZSBuYW1lcyB0aGVtc2VsdmVzLCBwb3RlbnRpYWxseSB1c2luZyBhIG1vcmUgc3lzdGVtYXRpYyBtZXRob2QgdG8gYnVpbGQgYSBxdWljayB2aWV3IG9mIHRoZSBEU0EgZHJpdmVyIGxhbmRzY2FwZSwgcHJvYmFibHkgdXNpbmcgYSBgZmluZGAgY29tbWFuZCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZW4gbW92ZSBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzYV9sb29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZT0zPWJjbS1zZjItb2Jqc1x0XHRcdDo9IGJjbV9zZjIubyBiY21fc2YyX2NmcC5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfTkVUX0RTQV9MT09QKVx0JiM0Mzs9IGRzYV9sb29wLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXHQmIzQzOz0ga3M4OTk1Lm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI2LVx0dTE2IG1lbWJlcnM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMDpzdHJ1Y3QgZHNhX2xvb3BfbWliX2VudHJ5IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVx0Y2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTplbnVtIGRzYV9sb29wX21pYl9jb3VudGVycyB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNi1cdERTQV9MT09QX1BIWV9SRUFEX09LLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ6XHRzdHJ1Y3QgZHNhX2xvb3BfbWliX2VudHJ5IG1pYltfX0RTQV9MT09QX0NOVF9NQVhdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXHR1MTYgcHZpZDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5OnN0cnVjdCBkc2FfbG9vcF9wcml2IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwLVx0c3RydWN0IG1paV9idXNcdCpidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MS1cdHVuc2lnbmVkIGludFx0cG9ydF9iYXNlO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTI6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUzLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0Olx0c3RydWN0IGRzYV9sb29wX3BvcnQgcG9ydHNbRFNBX01BWF9QT1JUU107XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01NS19O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1NzpzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTgtXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjgtXHRbRFNBX0xPT1BfUEhZX1JFQURfT0tdXHQ9IHsgXCYjMzQ7cGh5X3JlYWRfb2tcJiMzNDssIH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NzU9c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZSAqc3dpdGNoX21kaW9kZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy03Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy03OC1cdERTQV9MT09QX0RFVkxJTktfUEFSQU1fSURfTk9ORSwgIC8qIERFVkxJTktfUkVTT1VSQ0VfSURfUEFSRU5UX1RPUCAqL1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODI6c3RhdGljIHU2NCBkc2FfbG9vcF9kZXZsaW5rX3Z0dV9nZXQodm9pZCAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjg0Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVx0dW5zaWduZWQgaW50IGksIGNvdW50ID0gMDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjg2Olx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODctXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo5NzpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVx0c3RydWN0IGRldmxpbmtfcmVzb3VyY2Vfc2l6ZV9wYXJhbXMgc2l6ZV9wYXJhbXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMDA6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTAxLVx0aW50IGVycjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMTUtXHRcdFx0XHRcdCAgICAgIERTQV9MT09QX0RFVkxJTktfUEFSQU1fSURfVlRVLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTE2Olx0XHRcdFx0XHQgICAgICBkc2FfbG9vcF9kZXZsaW5rX3Z0dV9nZXQsIHBzKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMjU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBkc2FfbG9vcF9nZXRfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVx0XHRcdFx0XHRcdCAgIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEzMy1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEzNS17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMzY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM3LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHMtXHUwMDNlbnVtX3BvcnRzOyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0MDpcdFx0bWVtY3B5KHBzLVx1MDAzZXBvcnRzW2ldLm1pYiwgZHNhX2xvb3BfbWlicyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0MTpcdFx0ICAgICAgIHNpemVvZihkc2FfbG9vcF9taWJzKSk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDItXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQ1Olx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ni19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDctXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNTM6c3RhdGljIGludCBkc2FfbG9vcF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE1NC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTYxOnN0YXRpYyB2b2lkIGRzYV9sb29wX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXHRcdFx0XHQgdTMyIHN0cmluZ3NldCwgdWludDhfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2My17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTc0OnN0YXRpYyB2b2lkIGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzUtXHRcdFx0XHQgICAgICAgdWludDY0X3QgKmRhdGEpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzYte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTc3Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3OC1cdHVuc2lnbmVkIGludCBpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4My1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xODUte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTg2Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4Ny1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTk5OnN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3dyaXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDAtXHRcdFx0ICAgICAgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIwMjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDMtXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIxNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIxNi1cdFx0XHRcdCAgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIyNS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIyNjpzdGF0aWMgdm9pZCBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMzM6c3RhdGljIHZvaWQgZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzQtXHRcdFx0XHRcdHU4IHN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI0MDpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0MS1cdFx0XHRcdFx0Ym9vbCB2bGFuX2ZpbHRlcmluZyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTEtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTUtXHRib29sIHB2aWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1BWSUQ7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVx1MDAzZWJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcdHN0cnVjdCBkc2FfbG9vcF92bGFuICp2bDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1OS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODM6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbilcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXHRib29sIHVudGFnZ2VkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4NzpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODgtXHR1MTYgcHZpZCA9IHBzLVx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODktXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjkwOlx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEyLVx0XHRcdFx0ICAgIGludCBuZXdfbXR1KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxNDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxNS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjE6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyMi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzI1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzYSwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBkc2FfbG9vcF9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzU6XHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBkc2FfbG9vcF9nZXRfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzY6XHQuc2V0dXBcdFx0XHQ9IGRzYV9sb29wX3NldHVwLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM3Olx0LnRlYXJkb3duXHRcdD0gZHNhX2xvb3BfdGVhcmRvd24sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzg6XHQuZ2V0X3N0cmluZ3NcdFx0PSBkc2FfbG9vcF9nZXRfc3RyaW5ncyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcdC5nZXRfc3NldF9jb3VudFx0XHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQxOlx0LmdldF9ldGh0b29sX3BoeV9zdGF0c1x0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MjpcdC5waHlfcmVhZFx0XHQ9IGRzYV9sb29wX3BoeV9yZWFkLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQzOlx0LnBoeV93cml0ZVx0XHQ9IGRzYV9sb29wX3BoeV93cml0ZSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcdC5wb3J0X2JyaWRnZV9qb2luXHQ9IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XHQucG9ydF9icmlkZ2VfbGVhdmVcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2VfbGVhdmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XHQucG9ydF9zdHBfc3RhdGVfc2V0XHQ9IGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcdC5wb3J0X3ZsYW5fZmlsdGVyaW5nXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9maWx0ZXJpbmcsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XHQucG9ydF92bGFuX2FkZFx0XHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDk6XHQucG9ydF92bGFuX2RlbFx0XHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTA6XHQucG9ydF9jaGFuZ2VfbXR1XHQ9IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MTpcdC5wb3J0X21heF9tdHVcdFx0PSBkc2FfbG9vcF9wb3J0X21heF9tdHUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XHQucGh5bGlua19nZXRfY2Fwc1x0PSBkc2FfbG9vcF9waHlsaW5rX2dldF9jYXBzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTU6c3RhdGljIGludCBkc2FfbG9vcF9kcnZfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NzpcdHN0cnVjdCBkc2FfbG9vcF9wZGF0YSAqcGRhdGEgPSBtZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU4Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cdGRzLVx1MDAzZWRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzgzOlx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2ZHNhX2xvb3BfZHJpdmVyO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVx0ZHMtXHUwMDNlcHJpdiA9IHBzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5NzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9kcnZfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTktXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDAwOlx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDAxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQxMTpzdGF0aWMgdm9pZCBkc2FfbG9vcF9kcnZfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MjM6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBkc2FfbG9vcF9kcnYgPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXHQubWRpb2Rydi5kcml2ZXJcdD0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNi1cdH0sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XHQucHJvYmVcdD0gZHNhX2xvb3BfZHJ2X3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4Olx0LnJlbW92ZVx0PSBkc2FfbG9vcF9kcnZfcmVtb3ZlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5Olx0LnNodXRkb3duID0gZHNhX2xvb3BfZHJ2X3NodXRkb3duLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDMwLX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzI6c3RhdGljIGludCBkc2FfbG9vcF9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDMzLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM1Olx0cmV0dXJuIGRydiA9PSBcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzYtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM3LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDY6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDcte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4Olx0c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9wZGF0YSBkc2FfbG9vcF9wZGF0YSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0OS1cdFx0LmNkID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MTpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MjpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NzMtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDgxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDgyOnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDg2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3Olx0cmV0ID0gZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcdHJldCA9IG1kaW9fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTY6XHRcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk3LVx0XHRtZGlvX2RldmljZV9yZW1vdmUoc3dpdGNoX21kaW9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDM6bW9kdWxlX2luaXQoZHNhX2xvb3BfaW5pdCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNi17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDc6XHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDg6XHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwOS1cdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTExLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUxMjptb2R1bGVfZXhpdChkc2FfbG9vcF9leGl0KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM0MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIGBuZXQvZHNhL3VzZXIuY2AgYXJvdW5kIGBkc2FfdXNlcl9zZXR1cF90Y2A6CgoqKkRpdmluZyBpbnRvIERTQSBVc2VyIFRDIFNldHVwKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIGBuZXQvZHNhL3VzZXIuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBkc2FfdXNlcl9zZXR1cF90Y2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGhhcHBlbnMgaW4gdGhlIGNvbnRleHQgb2YgdHJhZmZpYyBjb250cm9sLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgbWFkbmVzcywgZGVwZW5kaW5nIG9uIGhvdyB5b3UgbG9vayBhdCBpdCEpIG9mIGJyaWRnaW5nIHVzZXJsYW5kIGNvbmZpZ3VyYXRpb25zIHRvIHRoZSBrZXJuZWwmIzM5O3MgVEMgZnJhbWV3b3JrIGxpa2VseSByZXNpZGVzLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQmIzM5O3MgZXhwZWN0aW5nLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb25maWd1cmluZyBRRGlzY3MsIGZpbHRlcnMsIG9yIGJvdGg/CgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgdHlwaWNhbCBUQyBvcGVyYXRpb25zOiBjcmVhdGluZywgZGVsZXRpbmcsIGFuZCBtb2RpZnlpbmcgdHJhZmZpYyBjb250cm9sIHJ1bGVzLiBJcyBpdCB0YWtpbmcgbmV0bGluayBtZXNzYWdlcyBhbmQgdGhlbiB0cmFuc2xhdGluZyB0aGVtIGludG8gdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBjYWxscz8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzIGhlcmUgZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5PyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkLgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBlcnJvciBoYW5kbGluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgdXNlci1mYWNpbmcgY29tcG9uZW50LCByb2J1c3QgZXJyb3IgY2hlY2tpbmcgaXMgcGFyYW1vdW50LiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYWxsb3cgYSB1c2VyIHRvIGJ5cGFzcyBhY2Nlc3MgcmVzdHJpY3Rpb25zIG9yIGV2ZW4gY3Jhc2ggdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbiBhcyB3ZWxsLCBtYWtpbmcgc3VyZSBhbGwgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSBtYW5hZ2VkIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIGFyZSBhdm9pZGVkLiBJJiMzOTtsbCBhbHNvIGNoZWNrIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBicmlkZ2Ugb3IgVkxBTiBpbnRlcmZhY2VzOyB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0IHdpdGggZXhpc3RpbmcgVEMgY29uZmlndXJhdGlvbnM/IEhvdyBhcmUgdGhlIERTQS1zcGVjaWZpYyBwYXJhbWV0ZXJzIGhhbmRsZWQsIGFuZCBob3cgYXJlIHRoZXkgdHJhbnNsYXRlZCBpbnRvIHRoZSBUQyBkYXRhIHN0cnVjdHVyZXM/IExldCYjMzk7cyBnZXQgY3JhY2tpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZHNhL3VzZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcwMDpcdFxuMTcwMTpcdFx0XHRibG9ja19jYiA9IGZsb3dfYmxvY2tfY2JfYWxsb2MoY2IsIGRldiwgZGV2LCBOVUxMKTtcbjE3MDI6XHRcdFx0aWYgKElTX0VSUihibG9ja19jYikpXG4xNzAzOlx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYmxvY2tfY2IpO1xuMTcwNDpcdFxuMTcwNTpcdFx0XHRmbG93X2Jsb2NrX2NiX2FkZChibG9ja19jYiwgZik7XG4xNzA2Olx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YmxvY2tfY2ItXHUwMDNlZHJpdmVyX2xpc3QsIFx1MDAyNmRzYV91c2VyX2Jsb2NrX2NiX2xpc3QpO1xuMTcwNzpcdFx0XHRyZXR1cm4gMDtcbjE3MDg6XHRcdGNhc2UgRkxPV19CTE9DS19VTkJJTkQ6XG4xNzA5Olx0XHRcdGJsb2NrX2NiID0gZmxvd19ibG9ja19jYl9sb29rdXAoZi1cdTAwM2VibG9jaywgY2IsIGRldik7XG4xNzEwOlx0XHRcdGlmICghYmxvY2tfY2IpXG4xNzExOlx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNzEyOlx0XG4xNzEzOlx0XHRcdGZsb3dfYmxvY2tfY2JfcmVtb3ZlKGJsb2NrX2NiLCBmKTtcbjE3MTQ6XHRcdFx0bGlzdF9kZWwoXHUwMDI2YmxvY2tfY2ItXHUwMDNlZHJpdmVyX2xpc3QpO1xuMTcxNTpcdFx0XHRyZXR1cm4gMDtcbjE3MTY6XHRcdGRlZmF1bHQ6XG4xNzE3Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE3MTg6XHRcdH1cbjE3MTk6XHR9XG4xNzIwOlx0XG4xNzIxOlx0c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxuMTcyMjpcdFx0XHRcdFx0ICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pXG4xNzIzOlx0e1xuMTcyNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRwKTtcbjE3MjU6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVx1MDAzZWRzO1xuMTcyNjpcdFx0aW50IGVycjtcbjE3Mjc6XHRcbjE3Mjg6XHRcdC8qIFRoZSB1bmJpbmQgZ29lcyB0byB0aGUgc2lkZSB0aGF0IHRvb2sgdGhlIGJpbmQuICovXG4xNzI5Olx0XHRpZiAoYm8tXHUwMDNlY29tbWFuZCA9PSBGTE9XX0JMT0NLX0JJTkQpIHtcbjE3MzA6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4xNzMxOlx0XHRcdGlmIChkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90YylcbjE3MzI6XHRcdFx0XHRlcnIgPSBkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXHUwMDNlaW5kZXgsIFRDX1NFVFVQX0ZULFxuMTczMzpcdFx0XHRcdFx0XHRcdCAgICAgYm8pO1xuMTczNDpcdFx0XHRkcC1cdTAwM2VmdF9vbl9zd2l0Y2ggPSBlcnIgIT0gLUVPUE5PVFNVUFA7XG4xNzM1Olx0XHRcdGlmIChkcC1cdTAwM2VmdF9vbl9zd2l0Y2gpXG4xNzM2Olx0XHRcdFx0cmV0dXJuIGVycjtcbjE3Mzc6XHRcdH0gZWxzZSBpZiAoZHAtXHUwMDNlZnRfb25fc3dpdGNoKSB7XG4xNzM4Olx0XHRcdHJldHVybiBkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXHUwMDNlaW5kZXgsIFRDX1NFVFVQX0ZULCBibyk7XG4xNzM5Olx0XHR9XG4xNzQwOlx0XG4xNzQxOlx0XHRpZiAoIWNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMpXG4xNzQyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE3NDM6XHRcbjE3NDQ6XHRcdHJldHVybiBjb25kdWl0LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldHVwX3RjKGNvbmR1aXQsIFRDX1NFVFVQX0ZULCBibyk7XG4xNzQ1Olx0fVxuMTc0NjpcdFxuMTc0NzpcdHN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4xNzQ4Olx0XHRcdFx0ICAgICB2b2lkICp0eXBlX2RhdGEpXG4xNzQ5Olx0e1xuMTc1MDpcdFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcbjE3NTE6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVx1MDAzZWRzO1xuMTc1MjpcdFxuMTc1MzpcdFx0c3dpdGNoICh0eXBlKSB7XG4xNzU0Olx0XHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuMTc1NTpcdFx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soZGV2LCB0eXBlX2RhdGEpO1xuMTc1NjpcdFx0Y2FzZSBUQ19TRVRVUF9GVDpcbjE3NTc6XHRcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xuMTc1ODpcdFx0ZGVmYXVsdDpcbjE3NTk6XHRcdFx0YnJlYWs7XG4xNzYwOlx0XHR9XG4xNzYxOlx0XG4xNzYyOlx0XHRpZiAoIWRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKVxuMTc2MzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xNzY0Olx0XG4xNzY1Olx0XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVx1MDAzZWluZGV4LCB0eXBlLCB0eXBlX2RhdGEpO1xuMTc2NjpcdH1cbjE3Njc6XHRcbjE3Njg6XHRzdGF0aWMgaW50IGRzYV91c2VyX2dldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuMTc2OTpcdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICpuZmMsIHUzMiAqcnVsZV9sb2NzKVxuMTc3MDpcdHtcbjE3NzE6XHRcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KGRldik7XG4xNzcyOlx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cdTAwM2VkcztcbjE3NzM6XHRcbjE3NzQ6XHRcdGlmICghZHMtXHUwMDNlb3BzLVx1MDAzZWdldF9yeG5mYylcbjE3NzU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTc3NjpcdFxuMTc3NzpcdFx0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2VnZXRfcnhuZmMoZHMsIGRwLVx1MDAzZWluZGV4LCBuZmMsIHJ1bGVfbG9jcyk7XG4xNzc4Olx0fVxuMTc3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDgzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB0aGUgZXhlY3V0aW9uIGZsb3cgaGVyZS4gVGhlIGZ1bmN0aW9uIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2Agc2VlbXMgdG8gYmUgdGhlIGtleSBwbGF5ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVuIGRvZXMgdGhpcyBhY3R1YWxseSBnZXQgdHJpZ2dlcmVkPyBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBkc2FfdXNlcl9zZXR1cF90Y2AsIHNwZWNpZmljYWxseSB3aGVuIGBkc2FfdXNlcl9zZXR1cF90Y2AgaXMgaW52b2tlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIHR5cGUgYFRDX1NFVFVQX0ZUYC4gCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogd2hhdCYjMzk7cyB0aGUgY2FsbCBzdGFjayBoZXJlPyBXaGVuIGRvZXMgYG5kb19zZXR1cF90Y2AsIHRoZSBuZXQgZGV2aWNlIG9wZXJhdG9yIHNldHVwIGZ1bmN0aW9uLCBnZXQgY2FsbGVkIHdpdGggYFRDX1NFVFVQX0ZUYD8gTmVlZCB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIGdyYXBoLiBMb29rcyBsaWtlIEkmIzM5O2xsIG5lZWQgdG8gZ3JlcCB0aGUga2VybmVsIHNvdXJjZSBmb3IgdGhlIHVzZSBvZiB0aGF0IGZsYWcuIExldCYjMzk7cyBzdGFydCB0aGVyZSB0byBmaW5kIHRoZSBwYXJlbnQgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VENfU0VUVVBfRlQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTMwNT1uZG9fc2V0dXBfdGM6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTMwOS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDozMTA6XHRGb3IgYGBUQ19TRVRVUF9CTE9DS2BgIGFuZCBgYFRDX1NFVFVQX0ZUYGAgYGBydG5sX2xvY2tgYCBtYXkgb3JcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMTEtXHRtYXkgbm90IGJlIGhlbGQsIGFuZCB0aGUgbmV0ZGV2IGluc3RhbmNlIGxvY2sgaXMgbm90IGhlbGQuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6MzEyOlx0YGBUQ19TRVRVUF9CTE9DS2BgIHJ1bnMgdW5kZXIgYGBibG9jay1cdTAwM2VjYl9sb2NrYGAgYW5kIGBgVENfU0VUVVBfRlRgYFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTMxMy1cdHJ1bnMgdW5kZXIgYGBmbG93dGFibGUtXHUwMDNlZmxvd19ibG9ja19sb2NrYGAuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zMzI0PXN0YXRpYyBpbnQgYWlyb2hhX2Rldl90Y19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzMzMi1cdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjMzMzM6XHRjYXNlIFRDX1NFVFVQX0ZUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zMzM0LVx0XHRyZXR1cm4gYWlyb2hhX2Rldl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM9NjY5PWludCBtdGtfZXRoX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTY3My1cdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzo2NzQ6XHRjYXNlIFRDX1NFVFVQX0ZUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtNjc1LVx0XHRyZXR1cm4gbXRrX2V0aF9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3dlZC5jPTI3NjA9bXRrX3dlZF9zZXR1cF90YyhzdHJ1Y3QgbXRrX3dlZF9kZXZpY2UgKndlZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfd2VkLmMtMjc2OS1cdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfd2VkLmM6Mjc3MDpcdGNhc2UgVENfU0VUVVBfRlQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfd2VkLmMtMjc3MS1cdFx0cmV0dXJuIG10a193ZWRfc2V0dXBfdGNfYmxvY2soaHcsIGRldiwgdHlwZV9kYXRhKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcmVwL3RjLmM9MjQ3PWludCBtbHg1ZV9yZXBfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3JlcC90Yy5jLTI2MC1cdFx0XHRcdFx0XHQgIHByaXYsIHByaXYsIHRydWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3JlcC90Yy5jOjI2MTpcdGNhc2UgVENfU0VUVVBfRlQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcmVwL3RjLmMtMjYyLVx0XHRyZXR1cm4gZmxvd19ibG9ja19jYl9zZXR1cF9zaW1wbGUodHlwZV9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYz02NjI9aW50IG1seDVlX3JlcF9pbmRyX3NldHVwX2NiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBRZGlzYyAqc2NoLCB2b2lkICpjYl9wcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYy02NzQtXHRcdFx0XHRcdFx0ICBkYXRhLCBjbGVhbnVwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYzo2NzU6XHRjYXNlIFRDX1NFVFVQX0ZUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3JlcC90Yy5jLTY3Ni1cdFx0cmV0dXJuIG1seDVlX3JlcF9pbmRyX3NldHVwX2Jsb2NrKG5ldGRldiwgc2NoLCBjYl9wcml2LCB0eXBlX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3RjLmM9Nzc9bnNpbV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS90Yy5jLTkwLVx0XHRcdFx0XHRcdCAgbnMsIG5zLCB0cnVlKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90Yy5jOjkxOlx0Y2FzZSBUQ19TRVRVUF9GVDpcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90Yy5jLTkyLVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L25wdS5jPTM3MT1pbnQgbXQ3Nl9ucHVfbmV0X3NldHVwX3RjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbnB1LmMtMzg0LVx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbnB1LmM6Mzg1Olx0Y2FzZSBUQ19TRVRVUF9GVDpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbnB1LmMtMzg2LVx0XHRyZXR1cm4gbXQ3Nl9ucHVfc2V0dXBfdGNfYmxvY2socGh5LCBkZXYsIHR5cGVfZGF0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD05NTg9ZW51bSB0Y19zZXR1cF90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTk3My1cdFRDX1NFVFVQX1FESVNDX1RBUFJJTyxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6OTc0Olx0VENfU0VUVVBfRlQsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTk3NS1cdFRDX1NFVFVQX1FESVNDX0VUUyxcbi0tXG5uZXQvZHNhL3VzZXIuYz0xNzIxPXN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCxcbi0tXG5uZXQvZHNhL3VzZXIuYy0xNzMxLVx0XHRpZiAoZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMpXG5uZXQvZHNhL3VzZXIuYzoxNzMyOlx0XHRcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsXG5uZXQvZHNhL3VzZXIuYy0xNzMzLVx0XHRcdFx0XHRcdCAgICAgYm8pO1xuLS1cbm5ldC9kc2EvdXNlci5jLTE3MzctXHR9IGVsc2UgaWYgKGRwLVx1MDAzZWZ0X29uX3N3aXRjaCkge1xubmV0L2RzYS91c2VyLmM6MTczODpcdFx0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsIGJvKTtcbm5ldC9kc2EvdXNlci5jLTE3MzktXHR9XG4tLVxubmV0L2RzYS91c2VyLmMtMTc0My1cbm5ldC9kc2EvdXNlci5jOjE3NDQ6XHRyZXR1cm4gY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xubmV0L2RzYS91c2VyLmMtMTc0NS19XG4tLVxubmV0L2RzYS91c2VyLmM9MTc0Nz1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuLS1cbm5ldC9kc2EvdXNlci5jLTE3NTUtXHRcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XG5uZXQvZHNhL3VzZXIuYzoxNzU2Olx0Y2FzZSBUQ19TRVRVUF9GVDpcbm5ldC9kc2EvdXNlci5jLTE3NTctXHRcdHJldHVybiBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhkcCwgdHlwZV9kYXRhKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyMzg9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX2luZHJfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjQ2LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjQ3Olx0cmV0dXJuIGZsb3dfaW5kcl9kZXZfc2V0dXBfb2ZmbG9hZChkZXYsIE5VTEwsIFRDX1NFVFVQX0ZULCBmbG93dGFibGUsIGJvLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjQ4LVx0XHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX2luZHJfY2xlYW51cCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjUxPXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNjEtXHRkb3duX3dyaXRlKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjYyOlx0ZXJyID0gZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldHVwX3RjKGRldiwgVENfU0VUVVBfRlQsIGJvKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI2My1cdHVwX3dyaXRlKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUzNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERTQSBPZmZsb2FkIFBhdGgqKgoKT2theSwgc28gaWYgSSB1bmRlcnN0YW5kIHRoaXMgY29ycmVjdGx5LCBgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJdCYjMzk7cyBjYWxsaW5nIGBkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19zZXR1cF90YyhkZXYsIFRDX1NFVFVQX0ZULCBibylgLiBSaWdodCwgYW5kIHRoYXQgYG5kb19zZXR1cF90Y2AgZnVuY3Rpb24gaXMgYmVpbmcgYXNzaWduZWQgd2l0aGluIGBuZXQvZHNhL3VzZXIuY2AgdG8gYGRzYV91c2VyX25ldGRldl9vcHNgIGFzIGBkc2FfdXNlcl9zZXR1cF90Y2AuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHdlIGNvbmZpZ3VyZSB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgdXNpbmcgc29tZXRoaW5nIGxpa2UgdGhhdCBgbmZ0YCBjb21tYW5kIChhbmQgc3BlY2lmeWluZyB0aGUgYGRzYV91c2VyX2RldmApLCBpdCBldmVudHVhbGx5IGdvZXMgdGhyb3VnaCB0aGlzIHBhdGg6IGBuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kYCAtJmd0OyAgYG5kb19zZXR1cF90Y2AsIHdpdGggdGhlIGBUQ19TRVRVUF9GVGAgcGFyYW1ldGVyLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgZXhwZWN0ZWQgY2hhaW4gb2YgZXZlbnRzLgoKTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uIGFyaXNlcyBpbiBteSBtaW5kOiBjYW4gdGhlc2UgRFNBIGRldmljZXMgYWN0dWFsbHkgYmUgaW5zdGFudGlhdGVkIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFNvbWV0aGluZyBsaWtlIFFFTVUgb3IgZXZlbiBzeXprYWxsZXI/IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSB0ZXN0YWJpbGl0eSBvZiB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgRFNBIHN3aXRjaGVzIGFuZCBkZXZpY2VzIGFyZSBhY3R1YWxseSBjcmVhdGVkIGFuZCB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCBwcm92aWRlcyBhIGNvbXBhdGlibGUgaW50ZXJmYWNlLgoKSeKAmW0gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgYGRzYV9sb29wYC4gSXMgdGhhdCBhIHNvZnR3YXJlIG9yIG1vY2sgZHJpdmVyLCBvciBpcyBpdCBzb21ldGhpbmcgbW9yZSB0YW5naWJsZT8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgIGFuZCBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wX2JkaW5mby5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGxvYWRlZCBhbmQgY3JlYXRlZC4gR2V0dGluZyB0aGF0IGFuc3dlcmVkIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRvIGJlc3QgYXBwcm9hY2ggdGhlIGV2YWx1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzYV9sb29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTM9YmNtLXNmMi1vYmpzXHRcdFx0Oj0gYmNtX3NmMi5vIGJjbV9zZjJfY2ZwLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXHQmIzQzOz0gZHNhX2xvb3Aub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX05FVF9EU0FfS1M4OTk1KSBcdCYjNDM7PSBrczg5OTUub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU6c3RydWN0IGRzYV9sb29wX3ZsYW4ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjYtXHR1MTYgbWVtYmVycztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEtXHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1OmVudW0gZHNhX2xvb3BfbWliX2NvdW50ZXJzIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVx0RFNBX0xPT1BfUEhZX1JFQURfT0ssXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzpzdHJ1Y3QgZHNhX2xvb3BfcG9ydCB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDpcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NS1cdHUxNiBwdmlkO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk6c3RydWN0IGRzYV9sb29wX3ByaXYge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXHRzdHJ1Y3QgbWlpX2J1c1x0KmJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVx0dW5zaWduZWQgaW50XHRwb3J0X2Jhc2U7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcdHN0cnVjdCBkc2FfbG9vcF92bGFuIHZsYW5zW1ZMQU5fTl9WSURdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTMtXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcG9ydCBwb3J0c1tEU0FfTUFYX1BPUlRTXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU3OnN0cnVjdCBkc2FfbG9vcF9wZGF0YSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cdC8qIE11c3QgYmUgZmlyc3QsIHN1Y2ggdGhhdCBkc2FfcmVnaXN0ZXJfc3dpdGNoKCkgY2FuIGFjY2VzcyB0aGlzXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo2NzpzdGF0aWMgc3RydWN0IGRzYV9sb29wX21pYl9lbnRyeSBkc2FfbG9vcF9taWJzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy02OC1cdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cdD0geyBcJiMzNDtwaHlfcmVhZF9va1wmIzM0OywgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz03NT1zdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlICpzd2l0Y2hfbWRpb2RldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Nzc6ZW51bSBkc2FfbG9vcF9kZXZsaW5rX3Jlc291cmNlX2lkIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc4LVx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODUtXHR1bnNpZ25lZCBpbnQgaSwgY291bnQgPSAwO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04Ny1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy05Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjk3OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTktXHRzdHJ1Y3QgZGV2bGlua19yZXNvdXJjZV9zaXplX3BhcmFtcyBzaXplX3BhcmFtcztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXHRpbnQgZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cdFx0XHRcdFx0ICAgICAgRFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9WVFUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XHRcdFx0XHRcdCAgICAgIGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCwgcHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEyNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjYtXHRcdFx0XHRcdFx0ICAgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTM0OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM1LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQwOlx0XHRtZW1jcHkocHMtXHUwMDNlcG9ydHNbaV0ubWliLCBkc2FfbG9vcF9taWJzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlx0XHQgICAgICAgc2l6ZW9mKGRzYV9sb29wX21pYnMpKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XHRyZXR1cm4gZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ2LX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0ODpzdGF0aWMgdm9pZCBkc2FfbG9vcF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE1Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE1MzpzdGF0aWMgaW50IGRzYV9sb29wX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2Mi1cdFx0XHRcdCB1MzIgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE2NDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjUtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzQ6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cdFx0XHRcdCAgICAgICB1aW50NjRfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3Ni17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTg0OnN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3JlYWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4NS17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVx1MDAzZWJ1cztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xOTgtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxOTk6c3RhdGljIGludCBkc2FfbG9vcF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cdFx0XHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDEte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjAyOlx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMy1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjE1OnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjctXHRcdFx0XHQgICAgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIzMzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cdFx0XHRcdFx0dTggc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjM5LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjQwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVx0XHRcdFx0XHRib29sIHZsYW5fZmlsdGVyaW5nLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0OS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1MDpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cdGJvb2wgcHZpZCA9IHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1NjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTctXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU4Olx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4NC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Ni1cdGJvb2wgdW50YWdnZWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mjg3Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OC1cdHUxNiBwdmlkID0gcHMtXHUwMDNlcG9ydHNbcG9ydF0ucHZpZDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OS1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyOTA6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOTEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzExOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTItXHRcdFx0XHQgICAgaW50IG5ld19tdHUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzE0Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMyMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNy1cdFx0XHRcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMzMy1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNDpzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGRzYV9sb29wX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IGRzYV9sb29wX2dldF9wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcdC5zZXR1cFx0XHRcdD0gZHNhX2xvb3Bfc2V0dXAsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzc6XHQudGVhcmRvd25cdFx0PSBkc2FfbG9vcF90ZWFyZG93bixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcdC5nZXRfc3RyaW5nc1x0XHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM5Olx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQwOlx0LmdldF9zc2V0X2NvdW50XHRcdD0gZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDE6XHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQyOlx0LnBoeV9yZWFkXHRcdD0gZHNhX2xvb3BfcGh5X3JlYWQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XHQucGh5X3dyaXRlXHRcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ0Olx0LnBvcnRfYnJpZGdlX2pvaW5cdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NTpcdC5wb3J0X2JyaWRnZV9sZWF2ZVx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NjpcdC5wb3J0X3N0cF9zdGF0ZV9zZXRcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ3Olx0LnBvcnRfdmxhbl9maWx0ZXJpbmdcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0ODpcdC5wb3J0X3ZsYW5fYWRkXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2FkZCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0OTpcdC5wb3J0X3ZsYW5fZGVsXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2RlbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcdC5wb3J0X2NoYW5nZV9tdHVcdD0gZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlx0LnBvcnRfbWF4X210dVx0XHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MjpcdC5waHlsaW5rX2dldF9jYXBzXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTMtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM1NC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTYte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU3Olx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTg6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTktXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgyLVx0ZHMtXHUwMDNlZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODQtXHRkcy1cdTAwM2Vwcml2ID0gcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OS1cdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MDEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDExOnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNC1cdC5tZGlvZHJ2LmRyaXZlclx0PSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDI2LVx0fSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyNzpcdC5wcm9iZVx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjg6XHQucmVtb3ZlXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjk6XHQuc2h1dGRvd24gPSBkc2FfbG9vcF9kcnZfc2h1dGRvd24sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzMS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzMjpzdGF0aWMgaW50IGRzYV9sb29wX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNC17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzU6XHRyZXR1cm4gZHJ2ID09IFx1MDAyNmRzYV9sb29wX2Rydi5tZGlvZHJ2LmRyaXZlcjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNi19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mzg6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00Mzkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0NS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0NjpzdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDg6XHRzdGF0aWMgc3RydWN0IGRzYV9sb29wX3BkYXRhIGRzYV9sb29wX3BkYXRhID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVx0XHQuY2QgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDcwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcxOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlYnVzX21hdGNoID0gZHNhX2xvb3BfYnVzX21hdGNoO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcyOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBcdTAwMjZkc2FfbG9vcF9wZGF0YTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDgzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODc6XHRyZXQgPSBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk0Olx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcdFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXHRcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAyLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwMzptb2R1bGVfaW5pdChkc2FfbG9vcF9pbml0KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNTpzdGF0aWMgdm9pZCBfX2V4aXQgZHNhX2xvb3BfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcdG1kaW9fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA5LVx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MTEtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc0MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYGRzYV9sb29wYCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkc2FfbG9vcGAuIFJpZ2h0LCBpdCYjMzk7cyBhIHNvZnR3YXJlIG1vY2sgZm9yIGEgRFNBIHN3aXRjaCBkcml2ZXIuIFRoZSBpbXBvcnRhbnQgYml0IGlzIHRoYXQgaXQgc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBjb25uZWN0aW9ucyB0byBhIGZpeGVkIFBIWSwgTURJTywgYW5kLCBlc3NlbnRpYWxseSwgbG9vcGJhY2sgdGVzdGluZy4gR29vZCB0byBrbm93LiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgc291cmNlIGZpbGUgSSBleHBlY3QgdG8gYmUgaW52b2x2ZWQgaW4gaXRzIGNvcmUgZnVuY3Rpb25hbGl0eTogYGRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcF9iZGluZm8uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBoYW5kbGVzIGl0cyBidXMgZGF0YSBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YmNtX3NmMi5jJiMzNDssCiAgICAmIzM0O2JjbV9zZjIuaCYjMzQ7LAogICAgJiMzNDtiY21fc2YyX2NmcC5jJiMzNDssCiAgICAmIzM0O2JjbV9zZjJfcmVncy5oJiMzNDssCiAgICAmIzM0O2RzYV9sb29wLmMmIzM0OywKICAgICYjMzQ7a3M4OTk1LmMmIzM0OywKICAgICYjMzQ7bGFuOTMwMy1jb3JlLmMmIzM0OywKICAgICYjMzQ7bGFuOTMwMy5oJiMzNDssCiAgICAmIzM0O2xhbjkzMDNfaTJjLmMmIzM0OywKICAgICYjMzQ7bGFuOTMwM19tZGlvLmMmIzM0OywKICAgICYjMzQ7bXQ3NTMwLW1kaW8uYyYjMzQ7LAogICAgJiMzNDttdDc1MzAtbW1pby5jJiMzNDssCiAgICAmIzM0O210NzUzMC5jJiMzNDssCiAgICAmIzM0O210NzUzMC5oJiMzNDssCiAgICAmIzM0O210NzYyOC5jJiMzNDssCiAgICAmIzM0O212ODhlNjA2MC5jJiMzNDssCiAgICAmIzM0O212ODhlNjA2MC5oJiMzNDssCiAgICAmIzM0O3J6bjFfYTVwc3cuYyYjMzQ7LAogICAgJiMzNDtyem4xX2E1cHN3LmgmIzM0OywKICAgICYjMzQ7dml0ZXNzZS12c2M3M3h4LWNvcmUuYyYjMzQ7LAogICAgJiMzNDt2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0uYyYjMzQ7LAogICAgJiMzNDt2aXRlc3NlLXZzYzczeHgtc3BpLmMmIzM0OywKICAgICYjMzQ7dml0ZXNzZS12c2M3M3h4LmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7YjUzJiMzNDssCiAgICAmIzM0O2hpcnNjaG1hbm4mIzM0OywKICAgICYjMzQ7bGFudGlxJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcCYjMzQ7LAogICAgJiMzNDttb3RvcmNvbW0mIzM0OywKICAgICYjMzQ7bXY4OGU2eHh4JiMzNDssCiAgICAmIzM0O214bDg2Mnh4JiMzNDssCiAgICAmIzM0O25ldGMmIzM0OywKICAgICYjMzQ7b2NlbG90JiMzNDssCiAgICAmIzM0O3FjYSYjMzQ7LAogICAgJiMzNDtyZWFsdGVrJiMzNDssCiAgICAmIzM0O3NqYTExMDUmIzM0OywKICAgICYjMzQ7eHJzNzAweCYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzUyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHByb21wdCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQgd291bGQgdGhpbmsgYWJvdXQgaXQ6CgoqKkV4YW1pbmluZyBEU0EgTG9vcCBDcmVhdGlvbiBhbmQgQ29uZHVpdCBCaW5kaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEU0EgbG9vcCBpcyBiZWluZyBjcmVhdGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0JiMzOTtzIGFjdHVhbGx5IHRpZWQgaW50byBhIGNvbmR1aXQuIFRoZSBjb3JlIGxvZ2ljIGlzIGxpa2VseSB3aXRoaW4gYGRzYV9sb29wLmNgLCBhbmQgdGhlIGtleSBmdW5jdGlvbiB0byBkaXNzZWN0IGlzIGBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXZgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IGdvb2QgaGludCDigJMgaXQgc3VnZ2VzdHMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgbG9vcCwgdGhlIHN3aXRjaCwgYW5kIHRoZSBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBpbnRlcmZhY2UsIHdoaWNoIGlzIHZlcnkgcmVsZXZhbnQgZm9yIGludGVyYWN0aW5nIHdpdGggUEhZcy4gTXkgZ3Vlc3MgaXMgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyB3aGVyZSB0aGUgbG9vcCBpcyBpbml0aWFsaXplZCwgYW5kIHRoZW4gc29tZWhvdywgYSBjb25kdWl0IChvciBpdHMgcmVwcmVzZW50YXRpb24pIGdldHMgYXNzb2NpYXRlZCB3aXRoIGl0LCBwcm9iYWJseSB1c2luZyBhIHBvaW50ZXIgb3Igc29tZSBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXMgd2VsbCwgYXMgdGhvc2Ugd291bGQgY29udGFpbiBhbGwgdGhlIHJlbGV2YW50IGRhdGEuIExldCYjMzk7cyBzdGFydCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDU6XHRcbiA0NDY6XHRzdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbiA0NDc6XHR7XG4gNDQ4Olx0XHRzdGF0aWMgc3RydWN0IGRzYV9sb29wX3BkYXRhIGRzYV9sb29wX3BkYXRhID0ge1xuIDQ0OTpcdFx0XHQuY2QgPSB7XG4gNDUwOlx0XHRcdFx0LnBvcnRfbmFtZXNbMF0gPSBcJiMzNDtsYW4xXCYjMzQ7LFxuIDQ1MTpcdFx0XHRcdC5wb3J0X25hbWVzWzFdID0gXCYjMzQ7bGFuMlwmIzM0OyxcbiA0NTI6XHRcdFx0XHQucG9ydF9uYW1lc1syXSA9IFwmIzM0O2xhbjNcJiMzNDssXG4gNDUzOlx0XHRcdFx0LnBvcnRfbmFtZXNbM10gPSBcJiMzNDtsYW40XCYjMzQ7LFxuIDQ1NDpcdFx0XHRcdC5wb3J0X25hbWVzW0RTQV9MT09QX0NQVV9QT1JUXSA9IFwmIzM0O2NwdVwmIzM0OyxcbiA0NTU6XHRcdFx0fSxcbiA0NTY6XHRcdFx0Lm5hbWUgPSBcJiMzNDtEU0EgbW9ja3VwIGRyaXZlclwmIzM0OyxcbiA0NTc6XHRcdFx0LmVuYWJsZWRfcG9ydHMgPSAweDFmLFxuIDQ1ODpcdFx0XHQubmV0ZGV2ID0gXCYjMzQ7ZXRoMFwmIzM0OyxcbiA0NTk6XHRcdH07XG4gNDYwOlx0XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuIDQ2MTpcdFx0aW50IHJldCA9IC1FTk9ERVY7XG4gNDYyOlx0XG4gNDYzOlx0XHRidXMgPSBtZGlvX2ZpbmRfYnVzKFwmIzM0O2ZpeGVkLTBcJiMzNDspO1xuIDQ2NDpcdFx0aWYgKFdBUk5fT04oIWJ1cykpXG4gNDY1Olx0XHRcdHJldHVybiByZXQ7XG4gNDY2Olx0XG4gNDY3Olx0XHRzd2l0Y2hfbWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIDMxKTtcbiA0Njg6XHRcdGlmIChJU19FUlIoc3dpdGNoX21kaW9kZXYpKVxuIDQ2OTpcdFx0XHRnb3RvIG91dDtcbiA0NzA6XHRcbiA0NzE6XHRcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcbiA0NzI6XHRcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XG4gNDczOlx0XG4gNDc0Olx0XHRyZXQgPSBtZGlvX2RldmljZV9yZWdpc3Rlcihzd2l0Y2hfbWRpb2Rldik7XG4gNDc1Olx0XHRpZiAocmV0KVxuIDQ3NjpcdFx0XHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcbiA0Nzc6XHRvdXQ6XG4gNDc4Olx0XHRwdXRfZGV2aWNlKFx1MDAyNmJ1cy1cdTAwM2VkZXYpO1xuIDQ3OTpcdFx0cmV0dXJuIHJldDtcbiA0ODA6XHR9XG4gNDgxOlx0XG4gNDgyOlx0c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuIDQ4MzpcdHtcbiA0ODQ6XHRcdHVuc2lnbmVkIGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI3OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEU0EgRnJhbWV3b3JrIGFuZCBTeXprYWxsZXImIzM5O3MgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gYE5FVF9EU0FgIGxvb2tzIGxpa2UgdGhlIGNlbnRyYWwgRFNBIGZyYW1ld29yaywgbGl2aW5nIGluIGBuZXQvZHNhL2AsIHNwZWNpZmljYWxseSBpbiBgdXNlci5jYCwgYGNvbmR1aXQuY2AsIGFuZCBgZHNhLmNgLCBhcyB5b3Ugd291bGQgZXhwZWN0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBEU0EuIEFyZSB0aGVyZSBhbnkgc3lzIGRlc2NyaXB0aW9ucyBpbiBzeXprYWxsZXIgcmVsYXRlZCB0byBpdCwgb3IgaXMgaXQgdHJ5aW5nIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIG5ldGxpbmsgZmxvd3RhYmxlIG9mZmxvYWRzIG9yIG5ldGRldmljZXMgaW4gYSB3YXkgdGhhdCByZWxhdGVzPwoKSSBrbm93IHN5emthbGxlciBoYXMgdGhlIGNhcGFiaWxpdHkgdG8gY3JlYXRlIGFuZCBjb25maWd1cmUgYWxsIHNvcnRzIG9mIG5ldHdvcmsgZWxlbWVudHM6IGRldmljZXMsIGJyaWRnZXMsIHZldGggcGFpcnMsIG5ldGZpbHRlciB0YWJsZXMvZmxvd3RhYmxlcywgdGMgZmlsdGVycy9ibG9ja3MsIGFuZCBkZXZsaW5rIG9iamVjdHMuIEl0JiMzOTtzIGV4dGVuc2l2ZS4gQW5kIHNpbmNlIGBuZXQvZHNhL2Agc2l0cyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHNwYWNlIChgbmV0L2ApLCBpdCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBjaGVjay4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgcGF0Y2ggZGV0YWlscyBwcm92aWRlZC4KClRoZSBkaWZmIGludHJvZHVjZXMgYSBgZnRfb25fc3dpdGNoYCBib29sZWFuIHRvIHRoZSBgZHNhX3BvcnRgIHN0cnVjdC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXQgaW5kaWNhdGVzIGEgZGVjaXNpb24gcG9pbnQ6IHdoZXRoZXIgZmxvd3RhYmxlIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggYSB1c2VyIHBvcnQgYXJlIGhhbmRsZWQgYnkgdGhlIHN3aXRjaCBkaXJlY3RseSBvciB0aHJvdWdoIHRoZSBjb25kdWl0LiBUaGUgY29tbWVudHMgc3BlY2lmeSB0aGF0IHRoaXMgaXMgZGVjaWRlZCBhdCBiaW5kIHRpbWUgYW5kIGRvZXNuJiMzOTt0IHVzZSB0aGUgdXN1YWwgYml0IGZpZWxkcywgc28gaXQgbGlrZWx5IG5lZWRzIGEgc3BlY2lhbCBoYW5kbGluZy4KClRoZSBrZXkgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBmbG93dGFibGUgYmxvY2sgaXMgc2V0IHVwIChgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgKS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIG5vdyB0YWtlcyBhIGBkc2FfcG9ydGAgc3RydWN0dXJlIGFuZCBgZmxvd19ibG9ja19vZmZsb2FkYCBhcyBhcmd1bWVudHMuIFRoZSBpbXBvcnRhbnQgbG9naWMgc2VlbXMgdG8gYmUgYXJvdW5kIHRoaXMgbmV3IGJvb2xlYW4gZmxhZyBgZHAtJmd0O2Z0X29uX3N3aXRjaGAuCgpXaGVuIGJpbmRpbmcsIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgc3dpdGNoJiMzOTtzIG9wZXJhdGlvbnMgc3VwcG9ydCBwb3J0IHNldHVwIGZvciB0cmFmZmljIGNvbnRyb2wuIElmIHNvLCBgZnRfb25fc3dpdGNoYCBpcyBzZXQgYmFzZWQgb24gdGhpcy4gIElmIG5vdCwgaXQgZmFsbHMgYmFjayB0byB0aGUgY29uZHVpdCYjMzk7cyBgbmRvX3NldHVwX3RjYC4gVGhlIHVuYmluZCBhY3Rpb24gaXMgZGlyZWN0ZWQgdG8gdGhlIHBhcnR5IHdoaWNoIHRvb2sgdGhlIGJpbmQuCgpUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHN3aXRjaCBoYXMgaXRzIG93biB3YXkgb2YgaGFuZGxpbmcgZmxvd3RhYmxlcywgdGhlbiBpdCB3aWxsOyBvdGhlcndpc2UsIGl0IGlzIHBhc3NlZCBvbiB0byB0aGUgY29uZHVpdC4gVGhpcyBtYWtlcyBzZW5zZS4KCkxhc3RseSwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYE5FVF9EU0FgIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfRFNBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RzYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvS2NvbmZpZy0yLVxubmV0L2RzYS9LY29uZmlnOjM6bWVudWNvbmZpZyBORVRfRFNBXG5uZXQvZHNhL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0Rpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTYtXG5uZXQvZHNhL0tjb25maWc6MTc6aWYgTkVUX0RTQVxubmV0L2RzYS9LY29uZmlnLTE4LVxuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMC1cbm5ldC9kc2EvS2NvbmZpZzoyMTpjb25maWcgTkVUX0RTQV9UQUdfTk9ORVxubmV0L2RzYS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7Tm8tb3AgdGFnIGRyaXZlclwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yNi1cbm5ldC9kc2EvS2NvbmZpZzoyNzpjb25maWcgTkVUX0RTQV9UQUdfQVI5MzMxXG5uZXQvZHNhL0tjb25maWctMjgtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBBdGhlcm9zIEFSOTMzMSBTb0Mgd2l0aCBidWlsdC1pbiBzd2l0Y2hcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMzItXG5uZXQvZHNhL0tjb25maWc6MzM6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXG5uZXQvZHNhL0tjb25maWctMzQtXHR0cmlzdGF0ZVxuLS1cbm5ldC9kc2EvS2NvbmZpZy0zNi1cbm5ldC9kc2EvS2NvbmZpZzozNzpjb25maWcgTkVUX0RTQV9UQUdfQlJDTVxubmV0L2RzYS9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQnJvYWRjb20gc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1wmIzM0O1xubmV0L2RzYS9LY29uZmlnOjM5Olx0c2VsZWN0IE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXG5uZXQvZHNhL0tjb25maWctNDAtXHRoZWxwXG4tLVxubmV0L2RzYS9LY29uZmlnLTQzLVxubmV0L2RzYS9LY29uZmlnOjQ0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0xFR0FDWVxubmV0L2RzYS9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQkNNNjN4eCBsZWdhY3kgc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1wmIzM0O1xubmV0L2RzYS9LY29uZmlnOjQ2Olx0c2VsZWN0IE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXG5uZXQvZHNhL0tjb25maWctNDctXHRoZWxwXG4tLVxubmV0L2RzYS9LY29uZmlnLTUzLVxubmV0L2RzYS9LY29uZmlnOjU0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0xFR0FDWV9GQ1Ncbm5ldC9kc2EvS2NvbmZpZy01NS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEJDTTUzeHggbGVnYWN5IHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcJiMzNDtcbm5ldC9kc2EvS2NvbmZpZzo1NjpcdHNlbGVjdCBORVRfRFNBX1RBR19CUkNNX0NPTU1PTlxubmV0L2RzYS9LY29uZmlnLTU3LVx0aGVscFxuLS1cbm5ldC9kc2EvS2NvbmZpZy02My1cbm5ldC9kc2EvS2NvbmZpZzo2NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9QUkVQRU5EXG5uZXQvZHNhL0tjb25maWctNjUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBCcm9hZGNvbSBzd2l0Y2hlcyB1c2luZyBwcmVwZW5kZWQgaGVhZGVyc1wmIzM0O1xubmV0L2RzYS9LY29uZmlnOjY2Olx0c2VsZWN0IE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXG5uZXQvZHNhL0tjb25maWctNjctXHRoZWxwXG4tLVxubmV0L2RzYS9LY29uZmlnLTcxLVxubmV0L2RzYS9LY29uZmlnOjcyOmNvbmZpZyBORVRfRFNBX1RBR19IRUxMQ1JFRUtcbm5ldC9kc2EvS2NvbmZpZy03My1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEhpcnNjaG1hbm4gSGVsbGNyZWVrIFRTTiBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy03Ny1cbm5ldC9kc2EvS2NvbmZpZzo3ODpjb25maWcgTkVUX0RTQV9UQUdfR1NXSVBcbm5ldC9kc2EvS2NvbmZpZy03OS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIExhbnRpcSAvIEludGVsIEdTV0lQIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTgzLVxubmV0L2RzYS9LY29uZmlnOjg0OmNvbmZpZyBORVRfRFNBX1RBR19EU0FfQ09NTU9OXG5uZXQvZHNhL0tjb25maWctODUtXHR0cmlzdGF0ZVxubmV0L2RzYS9LY29uZmlnLTg2LVxubmV0L2RzYS9LY29uZmlnOjg3OmNvbmZpZyBORVRfRFNBX1RBR19EU0Fcbm5ldC9kc2EvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1hcnZlbGwgc3dpdGNoZXMgdXNpbmcgRFNBIGhlYWRlcnNcJiMzNDtcbm5ldC9kc2EvS2NvbmZpZzo4OTpcdHNlbGVjdCBORVRfRFNBX1RBR19EU0FfQ09NTU9OXG5uZXQvZHNhL0tjb25maWctOTAtXHRoZWxwXG4tLVxubmV0L2RzYS9LY29uZmlnLTkzLVxubmV0L2RzYS9LY29uZmlnOjk0OmNvbmZpZyBORVRfRFNBX1RBR19FRFNBXG5uZXQvZHNhL0tjb25maWctOTUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIEV0aGVyVHlwZSBEU0EgaGVhZGVyc1wmIzM0O1xubmV0L2RzYS9LY29uZmlnOjk2Olx0c2VsZWN0IE5FVF9EU0FfVEFHX0RTQV9DT01NT05cbm5ldC9kc2EvS2NvbmZpZy05Ny1cdGhlbHBcbi0tXG5uZXQvZHNhL0tjb25maWctMTAwLVxubmV0L2RzYS9LY29uZmlnOjEwMTpjb25maWcgTkVUX0RTQV9UQUdfTVQ3NjI4XG5uZXQvZHNhL0tjb25maWctMTAyLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgdGhlIE1UNzYyOCBlbWJlZGRlZCBzd2l0Y2hcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTA2LVxubmV0L2RzYS9LY29uZmlnOjEwNzpjb25maWcgTkVUX0RTQV9UQUdfTVRLXG5uZXQvZHNhL0tjb25maWctMTA4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWVkaWF0ZWsgc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTEyLVxubmV0L2RzYS9LY29uZmlnOjExMzpjb25maWcgTkVUX0RTQV9UQUdfTVhMXzg2MlhYXG5uZXQvZHNhL0tjb25maWctMTE0LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTExOS1cbm5ldC9kc2EvS2NvbmZpZzoxMjA6Y29uZmlnIE5FVF9EU0FfVEFHX01YTF9HU1cxWFhcbm5ldC9kc2EvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgR1NXMXh4IHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTEyNy1cbm5ldC9kc2EvS2NvbmZpZzoxMjg6Y29uZmlnIE5FVF9EU0FfVEFHX0tTWlxubmV0L2RzYS9LY29uZmlnLTEyOS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1pY3JvY2hpcCA4Nzk1LzkzN3gvOTQ3Ny85ODkzIGZhbWlsaWVzIG9mIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTEzMy1cbm5ldC9kc2EvS2NvbmZpZzoxMzQ6Y29uZmlnIE5FVF9EU0FfVEFHX05FVENcbm5ldC9kc2EvS2NvbmZpZy0xMzUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBOWFAgTkVUQyBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xNDMtXG5uZXQvZHNhL0tjb25maWc6MTQ0OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1Rcbm5ldC9kc2EvS2NvbmZpZy0xNDUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBOUEkgcG9ydFwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xNTQtXG5uZXQvZHNhL0tjb25maWc6MTU1OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1RfODAyMVFcbm5ldC9kc2EvS2NvbmZpZy0xNTYtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBWTEFOXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE2NC1cbm5ldC9kc2EvS2NvbmZpZzoxNjU6Y29uZmlnIE5FVF9EU0FfVEFHX1FDQVxubmV0L2RzYS9LY29uZmlnLTE2Ni1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFF1YWxjb21tIEF0aGVyb3MgUUNBOEsgc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTcwLVxubmV0L2RzYS9LY29uZmlnOjE3MTpjb25maWcgTkVUX0RTQV9UQUdfUlRMNF9BXG5uZXQvZHNhL0tjb25maWctMTcyLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUmVhbHRlayA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE3Ny1cbm5ldC9kc2EvS2NvbmZpZzoxNzg6Y29uZmlnIE5FVF9EU0FfVEFHX1JUTDhfNFxubmV0L2RzYS9LY29uZmlnLTE3OS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFJlYWx0ZWsgOCBieXRlIHByb3RvY29sIDQgdGFnc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xODMtXG5uZXQvZHNhL0tjb25maWc6MTg0OmNvbmZpZyBORVRfRFNBX1RBR19SWk4xX0E1UFNXXG5uZXQvZHNhL0tjb25maWctMTg1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUmVuZXNhcyBSWi9OMSBBNVBTVyBzd2l0Y2hcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTkwLVxubmV0L2RzYS9LY29uZmlnOjE5MTpjb25maWcgTkVUX0RTQV9UQUdfTEFOOTMwM1xubmV0L2RzYS9LY29uZmlnLTE5Mi1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFNNU0MvTWljcm9jaGlwIExBTjkzMDMgZmFtaWx5IG9mIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE5Ni1cbm5ldC9kc2EvS2NvbmZpZzoxOTc6Y29uZmlnIE5FVF9EU0FfVEFHX1NKQTExMDVcbm5ldC9kc2EvS2NvbmZpZy0xOTgtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBOWFAgU0pBMTEwNSBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMDUtXG5uZXQvZHNhL0tjb25maWc6MjA2OmNvbmZpZyBORVRfRFNBX1RBR19UUkFJTEVSXG5uZXQvZHNhL0tjb25maWctMjA3LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3Igc3dpdGNoZXMgdXNpbmcgYSB0cmFpbGVyIHRhZ1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMTEtXG5uZXQvZHNhL0tjb25maWc6MjEyOmNvbmZpZyBORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRXG5uZXQvZHNhL0tjb25maWctMjEzLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWljcm9jaGlwL1ZpdGVzc2UgVlNDNzN4eCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMjE3LVxubmV0L2RzYS9LY29uZmlnOjIxODpjb25maWcgTkVUX0RTQV9UQUdfWFJTNzAwWFxubmV0L2RzYS9LY29uZmlnLTIxOS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFhSUzcwMHggc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMjIzLVxubmV0L2RzYS9LY29uZmlnOjIyNDpjb25maWcgTkVUX0RTQV9UQUdfWVQ5MjFYXG5uZXQvZHNhL0tjb25maWctMjI1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI3MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgbmV0L2RzYS9NYWtlZmlsZWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG5ldC9kc2EvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGJ1aWxkaW5nIGFsbCB0aGluZ3MgRFNBIOKAkyB0aGUgd2hvbGUgaW5mcmFzdHJ1Y3R1cmUsIGZyb20gdGhlIGJhc2ljIGRldmljZSBkcml2ZXJzIHRvIHRoZSBzd2l0Y2ggbWFuYWdlbWVudCB0b29scy4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIGEgbmV3IHRhcmdldCBmb3IgYSBjdXN0b20gc3dpdGNoIGNvbmZpZ3VyYXRpb24gSSYjMzk7bSB3b3JraW5nIG9uLCBvciBwZXJoYXBzIEkgc3VzcGVjdCBhIGJ1aWxkIGRlcGVuZGVuY3kgaXNzdWUgcmVsYXRlZCB0byBhIHJlY2VudCBrZXJuZWwgdXBkYXRlLiBPciBtYXliZSBJJiMzOTttIGNoYXNpbmcgZG93biBhIGxpbmdlcmluZyBsaW5rZXIgZXJyb3IgdGhhdCYjMzk7cyBiZWVuIGJ1Z2dpbmcgbWUgZm9yIGRheXMuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBkZWZpbmVkIHRoZXJlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBzZWVpbmcgaG93IHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBpbnRyaWNhY2llcyBvZiBLYnVpbGQgdmFyaWFibGVzIGFuZCBob3cgdGhleSB0cmFuc2xhdGUgdG8gb2JqZWN0IGZpbGUgaW5jbHVzaW9uLCBhbmQgaG93IGl0IGFsbCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIHBhcnNlIHRocm91Z2ggdGhpcyBjYXJlZnVsbHksIHRoYXQgTWFrZWZpbGUgaXMgYWx3YXlzIGZ1bGwgb2Ygc3VycHJpc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL01ha2VmaWxlPTQ9aWZkZWYgQ09ORklHX05FVF9EU0Fcbm5ldC9kc2EvTWFrZWZpbGU6NTpvYmoteSA6PSBzdHVicy5vXG5uZXQvZHNhL01ha2VmaWxlLTYtZW5kaWZcbi0tXG5uZXQvZHNhL01ha2VmaWxlLTgtIyB0aGUgY29yZVxubmV0L2RzYS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORVRfRFNBKSAmIzQzOz0gZHNhX2NvcmUub1xubmV0L2RzYS9NYWtlZmlsZS0xMC1kc2FfY29yZS15ICYjNDM7PSBcXFxuLS1cbm5ldC9kc2EvTWFrZWZpbGUtMjItIyB0YWdnaW5nIGZvcm1hdHNcbm5ldC9kc2EvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0FSOTMzMSkgJiM0Mzs9IHRhZ19hcjkzMzEub1xubmV0L2RzYS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfQlJDTV9DT01NT04pICYjNDM7PSB0YWdfYnJjbS5vXG5uZXQvZHNhL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19EU0FfQ09NTU9OKSAmIzQzOz0gdGFnX2RzYS5vXG5uZXQvZHNhL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19HU1dJUCkgJiM0Mzs9IHRhZ19nc3dpcC5vXG5uZXQvZHNhL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19IRUxMQ1JFRUspICYjNDM7PSB0YWdfaGVsbGNyZWVrLm9cbm5ldC9kc2EvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0tTWikgJiM0Mzs9IHRhZ19rc3oub1xubmV0L2RzYS9NYWtlZmlsZToyOTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTEFOOTMwMykgJiM0Mzs9IHRhZ19sYW45MzAzLm9cbm5ldC9kc2EvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01UNzYyOCkgJiM0Mzs9IHRhZ19tdDc2Mjgub1xubmV0L2RzYS9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVRLKSAmIzQzOz0gdGFnX210ay5vXG5uZXQvZHNhL01ha2VmaWxlOjMyOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19NWExfODYyWFgpICYjNDM7PSB0YWdfbXhsODYyeHgub1xubmV0L2RzYS9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVhMX0dTVzFYWCkgJiM0Mzs9IHRhZ19teGwtZ3N3MXh4Lm9cbm5ldC9kc2EvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX05FVEMpICYjNDM7PSB0YWdfbmV0Yy5vXG5uZXQvZHNhL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19OT05FKSAmIzQzOz0gdGFnX25vbmUub1xubmV0L2RzYS9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfT0NFTE9UKSAmIzQzOz0gdGFnX29jZWxvdC5vXG5uZXQvZHNhL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19PQ0VMT1RfODAyMVEpICYjNDM7PSB0YWdfb2NlbG90XzgwMjFxLm9cbm5ldC9kc2EvTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1FDQSkgJiM0Mzs9IHRhZ19xY2Eub1xubmV0L2RzYS9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfUlRMNF9BKSAmIzQzOz0gdGFnX3J0bDRfYS5vXG5uZXQvZHNhL01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19SVEw4XzQpICYjNDM7PSB0YWdfcnRsOF80Lm9cbm5ldC9kc2EvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1JaTjFfQTVQU1cpICYjNDM7PSB0YWdfcnpuMV9hNXBzdy5vXG5uZXQvZHNhL01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19TSkExMTA1KSAmIzQzOz0gdGFnX3NqYTExMDUub1xubmV0L2RzYS9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfVFJBSUxFUikgJiM0Mzs9IHRhZ190cmFpbGVyLm9cbm5ldC9kc2EvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1ZTQzczWFhfODAyMVEpICYjNDM7PSB0YWdfdnNjNzN4eF84MDIxcS5vXG5uZXQvZHNhL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19YUlM3MDBYKSAmIzQzOz0gdGFnX3hyczcwMHgub1xubmV0L2RzYS9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWVQ5MjFYKSAmIzQzOz0gdGFnX3l0OTIxeC5vXG5uZXQvZHNhL01ha2VmaWxlLTQ3LVxuLS1cbm5ldC9kc2EvdXNlci5jPTczOD1zdGF0aWMgaW50IGRzYV91c2VyX3BvcnRfb2JqX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpjdHgsXG4tLVxubmV0L2RzYS91c2VyLmMtNzQ3LVxubmV0L2RzYS91c2VyLmM6NzQ4Olx0c3dpdGNoIChvYmotXHUwMDNlaWQpIHtcbm5ldC9kc2EvdXNlci5jLTc0OS1cdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX01EQjpcbm5ldC9kc2EvdXNlci5jOjc1MDpcdFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChkcCwgb2JqLVx1MDAzZW9yaWdfZGV2KSlcbm5ldC9kc2EvdXNlci5jLTc1MS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2RzYS91c2VyLmMtNzU1LVx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX0hPU1RfTURCOlxubmV0L2RzYS91c2VyLmM6NzU2Olx0XHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cdTAwM2VvcmlnX2RldikpXG5uZXQvZHNhL3VzZXIuYy03NTctXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9kc2EvdXNlci5jLTc2MS1cdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU46XG5uZXQvZHNhL3VzZXIuYzo3NjI6XHRcdGlmIChkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChkcCwgb2JqLVx1MDAzZW9yaWdfZGV2KSlcbm5ldC9kc2EvdXNlci5jLTc2My1cdFx0XHRlcnIgPSBkc2FfdXNlcl92bGFuX2FkZChkZXYsIG9iaiwgZXh0YWNrKTtcbi0tXG5uZXQvZHNhL3VzZXIuYy03NjctXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfTVJQOlxubmV0L2RzYS91c2VyLmM6NzY4Olx0XHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cdTAwM2VvcmlnX2RldikpXG5uZXQvZHNhL3VzZXIuYy03NjktXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9kc2EvdXNlci5jLTc3My1cdGNhc2UgU1dJVENIREVWX09CSl9JRF9SSU5HX1JPTEVfTVJQOlxubmV0L2RzYS91c2VyLmM6Nzc0Olx0XHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cdTAwM2VvcmlnX2RldikpXG5uZXQvZHNhL3VzZXIuYy03NzUtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9kc2EvdXNlci5jPTgyMD1zdGF0aWMgaW50IGRzYV91c2VyX3BvcnRfb2JqX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpjdHgsXG4tLVxubmV0L2RzYS91c2VyLmMtODI4LVxubmV0L2RzYS91c2VyLmM6ODI5Olx0c3dpdGNoIChvYmotXHUwMDNlaWQpIHtcbm5ldC9kc2EvdXNlci5jLTgzMC1cdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX01EQjpcbm5ldC9kc2EvdXNlci5jOjgzMTpcdFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChkcCwgb2JqLVx1MDAzZW9yaWdfZGV2KSlcbm5ldC9kc2EvdXNlci5jLTgzMi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2RzYS91c2VyLmMtODM2LVx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX0hPU1RfTURCOlxubmV0L2RzYS91c2VyLmM6ODM3Olx0XHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cdTAwM2VvcmlnX2RldikpXG5uZXQvZHNhL3VzZXIuYy04MzgtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9kc2EvdXNlci5jLTg0Mi1cdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU46XG5uZXQvZHNhL3VzZXIuYzo4NDM6XHRcdGlmIChkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChkcCwgb2JqLVx1MDAzZW9yaWdfZGV2KSlcbm5ldC9kc2EvdXNlci5jLTg0NC1cdFx0XHRlcnIgPSBkc2FfdXNlcl92bGFuX2RlbChkZXYsIG9iaik7XG4tLVxubmV0L2RzYS91c2VyLmMtODQ4LVx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX01SUDpcbm5ldC9kc2EvdXNlci5jOjg0OTpcdFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfZGV2KGRwLCBvYmotXHUwMDNlb3JpZ19kZXYpKVxubmV0L2RzYS91c2VyLmMtODUwLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvZHNhL3VzZXIuYy04NTQtXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfUklOR19ST0xFX01SUDpcbm5ldC9kc2EvdXNlci5jOjg1NTpcdFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfZGV2KGRwLCBvYmotXHUwMDNlb3JpZ19kZXYpKVxubmV0L2RzYS91c2VyLmMtODU2LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2MzIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEU0EgVXNlciBOZXRkZXYgU2V0dXAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgbmV0L2RzYS91c2VyLmNgIGdldHMgY29tcGlsZWQgaW50byBgZHNhX2NvcmUub2AgYXMgbG9uZyBhcyBgQ09ORklHX05FVF9EU0FgIGlzIGZsaXBwZWQgb24uIFRoYXQgbWVhbnMgdGhlIERTQSBjb3JlIGZ1bmN0aW9uYWxpdGllcyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBidWlsZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgbmV0ZGV2IGlzIHNldCB1cCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgaW4gYG5ldC9kc2EvdXNlci5jYC4KCkkgc2VlIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AgYW5kIGBkc2FfdXNlcl9zZXR1cF90Y2AuIEFscmlnaHQsIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AgaXMgc3RhdGljOyBpbnRlcm5hbCB0byB0aGF0IGZpbGUuIEFuZCBgZHNhX3VzZXJfc2V0dXBfdGNgIGlzIGFsc28gc3RhdGljLCBidXQgdGhhdCBmdW5jdGlvbiBpcyBhc3NpZ25lZCB0byBgZHNhX3VzZXJfbmV0ZGV2X29wcy5uZG9fc2V0dXBfdGNgLiBTbywgd2hlbiB0aGUgYG5kb19zZXR1cF90Y2AgbmV0ZGV2IG9wZXJhdGlvbiBpcyBjYWxsZWQgb24gYSBEU0EgdXNlciBuZXRkZXYsIGBkc2FfdXNlcl9zZXR1cF90Y2AgZ2V0cyBleGVjdXRlZC4gR290IGl0LiBBbmQgd2l0aGluIHRoYXQsIGBkc2FfdXNlcl9zZXR1cF90Y2AgY2FsbHMgYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYC4KCk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBzZWUgd2hhdCBzd2l0Y2ggZHJpdmVycyBhcmUgdXNpbmcgdGhlIGBwb3J0X3NldHVwX3RjYCBmdW5jdGlvbi4gSSB3aWxsIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5wb3J0X3NldHVwX3RjXFxzKj0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM9MTkwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGhlbGxjcmVla19kc19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmMtMTkyMC1cdC5wb3J0X3J4dHN0YW1wXHQgICAgICAgPSBoZWxsY3JlZWtfcG9ydF9yeHRzdGFtcCxcbmRyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL2hlbGxjcmVlay5jOjE5MjE6XHQucG9ydF9zZXR1cF90Y1x0ICAgICAgID0gaGVsbGNyZWVrX3BvcnRfc2V0dXBfdGMsXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYy0xOTIyLVx0LnBvcnRfc3RwX3N0YXRlX3NldCAgICA9IGhlbGxjcmVla19wb3J0X3N0cF9zdGF0ZV9zZXQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzExND1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxNTAtXHQucG9ydF9yeHRzdGFtcFx0XHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzE1MTpcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6OF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxNTItXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzE2MT1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMyMDAtXHQucG9ydF9yeHRzdGFtcFx0XHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzIwMTpcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6ODd4eF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMyMDItXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzIxMT1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODh4eF9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMyNTMtXHQucG9ydF9yeHRzdGFtcFx0XHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzI1NDpcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6OF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMyNTUtXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MjIxNT1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6OTQ3N19zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTIyNjItXHQuY2xzX2Zsb3dlcl9kZWxcdFx0PSBrc3o5NDc3X2Nsc19mbG93ZXJfZGVsLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MjI2MzpcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6X3NldHVwX3RjLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMjI2NC1cdC5zdXBwb3J0X2VlZVx0XHQ9IGtzejk0Nzdfc3VwcG9ydF9lZWUsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz05NDk9Y29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGxhbjkzN3hfc3dpdGNoX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTk4OS1cdC5wb3J0X3J4dHN0YW1wXHRcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjk5MDpcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6X3NldHVwX3RjLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy05OTEtXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDYwNz1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjI1LVx0LnBvcnRfcG9saWNlcl9hZGRcdD0geXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfYWRkLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDYyNjpcdC5wb3J0X3NldHVwX3RjXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwX3RjLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDYyNy1cdC8qIGFjbCAqL1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zMzk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NTMwX3N3aXRjaF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTM0MzMtXHQuY29uZHVpdF9zdGF0ZV9jaGFuZ2VcdD0gbXQ3NTN4X2NvbmR1aXRfc3RhdGVfY2hhbmdlLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM0MzQ6XHQucG9ydF9zZXR1cF90Y1x0XHQ9IG10NzUzeF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zNDM1LVx0LnBvcnRfaHNyX2pvaW5cdFx0PSBkc2FfcG9ydF9zaW1wbGVfaHNyX2pvaW4sXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTIzMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBmZWxpeF9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzYxLVx0LmNsc19mbG93ZXJfc3RhdHNcdFx0PSBmZWxpeF9jbHNfZmxvd2VyX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzNjI6XHQucG9ydF9zZXR1cF90Y1x0XHRcdD0gZmVsaXhfcG9ydF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzYzLVx0LmRldmxpbmtfc2JfcG9vbF9nZXRcdFx0PSBmZWxpeF9zYl9wb29sX2dldCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yNjU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmVsaXhfaW5mbyBmZWxpeF9pbmZvX3ZzYzk5NTkgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjY3OC1cdC5wb3J0X21vZGVzXHRcdD0gdnNjOTk1OV9wb3J0X21vZGVzLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MjY3OTpcdC5wb3J0X3NldHVwX3RjXHRcdD0gdnNjOTk1OV9wb3J0X3NldHVwX3RjLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjY4MC1cdC5wb3J0X3NjaGVkX3NwZWVkX3NldFx0PSB2c2M5OTU5X3NjaGVkX3NwZWVkX3NldCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0zMTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgc2phMTEwNV9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMxNzMtXHQucG9ydF90eHRzdGFtcFx0XHQ9IHNqYTExMDVfcG9ydF90eHRzdGFtcCxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjMxNzQ6XHQucG9ydF9zZXR1cF90Y1x0XHQ9IHNqYTExMDVfcG9ydF9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMxNzUtXHQucG9ydF9taXJyb3JfYWRkXHQ9IHNqYTExMDVfbWlycm9yX2FkZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUxMjYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERTQSBGbG93dGFibGUgT2ZmbG9hZGluZyBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZmxvdyB0YWJsZSBjb25maWd1cmF0aW9uIHdvcmtzIHdpdGhpbiB0aGUgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSAoRFNBKSBpbiB0aGUga2VybmVsLiBJJiMzOTttIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IGZ1bmN0aW9ucyBsaWtlIGBmZWxpeF9wb3J0X3NldHVwX3RjYCwgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLCBvciByZWFsbHkgYW55IERTQSBkcml2ZXIuCgpNeSBtYWluIGZvY3VzIHJpZ2h0IG5vdyBpcyBgZHNhX3VzZXJfc2V0dXBfdGNgIGFuZCBlc3BlY2lhbGx5IGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AuIEkgc2VlIHRoaXMgZnVuY3Rpb24gdGFrZXMgYSBgZHNhX3BvcnRgIGFuZCBgZmxvd19ibG9ja19vZmZsb2FkYCBzdHJ1Y3QuIExvb2tpbmcgYXQgdGhlIGNvZGU6CgpgYGBjCnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCwKCQkJCSAgIHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvKQp7CglzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApOwoJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtJmd0O2RzOwoJaW50IGVycjsKCgkvKiBUaGUgdW5iaW5kIGdvZXMgdG8gdGhlIHNpZGUgdGhhdCB0b29rIHRoZSBiaW5kLiAqLwoJaWYgKGJvLSZndDtjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkgewoJCWVyciA9IC1FT1BOT1RTVVBQOwoJCWlmIChkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjKQoJCQllcnIgPSBkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjKGRzLCBkcC0mZ3Q7aW5kZXgsIFRDX1NFVFVQX0ZULAoJCQkJCQkgICAgIGJvKTsKCQlkcC0mZ3Q7ZnRfb25fc3dpdGNoID0gZXJyICE9IC1FT1BOT1RTVVBQOwoJCWlmIChkcC0mZ3Q7ZnRfb25fc3dpdGNoKQoJCQlyZXR1cm4gZXJyOwoJfSBlbHNlIGlmIChkcC0mZ3Q7ZnRfb25fc3dpdGNoKSB7CgkJcmV0dXJuIGRzLSZndDtvcHMtJmd0O3BvcnRfc2V0dXBfdGMoZHMsIGRwLSZndDtpbmRleCwgVENfU0VUVVBfRlQsIGJvKTsKCX0KCglpZiAoIWNvbmR1aXQtJmd0O25ldGRldl9vcHMtJmd0O25kb19zZXR1cF90YykKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CgoJcmV0dXJuIGNvbmR1aXQtJmd0O25ldGRldl9vcHMtJmd0O25kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pOwp9CmBgYAoKVGhlIGZsb3cgaGVyZSBpcyBpbnRlcmVzdGluZy4gV2hlbiBiaW5kaW5nIGEgZmxvdyBibG9jayAoYGJvLSZndDtjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORGApLCB0aGUgY29kZSBmaXJzdCBjaGVja3MgaWYgdGhlIHN3aXRjaCBpbXBsZW1lbnRzIGBwb3J0X3NldHVwX3RjYC4gSWYgaXQgZG9lcywgdGhlIG9wZXJhdGlvbiBpcyBvZmZsb2FkZWQgdG8gdGhlIHN3aXRjaCwgYW5kIGBkcC0mZ3Q7ZnRfb25fc3dpdGNoYCBpcyBzZXQgYWNjb3JkaW5nbHkuIElmIHRoZSBzd2l0Y2ggZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIChyZXR1cm5zIGAtRU9QTk9UU1VQUGApLCBvciBkb2VzbiYjMzk7dCBoYXZlIGBwb3J0X3NldHVwX3RjYCwgdGhlIG9wZXJhdGlvbiBmYWxscyBiYWNrIHRvIHRoZSBjb25kdWl0IGRldmljZSYjMzk7cyBgbmRvX3NldHVwX3RjYCBmdW5jdGlvbi4gVGhlIGtleSBpcyBob3cgYGRwLSZndDtmdF9vbl9zd2l0Y2hgIHRyYWNrcyB3aGVyZSB0aGUgYmluZGluZyBoYXBwZW5lZC4gT24gdW5iaW5kLCB0aGlzIGlzIGNoZWNrZWQgdG8gc2VuZCB0aGUgY2FsbCB0byB0aGUgcmlnaHQgcGxhY2UuIFRoZSBjb21tZW50IGluIGBpbmNsdWRlL25ldC9kc2EuaGAgY2xhcmlmaWVzIHRoYXQgdGhlIGRlY2lzaW9uIG9mIHdoZXRoZXIgdG8gdXNlIHRoZSBzd2l0Y2ggb3IgdGhlIGNvbmR1aXQgaXMgbWFkZSBhdCBiaW5kIHRpbWUuIFRoaXMgbG9va3MgcHJvbWlzaW5nIGJlY2F1c2Ugb2YgdGhpcyBjb25kaXRpb25hbCBiZWhhdmlvci4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgd2hvbGUgRFNBIHRoaW5nIGlzIGV2ZW4gcmVsZXZhbnQgZm9yIGZ1enppbmcuIENhbiBJIHRyaWdnZXIgdGhpcyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQ/IFRoZSBhbnN3ZXIgaXMgeWVzLiBUaGUgYE5FVF9EU0FgIHdpdGggYE5FVF9EU0FfTE9PUGAgKG9yIG1vY2sgb3IgZml4ZWQgcGh5KSBjcmVhdGVzIERTQSBzd2l0Y2hlcyBhbmQgdXNlciBkZXZpY2VzIGxpa2UgYGxhbjFgLCBgbGFuMmAsIGV0Yy4gVGhpcyBsb29rcyBwZXJmZWN0IGZvciBRRU1VLiBGdXJ0aGVybW9yZSwgc3l6a2FsbGVyIGFscmVhZHkgaGFzIHRoaXMgY29uZmlndXJhdGlvbiEgSXQgdXNlcyBgQ09ORklHX05FVF9EU0E9eWAsIGBDT05GSUdfTkVUX0RTQV9MT09QPXlgLCBgQ09ORklHX05FVEZJTFRFUmAsIGFuZCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGFuZCBjYW4gbWFuaXB1bGF0ZSBmbG93IHRhYmxlcyB3aXRoIGBuZnRgIG9yIGBpcCBsaW5rYCAvIGB0Y2AuIEV4Y2VsbGVudC4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFdoZXJlJiMzOTtzIGBORVRfRFNBYCBkZWZpbmVkPyBJdCYjMzk7cyBpbiBgbmV0L2RzYS9LY29uZmlnYDoKCmBgYAptZW51Y29uZmlnIE5FVF9EU0EKCXRyaXN0YXRlICYjMzQ7RGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSYjMzQ7CglkZXBlbmRzIG9uIEhBVkVfTkVUX0RTQQoJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBJTkVUCglzZWxlY3QgTkVUX1NXSVRDSERFVgoJc2VsZWN0IFBIWUxJTksKCXNlbGVjdCBORVRfREVWTElOSwpgYGAKCkFuZCBJIHdpbGwgZ28gZmlndXJlIG91dCB3aGF0IGVuYWJsZXMgYEhBVkVfTkVUX0RTQWAuIFRoaXMgY29uZmlybXMgdGhhdCBpdCYjMzk7cyBhbGwgYnVpbHQtaW4gYW5kIGFscmVhZHkgZW5hYmxlZCBieSBzeXprYWxsZXIuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgaG93IHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhpcyBgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgIHdpdGggY2FyZWZ1bGx5IGNyYWZ0ZWQgZmxvdyB0YWJsZSBjb21tYW5kcy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9ORVRfRFNBJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwNjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gRGF0YSBTdHVjdHVyZSBBY2NlbGVyYXRvciAoRFNBKS4gSW5zdGVhZCBvZiB3YW5kZXJpbmcgYWltbGVzc2x5IHRocm91Z2ggdGhlIHNvdXJjZSB0cmVlLCBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBuZXQvZHNhL0tjb25maWdgIGZpbGUuIEkmIzM5O20gcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN0cnVjdHVyZSwgYW5kIGhpdHRpbmcgdGhlIHJlbGV2YW50IEtjb25maWcgZGlyZWN0bHkgdXN1YWxseSBnaXZlcyBtZSB0aGUgcXVpY2tlc3QgcGF0aCB0byB1bmRlcnN0YW5kaW5nIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgYmUgYSBtdWNoIG1vcmUgZWZmaWNpZW50IHVzZSBvZiBteSB0aW1lIHRoYW4gc3RhcnRpbmcgYXQgc29tZSBicm9hZGVyLCBwb3NzaWJseSB1bnJlbGF0ZWQgY29uZmlndXJhdGlvbiBtZW51IGFuZCBoYXZpbmcgdG8gZHJpbGwgZG93bi4gTGV0JiMzOTtzIHNlZSB3aGF0IGBuZXQvZHNhL0tjb25maWdgIHJldmVhbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZHNhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51Y29uZmlnIE5FVF9EU0FcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0Rpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gQlJJREdFIHx8IEJSSURHRT1uXG4gICA2Olx0XHRkZXBlbmRzIG9uIEhTUiB8fCBIU1I9blxuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRERVZJQ0VTXG4gICA4Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gICA5Olx0XHRzZWxlY3QgTkVUX1NXSVRDSERFVlxuICAxMDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMTE6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAxMjpcdFx0aW1wbHkgTkVUX1NFTEZURVNUU1xuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIGhhcmR3YXJlIHN3aXRjaGVzIHN1cHBvcnRlZFxuICAxNTpcdFx0ICBieSB0aGUgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZS5cbiAgMTY6XHRcbiAgMTc6XHRpZiBORVRfRFNBXG4gIDE4Olx0XG4gIDE5Olx0IyBEcml2ZXJzIG11c3Qgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSB0YWdnaW5nIGZvcm1hdChzKVxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBORVRfRFNBX1RBR19OT05FXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOby1vcCB0YWcgZHJpdmVyXCYjMzQ7XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHN3aXRjaGVzIHdoaWNoIGRvbiYjMzk7dCB0YWdcbiAgMjU6XHRcdCAgZnJhbWVzIG92ZXIgdGhlIENQVSBwb3J0LlxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBORVRfRFNBX1RBR19BUjkzMzFcbiAgMjg6XHRcdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEF0aGVyb3MgQVI5MzMxIFNvQyB3aXRoIGJ1aWx0LWluIHN3aXRjaFwmIzM0O1xuICAyOTpcdFx0aGVscFxuICAzMDpcdFx0ICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0YWdnaW5nIGZyYW1lcyBmb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc2NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgdGhlIE5ldHdvcmsgRFNBIExvb3AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2RzYWAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRoZSBgTkVUX0RTQV9MT09QYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gS25vd2luZyB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbCBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIGhvdyBpdCBtaWdodCBiZSBjb25maWd1cmVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwIHdoZW4gdHJvdWJsZXNob290aW5nIG9yIGN1c3RvbWl6aW5nIGFueSBhc3BlY3Qgb2YgdGhlIG5ldHdvcmsgRFNBIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgaXRzIGN1cnJlbnQgZGVmaW5pdGlvbiBiZWZvcmUgbW92aW5nIG9uIHRvIGFueXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfRFNBX0xPT1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL0tjb25maWc9Nz1jb25maWcgTkVUX0RTQV9CQ01fU0YyXG4tLVxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctMTgtXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZzoxOTpjb25maWcgTkVUX0RTQV9MT09QXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O0RTQSBtb2NrLXVwIEV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5NDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgRFNBIEtjb25maWcgRmlsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYGRyaXZlcnMvbmV0L2RzYS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDE5OyB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgb3IgdGhlIG1haW4gbW9kdWxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcGxhY2VkLCBzbyB0aGF0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEkmIzM5O20gbG9va2luZyBmb3IgYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmVhdHVyZSwgYnV0IEkgbmVlZCB0byBzdGFydCB3aXRoIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQnJvYWRjb20gU3RhcmZpZ2h0ZXIgMiBFdGhlcm5ldFxuICAxNzpcdFx0ICBzd2l0Y2ggY2hpcHMuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIE5FVF9EU0FfTE9PUFxuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7RFNBIG1vY2stdXAgRXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwmIzM0O1xuICAyMTpcdFx0c2VsZWN0IE5FVF9EU0FfVEFHX05PTkVcbiAgMjI6XHRcdHNlbGVjdCBGSVhFRF9QSFlcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGEgZmFrZSBtb2NrLXVwIHN3aXRjaCBjaGlwIHdoaWNoXG4gIDI1Olx0XHQgIGV4ZXJjaXNlcyB0aGUgRFNBIEFQSXMuXG4gIDI2Olx0XG4gIDI3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL0tjb25maWdcJiMzNDtcbiAgMjg6XHRcbiAgMjk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9LY29uZmlnXCYjMzQ7XG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIE5FVF9EU0FfTVQ3NTMwXG4gIDMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc1MzAgYW5kIE1UNzUzMSBFdGhlcm5ldCBzd2l0Y2ggc3VwcG9ydFwmIzM0O1xuICAzMzpcdFx0c2VsZWN0IE5FVF9EU0FfVEFHX01US1xuICAzNDpcdFx0c2VsZWN0IFJFR01BUF9JUlFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0MjAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb25maWd1cmF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIEZsb3cgVGFibGUgT2ZmbG9hZCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhlIGFwcHJvcHJpYXRlIG1vZHVsZXMgYXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLCBgQ09ORklHX05FVF9BQ1RfQ1RgLCBgQ09ORklHX05FVEZJTFRFUmAsIGFuZCBgQ09ORklHX05GX1RBQkxFU2AuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEnigJlsbCBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgcGllY2VzIGFyZSBpbiBwbGFjZSBmb3IgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgZGlnZ2luZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkgY2FuIGdldCBhIGdyYW51bGFyIGxvb2sgYXQgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzLiBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNrIGRvd24gdGhlIHNwZWNpZmljcyByZWxhdGVkIHRvIGZsb3cgdGFibGUgb2ZmbG9hZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjItXHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIE9mZmxvYWQgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIHRoZSBmbG93IG9mZmxvYWQgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AuIEZpcnN0IHRoaW5ncyBmaXJzdDogSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlIGNvbXBpbGF0aW9uIG9wdGlvbnMgYXJlIHNldCB1cC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgZ3VhcmQgd2l0aGluIHRoZSBmaWxlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgY29kZSBldmVuICpleGlzdHMqIGluIHRoZSBidWlsZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc3VycHJpc2UgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cy4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlIEkmIzM5O20gYWJvdXQgdG8gYW5hbHl6ZSBhbmQgdG8gYXZvaWQgd2FzdGluZyB0aW1lIG9uIHBhcnRzIHRoYXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvdXQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgYW55IGNvbmZpZyBmbGFncyBJIHNlZSB0byBrZWVwIHRoZW0gaW4gbWluZCBhcyBJIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDM9bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDU6XHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0Ni1uZl9mbG93X3RhYmxlLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfUFJPQ0ZTKSAmIzQzOz0gbmZfZmxvd190YWJsZV9wcm9jZnMub1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzQ0PXZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc0OC1cdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc0OTpcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93dGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NTAtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzYzPXZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NjktXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VnY193b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzcwOlx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3dfdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzEtXHQvKiAuLi4gbm8gbW9yZSBwZW5kaW5nIHdvcmsgYWZ0ZXIgdGhpcyBzdGFnZSAuLi4gKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc3My1cdG5mX2Zsb3dfdGFibGVfZ2NfcnVuKGZsb3dfdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NzQ6XHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChmbG93X3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzc1LVx0cmhhc2h0YWJsZV9kZXN0cm95KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz04MjQ9c3RhdGljIGludCBfX2luaXQgbmZfZmxvd190YWJsZV9tb2R1bGVfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODM1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo4MzY6XHRyZXQgPSBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCgpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04MzctXHRpZiAocmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODQ2LW91dF9icGY6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjg0NzpcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg0OC1vdXRfb2ZmbG9hZDpcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTg1NT1zdGF0aWMgdm9pZCBfX2V4aXQgbmZfZmxvd190YWJsZV9tb2R1bGVfZXhpdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NTYte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo4NTc6XHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCgpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NTgtXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2bmZfZmxvd190YWJsZV9uZXRfb3BzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTY4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03MC1cdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo3MTpcdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzItXHQuYWN0aW9uXHRcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2luZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz03OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY0ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODAtXHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6ODE6XHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgyLVx0LmFjdGlvblx0XHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9ODg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkwLVx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjkxOlx0LnNldHVwXHRcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05Mi1cdC5hY3Rpb25cdFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaXB2Nixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNDg9dm9pZCBuZl9mbG93X29mZmxvYWRfc3RhdHMoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE2NC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2NTp2b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE2Ni17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTcyLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTczOnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjM4PXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9pbmRyX29mZmxvYWRfY21kKHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI1MC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI1MTpzdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNTItXHRcdFx0XHQgICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNjktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyNzA6aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNzEtXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4MS1cdGlmIChkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyODI6XHRcdGVyciA9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWQoXHUwMDI2Ym8sIGZsb3d0YWJsZSwgZGV2LCBjbWQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyODMtXHRcdFx0XHRcdFx0XHUwMDI2ZXh0YWNrKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTEtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyOTQ6aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMxOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyMDp2b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTI3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGbG93IFRhYmxlIE9mZmxvYWQgb24gRFNBOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGZsb3cgdGFibGUgb2ZmbG9hZCBwcm9jZXNzIG9uIERTQSBpbnRlcmZhY2VzLiBJdCBzdGFydHMgd2l0aCBhIHVzZXIgY29uZmlndXJpbmcgYSBmbG93IHRhYmxlLCBsaWtlIHdpdGggYG5mdGAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIG9mZmxvYWQgZmxhZyBpcyBzZXQgb24gYSBEU0EgdXNlciBpbnRlcmZhY2UsIGxpa2UgYGxhbjFgLiBUaGUga2VybmVsIHRoZW4gdGFrZXMgb3Zlci4KCk15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRvIHdhbGsgdGhyb3VnaCB0aGUgZnVuY3Rpb24gY2FsbHMuIEZpcnN0LCBpdCBnb2VzIHRocm91Z2ggYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAsIHdoaWNoIHRoZW4gaGl0cyBgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZGAsIHVsdGltYXRlbHkgY2FsbGluZyBgZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMoZGV2LCBUQ19TRVRVUF9GVCwgYm8pYC4gTm93LCB0aGF0IGBuZG9fc2V0dXBfdGNgIGZ1bmN0aW9uIHBvaW50ZXIgaXMga2V5LiBJbiB0aGlzIGNhc2UsIGl0JiMzOTtzIGBkc2FfdXNlcl9zZXR1cF90Y2AuIFRoaXMgaXMgd2hlcmUgdGhlIERTQS1zcGVjaWZpYyBzdHVmZiBraWNrcyBpbiBiZWNhdXNlIGBkc2FfdXNlcl9zZXR1cF90Y2AgaGFuZGxlcyB0aGUgYFRDX1NFVFVQX0ZUYCBzZXR1cC4gVGhpcyB0aGVuIGxlYWRzIHRvIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AuCgpUaGUgYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBzdGF0ZSBtYW5hZ2VtZW50IGhhcHBlbnMuIEl0IHNldHMgYGRwLSZndDtmdF9vbl9zd2l0Y2hgIGR1cmluZyBiaW5kaW5nIGFuZCB1bmJpbmRzIGZyb20gdGhlIHN3aXRjaCBvciBjb25kdWl0IGFwcHJvcHJpYXRlbHkuIFRoaXMgaXMgd2hlcmUgSSBzZWUgdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzLCBwcmltYXJpbHkgaW4gdGhlIGxvZ2ljIG9mIHRoZSBiaW5kL3VuYmluZCBvcGVyYXRpb25zLgoKTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uOiBBcmUgdGhlc2UgZnVuY3Rpb25zIGV2ZW4gcmVhY2hhYmxlPyBUaGUgdGV4dCBhc3NlcnRzIHRoYXQgdGhleSAqYXJlKiByZWFjaGFibGUgaW4gUUVNVSBhbmQgc3RhbmRhcmQgZW52aXJvbm1lbnRzLCBwYXJ0aWN1bGFybHkgd2l0aCB0aG9zZSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIG9wdGlvbnMgc2V0LiBUaGF0JiMzOTtzIGEgZ3JlZW4gbGlnaHQgZm9yIG1lLgoKTXkgbmV4dCB0aG91Z2h0IGlzIGFib3V0IGZ1enppbmcuIEFic29sdXRlbHkuIFRoaXMgY29kZSBtb2RpZmllcyBjb250cm9sIGZsb3cgYW5kIHN0YXRlIHJlbGF0ZWQgdG8gdGhhdCBgZnRfb25fc3dpdGNoYCBmbGFnIGR1cmluZyB0aGVzZSBmbG93dGFibGUgYmxvY2sgYmluZC91bmJpbmQgb3BlcmF0aW9ucyBvbiBEU0EgdXNlciBuZXRkZXZzLiBUaGF0JiMzOTtzIGEganVpY3kgdGFyZ2V0IGZvciBmdXp6aW5nLiBTdGF0ZSB0cmFja2luZyBidWdzIGluIHRoZSBiaW5kL3VuYmluZCBsb2dpYyBjb3VsZCBsZWFkIHRvIG1lbW9yeSBsZWFrcywgZG91YmxlIGZyZWVzLCBvciwgY3JpdGljYWxseSwgbWlzbWF0Y2hlZCBiaW5kaW5nL3VuYmluZGluZyBzdGF0ZXMsIGNyZWF0aW5nIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGZvY3VzIHN5bWJvbHMgYW5kIHRhcmdldHMgbm93LgpJIG5lZWQgdG8gZXhhbWluZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3aXRoIGEgYml0IG1vcmUgcmlnb3I6Ci0gICBgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgOiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb21waWxlciBkb2VzbiYjMzk7dCBpbmxpbmUgaXQgb3IgSSBjYW4gc3RpbGwgdXNlIHRoZSBzeW1ib2wgYWRkcmVzcyBpbiBgdm1saW51eGAuCi0gICBgZHNhX3VzZXJfc2V0dXBfdGNgOiBBbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIHVzZWQgYXMgYSBjYWxsYmFjayBpbiBhIGBuZXRkZXZfb3BzYCBzdHJ1Y3QsIHNvIEkmIzM5O20gY29uZmlkZW50IGl0JiMzOTtzIGFjY2Vzc2libGUuCi0gICBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYDogVGhpcyBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiwgbm8gaXNzdWVzIHRoZXJlLgotICAgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWRgOiBTdGF0aWMsIGJ1dCBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBwYXRoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdC4KClRvIGdldCBhIGJyb2FkZXIgcGljdHVyZSBvZiBEU0EsIEkgc2hvdWxkIGFsc28gbG9vayBmb3Igb3RoZXIgcG90ZW50aWFsIERTQS11c2VyIGZ1bmN0aW9ucy4gSSYjMzk7bGwgY2hlY2sgYG5ldC9kc2EvdXNlci5jYCBmb3IgYW55IG90aGVyIGludGVyZXN0aW5nIHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgRFNBIHVzZXIgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkc2FfdXNlcl9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EvdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvdXNlci5jPTE1NDM9c3RhdGljIHZvaWQgZHNhX3VzZXJfZGVsX2Nsc19tYXRjaGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9kc2EvdXNlci5jLTE1NzItXG5uZXQvZHNhL3VzZXIuYzoxNTczOnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfY2xzX21hdGNoYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZHNhL3VzZXIuYy0xNTc0LVx0XHRcdFx0XHQgIHN0cnVjdCB0Y19jbHNfbWF0Y2hhbGxfb2ZmbG9hZCAqY2xzLFxuLS1cbm5ldC9kc2EvdXNlci5jPTE2MTk9c3RhdGljIGludCBkc2FfdXNlcl9zdGF0c19jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2RzYS91c2VyLmMtMTYzMi1cbm5ldC9kc2EvdXNlci5jOjE2MzM6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19jbHNfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZHNhL3VzZXIuYy0xNjM0LVx0XHRcdFx0XHRzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzLFxuLS1cbm5ldC9kc2EvdXNlci5jLTE2NDgtXG5uZXQvZHNhL3VzZXIuYzoxNjQ5OnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSxcbm5ldC9kc2EvdXNlci5jLTE2NTAtXHRcdFx0XHQgICAgICB2b2lkICpjYl9wcml2LCBib29sIGluZ3Jlc3MpXG4tLVxubmV0L2RzYS91c2VyLmMtMTY1OC1cdGNhc2UgVENfU0VUVVBfQ0xTTUFUQ0hBTEw6XG5uZXQvZHNhL3VzZXIuYzoxNjU5Olx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfY2xzX21hdGNoYWxsKGRldiwgdHlwZV9kYXRhLCBpbmdyZXNzKTtcbm5ldC9kc2EvdXNlci5jLTE2NjAtXHRjYXNlIFRDX1NFVFVQX0NMU0ZMT1dFUjpcbm5ldC9kc2EvdXNlci5jOjE2NjE6XHRcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19jbHNfZmxvd2VyKGRldiwgdHlwZV9kYXRhLCBpbmdyZXNzKTtcbm5ldC9kc2EvdXNlci5jLTE2NjItXHRkZWZhdWx0OlxuLS1cbm5ldC9kc2EvdXNlci5jLTE2NjYtXG5uZXQvZHNhL3VzZXIuYzoxNjY3OnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2JfaWcoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5uZXQvZHNhL3VzZXIuYy0xNjY4LVx0XHRcdFx0XHQgdm9pZCAqdHlwZV9kYXRhLCB2b2lkICpjYl9wcml2KVxubmV0L2RzYS91c2VyLmMtMTY2OS17XG5uZXQvZHNhL3VzZXIuYzoxNjcwOlx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrX2NiKHR5cGUsIHR5cGVfZGF0YSwgY2JfcHJpdiwgdHJ1ZSk7XG5uZXQvZHNhL3VzZXIuYy0xNjcxLX1cbm5ldC9kc2EvdXNlci5jLTE2NzItXG5uZXQvZHNhL3VzZXIuYzoxNjczOnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2JfZWcoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5uZXQvZHNhL3VzZXIuYy0xNjc0LVx0XHRcdFx0XHQgdm9pZCAqdHlwZV9kYXRhLCB2b2lkICpjYl9wcml2KVxubmV0L2RzYS91c2VyLmMtMTY3NS17XG5uZXQvZHNhL3VzZXIuYzoxNjc2Olx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrX2NiKHR5cGUsIHR5cGVfZGF0YSwgY2JfcHJpdiwgZmFsc2UpO1xubmV0L2RzYS91c2VyLmMtMTY3Ny19XG4tLVxubmV0L2RzYS91c2VyLmM9MTY3OT1zdGF0aWMgTElTVF9IRUFEKGRzYV91c2VyX2Jsb2NrX2NiX2xpc3QpO1xubmV0L2RzYS91c2VyLmMtMTY4MC1cbm5ldC9kc2EvdXNlci5jOjE2ODE6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2RzYS91c2VyLmMtMTY4Mi1cdFx0XHRcdCAgIHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmYpXG4tLVxubmV0L2RzYS91c2VyLmMtMTY4Ny1cdGlmIChmLVx1MDAzZWJpbmRlcl90eXBlID09IEZMT1dfQkxPQ0tfQklOREVSX1RZUEVfQ0xTQUNUX0lOR1JFU1MpXG5uZXQvZHNhL3VzZXIuYzoxNjg4Olx0XHRjYiA9IGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrX2NiX2lnO1xubmV0L2RzYS91c2VyLmMtMTY4OS1cdGVsc2UgaWYgKGYtXHUwMDNlYmluZGVyX3R5cGUgPT0gRkxPV19CTE9DS19CSU5ERVJfVFlQRV9DTFNBQ1RfRUdSRVNTKVxubmV0L2RzYS91c2VyLmM6MTY5MDpcdFx0Y2IgPSBkc2FfdXNlcl9zZXR1cF90Y19ibG9ja19jYl9lZztcbm5ldC9kc2EvdXNlci5jLTE2OTEtXHRlbHNlXG4tLVxubmV0L2RzYS91c2VyLmMtMTcyMC1cbm5ldC9kc2EvdXNlci5jOjE3MjE6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS91c2VyLmMtMTcyMi1cdFx0XHRcdCAgIHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvKVxuLS1cbm5ldC9kc2EvdXNlci5jLTE3NDYtXG5uZXQvZHNhL3VzZXIuYzoxNzQ3OnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5uZXQvZHNhL3VzZXIuYy0xNzQ4LVx0XHRcdCAgICAgdm9pZCAqdHlwZV9kYXRhKVxuLS1cbm5ldC9kc2EvdXNlci5jLTE3NTQtXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxubmV0L2RzYS91c2VyLmM6MTc1NTpcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKGRldiwgdHlwZV9kYXRhKTtcbm5ldC9kc2EvdXNlci5jLTE3NTYtXHRjYXNlIFRDX1NFVFVQX0ZUOlxubmV0L2RzYS91c2VyLmM6MTc1NzpcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xubmV0L2RzYS91c2VyLmMtMTc1OC1cdGRlZmF1bHQ6XG4tLVxubmV0L2RzYS91c2VyLmM9MjYwMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV91c2VyX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2RzYS91c2VyLmMtMjYxNS0jZW5kaWZcbm5ldC9kc2EvdXNlci5jOjI2MTY6XHQubmRvX3NldHVwX3RjXHRcdD0gZHNhX3VzZXJfc2V0dXBfdGMsXG5uZXQvZHNhL3VzZXIuYy0yNjE3LVx0Lm5kb19nZXRfc3RhdHM2NFx0PSBkc2FfdXNlcl9nZXRfc3RhdHM2NCxcbi0tXG5uZXQvZHNhL3VzZXIuYz0yNjY5PXN0YXRpYyBpbnQgZHNhX3VzZXJfcGh5X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyX2Rldilcbi0tXG5uZXQvZHNhL3VzZXIuYy0yNzExLVxubmV0L2RzYS91c2VyLmM6MjcxMjp2b2lkIGRzYV91c2VyX3NldHVwX3RhZ2dlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcilcbm5ldC9kc2EvdXNlci5jLTI3MTMte1xuLS1cbm5ldC9kc2EvdXNlci5jPTI3NzM9aW50IGRzYV91c2VyX2NyZWF0ZShzdHJ1Y3QgZHNhX3BvcnQgKnBvcnQpXG4tLVxubmV0L2RzYS91c2VyLmMtMjgzMS1cdHBvcnQtXHUwMDNldXNlciA9IHVzZXJfZGV2O1xubmV0L2RzYS91c2VyLmM6MjgzMjpcdGRzYV91c2VyX3NldHVwX3RhZ2dlcih1c2VyX2Rldik7XG5uZXQvZHNhL3VzZXIuYy0yODMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDIxNgoJCQkJCQkJb3V0cHV0OiAyMTIKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRFNBIFVzZXIgU2V0dXAgYW5kIEZsb3cgVGFibGUgT2ZmbG9hZCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBhbmQgYGRzYV91c2VyX3NldHVwX3RjYCwgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBEU0EgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZy4gSSYjMzk7bGwgYWxzbyBrZWVwIGEgY2xvc2UgZXllIG9uIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kYCBhbmQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAgYXMgdGhleSYjMzk7cmUgY3JpdGljYWwgdG8gdGhlIG5ldGZpbHRlciBzaWRlIG9mIHRoaW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIGNvbm5lY3RlZC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgd2UgbmVlZCBgTkVUX0RTQWAgdG8gZW5hYmxlIHRoZSBEU0EgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBgbmV0L2RzYS91c2VyLmNgIGFuZCBgaW5jbHVkZS9uZXQvZHNhLmhgLiBUaGVuLCBgTkZfRkxPV19UQUJMRWAgZW5hYmxlcyB0aGUgY29yZSBmbG93IHRhYmxlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gQW5kIG9mIGNvdXJzZSwgYE5GX1RBQkxFU2AgaXMgZXNzZW50aWFsIGZvciB0aGUgbmV0ZmlsdGVyIHRhYmxlIGluZnJhc3RydWN0dXJlLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBtYWtpbmcgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcy4gR29vZCwgbG9va3MgbGlrZSB0aG9zZSB0aHJlZSBhcmUgdGhlIHByaW1hcnkgb25lcyBmb3IgdGhpcyBhcmVhLgoKVGltZSBmb3IgYSBzYW5pdHkgY2hlY2suIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29yZSBzdWJzeXN0ZW1zOiBuZXR3b3JraW5nLCBzcGVjaWZpY2FsbHkgRFNBIChgbmV0L2RzYS9gKSBhbmQgbmV0ZmlsdGVyIG9mZmxvYWQuIFRoZSByZWFjaGFiaWxpdHkgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBhY2Nlc3NpYmxlIHRocm91Z2ggdmlydHVhbCBkZXZpY2VzICh0aGFua3MgdG8gYE5FVF9EU0FfTE9PUGAsIHdoaWNoIGlzIGdyZWF0IGZvciB0ZXN0aW5nKSBhbmQgdXNlci1zcGFjZSB0b29scyBsaWtlIG5ldGxpbmssIG5mdGFibGVzLCBhbmQgdGMgZm9yIGZsb3cgdGFibGUgb3BlcmF0aW9ucy4gQW5kIHllcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRoaXMsIHdoaWNoIGlzIGNvbmZpcm1lZCBieSB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSB3aGF0IEkgYWxyZWFkeSBpZGVudGlmaWVkLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgdGhvc2UgdGhyZWUgSSBqdXN0IGNvbmZpcm1lZC4KCkFscmlnaHQsIHRoYXQmIzM5O3MgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBmb3IgdGhpcyBhbmFseXNpcy4gTm93LCBJJiMzOTtsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RTQSYjMzQ7LAogICAgJiMzNDtORVRfRFNBX0xPT1AmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayYjMzQ7LAogICAgJiMzNDtkc2FfdXNlcl9zZXR1cF90YyYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyBieSBhZGRpbmcgc3RhdGUgdHJhY2tpbmcgKGZ0X29uX3N3aXRjaCkgb24gc3RydWN0IGRzYV9wb3J0IHRvIGVuc3VyZSB1bmJpbmRpbmcgcm91dGVzIHRvIHRoZSBzYW1lIGVudGl0eSAoc3dpdGNoIG9yIGNvbmR1aXQpIHRoYXQgaGFuZGxlZCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb24gRFNBIHVzZXIgcG9ydHMgKHN1Y2ggYXMgd2l0aCB0aGUgc29mdHdhcmUgZHNhX2xvb3AgbW9jayBkcml2ZXIpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHBvdGVudGlhbCBzdGF0ZSBtaXNtYXRjaGVzLCBiaW5kL3VuYmluZCBlcnJvciBwYXRocywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9EU0EmIzM0OywKICAgICYjMzQ7TkVUX0RTQV9MT09QJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2smIzM0OywKICAgICYjMzQ7ZHNhX3VzZXJfc2V0dXBfdGMmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBmbG93dGFibGUgYmxvY2sgc2V0dXAgbG9naWMgYnkgYWRkaW5nIHN0YXRlIHRyYWNraW5nIChmdF9vbl9zd2l0Y2gpIG9uIHN0cnVjdCBkc2FfcG9ydCB0byBlbnN1cmUgdW5iaW5kaW5nIHJvdXRlcyB0byB0aGUgc2FtZSBlbnRpdHkgKHN3aXRjaCBvciBjb25kdWl0KSB0aGF0IGhhbmRsZWQgYmluZGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIGZsb3d0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zIG9uIERTQSB1c2VyIHBvcnRzIChzdWNoIGFzIHdpdGggdGhlIHNvZnR3YXJlIGRzYV9sb29wIG1vY2sgZHJpdmVyKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBwb3RlbnRpYWwgc3RhdGUgbWlzbWF0Y2hlcywgYmluZC91bmJpbmQgZXJyb3IgcGF0aHMsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBEU0EgZmxvd3RhYmxlIGJsb2NrIHNldHVwIGxvZ2ljIChUQ19TRVRVUF9GVCkgdG8gcm91dGUgYmluZC91bmJpbmQgcmVxdWVzdHMgdG8gZWl0aGVyIHRoZSBEU0Egc3dpdGNoIGRyaXZlciBvciB0aGUgY29uZHVpdCBuZXRkZXYsIHRyYWNraW5nIHN0YXRlIHZpYSBhIG5ldyBgZnRfb25fc3dpdGNoYCBmaWVsZCBpbiBgc3RydWN0IGRzYV9wb3J0YC4gYHN0cnVjdCBkc2FfcG9ydGAgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgbmV3IGZpZWxkLiBUaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiOTIxZjMxMWFiNTJkMGZhZWU0MTc2YTlhNjQ0MDhiZTE2NTNlZjUwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxODo1MzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmgKaW5kZXggNzUwN2Q2MzJlN2M2ZC4uZGJjYjAyZGUwNmZjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmgKQEAgLTI5Nyw2ICYjNDM7Mjk3LDEyIEBAIHN0cnVjdCBkc2FfcG9ydCB7CiAKIAl1OAkJCXNldHVwOjE7CiAKJiM0MzsJLyogRmxvd3RhYmxlIGJsb2NrcyBvbiB0aGlzIHVzZXIgcG9ydCBnbyB0byB0aGUgc3dpdGNoLCBub3QgdGhlCiYjNDM7CSAqIGNvbmR1aXQ7IGRlY2lkZWQgYXQgYmluZCB0aW1lLiBXcml0dGVuIHdpdGhvdXQgcnRubCwgc28gbm90IG9uZSBvZgomIzQzOwkgKiB0aGUgYml0IGZpZWxkcyBhYm92ZS4KJiM0MzsJICovCiYjNDM7CWJvb2wJCQlmdF9vbl9zd2l0Y2g7CiYjNDM7CiAJc3RydWN0IGRldmljZV9ub2RlCSpkbjsKIAl1bnNpZ25lZCBpbnQJCWFnZWluZ190aW1lOwogCmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jCmluZGV4IDA0MWY5MDYwYzhlZjAuLmY0Y2Q0OGRmMjUxOWQgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdXNlci5jCkBAIC0xNzE4LDE1ICYjNDM7MTcxOCwzMCBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfQogfQogCi1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCi0JCQkJICAgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3N0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCwKJiM0MzsJCQkJICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRzYV90b19wb3J0KGRzLCBwb3J0KSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLSZndDtkczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi8KJiM0MzsJaWYgKGJvLSZndDtjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkgewomIzQzOwkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoZHMtJmd0O29wcy0mZ3Q7cG9ydF9zZXR1cF90YykKJiM0MzsJCQllcnIgPSBkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjKGRzLCBkcC0mZ3Q7aW5kZXgsIFRDX1NFVFVQX0ZULAomIzQzOwkJCQkJCSAgICAgYm8pOwomIzQzOwkJZHAtJmd0O2Z0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWlmIChkcC0mZ3Q7ZnRfb25fc3dpdGNoKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0gZWxzZSBpZiAoZHAtJmd0O2Z0X29uX3N3aXRjaCkgewomIzQzOwkJcmV0dXJuIGRzLSZndDtvcHMtJmd0O3BvcnRfc2V0dXBfdGMoZHMsIGRwLSZndDtpbmRleCwgVENfU0VUVVBfRlQsIGJvKTsKJiM0MzsJfQogCiAJaWYgKCFjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIHR5cGVfZGF0YSk7CiYjNDM7CXJldHVybiBjb25kdWl0LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIGJvKTsKIH0KIAogc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKQEAgLTE3MzksNyAmIzQzOzE3NTQsNyBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLAogCWNhc2UgVENfU0VUVVBfQkxPQ0s6CiAJCXJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9GVDoKLQkJcmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRzLCBkcC0mZ3Q7aW5kZXgsIHR5cGVfZGF0YSk7CiYjNDM7CQlyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHAsIHR5cGVfZGF0YSk7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggdG8gdGhlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgY29kZSBpbiB0aGUga2VybmVsIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGJlIGVmZmljaWVudCBoZXJlLCBzbyBsZXQmIzM5O3MgYW5hbHl6ZSB0aGlzIG1ldGhvZGljYWxseS4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2UuIEEgbmV3IGJvb2xlYW4sIGBmdF9vbl9zd2l0Y2hgLCBpcyBhZGRlZCB0byB0aGUgYGRzYV9wb3J0YCBzdHJ1Y3QgaW4gYGluY2x1ZGUvbmV0L2RzYS5oYC4gVGhpcyBmbGFnIGRldGVybWluZXMgaWYgZmxvd3RhYmxlIGJsb2NrcyBmb3IgYSB1c2VyIHBvcnQgYXJlIGhhbmRsZWQgYnkgdGhlIHN3aXRjaCBkaXJlY3RseSBvciB0aGUgJiMzNDtjb25kdWl0JiMzNDsgKHdoaWNoIEkgaW5mZXIgaXMgc29tZSBzb3J0IG9mIGludGVybWVkaWFyeSkuIFRoZSBsb2dpYyBkaWN0YXRlcyB0aGF0IHRoaXMgZGV0ZXJtaW5hdGlvbiBpcyBtYWRlIGF0IGJpbmQgdGltZSBhbmQgY2FuIGJlIHN1YnNlcXVlbnRseSB1bmJvdW5kLiBUaGlzIGlzIGtleSwgYSBib29sZWFuIHRvIGRldGVybWluZSBleGVjdXRpb24gcGF0aC4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBtb2RpZmljYXRpb24gdG8gYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBpbiBgbmV0L2RzYS91c2VyLmNgLiBUaGUgZnVuY3Rpb24gbm93IHRha2VzIGEgYGRzYV9wb3J0YCBzdHJ1Y3QgYXMgaW5wdXQgaW5zdGVhZCBvZiBkaXJlY3RseSByZWNlaXZpbmcgYGRzYV9zd2l0Y2hgIGFuZCBwb3J0IG51bWJlci4gVGhpcyBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBgZHNhX3BvcnRgIGRhdGEuIEl0IGFsc28gZGlyZWN0bHkgcmVmZXJlbmNlcyB0aGUgYGZ0X29uX3N3aXRjaGAgZmxhZy4gTW9zdCBpbXBvcnRhbnRseSwgdGhlIGxvZ2ljIGZvciBzZXR0aW5nIHVwIHRoZSBmbG93dGFibGUgYmxvY2tzIG5vdyBicmFuY2hlcyBiYXNlZCBvbiB0aGlzIGZsYWcmIzM5O3MgdmFsdWUuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBjb25kaXRpb25hbCBibG9jayB0aGF0IGNhbGxzIGBkcy0mZ3Q7b3BzLSZndDtwb3J0X3NldHVwX3RjYCBpZiBgZnRfb25fc3dpdGNoYCBpcyB0cnVlLCBpbXBseWluZyBhIGRpZmZlcmVudCBjb2RlIHBhdGguIFRoZSBjb25kaXRpb25hbCBlbnN1cmVzIHRoYXQgdW5iaW5kaW5nIGlzIHNpbWlsYXJseSBoYW5kbGVkIG9uIHRoZSBjb3JyZWN0IHNpZGUsIGFzIGRldGVybWluZWQgYnkgdGhlIGJpbmQuCgpUaGUgY29kZSBzZWVtcyB0byBiZSBoYW5kbGluZyB0aGUgdW5iaW5kIGNhc2UgdG9vLiBJdCBsb29rcyBsaWtlIGl0IGlzIGNhbGxpbmcgdGhlIHNhbWUgYHBvcnRfc2V0dXBfdGNgIGZ1bmN0aW9uIGZvciB0aGUgdW5iaW5kIG9wZXJhdGlvbi4gVGhpcyBjb3VsZCBiZSBhbiBpbXBvcnRhbnQgcGxhY2UgdG8gaGF2ZSB0aGUgZnV6emluZyB0YXJnZXQuCgpOb3csIHRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZHNhX3BvcnRgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQsIGhvdyBgZnRfb25fc3dpdGNoYCBpcyBzZXQsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGF0IGhhcyBmb3IgdGhlIGNvZGUgZmxvdy4gRXNzZW50aWFsbHksIHdoYXQmIzM5O3MgdGhlIHdob2xlIHBpY3R1cmUgaGVyZT8gV2hhdCBhcmUgdGhlIHBvc3NpYmxlIHN0YXRlcywgaG93IGRvIHRoZXkgdHJhbnNpdGlvbiwgYW5kIHdoYXQgYXJlIHRoZSBpbXBvcnRhbnQgY29uZGl0aW9ucz8KCkkgYW0gZ29pbmcgdG8gdXNlIGBncmVwcGVyYCAob3IgbXkgZXF1aXZhbGVudCBmaWxlIHJlYWRpbmcgdG9vbHMpIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyB0aGUgYGRzYV9wb3J0YCBzdHJ1Y3QgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSSBuZWVkIHRvIGtub3cgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGF0IGZsYWcgYW5kIGhvdyBpdCYjMzk7cyBjaGFuZ2VkLiBXaXRoIHRoYXQgaW5mb3JtYXRpb24sIEkmIzM5O2xsIGJlIGFibGUgdG8gZGVjaWRlIGlmIEtNU0FOIGZ1enppbmcgd291bGQgYmUgYmVuZWZpY2lhbCBpbiBpZGVudGlmeWluZyBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHRoZSBjb25kaXRpb25hbCBjb2RlIHBhdGhzLiBNeSBndXQgc2F5cyB0aGlzIGRlc2VydmVzIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkc2FfcG9ydF9hbGxvY3xremFsbG9jLipkc2FfcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGRlbHZpbmcgaW50byB0aGUgY29kZToKCioqRmluZGluZyB0aGUgQWxsb2NhdGlvbiBvZiBgc3RydWN0IGRzYV9wb3J0YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgYHN0cnVjdCBkc2FfcG9ydGAgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgYG5ldC9kc2EvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIEkgY291bGQganVzdCB1c2UgYGdyZXBgIHJlY3Vyc2l2ZWx5LCBidXQgdGhhdCBjYW4gcmV0dXJuIGEgbG90IG9mIGZhbHNlIHBvc2l0aXZlcywgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBvZnRlbiB0aGUgYWN0dWFsIGFsbG9jYXRpb24gbWlnaHQgaW52b2x2ZSBtb3JlIHRoYW4ganVzdCBhIGRpcmVjdCBga21hbGxvY2Agb3Igc2ltaWxhciBjYWxsLiBJdCBjb3VsZCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIHN0cnVjdHVyZSwgYWxsb2NhdGVkIHdpdGhpbiBhbm90aGVyIGNvbnRleHQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIG1vc3QgbGlrZWx5IGN1bHByaXRzOgoKKiAgICoqSGVhZGVyIEZpbGVzOioqIFRoZSBoZWFkZXIgZmlsZXMgd2l0aGluIGBuZXQvZHNhL2AgYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LCBhcyBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSB0aGUgc3RydWN0dXJlIGlzIGxpa2VseSBkZWZpbmVkLiBJJiMzOTtsbCBsb29rIGZvciB3aGVyZSBgc3RydWN0IGRzYV9wb3J0YCBpcyBhY3R1YWxseSBkZWZpbmVkLCBhbmQgYW55IHJlbGF0ZWQgdHlwZWRlZnMuIEEgcXVpY2sgc2VhcmNoIGZvciB0aGUgZGVjbGFyYXRpb24gbWlnaHQgZXZlbiBsZWFkIG1lIHRvIHRoZSBhbGxvY2F0aW9uLgoqICAgKipJbml0aWFsaXphdGlvbiBGdW5jdGlvbnM6KiogVGhlbiBJJiMzOTtsbCBsb29rIGZvciBhbnkgbGlrZWx5IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHdpdGhpbiB0aGUgRFNBIHN1YnN5c3RlbS4gVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgdGhlIGxpa2VseSBwbGFjZXMgdGhhdCBhIHN0cnVjdCB3b3VsZCBiZSBhbGxvY2F0ZWQuIENvbW1vbiBuYW1pbmcgY29udmVudGlvbnMgbGlrZSBgZHNhX3BvcnRfYWxsb2NgLCBgZHNhX3BvcnRfaW5pdGAsIG9yIHNpbWlsYXIuCiogICAqKkRTQSBEcml2ZXJzOioqIFRoZSBkZXZpY2UgZHJpdmVycyB0aGVtc2VsdmVzIGFyZSBhIGdvb2QgYmV0LiBPZnRlbiwgdGhlIGFsbG9jYXRpb24gaGFwcGVucyBkdXJpbmcgZGV2aWNlIHJlZ2lzdHJhdGlvbiBvciBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgcGF5IHNwZWNpZmljIGF0dGVudGlvbiB0byB0aGUgZHJpdmVycyBmb3IgdmFyaW91cyBEU0Egc3dpdGNoZXMgYW5kIHBvcnRzLgoKSSYjMzk7bGwga2VlcCBhIHNoYXJwIGV5ZSBvdXQgZm9yIGluZGlyZWN0IGFsbG9jYXRpb25zIHRvby4gRm9yIGV4YW1wbGUsIGlzIGl0IGEgbWVtYmVyIG9mIGEgbGFyZ2VyIGBzdHJ1Y3QgZHNhX3N3aXRjaGA/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhbm90aGVyIHN0cnVjdHVyZSwgd2hpY2ggaXMgYWxsb2NhdGVkLCBhbmQgdGhlIGBkc2FfcG9ydGAgaXMgZW1iZWRkZWQgc29tZWhvdz8KCkkmIzM5O20gbWVudGFsbHkgcmVhZHkgdG8gZGl2ZSBkZWVwIGludG8gdGhlIHNvdXJjZSBjb2RlLCB0cmFjZSBjYWxscywgYW5kIGZvbGxvdyBhbnkgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBoYXZlIGEgZmVlbGluZyB0aGUgYW5zd2VyJiMzOTtzIHNvbWV3aGVyZSBidXJpZWQgaW5zaWRlIGFuIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZHNhX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjAyNyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L2RzYS9jb25kdWl0LmM9MjA9c3RhdGljIGludCBkc2FfY29uZHVpdF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9kc2EvY29uZHVpdC5jLTIxLXtcbm5ldC9kc2EvY29uZHVpdC5jOjIyOlx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTIzLVx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXHUwMDNlb3JpZ19ldGh0b29sX29wcztcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz00OT1zdGF0aWMgdm9pZCBkc2FfY29uZHVpdF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTUxLXtcbm5ldC9kc2EvY29uZHVpdC5jOjUyOlx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTUzLVx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXHUwMDNlb3JpZ19ldGh0b29sX29wcztcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz0xMDI9c3RhdGljIHZvaWQgZHNhX2NvbmR1aXRfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYy0xMDUte1xubmV0L2RzYS9jb25kdWl0LmM6MTA2Olx0c3RydWN0IGRzYV9wb3J0ICpkcCwgKmNwdV9kcCA9IGRldi1cdTAwM2Vkc2FfcHRyO1xubmV0L2RzYS9jb25kdWl0LmMtMTA3LVx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXHUwMDNlb3JpZ19ldGh0b29sX29wcztcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz0xMjk9c3RhdGljIHZvaWQgZHNhX2NvbmR1aXRfZ2V0X2V0aHRvb2xfcGh5X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2RzYS9jb25kdWl0LmMtMTMyLXtcbm5ldC9kc2EvY29uZHVpdC5jOjEzMzpcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVx1MDAzZWRzYV9wdHI7XG5uZXQvZHNhL2NvbmR1aXQuYy0xMzQtXHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGNwdV9kcC1cdTAwM2VvcmlnX2V0aHRvb2xfb3BzO1xuLS1cbm5ldC9kc2EvY29uZHVpdC5jPTE2Mj1zdGF0aWMgaW50IGRzYV9jb25kdWl0X2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KVxubmV0L2RzYS9jb25kdWl0LmMtMTYzLXtcbm5ldC9kc2EvY29uZHVpdC5jOjE2NDpcdHN0cnVjdCBkc2FfcG9ydCAqZHAsICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTE2NS1cdGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gY3B1X2RwLVx1MDAzZW9yaWdfZXRodG9vbF9vcHM7XG4tLVxubmV0L2RzYS9jb25kdWl0LmM9MjIyPXN0YXRpYyB2b2lkIGRzYV9jb25kdWl0X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsXG4tLVxubmV0L2RzYS9jb25kdWl0LmMtMjI0LXtcbm5ldC9kc2EvY29uZHVpdC5jOjIyNTpcdHN0cnVjdCBkc2FfcG9ydCAqZHAsICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTIyNi1cdGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gY3B1X2RwLVx1MDAzZW9yaWdfZXRodG9vbF9vcHM7XG4tLVxubmV0L2RzYS9jb25kdWl0LmM9MjYxPWludCBfX2RzYV9jb25kdWl0X2h3dHN0YW1wX3ZhbGlkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2RzYS9jb25kdWl0LmMtMjY0LXtcbm5ldC9kc2EvY29uZHVpdC5jOjI2NTpcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVx1MDAzZWRzYV9wdHI7XG5uZXQvZHNhL2NvbmR1aXQuYy0yNjYtXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBjcHVfZHAtXHUwMDNlZHM7XG5uZXQvZHNhL2NvbmR1aXQuYy0yNjctXHRzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3Q7XG5uZXQvZHNhL2NvbmR1aXQuYzoyNjg6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9jb25kdWl0LmMtMjY5LVxuLS1cbm5ldC9kc2EvY29uZHVpdC5jPTI4Mz1zdGF0aWMgaW50IGRzYV9jb25kdWl0X2V0aHRvb2xfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9kc2EvY29uZHVpdC5jLTI4NC17XG5uZXQvZHNhL2NvbmR1aXQuYzoyODU6XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRldi1cdTAwM2Vkc2FfcHRyO1xubmV0L2RzYS9jb25kdWl0LmMtMjg2LVx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gY3B1X2RwLVx1MDAzZWRzO1xuLS1cbm5ldC9kc2EvY29uZHVpdC5jPTMxMj1zdGF0aWMgdm9pZCBkc2FfY29uZHVpdF9ldGh0b29sX3RlYXJkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvZHNhL2NvbmR1aXQuYy0zMTMte1xubmV0L2RzYS9jb25kdWl0LmM6MzE0Olx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTMxNS1cbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz0zNDA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTM0My1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGQpO1xubmV0L2RzYS9jb25kdWl0LmM6MzQ0Olx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkZXYtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvY29uZHVpdC5jLTM0NS1cbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz0zNTA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYy0zNTUtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihkKTtcbm5ldC9kc2EvY29uZHVpdC5jOjM1NjpcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVx1MDAzZWRzYV9wdHI7XG5uZXQvZHNhL2NvbmR1aXQuYy0zNTctXHRzaXplX3QgbGVuID0gZW5kIC0gYnVmO1xuLS1cbm5ldC9kc2EvY29uZHVpdC5jPTQwOT1zdGF0aWMgdm9pZCBkc2FfY29uZHVpdF9yZXNldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYy00MTgtXG5uZXQvZHNhL2NvbmR1aXQuYzo0MTk6aW50IGRzYV9jb25kdWl0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwKVxubmV0L2RzYS9jb25kdWl0LmMtNDIwLXtcbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz00NzQ9dm9pZCBkc2FfY29uZHVpdF90ZWFyZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTQ4OS1cbm5ldC9kc2EvY29uZHVpdC5jOjQ5MDppbnQgZHNhX2NvbmR1aXRfbGFnX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpsYWdfZGV2LCBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCxcbm5ldC9kc2EvY29uZHVpdC5jLTQ5MS1cdFx0XHQgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKnVpbmZvLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jPTUyMj12b2lkIGRzYV9jb25kdWl0X2xhZ190ZWFyZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqbGFnX2Rldixcbm5ldC9kc2EvY29uZHVpdC5jOjUyMzpcdFx0XHQgICAgICBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcClcbm5ldC9kc2EvY29uZHVpdC5jLTUyNC17XG4tLVxubmV0L2RzYS9jb25kdWl0LmgtNS1cbm5ldC9kc2EvY29uZHVpdC5oOjY6c3RydWN0IGRzYV9wb3J0O1xubmV0L2RzYS9jb25kdWl0LmgtNy1zdHJ1Y3QgbmV0X2RldmljZTtcbi0tXG5uZXQvZHNhL2NvbmR1aXQuaD05PXN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7XG5uZXQvZHNhL2NvbmR1aXQuaC0xMC1cbm5ldC9kc2EvY29uZHVpdC5oOjExOmludCBkc2FfY29uZHVpdF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCk7XG5uZXQvZHNhL2NvbmR1aXQuaC0xMi12b2lkIGRzYV9jb25kdWl0X3RlYXJkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L2RzYS9jb25kdWl0Lmg6MTM6aW50IGRzYV9jb25kdWl0X2xhZ19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbGFnX2Rldiwgc3RydWN0IGRzYV9wb3J0ICpjcHVfZHAsXG5uZXQvZHNhL2NvbmR1aXQuaC0xNC1cdFx0XHQgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKnVpbmZvLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5oPTE2PXZvaWQgZHNhX2NvbmR1aXRfbGFnX3RlYXJkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpsYWdfZGV2LFxubmV0L2RzYS9jb25kdWl0Lmg6MTc6XHRcdFx0ICAgICAgc3RydWN0IGRzYV9wb3J0ICpjcHVfZHApO1xubmV0L2RzYS9jb25kdWl0LmgtMTgtaW50IF9fZHNhX2NvbmR1aXRfaHd0c3RhbXBfdmFsaWRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZHNhL2RldmxpbmsuYz0yODM9ZHNhX2RldmxpbmtfcG9ydF9yZWdpb25fY3JlYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbi0tXG5uZXQvZHNhL2RldmxpbmsuYy0yODcte1xubmV0L2RzYS9kZXZsaW5rLmM6Mjg4Olx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbm5ldC9kc2EvZGV2bGluay5jLTI4OS1cbi0tXG5uZXQvZHNhL2RldmxpbmsuYz0zMDA9RVhQT1JUX1NZTUJPTF9HUEwoZHNhX2RldmxpbmtfcmVnaW9uX2Rlc3Ryb3kpO1xubmV0L2RzYS9kZXZsaW5rLmMtMzAxLVxubmV0L2RzYS9kZXZsaW5rLmM6MzAyOmludCBkc2FfcG9ydF9kZXZsaW5rX3NldHVwKHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL2RldmxpbmsuYy0zMDMte1xuLS1cbm5ldC9kc2EvZGV2bGluay5jLTM1NC1cbm5ldC9kc2EvZGV2bGluay5jOjM1NTp2b2lkIGRzYV9wb3J0X2RldmxpbmtfdGVhcmRvd24oc3RydWN0IGRzYV9wb3J0ICpkcClcbm5ldC9kc2EvZGV2bGluay5jLTM1Ni17XG4tLVxubmV0L2RzYS9kZXZsaW5rLmgtNS1cbm5ldC9kc2EvZGV2bGluay5oOjY6c3RydWN0IGRzYV9wb3J0O1xubmV0L2RzYS9kZXZsaW5rLmgtNy1zdHJ1Y3QgZHNhX3N3aXRjaDtcbm5ldC9kc2EvZGV2bGluay5oLTgtXG5uZXQvZHNhL2RldmxpbmsuaDo5OmludCBkc2FfcG9ydF9kZXZsaW5rX3NldHVwKHN0cnVjdCBkc2FfcG9ydCAqZHApO1xubmV0L2RzYS9kZXZsaW5rLmg6MTA6dm9pZCBkc2FfcG9ydF9kZXZsaW5rX3RlYXJkb3duKHN0cnVjdCBkc2FfcG9ydCAqZHApO1xubmV0L2RzYS9kZXZsaW5rLmgtMTEtdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbi0tXG5uZXQvZHNhL2RzYS5jPTEwNj1zdHJ1Y3QgZHNhX2xhZyAqZHNhX3RyZWVfbGFnX2ZpbmQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTA4LXtcbm5ldC9kc2EvZHNhLmM6MTA5Olx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtMTEwLVxuLS1cbm5ldC9kc2EvZHNhLmM9MTE4PXN0cnVjdCBkc2FfYnJpZGdlICpkc2FfdHJlZV9icmlkZ2VfZmluZChzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXG4tLVxubmV0L2RzYS9kc2EuYy0xMjAte1xubmV0L2RzYS9kc2EuYzoxMjE6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9kc2EuYy0xMjItXG4tLVxubmV0L2RzYS9kc2EuYz0xODE9c3RydWN0IGRzYV9zd2l0Y2ggKmRzYV9zd2l0Y2hfZmluZChpbnQgdHJlZV9pbmRleCwgaW50IHN3X2luZGV4KVxuLS1cbm5ldC9kc2EvZHNhLmMtMTgzLVx0c3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0O1xubmV0L2RzYS9kc2EuYzoxODQ6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9kc2EuYy0xODUtXG4tLVxubmV0L2RzYS9kc2EuYz0yNzE9c3RhdGljIHZvaWQgZHNhX3RyZWVfcHV0KHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcbi0tXG5uZXQvZHNhL2RzYS5jLTI3Ni1cbm5ldC9kc2EvZHNhLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgZHNhX3BvcnQgKmRzYV90cmVlX2ZpbmRfcG9ydF9ieV9ub2RlKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbm5ldC9kc2EvZHNhLmMtMjc4LVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pXG5uZXQvZHNhL2RzYS5jLTI3OS17XG5uZXQvZHNhL2RzYS5jOjI4MDpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTI4MS1cbi0tXG5uZXQvZHNhL2RzYS5jLTI4OC1cbm5ldC9kc2EvZHNhLmM6Mjg5OnN0YXRpYyBzdHJ1Y3QgZHNhX2xpbmsgKmRzYV9saW5rX3RvdWNoKHN0cnVjdCBkc2FfcG9ydCAqZHAsXG5uZXQvZHNhL2RzYS5jOjI5MDpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZHNhX3BvcnQgKmxpbmtfZHApXG5uZXQvZHNhL2RzYS5jLTI5MS17XG4tLVxubmV0L2RzYS9kc2EuYy0zMTQtXG5uZXQvZHNhL2RzYS5jOjMxNTpzdGF0aWMgYm9vbCBkc2FfcG9ydF9zZXR1cF9yb3V0aW5nX3RhYmxlKHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL2RzYS5jLTMxNi17XG4tLVxubmV0L2RzYS9kc2EuYy0zMjAtXHRzdHJ1Y3Qgb2ZfcGhhbmRsZV9pdGVyYXRvciBpdDtcbm5ldC9kc2EvZHNhLmM6MzIxOlx0c3RydWN0IGRzYV9wb3J0ICpsaW5rX2RwO1xubmV0L2RzYS9kc2EuYy0zMjItXHRzdHJ1Y3QgZHNhX2xpbmsgKmRsO1xuLS1cbm5ldC9kc2EvZHNhLmM9MzQyPXN0YXRpYyBib29sIGRzYV90cmVlX3NldHVwX3JvdXRpbmdfdGFibGUoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxuLS1cbm5ldC9kc2EvZHNhLmMtMzQ0LVx0Ym9vbCBjb21wbGV0ZSA9IHRydWU7XG5uZXQvZHNhL2RzYS5jOjM0NTpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTM0Ni1cbi0tXG5uZXQvZHNhL2RzYS5jLTM1Ny1cbm5ldC9kc2EvZHNhLmM6MzU4OnN0YXRpYyBzdHJ1Y3QgZHNhX3BvcnQgKmRzYV90cmVlX2ZpbmRfZmlyc3RfY3B1KHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcbm5ldC9kc2EvZHNhLmMtMzU5LXtcbm5ldC9kc2EvZHNhLmM6MzYwOlx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtMzYxLVxuLS1cbm5ldC9kc2EvZHNhLmM9MzY5PXN0cnVjdCBuZXRfZGV2aWNlICpkc2FfdHJlZV9maW5kX2ZpcnN0X2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxubmV0L2RzYS9kc2EuYy0zNzAte1xubmV0L2RzYS9kc2EuYzozNzE6XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcbm5ldC9kc2EvZHNhLmMtMzcyLVxuLS1cbm5ldC9kc2EvZHNhLmM9MzgwPXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfZGVmYXVsdF9jcHUoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxubmV0L2RzYS9kc2EuYy0zODEte1xubmV0L2RzYS9kc2EuYzozODI6XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCwgKmRwO1xubmV0L2RzYS9kc2EuYy0zODMtXG4tLVxubmV0L2RzYS9kc2EuYy00MDAtXG5uZXQvZHNhL2RzYS5jOjQwMTpzdGF0aWMgc3RydWN0IGRzYV9wb3J0ICpcbm5ldC9kc2EvZHNhLmMtNDAyLWRzYV9zd2l0Y2hfcHJlZmVycmVkX2RlZmF1bHRfbG9jYWxfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxubmV0L2RzYS9kc2EuYy00MDMte1xubmV0L2RzYS9kc2EuYzo0MDQ6XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcbm5ldC9kc2EvZHNhLmMtNDA1LVxuLS1cbm5ldC9kc2EvZHNhLmM9NDI0PXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfY3B1X3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcbm5ldC9kc2EvZHNhLmMtNDI1LXtcbm5ldC9kc2EvZHNhLmM6NDI2Olx0c3RydWN0IGRzYV9wb3J0ICpwcmVmZXJyZWRfY3B1X2RwLCAqY3B1X2RwLCAqZHA7XG5uZXQvZHNhL2RzYS5jLTQyNy1cbi0tXG5uZXQvZHNhL2RzYS5jPTQ1MD1zdGF0aWMgdm9pZCBkc2FfdHJlZV90ZWFyZG93bl9jcHVfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxubmV0L2RzYS9kc2EuYy00NTEte1xubmV0L2RzYS9kc2EuYzo0NTI6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9kc2EuYy00NTMtXG4tLVxubmV0L2RzYS9kc2EuYy00NTgtXG5uZXQvZHNhL2RzYS5jOjQ1OTpzdGF0aWMgaW50IGRzYV9wb3J0X3NldHVwKHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL2RzYS5jLTQ2MC17XG4tLVxubmV0L2RzYS9kc2EuYy01MzItXG5uZXQvZHNhL2RzYS5jOjUzMzpzdGF0aWMgdm9pZCBkc2FfcG9ydF90ZWFyZG93bihzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxubmV0L2RzYS9kc2EuYy01MzQte1xuLS1cbm5ldC9kc2EvZHNhLmMtNTYzLVxubmV0L2RzYS9kc2EuYzo1NjQ6c3RhdGljIGludCBkc2FfcG9ydF9zZXR1cF9hc191bnVzZWQoc3RydWN0IGRzYV9wb3J0ICpkcClcbm5ldC9kc2EvZHNhLmMtNTY1LXtcbi0tXG5uZXQvZHNhL2RzYS5jPTcxNT1zdGF0aWMgdm9pZCBkc2FfdHJlZV90ZWFyZG93bl9wb3J0cyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXG5uZXQvZHNhL2RzYS5jLTcxNi17XG5uZXQvZHNhL2RzYS5jOjcxNzpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTcxOC1cbi0tXG5uZXQvZHNhL2RzYS5jPTczMD1zdGF0aWMgdm9pZCBkc2FfdHJlZV90ZWFyZG93bl9zd2l0Y2hlcyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXG5uZXQvZHNhL2RzYS5jLTczMS17XG5uZXQvZHNhL2RzYS5jOjczMjpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTczMy1cbi0tXG5uZXQvZHNhL2RzYS5jPTczOT1zdGF0aWMgaW50IGRzYV90cmVlX3NldHVwX3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcbm5ldC9kc2EvZHNhLmMtNzQwLXtcbm5ldC9kc2EvZHNhLmM6NzQxOlx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtNzQyLVx0aW50IGVyciA9IDA7XG4tLVxubmV0L2RzYS9kc2EuYz03NzE9c3RhdGljIGludCBkc2FfdHJlZV9zZXR1cF9zd2l0Y2hlcyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXG5uZXQvZHNhL2RzYS5jLTc3Mi17XG5uZXQvZHNhL2RzYS5jOjc3MzpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTc3NC1cdGludCBlcnIgPSAwO1xuLS1cbm5ldC9kc2EvZHNhLmM9Nzg3PXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfY29uZHVpdChzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXG5uZXQvZHNhL2RzYS5jLTc4OC17XG5uZXQvZHNhL2RzYS5jOjc4OTpcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xubmV0L2RzYS9kc2EuYy03OTAtXHRpbnQgZXJyID0gMDtcbi0tXG5uZXQvZHNhL2RzYS5jPTgxND1zdGF0aWMgdm9pZCBkc2FfdHJlZV90ZWFyZG93bl9jb25kdWl0KHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcbm5ldC9kc2EvZHNhLmMtODE1LXtcbm5ldC9kc2EvZHNhLmM6ODE2Olx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHA7XG5uZXQvZHNhL2RzYS5jLTgxNy1cbi0tXG5uZXQvZHNhL2RzYS5jPTgzNT1zdGF0aWMgaW50IGRzYV90cmVlX3NldHVwX2xhZ3Moc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxuLS1cbm5ldC9kc2EvZHNhLmMtODM3LVx0dW5zaWduZWQgaW50IGxlbiA9IDA7XG5uZXQvZHNhL2RzYS5jOjgzODpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTgzOS1cbi0tXG5uZXQvZHNhL2RzYS5jPTk4Mz1pbnQgZHNhX3RyZWVfY2hhbmdlX3RhZ19wcm90byhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXG4tLVxubmV0L2RzYS9kc2EuYy05ODctXHRzdHJ1Y3QgZHNhX25vdGlmaWVyX3RhZ19wcm90b19pbmZvIGluZm87XG5uZXQvZHNhL2RzYS5jOjk4ODpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTk4OS1cdGludCBlcnIgPSAtRUJVU1k7XG4tLVxubmV0L2RzYS9kc2EuYz0xMDI5PXN0YXRpYyB2b2lkIGRzYV90cmVlX2NvbmR1aXRfc3RhdGVfY2hhbmdlKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbi0tXG5uZXQvZHNhL2RzYS5jLTEwMzItXHRzdHJ1Y3QgZHNhX25vdGlmaWVyX2NvbmR1aXRfc3RhdGVfaW5mbyBpbmZvO1xubmV0L2RzYS9kc2EuYzoxMDMzOlx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBjb25kdWl0LVx1MDAzZWRzYV9wdHI7XG5uZXQvZHNhL2RzYS5jLTEwMzQtXG4tLVxubmV0L2RzYS9kc2EuYz0xMDQxPXZvaWQgZHNhX3RyZWVfY29uZHVpdF9hZG1pbl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTA0NC17XG5uZXQvZHNhL2RzYS5jOjEwNDU6XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGNvbmR1aXQtXHUwMDNlZHNhX3B0cjtcbm5ldC9kc2EvZHNhLmMtMTA0Ni1cdGJvb2wgbm90aWZ5ID0gZmFsc2U7XG4tLVxubmV0L2RzYS9kc2EuYz0xMDY0PXZvaWQgZHNhX3RyZWVfY29uZHVpdF9vcGVyX3N0YXRlX2NoYW5nZShzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXG4tLVxubmV0L2RzYS9kc2EuYy0xMDY3LXtcbm5ldC9kc2EvZHNhLmM6MTA2ODpcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gY29uZHVpdC1cdTAwM2Vkc2FfcHRyO1xubmV0L2RzYS9kc2EuYy0xMDY5LVx0Ym9vbCBub3RpZnkgPSBmYWxzZTtcbi0tXG5uZXQvZHNhL2RzYS5jLTEwODYtXG5uZXQvZHNhL2RzYS5jOjEwODc6c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqZHNhX3BvcnRfdG91Y2goc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgaW5kZXgpXG5uZXQvZHNhL2RzYS5jLTEwODgte1xubmV0L2RzYS9kc2EuYy0xMDg5LVx0c3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHMtXHUwMDNlZHN0O1xubmV0L2RzYS9kc2EuYzoxMDkwOlx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtMTA5MS1cbi0tXG5uZXQvZHNhL2RzYS5jLTExMTMtXG5uZXQvZHNhL2RzYS5jOjExMTQ6c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV91c2VyKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGNvbnN0IGNoYXIgKm5hbWUpXG5uZXQvZHNhL2RzYS5jLTExMTUte1xuLS1cbm5ldC9kc2EvZHNhLmMtMTEyMS1cbm5ldC9kc2EvZHNhLmM6MTEyMjpzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2RzYShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxubmV0L2RzYS9kc2EuYy0xMTIzLXtcbi0tXG5uZXQvZHNhL2RzYS5jLTExMjgtXG5uZXQvZHNhL2RzYS5jOjExMjk6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBkc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS9kc2EuYy0xMTMwLVx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQpXG4tLVxubmV0L2RzYS9kc2EuYy0xMTM0LVx0dW5zaWduZWQgaW50IG1kcF91cHN0cmVhbTtcbm5ldC9kc2EvZHNhLmM6MTEzNTpcdHN0cnVjdCBkc2FfcG9ydCAqbWRwO1xubmV0L2RzYS9kc2EuYy0xMTM2LVxuLS1cbm5ldC9kc2EvZHNhLmMtMTE1NC1cbm5ldC9kc2EvZHNhLmM6MTE1NTpzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2NwdShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcbm5ldC9kc2EvZHNhLmMtMTE1Ni1cdFx0XHQgICAgICBjb25zdCBjaGFyICp1c2VyX3Byb3RvY29sKVxuLS1cbm5ldC9kc2EvZHNhLmMtMTIzOS1cbm5ldC9kc2EvZHNhLmM6MTI0MDpzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX29mKHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pXG5uZXQvZHNhL2RzYS5jLTEyNDEte1xuLS1cbm5ldC9kc2EvZHNhLmM9MTI3OD1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfcGFyc2VfcG9ydHNfb2Yoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbm5ldC9kc2EvZHNhLmMtMTI4MS1cdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydHMsICpwb3J0O1xubmV0L2RzYS9kc2EuYzoxMjgyOlx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtMTI4My1cdGludCBlcnIgPSAwO1xuLS1cbm5ldC9kc2EvZHNhLmM9MTM1NT1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfdG91Y2hfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxubmV0L2RzYS9kc2EuYy0xMzU2LXtcbm5ldC9kc2EvZHNhLmM6MTM1NzpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTEzNTgtXHRpbnQgcG9ydDtcbi0tXG5uZXQvZHNhL2RzYS5jPTEzOTI9c3RhdGljIHN0cnVjdCBkZXZpY2UgKmRldl9maW5kX2NsYXNzKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgY2hhciAqY2xhc3MpXG4tLVxubmV0L2RzYS9kc2EuYy0xNDAxLVxubmV0L2RzYS9kc2EuYzoxNDAyOnN0YXRpYyBpbnQgZHNhX3BvcnRfcGFyc2Uoc3RydWN0IGRzYV9wb3J0ICpkcCwgY29uc3QgY2hhciAqbmFtZSxcbm5ldC9kc2EvZHNhLmMtMTQwMy1cdFx0XHQgIHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5uZXQvZHNhL2RzYS5jPTE0MzQ9c3RhdGljIGludCBkc2Ffc3dpdGNoX3BhcnNlX3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbi0tXG5uZXQvZHNhL2RzYS5jLTE0MzctXHRib29sIHZhbGlkX25hbWVfZm91bmQgPSBmYWxzZTtcbm5ldC9kc2EvZHNhLmM6MTQzODpcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG5uZXQvZHNhL2RzYS5jLTE0MzktXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4tLVxubmV0L2RzYS9kc2EuYz0xNDg2PXN0YXRpYyB2b2lkIGRzYV9zd2l0Y2hfcmVsZWFzZV9wb3J0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxubmV0L2RzYS9kc2EuYy0xNDg4LVx0c3RydWN0IGRzYV9tYWNfYWRkciAqYSwgKnRtcDtcbm5ldC9kc2EvZHNhLmM6MTQ4OTpcdHN0cnVjdCBkc2FfcG9ydCAqZHAsICpuZXh0O1xubmV0L2RzYS9kc2EuYy0xNDkwLVx0c3RydWN0IGRzYV92bGFuICp2LCAqbjtcbi0tXG5uZXQvZHNhL2RzYS5jPTE2MTE9dm9pZCBkc2Ffc3dpdGNoX3NodXRkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5uZXQvZHNhL2RzYS5jLTE2MTQtXHRMSVNUX0hFQUQoY2xvc2VfbGlzdCk7XG5uZXQvZHNhL2RzYS5jOjE2MTU6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9kc2EuYy0xNjE2LVxuLS1cbm5ldC9kc2EvZHNhLmM9MTY2Mj1FWFBPUlRfU1lNQk9MX0dQTChkc2Ffc3dpdGNoX3NodXRkb3duKTtcbi0tXG5uZXQvZHNhL2RzYS5jLTE2NjQtI2lmZGVmIENPTkZJR19QTV9TTEVFUFxubmV0L2RzYS9kc2EuYzoxNjY1OnN0YXRpYyBib29sIGRzYV9wb3J0X2lzX2luaXRpYWxpemVkKGNvbnN0IHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL2RzYS5jLTE2NjYte1xuLS1cbm5ldC9kc2EvZHNhLmM9MTY3MD1pbnQgZHNhX3N3aXRjaF9zdXNwZW5kKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbm5ldC9kc2EvZHNhLmMtMTY3MS17XG5uZXQvZHNhL2RzYS5jOjE2NzI6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xubmV0L2RzYS9kc2EuYy0xNjczLVx0aW50IHJldCA9IDA7XG4tLVxubmV0L2RzYS9kc2EuYz0xNjkyPWludCBkc2Ffc3dpdGNoX3Jlc3VtZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5uZXQvZHNhL2RzYS5jLTE2OTMte1xubmV0L2RzYS9kc2EuYzoxNjk0Olx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbm5ldC9kc2EvZHNhLmMtMTY5NS1cdGludCByZXQgPSAwO1xuLS1cbm5ldC9kc2EvZHNhLmM9MTcxNT1FWFBPUlRfU1lNQk9MX0dQTChkc2Ffc3dpdGNoX3Jlc3VtZSk7XG4tLVxubmV0L2RzYS9kc2EuYy0xNzE3LVxubmV0L2RzYS9kc2EuYzoxNzE4OnN0cnVjdCBkc2FfcG9ydCAqZHNhX3BvcnRfZnJvbV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbm5ldC9kc2EvZHNhLmMtMTcxOS17XG4tLVxubmV0L2RzYS9kc2EuYz0xNzQ1PWJvb2wgZHNhX2ZkYl9wcmVzZW50X2luX290aGVyX2RiKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxubmV0L2RzYS9kc2EuYy0xNzQ4LXtcbm5ldC9kc2EvZHNhLmM6MTc0OTpcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG5uZXQvZHNhL2RzYS5jLTE3NTAtXHRzdHJ1Y3QgZHNhX21hY19hZGRyICphO1xuLS1cbm5ldC9kc2EvZHNhLmM9MTc2Nj1ib29sIGRzYV9tZGJfcHJlc2VudF9pbl9vdGhlcl9kYihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTc2OS17XG5uZXQvZHNhL2RzYS5jOjE3NzA6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xubmV0L2RzYS9kc2EuYy0xNzcxLVx0c3RydWN0IGRzYV9tYWNfYWRkciAqYTtcbi0tXG5uZXQvZHNhL2RzYS5jPTE4MTE9aW50IGRzYV9wb3J0X3NpbXBsZV9oc3Jfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTgxNC17XG5uZXQvZHNhL2RzYS5jOjE4MTU6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpLCAqb3RoZXJfZHA7XG5uZXQvZHNhL2RzYS5jLTE4MTYtXHRpbnQgZXJyO1xuLS1cbm5ldC9kc2EvZHNhLmM9MTgzND1pbnQgZHNhX3BvcnRfc2ltcGxlX2hzcl9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTgzNi17XG5uZXQvZHNhL2RzYS5jOjE4Mzc6XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpLCAqb3RoZXJfZHA7XG5uZXQvZHNhL2RzYS5jLTE4MzgtXG4tLVxubmV0L2RzYS9uZXRsaW5rLmM9NTU9c3RydWN0IHJ0bmxfbGlua19vcHMgZHNhX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvZHNhL25ldGxpbmsuYy01Ni1cdC5raW5kXHRcdFx0PSBcJiMzNDtkc2FcJiMzNDssXG5uZXQvZHNhL25ldGxpbmsuYzo1NzpcdC5wcml2X3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IGRzYV9wb3J0KSxcbm5ldC9kc2EvbmV0bGluay5jLTU4LVx0Lm1heHR5cGVcdFx0PSBJRkxBX0RTQV9NQVgsXG4tLVxubmV0L2RzYS9wb3J0LmMtMzItICovXG5uZXQvZHNhL3BvcnQuYzozMzpzdGF0aWMgaW50IGRzYV9wb3J0X25vdGlmeShjb25zdCBzdHJ1Y3QgZHNhX3BvcnQgKmRwLCB1bnNpZ25lZCBsb25nIGUsIHZvaWQgKnYpXG5uZXQvZHNhL3BvcnQuYy0zNC17XG4tLVxubmV0L2RzYS9wb3J0LmMtMzctXG5uZXQvZHNhL3BvcnQuYzozODpzdGF0aWMgdm9pZCBkc2FfcG9ydF9ub3RpZnlfYnJpZGdlX2ZkYl9mbHVzaChjb25zdCBzdHJ1Y3QgZHNhX3BvcnQgKmRwLCB1MTYgdmlkKVxubmV0L2RzYS9wb3J0LmMtMzkte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTU0LVxubmV0L2RzYS9wb3J0LmM6NTU6c3RhdGljIHZvaWQgZHNhX3BvcnRfZmFzdF9hZ2UoY29uc3Qgc3RydWN0IGRzYV9wb3J0ICpkcClcbm5ldC9kc2EvcG9ydC5jLTU2LXtcbi0tXG5uZXQvZHNhL3BvcnQuYy02Ny1cbm5ldC9kc2EvcG9ydC5jOjY4OnN0YXRpYyBpbnQgZHNhX3BvcnRfdmxhbl9mYXN0X2FnZShjb25zdCBzdHJ1Y3QgZHNhX3BvcnQgKmRwLCB1MTYgdmlkKVxubmV0L2RzYS9wb3J0LmMtNjkte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTgzLVxubmV0L2RzYS9wb3J0LmM6ODQ6c3RhdGljIGludCBkc2FfcG9ydF9tc3RpX2Zhc3RfYWdlKGNvbnN0IHN0cnVjdCBkc2FfcG9ydCAqZHAsIHUxNiBtc3RpKVxubmV0L2RzYS9wb3J0LmMtODUte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTEwMS1cbm5ldC9kc2EvcG9ydC5jOjEwMjpzdGF0aWMgYm9vbCBkc2FfcG9ydF9jYW5fY29uZmlndXJlX2xlYXJuaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL3BvcnQuYy0xMDMte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTExNi1cbm5ldC9kc2EvcG9ydC5jOjExNzpib29sIGRzYV9wb3J0X3N1cHBvcnRzX2h3dHN0YW1wKHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL3BvcnQuYy0xMTgte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTEzMC1cbm5ldC9kc2EvcG9ydC5jOjEzMTppbnQgZHNhX3BvcnRfc2V0X3N0YXRlKHN0cnVjdCBkc2FfcG9ydCAqZHAsIHU4IHN0YXRlLCBib29sIGRvX2Zhc3RfYWdlKVxubmV0L2RzYS9wb3J0LmMtMTMyLXtcbi0tXG5uZXQvZHNhL3BvcnQuYy0xNjMtXG5uZXQvZHNhL3BvcnQuYzoxNjQ6c3RhdGljIHZvaWQgZHNhX3BvcnRfc2V0X3N0YXRlX25vdyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLCB1OCBzdGF0ZSxcbm5ldC9kc2EvcG9ydC5jLTE2NS1cdFx0XHRcdCAgIGJvb2wgZG9fZmFzdF9hZ2UpXG4tLVxubmV0L2RzYS9wb3J0LmMtMTc2LVxubmV0L2RzYS9wb3J0LmM6MTc3OmludCBkc2FfcG9ydF9zZXRfbXN0X3N0YXRlKHN0cnVjdCBkc2FfcG9ydCAqZHAsXG5uZXQvZHNhL3BvcnQuYy0xNzgtXHRcdFx0ICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9tc3Rfc3RhdGUgKnN0YXRlLFxuLS1cbm5ldC9kc2EvcG9ydC5jLTIxMi1cbm5ldC9kc2EvcG9ydC5jOjIxMzppbnQgZHNhX3BvcnRfZW5hYmxlX3J0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG5uZXQvZHNhL3BvcnQuYy0yMTQte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTIzMy1cbm5ldC9kc2EvcG9ydC5jOjIzNDppbnQgZHNhX3BvcnRfZW5hYmxlKHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG5uZXQvZHNhL3BvcnQuYy0yMzUte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTI0NC1cbm5ldC9kc2EvcG9ydC5jOjI0NTp2b2lkIGRzYV9wb3J0X2Rpc2FibGVfcnQoc3RydWN0IGRzYV9wb3J0ICpkcClcbm5ldC9kc2EvcG9ydC5jLTI0Ni17XG4tLVxubmV0L2RzYS9wb3J0LmMtMjU5LVxubmV0L2RzYS9wb3J0LmM6MjYwOnZvaWQgZHNhX3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxubmV0L2RzYS9wb3J0LmMtMjYxLXtcbi0tXG5uZXQvZHNhL3BvcnQuYy0yNjYtXG5uZXQvZHNhL3BvcnQuYzoyNjc6c3RhdGljIHZvaWQgZHNhX3BvcnRfcmVzZXRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCxcbm5ldC9kc2EvcG9ydC5jLTI2OC1cdFx0XHRcdFx0ICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXG4tLVxubmV0L2RzYS9wb3J0LmMtMjcyLVx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG5uZXQvZHNhL3BvcnQuYzoyNzM6XHRzdHJ1Y3QgZHNhX3BvcnQgKm90aGVyX2RwO1xubmV0L2RzYS9wb3J0LmMtMjc0LVx0Ym9vbCB2bGFuX2ZpbHRlcmluZztcbi0tXG5uZXQvZHNhL3BvcnQuYy0zMjAtXG5uZXQvZHNhL3BvcnQuYzozMjE6c3RhdGljIGludCBkc2FfcG9ydF9pbmhlcml0X2JycG9ydF9mbGFncyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS9wb3J0LmMtMzIyLVx0XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9kc2EvcG9ydC5jLTM0NC1cbm5ldC9kc2EvcG9ydC5jOjM0NTpzdGF0aWMgdm9pZCBkc2FfcG9ydF9jbGVhcl9icnBvcnRfZmxhZ3Moc3RydWN0IGRzYV9wb3J0ICpkcClcbm5ldC9kc2EvcG9ydC5jLTM0Ni17XG4tLVxubmV0L2RzYS9wb3J0LmMtMzY1LVxubmV0L2RzYS9wb3J0LmM6MzY2OnN0YXRpYyBpbnQgZHNhX3BvcnRfc3dpdGNoZGV2X3N5bmNfYXR0cnMoc3RydWN0IGRzYV9wb3J0ICpkcCxcbm5ldC9kc2EvcG9ydC5jLTM2Ny1cdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvZHNhL3BvcnQuYy0zOTEtXG5uZXQvZHNhL3BvcnQuYzozOTI6c3RhdGljIHZvaWQgZHNhX3BvcnRfc3dpdGNoZGV2X3Vuc3luY19hdHRycyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS9wb3J0LmMtMzkzLVx0XHRcdFx0XHQgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxuLS1cbm5ldC9kc2EvcG9ydC5jLTQxOS1cbm5ldC9kc2EvcG9ydC5jOjQyMDpzdGF0aWMgaW50IGRzYV9wb3J0X2JyaWRnZV9jcmVhdGUoc3RydWN0IGRzYV9wb3J0ICpkcCxcbm5ldC9kc2EvcG9ydC5jLTQyMS1cdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmJyLFxuLS1cbm5ldC9kc2EvcG9ydC5jLTQ1NC1cbm5ldC9kc2EvcG9ydC5jOjQ1NTpzdGF0aWMgdm9pZCBkc2FfcG9ydF9icmlkZ2VfZGVzdHJveShzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS9wb3J0LmMtNDU2LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicilcbi0tXG5uZXQvZHNhL3BvcnQuYy00NzAtXG5uZXQvZHNhL3BvcnQuYzo0NzE6c3RhdGljIGJvb2wgZHNhX3BvcnRfc3VwcG9ydHNfbXN0KHN0cnVjdCBkc2FfcG9ydCAqZHApXG5uZXQvZHNhL3BvcnQuYy00NzIte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTQ4MC1cbm5ldC9kc2EvcG9ydC5jOjQ4MTppbnQgZHNhX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJyLFxubmV0L2RzYS9wb3J0LmMtNDgyLVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2RzYS9wb3J0LmMtNTM2LVxubmV0L2RzYS9wb3J0LmM6NTM3OnZvaWQgZHNhX3BvcnRfcHJlX2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqYnIpXG5uZXQvZHNhL3BvcnQuYy01Mzgte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTU1MS1cbm5ldC9kc2EvcG9ydC5jOjU1Mjp2b2lkIGRzYV9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqYnIpXG5uZXQvZHNhL3BvcnQuYy01NTMte1xuLS1cbm5ldC9kc2EvcG9ydC5jLTU4MC1cbm5ldC9kc2EvcG9ydC5jOjU4MTppbnQgZHNhX3BvcnRfbGFnX2NoYW5nZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxubmV0L2RzYS9wb3J0LmMtNTgyLVx0XHRcdHN0cnVjdCBuZXRkZXZfbGFnX2xvd2VyX3N0YXRlX2luZm8gKmxpbmZvKVxuLS1cbm5ldC9kc2EvcG9ydC5jLTYwNi1cbm5ldC9kc2EvcG9ydC5jOjYwNzpzdGF0aWMgaW50IGRzYV9wb3J0X2xhZ19jcmVhdGUoc3RydWN0IGRzYV9wb3J0ICpkcCxcbm5ldC9kc2EvcG9ydC5jLTYwOC1cdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmxhZ19kZXYpXG4tLVxubmV0L2RzYS9wb3J0LmMtNjMzLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlOgoKKipEaXZpbmcgaW50byBgZHNhX3BvcnRfdG91Y2hgKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gYGRzYV9wb3J0X3RvdWNoYCB3aXRoaW4gYG5ldC9kc2EvZHNhLmNgLiBMZXQgbWUgZ2V0IHN0cmFpZ2h0IHRvIHRoZSBjb2RlIGFuZCBjaGVjayBvdXQgbGluZXMgMTA4MCB0byAxMTEwLiBGcm9tIHRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lIGFuZCBpdHMgbG9jYXRpb24gd2l0aGluIHRoZSBEU0EgZnJhbWV3b3JrLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgaW52b2x2ZWQgaW4gc29tZSBraW5kIG9mIGxvdy1sZXZlbCBwb3J0IGludGVyYWN0aW9uIG9yIG1heWJlIGNhY2hlIG1haW50ZW5hbmNlIGZvciBhIERTQSBzd2l0Y2guIEJhc2VkIG9uIHRoZSBuYW1lIEkgYmV0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBtYW5hZ2luZyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgcG9ydC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGFjZSwgYW5kIGhvdyB0aGUgbmV0d29yayBkZXZpY2UgaXMgdXBkYXRlZCBpZiB0aGVyZSBhcmUgYW55IHBvcnQgc3RhdGUgY2hhbmdlcy4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgcGFydHMgb2YgdGhhdCByb3V0aW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9kc2EvZHNhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcbjEwODE6XHRcdGNwdV9kcC1cdTAwM2Vjb25kdWl0X29wZXJfdXAgPSB1cDtcbjEwODI6XHRcbjEwODM6XHRcdGlmIChub3RpZnkpXG4xMDg0Olx0XHRcdGRzYV90cmVlX2NvbmR1aXRfc3RhdGVfY2hhbmdlKGRzdCwgY29uZHVpdCk7XG4xMDg1Olx0fVxuMTA4NjpcdFxuMTA4NzpcdHN0YXRpYyBzdHJ1Y3QgZHNhX3BvcnQgKmRzYV9wb3J0X3RvdWNoKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IGluZGV4KVxuMTA4ODpcdHtcbjEwODk6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzLVx1MDAzZWRzdDtcbjEwOTA6XHRcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4xMDkxOlx0XG4xMDkyOlx0XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKVxuMTA5MzpcdFx0XHRpZiAoZHAtXHUwMDNlaW5kZXggPT0gaW5kZXgpXG4xMDk0Olx0XHRcdFx0cmV0dXJuIGRwO1xuMTA5NTpcdFxuMTA5NjpcdFx0ZHAgPSBremFsbG9jX29iaigqZHApO1xuMTA5NzpcdFx0aWYgKCFkcClcbjEwOTg6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMDk5Olx0XG4xMTAwOlx0XHRkcC1cdTAwM2VkcyA9IGRzO1xuMTEwMTpcdFx0ZHAtXHUwMDNlaW5kZXggPSBpbmRleDtcbjExMDI6XHRcbjExMDM6XHRcdG11dGV4X2luaXQoXHUwMDI2ZHAtXHUwMDNlYWRkcl9saXN0c19sb2NrKTtcbjExMDQ6XHRcdG11dGV4X2luaXQoXHUwMDI2ZHAtXHUwMDNldmxhbnNfbG9jayk7XG4xMTA1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZkcC1cdTAwM2VmZGJzKTtcbjExMDY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRwLVx1MDAzZW1kYnMpO1xuMTEwNzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZHAtXHUwMDNldmxhbnMpOyAvKiBhbHNvIGluaXRpYWxpemVzIFx1MDAyNmRwLVx1MDAzZXVzZXJfdmxhbnMgKi9cbjExMDg6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRwLVx1MDAzZWxpc3QpO1xuMTEwOTpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkcC1cdTAwM2VsaXN0LCBcdTAwMjZkc3QtXHUwMDNlcG9ydHMpO1xuMTExMDpcdFxuMTExMTpcdFx0cmV0dXJuIGRwO1xuMTExMjpcdH1cbjExMTM6XHRcbjExMTQ6XHRzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX3VzZXIoc3RydWN0IGRzYV9wb3J0ICpkcCwgY29uc3QgY2hhciAqbmFtZSlcbjExMTU6XHR7XG4xMTE2Olx0XHRkcC1cdTAwM2V0eXBlID0gRFNBX1BPUlRfVFlQRV9VU0VSO1xuMTExNzpcdFx0ZHAtXHUwMDNlbmFtZSA9IG5hbWU7XG4xMTE4Olx0XG4xMTE5Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIERTQSBVc2VyIFNldHVwKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEU0EgdXNlciBzZXR1cCBpcyBiZWluZyBoYW5kbGVkLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBhcm91bmQgdGhlIGBuZXQvZHNhL3VzZXIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHNhX3VzZXJfc2V0dXBfdGNgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBmb3IgaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgRFNBIHN0YWNrLCBhbmQgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBleHBlY3QgdG8gZmluZCBjbHVlcyBhYm91dCB0cmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbiwgaW50ZXJmYWNlIGFzc2lnbm1lbnQsIGFuZCBob3cgdXNlci1zcGFjZSB0b29scyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgRFNBIGRyaXZlci4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIHRoZSBhcmd1bWVudHMgaXQgdGFrZXMsIHRoZSBpbnRlcm5hbCB3b3JraW5ncywgYW5kIGFueSBjYWxscyBpdCBtYWtlcyB0byBvdGhlciBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiB0aGUgRFNBIHVzZXItc3BhY2UgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2RzYS91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MTA6XHRcdFx0aWYgKCFibG9ja19jYilcbjE3MTE6XHRcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjE3MTI6XHRcbjE3MTM6XHRcdFx0Zmxvd19ibG9ja19jYl9yZW1vdmUoYmxvY2tfY2IsIGYpO1xuMTcxNDpcdFx0XHRsaXN0X2RlbChcdTAwMjZibG9ja19jYi1cdTAwM2Vkcml2ZXJfbGlzdCk7XG4xNzE1Olx0XHRcdHJldHVybiAwO1xuMTcxNjpcdFx0ZGVmYXVsdDpcbjE3MTc6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTcxODpcdFx0fVxuMTcxOTpcdH1cbjE3MjA6XHRcbjE3MjE6XHRzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2FfcG9ydCAqZHAsXG4xNzIyOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibylcbjE3MjM6XHR7XG4xNzI0Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApO1xuMTcyNTpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG4xNzI2Olx0XHRpbnQgZXJyO1xuMTcyNzpcdFxuMTcyODpcdFx0LyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi9cbjE3Mjk6XHRcdGlmIChiby1cdTAwM2Vjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkge1xuMTczMDpcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjE3MzE6XHRcdFx0aWYgKGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKVxuMTczMjpcdFx0XHRcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsXG4xNzMzOlx0XHRcdFx0XHRcdFx0ICAgICBibyk7XG4xNzM0Olx0XHRcdGRwLVx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcbjE3MzU6XHRcdFx0aWYgKGRwLVx1MDAzZWZ0X29uX3N3aXRjaClcbjE3MzY6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTczNzpcdFx0fSBlbHNlIGlmIChkcC1cdTAwM2VmdF9vbl9zd2l0Y2gpIHtcbjE3Mzg6XHRcdFx0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsIGJvKTtcbjE3Mzk6XHRcdH1cbjE3NDA6XHRcbjE3NDE6XHRcdGlmICghY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90YylcbjE3NDI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTc0MzpcdFxuMTc0NDpcdFx0cmV0dXJuIGNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIGJvKTtcbjE3NDU6XHR9XG4xNzQ2Olx0XG4xNzQ3Olx0c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbjE3NDg6XHRcdFx0XHQgICAgIHZvaWQgKnR5cGVfZGF0YSlcbjE3NDk6XHR7XG4xNzUwOlx0XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xuMTc1MTpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG4xNzUyOlx0XG4xNzUzOlx0XHRzd2l0Y2ggKHR5cGUpIHtcbjE3NTQ6XHRcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4xNzU1Olx0XHRcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XG4xNzU2Olx0XHRjYXNlIFRDX1NFVFVQX0ZUOlxuMTc1NzpcdFx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHAsIHR5cGVfZGF0YSk7XG4xNzU4Olx0XHRkZWZhdWx0OlxuMTc1OTpcdFx0XHRicmVhaztcbjE3NjA6XHRcdH1cbjE3NjE6XHRcbjE3NjI6XHRcdGlmICghZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMpXG4xNzYzOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE3NjQ6XHRcbjE3NjU6XHRcdHJldHVybiBkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXHUwMDNlaW5kZXgsIHR5cGUsIHR5cGVfZGF0YSk7XG4xNzY2Olx0fVxuMTc2NzpcdFxuMTc2ODpcdHN0YXRpYyBpbnQgZHNhX3VzZXJfZ2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4xNzY5Olx0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYywgdTMyICpydWxlX2xvY3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjU0CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDgwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBgYm9vbCBmdF9vbl9zd2l0Y2hgIG1lbWJlciB0byB0aGUgYHN0cnVjdCBkc2FfcG9ydGAuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBhbGxvY2F0aW9uIGZvciB0aGUgYGRzYV9wb3J0YCBzdHJ1Y3R1cmUgKnNwZWNpZmljYWxseSogdXNlcyBga3phbGxvY19vYmpgLCBvciBgcnRubF9saW5rX29wc2AgcHJpdl9zaXplIGt6YWxsb2MsIGd1YXJhbnRlZWluZyB0aGF0IHRoaXMgbmV3IGJvb2xlYW4sIGBmdF9vbl9zd2l0Y2hgLCBzdGFydHMgYXQgYGZhbHNlYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIHdoZXJlIGRvZXMgdGhpcyBib29sZWFuIGdldCBzZXQ/IEl0IGhhcHBlbnMgd2l0aGluIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AuIFdoZW4gYSBmbG93IGJsb2NrIGlzIGJlaW5nICpib3VuZCogKGBGTE9XX0JMT0NLX0JJTkRgKSwgdGhlIGNvZGUgZmlyc3QgY2hlY2tzIGlmIHRoZSBzd2l0Y2ggZHJpdmVyIGNhbiBoYW5kbGUgdGhlIGBUQ19TRVRVUF9GVGAgb3BlcmF0aW9uIHZpYSBgcG9ydF9zZXR1cF90Y2AuIFRoZSAqcmVzdWx0KiBvZiB0aGF0IGNoZWNrIGRldGVybWluZXMgYGRwLSZndDtmdF9vbl9zd2l0Y2hgLiBJZiBgcG9ydF9zZXR1cF90Y2Agc3VwcG9ydHMgdGhlIGZsb3cgdGFibGUgb3BlcmF0aW9ucywgYW5kIHJldHVybnMgbm8gZXJyb3IsIGBmdF9vbl9zd2l0Y2hgIGlzIHNldCB0byBgdHJ1ZWA7IG90aGVyd2lzZSwgaXQgcmVtYWlucyBgZmFsc2VgLiBUaGUgcGF0Y2ggdGhlbiB1c2VzIHRoaXMgYm9vbGVhbiB0byBkZXRlcm1pbmUgd2hlcmUgdG8gcGFzcyB0aGUgZmxvdyB0YWJsZSBzZXR1cC4gSWYgdGhlIGJpbmRpbmcgZmFpbGVkLCBhbmQgYGZ0X29uX3N3aXRjaGAgaXMgYHRydWVgLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGRzYSBkcml2ZXIuIElmIGl0JiMzOTtzIGZhbHNlLCB0aGUgY29kZSBwYXNzZXMgdGhlIHNldHVwIHRvIHRoZSBjb25kdWl0LiBXaGVuICp1bmJpbmRpbmcqIHRoZSBzYW1lIGBGTE9XX0JMT0NLX1VOQklORGAsIHRoZSBsb2dpYyBtaXJyb3JzIHRoaXMuCgpNeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJcyB0aGVyZSBhbnkgcG9pbnQgd2hlcmUgYSByZWFkIGNvdWxkIG9jY3VyIGJlZm9yZSBhIHdyaXRlPyBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaDoKCiogICBUaGUgYWxsb2NhdGlvbiBvZiBgZHBgIGlzIHplcm9lZCBieSBga3phbGxvY19vYmpgLiBTbywgdGhlIGluaXRpYWwgc3RhdGUgaXMgc2FmZS4KKiAgIGBmdF9vbl9zd2l0Y2hgIGdldHMgZXhwbGljaXRseSBzZXQgZHVyaW5nIHRoZSBCSU5EIG9wZXJhdGlvbi4gVGhpcyBjb3ZlcnMgdGhlIG1vc3QgaW1wb3J0YW50IHBvaW50IG9mIHRoZSBsb2dpYy4KKiAgIFRoZSBgYm9gIChmbG93IGJsb2NrIG9mZmxvYWQpIGRhdGEgc3RydWN0dXJlIGNvbWVzIGZyb20gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGF0JiMzOTtzIGV4dGVybmFsLCBidXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhhdCBzdWJzeXN0ZW0uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBpcyBzYWZlbHkgaW5pdGlhbGl6ZWQuCiogICBJIHNlZSBubyBuZXcgYWxsb2NhdGlvbnMgb2Ygc3RhY2sgb3IgaGVhcCBidWZmZXJzIHRoYXQgY291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIG1ham9yIGFyZWEgb2YgY29uY2VybiBmb3IgbGVha3MuCiogICBUaGVyZSYjMzk7cyBubyBjb3B5aW5nIG9yIHJlYWRpbmcgb2YgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0cnVjdHMsIGFuZCB0aGF0IGlzIHZlcnkgaW1wb3J0YW50LgoqICAgVGhlcmUgYXJlIG5vIGJyYW5jaGluZyBkZWNpc2lvbnMsIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYSBtZXRob2RpY2FsbHk6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZToqKiBOb3BlLiBUaGUgc3RydWN0dXJlcyBhcmUgaW50ZXJuYWwuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBOby4gYGZ0X29uX3N3aXRjaGAgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXQmIzM5O3MgdXNlZC4KMy4gICoqQWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHBvdGVudGlhbGx5IHJlYWQgbGF0ZXI6KiogTm9wZS4gVGhlIGBkc2FfcG9ydGAgc3RydWN0dXJlIGlzIGNhcmVmdWxseSBpbml0aWFsaXplZC4KNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM6KiogTm8uCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggKmRvZXMgbm90KiBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2Ugc2hvdWxkIG5vdCBoYXZlIGFueSBLTVNBTiBpc3N1ZXMgaGVyZS4KCktNU0FOIHZzLiBLQVNBTiBpcyBjcnVjaWFsIGNvbnRleHQgaGVyZS4gS0FTQU4vTE9DS0RFUC9zdGFuZGFyZCBzYW5pdGl6ZXJzIHdvdWxkIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIFVBRiBidWdzLCBsb2NraW5nIHByb2JsZW1zLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBLTVNBTiwgc3BlY2lmaWNhbGx5LCBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBJbiB0aGlzIGNhc2UsIGBremFsbG9jX29iamAgYW5kIHRoZSBleHBsaWNpdCBzZXR0aW5nIG9mIGBmdF9vbl9zd2l0Y2hgIHdpdGhpbiB0aGUgYmluZC91bmJpbmQgbG9naWMgZWZmZWN0aXZlbHkgcHJldmVudCBLTVNBTiBmcm9tIGZsYWdnaW5nIGFueXRoaW5nLiBUaGlzIHBhdGNoIGlzIGp1c3QgaW50ZXJuYWwgZmxvdyB0YWJsZSBvZmZsb2FkIGRpc3BhdGNoIGxvZ2ljIHRoYXQmIzM5O3Mgc2FmZWx5IGltcGxlbWVudGVkLiBObyB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgbm8gc3RhY2sgYnVmZmVyIG1hbmlwdWxhdGlvbiwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCgpJJiMzOTttIGNvbmZpZGVudCB3ZSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgRFNBIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyAoVENfU0VUVVBfRlQpIHRvIHJvdXRlIGJpbmQvdW5iaW5kIHJlcXVlc3RzIHRvIGVpdGhlciB0aGUgRFNBIHN3aXRjaCBkcml2ZXIgb3IgdGhlIGNvbmR1aXQgbmV0ZGV2LCB0cmFja2luZyBzdGF0ZSB2aWEgYSBuZXcgYGZ0X29uX3N3aXRjaGAgZmllbGQgaW4gYHN0cnVjdCBkc2FfcG9ydGAuIGBzdHJ1Y3QgZHNhX3BvcnRgIGluc3RhbmNlcyBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBmaWVsZC4gVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBEU0EgZmxvd3RhYmxlIGJsb2NrIHNldHVwIGxvZ2ljIChUQ19TRVRVUF9GVCkgdG8gcm91dGUgYmluZC91bmJpbmQgcmVxdWVzdHMgdG8gZWl0aGVyIHRoZSBEU0Egc3dpdGNoIGRyaXZlciBvciB0aGUgY29uZHVpdCBuZXRkZXYsIHRyYWNraW5nIHN0YXRlIHZpYSBhIG5ldyBgZnRfb25fc3dpdGNoYCBmaWVsZCBpbiBgc3RydWN0IGRzYV9wb3J0YC4gYHN0cnVjdCBkc2FfcG9ydGAgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgbmV3IGZpZWxkLiBUaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjIwLjU2MDE3MDE1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTI2MTAwODY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfRFNBXCIsXG4gICAgXCJORVRfRFNBX0xPT1BcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrXCIsXG4gICAgXCJkc2FfdXNlcl9zZXR1cF90Y1wiLFxuICAgIFwibmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIERTQSBmbG93dGFibGUgYmxvY2sgc2V0dXAgbG9naWMgKFRDX1NFVFVQX0ZUKSB0byByb3V0ZSBiaW5kL3VuYmluZCByZXF1ZXN0cyB0byBlaXRoZXIgdGhlIERTQSBzd2l0Y2ggZHJpdmVyIG9yIHRoZSBjb25kdWl0IG5ldGRldiwgdHJhY2tpbmcgc3RhdGUgdmlhIGEgbmV3IGBmdF9vbl9zd2l0Y2hgIGZpZWxkIGluIGBzdHJ1Y3QgZHNhX3BvcnRgLiBgc3RydWN0IGRzYV9wb3J0YCBpbnN0YW5jZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBuZXcgZmllbGQuIFRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGNvcGllcywgbm8gdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyBieSBhZGRpbmcgc3RhdGUgdHJhY2tpbmcgKGZ0X29uX3N3aXRjaCkgb24gc3RydWN0IGRzYV9wb3J0IHRvIGVuc3VyZSB1bmJpbmRpbmcgcm91dGVzIHRvIHRoZSBzYW1lIGVudGl0eSAoc3dpdGNoIG9yIGNvbmR1aXQpIHRoYXQgaGFuZGxlZCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb24gRFNBIHVzZXIgcG9ydHMgKHN1Y2ggYXMgd2l0aCB0aGUgc29mdHdhcmUgZHNhX2xvb3AgbW9jayBkcml2ZXIpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHBvdGVudGlhbCBzdGF0ZSBtaXNtYXRjaGVzLCBiaW5kL3VuYmluZCBlcnJvciBwYXRocywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjIwLjU2MDE3NDgzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NTgxMTAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI5MjFmMzExYWI1MmQwZmFlZTQxNzZhOWE2NDQwOGJlMTY1M2VmNTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxODo1MzoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuaW5kZXggNzUwN2Q2MzJlN2M2ZC4uZGJjYjAyZGUwNmZjZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuQEAgLTI5Nyw2ICsyOTcsMTIgQEAgc3RydWN0IGRzYV9wb3J0IHtcXG4gXFxuIFxcdHU4XFx0XFx0XFx0c2V0dXA6MTtcXG4gXFxuK1xcdC8qIEZsb3d0YWJsZSBibG9ja3Mgb24gdGhpcyB1c2VyIHBvcnQgZ28gdG8gdGhlIHN3aXRjaCwgbm90IHRoZVxcbitcXHQgKiBjb25kdWl0OyBkZWNpZGVkIGF0IGJpbmQgdGltZS4gV3JpdHRlbiB3aXRob3V0IHJ0bmwsIHNvIG5vdCBvbmUgb2ZcXG4rXFx0ICogdGhlIGJpdCBmaWVsZHMgYWJvdmUuXFxuK1xcdCAqL1xcbitcXHRib29sXFx0XFx0XFx0ZnRfb25fc3dpdGNoO1xcbitcXG4gXFx0c3RydWN0IGRldmljZV9ub2RlXFx0KmRuO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRhZ2VpbmdfdGltZTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9kc2EvdXNlci5jIGIvbmV0L2RzYS91c2VyLmNcXG5pbmRleCAwNDFmOTA2MGM4ZWYwLi5mNGNkNDhkZjI1MTlkIDEwMDY0NFxcbi0tLSBhL25ldC9kc2EvdXNlci5jXFxuKysrIGIvbmV0L2RzYS91c2VyLmNcXG5AQCAtMTcxOCwxNSArMTcxOCwzMCBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi1cXHRcXHRcXHRcXHQgICB2b2lkICp0eXBlX2RhdGEpXFxuK3N0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pXFxuIHtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRzYV90b19wb3J0KGRzLCBwb3J0KSk7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qIFRoZSB1bmJpbmQgZ29lcyB0byB0aGUgc2lkZSB0aGF0IHRvb2sgdGhlIGJpbmQuICovXFxuK1xcdGlmIChiby1cXHUwMDNlY29tbWFuZCA9PSBGTE9XX0JMT0NLX0JJTkQpIHtcXG4rXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGlmIChkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKVxcbitcXHRcXHRcXHRlcnIgPSBkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cXHUwMDNlaW5kZXgsIFRDX1NFVFVQX0ZULFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJvKTtcXG4rXFx0XFx0ZHAtXFx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0aWYgKGRwLVxcdTAwM2VmdF9vbl9zd2l0Y2gpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH0gZWxzZSBpZiAoZHAtXFx1MDAzZWZ0X29uX3N3aXRjaCkge1xcbitcXHRcXHRyZXR1cm4gZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXFx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCwgYm8pO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIWNvbmR1aXQtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90YylcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0cmV0dXJuIGNvbmR1aXQtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgdHlwZV9kYXRhKTtcXG4rXFx0cmV0dXJuIGNvbmR1aXQtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbkBAIC0xNzM5LDcgKzE3NTQsNyBAQCBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbiBcXHRcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soZGV2LCB0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbi1cXHRcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHMsIGRwLVxcdTAwM2VpbmRleCwgdHlwZV9kYXRhKTtcXG4rXFx0XFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1MzoyMi4wMDY3NTg4NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY4NzAwNjA3MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9EU0FcIixcbiAgICBcIk5FVF9EU0FfTE9PUFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tcIixcbiAgICBcImRzYV91c2VyX3NldHVwX3RjXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyBieSBhZGRpbmcgc3RhdGUgdHJhY2tpbmcgKGZ0X29uX3N3aXRjaCkgb24gc3RydWN0IGRzYV9wb3J0IHRvIGVuc3VyZSB1bmJpbmRpbmcgcm91dGVzIHRvIHRoZSBzYW1lIGVudGl0eSAoc3dpdGNoIG9yIGNvbmR1aXQpIHRoYXQgaGFuZGxlZCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb24gRFNBIHVzZXIgcG9ydHMgKHN1Y2ggYXMgd2l0aCB0aGUgc29mdHdhcmUgZHNhX2xvb3AgbW9jayBkcml2ZXIpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHBvdGVudGlhbCBzdGF0ZSBtaXNtYXRjaGVzLCBiaW5kL3VuYmluZCBlcnJvciBwYXRocywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjkyMWYzMTFhYjUyZDBmYWVlNDE3NmE5YTY0NDA4YmUxNjUzZWY1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NTM6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA3NTA3ZDYzMmU3YzZkLi5kYmNiMDJkZTA2ZmNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXG5AQCAtMjk3LDYgKzI5NywxMiBAQCBzdHJ1Y3QgZHNhX3BvcnQge1xuIFxuIFx0dThcdFx0XHRzZXR1cDoxO1xuIFxuK1x0LyogRmxvd3RhYmxlIGJsb2NrcyBvbiB0aGlzIHVzZXIgcG9ydCBnbyB0byB0aGUgc3dpdGNoLCBub3QgdGhlXG4rXHQgKiBjb25kdWl0OyBkZWNpZGVkIGF0IGJpbmQgdGltZS4gV3JpdHRlbiB3aXRob3V0IHJ0bmwsIHNvIG5vdCBvbmUgb2ZcbitcdCAqIHRoZSBiaXQgZmllbGRzIGFib3ZlLlxuK1x0ICovXG4rXHRib29sXHRcdFx0ZnRfb25fc3dpdGNoO1xuK1xuIFx0c3RydWN0IGRldmljZV9ub2RlXHQqZG47XG4gXHR1bnNpZ25lZCBpbnRcdFx0YWdlaW5nX3RpbWU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS91c2VyLmMgYi9uZXQvZHNhL3VzZXIuY1xuaW5kZXggMDQxZjkwNjBjOGVmMC4uZjRjZDQ4ZGYyNTE5ZCAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdXNlci5jXG4rKysgYi9uZXQvZHNhL3VzZXIuY1xuQEAgLTE3MTgsMTUgKzE3MTgsMzAgQEAgc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEpXG4rc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxuK1x0XHRcdFx0ICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRzYV90b19wb3J0KGRzLCBwb3J0KSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApO1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0LyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi9cbitcdGlmIChiby1cdTAwM2Vjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkge1xuK1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKVxuK1x0XHRcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsXG4rXHRcdFx0XHRcdFx0ICAgICBibyk7XG4rXHRcdGRwLVx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGRwLVx1MDAzZWZ0X29uX3N3aXRjaClcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fSBlbHNlIGlmIChkcC1cdTAwM2VmdF9vbl9zd2l0Y2gpIHtcbitcdFx0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsIGJvKTtcbitcdH1cbiBcbiBcdGlmICghY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90YylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIHR5cGVfZGF0YSk7XG4rXHRyZXR1cm4gY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuQEAgLTE3MzksNyArMTc1NCw3IEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9GVDpcbi1cdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRzLCBkcC1cdTAwM2VpbmRleCwgdHlwZV9kYXRhKTtcbitcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1MzoyMi4wMDY3NjEyNjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDIwODcxMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRFNBIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBpcyB0aGlzIHBhdGNoIGZ1enphYmxlLCB3aGF0IGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLCBhbmQgd2hhdCBzeW1ib2xzIGFyZSBtb3N0IHJlbGV2YW50P1xuXG5GaXJzdCwgSSdtIGxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyB0b3VjaGluZyBgaW5jbHVkZS9uZXQvZHNhLmhgIGFuZCBgbmV0L2RzYS91c2VyLmNgLCB3aGljaCBpbW1lZGlhdGVseSBkcmF3cyBteSBhdHRlbnRpb24gdG8gdGhlIERTQSBhcmNoaXRlY3R1cmUuXG5cblNwZWNpZmljYWxseSwgYGluY2x1ZGUvbmV0L2RzYS5oYCBhZGRzIGEgYGJvb2wgZnRfb25fc3dpdGNoYCB0byB0aGUgYHN0cnVjdCBkc2FfcG9ydGAuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIHN0YXRlIHRyYWNraW5nIGZsb3cgdGFibGVzIG9uIHRoZSBzd2l0Y2guIE5vdywgbG9va2luZyBhdCBgbmV0L2RzYS91c2VyLmNgLCBJIHNlZSBzb21lIGNyaXRpY2FsIGNoYW5nZXMgaW4gYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYC4gVGhpcyBzdGF0aWMgZnVuY3Rpb24sIGNhbGxlZCBieSBgZHNhX3VzZXJfc2V0dXBfdGNgLCBoYW5kbGVzIGBUQ19TRVRVUF9GVGAsIHdoaWNoIHNlZW1zIHRvIGJlIGFib3V0IGZsb3cgdGFibGUgc2V0dXAuIEl0J3MgaGFuZGxpbmcgdGhlIGBGTE9XX0JMT0NLX0JJTkRgIGFuZCB1bmJpbmRpbmcgY29tbWFuZHMuIElmIGBkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9zZXR1cF90Y2AgaXMgc3VwcG9ydGVkLCBpdCBpbmRpY2F0ZXMgZmxvdyB0YWJsZSBoYW5kbGluZyBvbiB0aGUgc3dpdGNoIGJ5IHNldHRpbmcgYGRwLVx1MDAzZWZ0X29uX3N3aXRjaGAgdG8gdHJ1ZS4gSWYgbm90LCBpdCBmb3J3YXJkcyB0byB0aGUgY29uZHVpdCdzIGBuZG9fc2V0dXBfdGNgLiBTbyBpdCBsb29rcyBsaWtlIGl0J3MgbWFuYWdpbmcgd2hldGhlciB0aGUgZmxvdyB0YWJsZSBpcyBtYW5hZ2VkIG9uIHRoZSBzd2l0Y2ggb3IgZm9yd2FyZGVkLiBXaGVuIHVuYmluZGluZywgaXQgY2hlY2tzIGBkcC1cdTAwM2VmdF9vbl9zd2l0Y2hgIGFuZCBjYWxscyBgZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGNgIHdoaWNoIHN1Z2dlc3RzIHRoZXJlJ3MgYSBuZWVkIHRvIGhhbmRsZSBmbG93IHRhYmxlcyBvbiB0aGUgc3dpdGNoIHdoZW4gdW5iaW5kaW5nIHRvby5cblxuTm93LCBteSBuZXh0IHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuIGdldCB0byB0aGlzIGluIGEgZnV6emluZyBlbnZpcm9ubWVudD8gQ2FuIERTQSBkZXZpY2VzIG9yIERTQSB1c2VyIGRldmljZXMgYmUgaW5zdGFudGlhdGVkIG9yIGFjY2Vzc2VkIHRocm91Z2ggbmV0bGluaywgbW9jayBpbnRlcmZhY2VzLCBtYXliZSBgZHNhX2xvb3BgLCBvciB3aXRoaW4gYSB2aXJ0dWFsaXplZCBzZXR1cD8gVGltZSB0byBjaGVjayBpZiBJIGNhbiBnZXQgYSBEU0EgZGV2aWNlIGluc3RhbmNlIGluIHRoZSBrZXJuZWwuIExldCdzIHNlZSB3aGF0IHRoZSBrZXJuZWwgaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjMxLjAyNzYzNTE2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTk3NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfRFNBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9LY29uZmlnLTItXFxubmV0L2RzYS9LY29uZmlnOjM6bWVudWNvbmZpZyBORVRfRFNBXFxubmV0L2RzYS9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkRpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWc9MTc9aWYgTkVUX0RTQVxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIwLVxcbm5ldC9kc2EvS2NvbmZpZzoyMTpjb25maWcgTkVUX0RTQV9UQUdfTk9ORVxcbm5ldC9kc2EvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwiTm8tb3AgdGFnIGRyaXZlclxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0yNi1cXG5uZXQvZHNhL0tjb25maWc6Mjc6Y29uZmlnIE5FVF9EU0FfVEFHX0FSOTMzMVxcbm5ldC9kc2EvS2NvbmZpZy0yOC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgQXRoZXJvcyBBUjkzMzEgU29DIHdpdGggYnVpbHQtaW4gc3dpdGNoXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTMyLVxcbm5ldC9kc2EvS2NvbmZpZzozMzpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9DT01NT05cXG5uZXQvZHNhL0tjb25maWctMzQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0zNi1cXG5uZXQvZHNhL0tjb25maWc6Mzc6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01cXG5uZXQvZHNhL0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEJyb2FkY29tIHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctNDMtXFxubmV0L2RzYS9LY29uZmlnOjQ0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0xFR0FDWVxcbm5ldC9kc2EvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgQkNNNjN4eCBsZWdhY3kgc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy01My1cXG5uZXQvZHNhL0tjb25maWc6NTQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fTEVHQUNZX0ZDU1xcbm5ldC9kc2EvS2NvbmZpZy01NS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgQkNNNTN4eCBsZWdhY3kgc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy02My1cXG5uZXQvZHNhL0tjb25maWc6NjQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fUFJFUEVORFxcbm5ldC9kc2EvS2NvbmZpZy02NS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgQnJvYWRjb20gc3dpdGNoZXMgdXNpbmcgcHJlcGVuZGVkIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctNzEtXFxubmV0L2RzYS9LY29uZmlnOjcyOmNvbmZpZyBORVRfRFNBX1RBR19IRUxMQ1JFRUtcXG5uZXQvZHNhL0tjb25maWctNzMtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEhpcnNjaG1hbm4gSGVsbGNyZWVrIFRTTiBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy03Ny1cXG5uZXQvZHNhL0tjb25maWc6Nzg6Y29uZmlnIE5FVF9EU0FfVEFHX0dTV0lQXFxubmV0L2RzYS9LY29uZmlnLTc5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBMYW50aXEgLyBJbnRlbCBHU1dJUCBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy04My1cXG5uZXQvZHNhL0tjb25maWc6ODQ6Y29uZmlnIE5FVF9EU0FfVEFHX0RTQV9DT01NT05cXG5uZXQvZHNhL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG5uZXQvZHNhL0tjb25maWctODYtXFxubmV0L2RzYS9LY29uZmlnOjg3OmNvbmZpZyBORVRfRFNBX1RBR19EU0FcXG5uZXQvZHNhL0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE1hcnZlbGwgc3dpdGNoZXMgdXNpbmcgRFNBIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctOTMtXFxubmV0L2RzYS9LY29uZmlnOjk0OmNvbmZpZyBORVRfRFNBX1RBR19FRFNBXFxubmV0L2RzYS9LY29uZmlnLTk1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIEV0aGVyVHlwZSBEU0EgaGVhZGVyc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xMDAtXFxubmV0L2RzYS9LY29uZmlnOjEwMTpjb25maWcgTkVUX0RTQV9UQUdfTVQ3NjI4XFxubmV0L2RzYS9LY29uZmlnLTEwMi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgdGhlIE1UNzYyOCBlbWJlZGRlZCBzd2l0Y2hcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTA2LVxcbm5ldC9kc2EvS2NvbmZpZzoxMDc6Y29uZmlnIE5FVF9EU0FfVEFHX01US1xcbm5ldC9kc2EvS2NvbmZpZy0xMDgtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE1lZGlhdGVrIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTExMi1cXG5uZXQvZHNhL0tjb25maWc6MTEzOmNvbmZpZyBORVRfRFNBX1RBR19NWExfODYyWFhcXG5uZXQvZHNhL0tjb25maWctMTE0LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTE5LVxcbm5ldC9kc2EvS2NvbmZpZzoxMjA6Y29uZmlnIE5FVF9EU0FfVEFHX01YTF9HU1cxWFhcXG5uZXQvZHNhL0tjb25maWctMTIxLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgR1NXMXh4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEyNy1cXG5uZXQvZHNhL0tjb25maWc6MTI4OmNvbmZpZyBORVRfRFNBX1RBR19LU1pcXG5uZXQvZHNhL0tjb25maWctMTI5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNaWNyb2NoaXAgODc5NS85Mzd4Lzk0NzcvOTg5MyBmYW1pbGllcyBvZiBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xMzMtXFxubmV0L2RzYS9LY29uZmlnOjEzNDpjb25maWcgTkVUX0RTQV9UQUdfTkVUQ1xcbm5ldC9kc2EvS2NvbmZpZy0xMzUtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE5YUCBORVRDIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE0My1cXG5uZXQvZHNhL0tjb25maWc6MTQ0OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1RcXG5uZXQvZHNhL0tjb25maWctMTQ1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBOUEkgcG9ydFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNTQtXFxubmV0L2RzYS9LY29uZmlnOjE1NTpjb25maWcgTkVUX0RTQV9UQUdfT0NFTE9UXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTE1Ni1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgT2NlbG90IGZhbWlseSBvZiBzd2l0Y2hlcywgdXNpbmcgVkxBTlxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNjQtXFxubmV0L2RzYS9LY29uZmlnOjE2NTpjb25maWcgTkVUX0RTQV9UQUdfUUNBXFxubmV0L2RzYS9LY29uZmlnLTE2Ni1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNzAtXFxubmV0L2RzYS9LY29uZmlnOjE3MTpjb25maWcgTkVUX0RTQV9UQUdfUlRMNF9BXFxubmV0L2RzYS9LY29uZmlnLTE3Mi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUmVhbHRlayA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE3Ny1cXG5uZXQvZHNhL0tjb25maWc6MTc4OmNvbmZpZyBORVRfRFNBX1RBR19SVEw4XzRcXG5uZXQvZHNhL0tjb25maWctMTc5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZWFsdGVrIDggYnl0ZSBwcm90b2NvbCA0IHRhZ3NcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTgzLVxcbm5ldC9kc2EvS2NvbmZpZzoxODQ6Y29uZmlnIE5FVF9EU0FfVEFHX1JaTjFfQTVQU1dcXG5uZXQvZHNhL0tjb25maWctMTg1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZW5lc2FzIFJaL04xIEE1UFNXIHN3aXRjaFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xOTAtXFxubmV0L2RzYS9LY29uZmlnOjE5MTpjb25maWcgTkVUX0RTQV9UQUdfTEFOOTMwM1xcbm5ldC9kc2EvS2NvbmZpZy0xOTItXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIFNNU0MvTWljcm9jaGlwIExBTjkzMDMgZmFtaWx5IG9mIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE5Ni1cXG5uZXQvZHNhL0tjb25maWc6MTk3OmNvbmZpZyBORVRfRFNBX1RBR19TSkExMTA1XFxubmV0L2RzYS9LY29uZmlnLTE5OC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTlhQIFNKQTExMDUgc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjA1LVxcbm5ldC9kc2EvS2NvbmZpZzoyMDY6Y29uZmlnIE5FVF9EU0FfVEFHX1RSQUlMRVJcXG5uZXQvZHNhL0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBzd2l0Y2hlcyB1c2luZyBhIHRyYWlsZXIgdGFnXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIxMS1cXG5uZXQvZHNhL0tjb25maWc6MjEyOmNvbmZpZyBORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWljcm9jaGlwL1ZpdGVzc2UgVlNDNzN4eCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjE3LVxcbm5ldC9kc2EvS2NvbmZpZzoyMTg6Y29uZmlnIE5FVF9EU0FfVEFHX1hSUzcwMFhcXG5uZXQvZHNhL0tjb25maWctMjE5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBYUlM3MDB4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIyMy1cXG5uZXQvZHNhL0tjb25maWc6MjI0OmNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcXG5uZXQvZHNhL0tjb25maWctMjI1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IHN3aXRjaGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1MzozMS4wNzYyMzUzODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjgyMDc4MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEU0EgRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGRyaXZlcnMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZS4gSSdsbCBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiwgYGRyaXZlcnMvbmV0L2RzYS9gLiBUaGlzIGRpcmVjdG9yeSBzaG91bGQgYmUgdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSBmb3IgdGhlc2UgZHJpdmVycy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgYSBxdWljayBvdmVydmlldyBvZiB3aGF0J3MgaW1wbGVtZW50ZWQuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGxpc3RpbmcgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZGlyZWN0b3J5LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBkcml2ZXIgZmlsZXMsIG1vZHVsZSBzb3VyY2UgYW5kIHBvdGVudGlhbGx5IHNvbWUgY29tbW9uIERTQSBzdXBwb3J0IGNvZGUuIEknbSBwYXJ0aWN1bGFybHkgY3VyaW91cyB0byBzZWUgaWYgYSAnZHNhX2xvb3AnIGRyaXZlciBleGlzdHMgLSBhIGNvbW1vbiBwcmFjdGljZSBmb3IgbG9vcGJhY2sgdGVzdGluZy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiYXNlbGluZSB0byB1c2UuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZmlsZSBuYW1lcyB0aGVtc2VsdmVzLCBwb3RlbnRpYWxseSB1c2luZyBhIG1vcmUgc3lzdGVtYXRpYyBtZXRob2QgdG8gYnVpbGQgYSBxdWljayB2aWV3IG9mIHRoZSBEU0EgZHJpdmVyIGxhbmRzY2FwZSwgcHJvYmFibHkgdXNpbmcgYSBgZmluZGAgY29tbWFuZCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZW4gbW92ZSBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6MzMuMzU4MzE1NDczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODQ5MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9sb29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9Mz1iY20tc2YyLW9ianNcXHRcXHRcXHQ6PSBiY21fc2YyLm8gYmNtX3NmMl9jZnAub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXFx0Kz0gZHNhX2xvb3Aub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNi1cXHR1MTYgbWVtYmVycztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVxcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU6ZW51bSBkc2FfbG9vcF9taWJfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVxcdERTQV9MT09QX1BIWV9SRUFEX09LLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0OlxcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXFx0dTE2IHB2aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTpzdHJ1Y3QgZHNhX2xvb3BfcHJpdiB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXFx0c3RydWN0IG1paV9idXNcXHQqYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVxcdHVuc2lnbmVkIGludFxcdHBvcnRfYmFzZTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0OlxcdHN0cnVjdCBkc2FfbG9vcF9wb3J0IHBvcnRzW0RTQV9NQVhfUE9SVFNdO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTc6c3RydWN0IGRzYV9sb29wX3BkYXRhIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY4LVxcdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cXHQ9IHsgXFxcInBoeV9yZWFkX29rXFxcIiwgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc1PXN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzgtXFx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4NDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVxcdHVuc2lnbmVkIGludCBpLCBjb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XFx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6OTc6c3RhdGljIGludCBkc2FfbG9vcF9zZXR1cF9kZXZsaW5rX3Jlc291cmNlcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHNpemVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cXHRcXHRcXHRcXHRcXHQgICAgICBEU0FfTE9PUF9ERVZMSU5LX1BBUkFNX0lEX1ZUVSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgZHNhX2xvb3BfZGV2bGlua192dHVfZ2V0LCBwcyk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzUte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDA6XFx0XFx0bWVtY3B5KHBzLVxcdTAwM2Vwb3J0c1tpXS5taWIsIGRzYV9sb29wX21pYnMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlxcdFxcdCAgICAgICBzaXplb2YoZHNhX2xvb3BfbWlicykpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XFx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDYtfVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTUzOnN0YXRpYyBpbnQgZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXFx0XFx0XFx0XFx0IHUzMiBzdHJpbmdzZXQsIHVpbnQ4X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE3NDpzdGF0aWMgdm9pZCBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICAgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg1LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5OTpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cXHRcXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMDI6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAzLVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjMzOnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cXHRcXHRcXHRcXHRcXHR1OCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNDA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjUwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXFx0Ym9vbCB1bnRhZ2dlZCA9IHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg4LVxcdHUxNiBwdmlkID0gcHMtXFx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI5MDpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMi1cXHRcXHRcXHRcXHQgICAgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMTQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzIxOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZHNhX2xvb3BfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gZHNhX2xvb3BfZ2V0X3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcXHQuc2V0dXBcXHRcXHRcXHQ9IGRzYV9sb29wX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNzpcXHQudGVhcmRvd25cXHRcXHQ9IGRzYV9sb29wX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MTpcXHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXFx0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDI6XFx0LnBoeV9yZWFkXFx0XFx0PSBkc2FfbG9vcF9waHlfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XFx0LnBoeV93cml0ZVxcdFxcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XFx0LnBvcnRfYnJpZGdlX2xlYXZlXFx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XFx0LnBvcnRfc3RwX3N0YXRlX3NldFxcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ5OlxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBkc2FfbG9vcF9wb3J0X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XFx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVxcdGRzLVxcdTAwM2Vwcml2ID0gcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXFx0Lm1kaW9kcnYuZHJpdmVyXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjYtXFx0fSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XFx0LnByb2JlXFx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4OlxcdC5yZW1vdmVcXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5OlxcdC5zaHV0ZG93biA9IGRzYV9sb29wX2Rydl9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDMyOnN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcXHRyZXR1cm4gZHJ2ID09IFxcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgZHNhX2xvb3BfcGRhdGEgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVxcdFxcdC5jZCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXFx1MDAyNmRzYV9sb29wX3BkYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3OlxcdHJldCA9IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldigpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcXHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcXHRcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTAzOm1vZHVsZV9pbml0KGRzYV9sb29wX2luaXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDktXFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6MzMuNDA5MTY4NjIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0OTA4MzczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIGBuZXQvZHNhL3VzZXIuY2AgYXJvdW5kIGBkc2FfdXNlcl9zZXR1cF90Y2A6XG5cbioqRGl2aW5nIGludG8gRFNBIFVzZXIgVEMgU2V0dXAqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIGBuZXQvZHNhL3VzZXIuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBkc2FfdXNlcl9zZXR1cF90Y2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGhhcHBlbnMgaW4gdGhlIGNvbnRleHQgb2YgdHJhZmZpYyBjb250cm9sLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgbWFkbmVzcywgZGVwZW5kaW5nIG9uIGhvdyB5b3UgbG9vayBhdCBpdCEpIG9mIGJyaWRnaW5nIHVzZXJsYW5kIGNvbmZpZ3VyYXRpb25zIHRvIHRoZSBrZXJuZWwncyBUQyBmcmFtZXdvcmsgbGlrZWx5IHJlc2lkZXMuIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBob3cgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhbmQgd2hhdCBwYXJhbWV0ZXJzIGl0J3MgZXhwZWN0aW5nLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb25maWd1cmluZyBRRGlzY3MsIGZpbHRlcnMsIG9yIGJvdGg/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB0eXBpY2FsIFRDIG9wZXJhdGlvbnM6IGNyZWF0aW5nLCBkZWxldGluZywgYW5kIG1vZGlmeWluZyB0cmFmZmljIGNvbnRyb2wgcnVsZXMuIElzIGl0IHRha2luZyBuZXRsaW5rIG1lc3NhZ2VzIGFuZCB0aGVuIHRyYW5zbGF0aW5nIHRoZW0gaW50byB0aGUgYXBwcm9wcmlhdGUga2VybmVsIGNhbGxzPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgaGVyZSBmb3IgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHk/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgdGhhdCBjb3VsZCBiZSBleHBsb2l0ZWQuXG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBlcnJvciBoYW5kbGluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgdXNlci1mYWNpbmcgY29tcG9uZW50LCByb2J1c3QgZXJyb3IgY2hlY2tpbmcgaXMgcGFyYW1vdW50LiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBhbGxvdyBhIHVzZXIgdG8gYnlwYXNzIGFjY2VzcyByZXN0cmljdGlvbnMgb3IgZXZlbiBjcmFzaCB0aGUga2VybmVsLiBJJ20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoaXMgZnVuY3Rpb24gYXMgd2VsbCwgbWFraW5nIHN1cmUgYWxsIHJlc291cmNlcyBhcmUgcHJvcGVybHkgbWFuYWdlZCBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBhcmUgYXZvaWRlZC4gSSdsbCBhbHNvIGNoZWNrIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBicmlkZ2Ugb3IgVkxBTiBpbnRlcmZhY2VzOyB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBUQyBjb25maWd1cmF0aW9ucz8gSG93IGFyZSB0aGUgRFNBLXNwZWNpZmljIHBhcmFtZXRlcnMgaGFuZGxlZCwgYW5kIGhvdyBhcmUgdGhleSB0cmFuc2xhdGVkIGludG8gdGhlIFRDIGRhdGEgc3RydWN0dXJlcz8gTGV0J3MgZ2V0IGNyYWNraW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjM2LjQ1ODI1NDg5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZHNhL3VzZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzAwOlxcdFxcbjE3MDE6XFx0XFx0XFx0YmxvY2tfY2IgPSBmbG93X2Jsb2NrX2NiX2FsbG9jKGNiLCBkZXYsIGRldiwgTlVMTCk7XFxuMTcwMjpcXHRcXHRcXHRpZiAoSVNfRVJSKGJsb2NrX2NiKSlcXG4xNzAzOlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJsb2NrX2NiKTtcXG4xNzA0OlxcdFxcbjE3MDU6XFx0XFx0XFx0Zmxvd19ibG9ja19jYl9hZGQoYmxvY2tfY2IsIGYpO1xcbjE3MDY6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2YmxvY2tfY2ItXFx1MDAzZWRyaXZlcl9saXN0LCBcXHUwMDI2ZHNhX3VzZXJfYmxvY2tfY2JfbGlzdCk7XFxuMTcwNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNzA4OlxcdFxcdGNhc2UgRkxPV19CTE9DS19VTkJJTkQ6XFxuMTcwOTpcXHRcXHRcXHRibG9ja19jYiA9IGZsb3dfYmxvY2tfY2JfbG9va3VwKGYtXFx1MDAzZWJsb2NrLCBjYiwgZGV2KTtcXG4xNzEwOlxcdFxcdFxcdGlmICghYmxvY2tfY2IpXFxuMTcxMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xNzEyOlxcdFxcbjE3MTM6XFx0XFx0XFx0Zmxvd19ibG9ja19jYl9yZW1vdmUoYmxvY2tfY2IsIGYpO1xcbjE3MTQ6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmJsb2NrX2NiLVxcdTAwM2Vkcml2ZXJfbGlzdCk7XFxuMTcxNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNzE2OlxcdFxcdGRlZmF1bHQ6XFxuMTcxNzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTcxODpcXHRcXHR9XFxuMTcxOTpcXHR9XFxuMTcyMDpcXHRcXG4xNzIxOlxcdHN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soc3RydWN0IGRzYV9wb3J0ICpkcCxcXG4xNzIyOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvKVxcbjE3MjM6XFx0e1xcbjE3MjQ6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRwKTtcXG4xNzI1OlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG4xNzI2OlxcdFxcdGludCBlcnI7XFxuMTcyNzpcXHRcXG4xNzI4OlxcdFxcdC8qIFRoZSB1bmJpbmQgZ29lcyB0byB0aGUgc2lkZSB0aGF0IHRvb2sgdGhlIGJpbmQuICovXFxuMTcyOTpcXHRcXHRpZiAoYm8tXFx1MDAzZWNvbW1hbmQgPT0gRkxPV19CTE9DS19CSU5EKSB7XFxuMTczMDpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4xNzMxOlxcdFxcdFxcdGlmIChkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKVxcbjE3MzI6XFx0XFx0XFx0XFx0ZXJyID0gZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXFx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCxcXG4xNzMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYm8pO1xcbjE3MzQ6XFx0XFx0XFx0ZHAtXFx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcXG4xNzM1OlxcdFxcdFxcdGlmIChkcC1cXHUwMDNlZnRfb25fc3dpdGNoKVxcbjE3MzY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNzM3OlxcdFxcdH0gZWxzZSBpZiAoZHAtXFx1MDAzZWZ0X29uX3N3aXRjaCkge1xcbjE3Mzg6XFx0XFx0XFx0cmV0dXJuIGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVxcdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsIGJvKTtcXG4xNzM5OlxcdFxcdH1cXG4xNzQwOlxcdFxcbjE3NDE6XFx0XFx0aWYgKCFjb25kdWl0LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0dXBfdGMpXFxuMTc0MjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTc0MzpcXHRcXG4xNzQ0OlxcdFxcdHJldHVybiBjb25kdWl0LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIGJvKTtcXG4xNzQ1OlxcdH1cXG4xNzQ2OlxcdFxcbjE3NDc6XFx0c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4xNzQ4OlxcdFxcdFxcdFxcdCAgICAgdm9pZCAqdHlwZV9kYXRhKVxcbjE3NDk6XFx0e1xcbjE3NTA6XFx0XFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcXG4xNzUxOlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG4xNzUyOlxcdFxcbjE3NTM6XFx0XFx0c3dpdGNoICh0eXBlKSB7XFxuMTc1NDpcXHRcXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbjE3NTU6XFx0XFx0XFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKGRldiwgdHlwZV9kYXRhKTtcXG4xNzU2OlxcdFxcdGNhc2UgVENfU0VUVVBfRlQ6XFxuMTc1NzpcXHRcXHRcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHAsIHR5cGVfZGF0YSk7XFxuMTc1ODpcXHRcXHRkZWZhdWx0OlxcbjE3NTk6XFx0XFx0XFx0YnJlYWs7XFxuMTc2MDpcXHRcXHR9XFxuMTc2MTpcXHRcXG4xNzYyOlxcdFxcdGlmICghZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9zZXR1cF90YylcXG4xNzYzOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xNzY0OlxcdFxcbjE3NjU6XFx0XFx0cmV0dXJuIGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVxcdTAwM2VpbmRleCwgdHlwZSwgdHlwZV9kYXRhKTtcXG4xNzY2OlxcdH1cXG4xNzY3OlxcdFxcbjE3Njg6XFx0c3RhdGljIGludCBkc2FfdXNlcl9nZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4xNzY5OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICpuZmMsIHUzMiAqcnVsZV9sb2NzKVxcbjE3NzA6XFx0e1xcbjE3NzE6XFx0XFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcXG4xNzcyOlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0aWYgKCFkcy1cXHUwMDNlb3BzLVxcdTAwM2VnZXRfcnhuZmMpXFxuMTc3NTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTc3NjpcXHRcXG4xNzc3OlxcdFxcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VnZXRfcnhuZmMoZHMsIGRwLVxcdTAwM2VpbmRleCwgbmZjLCBydWxlX2xvY3MpO1xcbjE3Nzg6XFx0fVxcbjE3Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjM2LjQ1ODQxNTgzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTU0Njg0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIENoYWluKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUuIFRoZSBmdW5jdGlvbiBgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgIHNlZW1zIHRvIGJlIHRoZSBrZXkgcGxheWVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hlbiBkb2VzIHRoaXMgYWN0dWFsbHkgZ2V0IHRyaWdnZXJlZD8gSSBzZWUgaXQncyBjYWxsZWQgd2l0aGluIGBkc2FfdXNlcl9zZXR1cF90Y2AsIHNwZWNpZmljYWxseSB3aGVuIGBkc2FfdXNlcl9zZXR1cF90Y2AgaXMgaW52b2tlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIHR5cGUgYFRDX1NFVFVQX0ZUYC4gXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzOiB3aGF0J3MgdGhlIGNhbGwgc3RhY2sgaGVyZT8gV2hlbiBkb2VzIGBuZG9fc2V0dXBfdGNgLCB0aGUgbmV0IGRldmljZSBvcGVyYXRvciBzZXR1cCBmdW5jdGlvbiwgZ2V0IGNhbGxlZCB3aXRoIGBUQ19TRVRVUF9GVGA/IE5lZWQgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBncmFwaC4gTG9va3MgbGlrZSBJJ2xsIG5lZWQgdG8gZ3JlcCB0aGUga2VybmVsIHNvdXJjZSBmb3IgdGhlIHVzZSBvZiB0aGF0IGZsYWcuIExldCdzIHN0YXJ0IHRoZXJlIHRvIGZpbmQgdGhlIHBhcmVudCBjYWxsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA4MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6MzguNDUzODg2NzUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY1NDM2NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRDX1NFVFVQX0ZUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0zMDU9bmRvX3NldHVwX3RjOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTMwOS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6MzEwOlxcdEZvciBgYFRDX1NFVFVQX0JMT0NLYGAgYW5kIGBgVENfU0VUVVBfRlRgYCBgYHJ0bmxfbG9ja2BgIG1heSBvclxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMTEtXFx0bWF5IG5vdCBiZSBoZWxkLCBhbmQgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGlzIG5vdCBoZWxkLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDozMTI6XFx0YGBUQ19TRVRVUF9CTE9DS2BgIHJ1bnMgdW5kZXIgYGBibG9jay1cXHUwMDNlY2JfbG9ja2BgIGFuZCBgYFRDX1NFVFVQX0ZUYGBcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMzEzLVxcdHJ1bnMgdW5kZXIgYGBmbG93dGFibGUtXFx1MDAzZWZsb3dfYmxvY2tfbG9ja2BgLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zMzI0PXN0YXRpYyBpbnQgYWlyb2hhX2Rldl90Y19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zMzMyLVxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozMzMzOlxcdGNhc2UgVENfU0VUVVBfRlQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zMzM0LVxcdFxcdHJldHVybiBhaXJvaGFfZGV2X3NldHVwX3RjX2Jsb2NrKGRldiwgdHlwZV9kYXRhKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTY2OT1pbnQgbXRrX2V0aF9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTY3My1cXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjY3NDpcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTY3NS1cXHRcXHRyZXR1cm4gbXRrX2V0aF9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfd2VkLmM9Mjc2MD1tdGtfd2VkX3NldHVwX3RjKHN0cnVjdCBtdGtfd2VkX2RldmljZSAqd2VkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3dlZC5jLTI3NjktXFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfd2VkLmM6Mjc3MDpcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a193ZWQuYy0yNzcxLVxcdFxcdHJldHVybiBtdGtfd2VkX3NldHVwX3RjX2Jsb2NrKGh3LCBkZXYsIHR5cGVfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcmVwL3RjLmM9MjQ3PWludCBtbHg1ZV9yZXBfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcmVwL3RjLmMtMjYwLVxcdFxcdFxcdFxcdFxcdFxcdCAgcHJpdiwgcHJpdiwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3JlcC90Yy5jOjI2MTpcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYy0yNjItXFx0XFx0cmV0dXJuIGZsb3dfYmxvY2tfY2Jfc2V0dXBfc2ltcGxlKHR5cGVfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYz02NjI9aW50IG1seDVlX3JlcF9pbmRyX3NldHVwX2NiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBRZGlzYyAqc2NoLCB2b2lkICpjYl9wcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3JlcC90Yy5jLTY3NC1cXHRcXHRcXHRcXHRcXHRcXHQgIGRhdGEsIGNsZWFudXApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9yZXAvdGMuYzo2NzU6XFx0Y2FzZSBUQ19TRVRVUF9GVDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vcmVwL3RjLmMtNjc2LVxcdFxcdHJldHVybiBtbHg1ZV9yZXBfaW5kcl9zZXR1cF9ibG9jayhuZXRkZXYsIHNjaCwgY2JfcHJpdiwgdHlwZV9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3RjLmM9Nzc9bnNpbV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3RjLmMtOTAtXFx0XFx0XFx0XFx0XFx0XFx0ICBucywgbnMsIHRydWUpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS90Yy5jOjkxOlxcdGNhc2UgVENfU0VUVVBfRlQ6XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3RjLmMtOTItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L25wdS5jPTM3MT1pbnQgbXQ3Nl9ucHVfbmV0X3NldHVwX3RjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9ucHUuYy0zODQtXFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L25wdS5jOjM4NTpcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbnB1LmMtMzg2LVxcdFxcdHJldHVybiBtdDc2X25wdV9zZXR1cF90Y19ibG9jayhwaHksIGRldiwgdHlwZV9kYXRhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9OTU4PWVudW0gdGNfc2V0dXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTk3My1cXHRUQ19TRVRVUF9RRElTQ19UQVBSSU8sXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo5NzQ6XFx0VENfU0VUVVBfRlQsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC05NzUtXFx0VENfU0VUVVBfUURJU0NfRVRTLFxcbi0tXFxubmV0L2RzYS91c2VyLmM9MTcyMT1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNzMxLVxcdFxcdGlmIChkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKVxcbm5ldC9kc2EvdXNlci5jOjE3MzI6XFx0XFx0XFx0ZXJyID0gZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9zZXR1cF90YyhkcywgZHAtXFx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCxcXG5uZXQvZHNhL3VzZXIuYy0xNzMzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYm8pO1xcbi0tXFxubmV0L2RzYS91c2VyLmMtMTczNy1cXHR9IGVsc2UgaWYgKGRwLVxcdTAwM2VmdF9vbl9zd2l0Y2gpIHtcXG5uZXQvZHNhL3VzZXIuYzoxNzM4OlxcdFxcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cXHUwMDNlaW5kZXgsIFRDX1NFVFVQX0ZULCBibyk7XFxubmV0L2RzYS91c2VyLmMtMTczOS1cXHR9XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNzQzLVxcbm5ldC9kc2EvdXNlci5jOjE3NDQ6XFx0cmV0dXJuIGNvbmR1aXQtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xcbm5ldC9kc2EvdXNlci5jLTE3NDUtfVxcbi0tXFxubmV0L2RzYS91c2VyLmM9MTc0Nz1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTc1NS1cXHRcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soZGV2LCB0eXBlX2RhdGEpO1xcbm5ldC9kc2EvdXNlci5jOjE3NTY6XFx0Y2FzZSBUQ19TRVRVUF9GVDpcXG5uZXQvZHNhL3VzZXIuYy0xNzU3LVxcdFxcdHJldHVybiBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhkcCwgdHlwZV9kYXRhKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTIzOD1zdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfaW5kcl9vZmZsb2FkX2NtZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI0Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyNDc6XFx0cmV0dXJuIGZsb3dfaW5kcl9kZXZfc2V0dXBfb2ZmbG9hZChkZXYsIE5VTEwsIFRDX1NFVFVQX0ZULCBmbG93dGFibGUsIGJvLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI0OC1cXHRcXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX2luZHJfY2xlYW51cCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyNTE9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kKHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjYxLVxcdGRvd25fd3JpdGUoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmxvd19ibG9ja19sb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyNjI6XFx0ZXJyID0gZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0dXBfdGMoZGV2LCBUQ19TRVRVUF9GVCwgYm8pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI2My1cXHR1cF93cml0ZShcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo0MC4zMTkzMzAwMTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE3NTkzNDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERTQSBPZmZsb2FkIFBhdGgqKlxuXG5Pa2F5LCBzbyBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIEl0J3MgY2FsbGluZyBgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldHVwX3RjKGRldiwgVENfU0VUVVBfRlQsIGJvKWAuIFJpZ2h0LCBhbmQgdGhhdCBgbmRvX3NldHVwX3RjYCBmdW5jdGlvbiBpcyBiZWluZyBhc3NpZ25lZCB3aXRoaW4gYG5ldC9kc2EvdXNlci5jYCB0byBgZHNhX3VzZXJfbmV0ZGV2X29wc2AgYXMgYGRzYV91c2VyX3NldHVwX3RjYC4gVGhpcyBtZWFucyB0aGF0IHdoZW4gd2UgY29uZmlndXJlIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCB1c2luZyBzb21ldGhpbmcgbGlrZSB0aGF0IGBuZnRgIGNvbW1hbmQgKGFuZCBzcGVjaWZ5aW5nIHRoZSBgZHNhX3VzZXJfZGV2YCksIGl0IGV2ZW50dWFsbHkgZ29lcyB0aHJvdWdoIHRoaXMgcGF0aDogYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWRgIC1cdTAwM2UgIGBuZG9fc2V0dXBfdGNgLCB3aXRoIHRoZSBgVENfU0VUVVBfRlRgIHBhcmFtZXRlci4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgZXhwZWN0ZWQgY2hhaW4gb2YgZXZlbnRzLlxuXG5Ob3csIGEgY3JpdGljYWwgcXVlc3Rpb24gYXJpc2VzIGluIG15IG1pbmQ6IGNhbiB0aGVzZSBEU0EgZGV2aWNlcyBhY3R1YWxseSBiZSBpbnN0YW50aWF0ZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gU29tZXRoaW5nIGxpa2UgUUVNVSBvciBldmVuIHN5emthbGxlcj8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgdGVzdGFiaWxpdHkgb2YgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IERTQSBzd2l0Y2hlcyBhbmQgZGV2aWNlcyBhcmUgYWN0dWFsbHkgY3JlYXRlZCBhbmQgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgcHJvdmlkZXMgYSBjb21wYXRpYmxlIGludGVyZmFjZS5cblxuSeKAmW0gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgYGRzYV9sb29wYC4gSXMgdGhhdCBhIHNvZnR3YXJlIG9yIG1vY2sgZHJpdmVyLCBvciBpcyBpdCBzb21ldGhpbmcgbW9yZSB0YW5naWJsZT8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuY2AgYW5kIGBkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3BfYmRpbmZvLmNgIHRvIHNlZSBob3cgaXQncyBsb2FkZWQgYW5kIGNyZWF0ZWQuIEdldHRpbmcgdGhhdCBhbnN3ZXJlZCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0byBiZXN0IGFwcHJvYWNoIHRoZSBldmFsdWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUzNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo0My40OTUyNjcwMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNDY4NjE3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkc2FfbG9vcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9Mz1iY20tc2YyLW9ianNcXHRcXHRcXHQ6PSBiY21fc2YyLm8gYmNtX3NmMl9jZnAub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXFx0Kz0gZHNhX2xvb3Aub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNi1cXHR1MTYgbWVtYmVycztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVxcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU6ZW51bSBkc2FfbG9vcF9taWJfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVxcdERTQV9MT09QX1BIWV9SRUFEX09LLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0OlxcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXFx0dTE2IHB2aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTpzdHJ1Y3QgZHNhX2xvb3BfcHJpdiB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXFx0c3RydWN0IG1paV9idXNcXHQqYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVxcdHVuc2lnbmVkIGludFxcdHBvcnRfYmFzZTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0OlxcdHN0cnVjdCBkc2FfbG9vcF9wb3J0IHBvcnRzW0RTQV9NQVhfUE9SVFNdO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTc6c3RydWN0IGRzYV9sb29wX3BkYXRhIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY4LVxcdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cXHQ9IHsgXFxcInBoeV9yZWFkX29rXFxcIiwgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc1PXN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzgtXFx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4NDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVxcdHVuc2lnbmVkIGludCBpLCBjb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XFx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6OTc6c3RhdGljIGludCBkc2FfbG9vcF9zZXR1cF9kZXZsaW5rX3Jlc291cmNlcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHNpemVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cXHRcXHRcXHRcXHRcXHQgICAgICBEU0FfTE9PUF9ERVZMSU5LX1BBUkFNX0lEX1ZUVSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgZHNhX2xvb3BfZGV2bGlua192dHVfZ2V0LCBwcyk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzUte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDA6XFx0XFx0bWVtY3B5KHBzLVxcdTAwM2Vwb3J0c1tpXS5taWIsIGRzYV9sb29wX21pYnMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlxcdFxcdCAgICAgICBzaXplb2YoZHNhX2xvb3BfbWlicykpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XFx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDYtfVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTUzOnN0YXRpYyBpbnQgZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXFx0XFx0XFx0XFx0IHUzMiBzdHJpbmdzZXQsIHVpbnQ4X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE3NDpzdGF0aWMgdm9pZCBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICAgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg1LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5OTpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cXHRcXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMDI6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAzLVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjMzOnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cXHRcXHRcXHRcXHRcXHR1OCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNDA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjUwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXFx0Ym9vbCB1bnRhZ2dlZCA9IHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg4LVxcdHUxNiBwdmlkID0gcHMtXFx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI5MDpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMi1cXHRcXHRcXHRcXHQgICAgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMTQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzIxOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZHNhX2xvb3BfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gZHNhX2xvb3BfZ2V0X3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcXHQuc2V0dXBcXHRcXHRcXHQ9IGRzYV9sb29wX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNzpcXHQudGVhcmRvd25cXHRcXHQ9IGRzYV9sb29wX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MTpcXHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXFx0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDI6XFx0LnBoeV9yZWFkXFx0XFx0PSBkc2FfbG9vcF9waHlfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XFx0LnBoeV93cml0ZVxcdFxcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XFx0LnBvcnRfYnJpZGdlX2xlYXZlXFx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XFx0LnBvcnRfc3RwX3N0YXRlX3NldFxcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ5OlxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBkc2FfbG9vcF9wb3J0X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XFx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVxcdGRzLVxcdTAwM2Vwcml2ID0gcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXFx0Lm1kaW9kcnYuZHJpdmVyXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjYtXFx0fSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XFx0LnByb2JlXFx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4OlxcdC5yZW1vdmVcXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5OlxcdC5zaHV0ZG93biA9IGRzYV9sb29wX2Rydl9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDMyOnN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcXHRyZXR1cm4gZHJ2ID09IFxcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgZHNhX2xvb3BfcGRhdGEgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVxcdFxcdC5jZCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXFx1MDAyNmRzYV9sb29wX3BkYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3OlxcdHJldCA9IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldigpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcXHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcXHRcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTAzOm1vZHVsZV9pbml0KGRzYV9sb29wX2luaXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDktXFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6NDQuMzA5OTU3NzY4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDU0NDU5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgYGRzYV9sb29wYCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZHNhX2xvb3BgLiBSaWdodCwgaXQncyBhIHNvZnR3YXJlIG1vY2sgZm9yIGEgRFNBIHN3aXRjaCBkcml2ZXIuIFRoZSBpbXBvcnRhbnQgYml0IGlzIHRoYXQgaXQgc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBjb25uZWN0aW9ucyB0byBhIGZpeGVkIFBIWSwgTURJTywgYW5kLCBlc3NlbnRpYWxseSwgbG9vcGJhY2sgdGVzdGluZy4gR29vZCB0byBrbm93LiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSBzb3VyY2UgZmlsZSBJIGV4cGVjdCB0byBiZSBpbnZvbHZlZCBpbiBpdHMgY29yZSBmdW5jdGlvbmFsaXR5OiBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wX2JkaW5mby5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGhhbmRsZXMgaXRzIGJ1cyBkYXRhIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc0MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjUzOjQ2LjM1NTQwNzA1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvZHNhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImJjbV9zZjIuY1wiLFxuICAgIFwiYmNtX3NmMi5oXCIsXG4gICAgXCJiY21fc2YyX2NmcC5jXCIsXG4gICAgXCJiY21fc2YyX3JlZ3MuaFwiLFxuICAgIFwiZHNhX2xvb3AuY1wiLFxuICAgIFwia3M4OTk1LmNcIixcbiAgICBcImxhbjkzMDMtY29yZS5jXCIsXG4gICAgXCJsYW45MzAzLmhcIixcbiAgICBcImxhbjkzMDNfaTJjLmNcIixcbiAgICBcImxhbjkzMDNfbWRpby5jXCIsXG4gICAgXCJtdDc1MzAtbWRpby5jXCIsXG4gICAgXCJtdDc1MzAtbW1pby5jXCIsXG4gICAgXCJtdDc1MzAuY1wiLFxuICAgIFwibXQ3NTMwLmhcIixcbiAgICBcIm10NzYyOC5jXCIsXG4gICAgXCJtdjg4ZTYwNjAuY1wiLFxuICAgIFwibXY4OGU2MDYwLmhcIixcbiAgICBcInJ6bjFfYTVwc3cuY1wiLFxuICAgIFwicnpuMV9hNXBzdy5oXCIsXG4gICAgXCJ2aXRlc3NlLXZzYzczeHgtY29yZS5jXCIsXG4gICAgXCJ2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0uY1wiLFxuICAgIFwidml0ZXNzZS12c2M3M3h4LXNwaS5jXCIsXG4gICAgXCJ2aXRlc3NlLXZzYzczeHguaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJiNTNcIixcbiAgICBcImhpcnNjaG1hbm5cIixcbiAgICBcImxhbnRpcVwiLFxuICAgIFwibWljcm9jaGlwXCIsXG4gICAgXCJtb3RvcmNvbW1cIixcbiAgICBcIm12ODhlNnh4eFwiLFxuICAgIFwibXhsODYyeHhcIixcbiAgICBcIm5ldGNcIixcbiAgICBcIm9jZWxvdFwiLFxuICAgIFwicWNhXCIsXG4gICAgXCJyZWFsdGVrXCIsXG4gICAgXCJzamExMTA1XCIsXG4gICAgXCJ4cnM3MDB4XCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6NDYuMzU1NDg4ODU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjUyMjY0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IHByb21wdCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQgd291bGQgdGhpbmsgYWJvdXQgaXQ6XG5cbioqRXhhbWluaW5nIERTQSBMb29wIENyZWF0aW9uIGFuZCBDb25kdWl0IEJpbmRpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEU0EgbG9vcCBpcyBiZWluZyBjcmVhdGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0J3MgYWN0dWFsbHkgdGllZCBpbnRvIGEgY29uZHVpdC4gVGhlIGNvcmUgbG9naWMgaXMgbGlrZWx5IHdpdGhpbiBgZHNhX2xvb3AuY2AsIGFuZCB0aGUga2V5IGZ1bmN0aW9uIHRvIGRpc3NlY3QgaXMgYGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldmAuIFRoYXQgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBwcmV0dHkgZ29vZCBoaW50IOKAkyBpdCBzdWdnZXN0cyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBsb29wLCB0aGUgc3dpdGNoLCBhbmQgdGhlIE1ESU8gKE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQpIGludGVyZmFjZSwgd2hpY2ggaXMgdmVyeSByZWxldmFudCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBQSFlzLiBNeSBndWVzcyBpcyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHdoZXJlIHRoZSBsb29wIGlzIGluaXRpYWxpemVkLCBhbmQgdGhlbiBzb21laG93LCBhIGNvbmR1aXQgKG9yIGl0cyByZXByZXNlbnRhdGlvbikgZ2V0cyBhc3NvY2lhdGVkIHdpdGggaXQsIHByb2JhYmx5IHVzaW5nIGEgcG9pbnRlciBvciBzb21lIGRhdGEgc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFzIHdlbGwsIGFzIHRob3NlIHdvdWxkIGNvbnRhaW4gYWxsIHRoZSByZWxldmFudCBkYXRhLiBMZXQncyBzdGFydCByZWFkaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM1MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo0OC43ODA3MTc4MDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQ1OlxcdFxcbiA0NDY6XFx0c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KHZvaWQpXFxuIDQ0NzpcXHR7XFxuIDQ0ODpcXHRcXHRzdGF0aWMgc3RydWN0IGRzYV9sb29wX3BkYXRhIGRzYV9sb29wX3BkYXRhID0ge1xcbiA0NDk6XFx0XFx0XFx0LmNkID0ge1xcbiA0NTA6XFx0XFx0XFx0XFx0LnBvcnRfbmFtZXNbMF0gPSBcXFwibGFuMVxcXCIsXFxuIDQ1MTpcXHRcXHRcXHRcXHQucG9ydF9uYW1lc1sxXSA9IFxcXCJsYW4yXFxcIixcXG4gNDUyOlxcdFxcdFxcdFxcdC5wb3J0X25hbWVzWzJdID0gXFxcImxhbjNcXFwiLFxcbiA0NTM6XFx0XFx0XFx0XFx0LnBvcnRfbmFtZXNbM10gPSBcXFwibGFuNFxcXCIsXFxuIDQ1NDpcXHRcXHRcXHRcXHQucG9ydF9uYW1lc1tEU0FfTE9PUF9DUFVfUE9SVF0gPSBcXFwiY3B1XFxcIixcXG4gNDU1OlxcdFxcdFxcdH0sXFxuIDQ1NjpcXHRcXHRcXHQubmFtZSA9IFxcXCJEU0EgbW9ja3VwIGRyaXZlclxcXCIsXFxuIDQ1NzpcXHRcXHRcXHQuZW5hYmxlZF9wb3J0cyA9IDB4MWYsXFxuIDQ1ODpcXHRcXHRcXHQubmV0ZGV2ID0gXFxcImV0aDBcXFwiLFxcbiA0NTk6XFx0XFx0fTtcXG4gNDYwOlxcdFxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuIDQ2MTpcXHRcXHRpbnQgcmV0ID0gLUVOT0RFVjtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0YnVzID0gbWRpb19maW5kX2J1cyhcXFwiZml4ZWQtMFxcXCIpO1xcbiA0NjQ6XFx0XFx0aWYgKFdBUk5fT04oIWJ1cykpXFxuIDQ2NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0NjY6XFx0XFxuIDQ2NzpcXHRcXHRzd2l0Y2hfbWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIDMxKTtcXG4gNDY4OlxcdFxcdGlmIChJU19FUlIoc3dpdGNoX21kaW9kZXYpKVxcbiA0Njk6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdFxcdHN3aXRjaF9tZGlvZGV2LVxcdTAwM2VidXNfbWF0Y2ggPSBkc2FfbG9vcF9idXNfbWF0Y2g7XFxuIDQ3MjpcXHRcXHRzd2l0Y2hfbWRpb2Rldi1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBcXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XFxuIDQ3MzpcXHRcXG4gNDc0OlxcdFxcdHJldCA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN3aXRjaF9tZGlvZGV2KTtcXG4gNDc1OlxcdFxcdGlmIChyZXQpXFxuIDQ3NjpcXHRcXHRcXHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcXG4gNDc3OlxcdG91dDpcXG4gNDc4OlxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2KTtcXG4gNDc5OlxcdFxcdHJldHVybiByZXQ7XFxuIDQ4MDpcXHR9XFxuIDQ4MTpcXHRcXG4gNDgyOlxcdHN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcXG4gNDgzOlxcdHtcXG4gNDg0OlxcdFxcdHVuc2lnbmVkIGludCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo0OC43ODA3ODU1MjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA3NjY1NTA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERTQSBGcmFtZXdvcmsgYW5kIFN5emthbGxlcidzIEludGVyYWN0aW9uKipcblxuT2theSwgc28gYE5FVF9EU0FgIGxvb2tzIGxpa2UgdGhlIGNlbnRyYWwgRFNBIGZyYW1ld29yaywgbGl2aW5nIGluIGBuZXQvZHNhL2AsIHNwZWNpZmljYWxseSBpbiBgdXNlci5jYCwgYGNvbmR1aXQuY2AsIGFuZCBgZHNhLmNgLCBhcyB5b3Ugd291bGQgZXhwZWN0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBEU0EuIEFyZSB0aGVyZSBhbnkgc3lzIGRlc2NyaXB0aW9ucyBpbiBzeXprYWxsZXIgcmVsYXRlZCB0byBpdCwgb3IgaXMgaXQgdHJ5aW5nIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIG5ldGxpbmsgZmxvd3RhYmxlIG9mZmxvYWRzIG9yIG5ldGRldmljZXMgaW4gYSB3YXkgdGhhdCByZWxhdGVzP1xuXG5JIGtub3cgc3l6a2FsbGVyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBjcmVhdGUgYW5kIGNvbmZpZ3VyZSBhbGwgc29ydHMgb2YgbmV0d29yayBlbGVtZW50czogZGV2aWNlcywgYnJpZGdlcywgdmV0aCBwYWlycywgbmV0ZmlsdGVyIHRhYmxlcy9mbG93dGFibGVzLCB0YyBmaWx0ZXJzL2Jsb2NrcywgYW5kIGRldmxpbmsgb2JqZWN0cy4gSXQncyBleHRlbnNpdmUuIEFuZCBzaW5jZSBgbmV0L2RzYS9gIHNpdHMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzcGFjZSAoYG5ldC9gKSwgaXQgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gY2hlY2suXG5cbkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgcGF0Y2ggZGV0YWlscyBwcm92aWRlZC5cblxuVGhlIGRpZmYgaW50cm9kdWNlcyBhIGBmdF9vbl9zd2l0Y2hgIGJvb2xlYW4gdG8gdGhlIGBkc2FfcG9ydGAgc3RydWN0LiBUaGlzIGlzIGludGVyZXN0aW5nLiBJdCBpbmRpY2F0ZXMgYSBkZWNpc2lvbiBwb2ludDogd2hldGhlciBmbG93dGFibGUgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCBhIHVzZXIgcG9ydCBhcmUgaGFuZGxlZCBieSB0aGUgc3dpdGNoIGRpcmVjdGx5IG9yIHRocm91Z2ggdGhlIGNvbmR1aXQuIFRoZSBjb21tZW50cyBzcGVjaWZ5IHRoYXQgdGhpcyBpcyBkZWNpZGVkIGF0IGJpbmQgdGltZSBhbmQgZG9lc24ndCB1c2UgdGhlIHVzdWFsIGJpdCBmaWVsZHMsIHNvIGl0IGxpa2VseSBuZWVkcyBhIHNwZWNpYWwgaGFuZGxpbmcuXG5cblRoZSBrZXkgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBmbG93dGFibGUgYmxvY2sgaXMgc2V0IHVwIChgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgKS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIG5vdyB0YWtlcyBhIGBkc2FfcG9ydGAgc3RydWN0dXJlIGFuZCBgZmxvd19ibG9ja19vZmZsb2FkYCBhcyBhcmd1bWVudHMuIFRoZSBpbXBvcnRhbnQgbG9naWMgc2VlbXMgdG8gYmUgYXJvdW5kIHRoaXMgbmV3IGJvb2xlYW4gZmxhZyBgZHAtXHUwMDNlZnRfb25fc3dpdGNoYC5cblxuV2hlbiBiaW5kaW5nLCB0aGUgY29kZSBjaGVja3MgaWYgdGhlIHN3aXRjaCdzIG9wZXJhdGlvbnMgc3VwcG9ydCBwb3J0IHNldHVwIGZvciB0cmFmZmljIGNvbnRyb2wuIElmIHNvLCBgZnRfb25fc3dpdGNoYCBpcyBzZXQgYmFzZWQgb24gdGhpcy4gIElmIG5vdCwgaXQgZmFsbHMgYmFjayB0byB0aGUgY29uZHVpdCdzIGBuZG9fc2V0dXBfdGNgLiBUaGUgdW5iaW5kIGFjdGlvbiBpcyBkaXJlY3RlZCB0byB0aGUgcGFydHkgd2hpY2ggdG9vayB0aGUgYmluZC5cblxuVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzd2l0Y2ggaGFzIGl0cyBvd24gd2F5IG9mIGhhbmRsaW5nIGZsb3d0YWJsZXMsIHRoZW4gaXQgd2lsbDsgb3RoZXJ3aXNlLCBpdCBpcyBwYXNzZWQgb24gdG8gdGhlIGNvbmR1aXQuIFRoaXMgbWFrZXMgc2Vuc2UuXG5cbkxhc3RseSwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYE5FVF9EU0FgIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI3OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo1NC44NTc0NDI4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNTg2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX0RTQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9LY29uZmlnLTItXFxubmV0L2RzYS9LY29uZmlnOjM6bWVudWNvbmZpZyBORVRfRFNBXFxubmV0L2RzYS9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkRpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTYtXFxubmV0L2RzYS9LY29uZmlnOjE3OmlmIE5FVF9EU0FcXG5uZXQvZHNhL0tjb25maWctMTgtXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjAtXFxubmV0L2RzYS9LY29uZmlnOjIxOmNvbmZpZyBORVRfRFNBX1RBR19OT05FXFxubmV0L2RzYS9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJOby1vcCB0YWcgZHJpdmVyXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTI2LVxcbm5ldC9kc2EvS2NvbmZpZzoyNzpjb25maWcgTkVUX0RTQV9UQUdfQVI5MzMxXFxubmV0L2RzYS9LY29uZmlnLTI4LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBBdGhlcm9zIEFSOTMzMSBTb0Mgd2l0aCBidWlsdC1pbiBzd2l0Y2hcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMzItXFxubmV0L2RzYS9LY29uZmlnOjMzOmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0NPTU1PTlxcbm5ldC9kc2EvS2NvbmZpZy0zNC1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTM2LVxcbm5ldC9kc2EvS2NvbmZpZzozNzpjb25maWcgTkVUX0RTQV9UQUdfQlJDTVxcbm5ldC9kc2EvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgQnJvYWRjb20gc3dpdGNoZXMgdXNpbmcgaW4tZnJhbWUgaGVhZGVyc1xcXCJcXG5uZXQvZHNhL0tjb25maWc6Mzk6XFx0c2VsZWN0IE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXFxubmV0L2RzYS9LY29uZmlnLTQwLVxcdGhlbHBcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy00My1cXG5uZXQvZHNhL0tjb25maWc6NDQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fTEVHQUNZXFxubmV0L2RzYS9LY29uZmlnLTQ1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBCQ002M3h4IGxlZ2FjeSBzd2l0Y2hlcyB1c2luZyBpbi1mcmFtZSBoZWFkZXJzXFxcIlxcbm5ldC9kc2EvS2NvbmZpZzo0NjpcXHRzZWxlY3QgTkVUX0RTQV9UQUdfQlJDTV9DT01NT05cXG5uZXQvZHNhL0tjb25maWctNDctXFx0aGVscFxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTUzLVxcbm5ldC9kc2EvS2NvbmZpZzo1NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9MRUdBQ1lfRkNTXFxubmV0L2RzYS9LY29uZmlnLTU1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBCQ001M3h4IGxlZ2FjeSBzd2l0Y2hlcyB1c2luZyBpbi1mcmFtZSBoZWFkZXJzXFxcIlxcbm5ldC9kc2EvS2NvbmZpZzo1NjpcXHRzZWxlY3QgTkVUX0RTQV9UQUdfQlJDTV9DT01NT05cXG5uZXQvZHNhL0tjb25maWctNTctXFx0aGVscFxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTYzLVxcbm5ldC9kc2EvS2NvbmZpZzo2NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9QUkVQRU5EXFxubmV0L2RzYS9LY29uZmlnLTY1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBCcm9hZGNvbSBzd2l0Y2hlcyB1c2luZyBwcmVwZW5kZWQgaGVhZGVyc1xcXCJcXG5uZXQvZHNhL0tjb25maWc6NjY6XFx0c2VsZWN0IE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXFxubmV0L2RzYS9LY29uZmlnLTY3LVxcdGhlbHBcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy03MS1cXG5uZXQvZHNhL0tjb25maWc6NzI6Y29uZmlnIE5FVF9EU0FfVEFHX0hFTExDUkVFS1xcbm5ldC9kc2EvS2NvbmZpZy03My1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgSGlyc2NobWFubiBIZWxsY3JlZWsgVFNOIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTc3LVxcbm5ldC9kc2EvS2NvbmZpZzo3ODpjb25maWcgTkVUX0RTQV9UQUdfR1NXSVBcXG5uZXQvZHNhL0tjb25maWctNzktXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIExhbnRpcSAvIEludGVsIEdTV0lQIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTgzLVxcbm5ldC9kc2EvS2NvbmZpZzo4NDpjb25maWcgTkVUX0RTQV9UQUdfRFNBX0NPTU1PTlxcbm5ldC9kc2EvS2NvbmZpZy04NS1cXHR0cmlzdGF0ZVxcbm5ldC9kc2EvS2NvbmZpZy04Ni1cXG5uZXQvZHNhL0tjb25maWc6ODc6Y29uZmlnIE5FVF9EU0FfVEFHX0RTQVxcbm5ldC9kc2EvS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWFydmVsbCBzd2l0Y2hlcyB1c2luZyBEU0EgaGVhZGVyc1xcXCJcXG5uZXQvZHNhL0tjb25maWc6ODk6XFx0c2VsZWN0IE5FVF9EU0FfVEFHX0RTQV9DT01NT05cXG5uZXQvZHNhL0tjb25maWctOTAtXFx0aGVscFxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTkzLVxcbm5ldC9kc2EvS2NvbmZpZzo5NDpjb25maWcgTkVUX0RTQV9UQUdfRURTQVxcbm5ldC9kc2EvS2NvbmZpZy05NS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWFydmVsbCBzd2l0Y2hlcyB1c2luZyBFdGhlclR5cGUgRFNBIGhlYWRlcnNcXFwiXFxubmV0L2RzYS9LY29uZmlnOjk2OlxcdHNlbGVjdCBORVRfRFNBX1RBR19EU0FfQ09NTU9OXFxubmV0L2RzYS9LY29uZmlnLTk3LVxcdGhlbHBcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xMDAtXFxubmV0L2RzYS9LY29uZmlnOjEwMTpjb25maWcgTkVUX0RTQV9UQUdfTVQ3NjI4XFxubmV0L2RzYS9LY29uZmlnLTEwMi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgdGhlIE1UNzYyOCBlbWJlZGRlZCBzd2l0Y2hcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTA2LVxcbm5ldC9kc2EvS2NvbmZpZzoxMDc6Y29uZmlnIE5FVF9EU0FfVEFHX01US1xcbm5ldC9kc2EvS2NvbmZpZy0xMDgtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE1lZGlhdGVrIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTExMi1cXG5uZXQvZHNhL0tjb25maWc6MTEzOmNvbmZpZyBORVRfRFNBX1RBR19NWExfODYyWFhcXG5uZXQvZHNhL0tjb25maWctMTE0LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTE5LVxcbm5ldC9kc2EvS2NvbmZpZzoxMjA6Y29uZmlnIE5FVF9EU0FfVEFHX01YTF9HU1cxWFhcXG5uZXQvZHNhL0tjb25maWctMTIxLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgR1NXMXh4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEyNy1cXG5uZXQvZHNhL0tjb25maWc6MTI4OmNvbmZpZyBORVRfRFNBX1RBR19LU1pcXG5uZXQvZHNhL0tjb25maWctMTI5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNaWNyb2NoaXAgODc5NS85Mzd4Lzk0NzcvOTg5MyBmYW1pbGllcyBvZiBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xMzMtXFxubmV0L2RzYS9LY29uZmlnOjEzNDpjb25maWcgTkVUX0RTQV9UQUdfTkVUQ1xcbm5ldC9kc2EvS2NvbmZpZy0xMzUtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE5YUCBORVRDIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE0My1cXG5uZXQvZHNhL0tjb25maWc6MTQ0OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1RcXG5uZXQvZHNhL0tjb25maWctMTQ1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBOUEkgcG9ydFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNTQtXFxubmV0L2RzYS9LY29uZmlnOjE1NTpjb25maWcgTkVUX0RTQV9UQUdfT0NFTE9UXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTE1Ni1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgT2NlbG90IGZhbWlseSBvZiBzd2l0Y2hlcywgdXNpbmcgVkxBTlxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNjQtXFxubmV0L2RzYS9LY29uZmlnOjE2NTpjb25maWcgTkVUX0RTQV9UQUdfUUNBXFxubmV0L2RzYS9LY29uZmlnLTE2Ni1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNzAtXFxubmV0L2RzYS9LY29uZmlnOjE3MTpjb25maWcgTkVUX0RTQV9UQUdfUlRMNF9BXFxubmV0L2RzYS9LY29uZmlnLTE3Mi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUmVhbHRlayA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE3Ny1cXG5uZXQvZHNhL0tjb25maWc6MTc4OmNvbmZpZyBORVRfRFNBX1RBR19SVEw4XzRcXG5uZXQvZHNhL0tjb25maWctMTc5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZWFsdGVrIDggYnl0ZSBwcm90b2NvbCA0IHRhZ3NcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTgzLVxcbm5ldC9kc2EvS2NvbmZpZzoxODQ6Y29uZmlnIE5FVF9EU0FfVEFHX1JaTjFfQTVQU1dcXG5uZXQvZHNhL0tjb25maWctMTg1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZW5lc2FzIFJaL04xIEE1UFNXIHN3aXRjaFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xOTAtXFxubmV0L2RzYS9LY29uZmlnOjE5MTpjb25maWcgTkVUX0RTQV9UQUdfTEFOOTMwM1xcbm5ldC9kc2EvS2NvbmZpZy0xOTItXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIFNNU0MvTWljcm9jaGlwIExBTjkzMDMgZmFtaWx5IG9mIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE5Ni1cXG5uZXQvZHNhL0tjb25maWc6MTk3OmNvbmZpZyBORVRfRFNBX1RBR19TSkExMTA1XFxubmV0L2RzYS9LY29uZmlnLTE5OC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTlhQIFNKQTExMDUgc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjA1LVxcbm5ldC9kc2EvS2NvbmZpZzoyMDY6Y29uZmlnIE5FVF9EU0FfVEFHX1RSQUlMRVJcXG5uZXQvZHNhL0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBzd2l0Y2hlcyB1c2luZyBhIHRyYWlsZXIgdGFnXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIxMS1cXG5uZXQvZHNhL0tjb25maWc6MjEyOmNvbmZpZyBORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWljcm9jaGlwL1ZpdGVzc2UgVlNDNzN4eCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjE3LVxcbm5ldC9kc2EvS2NvbmZpZzoyMTg6Y29uZmlnIE5FVF9EU0FfVEFHX1hSUzcwMFhcXG5uZXQvZHNhL0tjb25maWctMjE5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBYUlM3MDB4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIyMy1cXG5uZXQvZHNhL0tjb25maWc6MjI0OmNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcXG5uZXQvZHNhL0tjb25maWctMjI1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IHN3aXRjaGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Mzo1NC45MDM2MDQzMzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUzMjc5NzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBuZXQvZHNhL01ha2VmaWxlYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBuZXQvZHNhL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbid0IGl0PyBJdCdzIHRoZSBjZW50cmFsIHBvaW50IGZvciBidWlsZGluZyBhbGwgdGhpbmdzIERTQSDigJMgdGhlIHdob2xlIGluZnJhc3RydWN0dXJlLCBmcm9tIHRoZSBiYXNpYyBkZXZpY2UgZHJpdmVycyB0byB0aGUgc3dpdGNoIG1hbmFnZW1lbnQgdG9vbHMuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIGEgbmV3IHRhcmdldCBmb3IgYSBjdXN0b20gc3dpdGNoIGNvbmZpZ3VyYXRpb24gSSdtIHdvcmtpbmcgb24sIG9yIHBlcmhhcHMgSSBzdXNwZWN0IGEgYnVpbGQgZGVwZW5kZW5jeSBpc3N1ZSByZWxhdGVkIHRvIGEgcmVjZW50IGtlcm5lbCB1cGRhdGUuIE9yIG1heWJlIEknbSBjaGFzaW5nIGRvd24gYSBsaW5nZXJpbmcgbGlua2VyIGVycm9yIHRoYXQncyBiZWVuIGJ1Z2dpbmcgbWUgZm9yIGRheXMuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBkZWZpbmVkIHRoZXJlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBzZWVpbmcgaG93IHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGludHJpY2FjaWVzIG9mIEtidWlsZCB2YXJpYWJsZXMgYW5kIGhvdyB0aGV5IHRyYW5zbGF0ZSB0byBvYmplY3QgZmlsZSBpbmNsdXNpb24sIGFuZCBob3cgaXQgYWxsIHJlbGF0ZXMgdG8gdGhlIG92ZXJhbGwga2VybmVsIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gcGFyc2UgdGhyb3VnaCB0aGlzIGNhcmVmdWxseSwgdGhhdCBNYWtlZmlsZSBpcyBhbHdheXMgZnVsbCBvZiBzdXJwcmlzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjcyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6NTcuNDM2NDA0MTY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE1NjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9NYWtlZmlsZT00PWlmZGVmIENPTkZJR19ORVRfRFNBXFxubmV0L2RzYS9NYWtlZmlsZTo1Om9iai15IDo9IHN0dWJzLm9cXG5uZXQvZHNhL01ha2VmaWxlLTYtZW5kaWZcXG4tLVxcbm5ldC9kc2EvTWFrZWZpbGUtOC0jIHRoZSBjb3JlXFxubmV0L2RzYS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORVRfRFNBKSArPSBkc2FfY29yZS5vXFxubmV0L2RzYS9NYWtlZmlsZS0xMC1kc2FfY29yZS15ICs9IFxcXFxcXG4tLVxcbm5ldC9kc2EvTWFrZWZpbGUtMjItIyB0YWdnaW5nIGZvcm1hdHNcXG5uZXQvZHNhL01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19BUjkzMzEpICs9IHRhZ19hcjkzMzEub1xcbm5ldC9kc2EvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0JSQ01fQ09NTU9OKSArPSB0YWdfYnJjbS5vXFxubmV0L2RzYS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfRFNBX0NPTU1PTikgKz0gdGFnX2RzYS5vXFxubmV0L2RzYS9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfR1NXSVApICs9IHRhZ19nc3dpcC5vXFxubmV0L2RzYS9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfSEVMTENSRUVLKSArPSB0YWdfaGVsbGNyZWVrLm9cXG5uZXQvZHNhL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19LU1opICs9IHRhZ19rc3oub1xcbm5ldC9kc2EvTWFrZWZpbGU6Mjk6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0xBTjkzMDMpICs9IHRhZ19sYW45MzAzLm9cXG5uZXQvZHNhL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19NVDc2MjgpICs9IHRhZ19tdDc2Mjgub1xcbm5ldC9kc2EvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01USykgKz0gdGFnX210ay5vXFxubmV0L2RzYS9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVhMXzg2MlhYKSArPSB0YWdfbXhsODYyeHgub1xcbm5ldC9kc2EvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01YTF9HU1cxWFgpICs9IHRhZ19teGwtZ3N3MXh4Lm9cXG5uZXQvZHNhL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19ORVRDKSArPSB0YWdfbmV0Yy5vXFxubmV0L2RzYS9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTk9ORSkgKz0gdGFnX25vbmUub1xcbm5ldC9kc2EvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX09DRUxPVCkgKz0gdGFnX29jZWxvdC5vXFxubmV0L2RzYS9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfT0NFTE9UXzgwMjFRKSArPSB0YWdfb2NlbG90XzgwMjFxLm9cXG5uZXQvZHNhL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19RQ0EpICs9IHRhZ19xY2Eub1xcbm5ldC9kc2EvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1JUTDRfQSkgKz0gdGFnX3J0bDRfYS5vXFxubmV0L2RzYS9NYWtlZmlsZTo0MDpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfUlRMOF80KSArPSB0YWdfcnRsOF80Lm9cXG5uZXQvZHNhL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19SWk4xX0E1UFNXKSArPSB0YWdfcnpuMV9hNXBzdy5vXFxubmV0L2RzYS9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfU0pBMTEwNSkgKz0gdGFnX3NqYTExMDUub1xcbm5ldC9kc2EvTWFrZWZpbGU6NDM6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1RSQUlMRVIpICs9IHRhZ190cmFpbGVyLm9cXG5uZXQvZHNhL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRKSArPSB0YWdfdnNjNzN4eF84MDIxcS5vXFxubmV0L2RzYS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWFJTNzAwWCkgKz0gdGFnX3hyczcwMHgub1xcbm5ldC9kc2EvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1lUOTIxWCkgKz0gdGFnX3l0OTIxeC5vXFxubmV0L2RzYS9NYWtlZmlsZS00Ny1cXG4tLVxcbm5ldC9kc2EvdXNlci5jPTczOD1zdGF0aWMgaW50IGRzYV91c2VyX3BvcnRfb2JqX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpjdHgsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy03NDctXFxubmV0L2RzYS91c2VyLmM6NzQ4OlxcdHN3aXRjaCAob2JqLVxcdTAwM2VpZCkge1xcbm5ldC9kc2EvdXNlci5jLTc0OS1cXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfUE9SVF9NREI6XFxubmV0L2RzYS91c2VyLmM6NzUwOlxcdFxcdGlmICghZHNhX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX3BvcnQoZHAsIG9iai1cXHUwMDNlb3JpZ19kZXYpKVxcbm5ldC9kc2EvdXNlci5jLTc1MS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy03NTUtXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX0hPU1RfTURCOlxcbm5ldC9kc2EvdXNlci5jOjc1NjpcXHRcXHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cXHUwMDNlb3JpZ19kZXYpKVxcbm5ldC9kc2EvdXNlci5jLTc1Ny1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy03NjEtXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTjpcXG5uZXQvZHNhL3VzZXIuYzo3NjI6XFx0XFx0aWYgKGRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KGRwLCBvYmotXFx1MDAzZW9yaWdfZGV2KSlcXG5uZXQvZHNhL3VzZXIuYy03NjMtXFx0XFx0XFx0ZXJyID0gZHNhX3VzZXJfdmxhbl9hZGQoZGV2LCBvYmosIGV4dGFjayk7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy03NjctXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX01SUDpcXG5uZXQvZHNhL3VzZXIuYzo3Njg6XFx0XFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfZGV2KGRwLCBvYmotXFx1MDAzZW9yaWdfZGV2KSlcXG5uZXQvZHNhL3VzZXIuYy03NjktXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2RzYS91c2VyLmMtNzczLVxcdGNhc2UgU1dJVENIREVWX09CSl9JRF9SSU5HX1JPTEVfTVJQOlxcbm5ldC9kc2EvdXNlci5jOjc3NDpcXHRcXHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cXHUwMDNlb3JpZ19kZXYpKVxcbm5ldC9kc2EvdXNlci5jLTc3NS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYz04MjA9c3RhdGljIGludCBkc2FfdXNlcl9wb3J0X29ial9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxubmV0L2RzYS91c2VyLmMtODI4LVxcbm5ldC9kc2EvdXNlci5jOjgyOTpcXHRzd2l0Y2ggKG9iai1cXHUwMDNlaWQpIHtcXG5uZXQvZHNhL3VzZXIuYy04MzAtXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfTURCOlxcbm5ldC9kc2EvdXNlci5jOjgzMTpcXHRcXHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9wb3J0KGRwLCBvYmotXFx1MDAzZW9yaWdfZGV2KSlcXG5uZXQvZHNhL3VzZXIuYy04MzItXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2RzYS91c2VyLmMtODM2LVxcdGNhc2UgU1dJVENIREVWX09CSl9JRF9IT1NUX01EQjpcXG5uZXQvZHNhL3VzZXIuYzo4Mzc6XFx0XFx0aWYgKCFkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfZGV2KGRwLCBvYmotXFx1MDAzZW9yaWdfZGV2KSlcXG5uZXQvZHNhL3VzZXIuYy04MzgtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2RzYS91c2VyLmMtODQyLVxcdGNhc2UgU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU46XFxubmV0L2RzYS91c2VyLmM6ODQzOlxcdFxcdGlmIChkc2FfcG9ydF9vZmZsb2Fkc19icmlkZ2VfcG9ydChkcCwgb2JqLVxcdTAwM2VvcmlnX2RldikpXFxubmV0L2RzYS91c2VyLmMtODQ0LVxcdFxcdFxcdGVyciA9IGRzYV91c2VyX3ZsYW5fZGVsKGRldiwgb2JqKTtcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTg0OC1cXHRjYXNlIFNXSVRDSERFVl9PQkpfSURfTVJQOlxcbm5ldC9kc2EvdXNlci5jOjg0OTpcXHRcXHRpZiAoIWRzYV9wb3J0X29mZmxvYWRzX2JyaWRnZV9kZXYoZHAsIG9iai1cXHUwMDNlb3JpZ19kZXYpKVxcbm5ldC9kc2EvdXNlci5jLTg1MC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy04NTQtXFx0Y2FzZSBTV0lUQ0hERVZfT0JKX0lEX1JJTkdfUk9MRV9NUlA6XFxubmV0L2RzYS91c2VyLmM6ODU1OlxcdFxcdGlmICghZHNhX3BvcnRfb2ZmbG9hZHNfYnJpZGdlX2RldihkcCwgb2JqLVxcdTAwM2VvcmlnX2RldikpXFxubmV0L2RzYS91c2VyLmMtODU2LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTM6NTcuNDgyNTY1MzY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MjQ5Mjc0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEU0EgVXNlciBOZXRkZXYgU2V0dXAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYG5ldC9kc2EvdXNlci5jYCBnZXRzIGNvbXBpbGVkIGludG8gYGRzYV9jb3JlLm9gIGFzIGxvbmcgYXMgYENPTkZJR19ORVRfRFNBYCBpcyBmbGlwcGVkIG9uLiBUaGF0IG1lYW5zIHRoZSBEU0EgY29yZSBmdW5jdGlvbmFsaXRpZXMgYXJlIGludGVncmF0ZWQgaW50byB0aGUgYnVpbGQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIG5ldGRldiBpcyBzZXQgdXAsIHNvIEknbSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgaW4gYG5ldC9kc2EvdXNlci5jYC5cblxuSSBzZWUgYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBhbmQgYGRzYV91c2VyX3NldHVwX3RjYC4gQWxyaWdodCwgYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBpcyBzdGF0aWM7IGludGVybmFsIHRvIHRoYXQgZmlsZS4gQW5kIGBkc2FfdXNlcl9zZXR1cF90Y2AgaXMgYWxzbyBzdGF0aWMsIGJ1dCB0aGF0IGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIGBkc2FfdXNlcl9uZXRkZXZfb3BzLm5kb19zZXR1cF90Y2AuIFNvLCB3aGVuIHRoZSBgbmRvX3NldHVwX3RjYCBuZXRkZXYgb3BlcmF0aW9uIGlzIGNhbGxlZCBvbiBhIERTQSB1c2VyIG5ldGRldiwgYGRzYV91c2VyX3NldHVwX3RjYCBnZXRzIGV4ZWN1dGVkLiBHb3QgaXQuIEFuZCB3aXRoaW4gdGhhdCwgYGRzYV91c2VyX3NldHVwX3RjYCBjYWxscyBgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgLlxuXG5Ob3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIHdoYXQgc3dpdGNoIGRyaXZlcnMgYXJlIHVzaW5nIHRoZSBgcG9ydF9zZXR1cF90Y2AgZnVuY3Rpb24uIEkgd2lsbCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2MzIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MDAuMjA3NDk0Nzk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxODY3NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwucG9ydF9zZXR1cF90Y1xcXFxzKj1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM9MTkwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGhlbGxjcmVla19kc19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYy0xOTIwLVxcdC5wb3J0X3J4dHN0YW1wXFx0ICAgICAgID0gaGVsbGNyZWVrX3BvcnRfcnh0c3RhbXAsXFxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM6MTkyMTpcXHQucG9ydF9zZXR1cF90Y1xcdCAgICAgICA9IGhlbGxjcmVla19wb3J0X3NldHVwX3RjLFxcbmRyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL2hlbGxjcmVlay5jLTE5MjItXFx0LnBvcnRfc3RwX3N0YXRlX3NldCAgICA9IGhlbGxjcmVla19wb3J0X3N0cF9zdGF0ZV9zZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0zMTE0PWNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMTUwLVxcdC5wb3J0X3J4dHN0YW1wXFx0XFx0PSBrc3pfcG9ydF9yeHRzdGFtcCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMTUxOlxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3o4X3NldHVwX3RjLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMxNTItXFx0LnBvcnRfZ2V0X2RlZmF1bHRfcHJpb1xcdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTMxNjE9Y29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg3eHhfc3dpdGNoX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMyMDAtXFx0LnBvcnRfcnh0c3RhbXBcXHRcXHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMyMDE6XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IGtzejg3eHhfc2V0dXBfdGMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzIwMi1cXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXFx0PSBrc3pfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzIxMT1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODh4eF9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzI1My1cXHQucG9ydF9yeHRzdGFtcFxcdFxcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzI1NDpcXHQucG9ydF9zZXR1cF90Y1xcdFxcdD0ga3N6OF9zZXR1cF90YyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMjU1LVxcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0yMjE1PWNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o5NDc3X3N3aXRjaF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0yMjYyLVxcdC5jbHNfZmxvd2VyX2RlbFxcdFxcdD0ga3N6OTQ3N19jbHNfZmxvd2VyX2RlbCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzoyMjYzOlxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3pfc2V0dXBfdGMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMjI2NC1cXHQuc3VwcG9ydF9lZWVcXHRcXHQ9IGtzejk0Nzdfc3VwcG9ydF9lZWUsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jPTk0OT1jb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbGFuOTM3eF9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy05ODktXFx0LnBvcnRfcnh0c3RhbXBcXHRcXHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6OTkwOlxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3pfc2V0dXBfdGMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy05OTEtXFx0LnBvcnRfZ2V0X2RlZmF1bHRfcHJpb1xcdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ2MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjI1LVxcdC5wb3J0X3BvbGljZXJfYWRkXFx0PSB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDYyNjpcXHQucG9ydF9zZXR1cF90Y1xcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwX3RjLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2MjctXFx0LyogYWNsICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MzM5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzUzMF9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTM0MzMtXFx0LmNvbmR1aXRfc3RhdGVfY2hhbmdlXFx0PSBtdDc1M3hfY29uZHVpdF9zdGF0ZV9jaGFuZ2UsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM0MzQ6XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IG10NzUzeF9zZXR1cF90YyxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzQzNS1cXHQucG9ydF9oc3Jfam9pblxcdFxcdD0gZHNhX3BvcnRfc2ltcGxlX2hzcl9qb2luLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTIzMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBmZWxpeF9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzNjEtXFx0LmNsc19mbG93ZXJfc3RhdHNcXHRcXHQ9IGZlbGl4X2Nsc19mbG93ZXJfc3RhdHMsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzNjI6XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHRcXHQ9IGZlbGl4X3BvcnRfc2V0dXBfdGMsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzNjMtXFx0LmRldmxpbmtfc2JfcG9vbF9nZXRcXHRcXHQ9IGZlbGl4X3NiX3Bvb2xfZ2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9MjY1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZlbGl4X2luZm8gZmVsaXhfaW5mb192c2M5OTU5ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjY3OC1cXHQucG9ydF9tb2Rlc1xcdFxcdD0gdnNjOTk1OV9wb3J0X21vZGVzLFxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjI2Nzk6XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IHZzYzk5NTlfcG9ydF9zZXR1cF90YyxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0yNjgwLVxcdC5wb3J0X3NjaGVkX3NwZWVkX3NldFxcdD0gdnNjOTk1OV9zY2hlZF9zcGVlZF9zZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0zMTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgc2phMTEwNV9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzE3My1cXHQucG9ydF90eHRzdGFtcFxcdFxcdD0gc2phMTEwNV9wb3J0X3R4dHN0YW1wLFxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjMxNzQ6XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IHNqYTExMDVfcG9ydF9zZXR1cF90YyxcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMTc1LVxcdC5wb3J0X21pcnJvcl9hZGRcXHQ9IHNqYTExMDVfbWlycm9yX2FkZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MDIuMDI5MzY3MDg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4MDUwNzExNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERTQSBGbG93dGFibGUgT2ZmbG9hZGluZyBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZsb3cgdGFibGUgY29uZmlndXJhdGlvbiB3b3JrcyB3aXRoaW4gdGhlIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgKERTQSkgaW4gdGhlIGtlcm5lbC4gSSdtIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IGZ1bmN0aW9ucyBsaWtlIGBmZWxpeF9wb3J0X3NldHVwX3RjYCwgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLCBvciByZWFsbHkgYW55IERTQSBkcml2ZXIuXG5cbk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIGBkc2FfdXNlcl9zZXR1cF90Y2AgYW5kIGVzcGVjaWFsbHkgYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYC4gSSBzZWUgdGhpcyBmdW5jdGlvbiB0YWtlcyBhIGBkc2FfcG9ydGAgYW5kIGBmbG93X2Jsb2NrX29mZmxvYWRgIHN0cnVjdC4gTG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxuXHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibylcbntcblx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRwKTtcblx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG5cdGludCBlcnI7XG5cblx0LyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi9cblx0aWYgKGJvLVx1MDAzZWNvbW1hbmQgPT0gRkxPV19CTE9DS19CSU5EKSB7XG5cdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5cdFx0aWYgKGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKVxuXHRcdFx0ZXJyID0gZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCxcblx0XHRcdFx0XHRcdCAgICAgYm8pO1xuXHRcdGRwLVx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcblx0XHRpZiAoZHAtXHUwMDNlZnRfb25fc3dpdGNoKVxuXHRcdFx0cmV0dXJuIGVycjtcblx0fSBlbHNlIGlmIChkcC1cdTAwM2VmdF9vbl9zd2l0Y2gpIHtcblx0XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVx1MDAzZWluZGV4LCBUQ19TRVRVUF9GVCwgYm8pO1xuXHR9XG5cblx0aWYgKCFjb25kdWl0LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldHVwX3RjKVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcblxuXHRyZXR1cm4gY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xufVxuYGBgXG5cblRoZSBmbG93IGhlcmUgaXMgaW50ZXJlc3RpbmcuIFdoZW4gYmluZGluZyBhIGZsb3cgYmxvY2sgKGBiby1cdTAwM2Vjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORGApLCB0aGUgY29kZSBmaXJzdCBjaGVja3MgaWYgdGhlIHN3aXRjaCBpbXBsZW1lbnRzIGBwb3J0X3NldHVwX3RjYC4gSWYgaXQgZG9lcywgdGhlIG9wZXJhdGlvbiBpcyBvZmZsb2FkZWQgdG8gdGhlIHN3aXRjaCwgYW5kIGBkcC1cdTAwM2VmdF9vbl9zd2l0Y2hgIGlzIHNldCBhY2NvcmRpbmdseS4gSWYgdGhlIHN3aXRjaCBkb2Vzbid0IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiAocmV0dXJucyBgLUVPUE5PVFNVUFBgKSwgb3IgZG9lc24ndCBoYXZlIGBwb3J0X3NldHVwX3RjYCwgdGhlIG9wZXJhdGlvbiBmYWxscyBiYWNrIHRvIHRoZSBjb25kdWl0IGRldmljZSdzIGBuZG9fc2V0dXBfdGNgIGZ1bmN0aW9uLiBUaGUga2V5IGlzIGhvdyBgZHAtXHUwMDNlZnRfb25fc3dpdGNoYCB0cmFja3Mgd2hlcmUgdGhlIGJpbmRpbmcgaGFwcGVuZWQuIE9uIHVuYmluZCwgdGhpcyBpcyBjaGVja2VkIHRvIHNlbmQgdGhlIGNhbGwgdG8gdGhlIHJpZ2h0IHBsYWNlLiBUaGUgY29tbWVudCBpbiBgaW5jbHVkZS9uZXQvZHNhLmhgIGNsYXJpZmllcyB0aGF0IHRoZSBkZWNpc2lvbiBvZiB3aGV0aGVyIHRvIHVzZSB0aGUgc3dpdGNoIG9yIHRoZSBjb25kdWl0IGlzIG1hZGUgYXQgYmluZCB0aW1lLiBUaGlzIGxvb2tzIHByb21pc2luZyBiZWNhdXNlIG9mIHRoaXMgY29uZGl0aW9uYWwgYmVoYXZpb3IuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgd2hvbGUgRFNBIHRoaW5nIGlzIGV2ZW4gcmVsZXZhbnQgZm9yIGZ1enppbmcuIENhbiBJIHRyaWdnZXIgdGhpcyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQ/IFRoZSBhbnN3ZXIgaXMgeWVzLiBUaGUgYE5FVF9EU0FgIHdpdGggYE5FVF9EU0FfTE9PUGAgKG9yIG1vY2sgb3IgZml4ZWQgcGh5KSBjcmVhdGVzIERTQSBzd2l0Y2hlcyBhbmQgdXNlciBkZXZpY2VzIGxpa2UgYGxhbjFgLCBgbGFuMmAsIGV0Yy4gVGhpcyBsb29rcyBwZXJmZWN0IGZvciBRRU1VLiBGdXJ0aGVybW9yZSwgc3l6a2FsbGVyIGFscmVhZHkgaGFzIHRoaXMgY29uZmlndXJhdGlvbiEgSXQgdXNlcyBgQ09ORklHX05FVF9EU0E9eWAsIGBDT05GSUdfTkVUX0RTQV9MT09QPXlgLCBgQ09ORklHX05FVEZJTFRFUmAsIGFuZCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGFuZCBjYW4gbWFuaXB1bGF0ZSBmbG93IHRhYmxlcyB3aXRoIGBuZnRgIG9yIGBpcCBsaW5rYCAvIGB0Y2AuIEV4Y2VsbGVudC5cblxuTm93LCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBXaGVyZSdzIGBORVRfRFNBYCBkZWZpbmVkPyBJdCdzIGluIGBuZXQvZHNhL0tjb25maWdgOlxuXG5gYGBcbm1lbnVjb25maWcgTkVUX0RTQVxuXHR0cmlzdGF0ZSBcIkRpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmVcIlxuXHRkZXBlbmRzIG9uIEhBVkVfTkVUX0RTQVxuXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgSU5FVFxuXHRzZWxlY3QgTkVUX1NXSVRDSERFVlxuXHRzZWxlY3QgUEhZTElOS1xuXHRzZWxlY3QgTkVUX0RFVkxJTktcbmBgYFxuXG5BbmQgSSB3aWxsIGdvIGZpZ3VyZSBvdXQgd2hhdCBlbmFibGVzIGBIQVZFX05FVF9EU0FgLiBUaGlzIGNvbmZpcm1zIHRoYXQgaXQncyBhbGwgYnVpbHQtaW4gYW5kIGFscmVhZHkgZW5hYmxlZCBieSBzeXprYWxsZXIuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgaG93IHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhpcyBgZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tgIHdpdGggY2FyZWZ1bGx5IGNyYWZ0ZWQgZmxvdyB0YWJsZSBjb21tYW5kcy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjA4LjgzNDQ0MTA4OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTk4Njk2NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9ORVRfRFNBXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoxMC4zMzQ0Mzg3MjRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MDQ2Mzk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gRGF0YSBTdHVjdHVyZSBBY2NlbGVyYXRvciAoRFNBKS4gSW5zdGVhZCBvZiB3YW5kZXJpbmcgYWltbGVzc2x5IHRocm91Z2ggdGhlIHNvdXJjZSB0cmVlLCBsZXQncyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYG5ldC9kc2EvS2NvbmZpZ2AgZmlsZS4gSSdtIHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwncyBLY29uZmlnIHN0cnVjdHVyZSwgYW5kIGhpdHRpbmcgdGhlIHJlbGV2YW50IEtjb25maWcgZGlyZWN0bHkgdXN1YWxseSBnaXZlcyBtZSB0aGUgcXVpY2tlc3QgcGF0aCB0byB1bmRlcnN0YW5kaW5nIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgYmUgYSBtdWNoIG1vcmUgZWZmaWNpZW50IHVzZSBvZiBteSB0aW1lIHRoYW4gc3RhcnRpbmcgYXQgc29tZSBicm9hZGVyLCBwb3NzaWJseSB1bnJlbGF0ZWQgY29uZmlndXJhdGlvbiBtZW51IGFuZCBoYXZpbmcgdG8gZHJpbGwgZG93bi4gTGV0J3Mgc2VlIHdoYXQgYG5ldC9kc2EvS2NvbmZpZ2AgcmV2ZWFscy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzA2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjEyLjQyNDkwNjI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9kc2EvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51Y29uZmlnIE5FVF9EU0FcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlXFxcIlxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0UgfHwgQlJJREdFPW5cXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gSFNSIHx8IEhTUj1uXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVUREVWSUNFU1xcbiAgIDg6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAgIDk6XFx0XFx0c2VsZWN0IE5FVF9TV0lUQ0hERVZcXG4gIDEwOlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAxMTpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDEyOlxcdFxcdGltcGx5IE5FVF9TRUxGVEVTVFNcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSBzd2l0Y2hlcyBzdXBwb3J0ZWRcXG4gIDE1OlxcdFxcdCAgYnkgdGhlIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGlmIE5FVF9EU0FcXG4gIDE4OlxcdFxcbiAgMTk6XFx0IyBEcml2ZXJzIG11c3Qgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSB0YWdnaW5nIGZvcm1hdChzKVxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgTkVUX0RTQV9UQUdfTk9ORVxcbiAgMjI6XFx0XFx0dHJpc3RhdGUgXFxcIk5vLW9wIHRhZyBkcml2ZXJcXFwiXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHN3aXRjaGVzIHdoaWNoIGRvbid0IHRhZ1xcbiAgMjU6XFx0XFx0ICBmcmFtZXMgb3ZlciB0aGUgQ1BVIHBvcnQuXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBORVRfRFNBX1RBR19BUjkzMzFcXG4gIDI4OlxcdFxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBBdGhlcm9zIEFSOTMzMSBTb0Mgd2l0aCBidWlsdC1pbiBzd2l0Y2hcXFwiXFxuICAyOTpcXHRcXHRoZWxwXFxuICAzMDpcXHRcXHQgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRhZ2dpbmcgZnJhbWVzIGZvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoxMi40MjQ5NzU3OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc4ODI4NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIE5ldHdvcmsgRFNBIExvb3AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9kc2FgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiB0aGUgYE5FVF9EU0FfTE9PUGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEtub3dpbmcgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBob3cgaXQgbWlnaHQgYmUgY29uZmlndXJlZC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCB3aGVuIHRyb3VibGVzaG9vdGluZyBvciBjdXN0b21pemluZyBhbnkgYXNwZWN0IG9mIHRoZSBuZXR3b3JrIERTQSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IGl0cyBjdXJyZW50IGRlZmluaXRpb24gYmVmb3JlIG1vdmluZyBvbiB0byBhbnl0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MTQuMjAzODA3ODMyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE0NTk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RTQV9MT09QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvS2NvbmZpZz03PWNvbmZpZyBORVRfRFNBX0JDTV9TRjJcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjE5OmNvbmZpZyBORVRfRFNBX0xPT1BcXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiRFNBIG1vY2stdXAgRXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MTQuMjU3OTU4ODkxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTI1MDg1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBEU0EgS2NvbmZpZyBGaWxlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGNvbmZpZ3VyYXRpb24uIExldCdzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYGRyaXZlcnMvbmV0L2RzYS9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgYXJvdW5kIGxpbmUgMTk7IHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb25zIG9yIHRoZSBtYWluIG1vZHVsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHBsYWNlZCwgc28gdGhhdCdzIHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEknbSBsb29raW5nIGZvciBhIHNwZWNpZmljIG1vZHVsZSBvciBmZWF0dXJlLCBidXQgSSBuZWVkIHRvIHN0YXJ0IHdpdGggY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoxNS45NzA0Njk4NDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEJyb2FkY29tIFN0YXJmaWdodGVyIDIgRXRoZXJuZXRcXG4gIDE3OlxcdFxcdCAgc3dpdGNoIGNoaXBzLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgTkVUX0RTQV9MT09QXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiRFNBIG1vY2stdXAgRXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4gIDIxOlxcdFxcdHNlbGVjdCBORVRfRFNBX1RBR19OT05FXFxuICAyMjpcXHRcXHRzZWxlY3QgRklYRURfUEhZXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBhIGZha2UgbW9jay11cCBzd2l0Y2ggY2hpcCB3aGljaFxcbiAgMjU6XFx0XFx0ICBleGVyY2lzZXMgdGhlIERTQSBBUElzLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL0tjb25maWdcXFwiXFxuICAyODpcXHRcXG4gIDI5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9LY29uZmlnXFxcIlxcbiAgMzA6XFx0XFxuICAzMTpcXHRjb25maWcgTkVUX0RTQV9NVDc1MzBcXG4gIDMyOlxcdFxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc1MzAgYW5kIE1UNzUzMSBFdGhlcm5ldCBzd2l0Y2ggc3VwcG9ydFxcXCJcXG4gIDMzOlxcdFxcdHNlbGVjdCBORVRfRFNBX1RBR19NVEtcXG4gIDM0OlxcdFxcdHNlbGVjdCBSRUdNQVBfSVJRXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjE1Ljk3MDUyOTgxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjg5NjQ4MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29uZmlndXJhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEZsb3cgVGFibGUgT2ZmbG9hZCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhlIGFwcHJvcHJpYXRlIG1vZHVsZXMgYXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBDT05GSUdfTkZfRkxPV19UQUJMRWAsIGBDT05GSUdfTkVUX0FDVF9DVGAsIGBDT05GSUdfTkVURklMVEVSYCwgYW5kIGBDT05GSUdfTkZfVEFCTEVTYC4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSeKAmWxsIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgYXJlIGluIHBsYWNlIGZvciB0aGUgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSBkaWdnaW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBJIGNhbiBnZXQgYSBncmFudWxhciBsb29rIGF0IHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBkb3duIHRoZSBzcGVjaWZpY3MgcmVsYXRlZCB0byBmbG93IHRhYmxlIG9mZmxvYWQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDIwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoxOC4yNjAxODA0OThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzExMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoxOC4zMDg4OTQzMjZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0OTA4MjgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIE9mZmxvYWQgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGZsb3cgb2ZmbG9hZCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC4gRmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGUgY29tcGlsYXRpb24gb3B0aW9ucyBhcmUgc2V0IHVwLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY29uZmlnIGd1YXJkIHdpdGhpbiB0aGUgZmlsZS4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgY29kZSBldmVuICpleGlzdHMqIGluIHRoZSBidWlsZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIHRoYXQgdGhlcmUgYXJlbid0IGFueSBzdXJwcmlzZSBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3RzLiBUaGlzIGluaXRpYWwgY2hlY2sgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgSSdtIGFib3V0IHRvIGFuYWx5emUgYW5kIHRvIGF2b2lkIHdhc3RpbmcgdGltZSBvbiBwYXJ0cyB0aGF0IG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3V0LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgYW55IGNvbmZpZyBmbGFncyBJIHNlZSB0byBrZWVwIHRoZW0gaW4gbWluZCBhcyBJIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTIxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MjAuNTU3OTc5OTcxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYyOTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mz1uZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ0LVxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NTpcXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDYtbmZfZmxvd190YWJsZS0kKENPTkZJR19ORl9GTE9XX1RBQkxFX1BST0NGUykgKz0gbmZfZmxvd190YWJsZV9wcm9jZnMub1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03NDQ9dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NDgtXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmspO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzQ5OlxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93dGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzUwLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzYzPXZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc2OS1cXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWdjX3dvcmspO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzcwOlxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93X3RhYmxlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc3MS1cXHQvKiAuLi4gbm8gbW9yZSBwZW5kaW5nIHdvcmsgYWZ0ZXIgdGhpcyBzdGFnZSAuLi4gKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzczLVxcdG5mX2Zsb3dfdGFibGVfZ2NfcnVuKGZsb3dfdGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzc0OlxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzc1LVxcdHJoYXNodGFibGVfZGVzdHJveShcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlcmhhc2h0YWJsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTgyND1zdGF0aWMgaW50IF9faW5pdCBuZl9mbG93X3RhYmxlX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTgzNS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjgzNjpcXHRyZXQgPSBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODM3LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg0Ni1vdXRfYnBmOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODQ3OlxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NDgtb3V0X29mZmxvYWQ6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTg1NT1zdGF0aWMgdm9pZCBfX2V4aXQgbmZfZmxvd190YWJsZV9tb2R1bGVfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODU2LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjg1NzpcXHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODU4LVxcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2bmZfZmxvd190YWJsZV9uZXRfb3BzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Njg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaW5ldCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzAtXFx0LmluaXRcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjcxOlxcdC5zZXR1cFxcdFxcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzItXFx0LmFjdGlvblxcdFxcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2luZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTc4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgwLVxcdC5pbml0XFx0XFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo4MTpcXHQuc2V0dXBcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgyLVxcdC5hY3Rpb25cXHRcXHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz04OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY2ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05MC1cXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6OTE6XFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05Mi1cXHQuYWN0aW9uXFx0XFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaXB2NixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE0OD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNjQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTY1OnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE2Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzItXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTczOnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjM4PXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9pbmRyX29mZmxvYWRfY21kKHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjUwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI1MTpzdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjUyLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjY5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI3MDppbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNzEtXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4MS1cXHRpZiAoZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0dXBfdGMpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjgyOlxcdFxcdGVyciA9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWQoXFx1MDAyNmJvLCBmbG93dGFibGUsIGRldiwgY21kLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4My1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZXh0YWNrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI5MS19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI5NDppbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2luaXQodm9pZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzE5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyMDp2b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6MjAuNjA2NjEyOTRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQwNzgxNTcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGbG93IFRhYmxlIE9mZmxvYWQgb24gRFNBOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBmbG93IHRhYmxlIG9mZmxvYWQgcHJvY2VzcyBvbiBEU0EgaW50ZXJmYWNlcy4gSXQgc3RhcnRzIHdpdGggYSB1c2VyIGNvbmZpZ3VyaW5nIGEgZmxvdyB0YWJsZSwgbGlrZSB3aXRoIGBuZnRgLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIG9mZmxvYWQgZmxhZyBpcyBzZXQgb24gYSBEU0EgdXNlciBpbnRlcmZhY2UsIGxpa2UgYGxhbjFgLiBUaGUga2VybmVsIHRoZW4gdGFrZXMgb3Zlci5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdG8gd2FsayB0aHJvdWdoIHRoZSBmdW5jdGlvbiBjYWxscy4gRmlyc3QsIGl0IGdvZXMgdGhyb3VnaCBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYCwgd2hpY2ggdGhlbiBoaXRzIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kYCwgdWx0aW1hdGVseSBjYWxsaW5nIGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoZGV2LCBUQ19TRVRVUF9GVCwgYm8pYC4gTm93LCB0aGF0IGBuZG9fc2V0dXBfdGNgIGZ1bmN0aW9uIHBvaW50ZXIgaXMga2V5LiBJbiB0aGlzIGNhc2UsIGl0J3MgYGRzYV91c2VyX3NldHVwX3RjYC4gVGhpcyBpcyB3aGVyZSB0aGUgRFNBLXNwZWNpZmljIHN0dWZmIGtpY2tzIGluIGJlY2F1c2UgYGRzYV91c2VyX3NldHVwX3RjYCBoYW5kbGVzIHRoZSBgVENfU0VUVVBfRlRgIHNldHVwLiBUaGlzIHRoZW4gbGVhZHMgdG8gYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYC5cblxuVGhlIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGNydWNpYWwgc3RhdGUgbWFuYWdlbWVudCBoYXBwZW5zLiBJdCBzZXRzIGBkcC1cdTAwM2VmdF9vbl9zd2l0Y2hgIGR1cmluZyBiaW5kaW5nIGFuZCB1bmJpbmRzIGZyb20gdGhlIHN3aXRjaCBvciBjb25kdWl0IGFwcHJvcHJpYXRlbHkuIFRoaXMgaXMgd2hlcmUgSSBzZWUgdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzLCBwcmltYXJpbHkgaW4gdGhlIGxvZ2ljIG9mIHRoZSBiaW5kL3VuYmluZCBvcGVyYXRpb25zLlxuXG5Ob3csIGEgY3JpdGljYWwgcXVlc3Rpb246IEFyZSB0aGVzZSBmdW5jdGlvbnMgZXZlbiByZWFjaGFibGU/IFRoZSB0ZXh0IGFzc2VydHMgdGhhdCB0aGV5ICphcmUqIHJlYWNoYWJsZSBpbiBRRU1VIGFuZCBzdGFuZGFyZCBlbnZpcm9ubWVudHMsIHBhcnRpY3VsYXJseSB3aXRoIHRob3NlIHNwZWNpZmljIGtlcm5lbCBjb25maWcgb3B0aW9ucyBzZXQuIFRoYXQncyBhIGdyZWVuIGxpZ2h0IGZvciBtZS5cblxuTXkgbmV4dCB0aG91Z2h0IGlzIGFib3V0IGZ1enppbmcuIEFic29sdXRlbHkuIFRoaXMgY29kZSBtb2RpZmllcyBjb250cm9sIGZsb3cgYW5kIHN0YXRlIHJlbGF0ZWQgdG8gdGhhdCBgZnRfb25fc3dpdGNoYCBmbGFnIGR1cmluZyB0aGVzZSBmbG93dGFibGUgYmxvY2sgYmluZC91bmJpbmQgb3BlcmF0aW9ucyBvbiBEU0EgdXNlciBuZXRkZXZzLiBUaGF0J3MgYSBqdWljeSB0YXJnZXQgZm9yIGZ1enppbmcuIFN0YXRlIHRyYWNraW5nIGJ1Z3MgaW4gdGhlIGJpbmQvdW5iaW5kIGxvZ2ljIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yLCBjcml0aWNhbGx5LCBtaXNtYXRjaGVkIGJpbmRpbmcvdW5iaW5kaW5nIHN0YXRlcywgY3JlYXRpbmcgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHZ1bG5lcmFiaWxpdGllcy5cblxuSSdtIHRoaW5raW5nIGFib3V0IGZvY3VzIHN5bWJvbHMgYW5kIHRhcmdldHMgbm93LlxuSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2l0aCBhIGJpdCBtb3JlIHJpZ29yOlxuLSAgIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2A6IEl0J3Mgc3RhdGljLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgZG9lc24ndCBpbmxpbmUgaXQgb3IgSSBjYW4gc3RpbGwgdXNlIHRoZSBzeW1ib2wgYWRkcmVzcyBpbiBgdm1saW51eGAuXG4tICAgYGRzYV91c2VyX3NldHVwX3RjYDogQW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCdzIHVzZWQgYXMgYSBjYWxsYmFjayBpbiBhIGBuZXRkZXZfb3BzYCBzdHJ1Y3QsIHNvIEknbSBjb25maWRlbnQgaXQncyBhY2Nlc3NpYmxlLlxuLSAgIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBgOiBUaGlzIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBubyBpc3N1ZXMgdGhlcmUuXG4tICAgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWRgOiBTdGF0aWMsIGJ1dCBpdCdzIHBhcnQgb2YgdGhlIHBhdGgsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0LlxuXG5UbyBnZXQgYSBicm9hZGVyIHBpY3R1cmUgb2YgRFNBLCBJIHNob3VsZCBhbHNvIGxvb2sgZm9yIG90aGVyIHBvdGVudGlhbCBEU0EtdXNlciBmdW5jdGlvbnMuIEknbGwgY2hlY2sgYG5ldC9kc2EvdXNlci5jYCBmb3IgYW55IG90aGVyIGludGVyZXN0aW5nIHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgRFNBIHVzZXIgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTI3MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoyNi4wMTQ0MzA5NjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDg3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV91c2VyX3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2EvdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvdXNlci5jPTE1NDM9c3RhdGljIHZvaWQgZHNhX3VzZXJfZGVsX2Nsc19tYXRjaGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTU3Mi1cXG5uZXQvZHNhL3VzZXIuYzoxNTczOnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfY2xzX21hdGNoYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2RzYS91c2VyLmMtMTU3NC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y19jbHNfbWF0Y2hhbGxfb2ZmbG9hZCAqY2xzLFxcbi0tXFxubmV0L2RzYS91c2VyLmM9MTYxOT1zdGF0aWMgaW50IGRzYV91c2VyX3N0YXRzX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTE2MzItXFxubmV0L2RzYS91c2VyLmM6MTYzMzpzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjX2Nsc19mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvZHNhL3VzZXIuYy0xNjM0LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHMsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNjQ4LVxcbm5ldC9kc2EvdXNlci5jOjE2NDk6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhLFxcbm5ldC9kc2EvdXNlci5jLTE2NTAtXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqY2JfcHJpdiwgYm9vbCBpbmdyZXNzKVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTY1OC1cXHRjYXNlIFRDX1NFVFVQX0NMU01BVENIQUxMOlxcbm5ldC9kc2EvdXNlci5jOjE2NTk6XFx0XFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Nsc19tYXRjaGFsbChkZXYsIHR5cGVfZGF0YSwgaW5ncmVzcyk7XFxubmV0L2RzYS91c2VyLmMtMTY2MC1cXHRjYXNlIFRDX1NFVFVQX0NMU0ZMT1dFUjpcXG5uZXQvZHNhL3VzZXIuYzoxNjYxOlxcdFxcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19jbHNfZmxvd2VyKGRldiwgdHlwZV9kYXRhLCBpbmdyZXNzKTtcXG5uZXQvZHNhL3VzZXIuYy0xNjYyLVxcdGRlZmF1bHQ6XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNjY2LVxcbm5ldC9kc2EvdXNlci5jOjE2Njc6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9ja19jYl9pZyhlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG5uZXQvZHNhL3VzZXIuYy0xNjY4LVxcdFxcdFxcdFxcdFxcdCB2b2lkICp0eXBlX2RhdGEsIHZvaWQgKmNiX3ByaXYpXFxubmV0L2RzYS91c2VyLmMtMTY2OS17XFxubmV0L2RzYS91c2VyLmM6MTY3MDpcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2IodHlwZSwgdHlwZV9kYXRhLCBjYl9wcml2LCB0cnVlKTtcXG5uZXQvZHNhL3VzZXIuYy0xNjcxLX1cXG5uZXQvZHNhL3VzZXIuYy0xNjcyLVxcbm5ldC9kc2EvdXNlci5jOjE2NzM6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9ja19jYl9lZyhlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG5uZXQvZHNhL3VzZXIuYy0xNjc0LVxcdFxcdFxcdFxcdFxcdCB2b2lkICp0eXBlX2RhdGEsIHZvaWQgKmNiX3ByaXYpXFxubmV0L2RzYS91c2VyLmMtMTY3NS17XFxubmV0L2RzYS91c2VyLmM6MTY3NjpcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2IodHlwZSwgdHlwZV9kYXRhLCBjYl9wcml2LCBmYWxzZSk7XFxubmV0L2RzYS91c2VyLmMtMTY3Ny19XFxuLS1cXG5uZXQvZHNhL3VzZXIuYz0xNjc5PXN0YXRpYyBMSVNUX0hFQUQoZHNhX3VzZXJfYmxvY2tfY2JfbGlzdCk7XFxubmV0L2RzYS91c2VyLmMtMTY4MC1cXG5uZXQvZHNhL3VzZXIuYzoxNjgxOnN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvZHNhL3VzZXIuYy0xNjgyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmYpXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNjg3LVxcdGlmIChmLVxcdTAwM2ViaW5kZXJfdHlwZSA9PSBGTE9XX0JMT0NLX0JJTkRFUl9UWVBFX0NMU0FDVF9JTkdSRVNTKVxcbm5ldC9kc2EvdXNlci5jOjE2ODg6XFx0XFx0Y2IgPSBkc2FfdXNlcl9zZXR1cF90Y19ibG9ja19jYl9pZztcXG5uZXQvZHNhL3VzZXIuYy0xNjg5LVxcdGVsc2UgaWYgKGYtXFx1MDAzZWJpbmRlcl90eXBlID09IEZMT1dfQkxPQ0tfQklOREVSX1RZUEVfQ0xTQUNUX0VHUkVTUylcXG5uZXQvZHNhL3VzZXIuYzoxNjkwOlxcdFxcdGNiID0gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2tfY2JfZWc7XFxubmV0L2RzYS91c2VyLmMtMTY5MS1cXHRlbHNlXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNzIwLVxcbm5ldC9kc2EvdXNlci5jOjE3MjE6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbm5ldC9kc2EvdXNlci5jLTE3MjItXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xNzQ2LVxcbm5ldC9kc2EvdXNlci5jOjE3NDc6c3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG5uZXQvZHNhL3VzZXIuYy0xNzQ4LVxcdFxcdFxcdCAgICAgdm9pZCAqdHlwZV9kYXRhKVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTc1NC1cXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbm5ldC9kc2EvdXNlci5jOjE3NTU6XFx0XFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX3RjX2Jsb2NrKGRldiwgdHlwZV9kYXRhKTtcXG5uZXQvZHNhL3VzZXIuYy0xNzU2LVxcdGNhc2UgVENfU0VUVVBfRlQ6XFxubmV0L2RzYS91c2VyLmM6MTc1NzpcXHRcXHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2soZHAsIHR5cGVfZGF0YSk7XFxubmV0L2RzYS91c2VyLmMtMTc1OC1cXHRkZWZhdWx0Olxcbi0tXFxubmV0L2RzYS91c2VyLmM9MjYwMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV91c2VyX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0yNjE1LSNlbmRpZlxcbm5ldC9kc2EvdXNlci5jOjI2MTY6XFx0Lm5kb19zZXR1cF90Y1xcdFxcdD0gZHNhX3VzZXJfc2V0dXBfdGMsXFxubmV0L2RzYS91c2VyLmMtMjYxNy1cXHQubmRvX2dldF9zdGF0czY0XFx0PSBkc2FfdXNlcl9nZXRfc3RhdHM2NCxcXG4tLVxcbm5ldC9kc2EvdXNlci5jPTI2Njk9c3RhdGljIGludCBkc2FfdXNlcl9waHlfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKnVzZXJfZGV2KVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMjcxMS1cXG5uZXQvZHNhL3VzZXIuYzoyNzEyOnZvaWQgZHNhX3VzZXJfc2V0dXBfdGFnZ2VyKHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyKVxcbm5ldC9kc2EvdXNlci5jLTI3MTMte1xcbi0tXFxubmV0L2RzYS91c2VyLmM9Mjc3Mz1pbnQgZHNhX3VzZXJfY3JlYXRlKHN0cnVjdCBkc2FfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTI4MzEtXFx0cG9ydC1cXHUwMDNldXNlciA9IHVzZXJfZGV2O1xcbm5ldC9kc2EvdXNlci5jOjI4MzI6XFx0ZHNhX3VzZXJfc2V0dXBfdGFnZ2VyKHVzZXJfZGV2KTtcXG5uZXQvZHNhL3VzZXIuYy0yODMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDoyNi4wNjI5MjA0MDNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3MDIzNTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEU0EgVXNlciBTZXR1cCBhbmQgRmxvdyBUYWJsZSBPZmZsb2FkKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrYCBhbmQgYGRzYV91c2VyX3NldHVwX3RjYCwgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBEU0EgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZy4gSSdsbCBhbHNvIGtlZXAgYSBjbG9zZSBleWUgb24gYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWRgIGFuZCBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYCBhcyB0aGV5J3JlIGNyaXRpY2FsIHRvIHRoZSBuZXRmaWx0ZXIgc2lkZSBvZiB0aGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBjb25uZWN0ZWQuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkga25vdyB3ZSBuZWVkIGBORVRfRFNBYCB0byBlbmFibGUgdGhlIERTQSBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGBuZXQvZHNhL3VzZXIuY2AgYW5kIGBpbmNsdWRlL25ldC9kc2EuaGAuIFRoZW4sIGBORl9GTE9XX1RBQkxFYCBlbmFibGVzIHRoZSBjb3JlIGZsb3cgdGFibGUgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBBbmQgb2YgY291cnNlLCBgTkZfVEFCTEVTYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBuZXRmaWx0ZXIgdGFibGUgaW5mcmFzdHJ1Y3R1cmUuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbSBtYWtpbmcgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzLiBHb29kLCBsb29rcyBsaWtlIHRob3NlIHRocmVlIGFyZSB0aGUgcHJpbWFyeSBvbmVzIGZvciB0aGlzIGFyZWEuXG5cblRpbWUgZm9yIGEgc2FuaXR5IGNoZWNrLiBJJ20gbG9va2luZyBhdCB0aGUgY29yZSBzdWJzeXN0ZW1zOiBuZXR3b3JraW5nLCBzcGVjaWZpY2FsbHkgRFNBIChgbmV0L2RzYS9gKSBhbmQgbmV0ZmlsdGVyIG9mZmxvYWQuIFRoZSByZWFjaGFiaWxpdHkgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGFjY2Vzc2libGUgdGhyb3VnaCB2aXJ0dWFsIGRldmljZXMgKHRoYW5rcyB0byBgTkVUX0RTQV9MT09QYCwgd2hpY2ggaXMgZ3JlYXQgZm9yIHRlc3RpbmcpIGFuZCB1c2VyLXNwYWNlIHRvb2xzIGxpa2UgbmV0bGluaywgbmZ0YWJsZXMsIGFuZCB0YyBmb3IgZmxvdyB0YWJsZSBvcGVyYXRpb25zLiBBbmQgeWVzLCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhpcywgd2hpY2ggaXMgY29uZmlybWVkIGJ5IHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHdoYXQgSSBhbHJlYWR5IGlkZW50aWZpZWQsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSB0aG9zZSB0aHJlZSBJIGp1c3QgY29uZmlybWVkLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBmb3IgdGhpcyBhbmFseXNpcy4gTm93LCBJJ2xsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MjE2LCJPdXRwdXRUb2tlbnMiOjIxMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDozMC42MzMxNTc1MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjA2MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfRFNBXCIsXG4gICAgXCJORVRfRFNBX0xPT1BcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrXCIsXG4gICAgXCJkc2FfdXNlcl9zZXR1cF90Y1wiLFxuICAgIFwibmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBmbG93dGFibGUgYmxvY2sgc2V0dXAgbG9naWMgYnkgYWRkaW5nIHN0YXRlIHRyYWNraW5nIChmdF9vbl9zd2l0Y2gpIG9uIHN0cnVjdCBkc2FfcG9ydCB0byBlbnN1cmUgdW5iaW5kaW5nIHJvdXRlcyB0byB0aGUgc2FtZSBlbnRpdHkgKHN3aXRjaCBvciBjb25kdWl0KSB0aGF0IGhhbmRsZWQgYmluZGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIGZsb3d0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zIG9uIERTQSB1c2VyIHBvcnRzIChzdWNoIGFzIHdpdGggdGhlIHNvZnR3YXJlIGRzYV9sb29wIG1vY2sgZHJpdmVyKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBwb3RlbnRpYWwgc3RhdGUgbWlzbWF0Y2hlcywgYmluZC91bmJpbmQgZXJyb3IgcGF0aHMsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9EU0FcIixcbiAgICBcIk5FVF9EU0FfTE9PUFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHNhX3VzZXJfc2V0dXBfZnRfYmxvY2tcIixcbiAgICBcImRzYV91c2VyX3NldHVwX3RjXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfY21kXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyBieSBhZGRpbmcgc3RhdGUgdHJhY2tpbmcgKGZ0X29uX3N3aXRjaCkgb24gc3RydWN0IGRzYV9wb3J0IHRvIGVuc3VyZSB1bmJpbmRpbmcgcm91dGVzIHRvIHRoZSBzYW1lIGVudGl0eSAoc3dpdGNoIG9yIGNvbmR1aXQpIHRoYXQgaGFuZGxlZCBiaW5kaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb24gRFNBIHVzZXIgcG9ydHMgKHN1Y2ggYXMgd2l0aCB0aGUgc29mdHdhcmUgZHNhX2xvb3AgbW9jayBkcml2ZXIpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHBvdGVudGlhbCBzdGF0ZSBtaXNtYXRjaGVzLCBiaW5kL3VuYmluZCBlcnJvciBwYXRocywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjMwLjcwNzM2OTM3OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzExMTM3OTk3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDozMC43MDc4NDgxMjlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTExMzMxNzI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBEU0EgZmxvd3RhYmxlIGJsb2NrIHNldHVwIGxvZ2ljIChUQ19TRVRVUF9GVCkgdG8gcm91dGUgYmluZC91bmJpbmQgcmVxdWVzdHMgdG8gZWl0aGVyIHRoZSBEU0Egc3dpdGNoIGRyaXZlciBvciB0aGUgY29uZHVpdCBuZXRkZXYsIHRyYWNraW5nIHN0YXRlIHZpYSBhIG5ldyBgZnRfb25fc3dpdGNoYCBmaWVsZCBpbiBgc3RydWN0IGRzYV9wb3J0YC4gYHN0cnVjdCBkc2FfcG9ydGAgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgbmV3IGZpZWxkLiBUaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjkyMWYzMTFhYjUyZDBmYWVlNDE3NmE5YTY0NDA4YmUxNjUzZWY1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NTM6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA3NTA3ZDYzMmU3YzZkLi5kYmNiMDJkZTA2ZmNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXG5AQCAtMjk3LDYgKzI5NywxMiBAQCBzdHJ1Y3QgZHNhX3BvcnQge1xuIFxuIFx0dThcdFx0XHRzZXR1cDoxO1xuIFxuK1x0LyogRmxvd3RhYmxlIGJsb2NrcyBvbiB0aGlzIHVzZXIgcG9ydCBnbyB0byB0aGUgc3dpdGNoLCBub3QgdGhlXG4rXHQgKiBjb25kdWl0OyBkZWNpZGVkIGF0IGJpbmQgdGltZS4gV3JpdHRlbiB3aXRob3V0IHJ0bmwsIHNvIG5vdCBvbmUgb2ZcbitcdCAqIHRoZSBiaXQgZmllbGRzIGFib3ZlLlxuK1x0ICovXG4rXHRib29sXHRcdFx0ZnRfb25fc3dpdGNoO1xuK1xuIFx0c3RydWN0IGRldmljZV9ub2RlXHQqZG47XG4gXHR1bnNpZ25lZCBpbnRcdFx0YWdlaW5nX3RpbWU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS91c2VyLmMgYi9uZXQvZHNhL3VzZXIuY1xuaW5kZXggMDQxZjkwNjBjOGVmMC4uZjRjZDQ4ZGYyNTE5ZCAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdXNlci5jXG4rKysgYi9uZXQvZHNhL3VzZXIuY1xuQEAgLTE3MTgsMTUgKzE3MTgsMzAgQEAgc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEpXG4rc3RhdGljIGludCBkc2FfdXNlcl9zZXR1cF9mdF9ibG9jayhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxuK1x0XHRcdFx0ICAgc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8pXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQgPSBkc2FfcG9ydF90b19jb25kdWl0KGRzYV90b19wb3J0KGRzLCBwb3J0KSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApO1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHAtXHUwMDNlZHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0LyogVGhlIHVuYmluZCBnb2VzIHRvIHRoZSBzaWRlIHRoYXQgdG9vayB0aGUgYmluZC4gKi9cbitcdGlmIChiby1cdTAwM2Vjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkge1xuK1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKVxuK1x0XHRcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsXG4rXHRcdFx0XHRcdFx0ICAgICBibyk7XG4rXHRcdGRwLVx1MDAzZWZ0X29uX3N3aXRjaCA9IGVyciAhPSAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGRwLVx1MDAzZWZ0X29uX3N3aXRjaClcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fSBlbHNlIGlmIChkcC1cdTAwM2VmdF9vbl9zd2l0Y2gpIHtcbitcdFx0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsIGJvKTtcbitcdH1cbiBcbiBcdGlmICghY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90YylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNvbmR1aXQtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMoY29uZHVpdCwgVENfU0VUVVBfRlQsIHR5cGVfZGF0YSk7XG4rXHRyZXR1cm4gY29uZHVpdC1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90Yyhjb25kdWl0LCBUQ19TRVRVUF9GVCwgYm8pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuQEAgLTE3MzksNyArMTc1NCw3IEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gZHNhX3VzZXJfc2V0dXBfdGNfYmxvY2soZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9GVDpcbi1cdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRzLCBkcC1cdTAwM2VpbmRleCwgdHlwZV9kYXRhKTtcbitcdFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDozMC43MDc4NDg5NjlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMxMjg3MTMxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB0byB0aGUgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBjb2RlIGluIHRoZSBrZXJuZWwgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGhlcmUsIHNvIGxldCdzIGFuYWx5emUgdGhpcyBtZXRob2RpY2FsbHkuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2UuIEEgbmV3IGJvb2xlYW4sIGBmdF9vbl9zd2l0Y2hgLCBpcyBhZGRlZCB0byB0aGUgYGRzYV9wb3J0YCBzdHJ1Y3QgaW4gYGluY2x1ZGUvbmV0L2RzYS5oYC4gVGhpcyBmbGFnIGRldGVybWluZXMgaWYgZmxvd3RhYmxlIGJsb2NrcyBmb3IgYSB1c2VyIHBvcnQgYXJlIGhhbmRsZWQgYnkgdGhlIHN3aXRjaCBkaXJlY3RseSBvciB0aGUgXCJjb25kdWl0XCIgKHdoaWNoIEkgaW5mZXIgaXMgc29tZSBzb3J0IG9mIGludGVybWVkaWFyeSkuIFRoZSBsb2dpYyBkaWN0YXRlcyB0aGF0IHRoaXMgZGV0ZXJtaW5hdGlvbiBpcyBtYWRlIGF0IGJpbmQgdGltZSBhbmQgY2FuIGJlIHN1YnNlcXVlbnRseSB1bmJvdW5kLiBUaGlzIGlzIGtleSwgYSBib29sZWFuIHRvIGRldGVybWluZSBleGVjdXRpb24gcGF0aC5cblxuVGhlbiwgdGhlcmUncyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AgaW4gYG5ldC9kc2EvdXNlci5jYC4gVGhlIGZ1bmN0aW9uIG5vdyB0YWtlcyBhIGBkc2FfcG9ydGAgc3RydWN0IGFzIGlucHV0IGluc3RlYWQgb2YgZGlyZWN0bHkgcmVjZWl2aW5nIGBkc2Ffc3dpdGNoYCBhbmQgcG9ydCBudW1iZXIuIFRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYGRzYV9wb3J0YCBkYXRhLiBJdCBhbHNvIGRpcmVjdGx5IHJlZmVyZW5jZXMgdGhlIGBmdF9vbl9zd2l0Y2hgIGZsYWcuIE1vc3QgaW1wb3J0YW50bHksIHRoZSBsb2dpYyBmb3Igc2V0dGluZyB1cCB0aGUgZmxvd3RhYmxlIGJsb2NrcyBub3cgYnJhbmNoZXMgYmFzZWQgb24gdGhpcyBmbGFnJ3MgdmFsdWUuIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgY2FsbHMgYGRzLVx1MDAzZW9wcy1cdTAwM2Vwb3J0X3NldHVwX3RjYCBpZiBgZnRfb25fc3dpdGNoYCBpcyB0cnVlLCBpbXBseWluZyBhIGRpZmZlcmVudCBjb2RlIHBhdGguIFRoZSBjb25kaXRpb25hbCBlbnN1cmVzIHRoYXQgdW5iaW5kaW5nIGlzIHNpbWlsYXJseSBoYW5kbGVkIG9uIHRoZSBjb3JyZWN0IHNpZGUsIGFzIGRldGVybWluZWQgYnkgdGhlIGJpbmQuXG5cblRoZSBjb2RlIHNlZW1zIHRvIGJlIGhhbmRsaW5nIHRoZSB1bmJpbmQgY2FzZSB0b28uIEl0IGxvb2tzIGxpa2UgaXQgaXMgY2FsbGluZyB0aGUgc2FtZSBgcG9ydF9zZXR1cF90Y2AgZnVuY3Rpb24gZm9yIHRoZSB1bmJpbmQgb3BlcmF0aW9uLiBUaGlzIGNvdWxkIGJlIGFuIGltcG9ydGFudCBwbGFjZSB0byBoYXZlIHRoZSBmdXp6aW5nIHRhcmdldC5cblxuTm93LCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGRzYV9wb3J0YCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCBob3cgYGZ0X29uX3N3aXRjaGAgaXMgc2V0LCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgZm9yIHRoZSBjb2RlIGZsb3cuIEVzc2VudGlhbGx5LCB3aGF0J3MgdGhlIHdob2xlIHBpY3R1cmUgaGVyZT8gV2hhdCBhcmUgdGhlIHBvc3NpYmxlIHN0YXRlcywgaG93IGRvIHRoZXkgdHJhbnNpdGlvbiwgYW5kIHdoYXQgYXJlIHRoZSBpbXBvcnRhbnQgY29uZGl0aW9ucz9cblxuSSBhbSBnb2luZyB0byB1c2UgYGdyZXBwZXJgIChvciBteSBlcXVpdmFsZW50IGZpbGUgcmVhZGluZyB0b29scykgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZSBgZHNhX3BvcnRgIHN0cnVjdCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBJIG5lZWQgdG8ga25vdyB0aGUgcG9zc2libGUgdmFsdWVzIG9mIHRoYXQgZmxhZyBhbmQgaG93IGl0J3MgY2hhbmdlZC4gV2l0aCB0aGF0IGluZm9ybWF0aW9uLCBJJ2xsIGJlIGFibGUgdG8gZGVjaWRlIGlmIEtNU0FOIGZ1enppbmcgd291bGQgYmUgYmVuZWZpY2lhbCBpbiBpZGVudGlmeWluZyBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHRoZSBjb25kaXRpb25hbCBjb2RlIHBhdGhzLiBNeSBndXQgc2F5cyB0aGlzIGRlc2VydmVzIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjQzLjgzNjU2NDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODAwNzk5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkc2FfcG9ydF9hbGxvY3xremFsbG9jLipkc2FfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6NDMuODgzMzY4ODY5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMTM4MzcyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBkZWx2aW5nIGludG8gdGhlIGNvZGU6XG5cbioqRmluZGluZyB0aGUgQWxsb2NhdGlvbiBvZiBgc3RydWN0IGRzYV9wb3J0YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyBgc3RydWN0IGRzYV9wb3J0YCBpcyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBgbmV0L2RzYS9gIGRpcmVjdG9yeS4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBJIGNvdWxkIGp1c3QgdXNlIGBncmVwYCByZWN1cnNpdmVseSwgYnV0IHRoYXQgY2FuIHJldHVybiBhIGxvdCBvZiBmYWxzZSBwb3NpdGl2ZXMsIGFuZCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgb2Z0ZW4gdGhlIGFjdHVhbCBhbGxvY2F0aW9uIG1pZ2h0IGludm9sdmUgbW9yZSB0aGFuIGp1c3QgYSBkaXJlY3QgYGttYWxsb2NgIG9yIHNpbWlsYXIgY2FsbC4gSXQgY291bGQgYmUgcGFydCBvZiBhIGxhcmdlciBzdHJ1Y3R1cmUsIGFsbG9jYXRlZCB3aXRoaW4gYW5vdGhlciBjb250ZXh0LiBMZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgbW9zdCBsaWtlbHkgY3VscHJpdHM6XG5cbiogICAqKkhlYWRlciBGaWxlczoqKiBUaGUgaGVhZGVyIGZpbGVzIHdpdGhpbiBgbmV0L2RzYS9gIGFyZSBnb29kIHBsYWNlcyB0byBzdGFydCwgYXMgSSBrbm93IHRoYXQncyB3aGVyZSB0aGUgc3RydWN0dXJlIGlzIGxpa2VseSBkZWZpbmVkLiBJJ2xsIGxvb2sgZm9yIHdoZXJlIGBzdHJ1Y3QgZHNhX3BvcnRgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGFuZCBhbnkgcmVsYXRlZCB0eXBlZGVmcy4gQSBxdWljayBzZWFyY2ggZm9yIHRoZSBkZWNsYXJhdGlvbiBtaWdodCBldmVuIGxlYWQgbWUgdG8gdGhlIGFsbG9jYXRpb24uXG4qICAgKipJbml0aWFsaXphdGlvbiBGdW5jdGlvbnM6KiogVGhlbiBJJ2xsIGxvb2sgZm9yIGFueSBsaWtlbHkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgd2l0aGluIHRoZSBEU0Egc3Vic3lzdGVtLiBUaGVzZSBmdW5jdGlvbnMgd2lsbCBiZSB0aGUgbGlrZWx5IHBsYWNlcyB0aGF0IGEgc3RydWN0IHdvdWxkIGJlIGFsbG9jYXRlZC4gQ29tbW9uIG5hbWluZyBjb252ZW50aW9ucyBsaWtlIGBkc2FfcG9ydF9hbGxvY2AsIGBkc2FfcG9ydF9pbml0YCwgb3Igc2ltaWxhci5cbiogICAqKkRTQSBEcml2ZXJzOioqIFRoZSBkZXZpY2UgZHJpdmVycyB0aGVtc2VsdmVzIGFyZSBhIGdvb2QgYmV0LiBPZnRlbiwgdGhlIGFsbG9jYXRpb24gaGFwcGVucyBkdXJpbmcgZGV2aWNlIHJlZ2lzdHJhdGlvbiBvciBpbml0aWFsaXphdGlvbi4gSSdsbCBwYXkgc3BlY2lmaWMgYXR0ZW50aW9uIHRvIHRoZSBkcml2ZXJzIGZvciB2YXJpb3VzIERTQSBzd2l0Y2hlcyBhbmQgcG9ydHMuXG5cbkknbGwga2VlcCBhIHNoYXJwIGV5ZSBvdXQgZm9yIGluZGlyZWN0IGFsbG9jYXRpb25zIHRvby4gRm9yIGV4YW1wbGUsIGlzIGl0IGEgbWVtYmVyIG9mIGEgbGFyZ2VyIGBzdHJ1Y3QgZHNhX3N3aXRjaGA/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhbm90aGVyIHN0cnVjdHVyZSwgd2hpY2ggaXMgYWxsb2NhdGVkLCBhbmQgdGhlIGBkc2FfcG9ydGAgaXMgZW1iZWRkZWQgc29tZWhvdz9cblxuSSdtIG1lbnRhbGx5IHJlYWR5IHRvIGRpdmUgZGVlcCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgdHJhY2UgY2FsbHMsIGFuZCBmb2xsb3cgYW55IG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIGFuc3dlcidzIHNvbWV3aGVyZSBidXJpZWQgaW5zaWRlIGFuIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDo0Ny4wOTcyMDgzMzhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjEyNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBkc2FfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDIwMjcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9kc2EvY29uZHVpdC5jPTIwPXN0YXRpYyBpbnQgZHNhX2NvbmR1aXRfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2RzYS9jb25kdWl0LmMtMjEte1xcbm5ldC9kc2EvY29uZHVpdC5jOjIyOlxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvY29uZHVpdC5jLTIzLVxcdGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gY3B1X2RwLVxcdTAwM2VvcmlnX2V0aHRvb2xfb3BzO1xcbi0tXFxubmV0L2RzYS9jb25kdWl0LmM9NDk9c3RhdGljIHZvaWQgZHNhX2NvbmR1aXRfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTUxLXtcXG5uZXQvZHNhL2NvbmR1aXQuYzo1MjpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy01My1cXHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGNwdV9kcC1cXHUwMDNlb3JpZ19ldGh0b29sX29wcztcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jPTEwMj1zdGF0aWMgdm9pZCBkc2FfY29uZHVpdF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmMtMTA1LXtcXG5uZXQvZHNhL2NvbmR1aXQuYzoxMDY6XFx0c3RydWN0IGRzYV9wb3J0ICpkcCwgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy0xMDctXFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXFx1MDAzZW9yaWdfZXRodG9vbF9vcHM7XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz0xMjk9c3RhdGljIHZvaWQgZHNhX2NvbmR1aXRfZ2V0X2V0aHRvb2xfcGh5X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYy0xMzIte1xcbm5ldC9kc2EvY29uZHVpdC5jOjEzMzpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy0xMzQtXFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXFx1MDAzZW9yaWdfZXRodG9vbF9vcHM7XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz0xNjI9c3RhdGljIGludCBkc2FfY29uZHVpdF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldClcXG5uZXQvZHNhL2NvbmR1aXQuYy0xNjMte1xcbm5ldC9kc2EvY29uZHVpdC5jOjE2NDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwLCAqY3B1X2RwID0gZGV2LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvY29uZHVpdC5jLTE2NS1cXHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGNwdV9kcC1cXHUwMDNlb3JpZ19ldGh0b29sX29wcztcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jPTIyMj1zdGF0aWMgdm9pZCBkc2FfY29uZHVpdF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LFxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmMtMjI0LXtcXG5uZXQvZHNhL2NvbmR1aXQuYzoyMjU6XFx0c3RydWN0IGRzYV9wb3J0ICpkcCwgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy0yMjYtXFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBjcHVfZHAtXFx1MDAzZW9yaWdfZXRodG9vbF9vcHM7XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz0yNjE9aW50IF9fZHNhX2NvbmR1aXRfaHd0c3RhbXBfdmFsaWRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTI2NC17XFxubmV0L2RzYS9jb25kdWl0LmM6MjY1OlxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvY29uZHVpdC5jLTI2Ni1cXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBjcHVfZHAtXFx1MDAzZWRzO1xcbm5ldC9kc2EvY29uZHVpdC5jLTI2Ny1cXHRzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3Q7XFxubmV0L2RzYS9jb25kdWl0LmM6MjY4OlxcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxubmV0L2RzYS9jb25kdWl0LmMtMjY5LVxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmM9MjgzPXN0YXRpYyBpbnQgZHNhX2NvbmR1aXRfZXRodG9vbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9kc2EvY29uZHVpdC5jLTI4NC17XFxubmV0L2RzYS9jb25kdWl0LmM6Mjg1OlxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZGV2LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvY29uZHVpdC5jLTI4Ni1cXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBjcHVfZHAtXFx1MDAzZWRzO1xcbi0tXFxubmV0L2RzYS9jb25kdWl0LmM9MzEyPXN0YXRpYyB2b2lkIGRzYV9jb25kdWl0X2V0aHRvb2xfdGVhcmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvZHNhL2NvbmR1aXQuYy0zMTMte1xcbm5ldC9kc2EvY29uZHVpdC5jOjMxNDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy0zMTUtXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz0zNDA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmMtMzQzLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGQpO1xcbm5ldC9kc2EvY29uZHVpdC5jOjM0NDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRldi1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2NvbmR1aXQuYy0zNDUtXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz0zNTA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTM1NS1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihkKTtcXG5uZXQvZHNhL2NvbmR1aXQuYzozNTY6XFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkZXYtXFx1MDAzZWRzYV9wdHI7XFxubmV0L2RzYS9jb25kdWl0LmMtMzU3LVxcdHNpemVfdCBsZW4gPSBlbmQgLSBidWY7XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz00MDk9c3RhdGljIHZvaWQgZHNhX2NvbmR1aXRfcmVzZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYy00MTgtXFxubmV0L2RzYS9jb25kdWl0LmM6NDE5OmludCBkc2FfY29uZHVpdF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcClcXG5uZXQvZHNhL2NvbmR1aXQuYy00MjAte1xcbi0tXFxubmV0L2RzYS9jb25kdWl0LmM9NDc0PXZvaWQgZHNhX2NvbmR1aXRfdGVhcmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTQ4OS1cXG5uZXQvZHNhL2NvbmR1aXQuYzo0OTA6aW50IGRzYV9jb25kdWl0X2xhZ19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbGFnX2Rldiwgc3RydWN0IGRzYV9wb3J0ICpjcHVfZHAsXFxubmV0L2RzYS9jb25kdWl0LmMtNDkxLVxcdFxcdFxcdCAgc3RydWN0IG5ldGRldl9sYWdfdXBwZXJfaW5mbyAqdWluZm8sXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYz01MjI9dm9pZCBkc2FfY29uZHVpdF9sYWdfdGVhcmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmxhZ19kZXYsXFxubmV0L2RzYS9jb25kdWl0LmM6NTIzOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwKVxcbm5ldC9kc2EvY29uZHVpdC5jLTUyNC17XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuaC01LVxcbm5ldC9kc2EvY29uZHVpdC5oOjY6c3RydWN0IGRzYV9wb3J0O1xcbm5ldC9kc2EvY29uZHVpdC5oLTctc3RydWN0IG5ldF9kZXZpY2U7XFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuaD05PXN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7XFxubmV0L2RzYS9jb25kdWl0LmgtMTAtXFxubmV0L2RzYS9jb25kdWl0Lmg6MTE6aW50IGRzYV9jb25kdWl0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwKTtcXG5uZXQvZHNhL2NvbmR1aXQuaC0xMi12b2lkIGRzYV9jb25kdWl0X3RlYXJkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbm5ldC9kc2EvY29uZHVpdC5oOjEzOmludCBkc2FfY29uZHVpdF9sYWdfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmxhZ19kZXYsIHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwLFxcbm5ldC9kc2EvY29uZHVpdC5oLTE0LVxcdFxcdFxcdCAgc3RydWN0IG5ldGRldl9sYWdfdXBwZXJfaW5mbyAqdWluZm8sXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuaD0xNj12b2lkIGRzYV9jb25kdWl0X2xhZ190ZWFyZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqbGFnX2RldixcXG5uZXQvZHNhL2NvbmR1aXQuaDoxNzpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCk7XFxubmV0L2RzYS9jb25kdWl0LmgtMTgtaW50IF9fZHNhX2NvbmR1aXRfaHd0c3RhbXBfdmFsaWRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9kc2EvZGV2bGluay5jPTI4Mz1kc2FfZGV2bGlua19wb3J0X3JlZ2lvbl9jcmVhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxubmV0L2RzYS9kZXZsaW5rLmMtMjg3LXtcXG5uZXQvZHNhL2RldmxpbmsuYzoyODg6XFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcXG5uZXQvZHNhL2RldmxpbmsuYy0yODktXFxuLS1cXG5uZXQvZHNhL2RldmxpbmsuYz0zMDA9RVhQT1JUX1NZTUJPTF9HUEwoZHNhX2RldmxpbmtfcmVnaW9uX2Rlc3Ryb3kpO1xcbm5ldC9kc2EvZGV2bGluay5jLTMwMS1cXG5uZXQvZHNhL2RldmxpbmsuYzozMDI6aW50IGRzYV9wb3J0X2Rldmxpbmtfc2V0dXAoc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL2RldmxpbmsuYy0zMDMte1xcbi0tXFxubmV0L2RzYS9kZXZsaW5rLmMtMzU0LVxcbm5ldC9kc2EvZGV2bGluay5jOjM1NTp2b2lkIGRzYV9wb3J0X2RldmxpbmtfdGVhcmRvd24oc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL2RldmxpbmsuYy0zNTYte1xcbi0tXFxubmV0L2RzYS9kZXZsaW5rLmgtNS1cXG5uZXQvZHNhL2RldmxpbmsuaDo2OnN0cnVjdCBkc2FfcG9ydDtcXG5uZXQvZHNhL2RldmxpbmsuaC03LXN0cnVjdCBkc2Ffc3dpdGNoO1xcbm5ldC9kc2EvZGV2bGluay5oLTgtXFxubmV0L2RzYS9kZXZsaW5rLmg6OTppbnQgZHNhX3BvcnRfZGV2bGlua19zZXR1cChzdHJ1Y3QgZHNhX3BvcnQgKmRwKTtcXG5uZXQvZHNhL2RldmxpbmsuaDoxMDp2b2lkIGRzYV9wb3J0X2RldmxpbmtfdGVhcmRvd24oc3RydWN0IGRzYV9wb3J0ICpkcCk7XFxubmV0L2RzYS9kZXZsaW5rLmgtMTEtdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTA2PXN0cnVjdCBkc2FfbGFnICpkc2FfdHJlZV9sYWdfZmluZChzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTEwOC17XFxubmV0L2RzYS9kc2EuYzoxMDk6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTExMC1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTE4PXN0cnVjdCBkc2FfYnJpZGdlICpkc2FfdHJlZV9icmlkZ2VfZmluZChzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTEyMC17XFxubmV0L2RzYS9kc2EuYzoxMjE6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTEyMi1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTgxPXN0cnVjdCBkc2Ffc3dpdGNoICpkc2Ffc3dpdGNoX2ZpbmQoaW50IHRyZWVfaW5kZXgsIGludCBzd19pbmRleClcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTgzLVxcdHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdDtcXG5uZXQvZHNhL2RzYS5jOjE4NDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMTg1LVxcbi0tXFxubmV0L2RzYS9kc2EuYz0yNzE9c3RhdGljIHZvaWQgZHNhX3RyZWVfcHV0KHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMjc2LVxcbm5ldC9kc2EvZHNhLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgZHNhX3BvcnQgKmRzYV90cmVlX2ZpbmRfcG9ydF9ieV9ub2RlKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG5uZXQvZHNhL2RzYS5jLTI3OC1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKVxcbm5ldC9kc2EvZHNhLmMtMjc5LXtcXG5uZXQvZHNhL2RzYS5jOjI4MDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMjgxLVxcbi0tXFxubmV0L2RzYS9kc2EuYy0yODgtXFxubmV0L2RzYS9kc2EuYzoyODk6c3RhdGljIHN0cnVjdCBkc2FfbGluayAqZHNhX2xpbmtfdG91Y2goc3RydWN0IGRzYV9wb3J0ICpkcCxcXG5uZXQvZHNhL2RzYS5jOjI5MDpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRzYV9wb3J0ICpsaW5rX2RwKVxcbm5ldC9kc2EvZHNhLmMtMjkxLXtcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMzE0LVxcbm5ldC9kc2EvZHNhLmM6MzE1OnN0YXRpYyBib29sIGRzYV9wb3J0X3NldHVwX3JvdXRpbmdfdGFibGUoc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL2RzYS5jLTMxNi17XFxuLS1cXG5uZXQvZHNhL2RzYS5jLTMyMC1cXHRzdHJ1Y3Qgb2ZfcGhhbmRsZV9pdGVyYXRvciBpdDtcXG5uZXQvZHNhL2RzYS5jOjMyMTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmxpbmtfZHA7XFxubmV0L2RzYS9kc2EuYy0zMjItXFx0c3RydWN0IGRzYV9saW5rICpkbDtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MzQyPXN0YXRpYyBib29sIGRzYV90cmVlX3NldHVwX3JvdXRpbmdfdGFibGUoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbi0tXFxubmV0L2RzYS9kc2EuYy0zNDQtXFx0Ym9vbCBjb21wbGV0ZSA9IHRydWU7XFxubmV0L2RzYS9kc2EuYzozNDU6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTM0Ni1cXG4tLVxcbm5ldC9kc2EvZHNhLmMtMzU3LVxcbm5ldC9kc2EvZHNhLmM6MzU4OnN0YXRpYyBzdHJ1Y3QgZHNhX3BvcnQgKmRzYV90cmVlX2ZpbmRfZmlyc3RfY3B1KHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcXG5uZXQvZHNhL2RzYS5jLTM1OS17XFxubmV0L2RzYS9kc2EuYzozNjA6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTM2MS1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9MzY5PXN0cnVjdCBuZXRfZGV2aWNlICpkc2FfdHJlZV9maW5kX2ZpcnN0X2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtMzcwLXtcXG5uZXQvZHNhL2RzYS5jOjM3MTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcXG5uZXQvZHNhL2RzYS5jLTM3Mi1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9MzgwPXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfZGVmYXVsdF9jcHUoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtMzgxLXtcXG5uZXQvZHNhL2RzYS5jOjM4MjpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCwgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMzgzLVxcbi0tXFxubmV0L2RzYS9kc2EuYy00MDAtXFxubmV0L2RzYS9kc2EuYzo0MDE6c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqXFxubmV0L2RzYS9kc2EuYy00MDItZHNhX3N3aXRjaF9wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxubmV0L2RzYS9kc2EuYy00MDMte1xcbm5ldC9kc2EvZHNhLmM6NDA0OlxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xcbm5ldC9kc2EvZHNhLmMtNDA1LVxcbi0tXFxubmV0L2RzYS9kc2EuYz00MjQ9c3RhdGljIGludCBkc2FfdHJlZV9zZXR1cF9jcHVfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtNDI1LXtcXG5uZXQvZHNhL2RzYS5jOjQyNjpcXHRzdHJ1Y3QgZHNhX3BvcnQgKnByZWZlcnJlZF9jcHVfZHAsICpjcHVfZHAsICpkcDtcXG5uZXQvZHNhL2RzYS5jLTQyNy1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9NDUwPXN0YXRpYyB2b2lkIGRzYV90cmVlX3RlYXJkb3duX2NwdV9wb3J0cyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXFxubmV0L2RzYS9kc2EuYy00NTEte1xcbm5ldC9kc2EvZHNhLmM6NDUyOlxcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxubmV0L2RzYS9kc2EuYy00NTMtXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTQ1OC1cXG5uZXQvZHNhL2RzYS5jOjQ1OTpzdGF0aWMgaW50IGRzYV9wb3J0X3NldHVwKHN0cnVjdCBkc2FfcG9ydCAqZHApXFxubmV0L2RzYS9kc2EuYy00NjAte1xcbi0tXFxubmV0L2RzYS9kc2EuYy01MzItXFxubmV0L2RzYS9kc2EuYzo1MzM6c3RhdGljIHZvaWQgZHNhX3BvcnRfdGVhcmRvd24oc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL2RzYS5jLTUzNC17XFxuLS1cXG5uZXQvZHNhL2RzYS5jLTU2My1cXG5uZXQvZHNhL2RzYS5jOjU2NDpzdGF0aWMgaW50IGRzYV9wb3J0X3NldHVwX2FzX3VudXNlZChzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxcbm5ldC9kc2EvZHNhLmMtNTY1LXtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9NzE1PXN0YXRpYyB2b2lkIGRzYV90cmVlX3RlYXJkb3duX3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcXG5uZXQvZHNhL2RzYS5jLTcxNi17XFxubmV0L2RzYS9kc2EuYzo3MTc6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTcxOC1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9NzMwPXN0YXRpYyB2b2lkIGRzYV90cmVlX3RlYXJkb3duX3N3aXRjaGVzKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdClcXG5uZXQvZHNhL2RzYS5jLTczMS17XFxubmV0L2RzYS9kc2EuYzo3MzI6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTczMy1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9NzM5PXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtNzQwLXtcXG5uZXQvZHNhL2RzYS5jOjc0MTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtNzQyLVxcdGludCBlcnIgPSAwO1xcbi0tXFxubmV0L2RzYS9kc2EuYz03NzE9c3RhdGljIGludCBkc2FfdHJlZV9zZXR1cF9zd2l0Y2hlcyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXFxubmV0L2RzYS9kc2EuYy03NzIte1xcbm5ldC9kc2EvZHNhLmM6NzczOlxcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxubmV0L2RzYS9kc2EuYy03NzQtXFx0aW50IGVyciA9IDA7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTc4Nz1zdGF0aWMgaW50IGRzYV90cmVlX3NldHVwX2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtNzg4LXtcXG5uZXQvZHNhL2RzYS5jOjc4OTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcXG5uZXQvZHNhL2RzYS5jLTc5MC1cXHRpbnQgZXJyID0gMDtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9ODE0PXN0YXRpYyB2b2lkIGRzYV90cmVlX3RlYXJkb3duX2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbm5ldC9kc2EvZHNhLmMtODE1LXtcXG5uZXQvZHNhL2RzYS5jOjgxNjpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcXG5uZXQvZHNhL2RzYS5jLTgxNy1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9ODM1PXN0YXRpYyBpbnQgZHNhX3RyZWVfc2V0dXBfbGFncyhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QpXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTgzNy1cXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcXG5uZXQvZHNhL2RzYS5jOjgzODpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtODM5LVxcbi0tXFxubmV0L2RzYS9kc2EuYz05ODM9aW50IGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LFxcbi0tXFxubmV0L2RzYS9kc2EuYy05ODctXFx0c3RydWN0IGRzYV9ub3RpZmllcl90YWdfcHJvdG9faW5mbyBpbmZvO1xcbm5ldC9kc2EvZHNhLmM6OTg4OlxcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxubmV0L2RzYS9kc2EuYy05ODktXFx0aW50IGVyciA9IC1FQlVTWTtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTAyOT1zdGF0aWMgdm9pZCBkc2FfdHJlZV9jb25kdWl0X3N0YXRlX2NoYW5nZShzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTEwMzItXFx0c3RydWN0IGRzYV9ub3RpZmllcl9jb25kdWl0X3N0YXRlX2luZm8gaW5mbztcXG5uZXQvZHNhL2RzYS5jOjEwMzM6XFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBjb25kdWl0LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvZHNhLmMtMTAzNC1cXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTA0MT12b2lkIGRzYV90cmVlX2NvbmR1aXRfYWRtaW5fc3RhdGVfY2hhbmdlKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTA0NC17XFxubmV0L2RzYS9kc2EuYzoxMDQ1OlxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gY29uZHVpdC1cXHUwMDNlZHNhX3B0cjtcXG5uZXQvZHNhL2RzYS5jLTEwNDYtXFx0Ym9vbCBub3RpZnkgPSBmYWxzZTtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTA2ND12b2lkIGRzYV90cmVlX2NvbmR1aXRfb3Blcl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LFxcbi0tXFxubmV0L2RzYS9kc2EuYy0xMDY3LXtcXG5uZXQvZHNhL2RzYS5jOjEwNjg6XFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBjb25kdWl0LVxcdTAwM2Vkc2FfcHRyO1xcbm5ldC9kc2EvZHNhLmMtMTA2OS1cXHRib29sIG5vdGlmeSA9IGZhbHNlO1xcbi0tXFxubmV0L2RzYS9kc2EuYy0xMDg2LVxcbm5ldC9kc2EvZHNhLmM6MTA4NzpzdGF0aWMgc3RydWN0IGRzYV9wb3J0ICpkc2FfcG9ydF90b3VjaChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBpbmRleClcXG5uZXQvZHNhL2RzYS5jLTEwODgte1xcbm5ldC9kc2EvZHNhLmMtMTA4OS1cXHRzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkcy1cXHUwMDNlZHN0O1xcbm5ldC9kc2EvZHNhLmM6MTA5MDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMTA5MS1cXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTExMy1cXG5uZXQvZHNhL2RzYS5jOjExMTQ6c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV91c2VyKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGNvbnN0IGNoYXIgKm5hbWUpXFxubmV0L2RzYS9kc2EuYy0xMTE1LXtcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTEyMS1cXG5uZXQvZHNhL2RzYS5jOjExMjI6c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9kc2Eoc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL2RzYS5jLTExMjMte1xcbi0tXFxubmV0L2RzYS9kc2EuYy0xMTI4LVxcbm5ldC9kc2EvZHNhLmM6MTEyOTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxubmV0L2RzYS9kc2EuYy0xMTMwLVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQpXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTExMzQtXFx0dW5zaWduZWQgaW50IG1kcF91cHN0cmVhbTtcXG5uZXQvZHNhL2RzYS5jOjExMzU6XFx0c3RydWN0IGRzYV9wb3J0ICptZHA7XFxubmV0L2RzYS9kc2EuYy0xMTM2LVxcbi0tXFxubmV0L2RzYS9kc2EuYy0xMTU0LVxcbm5ldC9kc2EvZHNhLmM6MTE1NTpzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2NwdShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG5uZXQvZHNhL2RzYS5jLTExNTYtXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqdXNlcl9wcm90b2NvbClcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTIzOS1cXG5uZXQvZHNhL2RzYS5jOjEyNDA6c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9vZihzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKVxcbm5ldC9kc2EvZHNhLmMtMTI0MS17XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTEyNzg9c3RhdGljIGludCBkc2Ffc3dpdGNoX3BhcnNlX3BvcnRzX29mKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTI4MS1cXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnRzLCAqcG9ydDtcXG5uZXQvZHNhL2RzYS5jOjEyODI6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTEyODMtXFx0aW50IGVyciA9IDA7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTEzNTU9c3RhdGljIGludCBkc2Ffc3dpdGNoX3RvdWNoX3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5uZXQvZHNhL2RzYS5jLTEzNTYte1xcbm5ldC9kc2EvZHNhLmM6MTM1NzpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMTM1OC1cXHRpbnQgcG9ydDtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTM5Mj1zdGF0aWMgc3RydWN0IGRldmljZSAqZGV2X2ZpbmRfY2xhc3Moc3RydWN0IGRldmljZSAqcGFyZW50LCBjaGFyICpjbGFzcylcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTQwMS1cXG5uZXQvZHNhL2RzYS5jOjE0MDI6c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBjb25zdCBjaGFyICpuYW1lLFxcbm5ldC9kc2EvZHNhLmMtMTQwMy1cXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTQzND1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfcGFyc2VfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxubmV0L2RzYS9kc2EuYy0xNDM3LVxcdGJvb2wgdmFsaWRfbmFtZV9mb3VuZCA9IGZhbHNlO1xcbm5ldC9kc2EvZHNhLmM6MTQzODpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMTQzOS1cXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTE0ODY9c3RhdGljIHZvaWQgZHNhX3N3aXRjaF9yZWxlYXNlX3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTQ4OC1cXHRzdHJ1Y3QgZHNhX21hY19hZGRyICphLCAqdG1wO1xcbm5ldC9kc2EvZHNhLmM6MTQ4OTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwLCAqbmV4dDtcXG5uZXQvZHNhL2RzYS5jLTE0OTAtXFx0c3RydWN0IGRzYV92bGFuICp2LCAqbjtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTYxMT12b2lkIGRzYV9zd2l0Y2hfc2h1dGRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxubmV0L2RzYS9kc2EuYy0xNjE0LVxcdExJU1RfSEVBRChjbG9zZV9saXN0KTtcXG5uZXQvZHNhL2RzYS5jOjE2MTU6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTE2MTYtXFxuLS1cXG5uZXQvZHNhL2RzYS5jPTE2NjI9RVhQT1JUX1NZTUJPTF9HUEwoZHNhX3N3aXRjaF9zaHV0ZG93bik7XFxuLS1cXG5uZXQvZHNhL2RzYS5jLTE2NjQtI2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbm5ldC9kc2EvZHNhLmM6MTY2NTpzdGF0aWMgYm9vbCBkc2FfcG9ydF9pc19pbml0aWFsaXplZChjb25zdCBzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxcbm5ldC9kc2EvZHNhLmMtMTY2Ni17XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTE2NzA9aW50IGRzYV9zd2l0Y2hfc3VzcGVuZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxubmV0L2RzYS9kc2EuYy0xNjcxLXtcXG5uZXQvZHNhL2RzYS5jOjE2NzI6XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG5uZXQvZHNhL2RzYS5jLTE2NzMtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTE2OTI9aW50IGRzYV9zd2l0Y2hfcmVzdW1lKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5uZXQvZHNhL2RzYS5jLTE2OTMte1xcbm5ldC9kc2EvZHNhLmM6MTY5NDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbm5ldC9kc2EvZHNhLmMtMTY5NS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTcxNT1FWFBPUlRfU1lNQk9MX0dQTChkc2Ffc3dpdGNoX3Jlc3VtZSk7XFxuLS1cXG5uZXQvZHNhL2RzYS5jLTE3MTctXFxubmV0L2RzYS9kc2EuYzoxNzE4OnN0cnVjdCBkc2FfcG9ydCAqZHNhX3BvcnRfZnJvbV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5uZXQvZHNhL2RzYS5jLTE3MTkte1xcbi0tXFxubmV0L2RzYS9kc2EuYz0xNzQ1PWJvb2wgZHNhX2ZkYl9wcmVzZW50X2luX290aGVyX2RiKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTE3NDgte1xcbm5ldC9kc2EvZHNhLmM6MTc0OTpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xcbm5ldC9kc2EvZHNhLmMtMTc1MC1cXHRzdHJ1Y3QgZHNhX21hY19hZGRyICphO1xcbi0tXFxubmV0L2RzYS9kc2EuYz0xNzY2PWJvb2wgZHNhX21kYl9wcmVzZW50X2luX290aGVyX2RiKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTE3Njkte1xcbm5ldC9kc2EvZHNhLmM6MTc3MDpcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xcbm5ldC9kc2EvZHNhLmMtMTc3MS1cXHRzdHJ1Y3QgZHNhX21hY19hZGRyICphO1xcbi0tXFxubmV0L2RzYS9kc2EuYz0xODExPWludCBkc2FfcG9ydF9zaW1wbGVfaHNyX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTgxNC17XFxubmV0L2RzYS9kc2EuYzoxODE1OlxcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCksICpvdGhlcl9kcDtcXG5uZXQvZHNhL2RzYS5jLTE4MTYtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTgzND1pbnQgZHNhX3BvcnRfc2ltcGxlX2hzcl9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxubmV0L2RzYS9kc2EuYy0xODM2LXtcXG5uZXQvZHNhL2RzYS5jOjE4Mzc6XFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KSwgKm90aGVyX2RwO1xcbm5ldC9kc2EvZHNhLmMtMTgzOC1cXG4tLVxcbm5ldC9kc2EvbmV0bGluay5jPTU1PXN0cnVjdCBydG5sX2xpbmtfb3BzIGRzYV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9kc2EvbmV0bGluay5jLTU2LVxcdC5raW5kXFx0XFx0XFx0PSBcXFwiZHNhXFxcIixcXG5uZXQvZHNhL25ldGxpbmsuYzo1NzpcXHQucHJpdl9zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGRzYV9wb3J0KSxcXG5uZXQvZHNhL25ldGxpbmsuYy01OC1cXHQubWF4dHlwZVxcdFxcdD0gSUZMQV9EU0FfTUFYLFxcbi0tXFxubmV0L2RzYS9wb3J0LmMtMzItICovXFxubmV0L2RzYS9wb3J0LmM6MzM6c3RhdGljIGludCBkc2FfcG9ydF9ub3RpZnkoY29uc3Qgc3RydWN0IGRzYV9wb3J0ICpkcCwgdW5zaWduZWQgbG9uZyBlLCB2b2lkICp2KVxcbm5ldC9kc2EvcG9ydC5jLTM0LXtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTM3LVxcbm5ldC9kc2EvcG9ydC5jOjM4OnN0YXRpYyB2b2lkIGRzYV9wb3J0X25vdGlmeV9icmlkZ2VfZmRiX2ZsdXNoKGNvbnN0IHN0cnVjdCBkc2FfcG9ydCAqZHAsIHUxNiB2aWQpXFxubmV0L2RzYS9wb3J0LmMtMzkte1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtNTQtXFxubmV0L2RzYS9wb3J0LmM6NTU6c3RhdGljIHZvaWQgZHNhX3BvcnRfZmFzdF9hZ2UoY29uc3Qgc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL3BvcnQuYy01Ni17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy02Ny1cXG5uZXQvZHNhL3BvcnQuYzo2ODpzdGF0aWMgaW50IGRzYV9wb3J0X3ZsYW5fZmFzdF9hZ2UoY29uc3Qgc3RydWN0IGRzYV9wb3J0ICpkcCwgdTE2IHZpZClcXG5uZXQvZHNhL3BvcnQuYy02OS17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy04My1cXG5uZXQvZHNhL3BvcnQuYzo4NDpzdGF0aWMgaW50IGRzYV9wb3J0X21zdGlfZmFzdF9hZ2UoY29uc3Qgc3RydWN0IGRzYV9wb3J0ICpkcCwgdTE2IG1zdGkpXFxubmV0L2RzYS9wb3J0LmMtODUte1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtMTAxLVxcbm5ldC9kc2EvcG9ydC5jOjEwMjpzdGF0aWMgYm9vbCBkc2FfcG9ydF9jYW5fY29uZmlndXJlX2xlYXJuaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHApXFxubmV0L2RzYS9wb3J0LmMtMTAzLXtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTExNi1cXG5uZXQvZHNhL3BvcnQuYzoxMTc6Ym9vbCBkc2FfcG9ydF9zdXBwb3J0c19od3RzdGFtcChzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxcbm5ldC9kc2EvcG9ydC5jLTExOC17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xMzAtXFxubmV0L2RzYS9wb3J0LmM6MTMxOmludCBkc2FfcG9ydF9zZXRfc3RhdGUoc3RydWN0IGRzYV9wb3J0ICpkcCwgdTggc3RhdGUsIGJvb2wgZG9fZmFzdF9hZ2UpXFxubmV0L2RzYS9wb3J0LmMtMTMyLXtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTE2My1cXG5uZXQvZHNhL3BvcnQuYzoxNjQ6c3RhdGljIHZvaWQgZHNhX3BvcnRfc2V0X3N0YXRlX25vdyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLCB1OCBzdGF0ZSxcXG5uZXQvZHNhL3BvcnQuYy0xNjUtXFx0XFx0XFx0XFx0ICAgYm9vbCBkb19mYXN0X2FnZSlcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTE3Ni1cXG5uZXQvZHNhL3BvcnQuYzoxNzc6aW50IGRzYV9wb3J0X3NldF9tc3Rfc3RhdGUoc3RydWN0IGRzYV9wb3J0ICpkcCxcXG5uZXQvZHNhL3BvcnQuYy0xNzgtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9tc3Rfc3RhdGUgKnN0YXRlLFxcbi0tXFxubmV0L2RzYS9wb3J0LmMtMjEyLVxcbm5ldC9kc2EvcG9ydC5jOjIxMzppbnQgZHNhX3BvcnRfZW5hYmxlX3J0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXFxubmV0L2RzYS9wb3J0LmMtMjE0LXtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTIzMy1cXG5uZXQvZHNhL3BvcnQuYzoyMzQ6aW50IGRzYV9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxcbm5ldC9kc2EvcG9ydC5jLTIzNS17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0yNDQtXFxubmV0L2RzYS9wb3J0LmM6MjQ1OnZvaWQgZHNhX3BvcnRfZGlzYWJsZV9ydChzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxcbm5ldC9kc2EvcG9ydC5jLTI0Ni17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0yNTktXFxubmV0L2RzYS9wb3J0LmM6MjYwOnZvaWQgZHNhX3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxcbm5ldC9kc2EvcG9ydC5jLTI2MS17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0yNjYtXFxubmV0L2RzYS9wb3J0LmM6MjY3OnN0YXRpYyB2b2lkIGRzYV9wb3J0X3Jlc2V0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxubmV0L2RzYS9wb3J0LmMtMjY4LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxcbi0tXFxubmV0L2RzYS9wb3J0LmMtMjcyLVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG5uZXQvZHNhL3BvcnQuYzoyNzM6XFx0c3RydWN0IGRzYV9wb3J0ICpvdGhlcl9kcDtcXG5uZXQvZHNhL3BvcnQuYy0yNzQtXFx0Ym9vbCB2bGFuX2ZpbHRlcmluZztcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTMyMC1cXG5uZXQvZHNhL3BvcnQuYzozMjE6c3RhdGljIGludCBkc2FfcG9ydF9pbmhlcml0X2JycG9ydF9mbGFncyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbm5ldC9kc2EvcG9ydC5jLTMyMi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2RzYS9wb3J0LmMtMzQ0LVxcbm5ldC9kc2EvcG9ydC5jOjM0NTpzdGF0aWMgdm9pZCBkc2FfcG9ydF9jbGVhcl9icnBvcnRfZmxhZ3Moc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL3BvcnQuYy0zNDYte1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtMzY1LVxcbm5ldC9kc2EvcG9ydC5jOjM2NjpzdGF0aWMgaW50IGRzYV9wb3J0X3N3aXRjaGRldl9zeW5jX2F0dHJzKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxubmV0L2RzYS9wb3J0LmMtMzY3LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0zOTEtXFxubmV0L2RzYS9wb3J0LmM6MzkyOnN0YXRpYyB2b2lkIGRzYV9wb3J0X3N3aXRjaGRldl91bnN5bmNfYXR0cnMoc3RydWN0IGRzYV9wb3J0ICpkcCxcXG5uZXQvZHNhL3BvcnQuYy0zOTMtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSlcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTQxOS1cXG5uZXQvZHNhL3BvcnQuYzo0MjA6c3RhdGljIGludCBkc2FfcG9ydF9icmlkZ2VfY3JlYXRlKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxubmV0L2RzYS9wb3J0LmMtNDIxLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmJyLFxcbi0tXFxubmV0L2RzYS9wb3J0LmMtNDU0LVxcbm5ldC9kc2EvcG9ydC5jOjQ1NTpzdGF0aWMgdm9pZCBkc2FfcG9ydF9icmlkZ2VfZGVzdHJveShzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbm5ldC9kc2EvcG9ydC5jLTQ1Ni1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyKVxcbi0tXFxubmV0L2RzYS9wb3J0LmMtNDcwLVxcbm5ldC9kc2EvcG9ydC5jOjQ3MTpzdGF0aWMgYm9vbCBkc2FfcG9ydF9zdXBwb3J0c19tc3Qoc3RydWN0IGRzYV9wb3J0ICpkcClcXG5uZXQvZHNhL3BvcnQuYy00NzIte1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtNDgwLVxcbm5ldC9kc2EvcG9ydC5jOjQ4MTppbnQgZHNhX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJyLFxcbm5ldC9kc2EvcG9ydC5jLTQ4Mi1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2RzYS9wb3J0LmMtNTM2LVxcbm5ldC9kc2EvcG9ydC5jOjUzNzp2b2lkIGRzYV9wb3J0X3ByZV9icmlkZ2VfbGVhdmUoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJyKVxcbm5ldC9kc2EvcG9ydC5jLTUzOC17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy01NTEtXFxubmV0L2RzYS9wb3J0LmM6NTUyOnZvaWQgZHNhX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpicilcXG5uZXQvZHNhL3BvcnQuYy01NTMte1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtNTgwLVxcbm5ldC9kc2EvcG9ydC5jOjU4MTppbnQgZHNhX3BvcnRfbGFnX2NoYW5nZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbm5ldC9kc2EvcG9ydC5jLTU4Mi1cXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2xhZ19sb3dlcl9zdGF0ZV9pbmZvICpsaW5mbylcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTYwNi1cXG5uZXQvZHNhL3BvcnQuYzo2MDc6c3RhdGljIGludCBkc2FfcG9ydF9sYWdfY3JlYXRlKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxubmV0L2RzYS9wb3J0LmMtNjA4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbGFnX2RldilcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTYzMy1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6NDcuMTQ1NDI0MjI3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDQxNjkyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGRzYV9wb3J0X3RvdWNoYCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBpbiBvbiBgZHNhX3BvcnRfdG91Y2hgIHdpdGhpbiBgbmV0L2RzYS9kc2EuY2AuIExldCBtZSBnZXQgc3RyYWlnaHQgdG8gdGhlIGNvZGUgYW5kIGNoZWNrIG91dCBsaW5lcyAxMDgwIHRvIDExMTAuIEZyb20gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBhbmQgaXRzIGxvY2F0aW9uIHdpdGhpbiB0aGUgRFNBIGZyYW1ld29yaywgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgaW52b2x2ZWQgaW4gc29tZSBraW5kIG9mIGxvdy1sZXZlbCBwb3J0IGludGVyYWN0aW9uIG9yIG1heWJlIGNhY2hlIG1haW50ZW5hbmNlIGZvciBhIERTQSBzd2l0Y2guIEJhc2VkIG9uIHRoZSBuYW1lIEkgYmV0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBtYW5hZ2luZyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgcG9ydC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCBoZXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciwgYW55IHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMgdGhhdCBhcmUgaW4gcGxhY2UsIGFuZCBob3cgdGhlIG5ldHdvcmsgZGV2aWNlIGlzIHVwZGF0ZWQgaWYgdGhlcmUgYXJlIGFueSBwb3J0IHN0YXRlIGNoYW5nZXMuIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIHBhcnRzIG9mIHRoYXQgcm91dGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NDo0OS4yNDk1OTY3NjRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9kc2EvZHNhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MDpcXHRcXG4xMDgxOlxcdFxcdGNwdV9kcC1cXHUwMDNlY29uZHVpdF9vcGVyX3VwID0gdXA7XFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdGlmIChub3RpZnkpXFxuMTA4NDpcXHRcXHRcXHRkc2FfdHJlZV9jb25kdWl0X3N0YXRlX2NoYW5nZShkc3QsIGNvbmR1aXQpO1xcbjEwODU6XFx0fVxcbjEwODY6XFx0XFxuMTA4NzpcXHRzdGF0aWMgc3RydWN0IGRzYV9wb3J0ICpkc2FfcG9ydF90b3VjaChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBpbmRleClcXG4xMDg4OlxcdHtcXG4xMDg5OlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzLVxcdTAwM2Vkc3Q7XFxuMTA5MDpcXHRcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbjEwOTE6XFx0XFxuMTA5MjpcXHRcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKVxcbjEwOTM6XFx0XFx0XFx0aWYgKGRwLVxcdTAwM2VpbmRleCA9PSBpbmRleClcXG4xMDk0OlxcdFxcdFxcdFxcdHJldHVybiBkcDtcXG4xMDk1OlxcdFxcbjEwOTY6XFx0XFx0ZHAgPSBremFsbG9jX29iaigqZHApO1xcbjEwOTc6XFx0XFx0aWYgKCFkcClcXG4xMDk4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjEwOTk6XFx0XFxuMTEwMDpcXHRcXHRkcC1cXHUwMDNlZHMgPSBkcztcXG4xMTAxOlxcdFxcdGRwLVxcdTAwM2VpbmRleCA9IGluZGV4O1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkcC1cXHUwMDNlYWRkcl9saXN0c19sb2NrKTtcXG4xMTA0OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRwLVxcdTAwM2V2bGFuc19sb2NrKTtcXG4xMTA1OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkcC1cXHUwMDNlZmRicyk7XFxuMTEwNjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZHAtXFx1MDAzZW1kYnMpO1xcbjExMDc6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRwLVxcdTAwM2V2bGFucyk7IC8qIGFsc28gaW5pdGlhbGl6ZXMgXFx1MDAyNmRwLVxcdTAwM2V1c2VyX3ZsYW5zICovXFxuMTEwODpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZHAtXFx1MDAzZWxpc3QpO1xcbjExMDk6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZHAtXFx1MDAzZWxpc3QsIFxcdTAwMjZkc3QtXFx1MDAzZXBvcnRzKTtcXG4xMTEwOlxcdFxcbjExMTE6XFx0XFx0cmV0dXJuIGRwO1xcbjExMTI6XFx0fVxcbjExMTM6XFx0XFxuMTExNDpcXHRzdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX3VzZXIoc3RydWN0IGRzYV9wb3J0ICpkcCwgY29uc3QgY2hhciAqbmFtZSlcXG4xMTE1OlxcdHtcXG4xMTE2OlxcdFxcdGRwLVxcdTAwM2V0eXBlID0gRFNBX1BPUlRfVFlQRV9VU0VSO1xcbjExMTc6XFx0XFx0ZHAtXFx1MDAzZW5hbWUgPSBuYW1lO1xcbjExMTg6XFx0XFxuMTExOTpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6NDkuMjQ5Njk5MjU0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4OTg4NjU0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gRFNBIFVzZXIgU2V0dXAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEU0EgdXNlciBzZXR1cCBpcyBiZWluZyBoYW5kbGVkLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBhcm91bmQgdGhlIGBuZXQvZHNhL3VzZXIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHNhX3VzZXJfc2V0dXBfdGNgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBmb3IgaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgRFNBIHN0YWNrLCBhbmQgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBleHBlY3QgdG8gZmluZCBjbHVlcyBhYm91dCB0cmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbiwgaW50ZXJmYWNlIGFzc2lnbm1lbnQsIGFuZCBob3cgdXNlci1zcGFjZSB0b29scyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgRFNBIGRyaXZlci4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSwgdGhlIGFyZ3VtZW50cyBpdCB0YWtlcywgdGhlIGludGVybmFsIHdvcmtpbmdzLCBhbmQgYW55IGNhbGxzIGl0IG1ha2VzIHRvIG90aGVyIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHRoZSBEU0EgdXNlci1zcGFjZSBpbnRlZ3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU0OjUxLjE0ODU2NzMxNFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RzYS91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcxMDpcXHRcXHRcXHRpZiAoIWJsb2NrX2NiKVxcbjE3MTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTcxMjpcXHRcXG4xNzEzOlxcdFxcdFxcdGZsb3dfYmxvY2tfY2JfcmVtb3ZlKGJsb2NrX2NiLCBmKTtcXG4xNzE0OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZibG9ja19jYi1cXHUwMDNlZHJpdmVyX2xpc3QpO1xcbjE3MTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTcxNjpcXHRcXHRkZWZhdWx0OlxcbjE3MTc6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE3MTg6XFx0XFx0fVxcbjE3MTk6XFx0fVxcbjE3MjA6XFx0XFxuMTcyMTpcXHRzdGF0aWMgaW50IGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxuMTcyMjpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibylcXG4xNzIzOlxcdHtcXG4xNzI0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7XFxuMTcyNTpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cXHUwMDNlZHM7XFxuMTcyNjpcXHRcXHRpbnQgZXJyO1xcbjE3Mjc6XFx0XFxuMTcyODpcXHRcXHQvKiBUaGUgdW5iaW5kIGdvZXMgdG8gdGhlIHNpZGUgdGhhdCB0b29rIHRoZSBiaW5kLiAqL1xcbjE3Mjk6XFx0XFx0aWYgKGJvLVxcdTAwM2Vjb21tYW5kID09IEZMT1dfQkxPQ0tfQklORCkge1xcbjE3MzA6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuMTczMTpcXHRcXHRcXHRpZiAoZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9zZXR1cF90YylcXG4xNzMyOlxcdFxcdFxcdFxcdGVyciA9IGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBvcnRfc2V0dXBfdGMoZHMsIGRwLVxcdTAwM2VpbmRleCwgVENfU0VUVVBfRlQsXFxuMTczMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJvKTtcXG4xNzM0OlxcdFxcdFxcdGRwLVxcdTAwM2VmdF9vbl9zd2l0Y2ggPSBlcnIgIT0gLUVPUE5PVFNVUFA7XFxuMTczNTpcXHRcXHRcXHRpZiAoZHAtXFx1MDAzZWZ0X29uX3N3aXRjaClcXG4xNzM2OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTczNzpcXHRcXHR9IGVsc2UgaWYgKGRwLVxcdTAwM2VmdF9vbl9zd2l0Y2gpIHtcXG4xNzM4OlxcdFxcdFxcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cXHUwMDNlaW5kZXgsIFRDX1NFVFVQX0ZULCBibyk7XFxuMTczOTpcXHRcXHR9XFxuMTc0MDpcXHRcXG4xNzQxOlxcdFxcdGlmICghY29uZHVpdC1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3NldHVwX3RjKVxcbjE3NDI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE3NDM6XFx0XFxuMTc0NDpcXHRcXHRyZXR1cm4gY29uZHVpdC1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3NldHVwX3RjKGNvbmR1aXQsIFRDX1NFVFVQX0ZULCBibyk7XFxuMTc0NTpcXHR9XFxuMTc0NjpcXHRcXG4xNzQ3OlxcdHN0YXRpYyBpbnQgZHNhX3VzZXJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuMTc0ODpcXHRcXHRcXHRcXHQgICAgIHZvaWQgKnR5cGVfZGF0YSlcXG4xNzQ5OlxcdHtcXG4xNzUwOlxcdFxcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KGRldik7XFxuMTc1MTpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cXHUwMDNlZHM7XFxuMTc1MjpcXHRcXG4xNzUzOlxcdFxcdHN3aXRjaCAodHlwZSkge1xcbjE3NTQ6XFx0XFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcXG4xNzU1OlxcdFxcdFxcdHJldHVybiBkc2FfdXNlcl9zZXR1cF90Y19ibG9jayhkZXYsIHR5cGVfZGF0YSk7XFxuMTc1NjpcXHRcXHRjYXNlIFRDX1NFVFVQX0ZUOlxcbjE3NTc6XFx0XFx0XFx0cmV0dXJuIGRzYV91c2VyX3NldHVwX2Z0X2Jsb2NrKGRwLCB0eXBlX2RhdGEpO1xcbjE3NTg6XFx0XFx0ZGVmYXVsdDpcXG4xNzU5OlxcdFxcdFxcdGJyZWFrO1xcbjE3NjA6XFx0XFx0fVxcbjE3NjE6XFx0XFxuMTc2MjpcXHRcXHRpZiAoIWRzLVxcdTAwM2VvcHMtXFx1MDAzZXBvcnRfc2V0dXBfdGMpXFxuMTc2MzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTc2NDpcXHRcXG4xNzY1OlxcdFxcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X3NldHVwX3RjKGRzLCBkcC1cXHUwMDNlaW5kZXgsIHR5cGUsIHR5cGVfZGF0YSk7XFxuMTc2NjpcXHR9XFxuMTc2NzpcXHRcXG4xNzY4OlxcdHN0YXRpYyBpbnQgZHNhX3VzZXJfZ2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMTc2OTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjLCB1MzIgKnJ1bGVfbG9jcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTQ6NTEuMTQ4NzIzNTYzWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNjcyNDE5OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBib29sIGZ0X29uX3N3aXRjaGAgbWVtYmVyIHRvIHRoZSBgc3RydWN0IGRzYV9wb3J0YC4gVGhpcyBpcyBjcml0aWNhbC4gVGhlIGFsbG9jYXRpb24gZm9yIHRoZSBgZHNhX3BvcnRgIHN0cnVjdHVyZSAqc3BlY2lmaWNhbGx5KiB1c2VzIGBremFsbG9jX29iamAsIG9yIGBydG5sX2xpbmtfb3BzYCBwcml2X3NpemUga3phbGxvYywgZ3VhcmFudGVlaW5nIHRoYXQgdGhpcyBuZXcgYm9vbGVhbiwgYGZ0X29uX3N3aXRjaGAsIHN0YXJ0cyBhdCBgZmFsc2VgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhpcyBib29sZWFuIGdldCBzZXQ/IEl0IGhhcHBlbnMgd2l0aGluIGBkc2FfdXNlcl9zZXR1cF9mdF9ibG9ja2AuIFdoZW4gYSBmbG93IGJsb2NrIGlzIGJlaW5nICpib3VuZCogKGBGTE9XX0JMT0NLX0JJTkRgKSwgdGhlIGNvZGUgZmlyc3QgY2hlY2tzIGlmIHRoZSBzd2l0Y2ggZHJpdmVyIGNhbiBoYW5kbGUgdGhlIGBUQ19TRVRVUF9GVGAgb3BlcmF0aW9uIHZpYSBgcG9ydF9zZXR1cF90Y2AuIFRoZSAqcmVzdWx0KiBvZiB0aGF0IGNoZWNrIGRldGVybWluZXMgYGRwLVx1MDAzZWZ0X29uX3N3aXRjaGAuIElmIGBwb3J0X3NldHVwX3RjYCBzdXBwb3J0cyB0aGUgZmxvdyB0YWJsZSBvcGVyYXRpb25zLCBhbmQgcmV0dXJucyBubyBlcnJvciwgYGZ0X29uX3N3aXRjaGAgaXMgc2V0IHRvIGB0cnVlYDsgb3RoZXJ3aXNlLCBpdCByZW1haW5zIGBmYWxzZWAuIFRoZSBwYXRjaCB0aGVuIHVzZXMgdGhpcyBib29sZWFuIHRvIGRldGVybWluZSB3aGVyZSB0byBwYXNzIHRoZSBmbG93IHRhYmxlIHNldHVwLiBJZiB0aGUgYmluZGluZyBmYWlsZWQsIGFuZCBgZnRfb25fc3dpdGNoYCBpcyBgdHJ1ZWAsIGl0IGlzIHBhc3NlZCB0byB0aGUgZHNhIGRyaXZlci4gSWYgaXQncyBmYWxzZSwgdGhlIGNvZGUgcGFzc2VzIHRoZSBzZXR1cCB0byB0aGUgY29uZHVpdC4gV2hlbiAqdW5iaW5kaW5nKiB0aGUgc2FtZSBgRkxPV19CTE9DS19VTkJJTkRgLCB0aGUgbG9naWMgbWlycm9ycyB0aGlzLlxuXG5NeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJcyB0aGVyZSBhbnkgcG9pbnQgd2hlcmUgYSByZWFkIGNvdWxkIG9jY3VyIGJlZm9yZSBhIHdyaXRlPyBMZXQncyB0cmFjZSB0aHJvdWdoOlxuXG4qICAgVGhlIGFsbG9jYXRpb24gb2YgYGRwYCBpcyB6ZXJvZWQgYnkgYGt6YWxsb2Nfb2JqYC4gU28sIHRoZSBpbml0aWFsIHN0YXRlIGlzIHNhZmUuXG4qICAgYGZ0X29uX3N3aXRjaGAgZ2V0cyBleHBsaWNpdGx5IHNldCBkdXJpbmcgdGhlIEJJTkQgb3BlcmF0aW9uLiBUaGlzIGNvdmVycyB0aGUgbW9zdCBpbXBvcnRhbnQgcG9pbnQgb2YgdGhlIGxvZ2ljLlxuKiAgIFRoZSBgYm9gIChmbG93IGJsb2NrIG9mZmxvYWQpIGRhdGEgc3RydWN0dXJlIGNvbWVzIGZyb20gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGF0J3MgZXh0ZXJuYWwsIGJ1dCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGF0IHN1YnN5c3RlbS4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgc2FmZWx5IGluaXRpYWxpemVkLlxuKiAgIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIG1ham9yIGFyZWEgb2YgY29uY2VybiBmb3IgbGVha3MuXG4qICAgVGhlcmUncyBubyBjb3B5aW5nIG9yIHJlYWRpbmcgb2YgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0cnVjdHMsIGFuZCB0aGF0IGlzIHZlcnkgaW1wb3J0YW50LlxuKiAgIFRoZXJlIGFyZSBubyBicmFuY2hpbmcgZGVjaXNpb25zLCBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIGxldCdzIGdvIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhIG1ldGhvZGljYWxseTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZS4gVGhlIHN0cnVjdHVyZXMgYXJlIGludGVybmFsLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLiBgZnRfb25fc3dpdGNoYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdCdzIHVzZWQuXG4zLiAgKipBbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgcG90ZW50aWFsbHkgcmVhZCBsYXRlcjoqKiBOb3BlLiBUaGUgYGRzYV9wb3J0YCBzdHJ1Y3R1cmUgaXMgY2FyZWZ1bGx5IGluaXRpYWxpemVkLlxuNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM6KiogTm8uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSBzaG91bGQgbm90IGhhdmUgYW55IEtNU0FOIGlzc3VlcyBoZXJlLlxuXG5LTVNBTiB2cy4gS0FTQU4gaXMgY3J1Y2lhbCBjb250ZXh0IGhlcmUuIEtBU0FOL0xPQ0tERVAvc3RhbmRhcmQgc2FuaXRpemVycyB3b3VsZCBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBVQUYgYnVncywgbG9ja2luZyBwcm9ibGVtcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gS01TQU4sIHNwZWNpZmljYWxseSwgZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gSW4gdGhpcyBjYXNlLCBga3phbGxvY19vYmpgIGFuZCB0aGUgZXhwbGljaXQgc2V0dGluZyBvZiBgZnRfb25fc3dpdGNoYCB3aXRoaW4gdGhlIGJpbmQvdW5iaW5kIGxvZ2ljIGVmZmVjdGl2ZWx5IHByZXZlbnQgS01TQU4gZnJvbSBmbGFnZ2luZyBhbnl0aGluZy4gVGhpcyBwYXRjaCBpcyBqdXN0IGludGVybmFsIGZsb3cgdGFibGUgb2ZmbG9hZCBkaXNwYXRjaCBsb2dpYyB0aGF0J3Mgc2FmZWx5IGltcGxlbWVudGVkLiBObyB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgbm8gc3RhY2sgYnVmZmVyIG1hbmlwdWxhdGlvbiwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cbkknbSBjb25maWRlbnQgd2UgY2FuIGNhbGwgYHNldC1yZXN1bHRzYCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI1NCwiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NTowMS44MjExNDY2NzNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgRFNBIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyAoVENfU0VUVVBfRlQpIHRvIHJvdXRlIGJpbmQvdW5iaW5kIHJlcXVlc3RzIHRvIGVpdGhlciB0aGUgRFNBIHN3aXRjaCBkcml2ZXIgb3IgdGhlIGNvbmR1aXQgbmV0ZGV2LCB0cmFja2luZyBzdGF0ZSB2aWEgYSBuZXcgYGZ0X29uX3N3aXRjaGAgZmllbGQgaW4gYHN0cnVjdCBkc2FfcG9ydGAuIGBzdHJ1Y3QgZHNhX3BvcnRgIGluc3RhbmNlcyBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBmaWVsZC4gVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgRFNBIGZsb3d0YWJsZSBibG9jayBzZXR1cCBsb2dpYyAoVENfU0VUVVBfRlQpIHRvIHJvdXRlIGJpbmQvdW5iaW5kIHJlcXVlc3RzIHRvIGVpdGhlciB0aGUgRFNBIHN3aXRjaCBkcml2ZXIgb3IgdGhlIGNvbmR1aXQgbmV0ZGV2LCB0cmFja2luZyBzdGF0ZSB2aWEgYSBuZXcgYGZ0X29uX3N3aXRjaGAgZmllbGQgaW4gYHN0cnVjdCBkc2FfcG9ydGAuIGBzdHJ1Y3QgZHNhX3BvcnRgIGluc3RhbmNlcyBhcmUgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBmaWVsZC4gVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpdtfx[1] Phase: Succeeded StartedAt: 2026-09-05 18:55:13 +0000 UTC FinishedAt: 2026-09-05 18:55:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 18:55:13 +0000 UTC FinishedAt: 2026-09-05 18:55:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2] Phase: Succeeded StartedAt: 2026-09-05 18:55:13 +0000 UTC FinishedAt: 2026-09-05 22:38:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 18:55:13 +0000 UTC FinishedAt: 2026-09-05 22:38:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 18:55:13 +0000 UTC FinishedAt: 2026-09-05 18:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 18:55:13 +0000 UTC FinishedAt: 2026-09-05 18:55:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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-workflowpdtfx/series-workflowpdtfx-convert-artifact-1951784582/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 18:55:23 +0000 UTC FinishedAt: 2026-09-05 19:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 18:55:23 +0000 UTC FinishedAt: 2026-09-05 19:13:30 +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:*2a29ee5f-bfc5-4c6d-93c6-2e7e5f03b3a9,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-workflowpdtfx/series-workflowpdtfx-convert-artifact-1951784582/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": "3b01ea7f-a1ff-402c-8f5a-8d6abc7e164e", "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-workflowpdtfx/series-workflowpdtfx-build-action-3029803548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 18:55:23 +0000 UTC FinishedAt: 2026-09-05 19:13:19 +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:*2a29ee5f-bfc5-4c6d-93c6-2e7e5f03b3a9,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-workflowpdtfx/series-workflowpdtfx-convert-artifact-1951784582/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": "3b01ea7f-a1ff-402c-8f5a-8d6abc7e164e", "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-workflowpdtfx/series-workflowpdtfx-build-action-3029803548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:13:30 +0000 UTC FinishedAt: 2026-09-05 19:13:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:13:31 +0000 UTC FinishedAt: 2026-09-05 19:13:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:13:31 +0000 UTC FinishedAt: 2026-09-05 19:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:13:31 +0000 UTC FinishedAt: 2026-09-05 19:13:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-workflowpdtfx/series-workflowpdtfx-convert-artifact-4292066777/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:13:42 +0000 UTC FinishedAt: 2026-09-05 19:16:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:13:42 +0000 UTC FinishedAt: 2026-09-05 19:15:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3b01ea7f-a1ff-402c-8f5a-8d6abc7e164e,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-workflowpdtfx/series-workflowpdtfx-build-action-3029803548/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-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:16:01 +0000 UTC FinishedAt: 2026-09-05 19:16:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:16:01 +0000 UTC FinishedAt: 2026-09-05 19:16:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:16:01 +0000 UTC FinishedAt: 2026-09-05 19:35:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:16:01 +0000 UTC FinishedAt: 2026-09-05 19:35:14 +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:*2a29ee5f-bfc5-4c6d-93c6-2e7e5f03b3a9,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-workflowpdtfx/series-workflowpdtfx-convert-artifact-4292066777/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": "3d390ee7-04cb-41e0-90c3-7377fcfcb5d8", "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-workflowpdtfx/series-workflowpdtfx-build-action-2360009269/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:16:01 +0000 UTC FinishedAt: 2026-09-05 19:35:04 +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:*2a29ee5f-bfc5-4c6d-93c6-2e7e5f03b3a9,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-workflowpdtfx/series-workflowpdtfx-convert-artifact-4292066777/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": "3d390ee7-04cb-41e0-90c3-7377fcfcb5d8", "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-workflowpdtfx/series-workflowpdtfx-build-action-2360009269/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:35:14 +0000 UTC FinishedAt: 2026-09-05 19:35:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:35:14 +0000 UTC FinishedAt: 2026-09-05 19:35:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:35:14 +0000 UTC FinishedAt: 2026-09-05 19:36:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:35:14 +0000 UTC FinishedAt: 2026-09-05 19:36:48 +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:*3d390ee7-04cb-41e0-90c3-7377fcfcb5d8,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-workflowpdtfx/series-workflowpdtfx-build-action-2360009269/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-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:36:58 +0000 UTC FinishedAt: 2026-09-05 22:38:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:36:58 +0000 UTC FinishedAt: 2026-09-05 22:38:32 +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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"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:*3b01ea7f-a1ff-402c-8f5a-8d6abc7e164e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d390ee7-04cb-41e0-90c3-7377fcfcb5d8,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-workflowpdtfx/series-workflowpdtfx-build-action-3029803548/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-workflowpdtfx/series-workflowpdtfx-build-action-2360009269/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:36:58 +0000 UTC FinishedAt: 2026-09-05 19:37:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:36:58 +0000 UTC FinishedAt: 2026-09-05 19:37:13 +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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"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-workflowpdtfx/series-workflowpdtfx-convert-artifact-1764960974/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:36:58 +0000 UTC FinishedAt: 2026-09-05 19:36:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:36:58 +0000 UTC FinishedAt: 2026-09-05 19:36:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:36:58 +0000 UTC FinishedAt: 2026-09-05 19:36:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:37:22 +0000 UTC FinishedAt: 2026-09-05 22:38:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpdtfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"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":["dsa_user_setup_ft_block","dsa_user_setup_tc","nf_flow_table_offload_cmd","nf_flow_table_offload_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA","NET_DSA_LOOP","NF_FLOW_TABLE","NF_TABLES"],"series_id":"26811bd3-9752-40fc-9e9c-afbd2e758e36","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-09-05 19:37:22 +0000 UTC FinishedAt: 2026-09-05 22:38:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3b01ea7f-a1ff-402c-8f5a-8d6abc7e164e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d390ee7-04cb-41e0-90c3-7377fcfcb5d8,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-workflowpdtfx/series-workflowpdtfx-build-action-3029803548/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-workflowpdtfx/series-workflowpdtfx-build-action-2360009269/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-workflowpdtfx/series-workflowpdtfx-convert-artifact-1764960974/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,}