Name: series-workflowxtxkq Phase: Succeeded StartedAt: 2026-08-02 10:13:47 +0000 UTC FinishedAt: 2026-08-02 14:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[0] Phase: Succeeded StartedAt: 2026-08-02 10:13:47 +0000 UTC FinishedAt: 2026-08-02 10:30:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 10:13:47 +0000 UTC FinishedAt: 2026-08-02 10:30:49 +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": "1327e30657d283976c839f1bd24e2d3f68474097", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ETHTOOL_NETLINK", "PHYLIB", "PHYLINK", "SFP", "I2C" ], "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": "1327e30657d283976c839f1bd24e2d3f68474097", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ETHTOOL_NETLINK", "PHYLIB", "PHYLINK", "SFP", "I2C" ], "series_id": "438860b6-bd89-4285-84ae-795bb5de9ba2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ethnl_port_dump_start", "ethnl_port_dumpit", "ethnl_port_dump_done", "phy_link_topo_add_port", "phy_link_topo_del_port", "phy_caps_linkmode_filter_ifaces", "phy_set_upstream_port" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7UEhZTElOSyYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7STJDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb19kZWxfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzJiMzNDssCiAgICAmIzM0O3BoeV9zZXRfdXBzdHJlYW1fcG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIGBQT1JUX0dFVGAgdG8gcmV0cmlldmUgcGh5c2ljYWwgcG9ydCBpbmZvcm1hdGlvbiwgYW5kIGFkZHMgU0ZQIHBvcnQgc3VwcG9ydCB0byB0aGUgUEhZIGZyYW1ld29yay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgbmV0bGluayBBUElzIGFuZCBtb2RpZmllcyBjb3JlIFBIWS9waHlsaW5rIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBhYmQ1Mzk4YzUyY2E5ODg2MDYxZWIzMGE4MTIwMjAwMmFlNjJiNGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDEwOjI5OjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiLi42N2FjMzQwMDQ2MmJmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTIxMCw2ICYjNDM7MjEwLDExIEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGRpc2NhcmRcbiAgICAgICAgIHZhbHVlOiAzMVxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IHBvcnQtdHlwZVxuJiM0MzsgICAgZG9jOiB0eXBlIG9mIHBoeXNpY2FsIGNvbm5lY3RvclxuJiM0MzsgICAgdHlwZTogZW51bVxuJiM0MzsgICAgZW50cmllczogW21kaSwgc2ZwXVxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTE5MDUsNiAmIzQzOzE5MTAsMzIgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBsaW5rXG4gICAgICAgICB0eXBlOiBuZXN0XG4gICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90XG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogcG9ydFxuJiM0MzsgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnRcbiYjNDM7ICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBoZWFkZXJcbiYjNDM7ICAgICAgICB0eXBlOiBuZXN0XG4mIzQzOyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlclxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogaWRcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1tb2Rlc1xuJiM0MzsgICAgICAgIHR5cGU6IG5lc3RcbiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtaW50ZXJmYWNlc1xuJiM0MzsgICAgICAgIHR5cGU6IG5lc3RcbiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiB0eXBlXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZW51bTogcG9ydC10eXBlXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiB1cHN0cmVhbS1wb3J0XG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4gXG4gb3BlcmF0aW9uczpcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXG5AQCAtMjg1OSw2ICYjNDM7Mjg5MCwyOSBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gd29yc3QtY2hhbm5lbFxuICAgICAgICAgICAgIC0gbGlua1xuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IHBvcnQtZ2V0XG4mIzQzOyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZVxuJiM0MztcbiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogcG9ydFxuJiM0MztcbiYjNDM7ICAgICAgZG86IFx1MDAyNnBvcnQtZ2V0LW9wXG4mIzQzOyAgICAgICAgcmVxdWVzdDpcbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgICAgICAgIC0gaGVhZGVyXG4mIzQzOyAgICAgICAgICAgIC0gaWRcbiYjNDM7ICAgICAgICByZXBseTpcbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgICAgICAgIC0gaGVhZGVyXG4mIzQzOyAgICAgICAgICAgIC0gaWRcbiYjNDM7ICAgICAgICAgICAgLSBzdXBwb3J0ZWQtbW9kZXNcbiYjNDM7ICAgICAgICAgICAgLSBzdXBwb3J0ZWQtaW50ZXJmYWNlc1xuJiM0MzsgICAgICAgICAgICAtIHR5cGVcbiYjNDM7ICAgICAgICAgICAgLSB1cHN0cmVhbS1wb3J0XG4mIzQzOyAgICAgIGR1bXA6XG4mIzQzOyAgICAgICAgcmVxdWVzdDpcbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgICAgICAgIC0gaGVhZGVyXG4gXG4gbWNhc3QtZ3JvdXBzOlxuICAgbGlzdDpcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XG5pbmRleCBlOTJhYmY0NWZhZjUwLi5iNDMyNmM4OWIwNzUxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XG5AQCAtMjUzNyw2ICYjNDM7MjUzNywzOSBAQCBXaXRoaW4gZWFjaCBjaGFubmVsIG5lc3QsIG9ubHkgdGhlIG1ldHJpY3Mgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgd2lsbCBiZSBwcmVzZW50LlxuIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW5cbiBgYGluY2x1ZGUvbGludXgvcGh5LmhgYC5cbiBcbiYjNDM7UE9SVF9HRVRcbiYjNDM7PT09PT09PT1cbiYjNDM7XG4mIzQzO1JldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLFxuJiM0MztyZWZlcnJlZCB0byBhcyBcJiMzNDtwb3J0c1wmIzM0Oy4gVXNlciBuZWVkcyB0byBzcGVjaWZ5IGEgUE9SVF9JRCBmb3IgdGhlIERPIG9wZXJhdGlvbixcbiYjNDM7aW4gd2hpY2ggY2FzZSB0aGUgRE8gcmVxdWVzdCByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoYXQgc3BlY2lmaWMgcG9ydC5cbiYjNDM7XG4mIzQzO0FzIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIHBvcnQsIHRoZSBEVU1QIG9wZXJhdGlvbiBjYW4gYmUgdXNlZCB0byBsaXN0IHRoZVxuJiM0Mztwb3J0cyBwcmVzZW50IG9uIGEgZ2l2ZW4gaW50ZXJmYWNlLCBieSBwYXNzaW5nIGFuIGludGVyZmFjZSBpbmRleCBvciBuYW1lIGluXG4mIzQzO3RoZSBkdW1wIHJlcXVlc3QuXG4mIzQzO1xuJiM0MztSZXF1ZXN0IGNvbnRlbnRzOlxuJiM0MztcbiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSEVBREVSYGAgICAgICAgICAgICAgbmVzdGVkICByZXF1ZXN0IGhlYWRlclxuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgdTMyICAgICBwb3J0IGlkXG4mIzQzOyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO0tlcm5lbCByZXNwb25zZSBjb250ZW50czpcbiYjNDM7XG4mIzQzOyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgICAgbmVzdGVkICByZXF1ZXN0IGhlYWRlclxuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgICB1MzIgICAgIHRoZSBwb3J0JiMzOTtzIHVuaXF1ZSBpZGVudGlmaWVyLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBuZXRkZXZpY2UuXG4mIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVNgYCAgICAgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBsaW5rbW9kZXNcbiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTYGAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIE1JSVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXNcbiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1RZUEVgYCAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCB0eXBlXG4mIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUYGAgICAgICAgIHUzMiAgICAgSWYgYW55LCB0aGUgaW5kZXggb2YgdGhlIE1JSVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgdGhhdCBmZWVkcyBpbnRvIHRoaXNcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LlxuJiM0MzsgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuIFJlcXVlc3QgdHJhbnNsYXRpb25cbiA9PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtMjY0Nyw0ICYjNDM7MjY4MCw1IEBAIGFyZSBuZXRsaW5rIG9ubHkuXG4gICBuL2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1BIWV9HRVRgYFxuICAgYGBTSU9DR0hXVFNUQU1QYGAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19UU0NPTkZJR19HRVRgYFxuICAgYGBTSU9DU0hXVFNUQU1QYGAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19UU0NPTkZJR19TRVRgYFxuJiM0MzsgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgYFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0XG5pbmRleCA2ZTI4ZDkwOTRiY2UzLi4yYTliMWVjOTNiNzBmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuQEAgLTk5LDEzICYjNDM7OTksMjkgQEAgd2lsbCBldmVudHVhbGx5IGJlIGFibGUgdG8gcmVwb3J0IGl0cyBvd24ga3NldHRpbmdzOjpcbiAgICAgICAgICAgICAoX19fX18pLS0tLS18IFBvcnQgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tJiM0MztcbiBcbiYjNDM7U0ZQIHBvcnRzXG4mIzQzOz09PT09PT09PVxuJiM0MztcbiYjNDM7U0ZQIGludGVyZmFjZXMgaW52b2x2ZSAyIGRpc3RpbmN0IGNvbXBvbmVudHMsIGVhY2ggcmVwcmVzZW50ZWQgYnlcbiYjNDM7YSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgIGluc3RhbmNlIDpcbiYjNDM7XG4mIzQzOyAtIFRoZSBTRlAgY2FnZSBpdHNlbGYgaXMgYSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgLiBJdCYjMzk7cyBzcGVjaWFsXG4mIzQzOyAgIGluIHRoYXQgaXQmIzM5O3Mgbm90IGFuIE1ESSBpbnRlcmZhY2UsIGJ1dCByYXRoZXIgYSBob3QtcGx1Z2dhYmxlIE1JSS5cbiYjNDM7ICAgVGhlIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWAgYXNzb2NpYXRlZCB0byBpdCBsaXN0cyB0aGUgZGlmZmVyZW50XG4mIzQzOyAgIE1JSSBpbnRlcmZhY2VzIHdlIGNhbiB1c2Ugb24gdGhlIGNhZ2UuXG4mIzQzO1xuJiM0MzsgLSBUaGUgU0ZQIG1vZHVsZSwgd2hlbiBpbnNlcnRlZCwgd2lsbCBhbHNvIGJlIGFzc29jaWF0ZWQgdG8gYVxuJiM0MzsgICA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgLCB0aGF0IHJlcHJlc2VudHMgdGhlIHZhcmlvdXMgbGlua21vZGVzXG4mIzQzOyAgIHRoYXQgaXQgZ2l2ZXMgYWNjZXNzIHRvLiBUaGUgbW9kdWxlJiMzOTtzIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWBcbiYjNDM7ICAgZG9lc24mIzM5O3Qgc3VwZXJzZWRlIHRoZSBjYWdlJiMzOTtzIHBvcnQsIGl0IHJlZmVyZW5jZXMgaXQgdGhyb3VnaFxuJiM0MzsgICB0aGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCA6YzptZW1iZXI6YHVwc3RyZWFtX3BvcnRgIGZpZWxkLlxuJiM0MztcbiBOZXh0IHN0ZXBzXG4gPT09PT09PT09PVxuIFxuLUFzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCBvbmx5IHBvcnRzIGNvbnRyb2xsZWQgYnkgUEhZIGRldmljZXMgYXJlXG4tc3VwcG9ydGVkLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGFkZCB0aGUgTmV0bGluayBBUEkgdG8gZXhwb3NlIHRoZXNlXG4tdG8gdXNlcnNwYWNlIGFuZCBhZGQgc3VwcG9ydCBmb3IgcmF3IHBvcnRzIChjb250cm9sbGVkIGJ5IHNvbWUgZmlybXdhcmUsIGFuZCBkaXJlY3RseVxuLW1hbmFnZWQgYnkgdGhlIE5JQyBkcml2ZXIpLlxuJiM0MztBcyBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgdGhlIHBvcnQmIzM5O3MgcHJlc2VuY2UgYW5kIGluZm9ybWF0aW9uIGNhbiBvbmx5XG4mIzQzO2JlIHF1ZXJpZWQsIGFuZCBpdCYjMzk7cyBub3QgcG9zc2libGUgdG8gY2hhbmdlIGFueSBvZiB0aGUgcG9ydCYjMzk7cyBzZXR0aW5ncyBvciBzZWxlY3RcbiYjNDM7d2hpY2ggb25lIHNob3VsZCBiZSB1c2VkLlxuIFxuIEFub3RoZXIgcGFyYWxsZWwgdGFzayBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgTUlJIG11eGluZyBmcmFtZXdvcmsgdG8gYWxsb3cgdGhlXG4tY29udHJvbCBvZiBub24tUEhZIGRyaXZlciBtdWx0aS1wb3J0IHNldHVwcy5cbiYjNDM7Y29udHJvbCBvZiBub24tUEhZIGRyaXZlbiBtdWx0aS1wb3J0IHNldHVwcy5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA5MzJlYTFkYjA0OGU1Li4zOTVmOGI1ZDE4NDk1IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTg4MTYsNiAmIzQzOzE4ODE2LDcgQEAgRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZXRoZXJuZXQtY29ubmVjdG9yLnlhbWxcbiBGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuIEY6XHRkcml2ZXJzL25ldC9waHkvcGh5X3BvcnQuY1xuIEY6XHRpbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbiYjNDM7RjpcdG5ldC9ldGh0b29sL3BvcnQuY1xuIEs6XHRzdHJ1Y3RcXHMmIzQzO3BoeV9wb3J0fHBoeV9wb3J0X1xuIFxuIE5FVFdPUktJTkcgW0dFTkVSQUxdXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxuaW5kZXggNDIxMDg4ZTZmNmU4Zi4uZWMzZDM5YTBhZTA2YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxuQEAgLTY2LDUgJiM0Mzs2Niw3IEBAIHZvaWQgcGh5X2NhcHNfbWVkaXVtX2dldF9zdXBwb3J0ZWQodW5zaWduZWQgbG9uZyAqc3VwcG9ydGVkLFxuIFx0XHRcdFx0ICAgZW51bSBldGh0b29sX2xpbmtfbWVkaXVtIG1lZGl1bSxcbiBcdFx0XHRcdCAgIGludCBsYW5lcyk7XG4gdTMyIHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzKTtcbiYjNDM7dm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmcm9tLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaW50ZXJmYWNlcyk7XG4gXG4gI2VuZGlmIC8qIF9fUEhZX0NBUFNfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcbmluZGV4IDk0MmQ0MzE5MTU2MWUuLjU1OGU0ZGY0ZDYzYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcbkBAIC00NDUsMyAmIzQzOzQ0NSwyOSBAQCB1MzIgcGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpXG4gXHRyZXR1cm4gbWVkaXVtcztcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcygpIC0gRmlsdGVyIGxpbmttb2RlcyB3aXRoIGFuIGludGVyZmFjZSBsaXN0XG4mIzQzOyAqIEB0bzogU3RvcmVzIHRoZSBmaWx0ZXJlZCBsaW5rbW9kZXNcbiYjNDM7ICogQGZyb206IExpbmttb2RlcyB0byBmaWx0ZXJcbiYjNDM7ICogQGludGVyZmFjZXM6IEJpdGZpZWxkIG9mIHBoeV9pbnRlcmZhY2VfdCB0aGF0IHdlIHVzZSBmb3IgZmlsdGVyaW5nXG4mIzQzOyAqXG4mIzQzOyAqIEZpbHRlciB0aGUgcHJvdmlkZWQgbGlua21vZGVzLCBvbmx5IHRvIGtlZXAgdGhlIG9uZXMgd2UgY2FuIHBvc3NpYmx5IGFjaGlldmVcbiYjNDM7ICogd2hlbiB1c2luZyBhbnkgb2YgdGhlIHByb3ZpZGVkIE1JSSBpbnRlcmZhY2VzLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmludGVyZmFjZXMpXG4mIzQzO3tcbiYjNDM7XHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhpZmFjZXNfc3VwcG9ydGVkKSA9IHt9O1xuJiM0MztcdHVuc2lnbmVkIGludCBpZmFjZXNfY2FwcyA9IDA7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChpbnRlcmZhY2UsIGludGVyZmFjZXMsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgpXG4mIzQzO1x0XHRpZmFjZXNfY2FwcyB8PSBwaHlfY2Fwc19mcm9tX2ludGVyZmFjZShpbnRlcmZhY2UpO1xuJiM0MztcbiYjNDM7XHRwaHlfY2Fwc19saW5rbW9kZXMoaWZhY2VzX2NhcHMsIGlmYWNlc19zdXBwb3J0ZWQpO1xuJiM0MztcbiYjNDM7XHRsaW5rbW9kZV9hbmQodG8sIGZyb20sIGlmYWNlc19zdXBwb3J0ZWQpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCA5NGIyZTg1ZTAwYTM3Li4zZGE2ODcyZWJiYmEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE0OTAsMTEgJiM0MzsxNDkwLDIyIEBAIHN0YXRpYyBpbnQgcGh5X3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbiB7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0aWYgKGRldilcbi1cdFx0cmV0dXJuIHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gdHJ1ZTtcbiYjNDM7XHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHQvKiBJZiB3ZSBhcmVuJiMzOTt0IGF0dGFjaGVkIHRvIGEgbmV0ZGV2LCB3ZSBjYW4mIzM5O3QgYWRkIHRoZSBTRlAgUEhZIHRvIGl0c1xuJiM0MztcdCAqIHRvcG9sb2d5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZGV2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWhhc19zZnBfbW9kX3BoeSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC0xNTEyLDggJiM0MzsxNTIzLDEyIEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfZGlzY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbiBcbiYjNDM7XHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGRldilcbiBcdFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTtcbiYjNDM7XG4mIzQzO1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgTlVMTCk7XG4gfVxuIFxuIC8qKlxuQEAgLTE2MTcsNiAmIzQzOzE2MzIsNzcgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9saW5rX2Rvd24odm9pZCAqdXBzdHJlYW0pXG4gXHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWxpbmtfZG93bihwb3J0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGh5X2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgbW9kIHBvcnQgKi9cbiYjNDM7XHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcbiYjNDM7XHRpZiAoIXBvcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cG9ydC1cdTAwM2VhY3RpdmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRjYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwaHlkZXYtXHUwMDNlc2ZwX2J1cyk7XG4mIzQzO1xuJiM0MztcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXHUwMDNlbGlua19tb2RlcyxcbiYjNDM7XHRcdFx0XHRcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldikge1xuJiM0MztcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LCBwb3J0KTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHdlIGRvbiYjMzk7dCB1c2UgcGh5X2FkZF9wb3J0KCkgaGVyZSBhcyB0aGUgbW9kdWxlIHBvcnQgaXNuJiMzOTt0IGEgZGlyZWN0XG4mIzQzO1x0ICogaW50ZXJmYWNlIGZyb20gdGhlIFBIWSwgYnV0IHJhdGhlciBhbiBleHRlbnNpb24gdG8gdGhlIHNmcC1idXMsIHRoYXRcbiYjNDM7XHQgKiBpcyBhbHJlYWR5IHJlcHJlc2VudGVkIGJ5IGl0cyBvd24gcGh5X3BvcnRcbiYjNDM7XHQgKi9cbiYjNDM7XHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBwb3J0O1xuJiM0MztcbiYjNDM7XHRwb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBoeV9kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4mIzQzO1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1xuJiM0MztcdHBoeV9wb3J0X2Rlc3Ryb3kocGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV9zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuJiM0MztcbiYjNDM7XHQvKiBJZiB0aGVyZSYjMzk7cyBhIGRvd25zdHJlYW0gU0ZQIG1vZHVsZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGNvbnRhaW4gYSBQSFlcbiYjNDM7XHQgKiBkZXZpY2UsIGxldCYjMzk7cyBjcmVhdGUgYSBwaHlfcG9ydCB0byByZXByZXNlbnQgdGhhdCBtb2R1bGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxuJiM0MztcdFx0cmV0dXJuIHBoeV9hZGRfc2ZwX21vZF9wb3J0KHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwaHlfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuJiM0MztcbiYjNDM7XHQvKiBDYWxsZWQgdXBvbiBtb2R1bGUgcmVtb3ZhbCBvciB1cHN0cmVhbSByZW1vdmFsICovXG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxuJiM0MztcdFx0cGh5X2RlbF9zZnBfbW9kX3BvcnQocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG4gXHQuYXR0YWNoID0gcGh5X3NmcF9hdHRhY2gsXG4gXHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXG5AQCAtMTYyNiw2ICYjNDM7MTcxMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcbiBcdC5saW5rX2Rvd24gPSBwaHlfc2ZwX2xpbmtfZG93bixcbiBcdC5jb25uZWN0X3BoeSA9IHBoeV9zZnBfY29ubmVjdF9waHksXG4gXHQuZGlzY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Rpc2Nvbm5lY3RfcGh5LFxuJiM0MztcdC5tb2R1bGVfc3RhcnQgPSBwaHlfc2ZwX21vZHVsZV9zdGFydCxcbiYjNDM7XHQubW9kdWxlX3N0b3AgPSBwaHlfc2ZwX21vZHVsZV9zdG9wLFxuIH07XG4gXG4gc3RhdGljIGludCBwaHlfYWRkX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuQEAgLTE2NzMsMTMgJiM0MzsxNzYxLDEzIEBAIHN0YXRpYyB2b2lkIHBoeV9kZWxfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4gXHRwaHlkZXYtXHUwMDNlbl9wb3J0cy0tO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0MztzdGF0aWMgc3RydWN0IHBoeV9wb3J0ICpwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghcG9ydClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdHBvcnQtXHUwMDNlcGFyZW50X3R5cGUgPSBQSFlfUE9SVF9QSFk7XG4gXHRwb3J0LVx1MDAzZXBoeSA9IHBoeWRldjtcbkBAIC0xNjk0LDEwICYjNDM7MTc4MiwxMiBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0ICogd2hlbiBhdHRhY2hpbmcgdGhlIHBvcnQgdG8gdGhlIHBoeWRldi5cbiBcdCAqL1xuIFx0cmV0ID0gcGh5X2FkZF9wb3J0KHBoeWRldiwgcG9ydCk7XG4tXHRpZiAocmV0KVxuJiM0MztcdGlmIChyZXQpIHtcbiBcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcG9ydDtcbiB9XG4gXG4gLyoqXG5AQCAtMTcwNiwyNSAmIzQzOzE3OTYsNTAgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiAgKi9cbiBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBzZnBfYnVzICpidXM7XG4tXHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpIHtcbi1cdFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKTtcbi1cdFx0aWYgKElTX0VSUihidXMpKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKGJ1cyk7XG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4tXHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gYnVzO1xuJiM0MztcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XG4mIzQzO1x0aWYgKElTX0VSUihidXMpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYnVzKTtcbiBcbi1cdFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcbi1cdFx0c2ZwX2J1c19wdXQoYnVzKTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbiBcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XG4mIzQzO1x0aWYgKGJ1cykge1xuJiM0MztcdFx0cG9ydCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKElTX0VSUihwb3J0KSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHBvcnQpO1xuJiM0MztcdFx0XHRwb3J0ID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfc2ZwO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKVxuLVx0XHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3BvcnQ7XG4mIzQzO1xuJiM0MztcdC8qIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgZ3JhYnMgYSByZWYgdG8gdGhlIHNmcCBidXMgb24gc3VjY2VzcywgaXQmIzM5O3NcbiYjNDM7XHQgKiBzYWZlIHRvIHJlbGVhc2UgaXQgbm93LlxuJiM0MztcdCAqL1xuJiM0MztcdHNmcF9idXNfcHV0KGJ1cyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztvdXRfcG9ydDpcbiYjNDM7XHRpZiAocG9ydCkge1xuJiM0MztcdFx0cGh5X2RlbF9wb3J0KHBoeWRldiwgcG9ydCk7XG4mIzQzO1x0XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7b3V0X3NmcDpcbiYjNDM7XHRzZnBfYnVzX3B1dChidXMpO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE4MTUsNiAmIzQzOzE5MzAsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdGVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeWRldiwgUEhZX1VQU1RSRUFNX01BQywgZGV2KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwaHlkZXYtXHUwMDNlbW9kX3BvcnQpIHtcbiYjNDM7XHRcdFx0ZXJyID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdC8qIFNvbWUgRXRoZXJuZXQgZHJpdmVycyB0cnkgdG8gY29ubmVjdCB0byBhIFBIWSBkZXZpY2UgYmVmb3JlXG5AQCAtMTk1MSw2ICYjNDM7MjA3Miw4IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LVx1MDAzZXBoeWRldiA9IE5VTEw7XG4gXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xuIFx0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbiYjNDM7XHRcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4gXHR9XG4gXG4gXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gTlVMTDtcbkBAIC0zNjA0LDYgJiM0MzszNzI3LDI1IEBAIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeV9zZXRfdXBzdHJlYW1fcG9ydCgpIC0gU2V0cyB0aGUgcGh5X3BvcnQgY29udHJvbGxpbmcgdGhlIE1JSSB0aGlzIFBIWSBpc1xuJiM0MzsgKlx0XHRcdCAgICAgYXR0YWNoZWQgdG8uXG4mIzQzOyAqIEBwaHlkZXY6IHBvaW50ZXIgdG8gdGhlIFBIWSBkZXZpY2Ugd2Ugc2V0IHRoZSB1cHN0cmVhbSBvZi5cbiYjNDM7ICogQHBvcnQ6IFRoZSBwaHlfcG9ydCB1cHN0cmVhbSBvZiB0aGlzIFBIWSwgY2FuIGJlIE5VTEwuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcbiYjNDM7XG4mIzQzO1x0cGh5X2Zvcl9lYWNoX3BvcnQocGh5ZGV2LCBsb2NhbF9wb3J0KVxuJiM0MztcdFx0bG9jYWxfcG9ydC1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfc2V0X3Vwc3RyZWFtX3BvcnQpO1xuJiM0MztcbiAvKipcbiAgKiBmd25vZGVfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZndub2RlLCBmaW5kIHRoZSBtZGlvX2RldmljZVxuICAqIEBmd25vZGU6IHBvaW50ZXIgdG8gdGhlIG1kaW9fZGV2aWNlJiMzOTtzIGZ3bm9kZVxuQEAgLTM4NDIsNiAmIzQzOzM5ODQsNyBAQCBzdGF0aWMgaW50IHBoeV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFxuIFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGh5ZGV2LVx1MDAzZXNmcF9idXMpO1xuIFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbiBcbiBcdHBoeV9jbGVhbnVwX3BvcnRzKHBoeWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuaW5kZXggNDEzNGRlN2FlMzEzZC4uNjcxMGExOTk5NjdhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuQEAgLTcsNiAmIzQzOzcsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X3BvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuQEAgLTIzLDE3ICYjNDM7MjQsODkgQEAgc3RhdGljIGludCBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHhhX2luaXRfZmxhZ3MoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBYQV9GTEFHU19BTExPQzEpO1xuIFx0dG9wby1cdTAwM2VuZXh0X3BoeV9pbmRleCA9IDE7XG4gXG4mIzQzO1x0eGFfaW5pdF9mbGFncyhcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzLCBYQV9GTEFHU19BTExPQzEpO1xuJiM0MztcdHRvcG8tXHUwMDNlbmV4dF9wb3J0X2luZGV4ID0gMTtcbiYjNDM7XG4gXHRkZXYtXHUwMDNlbGlua190b3BvID0gdG9wbztcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlbGlua190b3BvKVxuJiM0MztcdFx0cmV0dXJuIGRldi1cdTAwM2VsaW5rX3RvcG87XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB0b3BvbG9neSBpcyBhbGxvY2F0ZWQgdGhlIGZpcnN0IHRpbWUgd2UgYWRkIGFuIG9iamVjdCB0byBpdC5cbiYjNDM7XHQgKiBJdCBpcyBmcmVlZCBhbG9uZ3NpZGUgdGhlIG5ldGRldi4gSXQgY2FuIGJlIGNhbGxlZCBvbiBtdWx0aXBsZVxuJiM0MztcdCAqIGNvbnRleHRzOlxuJiM0MztcdCAqICAtIEl0IGNhbiBiZSBjYWxsZWQgZnJvbSAucHJvYmUoKSA6IE5vIHJ0bmwsIG5vIG5ldGRldl9sb2NrXG4mIzQzO1x0ICogIC0gLm5kb19vcGVuKCkgOiBydG5sIGFuZCBwb3NzaWJseSBuZXRkZXZfbG9ja1xuJiM0MztcdCAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdFxuJiM0MztcdCAqXG4mIzQzO1x0ICogIEhvd2V2ZXIsIHdlIGNhbiYjMzk7dCByZWFsbHkgaGF2ZSByYWNlcyA6XG4mIzQzO1x0ICogIC0gSWYgd2UgaGF2ZSBhIFBIWSwgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkgd2lsbCBhbHdheXMgcnVuIGZpcnN0XG4mIzQzO1x0ICogICAgYW5kIHRyaWdnZXIgdGhlIGFsbG9jLiBPbmx5IHRoZW4gdGhlIHBvcnRzIGNhbiBiZSBhZGRlZCB0aHJvdWdoXG4mIzQzO1x0ICogICAgcGh5bGliIG9mIHNmcC5cbiYjNDM7XHQgKiAgLSBJZiB3ZSBkb24mIzM5O3QsIHRoZSBTRlAgcG9ydCBmb3IgdGhlIGNhZ2UgaXMgcmVnaXN0ZXJlZCBmaXJzdCwgYW5kXG4mIzQzO1x0ICogICAgb25seSB0aGVuIG90aGVyIHBvcnRzL1BIWXMgY2FuIGJlIHJlZ2lzdGVyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXYtXHUwMDNlbGlua190b3BvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogUG9ydHMgY2FuIG5vdyBiZSBxdWVyaWVkIHdpdGhvdXQgcnRubCBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLCB3aGljaFxuJiM0MztcdCAqIHdlIGRvbiYjMzk7dCBzdXBwb3J0IG5vdyBhcyBwb3J0IHJldHJpZXZhbCBpcyBkb25lIHVuZGVyIHJ0bmwuXG4mIzQzO1x0ICogV2UgZG9uJiMzOTt0IGhhdmUgcGh5X3BvcnQgZW5hYmxlZCBkZXZpY2VzIHlldCwgbGV0JiMzOTtzIG1ha2Ugc3VyZVxuJiM0MztcdCAqIHdlIGFyZSBsb3VkbHkgd2FybmVkIGFib3V0IHRoYXQgd2hlbiBpdCBoYXBwZW5zLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpO1xuJiM0MztcdGlmIChJU19FUlIodG9wbykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUih0b3BvKTtcbiYjNDM7XG4mIzQzO1x0LyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovXG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNlaWQpXG4mIzQzO1x0XHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgcG9ydC1cdTAwM2VpZCwgcG9ydCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0ID0geGFfYWxsb2NfY3ljbGljKFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIFx1MDAyNnBvcnQtXHUwMDNlaWQsIHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICAgeGFfbGltaXRfMzJiLCBcdTAwMjZ0b3BvLVx1MDAzZW5leHRfcG9ydF9pbmRleCxcbiYjNDM7XHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2FkZF9wb3J0KTtcbiYjNDM7XG4mIzQzO3ZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRvcG8pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHhhX2VyYXNlKFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIHBvcnQtXHUwMDNlaWQpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fZGVsX3BvcnQpO1xuJiM0MztcbiBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0ICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuIFx0XHRcdCAgZW51bSBwaHlfdXBzdHJlYW0gdXB0LCB2b2lkICp1cHN0cmVhbSlcbiB7XG4tXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuJiM0MztcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbztcbiBcdHN0cnVjdCBwaHlfZGV2aWNlX25vZGUgKnBkbjtcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogZXRodG9vbCBvcHMgbWF5IHJ1biB3aXRob3V0IHJ0bmxfbG9jaywgYW5kIHJ0bmxfbG9jayBpcyB3aGF0XG5AQCAtNDUsMTMgJiM0MzsxMTgsOSBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoIXRvcG8pIHtcbi1cdFx0cmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0dG9wbyA9IGRldi1cdTAwM2VsaW5rX3RvcG87XG4tXHR9XG4mIzQzO1x0dG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7XG4mIzQzO1x0aWYgKElTX0VSUih0b3BvKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xuIFxuIFx0cGRuID0ga3phbGxvY19vYmooKnBkbik7XG4gXHRpZiAoIXBkbilcbkBAIC04Niw4ICYjNDM7MTU1LDIwIEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuJiM0MztcdC8qIEFkZCBhbGwgdGhlIFBIWSYjMzk7cyBwb3J0cyB0byB0aGUgdG9wb2xvZ3kgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZCkge1xuJiM0MztcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBvcnQpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBkZWxfcG9ydHM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIFxuJiM0MztkZWxfcG9ydHM6XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbiYjNDM7XHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBwaHktXHUwMDNlcGh5aW5kZXgpO1xuIGVycjpcbiBcdGtmcmVlKHBkbik7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTk5LDEwICYjNDM7MTgwLDE0IEBAIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbiBcdHN0cnVjdCBwaHlfZGV2aWNlX25vZGUgKnBkbjtcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4gXG4gXHRpZiAoIXRvcG8pXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbiYjNDM7XHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwb3J0KTtcbiYjNDM7XG4gXHRwZG4gPSB4YV9lcmFzZShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMsIHBoeS1cdTAwM2VwaHlpbmRleCk7XG4gXG4gXHQvKiBXZSBkZWxldGUgdGhlIFBIWSBmcm9tIHRoZSB0b3BvbG9neSwgaG93ZXZlciB3ZSBkb24mIzM5O3QgcmUtc2V0IHRoZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5pbmRleCBmNDBhY2MwZDQxMzM4Li5hNWYwMjUxODdhZmEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuQEAgLTE0LDYgJiM0MzsxNCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfZml4ZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfbGlua190b3BvbG9neS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9wb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbkBAIC05Myw2ICYjNDM7OTUsOCBAQCBzdHJ1Y3QgcGh5bGluayB7XG4gXHRERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhzZnBfaW50ZXJmYWNlcyk7XG4gXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzZnBfc3VwcG9ydCk7XG4gXHR1OCBzZnBfcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICptb2RfcG9ydDtcbiBcbiBcdHN0cnVjdCBlZWVfY29uZmlnIGVlZV9jZmc7XG4gXG5AQCAtMTc2NCw2ICYjNDM7MTc2OCw1MSBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX2ZpeGVkX3BvbGwoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHNmcF9waHlsaW5rX29wcztcbiBcbiYjNDM7c3RhdGljIGludCBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbC1cdTAwM2VuZXRkZXYgfHwgIXBsLVx1MDAzZXNmcF9idXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7XG4mIzQzO1x0aWYgKCFwb3J0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBvcnQtXHUwMDNlaXNfc2ZwID0gdHJ1ZTtcbiYjNDM7XHRwb3J0LVx1MDAzZWlzX21paSA9IHRydWU7XG4mIzQzO1x0cG9ydC1cdTAwM2VhY3RpdmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRwaHlfaW50ZXJmYWNlX2FuZChwb3J0LVx1MDAzZWludGVyZmFjZXMsIHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyxcbiYjNDM7XHRcdFx0ICBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRwaHlfcG9ydF91cGRhdGVfc3VwcG9ydGVkKHBvcnQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcG9ydCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3lfcG9ydDtcbiYjNDM7XG4mIzQzO1x0cGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X2Rlc3Ryb3lfcG9ydDpcbiYjNDM7XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuJiM0MztcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbiYjNDM7e1xuJiM0MztcdGlmIChwbC1cdTAwM2VuZXRkZXYgXHUwMDI2XHUwMDI2IHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpXG4mIzQzO1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4mIzQzO1xuJiM0MztcdGlmIChwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KVxuJiM0MztcdFx0cGh5X3BvcnRfZGVzdHJveShwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbiYjNDM7XG4mIzQzO1x0cGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBwaHlsaW5rX3JlZ2lzdGVyX3NmcChzdHJ1Y3QgcGh5bGluayAqcGwsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuIHtcbkBAIC0xNzgxLDkgJiM0MzsxODMwLDE4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLFxuIFxuIFx0cGwtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbiBcbiYjNDM7XHRyZXQgPSBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHBsKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRzZnBfYnVzX3B1dChidXMpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwbCwgXHUwMDI2c2ZwX3BoeWxpbmtfb3BzKTtcbiBcdHNmcF9idXNfcHV0KGJ1cyk7XG4gXG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHBsKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xOTQ2LDYgJiM0MzsyMDA0LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpO1xuIHZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbClcbiB7XG4gXHRzZnBfYnVzX2RlbF91cHN0cmVhbShwbC1cdTAwM2VzZnBfYnVzKTtcbiYjNDM7XHRwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChwbCk7XG4gXHRpZiAocGwtXHUwMDNlbGlua19ncGlvKVxuIFx0XHRncGlvZF9wdXQocGwtXHUwMDNlbGlua19ncGlvKTtcbiBcbkBAIC0zODcxLDE0ICYjNDM7MzkzMCw2NyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfcmVtb3ZlKHZvaWQgKnVwc3RyZWFtKVxuIFx0cGh5X2ludGVyZmFjZV96ZXJvKHBsLVx1MDAzZXNmcF9pbnRlcmZhY2VzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogQ3JlYXRlIG1vZCBwb3J0ICovXG4mIzQzO1x0cG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7XG4mIzQzO1x0aWYgKCFwb3J0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBvcnQtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0Y2FwcyA9IHNmcF9nZXRfbW9kdWxlX2NhcHMocGwtXHUwMDNlc2ZwX2J1cyk7XG4mIzQzO1xuJiM0MztcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXHUwMDNlbGlua19tb2RlcyxcbiYjNDM7XHRcdFx0XHRcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQtXHUwMDNlaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdGlmIChwbC1cdTAwM2VuZXRkZXYpIHtcbiYjNDM7XHRcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQocGwtXHUwMDNlbmV0ZGV2LCBwb3J0KTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQ7XG4mIzQzO1xuJiM0MztcdHBsLVx1MDAzZW1vZF9wb3J0ID0gcG9ydDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXBsLVx1MDAzZW1vZF9wb3J0KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAocGwtXHUwMDNlbmV0ZGV2KVxuJiM0MztcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBsLVx1MDAzZW1vZF9wb3J0KTtcbiYjNDM7XG4mIzQzO1x0cGh5X3BvcnRfZGVzdHJveShwbC1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1x0cGwtXHUwMDNlbW9kX3BvcnQgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuIHtcbiBcdHN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdGFydCB0aGUgUEhZIG5vdy4gKi9cbiBcdGlmIChwbC1cdTAwM2VwaHlkZXYpIHtcbiBcdFx0cGh5X3N0YXJ0KHBsLVx1MDAzZXBoeWRldik7XG4gXHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQocGwpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdC8qIElmIHRoZSBtb2R1bGUgbWF5IGhhdmUgYSBQSFkgYnV0IHdlIGRpZG4mIzM5O3QgZGV0ZWN0IG9uZSB3ZVxuQEAgLTM4ODcsNyAmIzQzOzM5OTksMTYgQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXG4gXHRpZiAoIXBsLVx1MDAzZXNmcF9tYXlfaGF2ZV9waHkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcbiYjNDM7XHRyZXQgPSBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZGVsX21vZF9wb3J0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2RlbF9tb2RfcG9ydDpcbiYjNDM7XHRwaHlsaW5rX2RlbF9zZnBfbW9kX3BvcnQocGwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSlcbkBAIC0zODk3LDYgJiM0Mzs0MDE4LDggQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXG4gXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdG9wIGl0LiAqL1xuIFx0aWYgKHBsLVx1MDAzZXBoeWRldilcbiBcdFx0cGh5X3N0b3AocGwtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwaHlsaW5rX2RlbF9zZnBfbW9kX3BvcnQocGwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9saW5rX2Rvd24odm9pZCAqdXBzdHJlYW0pXG5AQCAtMzk0MSw2ICYjNDM7NDA2NCw4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4gXHRwaHlfaW50ZXJmYWNlX2FuZChwaHktXHUwMDNlaG9zdF9pbnRlcmZhY2VzLCBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzLFxuIFx0XHRcdCAgcGwtXHUwMDNlY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiBcbiYjNDM7XHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbiYjNDM7XG4gXHQvKiBEbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uICovXG4gXHRyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX3BoeShwbCwgcGh5KTtcbiB9XG5AQCAtMzk0OSw2ICYjNDM7NDA3NCw3IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2Rpc2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh1cHN0cmVhbSk7XG4mIzQzO1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeWRldiwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDExMDkyYzMxNzViM2QuLjc0MWNhN2EwYTI1NzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtNTgyLDYgJiM0Mzs1ODIsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHdvbF9lbmFibGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGUgUEhZIG9yIHRoZSBhdHRhY2hlZCBNQUMgaGF2ZSBXYWtlLW9uLUxBTlxuICAqIFx0XHQgZW5hYmxlZC5cbiAgKiBAaXNfZ2VucGh5X2RyaXZlbjogUEhZIGlzIGRyaXZlbiBieSBvbmUgb2YgdGhlIGdlbmVyaWMgUEhZIGRyaXZlcnNcbiYjNDM7ICogQGhhc19zZnBfbW9kX3BoeTogU2V0IHRydWUgaWYgZG93bnN0cmVhbSBTRlAgYnVzJiMzOTtzIG1vZHVsZSBjb250YWlucyBhIFBIWVxuICAqIEBzdGF0ZTogU3RhdGUgb2YgdGhlIFBIWSBmb3IgbWFuYWdlbWVudCBwdXJwb3Nlc1xuICAqIEBkZXZfZmxhZ3M6IERldmljZS1zcGVjaWZpYyBmbGFncyB1c2VkIGJ5IHRoZSBQSFkgZHJpdmVyLlxuICAqXG5AQCAtNTk0LDYgJiM0Mzs1OTUsOSBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHBoeWxpbms6IFBvaW50ZXIgdG8gcGh5bGluayBpbnN0YW5jZSBmb3IgdGhpcyBQSFlcbiAgKiBAc2ZwX2J1c19hdHRhY2hlZDogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFNGUCBidXMgaGFzIGJlZW4gYXR0YWNoZWRcbiAgKiBAc2ZwX2J1czogU0ZQIGJ1cyBhdHRhY2hlZCB0byB0aGlzIFBIWSYjMzk7cyBmaWJlciBwb3J0XG4mIzQzOyAqIEBzZnBfY2FnZV9wb3J0OiBUaGUgcGh5X3BvcnQgY29ubmVjdGVkIHRvIHRoZSBkb3duc3RyZWFtIFNGUCBjYWdlXG4mIzQzOyAqIEBtb2RfcG9ydDogcGh5X3BvcnQgcmVwcmVzZW50aW5nIHRoZSBTRlAgbW9kdWxlLCBpZiBpdCBpcyBwaHktbGVzc1xuJiM0MzsgKiBAdXBzdHJlYW1fcG9ydDogcGh5X3BvcnQgdGhpcyBQSFkmIzM5O3MgTUlJIGF0dGFjaGVzIHRvLCBpZiBhbnlcbiAgKiBAYXR0YWNoZWRfZGV2OiBUaGUgYXR0YWNoZWQgZW5ldCBkcml2ZXImIzM5O3MgZGV2aWNlIGluc3RhbmNlIHB0clxuICAqIEBhZGp1c3RfbGluazogQ2FsbGJhY2sgZm9yIHRoZSBlbmV0IGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBjaGFuZ2VzOiBpbiB0aGVcbiAgKiAgICAgICAgICAgICAgIGxpbmsgc3RhdGUuXG5AQCAtNzA2LDYgJiM0Mzs3MTAsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XG4gXHR1bnNpZ25lZCBpcnFfcmVydW46MTtcbiBcbiBcdHVuc2lnbmVkIGRlZmF1bHRfdGltZXN0YW1wOjE7XG4mIzQzO1x0dW5zaWduZWQgaGFzX3NmcF9tb2RfcGh5OjE7XG4gXG4gXHRpbnQgcmF0ZV9tYXRjaGluZztcbiBcbkBAIC03ODUsNiAmIzQzOzc5MCw5IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcbiBcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cbiBcdGJvb2wgc2ZwX2J1c19hdHRhY2hlZDtcbiBcdHN0cnVjdCBzZnBfYnVzICpzZnBfYnVzO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqc2ZwX2NhZ2VfcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcbiBcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmF0dGFjaGVkX2RldjtcbiBcdHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cztcbkBAIC0yNDY4LDYgJiM0MzsyNDc2LDggQEAgaW50IF9fcGh5X2h3dHN0YW1wX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFxuIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBcbiYjNDM7dm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcbiYjNDM7XG4gLyoqXG4gICogcGh5X21vZHVsZV9kcml2ZXIoKSAtIEhlbHBlciBtYWNybyBmb3IgcmVnaXN0ZXJpbmcgUEhZIGRyaXZlcnNcbiAgKiBAX19waHlfZHJpdmVyczogYXJyYXkgb2YgUEhZIGRyaXZlcnMgdG8gcmVnaXN0ZXJcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcbmluZGV4IDk1NTc1ZjY4ZDViYzcuLjk1ODUyODJjYWUzZmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxuQEAgLTEzLDE0ICYjNDM7MTMsMTkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuIHN0cnVjdCB4YXJyYXk7XG4gc3RydWN0IHBoeV9kZXZpY2U7XG4mIzQzO3N0cnVjdCBwaHlfcG9ydDtcbiBzdHJ1Y3Qgc2ZwX2J1cztcbiBcbiBzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kge1xuIFx0c3RydWN0IHhhcnJheSBwaHlzO1xuIFx0dTMyIG5leHRfcGh5X2luZGV4O1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgeGFycmF5IHBvcnRzO1xuJiM0MztcdHUzMiBuZXh0X3BvcnRfaW5kZXg7XG4gfTtcbiBcbiBzdHJ1Y3QgcGh5X2RldmljZV9ub2RlIHtcbkBAIC00OCw2ICYjNDM7NTMsOSBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7XG4gXG4mIzQzO2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4mIzQzO3ZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpO1xuJiM0MztcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcbiBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxuIHtcbkBAIC02NCw2ICYjNDM7NzIsMjUgQEAgcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X3BvcnQgKlxuJiM0MztwaHlfbGlua190b3BvX2dldF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwb3J0X2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbiYjNDM7XG4mIzQzO1x0aWYgKCF0b3BvKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdC8qIHBvcnRzIGluIHRoZSB0b3BvIGFyZSBSVE5MIHByb3RlY3RlZCwgYnV0IG1heSBiZSBhY2Nlc3NlZCB1bmRlclxuJiM0MztcdCAqIG5ldGRldl9sb2NrIGZvciBvcHMtbG9ja2VkIGRldmljZXMuIEZvciBub3cga2VlcCB0aGVtIHVuZGVyIHJ0bmxcbiYjNDM7XHQgKiBwcm90ZWN0aW9uLCBhcyBubyBvcHMtbG9ja2VkIGRldmljZXMgaGF2ZSBwaHlfcG9ydCBjYXBhYmlsaXRpZXNcbiYjNDM7XHQgKiB5ZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2FsbGVyIG11c3QgaG9sZCBSVE5MIHdoaWxlIGhhbmRsaW5nIHRoZSBwaHlfcG9ydCAqL1xuJiM0MztcdHJldHVybiB4YV9sb2FkKFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIHBvcnRfaWQpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG5AQCAtNzcsMTEgJiM0MzsxMDQsMjggQEAgc3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqXG4gcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXG4mIzQzO3BoeV9saW5rX3RvcG9fZ2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBvcnRfaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfX1BIWV9MSU5LX1RPUE9MT0dZX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbmluZGV4IDBlZjBmNWNlNDcwOTIuLjhmNDVjMDMxY2JjMTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuQEAgLTM2LDkgJiM0MzszNiwxMiBAQCBzdHJ1Y3QgcGh5X3BvcnRfb3BzIHtcbiAvKipcbiAgKiBzdHJ1Y3QgcGh5X3BvcnQgLSBBIHJlcHJlc2VudGF0aW9uIG9mIGEgbmV0d29yayBkZXZpY2UgcGh5c2ljYWwgaW50ZXJmYWNlXG4gICpcbiYjNDM7ICogQGlkOiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBvcnQgd2l0aGluIHRoZSB0b3BvbG9neVxuICAqIEBoZWFkOiBVc2VkIGJ5IHRoZSBwb3J0JiMzOTtzIHBhcmVudCB0byBsaXN0IHBvcnRzXG4gICogQHBhcmVudF90eXBlOiBUaGUgdHlwZSBvZiBkZXZpY2UgdGhpcyBwb3J0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0b1xuICAqIEBwaHk6IElmIHRoZSBwYXJlbnQgaXMgUEhZX1BPUlRfUEhZREVWLCB0aGUgUEhZIGNvbnRyb2xsaW5nIHRoYXQgcG9ydFxuJiM0MzsgKiBAdXBzdHJlYW1fcG9ydDogSW5kaWNhdGVzIHRoZSBNSUkgcG9ydCB0aGF0IGZlZWRzIHRoaXMgcG9ydCwgaWYgYW55LFxuJiM0MzsgKlx0XHQgICBlLmcuIHRoZSBTRlAgY2FnZSBwb3J0IGZvciBhIFNGUCBtb2R1bGUgcG9ydC5cbiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlclxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxuICAqIEBtZWRpdW1zOiBCaXRtYXNrIG9mIHRoZSBwaHlzaWNhbCBtZWRpdW1zIHRoaXMgcG9ydCBwcm92aWRlcyBhY2Nlc3MgdG9cbkBAIC01MiwxMSAmIzQzOzU1LDEzIEBAIHN0cnVjdCBwaHlfcG9ydF9vcHMge1xuICAqIEBpc19zZnA6IEluZGljYXRlcyBpZiB0aGlzIHBvcnQgZHJpdmVzIGFuIFNGUCBjYWdlLlxuICAqL1xuIHN0cnVjdCBwaHlfcG9ydCB7XG4mIzQzO1x0dTMyIGlkO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBoZWFkO1xuIFx0ZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XG4gXHR9O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcbiBcbiBcdGNvbnN0IHN0cnVjdCBwaHlfcG9ydF9vcHMgKm9wcztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmMy4uZjlkODc5NGVhYmMxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbkBAIC03OCw2ICYjNDM7NzgsMTEgQEAgZW51bSBldGh0b29sX3BzZV9ldmVudCB7XG4gXHRFVEhUT09MX1BTRV9FVkVOVF9TV19QV19DT05UUk9MX0VSUk9SID0gNjQsXG4gfTtcbiBcbiYjNDM7ZW51bSBldGh0b29sX3BvcnRfdHlwZSB7XG4mIzQzO1x0RVRIVE9PTF9QT1JUX1RZUEVfTURJLFxuJiM0MztcdEVUSFRPT0xfUE9SVF9UWVBFX1NGUCxcbiYjNDM7fTtcbiYjNDM7XG4gZW51bSB7XG4gXHRFVEhUT09MX0FfSEVBREVSX1VOU1BFQyxcbiBcdEVUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYLFxuQEAgLTg0MCw2ICYjNDM7ODQ1LDE4IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9BX01TRV9NQVggPSAoX19FVEhUT09MX0FfTVNFX0NOVCAtIDEpXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfSEVBREVSID0gMSxcbiYjNDM7XHRFVEhUT09MX0FfUE9SVF9JRCxcbiYjNDM7XHRFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfVFlQRSxcbiYjNDM7XHRFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JULFxuJiM0MztcbiYjNDM7XHRfX0VUSFRPT0xfQV9QT1JUX0NOVCxcbiYjNDM7XHRFVEhUT09MX0FfUE9SVF9NQVggPSAoX19FVEhUT09MX0FfUE9SVF9DTlQgLSAxKVxuJiM0Mzt9O1xuJiM0MztcbiBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1VTRVJfTk9ORSA9IDAsXG4gXHRFVEhUT09MX01TR19TVFJTRVRfR0VUID0gMSxcbkBAIC04OTMsNiAmIzQzOzkxMCw3IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9BQ1QsXG4gXHRFVEhUT09MX01TR19SU1NfREVMRVRFX0FDVCxcbiBcdEVUSFRPT0xfTVNHX01TRV9HRVQsXG4mIzQzO1x0RVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4gXG4gXHRfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULFxuIFx0RVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpXG5AQCAtOTU0LDYgJiM0Mzs5NzIsNyBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfTlRGLFxuIFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9OVEYsXG4gXHRFVEhUT09MX01TR19NU0VfR0VUX1JFUExZLFxuJiM0MztcdEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLFxuIFxuIFx0X19FVEhUT09MX01TR19LRVJORUxfQ05ULFxuIFx0RVRIVE9PTF9NU0dfS0VSTkVMX01BWCA9IChfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQgLSAxKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IGMxYzFiZTFhNjk2MmYuLmIzNmNjNWM0NzgxNmEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xMTMxNSw2ICYjNDM7MTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXHUwMDI2XHUwMDI2IHRvcG8pIHtcbiBcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMpO1xuJiM0MztcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzKTtcbiBcdFx0a2ZyZWUodG9wbyk7XG4gXHRcdGRldi1cdTAwM2VsaW5rX3RvcG8gPSBOVUxMO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL01ha2VmaWxlIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbmluZGV4IDYyOWMxMDkxNjY3MGUuLjliNWIwOTY3MDAwODEgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbkBAIC05LDQgJiM0Mzs5LDQgQEAgZXRodG9vbF9ubC15XHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxuIFx0XHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxuIFx0XHQgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXFxcbiBcdFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxuLVx0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vXG4mIzQzO1x0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vIHBvcnQub1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuYyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xuaW5kZXggMWFmMzk1YjU0MzMwZS4uYzA3NmMwN2QwYTA4MCAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5AQCAtMjYsNiAmIzQzOzI2LDggQEAgc3RhdGljIHUzMiBldGhubF9iY2FzdF9zZXE7XG4gXHRcdFx0ICAgICBFVEhUT09MX0ZMQUdfT01JVF9SRVBMWSlcbiAjZGVmaW5lIEVUSFRPT0xfRkxBR1NfU1RBVFMgKEVUSFRPT0xfRkxBR1NfQkFTSUMgfCBFVEhUT09MX0ZMQUdfU1RBVFMpXG4gXG4mIzQzO2NoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dIF9fcm9fYWZ0ZXJfaW5pdDtcbiYjNDM7XG4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtdID0ge1xuIFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX05BTUVdXHQ9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyxcbkBAIC00MzEsNiAmIzQzOzQzMyw3IEBAIGV0aG5sX2RlZmF1bHRfcmVxdWVzdHNbX19FVEhUT09MX01TR19VU0VSX0NOVF0gPSB7XG4gXHRbRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUXVx0PSBcdTAwMjZldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcyxcbiBcdFtFVEhUT09MX01TR19QSFlfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX3BoeV9yZXF1ZXN0X29wcyxcbiBcdFtFVEhUT09MX01TR19NU0VfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX21zZV9yZXF1ZXN0X29wcyxcbiYjNDM7XHRbRVRIVE9PTF9NU0dfUE9SVF9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfcG9ydF9yZXF1ZXN0X29wcyxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5AQCAtMTU3Miw2ICYjNDM7MTU3NSwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIGV0aHRvb2xfZ2VubF9vcHNbXSA9IHtcbiBcdFx0LnBvbGljeSA9IGV0aG5sX21zZV9nZXRfcG9saWN5LFxuIFx0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfbXNlX2dldF9wb2xpY3kpIC0gMSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmNtZFx0PSBFVEhUT09MX01TR19QT1JUX0dFVCxcbiYjNDM7XHRcdC5kb2l0XHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcbiYjNDM7XHRcdC5zdGFydFx0PSBldGhubF9wb3J0X2R1bXBfc3RhcnQsXG4mIzQzO1x0XHQuZHVtcGl0XHQ9IGV0aG5sX3BvcnRfZHVtcGl0LFxuJiM0MztcdFx0LmRvbmVcdD0gZXRobmxfcG9ydF9kdW1wX2RvbmUsXG4mIzQzO1x0XHQucG9saWN5ID0gZXRobmxfcG9ydF9nZXRfcG9saWN5LFxuJiM0MztcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX3BvcnRfZ2V0X3BvbGljeSkgLSAxLFxuJiM0MztcdH0sXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGV0aHRvb2xfbmxfbWNncnBzW10gPSB7XG5AQCAtMTU5NCwxMCAmIzQzOzE2MDYsMjMgQEAgc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBldGh0b29sX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcbiAvKiBtb2R1bGUgc2V0dXAgKi9cbiBcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGV0aG5sX3BoeV9uYW1lc19wb3B1bGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUEhZX0lOVEVSRkFDRV9NT0RFX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG5hbWUgPSBwaHlfbW9kZXMoaSk7XG4mIzQzO1x0XHRzdHJzY3B5KHBoeV9pbnRlcmZhY2VfbmFtZXNbaV0sIG5hbWUsIEVUSF9HU1RSSU5HX0xFTik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19pbml0IGV0aG5sX2luaXQodm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGV0aG5sX3BoeV9uYW1lc19wb3B1bGF0ZSgpO1xuJiM0MztcbiBcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmV0aHRvb2xfZ2VubF9mYW1pbHkpO1xuIFx0aWYgKFdBUk4ocmV0IFx1MDAzYyAwLCBcJiMzNDtldGh0b29sOiBnZW5ldGxpbmsgZmFtaWx5IHJlZ2lzdHJhdGlvbiBmYWlsZWRcJiMzNDspKVxuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuaW5kZXggM2U5NjlhMDcwZjlmZS4uZGM3MjExZjY3YzRkNSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5AQCAtNSwxMSAmIzQzOzUsMTQgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuIFxuIHN0cnVjdCBldGhubF9yZXFfaW5mbztcbiBcbiYjNDM7ZXh0ZXJuIGNoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dO1xuJiM0MztcbiBpbnQgZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmVzdCwgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG5AQCAtNDc0LDYgJiM0Mzs0NzcsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcG9ydF9yZXF1ZXN0X29wcztcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5X3N0YXRzW0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07XG5AQCAtNTMwLDYgJiM0Mzs1MzQsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9IRUFERVIgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfc2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfTUFYICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9tc2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfTVNFX0hFQURFUiAmIzQzOyAxXTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BvcnRfZ2V0X3BvbGljeVtFVEhUT09MX0FfUE9SVF9JRCAmIzQzOyAxXTtcbiBcbiBpbnQgZXRobmxfc2V0X2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbkBAIC01NDUsNiAmIzQzOzU1MCw5IEBAIGludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4gaW50IGV0aG5sX3RzaW5mb19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4gaW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBpbnQgZXRobmxfcnNzX2RlbGV0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4mIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBcbiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19zdGRfbmFtZXNbX19FVEhUT09MX1NUQVRTX0NOVF1bRVRIX0dTVFJJTkdfTEVOXTtcbiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19ldGhfcGh5X25hbWVzW19fRVRIVE9PTF9BX1NUQVRTX0VUSF9QSFlfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BvcnQuYyBiL25ldC9ldGh0b29sL3BvcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmUxYmNhZGJmZTQwYzBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL3BvcnQuY1xuQEAgLTAsMCAmIzQzOzEsMzc1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IDIwMjYgQm9vdGxpblxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfcG9ydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtiaXRzZXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtuZXRsaW5rLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwb3J0X3JlcV9pbmZvIHtcbiYjNDM7XHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbiYjNDM7XHR1MzIgcG9ydF9pZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEge1xuJiM0MztcdHN0cnVjdCBldGhubF9yZXBseV9kYXRhXHRiYXNlO1xuJiM0MztcdF9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKHN1cHBvcnRlZCk7XG4mIzQzO1x0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soaW50ZXJmYWNlcyk7XG4mIzQzO1x0dTMyIHBvcnRfaWQ7XG4mIzQzO1x0Ym9vbCBtaWk7XG4mIzQzO1x0Ym9vbCBzZnA7XG4mIzQzO1x0dTMyIHVwc3RyZWFtX3BvcnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBPUlRfUkVRSU5GTyhfX3JlcV9iYXNlKSBcXFxuJiM0MztcdGNvbnRhaW5lcl9vZihfX3JlcV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXFfaW5mbywgYmFzZSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUE9SVF9SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcbiYjNDM7XHRjb250YWluZXJfb2YoX19yZXBseV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhLCBiYXNlKVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcG9ydF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QT1JUX0lEICYjNDM7IDFdID0ge1xuJiM0MztcdFtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXG4mIzQzO1x0W0VUSFRPT0xfQV9QT1JUX0lEXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X3BhcnNlX3JlcXVlc3Qoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRiLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4mIzQzO1xuJiM0MztcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEVUSFRPT0xfQV9QT1JUX0lEKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZXBvcnRfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUE9SVF9JRF0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhLFxuJiM0MztcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuJiM0MztcbiYjNDM7XHQvKiBSVE5MIG11c3QgYmUgaGVsZCB3aGlsZSBob2xkaW5nIGEgcmVmIHRvIHRoZSBwaHlfcG9ydC4gSGVyZSwgY2FsbGVyXG4mIzQzO1x0ICogaG9sZHMgUlROTC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwb3J0ID0gcGh5X2xpbmtfdG9wb19nZXRfcG9ydChyZXFfaW5mby1cdTAwM2VkZXYsIHJlcXVlc3QtXHUwMDNlcG9ydF9pZCk7XG4mIzQzO1x0aWYgKCFwb3J0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGxpbmttb2RlX2NvcHkocmVwbHktXHUwMDNlc3VwcG9ydGVkLCBwb3J0LVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV9jb3B5KHJlcGx5LVx1MDAzZWludGVyZmFjZXMsIHBvcnQtXHUwMDNlaW50ZXJmYWNlcyk7XG4mIzQzO1x0cmVwbHktXHUwMDNlcG9ydF9pZCA9IHBvcnQtXHUwMDNlaWQ7XG4mIzQzO1x0cmVwbHktXHUwMDNlbWlpID0gcG9ydC1cdTAwM2Vpc19taWk7XG4mIzQzO1x0cmVwbHktXHUwMDNlc2ZwID0gcG9ydC1cdTAwM2Vpc19zZnA7XG4mIzQzO1x0cmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA/IHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydC1cdTAwM2VpZCA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBvcnRfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSlcbiYjNDM7e1xuJiM0MztcdGJvb2wgY29tcGFjdCA9IHJlcV9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBFVEhUT09MX0ZMQUdfQ09NUEFDVF9CSVRTRVRTO1xuJiM0MztcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpO1xuJiM0MztcdHNpemVfdCBzaXplID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBFVEhUT09MX0FfUE9SVF9JRCAqL1xuJiM0MztcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXBseS1cdTAwM2VtaWkpIHtcbiYjNDM7XHRcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyAqL1xuJiM0MztcdFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXHUwMDNlc3VwcG9ydGVkLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0X19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLFxuJiM0MztcdFx0XHRcdFx0bGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyAqL1xuJiM0MztcdFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsXG4mIzQzO1x0XHRcdFx0XHRwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqL1xuJiM0MztcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbiYjNDM7XG4mIzQzO1x0LyogRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCAqL1xuJiM0MztcdGlmIChyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KVxuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNvbXBhY3QgPSByZXFfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRVRIVE9PTF9GTEFHX0NPTVBBQ1RfQklUU0VUUztcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcbiYjNDM7XHRpbnQgcmV0LCBwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9NREk7XG4mIzQzO1xuJiM0MztcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS1cdTAwM2Vwb3J0X2lkKSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdGlmICghcmVwbHktXHUwMDNlbWlpKSB7XG4mIzQzO1x0XHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxuJiM0MztcdFx0XHRcdCAgICAgICByZXBseS1cdTAwM2VzdXBwb3J0ZWQsIE5VTEwsXG4mIzQzO1x0XHRcdFx0ICAgICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IGV0aG5sX3B1dF9iaXRzZXQoc2tiLCBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyxcbiYjNDM7XHRcdFx0XHQgICAgICAgcmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbiYjNDM7XHRcdFx0XHQgICAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX01BWCxcbiYjNDM7XHRcdFx0XHQgICAgICAgcGh5X2ludGVyZmFjZV9uYW1lcywgY29tcGFjdCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJlcGx5LVx1MDAzZW1paSB8fCByZXBseS1cdTAwM2VzZnApXG4mIzQzO1x0XHRwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9TRlA7XG4mIzQzO1xuJiM0MztcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1RZUEUsIHBvcnRfdHlwZSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JULFxuJiM0MztcdFx0XHRyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcG9ydF9kdW1wX2N0eCB7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVxX2luZm9cdCpyZXFfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhXHQqcmVwbHlfZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGlmaW5kZXg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRwb3NfaWZpbmRleDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdHBvc19wb3J0aWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBvcnRfZHVtcF9jdHggKlxuJiM0Mztwb3J0X2R1bXBfY3R4X2dldChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBwb3J0X2R1bXBfY3R4ICopY2ItXHUwMDNlY3R4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XG4mIzQzO1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbiYjNDM7XHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWluZm8uYXR0cnM7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxX2luZm87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKHNpemVvZigqY3R4KSBcdTAwM2Ugc2l6ZW9mKGNiLVx1MDAzZWN0eCkpO1xuJiM0MztcbiYjNDM7XHRyZXFfaW5mbyA9IGt6YWxsb2Nfb2JqKCpyZXFfaW5mbyk7XG4mIzQzO1x0aWYgKCFyZXFfaW5mbylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xuJiM0MztcdGlmICghcmVwbHlfZGF0YSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9yZXFfaW5mbztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KFx1MDAyNnJlcV9pbmZvLVx1MDAzZWJhc2UsIHRiW0VUSFRPT0xfQV9QT1JUX0hFQURFUl0sXG4mIzQzO1x0XHRcdFx0XHQgZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuJiM0MztcdFx0XHRcdFx0IGluZm8tXHUwMDNlaW5mby5leHRhY2ssIGZhbHNlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBmcmVlX3JlcF9kYXRhO1xuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlaWZpbmRleCA9IDA7XG4mIzQzO1x0Y3R4LVx1MDAzZXBvc19pZmluZGV4ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogRm9yIGZpbHRlcmVkIERVTVAgcmVxdWVzdHMsIGxldCYjMzk7cyBqdXN0IHN0b3JlIHRoZSBpZmluZGV4LiBXZSYjMzk7bGwgY2hlY2tcbiYjNDM7XHQgKiBhZ2FpbiBpZiB0aGUgbmV0ZGV2IGlzIHN0aWxsIHRoZXJlIHdoZW4gbG9vcGluZyBvdmVyIHRoZSBuZXRkZXYgbGlzdFxuJiM0MztcdCAqIGluIHRoZSBEVU1QIGxvb3AuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2KSB7XG4mIzQzO1x0XHRjdHgtXHUwMDNlaWZpbmRleCA9IHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHRuZXRkZXZfcHV0KHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LCBcdTAwMjZyZXFfaW5mby1cdTAwM2ViYXNlLmRldl90cmFja2VyKTtcbiYjNDM7XHRcdHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VyZXFfaW5mbyA9IHJlcV9pbmZvO1xuJiM0MztcdGN0eC1cdTAwM2VyZXBseV9kYXRhID0gcmVwbHlfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmcmVlX3JlcF9kYXRhOlxuJiM0MztcdGtmcmVlKHJlcGx5X2RhdGEpO1xuJiM0MztmcmVlX3JlcV9pbmZvOlxuJiM0MztcdGtmcmVlKHJlcV9pbmZvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuJiM0MztcdHZvaWQgKmVoZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTtcbiYjNDM7XHRpZiAoIWVoZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoY3R4LVx1MDAzZXJlcGx5X2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhKSk7XG4mIzQzO1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBkZXY7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwb3J0X3ByZXBhcmVfZGF0YShcdTAwMjZjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZSwgXHUwMDI2Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZSxcbiYjNDM7XHRcdFx0XHRnZW5sX2luZm9fZHVtcChjYikpO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc2tiLCBkZXYsIEVUSFRPT0xfQV9QT1JUX0hFQURFUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwb3J0X2ZpbGxfcmVwbHkoc2tiLCBcdTAwMjZjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZSwgXHUwMDI2Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZSk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGdlbmxtc2dfZW5kKHNrYiwgZWhkcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcG9ydF9kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXYgPSBjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZS5kZXY7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZWxpbmtfdG9wbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR4YV9mb3JfZWFjaF9zdGFydChcdTAwMjZkZXYtXHUwMDNlbGlua190b3BvLVx1MDAzZXBvcnRzLCBjdHgtXHUwMDNlcG9zX3BvcnRpZCwgcG9ydCxcbiYjNDM7XHRcdFx0ICBjdHgtXHUwMDNlcG9zX3BvcnRpZCkge1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZXBvcnRfaWQgPSBjdHgtXHUwMDNlcG9zX3BvcnRpZDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwb3J0X2R1bXBfb25lKHNrYiwgZGV2LCBjYik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZXBvc19wb3J0aWQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4mIzQzO1x0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlcG9zX2lmaW5kZXgpIHtcbiYjNDM7XHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gZGV2O1xuJiM0MztcdFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xuJiM0MztcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChjdHgtXHUwMDNlaWZpbmRleCkge1xuJiM0MztcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcbiYjNDM7XHRcdGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuJiM0MztcdFx0XHRcdFx0ICBjdHgtXHUwMDNlaWZpbmRleCwgXHUwMDI2ZGV2X3RyYWNrZXIsXG4mIzQzO1x0XHRcdFx0XHQgIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFkZXYpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IGRldjtcbiYjNDM7XHRcdHJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpO1xuJiM0MztcbiYjNDM7XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IHBvcnRfZHVtcF9hbGxfZGV2KHNrYiwgY2IpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4mIzQzO1xuJiM0MztcdGtmcmVlKGN0eC1cdTAwM2VyZXFfaW5mbyk7XG4mIzQzO1x0a2ZyZWUoY3R4LVx1MDAzZXJlcGx5X2RhdGEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHMgPSB7XG4mIzQzO1x0LnJlcXVlc3RfY21kXHRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4mIzQzO1x0LnJlcGx5X2NtZFx0XHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLFxuJiM0MztcdC5oZHJfYXR0clx0XHQ9IEVUSFRPT0xfQV9QT1JUX0hFQURFUixcbiYjNDM7XHQucmVxX2luZm9fc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXFfaW5mbyksXG4mIzQzO1x0LnJlcGx5X2RhdGFfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHBvcnRfcmVwbHlfZGF0YSksXG4mIzQzO1xuJiM0MztcdC5wYXJzZV9yZXF1ZXN0XHRcdD0gcG9ydF9wYXJzZV9yZXF1ZXN0LFxuJiM0MztcdC5wcmVwYXJlX2RhdGFcdFx0PSBwb3J0X3ByZXBhcmVfZGF0YSxcbiYjNDM7XHQucmVwbHlfc2l6ZVx0XHQ9IHBvcnRfcmVwbHlfc2l6ZSxcbiYjNDM7XHQuZmlsbF9yZXBseVx0XHQ9IHBvcnRfZmlsbF9yZXBseSxcbiYjNDM7fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVRIVE9PTF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtQSFlMSU5LJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtJMkMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldGhubF9wb3J0X2R1bXBfc3RhcnQmIzM0OywKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1waXQmIzM0OywKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1wX2RvbmUmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb19hZGRfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfbGlua190b3BvX2RlbF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMmIzM0OywKICAgICYjMzQ7cGh5X3NldF91cHN0cmVhbV9wb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQgYFBPUlRfR0VUYCB0byByZXRyaWV2ZSBwaHlzaWNhbCBwb3J0IGluZm9ybWF0aW9uLCBhbmQgYWRkcyBTRlAgcG9ydCBzdXBwb3J0IHRvIHRoZSBQSFkgZnJhbWV3b3JrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBuZXRsaW5rIEFQSXMgYW5kIG1vZGlmaWVzIGNvcmUgUEhZL3BoeWxpbmsgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBldGh0b29sIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGFiZDUzOThjNTJjYTk4ODYwNjFlYjMwYTgxMjAyMDAyYWU2MmI0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTA6Mjk6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAppbmRleCA1ZGQ0ZDFiNWQ5NGJiLi42N2FjMzQwMDQ2MmJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwKQEAgLTIxMCw2ICYjNDM7MjEwLDExIEBAIGRlZmluaXRpb25zOgogICAgICAgLQogICAgICAgICBuYW1lOiBkaXNjYXJkCiAgICAgICAgIHZhbHVlOiAzMQomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBwb3J0LXR5cGUKJiM0MzsgICAgZG9jOiB0eXBlIG9mIHBoeXNpY2FsIGNvbm5lY3RvcgomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIGVudHJpZXM6IFttZGksIHNmcF0KIAogYXR0cmlidXRlLXNldHM6CiAgIC0KQEAgLTE5MDUsNiAmIzQzOzE5MTAsMzIgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIG5hbWU6IGxpbmsKICAgICAgICAgdHlwZTogbmVzdAogICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90CiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IHBvcnQKJiM0MzsgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnQKJiM0MzsgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBoZWFkZXIKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBpZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogc3VwcG9ydGVkLW1vZGVzCiYjNDM7ICAgICAgICB0eXBlOiBuZXN0CiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogc3VwcG9ydGVkLWludGVyZmFjZXMKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXQKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiB0eXBlCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGVudW06IHBvcnQtdHlwZQomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHVwc3RyZWFtLXBvcnQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgogCiBvcGVyYXRpb25zOgogICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbApAQCAtMjg1OSw2ICYjNDM7Mjg5MCwyOSBAQCBvcGVyYXRpb25zOgogICAgICAgICAgICAgLSB3b3JzdC1jaGFubmVsCiAgICAgICAgICAgICAtIGxpbmsKICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBwb3J0LWdldAomIzQzOyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZQomIzQzOwomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBvcnQKJiM0MzsKJiM0MzsgICAgICBkbzogJmFtcDtwb3J0LWdldC1vcAomIzQzOyAgICAgICAgcmVxdWVzdDoKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIGhlYWRlcgomIzQzOyAgICAgICAgICAgIC0gaWQKJiM0MzsgICAgICAgIHJlcGx5OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICAgICAgLSBpZAomIzQzOyAgICAgICAgICAgIC0gc3VwcG9ydGVkLW1vZGVzCiYjNDM7ICAgICAgICAgICAgLSBzdXBwb3J0ZWQtaW50ZXJmYWNlcwomIzQzOyAgICAgICAgICAgIC0gdHlwZQomIzQzOyAgICAgICAgICAgIC0gdXBzdHJlYW0tcG9ydAomIzQzOyAgICAgIGR1bXA6CiYjNDM7ICAgICAgICByZXF1ZXN0OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiAKIG1jYXN0LWdyb3VwczoKICAgbGlzdDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QKaW5kZXggZTkyYWJmNDVmYWY1MC4uYjQzMjZjODliMDc1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QKQEAgLTI1MzcsNiAmIzQzOzI1MzcsMzkgQEAgV2l0aGluIGVhY2ggY2hhbm5lbCBuZXN0LCBvbmx5IHRoZSBtZXRyaWNzIHN1cHBvcnRlZCBieSB0aGUgUEhZIHdpbGwgYmUgcHJlc2VudC4KIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW4KIGBgaW5jbHVkZS9saW51eC9waHkuaGBgLgogCiYjNDM7UE9SVF9HRVQKJiM0Mzs9PT09PT09PQomIzQzOwomIzQzO1JldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLAomIzQzO3JlZmVycmVkIHRvIGFzICYjMzQ7cG9ydHMmIzM0Oy4gVXNlciBuZWVkcyB0byBzcGVjaWZ5IGEgUE9SVF9JRCBmb3IgdGhlIERPIG9wZXJhdGlvbiwKJiM0MztpbiB3aGljaCBjYXNlIHRoZSBETyByZXF1ZXN0IHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBzcGVjaWZpYyBwb3J0LgomIzQzOwomIzQzO0FzIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIHBvcnQsIHRoZSBEVU1QIG9wZXJhdGlvbiBjYW4gYmUgdXNlZCB0byBsaXN0IHRoZQomIzQzO3BvcnRzIHByZXNlbnQgb24gYSBnaXZlbiBpbnRlcmZhY2UsIGJ5IHBhc3NpbmcgYW4gaW50ZXJmYWNlIGluZGV4IG9yIG5hbWUgaW4KJiM0Mzt0aGUgZHVtcCByZXF1ZXN0LgomIzQzOwomIzQzO1JlcXVlc3QgY29udGVudHM6CiYjNDM7CiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9IRUFERVJgYCAgICAgICAgICAgICBuZXN0ZWQgIHJlcXVlc3QgaGVhZGVyCiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX0lEYGAgICAgICAgICAgICAgICAgIHUzMiAgICAgcG9ydCBpZAomIzQzOyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztLZXJuZWwgcmVzcG9uc2UgY29udGVudHM6CiYjNDM7CiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9IRUFERVJgYCAgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXIKJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgICB1MzIgICAgIHRoZSBwb3J0JiMzOTtzIHVuaXF1ZSBpZGVudGlmaWVyLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyIG5ldGRldmljZS4KJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTYGAgICAgICBiaXRzZXQgIGJpdHNldCBvZiBzdXBwb3J0ZWQgbGlua21vZGVzCiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTYGAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIE1JSQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlcwomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9UWVBFYGAgICAgICAgICAgICAgICAgIHUzMiAgICAgdGhlIHBvcnQgdHlwZQomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUYGAgICAgICAgIHUzMiAgICAgSWYgYW55LCB0aGUgaW5kZXggb2YgdGhlIE1JSQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCB0aGF0IGZlZWRzIGludG8gdGhpcwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC4KJiM0MzsgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiBSZXF1ZXN0IHRyYW5zbGF0aW9uCiA9PT09PT09PT09PT09PT09PT09CiAKQEAgLTI2NDcsNCAmIzQzOzI2ODAsNSBAQCBhcmUgbmV0bGluayBvbmx5LgogICBuL2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1BIWV9HRVRgYAogICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgCiAgIGBgU0lPQ1NIV1RTVEFNUGBgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUYGAKJiM0MzsgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgYAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdAppbmRleCA2ZTI4ZDkwOTRiY2UzLi4yYTliMWVjOTNiNzBmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3QKQEAgLTk5LDEzICYjNDM7OTksMjkgQEAgd2lsbCBldmVudHVhbGx5IGJlIGFibGUgdG8gcmVwb3J0IGl0cyBvd24ga3NldHRpbmdzOjoKICAgICAgICAgICAgIChfX19fXyktLS0tLXwgUG9ydCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAmIzQzOy0tLS0tLSYjNDM7CiAKJiM0MztTRlAgcG9ydHMKJiM0Mzs9PT09PT09PT0KJiM0MzsKJiM0MztTRlAgaW50ZXJmYWNlcyBpbnZvbHZlIDIgZGlzdGluY3QgY29tcG9uZW50cywgZWFjaCByZXByZXNlbnRlZCBieQomIzQzO2EgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0ICZsdDtwaHlfcG9ydCZndDtgIGluc3RhbmNlIDoKJiM0MzsKJiM0MzsgLSBUaGUgU0ZQIGNhZ2UgaXRzZWxmIGlzIGEgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0ICZsdDtwaHlfcG9ydCZndDtgLiBJdCYjMzk7cyBzcGVjaWFsCiYjNDM7ICAgaW4gdGhhdCBpdCYjMzk7cyBub3QgYW4gTURJIGludGVyZmFjZSwgYnV0IHJhdGhlciBhIGhvdC1wbHVnZ2FibGUgTUlJLgomIzQzOyAgIFRoZSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgJmx0O3BoeV9wb3J0Jmd0O2AgYXNzb2NpYXRlZCB0byBpdCBsaXN0cyB0aGUgZGlmZmVyZW50CiYjNDM7ICAgTUlJIGludGVyZmFjZXMgd2UgY2FuIHVzZSBvbiB0aGUgY2FnZS4KJiM0MzsKJiM0MzsgLSBUaGUgU0ZQIG1vZHVsZSwgd2hlbiBpbnNlcnRlZCwgd2lsbCBhbHNvIGJlIGFzc29jaWF0ZWQgdG8gYQomIzQzOyAgIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCAmbHQ7cGh5X3BvcnQmZ3Q7YCwgdGhhdCByZXByZXNlbnRzIHRoZSB2YXJpb3VzIGxpbmttb2RlcwomIzQzOyAgIHRoYXQgaXQgZ2l2ZXMgYWNjZXNzIHRvLiBUaGUgbW9kdWxlJiMzOTtzIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCAmbHQ7cGh5X3BvcnQmZ3Q7YAomIzQzOyAgIGRvZXNuJiMzOTt0IHN1cGVyc2VkZSB0aGUgY2FnZSYjMzk7cyBwb3J0LCBpdCByZWZlcmVuY2VzIGl0IHRocm91Z2gKJiM0MzsgICB0aGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0ICZsdDtwaHlfcG9ydCZndDtgIDpjOm1lbWJlcjpgdXBzdHJlYW1fcG9ydGAgZmllbGQuCiYjNDM7CiBOZXh0IHN0ZXBzCiA9PT09PT09PT09CiAKLUFzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCBvbmx5IHBvcnRzIGNvbnRyb2xsZWQgYnkgUEhZIGRldmljZXMgYXJlCi1zdXBwb3J0ZWQuIFRoZSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gYWRkIHRoZSBOZXRsaW5rIEFQSSB0byBleHBvc2UgdGhlc2UKLXRvIHVzZXJzcGFjZSBhbmQgYWRkIHN1cHBvcnQgZm9yIHJhdyBwb3J0cyAoY29udHJvbGxlZCBieSBzb21lIGZpcm13YXJlLCBhbmQgZGlyZWN0bHkKLW1hbmFnZWQgYnkgdGhlIE5JQyBkcml2ZXIpLgomIzQzO0FzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCB0aGUgcG9ydCYjMzk7cyBwcmVzZW5jZSBhbmQgaW5mb3JtYXRpb24gY2FuIG9ubHkKJiM0MztiZSBxdWVyaWVkLCBhbmQgaXQmIzM5O3Mgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgb2YgdGhlIHBvcnQmIzM5O3Mgc2V0dGluZ3Mgb3Igc2VsZWN0CiYjNDM7d2hpY2ggb25lIHNob3VsZCBiZSB1c2VkLgogCiBBbm90aGVyIHBhcmFsbGVsIHRhc2sgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIE1JSSBtdXhpbmcgZnJhbWV3b3JrIHRvIGFsbG93IHRoZQotY29udHJvbCBvZiBub24tUEhZIGRyaXZlciBtdWx0aS1wb3J0IHNldHVwcy4KJiM0Mztjb250cm9sIG9mIG5vbi1QSFkgZHJpdmVuIG11bHRpLXBvcnQgc2V0dXBzLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA5MzJlYTFkYjA0OGU1Li4zOTVmOGI1ZDE4NDk1IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTg4MTYsNiAmIzQzOzE4ODE2LDcgQEAgRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ldGhlcm5ldC1jb25uZWN0b3IueWFtbAogRjoJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdAogRjoJZHJpdmVycy9uZXQvcGh5L3BoeV9wb3J0LmMKIEY6CWluY2x1ZGUvbGludXgvcGh5X3BvcnQuaAomIzQzO0Y6CW5ldC9ldGh0b29sL3BvcnQuYwogSzoJc3RydWN0XHMmIzQzO3BoeV9wb3J0fHBoeV9wb3J0XwogCiBORVRXT1JLSU5HIFtHRU5FUkFMXQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaAppbmRleCA0MjEwODhlNmY2ZThmLi5lYzNkMzlhMGFlMDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaApAQCAtNjYsNSAmIzQzOzY2LDcgQEAgdm9pZCBwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsCiAJCQkJICAgZW51bSBldGh0b29sX2xpbmtfbWVkaXVtIG1lZGl1bSwKIAkJCQkgICBpbnQgbGFuZXMpOwogdTMyIHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzKTsKJiM0Mzt2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sCiYjNDM7CQkJCSAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaW50ZXJmYWNlcyk7CiAKICNlbmRpZiAvKiBfX1BIWV9DQVBTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMKaW5kZXggOTQyZDQzMTkxNTYxZS4uNTU4ZTRkZjRkNjNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMKQEAgLTQ0NSwzICYjNDM7NDQ1LDI5IEBAIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcykKIAlyZXR1cm4gbWVkaXVtczsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXMpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMoKSAtIEZpbHRlciBsaW5rbW9kZXMgd2l0aCBhbiBpbnRlcmZhY2UgbGlzdAomIzQzOyAqIEB0bzogU3RvcmVzIHRoZSBmaWx0ZXJlZCBsaW5rbW9kZXMKJiM0MzsgKiBAZnJvbTogTGlua21vZGVzIHRvIGZpbHRlcgomIzQzOyAqIEBpbnRlcmZhY2VzOiBCaXRmaWVsZCBvZiBwaHlfaW50ZXJmYWNlX3QgdGhhdCB3ZSB1c2UgZm9yIGZpbHRlcmluZwomIzQzOyAqCiYjNDM7ICogRmlsdGVyIHRoZSBwcm92aWRlZCBsaW5rbW9kZXMsIG9ubHkgdG8ga2VlcCB0aGUgb25lcyB3ZSBjYW4gcG9zc2libHkgYWNoaWV2ZQomIzQzOyAqIHdoZW4gdXNpbmcgYW55IG9mIHRoZSBwcm92aWRlZCBNSUkgaW50ZXJmYWNlcy4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sCiYjNDM7CQkJCSAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSwKJiM0MzsJCQkJICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKQomIzQzO3sKJiM0MzsJX19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soaWZhY2VzX3N1cHBvcnRlZCkgPSB7fTsKJiM0MzsJdW5zaWduZWQgaW50IGlmYWNlc19jYXBzID0gMDsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfc2V0X2JpdChpbnRlcmZhY2UsIGludGVyZmFjZXMsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgpCiYjNDM7CQlpZmFjZXNfY2FwcyB8PSBwaHlfY2Fwc19mcm9tX2ludGVyZmFjZShpbnRlcmZhY2UpOwomIzQzOwomIzQzOwlwaHlfY2Fwc19saW5rbW9kZXMoaWZhY2VzX2NhcHMsIGlmYWNlc19zdXBwb3J0ZWQpOwomIzQzOwomIzQzOwlsaW5rbW9kZV9hbmQodG8sIGZyb20sIGlmYWNlc19zdXBwb3J0ZWQpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDk0YjJlODVlMDBhMzcuLjNkYTY4NzJlYmJiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMTQ5MCwxMSAmIzQzOzE0OTAsMjIgQEAgc3RhdGljIGludCBwaHlfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQogewogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LSZndDthdHRhY2hlZF9kZXY7CiYjNDM7CWludCByZXQ7CiAKLQlpZiAoZGV2KQotCQlyZXR1cm4gcGh5X2xpbmtfdG9wb19hZGRfcGh5KGRldiwgcGh5LCBQSFlfVVBTVFJFQU1fUEhZLCBwaHlkZXYpOwomIzQzOwlwaHlkZXYtJmd0O2hhc19zZnBfbW9kX3BoeSA9IHRydWU7CiYjNDM7CXBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIHBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydCk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJLyogSWYgd2UgYXJlbiYjMzk7dCBhdHRhY2hlZCB0byBhIG5ldGRldiwgd2UgY2FuJiMzOTt0IGFkZCB0aGUgU0ZQIFBIWSB0byBpdHMKJiM0MzsJICogdG9wb2xvZ3kuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRldikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlwaHlkZXYtJmd0O2hhc19zZnBfbW9kX3BoeSA9IGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTE1MTIsOCAmIzQzOzE1MjMsMTIgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSkKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2OwogCiYjNDM7CXBoeWRldi0mZ3Q7aGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7CiYjNDM7CiAJaWYgKGRldikKIAkJcGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTsKJiM0MzsKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgTlVMTCk7CiB9CiAKIC8qKgpAQCAtMTYxNyw2ICYjNDM7MTYzMiw3NyBAQCBzdGF0aWMgdm9pZCBwaHlfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSkKIAkJcG9ydC0mZ3Q7b3BzLSZndDtsaW5rX2Rvd24ocG9ydCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBoeV9hZGRfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzOwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwkvKiBDcmVhdGUgbW9kIHBvcnQgKi8KJiM0MzsJcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7CiYjNDM7CWlmICghcG9ydCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwb3J0LSZndDthY3RpdmUgPSB0cnVlOwomIzQzOwomIzQzOwljYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwaHlkZXYtJmd0O3NmcF9idXMpOwomIzQzOwomIzQzOwlwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHBvcnQtJmd0O3N1cHBvcnRlZCwgY2Fwcy0mZ3Q7bGlua19tb2RlcywKJiM0MzsJCQkJCXBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydC0mZ3Q7aW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2F0dGFjaGVkX2RldikgewomIzQzOwkJcmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiwgcG9ydCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcGh5X3BvcnRfZGVzdHJveShwb3J0KTsKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHdlIGRvbiYjMzk7dCB1c2UgcGh5X2FkZF9wb3J0KCkgaGVyZSBhcyB0aGUgbW9kdWxlIHBvcnQgaXNuJiMzOTt0IGEgZGlyZWN0CiYjNDM7CSAqIGludGVyZmFjZSBmcm9tIHRoZSBQSFksIGJ1dCByYXRoZXIgYW4gZXh0ZW5zaW9uIHRvIHRoZSBzZnAtYnVzLCB0aGF0CiYjNDM7CSAqIGlzIGFscmVhZHkgcmVwcmVzZW50ZWQgYnkgaXRzIG93biBwaHlfcG9ydAomIzQzOwkgKi8KJiM0MzsJcGh5ZGV2LSZndDttb2RfcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXBvcnQtJmd0O3Vwc3RyZWFtX3BvcnQgPSBwaHlkZXYtJmd0O3NmcF9jYWdlX3BvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwaHlfZGVsX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaWYgKCFwaHlkZXYtJmd0O21vZF9wb3J0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDthdHRhY2hlZF9kZXYpCiYjNDM7CQlwaHlfbGlua190b3BvX2RlbF9wb3J0KHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LCBwaHlkZXYtJmd0O21vZF9wb3J0KTsKJiM0MzsKJiM0MzsJcGh5X3BvcnRfZGVzdHJveShwaHlkZXYtJmd0O21vZF9wb3J0KTsKJiM0MzsJcGh5ZGV2LSZndDttb2RfcG9ydCA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGh5X3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07CiYjNDM7CiYjNDM7CS8qIElmIHRoZXJlJiMzOTtzIGEgZG93bnN0cmVhbSBTRlAgbW9kdWxlLCBhbmQgaXQgZG9lc24mIzM5O3QgY29udGFpbiBhIFBIWQomIzQzOwkgKiBkZXZpY2UsIGxldCYjMzk7cyBjcmVhdGUgYSBwaHlfcG9ydCB0byByZXByZXNlbnQgdGhhdCBtb2R1bGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXBoeWRldi0mZ3Q7aGFzX3NmcF9tb2RfcGh5KQomIzQzOwkJcmV0dXJuIHBoeV9hZGRfc2ZwX21vZF9wb3J0KHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwaHlfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtOwomIzQzOwomIzQzOwkvKiBDYWxsZWQgdXBvbiBtb2R1bGUgcmVtb3ZhbCBvciB1cHN0cmVhbSByZW1vdmFsICovCiYjNDM7CWlmICghcGh5ZGV2LSZndDtoYXNfc2ZwX21vZF9waHkpCiYjNDM7CQlwaHlfZGVsX3NmcF9tb2RfcG9ydChwaHlkZXYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHsKIAkuYXR0YWNoID0gcGh5X3NmcF9hdHRhY2gsCiAJLmRldGFjaCA9IHBoeV9zZnBfZGV0YWNoLApAQCAtMTYyNiw2ICYjNDM7MTcxMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHsKIAkubGlua19kb3duID0gcGh5X3NmcF9saW5rX2Rvd24sCiAJLmNvbm5lY3RfcGh5ID0gcGh5X3NmcF9jb25uZWN0X3BoeSwKIAkuZGlzY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Rpc2Nvbm5lY3RfcGh5LAomIzQzOwkubW9kdWxlX3N0YXJ0ID0gcGh5X3NmcF9tb2R1bGVfc3RhcnQsCiYjNDM7CS5tb2R1bGVfc3RvcCA9IHBoeV9zZnBfbW9kdWxlX3N0b3AsCiB9OwogCiBzdGF0aWMgaW50IHBoeV9hZGRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpCkBAIC0xNjczLDEzICYjNDM7MTc2MSwxMyBAQCBzdGF0aWMgdm9pZCBwaHlfZGVsX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KQogCXBoeWRldi0mZ3Q7bl9wb3J0cy0tOwogfQogCi1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewogCXN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7CiAJaW50IHJldDsKIAogCWlmICghcG9ydCkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCXBvcnQtJmd0O3BhcmVudF90eXBlID0gUEhZX1BPUlRfUEhZOwogCXBvcnQtJmd0O3BoeSA9IHBoeWRldjsKQEAgLTE2OTQsMTAgJiM0MzsxNzgyLDEyIEBAIHN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJICogd2hlbiBhdHRhY2hpbmcgdGhlIHBvcnQgdG8gdGhlIHBoeWRldi4KIAkgKi8KIAlyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTsKLQlpZiAocmV0KQomIzQzOwlpZiAocmV0KSB7CiAJCXBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gcG9ydDsKIH0KIAogLyoqCkBAIC0xNzA2LDI1ICYjNDM7MTc5Niw1MCBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogICovCiBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gTlVMTDsKIAlzdHJ1Y3Qgc2ZwX2J1cyAqYnVzOwotCWludCByZXQgPSAwOwomIzQzOwlpbnQgcmV0OwogCi0JaWYgKHBoeWRldi0mZ3Q7bWRpby5kZXYuZndub2RlKSB7Ci0JCWJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LSZndDttZGlvLmRldi5md25vZGUpOwotCQlpZiAoSVNfRVJSKGJ1cykpCi0JCQlyZXR1cm4gUFRSX0VSUihidXMpOwomIzQzOwlpZiAoIXBoeWRldi0mZ3Q7bWRpby5kZXYuZndub2RlKQomIzQzOwkJcmV0dXJuIDA7CiAKLQkJcGh5ZGV2LSZndDtzZnBfYnVzID0gYnVzOwomIzQzOwlidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi0mZ3Q7bWRpby5kZXYuZndub2RlKTsKJiM0MzsJaWYgKElTX0VSUihidXMpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoYnVzKTsKIAotCQlyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgJmFtcDtzZnBfcGh5ZGV2X29wcyk7Ci0JCXNmcF9idXNfcHV0KGJ1cyk7CiYjNDM7CXBoeWRldi0mZ3Q7c2ZwX2J1cyA9IGJ1czsKIAotCQlpZiAocmV0KQotCQkJcGh5ZGV2LSZndDtzZnBfYnVzID0gTlVMTDsKJiM0MzsJaWYgKGJ1cykgewomIzQzOwkJcG9ydCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpOwomIzQzOwkJaWYgKElTX0VSUihwb3J0KSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIocG9ydCk7CiYjNDM7CQkJcG9ydCA9IE5VTEw7CiYjNDM7CQkJZ290byBvdXRfc2ZwOwomIzQzOwkJfQogCX0KIAotCWlmICghcmV0ICZhbXA7JmFtcDsgcGh5ZGV2LSZndDtzZnBfYnVzKQotCQlyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTsKJiM0MzsJcGh5ZGV2LSZndDtzZnBfY2FnZV9wb3J0ID0gcG9ydDsKJiM0MzsKJiM0MzsJcmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsICZhbXA7c2ZwX3BoeWRldl9vcHMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG9ydDsKJiM0MzsKJiM0MzsJLyogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSBncmFicyBhIHJlZiB0byB0aGUgc2ZwIGJ1cyBvbiBzdWNjZXNzLCBpdCYjMzk7cwomIzQzOwkgKiBzYWZlIHRvIHJlbGVhc2UgaXQgbm93LgomIzQzOwkgKi8KJiM0MzsJc2ZwX2J1c19wdXQoYnVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MzsKJiM0MztvdXRfcG9ydDoKJiM0MzsJaWYgKHBvcnQpIHsKJiM0MzsJCXBoeV9kZWxfcG9ydChwaHlkZXYsIHBvcnQpOwomIzQzOwkJcGh5X3BvcnRfZGVzdHJveShwb3J0KTsKJiM0MzsJCXBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydCA9IE5VTEw7CiYjNDM7CX0KJiM0MztvdXRfc2ZwOgomIzQzOwlzZnBfYnVzX3B1dChidXMpOwomIzQzOwlwaHlkZXYtJmd0O3NmcF9idXMgPSBOVUxMOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MTUsNiAmIzQzOzE5MzAsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJCWVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeWRldiwgUEhZX1VQU1RSRUFNX01BQywgZGV2KTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDttb2RfcG9ydCkgewomIzQzOwkJCWVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoZGV2LCBwaHlkZXYtJmd0O21vZF9wb3J0KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIGVycm9yOwomIzQzOwkJfQogCX0KIAogCS8qIFNvbWUgRXRoZXJuZXQgZHJpdmVycyB0cnkgdG8gY29ubmVjdCB0byBhIFBIWSBkZXZpY2UgYmVmb3JlCkBAIC0xOTUxLDYgJiM0MzsyMDcyLDggQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LSZndDtwaHlkZXYgPSBOVUxMOwogCQlwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiA9IE5VTEw7CiAJCXBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDttb2RfcG9ydCkKJiM0MzsJCQlwaHlfbGlua190b3BvX2RlbF9wb3J0KGRldiwgcGh5ZGV2LSZndDttb2RfcG9ydCk7CiAJfQogCiAJcGh5ZGV2LSZndDtwaHlfbGlua19jaGFuZ2UgPSBOVUxMOwpAQCAtMzYwNCw2ICYjNDM7MzcyNywyNSBAQCBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfc2ZwX3BvcnQpOwogCiYjNDM7LyoqCiYjNDM7ICogcGh5X3NldF91cHN0cmVhbV9wb3J0KCkgLSBTZXRzIHRoZSBwaHlfcG9ydCBjb250cm9sbGluZyB0aGUgTUlJIHRoaXMgUEhZIGlzCiYjNDM7ICoJCQkgICAgIGF0dGFjaGVkIHRvLgomIzQzOyAqIEBwaHlkZXY6IHBvaW50ZXIgdG8gdGhlIFBIWSBkZXZpY2Ugd2Ugc2V0IHRoZSB1cHN0cmVhbSBvZi4KJiM0MzsgKiBAcG9ydDogVGhlIHBoeV9wb3J0IHVwc3RyZWFtIG9mIHRoaXMgUEhZLCBjYW4gYmUgTlVMTC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7dXBzdHJlYW1fcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXBoeV9mb3JfZWFjaF9wb3J0KHBoeWRldiwgbG9jYWxfcG9ydCkKJiM0MzsJCWxvY2FsX3BvcnQtJmd0O3Vwc3RyZWFtX3BvcnQgPSBwb3J0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfc2V0X3Vwc3RyZWFtX3BvcnQpOwomIzQzOwogLyoqCiAgKiBmd25vZGVfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZndub2RlLCBmaW5kIHRoZSBtZGlvX2RldmljZQogICogQGZ3bm9kZTogcG9pbnRlciB0byB0aGUgbWRpb19kZXZpY2UmIzM5O3MgZndub2RlCkBAIC0zODQyLDYgJiM0MzszOTg0LDcgQEAgc3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIAogCXNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi0mZ3Q7c2ZwX2J1cyk7CiAJcGh5ZGV2LSZndDtzZnBfYnVzID0gTlVMTDsKJiM0MzsJcGh5ZGV2LSZndDtzZnBfY2FnZV9wb3J0ID0gTlVMTDsKIAogCXBoeV9jbGVhbnVwX3BvcnRzKHBoeWRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMKaW5kZXggNDEzNGRlN2FlMzEzZC4uNjcxMGExOTk5NjdhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMKQEAgLTcsNiAmIzQzOzcsNyBAQAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9waHlfbGlua190b3BvbG9neS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHlfcG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwpAQCAtMjMsMTcgJiM0MzsyNCw4OSBAQCBzdGF0aWMgaW50IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXhhX2luaXRfZmxhZ3MoJmFtcDt0b3BvLSZndDtwaHlzLCBYQV9GTEFHU19BTExPQzEpOwogCXRvcG8tJmd0O25leHRfcGh5X2luZGV4ID0gMTsKIAomIzQzOwl4YV9pbml0X2ZsYWdzKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIFhBX0ZMQUdTX0FMTE9DMSk7CiYjNDM7CXRvcG8tJmd0O25leHRfcG9ydF9pbmRleCA9IDE7CiYjNDM7CiAJZGV2LSZndDtsaW5rX3RvcG8gPSB0b3BvOwogCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICpwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7bGlua190b3BvKQomIzQzOwkJcmV0dXJuIGRldi0mZ3Q7bGlua190b3BvOwomIzQzOwomIzQzOwkvKiBUaGUgdG9wb2xvZ3kgaXMgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIHdlIGFkZCBhbiBvYmplY3QgdG8gaXQuCiYjNDM7CSAqIEl0IGlzIGZyZWVkIGFsb25nc2lkZSB0aGUgbmV0ZGV2LiBJdCBjYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlCiYjNDM7CSAqIGNvbnRleHRzOgomIzQzOwkgKiAgLSBJdCBjYW4gYmUgY2FsbGVkIGZyb20gLnByb2JlKCkgOiBObyBydG5sLCBubyBuZXRkZXZfbG9jawomIzQzOwkgKiAgLSAubmRvX29wZW4oKSA6IHJ0bmwgYW5kIHBvc3NpYmx5IG5ldGRldl9sb2NrCiYjNDM7CSAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdAomIzQzOwkgKgomIzQzOwkgKiAgSG93ZXZlciwgd2UgY2FuJiMzOTt0IHJlYWxseSBoYXZlIHJhY2VzIDoKJiM0MzsJICogIC0gSWYgd2UgaGF2ZSBhIFBIWSwgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkgd2lsbCBhbHdheXMgcnVuIGZpcnN0CiYjNDM7CSAqICAgIGFuZCB0cmlnZ2VyIHRoZSBhbGxvYy4gT25seSB0aGVuIHRoZSBwb3J0cyBjYW4gYmUgYWRkZWQgdGhyb3VnaAomIzQzOwkgKiAgICBwaHlsaWIgb2Ygc2ZwLgomIzQzOwkgKiAgLSBJZiB3ZSBkb24mIzM5O3QsIHRoZSBTRlAgcG9ydCBmb3IgdGhlIGNhZ2UgaXMgcmVnaXN0ZXJlZCBmaXJzdCwgYW5kCiYjNDM7CSAqICAgIG9ubHkgdGhlbiBvdGhlciBwb3J0cy9QSFlzIGNhbiBiZSByZWdpc3RlcmVkLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2LSZndDtsaW5rX3RvcG87CiYjNDM7fQomIzQzOwomIzQzO2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogUG9ydHMgY2FuIG5vdyBiZSBxdWVyaWVkIHdpdGhvdXQgcnRubCBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLCB3aGljaAomIzQzOwkgKiB3ZSBkb24mIzM5O3Qgc3VwcG9ydCBub3cgYXMgcG9ydCByZXRyaWV2YWwgaXMgZG9uZSB1bmRlciBydG5sLgomIzQzOwkgKiBXZSBkb24mIzM5O3QgaGF2ZSBwaHlfcG9ydCBlbmFibGVkIGRldmljZXMgeWV0LCBsZXQmIzM5O3MgbWFrZSBzdXJlCiYjNDM7CSAqIHdlIGFyZSBsb3VkbHkgd2FybmVkIGFib3V0IHRoYXQgd2hlbiBpdCBoYXBwZW5zLgomIzQzOwkgKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRShuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJdG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7CiYjNDM7CWlmIChJU19FUlIodG9wbykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUih0b3BvKTsKJiM0MzsKJiM0MzsJLyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovCiYjNDM7CWlmIChwb3J0LSZndDtpZCkKJiM0MzsJCXJldCA9IHhhX2luc2VydCgmYW1wO3RvcG8tJmd0O3BvcnRzLCBwb3J0LSZndDtpZCwgcG9ydCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IHhhX2FsbG9jX2N5Y2xpYygmYW1wO3RvcG8tJmd0O3BvcnRzLCAmYW1wO3BvcnQtJmd0O2lkLCBwb3J0LAomIzQzOwkJCQkgICAgICB4YV9saW1pdF8zMmIsICZhbXA7dG9wby0mZ3Q7bmV4dF9wb3J0X2luZGV4LAomIzQzOwkJCQkgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19hZGRfcG9ydCk7CiYjNDM7CiYjNDM7dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi0mZ3Q7bGlua190b3BvOwomIzQzOwomIzQzOwlpZiAoIXRvcG8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIHBvcnQtJmd0O2lkKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19kZWxfcG9ydCk7CiYjNDM7CiBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksCiAJCQkgIGVudW0gcGh5X3Vwc3RyZWFtIHVwdCwgdm9pZCAqdXBzdHJlYW0pCiB7Ci0Jc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LSZndDtsaW5rX3RvcG87CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbzsKIAlzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKIAlpbnQgcmV0OwogCiAJLyogZXRodG9vbCBvcHMgbWF5IHJ1biB3aXRob3V0IHJ0bmxfbG9jaywgYW5kIHJ0bmxfbG9jayBpcyB3aGF0CkBAIC00NSwxMyAmIzQzOzExOCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIXRvcG8pIHsKLQkJcmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXRvcG8gPSBkZXYtJmd0O2xpbmtfdG9wbzsKLQl9CiYjNDM7CXRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHRvcG8pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIodG9wbyk7CiAKIAlwZG4gPSBremFsbG9jX29iaigqcGRuKTsKIAlpZiAoIXBkbikKQEAgLTg2LDggJiM0MzsxNTUsMjAgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycjsKIAomIzQzOwkvKiBBZGQgYWxsIHRoZSBQSFkmIzM5O3MgcG9ydHMgdG8gdGhlIHRvcG9sb2d5ICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwaHktJmd0O3BvcnRzLCBoZWFkKSB7CiYjNDM7CQlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KGRldiwgcG9ydCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZGVsX3BvcnRzOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiAKJiM0MztkZWxfcG9ydHM6CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShwb3J0LCAmYW1wO3BoeS0mZ3Q7cG9ydHMsIGhlYWQpCiYjNDM7CQlwaHlfbGlua190b3BvX2RlbF9wb3J0KGRldiwgcG9ydCk7CiYjNDM7CiYjNDM7CXhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cGh5cywgcGh5LSZndDtwaHlpbmRleCk7CiBlcnI6CiAJa2ZyZWUocGRuKTsKIAlyZXR1cm4gcmV0OwpAQCAtOTksMTAgJiM0MzsxODAsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIAlzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtJmd0O2xpbmtfdG9wbzsKIAlzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKIAogCWlmICghdG9wbykKIAkJcmV0dXJuOwogCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwaHktJmd0O3BvcnRzLCBoZWFkKQomIzQzOwkJcGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpOwomIzQzOwogCXBkbiA9IHhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cGh5cywgcGh5LSZndDtwaHlpbmRleCk7CiAKIAkvKiBXZSBkZWxldGUgdGhlIFBIWSBmcm9tIHRoZSB0b3BvbG9neSwgaG93ZXZlciB3ZSBkb24mIzM5O3QgcmUtc2V0IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKaW5kZXggZjQwYWNjMGQ0MTMzOC4uYTVmMDI1MTg3YWZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCkBAIC0xNCw2ICYjNDM7MTQsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L29mX21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHlfZml4ZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5X3BvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHlsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKQEAgLTkzLDYgJiM0Mzs5NSw4IEBAIHN0cnVjdCBwaHlsaW5rIHsKIAlERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhzZnBfaW50ZXJmYWNlcyk7CiAJX19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc2ZwX3N1cHBvcnQpOwogCXU4IHNmcF9wb3J0OwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqbW9kX3BvcnQ7CiAKIAlzdHJ1Y3QgZWVlX2NvbmZpZyBlZWVfY2ZnOwogCkBAIC0xNzY0LDYgJiM0MzsxNzY4LDUxIEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfZml4ZWRfcG9sbChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHNmcF9waHlsaW5rX29wczsKIAomIzQzO3N0YXRpYyBpbnQgcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBsLSZndDtuZXRkZXYgfHwgIXBsLSZndDtzZnBfYnVzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXBvcnQgPSBwaHlfcG9ydF9hbGxvYygpOwomIzQzOwlpZiAoIXBvcnQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcG9ydC0mZ3Q7aXNfc2ZwID0gdHJ1ZTsKJiM0MzsJcG9ydC0mZ3Q7aXNfbWlpID0gdHJ1ZTsKJiM0MzsJcG9ydC0mZ3Q7YWN0aXZlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcGh5X2ludGVyZmFjZV9hbmQocG9ydC0mZ3Q7aW50ZXJmYWNlcywgcGwtJmd0O2NvbmZpZy0mZ3Q7c3VwcG9ydGVkX2ludGVyZmFjZXMsCiYjNDM7CQkJICBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzKTsKJiM0MzsJcGh5X3BvcnRfdXBkYXRlX3N1cHBvcnRlZChwb3J0KTsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC0mZ3Q7bmV0ZGV2LCBwb3J0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3lfcG9ydDsKJiM0MzsKJiM0MzsJcGwtJmd0O3NmcF9jYWdlX3BvcnQgPSBwb3J0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfZGVzdHJveV9wb3J0OgomIzQzOwlwaHlfcG9ydF9kZXN0cm95KHBvcnQpOwomIzQzOwlwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydCA9IE5VTEw7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbCkKJiM0Mzt7CiYjNDM7CWlmIChwbC0mZ3Q7bmV0ZGV2ICZhbXA7JmFtcDsgcGwtJmd0O3NmcF9jYWdlX3BvcnQpCiYjNDM7CQlwaHlfbGlua190b3BvX2RlbF9wb3J0KHBsLSZndDtuZXRkZXYsIHBsLSZndDtzZnBfY2FnZV9wb3J0KTsKJiM0MzsKJiM0MzsJaWYgKHBsLSZndDtzZnBfY2FnZV9wb3J0KQomIzQzOwkJcGh5X3BvcnRfZGVzdHJveShwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydCk7CiYjNDM7CiYjNDM7CXBsLSZndDtzZnBfY2FnZV9wb3J0ID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCwKIAkJCQljb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQogewpAQCAtMTc4MSw5ICYjNDM7MTgzMCwxOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCwKIAogCXBsLSZndDtzZnBfYnVzID0gYnVzOwogCiYjNDM7CXJldCA9IHBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnQocGwpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlzZnBfYnVzX3B1dChidXMpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwogCXJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGwsICZhbXA7c2ZwX3BoeWxpbmtfb3BzKTsKIAlzZnBfYnVzX3B1dChidXMpOwogCiYjNDM7CWlmIChyZXQpCiYjNDM7CQlwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChwbCk7CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTk0Niw2ICYjNDM7MjAwNCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY3JlYXRlKTsKIHZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbCkKIHsKIAlzZnBfYnVzX2RlbF91cHN0cmVhbShwbC0mZ3Q7c2ZwX2J1cyk7CiYjNDM7CXBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHBsKTsKIAlpZiAocGwtJmd0O2xpbmtfZ3BpbykKIAkJZ3Bpb2RfcHV0KHBsLSZndDtsaW5rX2dwaW8pOwogCkBAIC0zODcxLDE0ICYjNDM7MzkzMCw2NyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfcmVtb3ZlKHZvaWQgKnVwc3RyZWFtKQogCXBoeV9pbnRlcmZhY2VfemVybyhwbC0mZ3Q7c2ZwX2ludGVyZmFjZXMpOwogfQogCiYjNDM7c3RhdGljIGludCBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHNmcF9tb2R1bGVfY2FwcyAqY2FwczsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICpwb3J0OwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBDcmVhdGUgbW9kIHBvcnQgKi8KJiM0MzsJcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7CiYjNDM7CWlmICghcG9ydCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwb3J0LSZndDthY3RpdmUgPSB0cnVlOwomIzQzOwomIzQzOwljYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwbC0mZ3Q7c2ZwX2J1cyk7CiYjNDM7CiYjNDM7CXBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC0mZ3Q7c3VwcG9ydGVkLCBjYXBzLSZndDtsaW5rX21vZGVzLAomIzQzOwkJCQkJcGwtJmd0O3NmcF9jYWdlX3BvcnQtJmd0O2ludGVyZmFjZXMpOwomIzQzOwomIzQzOwlpZiAocGwtJmd0O25ldGRldikgewomIzQzOwkJcmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC0mZ3Q7bmV0ZGV2LCBwb3J0KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwaHlfcG9ydF9kZXN0cm95KHBvcnQpOwomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcG9ydC0mZ3Q7dXBzdHJlYW1fcG9ydCA9IHBsLSZndDtzZnBfY2FnZV9wb3J0OwomIzQzOwomIzQzOwlwbC0mZ3Q7bW9kX3BvcnQgPSBwb3J0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbCkKJiM0Mzt7CiYjNDM7CWlmICghcGwtJmd0O21vZF9wb3J0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocGwtJmd0O25ldGRldikKJiM0MzsJCXBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtJmd0O25ldGRldiwgcGwtJmd0O21vZF9wb3J0KTsKJiM0MzsKJiM0MzsJcGh5X3BvcnRfZGVzdHJveShwbC0mZ3Q7bW9kX3BvcnQpOwomIzQzOwlwbC0mZ3Q7bW9kX3BvcnQgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKQogewogCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOwomIzQzOwlpbnQgcmV0OwogCiAJLyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RhcnQgdGhlIFBIWSBub3cuICovCiAJaWYgKHBsLSZndDtwaHlkZXYpIHsKIAkJcGh5X3N0YXJ0KHBsLSZndDtwaHlkZXYpOwogCQlyZXR1cm4gMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydChwbCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiAJfQogCiAJLyogSWYgdGhlIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWSBidXQgd2UgZGlkbiYjMzk7dCBkZXRlY3Qgb25lIHdlCkBAIC0zODg3LDcgJiM0MzszOTk5LDE2IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKQogCWlmICghcGwtJmd0O3NmcF9tYXlfaGF2ZV9waHkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTsKJiM0MzsJcmV0ID0gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBkZWxfbW9kX3BvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2RlbF9tb2RfcG9ydDoKJiM0MzsJcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pCkBAIC0zODk3LDYgJiM0Mzs0MDE4LDggQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pCiAJLyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi8KIAlpZiAocGwtJmd0O3BoeWRldikKIAkJcGh5X3N0b3AocGwtJmd0O3BoeWRldik7CiYjNDM7CWVsc2UKJiM0MzsJCXBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChwbCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSkKQEAgLTM5NDEsNiAmIzQzOzQwNjQsOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQogCXBoeV9pbnRlcmZhY2VfYW5kKHBoeS0mZ3Q7aG9zdF9pbnRlcmZhY2VzLCBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzLAogCQkJICBwbC0mZ3Q7Y29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiAKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGwtJmd0O3NmcF9jYWdlX3BvcnQpOwomIzQzOwogCS8qIERvIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gKi8KIAlyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX3BoeShwbCwgcGh5KTsKIH0KQEAgLTM5NDksNiAmIzQzOzQwNzQsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwKIAkJCQkgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHVwc3RyZWFtKTsKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeWRldiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHMgPSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAxMTA5MmMzMTc1YjNkLi43NDFjYTdhMGEyNTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTU4Miw2ICYjNDM7NTgyLDcgQEAgc3RydWN0IHBoeV9vYXRjMTRfc3FpX2NhcGFiaWxpdHkgewogICogQHdvbF9lbmFibGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGUgUEhZIG9yIHRoZSBhdHRhY2hlZCBNQUMgaGF2ZSBXYWtlLW9uLUxBTgogICogCQkgZW5hYmxlZC4KICAqIEBpc19nZW5waHlfZHJpdmVuOiBQSFkgaXMgZHJpdmVuIGJ5IG9uZSBvZiB0aGUgZ2VuZXJpYyBQSFkgZHJpdmVycwomIzQzOyAqIEBoYXNfc2ZwX21vZF9waHk6IFNldCB0cnVlIGlmIGRvd25zdHJlYW0gU0ZQIGJ1cyYjMzk7cyBtb2R1bGUgY29udGFpbnMgYSBQSFkKICAqIEBzdGF0ZTogU3RhdGUgb2YgdGhlIFBIWSBmb3IgbWFuYWdlbWVudCBwdXJwb3NlcwogICogQGRldl9mbGFnczogRGV2aWNlLXNwZWNpZmljIGZsYWdzIHVzZWQgYnkgdGhlIFBIWSBkcml2ZXIuCiAgKgpAQCAtNTk0LDYgJiM0Mzs1OTUsOSBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7CiAgKiBAcGh5bGluazogUG9pbnRlciB0byBwaHlsaW5rIGluc3RhbmNlIGZvciB0aGlzIFBIWQogICogQHNmcF9idXNfYXR0YWNoZWQ6IEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBTRlAgYnVzIGhhcyBiZWVuIGF0dGFjaGVkCiAgKiBAc2ZwX2J1czogU0ZQIGJ1cyBhdHRhY2hlZCB0byB0aGlzIFBIWSYjMzk7cyBmaWJlciBwb3J0CiYjNDM7ICogQHNmcF9jYWdlX3BvcnQ6IFRoZSBwaHlfcG9ydCBjb25uZWN0ZWQgdG8gdGhlIGRvd25zdHJlYW0gU0ZQIGNhZ2UKJiM0MzsgKiBAbW9kX3BvcnQ6IHBoeV9wb3J0IHJlcHJlc2VudGluZyB0aGUgU0ZQIG1vZHVsZSwgaWYgaXQgaXMgcGh5LWxlc3MKJiM0MzsgKiBAdXBzdHJlYW1fcG9ydDogcGh5X3BvcnQgdGhpcyBQSFkmIzM5O3MgTUlJIGF0dGFjaGVzIHRvLCBpZiBhbnkKICAqIEBhdHRhY2hlZF9kZXY6IFRoZSBhdHRhY2hlZCBlbmV0IGRyaXZlciYjMzk7cyBkZXZpY2UgaW5zdGFuY2UgcHRyCiAgKiBAYWRqdXN0X2xpbms6IENhbGxiYWNrIGZvciB0aGUgZW5ldCBjb250cm9sbGVyIHRvIHJlc3BvbmQgdG8gY2hhbmdlczogaW4gdGhlCiAgKiAgICAgICAgICAgICAgIGxpbmsgc3RhdGUuCkBAIC03MDYsNiAmIzQzOzcxMCw3IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHsKIAl1bnNpZ25lZCBpcnFfcmVydW46MTsKIAogCXVuc2lnbmVkIGRlZmF1bHRfdGltZXN0YW1wOjE7CiYjNDM7CXVuc2lnbmVkIGhhc19zZnBfbW9kX3BoeToxOwogCiAJaW50IHJhdGVfbWF0Y2hpbmc7CiAKQEAgLTc4NSw2ICYjNDM7NzkwLDkgQEAgc3RydWN0IHBoeV9kZXZpY2UgewogCS8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi8KIAlib29sIHNmcF9idXNfYXR0YWNoZWQ7CiAJc3RydWN0IHNmcF9idXMgKnNmcF9idXM7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqc2ZwX2NhZ2VfcG9ydDsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICptb2RfcG9ydDsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICp1cHN0cmVhbV9wb3J0OwogCXN0cnVjdCBwaHlsaW5rICpwaHlsaW5rOwogCXN0cnVjdCBuZXRfZGV2aWNlICphdHRhY2hlZF9kZXY7CiAJc3RydWN0IG1paV90aW1lc3RhbXBlciAqbWlpX3RzOwpAQCAtMjQ2OCw2ICYjNDM7MjQ3Niw4IEBAIGludCBfX3BoeV9od3RzdGFtcF9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAogc3RydWN0IHBoeV9wb3J0ICpwaHlfZ2V0X3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogCiYjNDM7dm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTsKJiM0MzsKIC8qKgogICogcGh5X21vZHVsZV9kcml2ZXIoKSAtIEhlbHBlciBtYWNybyBmb3IgcmVnaXN0ZXJpbmcgUEhZIGRyaXZlcnMKICAqIEBfX3BoeV9kcml2ZXJzOiBhcnJheSBvZiBQSFkgZHJpdmVycyB0byByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oIGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oCmluZGV4IDk1NTc1ZjY4ZDViYzcuLjk1ODUyODJjYWUzZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmgKQEAgLTEzLDE0ICYjNDM7MTMsMTkgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aHRvb2wuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiAKIHN0cnVjdCB4YXJyYXk7CiBzdHJ1Y3QgcGh5X2RldmljZTsKJiM0MztzdHJ1Y3QgcGh5X3BvcnQ7CiBzdHJ1Y3Qgc2ZwX2J1czsKIAogc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5IHsKIAlzdHJ1Y3QgeGFycmF5IHBoeXM7CiAJdTMyIG5leHRfcGh5X2luZGV4OwomIzQzOwomIzQzOwlzdHJ1Y3QgeGFycmF5IHBvcnRzOwomIzQzOwl1MzIgbmV4dF9wb3J0X2luZGV4OwogfTsKIAogc3RydWN0IHBoeV9kZXZpY2Vfbm9kZSB7CkBAIC00OCw2ICYjNDM7NTMsOSBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpOwogCiYjNDM7aW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTsKJiM0Mzt2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKgogcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleCkKIHsKQEAgLTY0LDYgJiM0Mzs3MiwyNSBAQCBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KQogCXJldHVybiBOVUxMOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X3BvcnQgKgomIzQzO3BoeV9saW5rX3RvcG9fZ2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBvcnRfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtJmd0O2xpbmtfdG9wbzsKJiM0MzsKJiM0MzsJaWYgKCF0b3BvKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CS8qIHBvcnRzIGluIHRoZSB0b3BvIGFyZSBSVE5MIHByb3RlY3RlZCwgYnV0IG1heSBiZSBhY2Nlc3NlZCB1bmRlcgomIzQzOwkgKiBuZXRkZXZfbG9jayBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLiBGb3Igbm93IGtlZXAgdGhlbSB1bmRlciBydG5sCiYjNDM7CSAqIHByb3RlY3Rpb24sIGFzIG5vIG9wcy1sb2NrZWQgZGV2aWNlcyBoYXZlIHBoeV9wb3J0IGNhcGFiaWxpdGllcwomIzQzOwkgKiB5ZXQuCiYjNDM7CSAqLwomIzQzOwlBU1NFUlRfUlROTCgpOwomIzQzOwomIzQzOwkvKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwgd2hpbGUgaGFuZGxpbmcgdGhlIHBoeV9wb3J0ICovCiYjNDM7CXJldHVybiB4YV9sb2FkKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIHBvcnRfaWQpOwomIzQzO30KJiM0MzsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSwKQEAgLTc3LDExICYjNDM7MTA0LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCSBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCSAgc3RydWN0IHBoeV9wb3J0ICpwb3J0KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICoKIHBoeV9saW5rX3RvcG9fZ2V0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcGh5aW5kZXgpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X3BvcnQgKgomIzQzO3BoeV9saW5rX3RvcG9fZ2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBvcnRfaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fUEhZX0xJTktfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oIGIvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oCmluZGV4IDBlZjBmNWNlNDcwOTIuLjhmNDVjMDMxY2JjMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmgKQEAgLTM2LDkgJiM0MzszNiwxMiBAQCBzdHJ1Y3QgcGh5X3BvcnRfb3BzIHsKIC8qKgogICogc3RydWN0IHBoeV9wb3J0IC0gQSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldHdvcmsgZGV2aWNlIHBoeXNpY2FsIGludGVyZmFjZQogICoKJiM0MzsgKiBAaWQ6IFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcG9ydCB3aXRoaW4gdGhlIHRvcG9sb2d5CiAgKiBAaGVhZDogVXNlZCBieSB0aGUgcG9ydCYjMzk7cyBwYXJlbnQgdG8gbGlzdCBwb3J0cwogICogQHBhcmVudF90eXBlOiBUaGUgdHlwZSBvZiBkZXZpY2UgdGhpcyBwb3J0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0bwogICogQHBoeTogSWYgdGhlIHBhcmVudCBpcyBQSFlfUE9SVF9QSFlERVYsIHRoZSBQSFkgY29udHJvbGxpbmcgdGhhdCBwb3J0CiYjNDM7ICogQHVwc3RyZWFtX3BvcnQ6IEluZGljYXRlcyB0aGUgTUlJIHBvcnQgdGhhdCBmZWVkcyB0aGlzIHBvcnQsIGlmIGFueSwKJiM0MzsgKgkJICAgZS5nLiB0aGUgU0ZQIGNhZ2UgcG9ydCBmb3IgYSBTRlAgbW9kdWxlIHBvcnQuCiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlcgogICogQHBhaXJzOiBUaGUgbnVtYmVyIG9mICBwYWlycyB0aGlzIHBvcnQgaGFzLCAwIGlmIG5vdCBhcHBsaWNhYmxlCiAgKiBAbWVkaXVtczogQml0bWFzayBvZiB0aGUgcGh5c2ljYWwgbWVkaXVtcyB0aGlzIHBvcnQgcHJvdmlkZXMgYWNjZXNzIHRvCkBAIC01MiwxMSAmIzQzOzU1LDEzIEBAIHN0cnVjdCBwaHlfcG9ydF9vcHMgewogICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuCiAgKi8KIHN0cnVjdCBwaHlfcG9ydCB7CiYjNDM7CXUzMiBpZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CiAJZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7CiAJdW5pb24gewogCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwogCX07CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDsKIAogCWNvbnN0IHN0cnVjdCBwaHlfcG9ydF9vcHMgKm9wczsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKaW5kZXggODEzNGJhZjc4NjBmMy4uZjlkODc5NGVhYmMxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCkBAIC03OCw2ICYjNDM7NzgsMTEgQEAgZW51bSBldGh0b29sX3BzZV9ldmVudCB7CiAJRVRIVE9PTF9QU0VfRVZFTlRfU1dfUFdfQ09OVFJPTF9FUlJPUiA9IDY0LAogfTsKIAomIzQzO2VudW0gZXRodG9vbF9wb3J0X3R5cGUgewomIzQzOwlFVEhUT09MX1BPUlRfVFlQRV9NREksCiYjNDM7CUVUSFRPT0xfUE9SVF9UWVBFX1NGUCwKJiM0Mzt9OwomIzQzOwogZW51bSB7CiAJRVRIVE9PTF9BX0hFQURFUl9VTlNQRUMsCiAJRVRIVE9PTF9BX0hFQURFUl9ERVZfSU5ERVgsCkBAIC04NDAsNiAmIzQzOzg0NSwxOCBAQCBlbnVtIHsKIAlFVEhUT09MX0FfTVNFX01BWCA9IChfX0VUSFRPT0xfQV9NU0VfQ05UIC0gMSkKIH07CiAKJiM0MztlbnVtIHsKJiM0MzsJRVRIVE9PTF9BX1BPUlRfSEVBREVSID0gMSwKJiM0MzsJRVRIVE9PTF9BX1BPUlRfSUQsCiYjNDM7CUVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUywKJiM0MzsJRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsCiYjNDM7CUVUSFRPT0xfQV9QT1JUX1RZUEUsCiYjNDM7CUVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsCiYjNDM7CiYjNDM7CV9fRVRIVE9PTF9BX1BPUlRfQ05ULAomIzQzOwlFVEhUT09MX0FfUE9SVF9NQVggPSAoX19FVEhUT09MX0FfUE9SVF9DTlQgLSAxKQomIzQzO307CiYjNDM7CiBlbnVtIHsKIAlFVEhUT09MX01TR19VU0VSX05PTkUgPSAwLAogCUVUSFRPT0xfTVNHX1NUUlNFVF9HRVQgPSAxLApAQCAtODkzLDYgJiM0Mzs5MTAsNyBAQCBlbnVtIHsKIAlFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCwKIAlFVEhUT09MX01TR19SU1NfREVMRVRFX0FDVCwKIAlFVEhUT09MX01TR19NU0VfR0VULAomIzQzOwlFVEhUT09MX01TR19QT1JUX0dFVCwKIAogCV9fRVRIVE9PTF9NU0dfVVNFUl9DTlQsCiAJRVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpCkBAIC05NTQsNiAmIzQzOzk3Miw3IEBAIGVudW0gewogCUVUSFRPT0xfTVNHX1JTU19DUkVBVEVfTlRGLAogCUVUSFRPT0xfTVNHX1JTU19ERUxFVEVfTlRGLAogCUVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksCiYjNDM7CUVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLAogCiAJX19FVEhUT09MX01TR19LRVJORUxfQ05ULAogCUVUSFRPT0xfTVNHX0tFUk5FTF9NQVggPSAoX19FVEhUT09MX01TR19LRVJORUxfQ05UIC0gMSkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYzFjMWJlMWE2OTYyZi4uYjM2Y2M1YzQ3ODE2YSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExMzE1LDYgJiM0MzsxMTMxNSw3IEBAIHN0YXRpYyB2b2lkIG5ldGRldl9mcmVlX3BoeV9saW5rX3RvcG9sb2d5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUEhZTElCKSAmYW1wOyZhbXA7IHRvcG8pIHsKIAkJeGFfZGVzdHJveSgmYW1wO3RvcG8tJmd0O3BoeXMpOwomIzQzOwkJeGFfZGVzdHJveSgmYW1wO3RvcG8tJmd0O3BvcnRzKTsKIAkJa2ZyZWUodG9wbyk7CiAJCWRldi0mZ3Q7bGlua190b3BvID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9NYWtlZmlsZSBiL25ldC9ldGh0b29sL01ha2VmaWxlCmluZGV4IDYyOWMxMDkxNjY3MGUuLjliNWIwOTY3MDAwODEgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL01ha2VmaWxlCkBAIC05LDQgJiM0Mzs5LDQgQEAgZXRodG9vbF9ubC15CTo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFwKIAkJICAgY2hhbm5lbHMubyBjb2FsZXNjZS5vIHBhdXNlLm8gZWVlLm8gdHNpbmZvLm8gY2FibGV0ZXN0Lm8gXAogCQkgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXAogCQkgICBtb2R1bGUubyBjbWlzX2Z3X3VwZGF0ZS5vIGNtaXNfY2RiLm8gcHNlLXBkLm8gcGxjYS5vIFwKLQkJICAgcGh5Lm8gdHNjb25maWcubyBtc2UubwomIzQzOwkJICAgcGh5Lm8gdHNjb25maWcubyBtc2UubyBwb3J0Lm8KZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuYyBiL25ldC9ldGh0b29sL25ldGxpbmsuYwppbmRleCAxYWYzOTViNTQzMzBlLi5jMDc2YzA3ZDBhMDgwIDEwMDY0NAotLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5jCkBAIC0yNiw2ICYjNDM7MjYsOCBAQCBzdGF0aWMgdTMyIGV0aG5sX2JjYXN0X3NlcTsKIAkJCSAgICAgRVRIVE9PTF9GTEFHX09NSVRfUkVQTFkpCiAjZGVmaW5lIEVUSFRPT0xfRkxBR1NfU1RBVFMgKEVUSFRPT0xfRkxBR1NfQkFTSUMgfCBFVEhUT09MX0ZMQUdfU1RBVFMpCiAKJiM0MztjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXSBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7CiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W10gPSB7CiAJW0VUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW0VUSFRPT0xfQV9IRUFERVJfREVWX05BTUVdCT0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLApAQCAtNDMxLDYgJiM0Mzs0MzMsNyBAQCBldGhubF9kZWZhdWx0X3JlcXVlc3RzW19fRVRIVE9PTF9NU0dfVVNFUl9DTlRdID0gewogCVtFVEhUT09MX01TR19UU0NPTkZJR19TRVRdCT0gJmFtcDtldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcywKIAlbRVRIVE9PTF9NU0dfUEhZX0dFVF0JCT0gJmFtcDtldGhubF9waHlfcmVxdWVzdF9vcHMsCiAJW0VUSFRPT0xfTVNHX01TRV9HRVRdCQk9ICZhbXA7ZXRobmxfbXNlX3JlcXVlc3Rfb3BzLAomIzQzOwlbRVRIVE9PTF9NU0dfUE9SVF9HRVRdCQk9ICZhbXA7ZXRobmxfcG9ydF9yZXF1ZXN0X29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCkBAIC0xNTcyLDYgJiM0MzsxNTc1LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9vcHMgZXRodG9vbF9nZW5sX29wc1tdID0gewogCQkucG9saWN5ID0gZXRobmxfbXNlX2dldF9wb2xpY3ksCiAJCS5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9tc2VfZ2V0X3BvbGljeSkgLSAxLAogCX0sCiYjNDM7CXsKJiM0MzsJCS5jbWQJPSBFVEhUT09MX01TR19QT1JUX0dFVCwKJiM0MzsJCS5kb2l0CT0gZXRobmxfZGVmYXVsdF9kb2l0LAomIzQzOwkJLnN0YXJ0CT0gZXRobmxfcG9ydF9kdW1wX3N0YXJ0LAomIzQzOwkJLmR1bXBpdAk9IGV0aG5sX3BvcnRfZHVtcGl0LAomIzQzOwkJLmRvbmUJPSBldGhubF9wb3J0X2R1bXBfZG9uZSwKJiM0MzsJCS5wb2xpY3kgPSBldGhubF9wb3J0X2dldF9wb2xpY3ksCiYjNDM7CQkubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcG9ydF9nZXRfcG9saWN5KSAtIDEsCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGV0aHRvb2xfbmxfbWNncnBzW10gPSB7CkBAIC0xNTk0LDEwICYjNDM7MTYwNiwyMyBAQCBzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGV0aHRvb2xfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0gewogCiAvKiBtb2R1bGUgc2V0dXAgKi8KIAomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBldGhubF9waHlfbmFtZXNfcG9wdWxhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgUEhZX0lOVEVSRkFDRV9NT0RFX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW5hbWUgPSBwaHlfbW9kZXMoaSk7CiYjNDM7CQlzdHJzY3B5KHBoeV9pbnRlcmZhY2VfbmFtZXNbaV0sIG5hbWUsIEVUSF9HU1RSSU5HX0xFTik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9faW5pdCBldGhubF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAomIzQzOwlldGhubF9waHlfbmFtZXNfcG9wdWxhdGUoKTsKJiM0MzsKIAlyZXQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmYW1wO2V0aHRvb2xfZ2VubF9mYW1pbHkpOwogCWlmIChXQVJOKHJldCAmbHQ7IDAsICYjMzQ7ZXRodG9vbDogZ2VuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24gZmFpbGVkJiMzNDspKQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oCmluZGV4IDNlOTY5YTA3MGY5ZmUuLmRjNzIxMWY2N2M0ZDUgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKQEAgLTUsMTEgJiM0Mzs1LDE0IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sX25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2dlbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAKIHN0cnVjdCBldGhubF9yZXFfaW5mbzsKIAomIzQzO2V4dGVybiBjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXTsKJiM0MzsKIGludCBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5lc3QsIHN0cnVjdCBuZXQgKm5ldCwKIAkJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCkBAIC00NzQsNiAmIzQzOzQ3Nyw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbW1fcmVxdWVzdF9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BoeV9yZXF1ZXN0X29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21zZV9yZXF1ZXN0X29wczsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHM7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeV9zdGF0c1tFVEhUT09MX0FfSEVBREVSX0ZMQUdTICYjNDM7IDFdOwpAQCAtNTMwLDYgJiM0Mzs1MzQsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9IRUFERVIgJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX3NldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX01BWCAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9tc2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfTVNFX0hFQURFUiAmIzQzOyAxXTsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcG9ydF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QT1JUX0lEICYjNDM7IDFdOwogCiBpbnQgZXRobmxfc2V0X2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwpAQCAtNTQ1LDYgJiM0Mzs1NTAsOSBAQCBpbnQgZXRobmxfdHNpbmZvX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogaW50IGV0aG5sX3RzaW5mb19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiBpbnQgZXRobmxfcnNzX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IGV0aG5sX3Jzc19kZWxldGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiAKIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX3N0ZF9uYW1lc1tfX0VUSFRPT0xfU1RBVFNfQ05UXVtFVEhfR1NUUklOR19MRU5dOwogZXh0ZXJuIGNvbnN0IGNoYXIgc3RhdHNfZXRoX3BoeV9uYW1lc1tfX0VUSFRPT0xfQV9TVEFUU19FVEhfUEhZX0NOVF1bRVRIX0dTVFJJTkdfTEVOXTsKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BvcnQuYyBiL25ldC9ldGh0b29sL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lMWJjYWRiZmU0MGMwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcG9ydC5jCkBAIC0wLDAgJiM0MzsxLDM3NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAyMDI2IEJvb3RsaW4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeV9wb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbG9jay5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Yml0c2V0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0bGluay5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgcG9ydF9yZXFfaW5mbyB7CiYjNDM7CXN0cnVjdCBldGhubF9yZXFfaW5mbyBiYXNlOwomIzQzOwl1MzIgcG9ydF9pZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEgewomIzQzOwlzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YQliYXNlOwomIzQzOwlfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpOwomIzQzOwlERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhpbnRlcmZhY2VzKTsKJiM0MzsJdTMyIHBvcnRfaWQ7CiYjNDM7CWJvb2wgbWlpOwomIzQzOwlib29sIHNmcDsKJiM0MzsJdTMyIHVwc3RyZWFtX3BvcnQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFBPUlRfUkVRSU5GTyhfX3JlcV9iYXNlKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfX3JlcV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXFfaW5mbywgYmFzZSkKJiM0MzsKJiM0MzsjZGVmaW5lIFBPUlRfUkVQREFUQShfX3JlcGx5X2Jhc2UpIFwKJiM0MzsJY29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBvcnRfcmVwbHlfZGF0YSwgYmFzZSkKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgJiM0MzsgMV0gPSB7CiYjNDM7CVtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksCiYjNDM7CVtFVEhUT09MX0FfUE9SVF9JRF0gPSBOTEFfUE9MSUNZX01JTihOTEFfVTMyLCAxKSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcG9ydF9wYXJzZV9yZXF1ZXN0KHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pOwomIzQzOwomIzQzOwlpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBFVEhUT09MX0FfUE9SVF9JRCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVxdWVzdC0mZ3Q7cG9ydF9pZCA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QT1JUX0lEXSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiYjNDM7CQkJICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSwKJiM0MzsJCQkgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pOwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CiYjNDM7CS8qIFJUTkwgbXVzdCBiZSBoZWxkIHdoaWxlIGhvbGRpbmcgYSByZWYgdG8gdGhlIHBoeV9wb3J0LiBIZXJlLCBjYWxsZXIKJiM0MzsJICogaG9sZHMgUlROTC4KJiM0MzsJICovCiYjNDM7CXBvcnQgPSBwaHlfbGlua190b3BvX2dldF9wb3J0KHJlcV9pbmZvLSZndDtkZXYsIHJlcXVlc3QtJmd0O3BvcnRfaWQpOwomIzQzOwlpZiAoIXBvcnQpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJbGlua21vZGVfY29weShyZXBseS0mZ3Q7c3VwcG9ydGVkLCBwb3J0LSZndDtzdXBwb3J0ZWQpOwomIzQzOwlwaHlfaW50ZXJmYWNlX2NvcHkocmVwbHktJmd0O2ludGVyZmFjZXMsIHBvcnQtJmd0O2ludGVyZmFjZXMpOwomIzQzOwlyZXBseS0mZ3Q7cG9ydF9pZCA9IHBvcnQtJmd0O2lkOwomIzQzOwlyZXBseS0mZ3Q7bWlpID0gcG9ydC0mZ3Q7aXNfbWlpOwomIzQzOwlyZXBseS0mZ3Q7c2ZwID0gcG9ydC0mZ3Q7aXNfc2ZwOwomIzQzOwlyZXBseS0mZ3Q7dXBzdHJlYW1fcG9ydCA9IHBvcnQtJmd0O3Vwc3RyZWFtX3BvcnQgPyBwb3J0LSZndDt1cHN0cmVhbV9wb3J0LSZndDtpZCA6IDA7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKQomIzQzO3sKJiM0MzsJYm9vbCBjb21wYWN0ID0gcmVxX2luZm8tJmd0O2ZsYWdzICZhbXA7IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7CiYjNDM7CXN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpOwomIzQzOwlzaXplX3Qgc2l6ZSA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEVUSFRPT0xfQV9QT1JUX0lEICovCiYjNDM7CXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsKJiM0MzsKJiM0MzsJaWYgKCFyZXBseS0mZ3Q7bWlpKSB7CiYjNDM7CQkvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMgKi8KJiM0MzsJCXJldCA9IGV0aG5sX2JpdHNldF9zaXplKHJlcGx5LSZndDtzdXBwb3J0ZWQsIE5VTEwsCiYjNDM7CQkJCQlfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsCiYjNDM7CQkJCQlsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXNpemUgJiM0Mzs9IHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTICovCiYjNDM7CQlyZXQgPSBldGhubF9iaXRzZXRfc2l6ZShyZXBseS0mZ3Q7aW50ZXJmYWNlcywgTlVMTCwKJiM0MzsJCQkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsCiYjNDM7CQkJCQlwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlzaXplICYjNDM7PSByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqLwomIzQzOwlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CiYjNDM7CiYjNDM7CS8qIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQgKi8KJiM0MzsJaWYgKHJlcGx5LSZndDt1cHN0cmVhbV9wb3J0KQomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKQomIzQzO3sKJiM0MzsJYm9vbCBjb21wYWN0ID0gcmVxX2luZm8tJmd0O2ZsYWdzICZhbXA7IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7CiYjNDM7CXN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpOwomIzQzOwlpbnQgcmV0LCBwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9NREk7CiYjNDM7CiYjNDM7CWlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS0mZ3Q7cG9ydF9pZCkpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlpZiAoIXJlcGx5LSZndDttaWkpIHsKJiM0MzsJCXJldCA9IGV0aG5sX3B1dF9iaXRzZXQoc2tiLCBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMsCiYjNDM7CQkJCSAgICAgICByZXBseS0mZ3Q7c3VwcG9ydGVkLCBOVUxMLAomIzQzOwkJCQkgICAgICAgX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLAomIzQzOwkJCQkgICAgICAgbGlua19tb2RlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsCiYjNDM7CQkJCSAgICAgICByZXBseS0mZ3Q7aW50ZXJmYWNlcywgTlVMTCwKJiM0MzsJCQkJICAgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsCiYjNDM7CQkJCSAgICAgICBwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJlcGx5LSZndDttaWkgfHwgcmVwbHktJmd0O3NmcCkKJiM0MzsJCXBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX1NGUDsKJiM0MzsKJiM0MzsJaWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfVFlQRSwgcG9ydF90eXBlKSkKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiYjNDM7CiYjNDM7CWlmIChyZXBseS0mZ3Q7dXBzdHJlYW1fcG9ydCAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsCiYjNDM7CQkJcmVwbHktJmd0O3Vwc3RyZWFtX3BvcnQpKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBwb3J0X2R1bXBfY3R4IHsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8JKnJlcV9pbmZvOwomIzQzOwlzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhCSpyZXBseV9kYXRhOwomIzQzOwl1bnNpZ25lZCBsb25nCQlpZmluZGV4OwomIzQzOwl1bnNpZ25lZCBsb25nCQlwb3NfaWZpbmRleDsKJiM0MzsJdW5zaWduZWQgbG9uZwkJcG9zX3BvcnRpZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqCiYjNDM7cG9ydF9kdW1wX2N0eF9nZXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqKWNiLSZndDtjdHg7CiYjNDM7fQomIzQzOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTsKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsJc3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby0mZ3Q7aW5mby5hdHRyczsKJiM0MzsJc3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YTsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcV9pbmZvOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpICZndDsgc2l6ZW9mKGNiLSZndDtjdHgpKTsKJiM0MzsKJiM0MzsJcmVxX2luZm8gPSBremFsbG9jX29iaigqcmVxX2luZm8pOwomIzQzOwlpZiAoIXJlcV9pbmZvKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJlcGx5X2RhdGEgPSBrbWFsbG9jX29iaigqcmVwbHlfZGF0YSk7CiYjNDM7CWlmICghcmVwbHlfZGF0YSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZnJlZV9yZXFfaW5mbzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldCgmYW1wO3JlcV9pbmZvLSZndDtiYXNlLCB0YltFVEhUT09MX0FfUE9SVF9IRUFERVJdLAomIzQzOwkJCQkJIGdlbmxfaW5mb19uZXQoJmFtcDtpbmZvLSZndDtpbmZvKSwKJiM0MzsJCQkJCSBpbmZvLSZndDtpbmZvLmV4dGFjaywgZmFsc2UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZnJlZV9yZXBfZGF0YTsKJiM0MzsKJiM0MzsJY3R4LSZndDtpZmluZGV4ID0gMDsKJiM0MzsJY3R4LSZndDtwb3NfaWZpbmRleCA9IDA7CiYjNDM7CiYjNDM7CS8qIEZvciBmaWx0ZXJlZCBEVU1QIHJlcXVlc3RzLCBsZXQmIzM5O3MganVzdCBzdG9yZSB0aGUgaWZpbmRleC4gV2UmIzM5O2xsIGNoZWNrCiYjNDM7CSAqIGFnYWluIGlmIHRoZSBuZXRkZXYgaXMgc3RpbGwgdGhlcmUgd2hlbiBsb29waW5nIG92ZXIgdGhlIG5ldGRldiBsaXN0CiYjNDM7CSAqIGluIHRoZSBEVU1QIGxvb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAocmVxX2luZm8tJmd0O2Jhc2UuZGV2KSB7CiYjNDM7CQljdHgtJmd0O2lmaW5kZXggPSByZXFfaW5mby0mZ3Q7YmFzZS5kZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQluZXRkZXZfcHV0KHJlcV9pbmZvLSZndDtiYXNlLmRldiwgJmFtcDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXZfdHJhY2tlcik7CiYjNDM7CQlyZXFfaW5mby0mZ3Q7YmFzZS5kZXYgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7cmVxX2luZm8gPSByZXFfaW5mbzsKJiM0MzsJY3R4LSZndDtyZXBseV9kYXRhID0gcmVwbHlfZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZnJlZV9yZXBfZGF0YToKJiM0MzsJa2ZyZWUocmVwbHlfZGF0YSk7CiYjNDM7ZnJlZV9yZXFfaW5mbzoKJiM0MzsJa2ZyZWUocmVxX2luZm8pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsJdm9pZCAqZWhkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTsKJiM0MzsJaWYgKCFlaGRyKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJbWVtc2V0KGN0eC0mZ3Q7cmVwbHlfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpKTsKJiM0MzsJY3R4LSZndDtyZXBseV9kYXRhLSZndDtiYXNlLmRldiA9IGRldjsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGRldl9sb2NrX29wcyhkZXYpOwomIzQzOwomIzQzOwlyZXQgPSBwb3J0X3ByZXBhcmVfZGF0YSgmYW1wO2N0eC0mZ3Q7cmVxX2luZm8tJmd0O2Jhc2UsICZhbXA7Y3R4LSZndDtyZXBseV9kYXRhLSZndDtiYXNlLAomIzQzOwkJCQlnZW5sX2luZm9fZHVtcChjYikpOwomIzQzOwomIzQzOwluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBldGhubF9maWxsX3JlcGx5X2hlYWRlcihza2IsIGRldiwgRVRIVE9PTF9BX1BPUlRfSEVBREVSKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gcG9ydF9maWxsX3JlcGx5KHNrYiwgJmFtcDtjdHgtJmd0O3JlcV9pbmZvLSZndDtiYXNlLCAmYW1wO2N0eC0mZ3Q7cmVwbHlfZGF0YS0mZ3Q7YmFzZSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljdHgtJmd0O3JlcGx5X2RhdGEtJmd0O2Jhc2UuZGV2ID0gTlVMTDsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpOwomIzQzOwllbHNlCiYjNDM7CQlnZW5sbXNnX2VuZChza2IsIGVoZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmVfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZGV2ID0gY3R4LSZndDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXY7CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtsaW5rX3RvcG8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJeGFfZm9yX2VhY2hfc3RhcnQoJmFtcDtkZXYtJmd0O2xpbmtfdG9wby0mZ3Q7cG9ydHMsIGN0eC0mZ3Q7cG9zX3BvcnRpZCwgcG9ydCwKJiM0MzsJCQkgIGN0eC0mZ3Q7cG9zX3BvcnRpZCkgewomIzQzOwkJY3R4LSZndDtyZXFfaW5mby0mZ3Q7cG9ydF9pZCA9IGN0eC0mZ3Q7cG9zX3BvcnRpZDsKJiM0MzsKJiM0MzsJCXJldCA9IHBvcnRfZHVtcF9vbmUoc2tiLCBkZXYsIGNiKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwljdHgtJmd0O3Bvc19wb3J0aWQgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKJiM0MzsJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtJmd0O3Bvc19pZmluZGV4KSB7CiYjNDM7CQluZXRkZXZfaG9sZChkZXYsICZhbXA7ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CQljdHgtJmd0O3JlcV9pbmZvLSZndDtiYXNlLmRldiA9IGRldjsKJiM0MzsJCXJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpOwomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJbmV0ZGV2X3B1dChkZXYsICZhbXA7ZGV2X3RyYWNrZXIpOwomIzQzOwkJY3R4LSZndDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXYgPSBOVUxMOwomIzQzOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXJldCA9IDA7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpOwomIzQzOwlzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGN0eC0mZ3Q7aWZpbmRleCkgewomIzQzOwkJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwomIzQzOwomIzQzOwkJZGV2ID0gbmV0ZGV2X2dldF9ieV9pbmRleChnZW5sX2luZm9fbmV0KCZhbXA7aW5mby0mZ3Q7aW5mbyksCiYjNDM7CQkJCQkgIGN0eC0mZ3Q7aWZpbmRleCwgJmFtcDtkZXZfdHJhY2tlciwKJiM0MzsJCQkJCSAgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJCWN0eC0mZ3Q7cmVxX2luZm8tJmd0O2Jhc2UuZGV2ID0gZGV2OwomIzQzOwkJcmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7CiYjNDM7CiYjNDM7CQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXZfdHJhY2tlcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBwb3J0X2R1bXBfYWxsX2Rldihza2IsIGNiKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsKJiM0MzsJa2ZyZWUoY3R4LSZndDtyZXFfaW5mbyk7CiYjNDM7CWtmcmVlKGN0eC0mZ3Q7cmVwbHlfZGF0YSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcG9ydF9yZXF1ZXN0X29wcyA9IHsKJiM0MzsJLnJlcXVlc3RfY21kCQk9IEVUSFRPT0xfTVNHX1BPUlRfR0VULAomIzQzOwkucmVwbHlfY21kCQk9IEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLAomIzQzOwkuaGRyX2F0dHIJCT0gRVRIVE9PTF9BX1BPUlRfSEVBREVSLAomIzQzOwkucmVxX2luZm9fc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBvcnRfcmVxX2luZm8pLAomIzQzOwkucmVwbHlfZGF0YV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpLAomIzQzOwomIzQzOwkucGFyc2VfcmVxdWVzdAkJPSBwb3J0X3BhcnNlX3JlcXVlc3QsCiYjNDM7CS5wcmVwYXJlX2RhdGEJCT0gcG9ydF9wcmVwYXJlX2RhdGEsCiYjNDM7CS5yZXBseV9zaXplCQk9IHBvcnRfcmVwbHlfc2l6ZSwKJiM0MzsJLmZpbGxfcmVwbHkJCT0gcG9ydF9maWxsX3JlcGx5LAomIzQzO307CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzIzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTE2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBldGh0b29sIFBPUlRfR0VUIE5ldGxpbmsgQVBJIGFuZCBTRlAgU3VwcG9ydCoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IHBhdGNoIHNlcmllcyBoZXJlLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIGBQT1JUX0dFVGAgbmV0bGluayBBUEkgY29tbWFuZCBpbiBldGh0b29sIHRvIGZldGNoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLCBvciAmIzM0O3BvcnRzJiMzNDsuIFdlJiMzOTtyZSBhbHNvIGFkZGluZyBzdXBwb3J0IGZvciBTRlAgcG9ydHMgd2l0aGluIHRoZSBQSFkgZnJhbWV3b3JrLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBzZWN1cml0eSBhbmQgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZS4KCkZpcnN0LCB0aGUgQVBJIGl0c2VsZi4gV2UgaGF2ZSB0aGUgdXN1YWwgZG9jdW1lbnRhdGlvbiB1cGRhdGVzOiBgZXRodG9vbC55YW1sYCB0byBkZWZpbmUgdGhlIG5ldyBlbnVtIGFuZCBhdHRyaWJ1dGVzLCBgZXRodG9vbC1uZXRsaW5rLnJzdGAgYW5kIGBwaHktcG9ydC5yc3RgIHRvIGRlc2NyaWJlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBhbmQgU0ZQIHBvcnRzLCByZXNwZWN0aXZlbHkuIFRoZSBQSFkgZnJhbWV3b3JrIHNlZXMgYSBsb3Qgb2YgY2hhbmdlcywgd2l0aCBuZXcgZnVuY3Rpb25zIGluIGBwaHlfY2Fwcy5jYCwgYHBoeV9kZXZpY2UuY2AsIGBwaHlfbGlua190b3BvbG9neS5jYCwgYW5kIGBwaHlsaW5rLmNgIHJlbGF0ZWQgdG8gU0ZQIG1vZHVsZXMgYW5kIHBvcnQgbWFuYWdlbWVudCwgYXMgd2VsbCBhcyB1cGRhdGVzIHRvIHNldmVyYWwgaGVhZGVyIGZpbGVzLiBUaGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBpbiBgbmV0L2V0aHRvb2wvcG9ydC5jYCwgd2hpY2ggZGVmaW5lcyB0aGUgbmV0bGluayBjb21tYW5kIGBFVEhUT09MX01TR19QT1JUX0dFVGAgaW4gdGhlIHVzZXItc3BhY2UgQVBJLgoKRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgYFBPUlRfR0VUYCBjb21tYW5kIGlzIHRoZSBtYWluIHRhcmdldC4gV2UmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IG5ldGxpbmsgY29tbWFuZCwgd2hpY2ggbWVhbnMgYSBuZXcgYXR0YWNrIHN1cmZhY2UuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2A6IGBwb3J0X3BhcnNlX3JlcXVlc3RgLCBgcG9ydF9wcmVwYXJlX2RhdGFgLCBgcG9ydF9yZXBseV9zaXplYCwgYHBvcnRfZmlsbF9yZXBseWAsIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgLCBgZXRobmxfcG9ydF9kdW1waXRgLCBgZXRobmxfcG9ydF9kdW1wX2RvbmVgLCBgcG9ydF9kdW1wX29uZWAsIGBwb3J0X2R1bXBfb25lX2RldmAsIGFuZCBgcG9ydF9kdW1wX2FsbF9kZXZgLiBXZSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLgoKTGV0JiMzOTtzIGNoZWNrIGBuZXQvZXRodG9vbC9wb3J0LmNgLiBPa2F5LCBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgYGV0aG5sX3BvcnRfZHVtcGl0YCwgYW5kIGBldGhubF9wb3J0X2R1bXBfZG9uZWAgYXJlIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kIGZvciBkaXJlY3QgZnV6emluZyBhY2Nlc3MuIGBwb3J0X3BhcnNlX3JlcXVlc3RgLCBgcG9ydF9wcmVwYXJlX2RhdGFgLCBgcG9ydF9yZXBseV9zaXplYCwgYW5kIGBwb3J0X2ZpbGxfcmVwbHlgIGFyZSBzdGF0aWMsIGJ1dCB1c2VkIHdpdGhpbiBgZXRobmxfcG9ydF9yZXF1ZXN0X29wc2AsIHdoaWNoICppcyogZXhwb3J0ZWQgYW5kIHRoZW4gdXNlZCBieSBgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c2AgaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuY2AuIFNvLCBgZXRobmxfcG9ydF9kdW1waXRgLCBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgYW5kIGBldGhubF9wb3J0X2R1bXBfZG9uZWAgYXJlIGRlZmluaXRlbHkgZ29vZCB0YXJnZXRzLCBhbmQgd2UmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gdHJpZ2dlciB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgZXRobmxfcG9ydF9yZXF1ZXN0X29wc2AsIHdoaWNoIGFyZSBjYWxsZWQgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzLgoKTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyB0byBjb25zaWRlcj8gTGV0JiMzOTtzIHNlZS4uLiB3ZSBoYXZlIGBwaHlfbGlua190b3BvX2FkZF9wb3J0YCBhbmQgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgIGluIGBwaHlfbGlua190b3BvbG9neS5jYCwgYHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNgIGluIGBwaHlfY2Fwcy5jYCwgYW5kIGBwaHlfc2V0X3Vwc3RyZWFtX3BvcnRgIGluIGBwaHlfZGV2aWNlLmNgLiBUaGVzZSBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHNldHVwIG9yIHRyaWdnZXIgZnJvbSBldmVudHMgd2l0aGluIHRoZSBQSFkgc3Vic3lzdGVtLCBidXQgYXJlIGdvb2QgdGFyZ2V0cyB0byBjb25zaWRlciBmb3IgY29tcGxldGVuZXNzLgoKSW4gdGVybXMgb2YgYnVpbGQgY29uZmlndXJhdGlvbiwgYENPTkZJR19FVEhUT09MX05FVExJTktgLCBgQ09ORklHX1BIWUxJQmAsIGFuZCBgQ09ORklHX1BIWUxJTktgIGFyZSB0aGUgZXNzZW50aWFscy4gSSBleHBlY3QgYENPTkZJR19FVEhUT09MX05FVExJTktgIHRvIGJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBlbnN1cmUgdGhpcyBjb2RlIGlzIGJ1aWx0LiBMZXQmIzM5O3Mgc2VlIGhvdyBgbmV0L2V0aHRvb2wvTWFrZWZpbGVgIGhhbmRsZXMgdGhpbmdzLi4uIFllYWgsIGl0IHVuY29uZGl0aW9uYWxseSBidWlsZHMgYHBvcnQub2AgaWYgdGhlIGV0aHRvb2wgbmV0bGluayBjb2RlIGlzIGJ1aWx0LCBzbyB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93IEkgd2FudCB0byBjaGVjayBmb3IgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIHJlc3RyaWN0aW9ucywgSSB3aWxsIHNlYXJjaCBmb3IgIGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCBpbiBgbmV0L0tjb25maWdgIG9yIGBuZXQvZXRodG9vbC9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVRIVE9PTF9ORVRMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz01MDc9Y29uZmlnIEZBSUxPVkVSXG4tLVxubmV0L0tjb25maWctNTE5LVxubmV0L0tjb25maWc6NTIwOmNvbmZpZyBFVEhUT09MX05FVExJTktcbm5ldC9LY29uZmlnLTUyMS1cdGJvb2wgXCYjMzQ7TmV0bGluayBpbnRlcmZhY2UgZm9yIGV0aHRvb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg3MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBmb3IgRVRIVE9PTF9ORVRMSU5LIGluIG5ldC9LY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgRVRIVE9PTF9ORVRMSU5LYCBpcyBoYW5kbGVkIGluIHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGZvciBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCBpdHMgY29udGVudHMgdG8gc2VlIGlmIGBFVEhUT09MX05FVExJTktgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCBhbnl3aGVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVwZW5kZW5jaWVzLCB0aGUgd2F5IGl0JiMzOTtzIGV4cG9zZWQgdG8gdGhlIHVzZXIsIGFuZCBpZiBpdCBoYXMgYW55IGRlZmF1bHRzIG9yIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBmZWF0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxNTpcdFx0ICBmYWlsb3ZlciBuZXRkZXYuIFRoaXMgZW5hYmxlcyBwYXJhdmlydHVhbCBkcml2ZXJzIHRvIHVzZSBhXG4gNTE2Olx0XHQgIFZGIGFzIGFuIGFjY2VsZXJhdGVkIGxvdyBsYXRlbmN5IGRhdGFwYXRoLiBJdCBhbHNvIGFsbG93cyBsaXZlXG4gNTE3Olx0XHQgIG1pZ3JhdGlvbiBvZiBWTXMgd2l0aCBkaXJlY3QgYXR0YWNoZWQgVkZzIGJ5IGZhaWxpbmcgb3ZlciB0byB0aGVcbiA1MTg6XHRcdCAgcGFyYXZpcnR1YWwgZGF0YXBhdGggd2hlbiB0aGUgVkYgaXMgdW5wbHVnZ2VkLlxuIDUxOTpcdFxuIDUyMDpcdGNvbmZpZyBFVEhUT09MX05FVExJTktcbiA1MjE6XHRcdGJvb2wgXCYjMzQ7TmV0bGluayBpbnRlcmZhY2UgZm9yIGV0aHRvb2xcJiMzNDtcbiA1MjI6XHRcdHNlbGVjdCBESU1MSUJcbiA1MjM6XHRcdGRlZmF1bHQgeVxuIDUyNDpcdFx0aGVscFxuIDUyNTpcdFx0ICBBbiBhbHRlcm5hdGl2ZSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGZvciBldGh0b29sIGJhc2VkIG9uIGdlbmVyaWNcbiA1MjY6XHRcdCAgbmV0bGluay4gSXQgcHJvdmlkZXMgYmV0dGVyIGV4dGVuc2liaWxpdHkgYW5kIHNvbWUgbmV3IGZlYXR1cmVzLFxuIDUyNzpcdFx0ICBlLmcuIG5vdGlmaWNhdGlvbiBtZXNzYWdlcy5cbiA1Mjg6XHRcbiA1Mjk6XHRjb25maWcgTkVUREVWX0FERFJfTElTVF9URVNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSBoYXZpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcy4uLmFuZCBpdCBzZWVtcyB0aGUgc3lzdGVtJiMzOTtzIGJlaGF2aW5nIGFjY29yZGluZyB0byBpdHMgZGVmYXVsdCAmIzM5O3kmIzM5OyBzZXR0aW5nLiBUaGlzIGlzbiYjMzk7dCB1bmV4cGVjdGVkLCBidXQgaXQgZG9lc24mIzM5O3QgZ2l2ZSBtZSBtdWNoIGNvbnRleHQgeWV0LiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYWJvdXQgdGhlIGluZmx1ZW5jZSBvZiBgQ09ORklHX1BIWUxJQmA/IElzIHRoYXQgYWN0aXZlLCBhbmQgaG93IG1pZ2h0IHRoYXQgYmUgaW1wYWN0aW5nIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBJJiMzOTttIG9ic2VydmluZz8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uIG5vdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIEkmIzM5O20gc2VlaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQSFlMSUImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTY9Y29uZmlnIFBIWUxJTktcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE1Om1lbnVjb25maWcgUEhZTElCXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNi1cdHRyaXN0YXRlIFwmIzM0O1BIWSBEZXZpY2Ugc3VwcG9ydCBhbmQgaW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz00Nj1jb25maWcgT1BFTl9BTExJQU5DRV9IRUxQRVJTXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDgtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo0OTpjb25maWcgUEhZTElCX0xFRFNcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVx0ZGVmX2Jvb2wgT0ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY2OAoJCQkJCQkJb3V0cHV0OiA3MAoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRXRoZXJuZXQgUG9ydCBEdW1wIEZ1bmN0aW9ucyBhbmQgUEhZTElCIEludGVncmF0aW9uKioKCk9rYXksIHNvIGBQSFlMSUJgIGlzIGFsc28gc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgcmlnaHQ/IExldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZXJhY3QuIEkmIzM5O20gZm9jdXNpbmcgb246CgoqICAgYGV0aG5sX3BvcnRfZHVtcF9zdGFydGAKKiAgIGBldGhubF9wb3J0X2R1bXBpdGAKKiAgIGBldGhubF9wb3J0X2R1bXBfZG9uZWAKKiAgIGBwaHlfbGlua190b3BvX2FkZF9wb3J0YAoqICAgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgCiogICBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AKKiAgIGBwaHlfc2V0X3Vwc3RyZWFtX3BvcnRgCgpSaWdodCwgbm93IHRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgd2hldGhlciB0aGVzZSBhcmUgZXhwb3J0ZWQgZnVuY3Rpb25zIG9yIGp1c3Qgbm9uLXN0YXRpYyB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcy4gTGV0IG1lIHNlZS4uLiBBaGEsIHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMuIFRoZXkgYXJlIHVzZWQgd2l0aGluIGBldGh0b29sX2dlbmxfb3BzYCBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5jYC4gSGFuZyBvbi4uLiBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCBpdHNlbGYgaXMgYWN0dWFsbHkgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AsIGJ1dCBpdCYjMzk7cyAqZGVjbGFyZWQqIGluIGBuZXQvZXRodG9vbC9uZXRsaW5rLmhgLiBZZXMsIG9rYXksIHRoZXkgYXJlIGluZGVlZCBub24tc3RhdGljIGFuZCB2aXNpYmxlIHRvIHRoZSBuZXRsaW5rIGludGVyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGluc2lkZSBgbmV0L2V0aHRvb2wvcG9ydC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7XFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9wb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvcG9ydC5jPTE3MT1wb3J0X2R1bXBfY3R4X2dldChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2V0aHRvb2wvcG9ydC5jLTE3NS1cbm5ldC9ldGh0b29sL3BvcnQuYzoxNzY6aW50IGV0aG5sX3BvcnRfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvZXRodG9vbC9wb3J0LmMtMTc3LXtcbi0tXG5uZXQvZXRodG9vbC9wb3J0LmM9Mjk3PXN0YXRpYyBpbnQgcG9ydF9kdW1wX2FsbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL3BvcnQuYy0zMjYtXG5uZXQvZXRodG9vbC9wb3J0LmM6MzI3OmludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvZXRodG9vbC9wb3J0LmMtMzI4LXtcbi0tXG5uZXQvZXRodG9vbC9wb3J0LmMtMzUzLVxubmV0L2V0aHRvb2wvcG9ydC5jOjM1NDppbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2V0aHRvb2wvcG9ydC5jLTM1NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTgzCgkJCQkJCQlvdXRwdXQ6IDc0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUgd2UgZ28uIEkmIzM5O20gc2VlaW5nIGEgc2VxdWVuY2Ug4oCTIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgLCB0aGVuIGBldGhubF9wb3J0X2R1bXBpdGAsIGFuZCBmaW5hbGx5IGBldGhubF9wb3J0X2R1bXBfZG9uZWAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdGlvbiBvZiBhIGR1bXAgcHJvY2VzcyByZWxhdGVkIHRvIEV0aGVybmV0IHBvcnQgaW5mb3JtYXRpb24sIGxpa2VseSB3aXRoaW4gdGhlIE5ldGxpbmsgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHdob2xlIGN5Y2xlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQuIEhtbSwgd2hhdCBhYm91dCBgZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmNgPyBUaGF0IGZpbGUmIzM5O3MgcmVsZXZhbnQsIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaXQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIGR1bXAgcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSB0aGUgUEhZIGxheWVyIGxpbmsgdG9wb2xvZ3kgaXMgc29tZXRoaW5nIHRoYXQgaXMgZ29pbmcgdG8gbmVlZCB0byBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7XFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYz0zNT1zdGF0aWMgc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICpwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jLTYyLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmM6NjM6aW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtNjQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTkwPUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fYWRkX3BvcnQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtOTEtXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYzo5Mjp2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtOTMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTEwMT1FWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2RlbF9wb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jLTEwMi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jOjEwMzppbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy0xMDQtXHRcdFx0ICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTE3Nj1FWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2FkZF9waHkpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtMTc3LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmM6MTc4OnZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy0xNzktXHRcdFx0ICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNTMKCQkJCQkJCW91dHB1dDogNzIKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIFBIWSBMaW5rIFRvcG9sb2d5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBzZWUgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgIGFuZCBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGAgYXJlIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgZ29vZC4gVGhleSYjMzk7cmUgY2xlYXJseSBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwcm9iYWJseSBieSBzb21lIHVwcGVyLWxldmVsIG5ldHdvcmsgc3RhY2sgb3IgYSBzeXN0ZW0gbWFuYWdlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlIHRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBQSFkgbWFuYWdlbWVudC4KCk5vdywgbXkgbWluZCBzaGlmdHMgc2xpZ2h0bHkuIFdoZXJlIGFyZSB0aGUgY29yZSBjYXBhYmlsaXRpZXMgZGVmaW5lZD8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoZXJlIGlzIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZXNlIG5ldyBmdW5jdGlvbnMgaW4gbXkgYXJlYXMgb2YgZXhwZXJ0aXNlLiBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGBkcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY2AuIEl0JiMzOTtzIGEga2V5IGZpbGUgd2hlcmUgUEhZIGNhcGFiaWxpdGllcyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbnMgYXJlIHVzdWFsbHkgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlc2UgbmV3IHRvcG9sb2d5IGZ1bmN0aW9ucyBoYXZlIGFuIGVmZmVjdCBoZXJlLCBhbmQgaG93LCBpZiBzby4gQSBxdWljayByZXZpZXcgb2YgdGhhdCBmaWxlIGlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7XFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYz03Nz1pbnQgX19pbml0IHBoeV9jYXBzX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0xMjEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzoxMjI6c2l6ZV90IHBoeV9jYXBzX3NwZWVkcyh1bnNpZ25lZCBpbnQgKnNwZWVkcywgc2l6ZV90IHNpemUsXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0xMjMtXHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9MjM2PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX2xvb2t1cCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMjQyLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MjQzOnZvaWQgcGh5X2NhcHNfbGlua21vZGVfbWF4X3NwZWVkKHUzMiBtYXhfc3BlZWQsIHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTI0NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMjYyLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MjYzOmJvb2wgcGh5X2NhcHNfdmFsaWQoaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBjb25zdCB1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0yNjQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTI3Ny0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjI3ODp2b2lkIHBoeV9jYXBzX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nIGNhcHMsIHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTI3OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9MzkwPUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00MDEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzo0MDI6dm9pZCBwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00MDMtXHRcdFx0XHQgICBlbnVtIGV0aHRvb2xfbGlua19tZWRpdW0gbWVkaXVtLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTQyNT1FWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtNDMzLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6NDM0OnUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTQzNS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9NDQ3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTQ1Ny0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjQ1ODp2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00NTktXHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzg4CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBwb2ludHMgYXMgYSBuZXR3b3JrIHN5c3RlbXMgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFBIWSBDYXBhYmlsaXR5IEZpbHRlcmluZyoqCgpBbHJpZ2h0LCBzbyBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AgaGFzIGJlZW4gZXhwb3NlZC4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IHdvbmRlciBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gYmVpbmcgZXhwb3J0ZWQuIEl0IHN1Z2dlc3RzIGEgbW9yZSBjb250cm9sbGVkLCBwZXJoYXBzIGZpbmUtZ3JhaW5lZCwgYXBwcm9hY2ggdG8gbGluayBtb2RlIGZpbHRlcmluZyBhdCB0aGUgUEhZIGxldmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHN5c3RlbS4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBmb3IgaXQ/CgpNeSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIFBIWSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmU/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIHBsYWNlcyB3aGVyZSBQSFkgY2FwYWJpbGl0aWVzIGFyZSBtYW5pcHVsYXRlZC4gVGhpcyB0cmlnZ2VycyBhbiBhc3NvY2lhdGlvbi4gV2hhdCBhYm91dCB0aGF0IGtleSBhcmVhIGZvciBQSFkgZHJpdmVyIG9wZXJhdGlvbnM/IEFoIHllcywgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLiBUaGF0IGZpbGUgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGxpa2VseSB3aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGlzIG5ldyBmdW5jdGlvbiB3b3VsZCBiZSBkZWZpbmVkIG9yIHVzZWQsIG9yIHdoZXJlIGl0cyBlZmZlY3RzIHdvdWxkIGJlIHNlZW4uIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3QgYXJlYSBJIHdpbGwgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNDU9c3RhdGljIHZvaWQgX19pbml0IGZlYXR1cmVzX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwOS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjEwOnZvaWQgcGh5X2RldmljZV9mcmVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIxMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMzg9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGdlbnBoeV9kcml2ZXI7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzOS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjQwOnN0YXRpYyBMSVNUX0hFQUQocGh5X2ZpeHVwX2xpc3QpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNDE6c3RhdGljIERFRklORV9NVVRFWChwaHlfZml4dXBfbG9jayk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI0Mi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjQzPXN0YXRpYyBib29sIHBoeV9kcnZfd29sX2VuYWJsZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1MS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjUyOmJvb2wgcGh5X21heV93YWtldXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjUzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM3OD1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IG1kaW9fYnVzX3BoeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDI2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0Mjc6c3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG1kaW9fYnVzX3BoeV9wbV9vcHMsIG1kaW9fYnVzX3BoeV9zdXNwZW5kLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MjgtXHRcdFx0IG1kaW9fYnVzX3BoeV9yZXN1bWUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDM4PXN0YXRpYyBpbnQgcGh5X3JlZ2lzdGVyX2ZpeHVwKGNvbnN0IGNoYXIgKmJ1c19pZCwgdTMyIHBoeV91aWQsIHUzMiBwaHlfdWlkX21hc2ssXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00NTktLyogUmVnaXN0ZXJzIGEgZml4dXAgdG8gYmUgcnVuIG9uIGFueSBQSFkgd2l0aCB0aGUgVUlEIGluIHBoeV91aWQgKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NDYwOmludCBwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX3VpZCh1MzIgcGh5X3VpZCwgdTMyIHBoeV91aWRfbWFzayxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDYxLVx0XHRcdCAgICAgICBpbnQgKCpydW4pKHN0cnVjdCBwaHlfZGV2aWNlICopKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDY1PUVYUE9SVF9TWU1CT0wocGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl91aWQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDY3LS8qIFJlZ2lzdGVycyBhIGZpeHVwIHRvIGJlIHJ1biBvbiB0aGUgUEhZIHdpdGggaWQgc3RyaW5nIGJ1c19pZCAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0Njg6aW50IHBoeV9yZWdpc3Rlcl9maXh1cF9mb3JfaWQoY29uc3QgY2hhciAqYnVzX2lkLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00NjktXHRcdFx0ICAgICAgaW50ICgqcnVuKShzdHJ1Y3QgcGh5X2RldmljZSAqKSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTQ4OD1zdGF0aWMgaW50IHBoeV9zY2FuX2ZpeHVwcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTIxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo1MjI6aW50IGdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTUyMy1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU2MT1waHlfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01NjYtfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo1Njc6c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9pZCk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU2OC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU3MD1waHlfaW50ZXJmYWNlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTgxLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NTgyOnN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfaW50ZXJmYWNlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTgzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NTg1PXBoeV9oYXNfZml4dXBzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU5MS19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjU5MjpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocGh5X2hhc19maXh1cHMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01OTMtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU5ND1zdGF0aWMgc3NpemVfdCBwaHlfZGV2X2ZsYWdzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNjAxLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NjAyOnN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfZGV2X2ZsYWdzKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNjAzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NjE3PXN0YXRpYyBzc2l6ZV90IG1tZCMjbiMjX2RldmljZV9pZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgXFxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTYyMy19IFxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjYyNDpzdGF0aWMgREVWSUNFX0FUVFJfUk8obW1kIyNuIyNfZGV2aWNlX2lkKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy02MjUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDAyPXN0YXRpYyBpbnQgZ2V0X3BoeV9jMjJfaWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiAqcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTAzMy0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTAzNDppbnQgZndub2RlX2dldF9waHlfaWQoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgdTMyICpwaHlfaWQpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwMzUte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTEwMz1FWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTQyPUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTUxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTUyOnZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE1My17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTY0PUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZW1vdmUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE3MzppbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNzQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTIxMj1zdGF0aWMgdm9pZCBwaHlfcHJlcGFyZV9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjI0LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjI1OmludCBwaHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIyNi1cdFx0ICAgICAgIHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyODY9RVhQT1JUX1NZTUJPTChwaHlfY29ubmVjdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjkyLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjkzOnZvaWQgcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI5NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzI1PXN0YXRpYyBpbnQgcGh5X3BvbGxfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNDAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzNDE6aW50IHBoeV9pbml0X2h3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNDIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTM4OD1FWFBPUlRfU1lNQk9MKHBoeV9pbml0X2h3KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM4OS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM5MDp2b2lkIHBoeV9hdHRhY2hlZF9pbmZvKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTEte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTM5ND1FWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hlZF9pbmZvKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTYtI2RlZmluZSBBVFRBQ0hFRF9GTVQgXCYjMzQ7YXR0YWNoZWQgUEhZIGRyaXZlciAlcyhtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JXMpXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTc6Y2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTQxNz1FWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hlZF9pbmZvX2lycSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MTgtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE0MTk6dm9pZCBwaHlfYXR0YWNoZWRfcHJpbnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MjAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTQ3MD1waHlfc3RhbmRhbG9uZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDc2LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTQ3NzpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocGh5X3N0YW5kYWxvbmUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDc4LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTg0Nz1zdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg2Ni0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg2NzppbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg2OC1cdFx0ICAgICAgdTMyIGZsYWdzLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjAyOD1FWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMzYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIwMzc6dm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMzgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjExMD1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTExLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMTEyOmludCBwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTEzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIxMzY9RVhQT1JUX1NZTUJPTChwaHlfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIxMzctXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIxMzg6aW50IF9fcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTM5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIxNTQ9RVhQT1JUX1NZTUJPTChfX3BoeV9yZXN1bWUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTU1LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMTU2OmludCBwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIxNTcte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjE2Nj1FWFBPUlRfU1lNQk9MKHBoeV9yZXN1bWUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjE3Ni0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjE3NzppbnQgcGh5X3Jlc2V0X2FmdGVyX2Nsa19lbmFibGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjE3OC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMjU2PXN0YXRpYyBpbnQgZ2VucGh5X2MzN19jb25maWdfYWR2ZXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMjg3LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMjg4OmludCBnZW5waHlfc2V0dXBfZm9yY2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIyODkte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjMwMj1zdGF0aWMgaW50IGdlbnBoeV9zZXR1cF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzMzMtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIzMzQ6aW50IGdlbnBoeV9yZWFkX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzM1LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIzNzk9RVhQT1JUX1NZTUJPTChnZW5waHlfcmVhZF9tYXN0ZXJfc2xhdmUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjM4NC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjM4NTppbnQgZ2VucGh5X3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzg2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIzOTE9RVhQT1JUX1NZTUJPTChnZW5waHlfcmVzdGFydF9hbmVnKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzOTktICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI0MDA6aW50IGdlbnBoeV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydClcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQwMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNDIxPUVYUE9SVF9TWU1CT0woZ2VucGh5X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQzMS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjQzMjppbnQgX19nZW5waHlfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBjaGFuZ2VkKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNDMzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI0Nzg9RVhQT1JUX1NZTUJPTChfX2dlbnBoeV9jb25maWdfYW5lZyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNDg4LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNDg5OmludCBnZW5waHlfYzM3X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI0OTAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjUyNj1FWFBPUlRfU1lNQk9MKGdlbnBoeV9jMzdfY29uZmlnX2FuZWcpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjUzNS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjUzNjppbnQgZ2VucGh5X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNTM3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI1NDI9RVhQT1JUX1NZTUJPTChnZW5waHlfYW5lZ19kb25lKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1NTEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI1NTI6aW50IGdlbnBoeV91cGRhdGVfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNTUzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI1OTU9RVhQT1JUX1NZTUJPTChnZW5waHlfdXBkYXRlX2xpbmspO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNTk2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNTk3OmludCBnZW5waHlfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjU5OC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNjQyPUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfbHBhKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI2NTAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI2NTE6aW50IGdlbnBoeV9yZWFkX3N0YXR1c19maXhlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNjUyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI2NzI9RVhQT1JUX1NZTUJPTChnZW5waHlfcmVhZF9zdGF0dXNfZml4ZWQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY4Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjY4MzppbnQgZ2VucGh5X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI2ODQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjcyMz1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZWFkX3N0YXR1cyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNzM1LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNzM2OmludCBnZW5waHlfYzM3X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgKmNoYW5nZWQpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI3Mzcte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mjc4Nz1FWFBPUlRfU1lNQk9MKGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjc5Ny0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mjc5ODppbnQgZ2VucGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjc5OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yODI2PUVYUE9SVF9TWU1CT0woZ2VucGh5X3NvZnRfcmVzZXQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yODI3LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyODI4OmlycXJldHVybl90IGdlbnBoeV9oYW5kbGVfaW50ZXJydXB0X25vX2FjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yODI5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI4Mzk9RVhQT1JUX1NZTUJPTChnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2spO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjg0OS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mjg1MDppbnQgZ2VucGh5X3JlYWRfYWJpbGl0aWVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI4NTEte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mjg5ND1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZWFkX2FiaWxpdGllcyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTAxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTAyOmludCBnZW5waHlfcmVhZF9tbWRfYzQ1KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sIHUxNiByZWdudW0pXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MDMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjkwOT1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZWFkX21tZF9jNDUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTEwLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTExOmludCBnZW5waHlfd3JpdGVfbW1kX2M0NShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2bnVtLCB1MTYgcmVnbnVtLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTEyLVx0XHRcdCB1MTYgdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjkxOT1FWFBPUlRfU1lNQk9MKGdlbnBoeV93cml0ZV9tbWRfYzQ1KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MjQtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI5MjU6aW50IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZhZCwgdTE2IHJlZ251bSlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjkyNi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTI5PUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjkzMC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjkzMTppbnQgZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZudW0sXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MzItXHRcdFx0XHQgdTE2IHJlZ251bSwgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI5MzY9RVhQT1JUX1NZTUJPTChnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjkzNy1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjkzODppbnQgZ2VucGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjkzOS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTQyPUVYUE9SVF9TWU1CT0woZ2VucGh5X3N1c3BlbmQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTQzLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTQ0OmludCBnZW5waHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5NDUte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mjk0OD1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZXN1bWUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTQ5LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTUwOmludCBnZW5waHlfbG9vcGJhY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsIGludCBzcGVlZClcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjk1MS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTc5PUVYUE9SVF9TWU1CT0woZ2VucGh5X2xvb3BiYWNrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5ODktICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI5OTA6dm9pZCBwaHlfcmVtb3ZlX2xpbmtfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgbGlua19tb2RlKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTkxLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI5OTc9c3RhdGljIHZvaWQgcGh5X2NvcHlfcGF1c2VfYml0cyh1bnNpZ25lZCBsb25nICpkc3QsIHVuc2lnbmVkIGxvbmcgKnNyYylcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwMTEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMwMTI6dm9pZCBwaHlfYWR2ZXJ0aXNlX3N1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMDEzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMwMjA9RVhQT1JUX1NZTUJPTChwaHlfYWR2ZXJ0aXNlX3N1cHBvcnRlZCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMDMxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMDMyOnZvaWQgcGh5X2FkdmVydGlzZV9lZWVfYWxsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwMzMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzAzNz1FWFBPUlRfU1lNQk9MX0dQTChwaHlfYWR2ZXJ0aXNlX2VlZV9hbGwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzA1OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzA1OTp2b2lkIHBoeV9zdXBwb3J0X2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMDYwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMwODA9RVhQT1JUX1NZTUJPTChwaHlfc3VwcG9ydF9lZWUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzA4OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzA4OTp2b2lkIHBoeV9kaXNhYmxlX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMDkwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMwOTc9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2Rpc2FibGVfZWVlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMDUtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMxMDY6dm9pZCBwaHlfc3VwcG9ydF9zeW1fcGF1c2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzEwNy17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMTExPUVYUE9SVF9TWU1CT0wocGh5X3N1cHBvcnRfc3ltX3BhdXNlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMTgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMxMTk6dm9pZCBwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMjAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzEyMz1FWFBPUlRfU1lNQk9MKHBoeV9zdXBwb3J0X2FzeW1fcGF1c2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzEzNS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzEzNjp2b2lkIHBoeV9zZXRfc3ltX3BhdXNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcngsIGJvb2wgdHgsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMzctXHRcdCAgICAgICBib29sIGF1dG9uZWcpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMTQ3PUVYUE9SVF9TWU1CT0wocGh5X3NldF9zeW1fcGF1c2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzE1OS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzE2MDp2b2lkIHBoeV9zZXRfYXN5bV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJ4LCBib29sIHR4KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMTYxLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMxNzE9RVhQT1JUX1NZTUJPTChwaHlfc2V0X2FzeW1fcGF1c2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzE4MS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzE4Mjpib29sIHBoeV92YWxpZGF0ZV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMTgzLVx0XHRcdHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzE5Nj1FWFBPUlRfU1lNQk9MKHBoeV92YWxpZGF0ZV9wYXVzZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMjA5LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMjEwOnZvaWQgcGh5X2dldF9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICp0eF9wYXVzZSwgYm9vbCAqcnhfcGF1c2UpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMyMTEte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzIzMD1zdGF0aWMgaW50IHBoeV9nZXRfdTMyX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwgdTMyICp2YWwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMjUwLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMjUxOnMzMiBwaHlfZ2V0X2ludGVybmFsX2RlbGF5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGludCAqZGVsYXlfdmFsdWVzLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMjUyLVx0XHRcdCAgIGludCBzaXplLCBib29sIGlzX3J4KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzMxMz1FWFBPUlRfU1lNQk9MKHBoeV9nZXRfaW50ZXJuYWxfZGVsYXkpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzMyMy0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzMyNDppbnQgcGh5X2dldF90eF9hbXBsaXR1ZGVfZ2FpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMzMjUtXHRcdFx0ICAgICAgZW51bSBldGh0b29sX2xpbmtfbW9kZV9iaXRfaW5kaWNlcyBsaW5rbW9kZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMzMzc9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2dldF90eF9hbXBsaXR1ZGVfZ2Fpbik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMzQ2LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMzQ3OmludCBwaHlfZ2V0X21hY190ZXJtaW5hdGlvbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMzNDgtXHRcdFx0ICAgIHUzMiAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzcyOD1FWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM3MzUtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM3MzY6dm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzM3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTQwNTI9c3RhdGljIHZvaWQgcGh5X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZHJpdmVyICpkcnYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDU2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0MDU3OmludCBwaHlfZHJpdmVyc19yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqbmV3X2RyaXZlciwgaW50IG4sXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNTgtXHRcdFx0IHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDA3Mj1FWFBPUlRfU1lNQk9MKHBoeV9kcml2ZXJzX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDA3My1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NDA3NDp2b2lkIHBoeV9kcml2ZXJzX3VucmVnaXN0ZXIoc3RydWN0IHBoeV9kcml2ZXIgKmRydiwgaW50IG4pXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM2MwoJCQkJCQkJb3V0cHV0OiA3MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBoeSBEcml2ZXIgRXhwb3J0IFN0YXR1cyoqCgpBbHJpZ2h0LCBzbyBgcGh5X3NldF91cHN0cmVhbV9wb3J0YCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCBub3RlZC4gSSYjMzk7bSBtb3Zpbmcgb24gdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIFBIWSBzdWJzeXN0ZW0uIFRoYXQgbGVhZHMgbWUgdG8gaW1tZWRpYXRlbHkgd29uZGVyIGFib3V0IHRoZSByb2xlIG9mIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYC4gSSBuZWVkIHRvIGFzc2VzcyBob3cgdGhlIGV4cG9ydCBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBmdW5jdGlvbmFsaXR5IG1hbmFnZWQgYnkgYHBoeWxpbmsuY2AuIERvZXMgaXQgaW1wYWN0IGxpbmsgc3RhdGUgaGFuZGxpbmcsIGF1dG9uZWdvdGlhdGlvbiBzZXR1cCwgb3IgYW55IG90aGVyIGNyaXRpY2FsIFBIWSBvcGVyYXRpb25hbCBhcmVhcyB0aGF0IHRoYXQgZmlsZSB0eXBpY2FsbHkgaGFuZGxlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgZmxvdyB0byBkZXRlcm1pbmUgaWYgdGhpcyBleHBvcnQgY3JlYXRlcyBhbnkgb3Bwb3J0dW5pdGllcyBvciwgcG90ZW50aWFsbHksIHVuZm9yZXNlZW4gY29uc2VxdWVuY2VzIHdpdGhpbiB0aGUgUEhZIGZyYW1ld29yay4gTXkgdGhvdWdodCBwcm9jZXNzIGlzIG5vdyBjZW50ZXJpbmcgb24gdGhlIGludGVyY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSpcXHMmIzQzO1xcKipbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTE0MD1zdGF0aWMgY29uc3QgcGh5X2ludGVyZmFjZV90IHBoeWxpbmtfc2ZwX2ludGVyZmFjZV9wcmVmZXJlbmNlW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNTMtXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE1NDpzdGF0aWMgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0socGh5bGlua19zZnBfaW50ZXJmYWNlcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE1NS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE2MS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTYyOnZvaWQgcGh5bGlua19zZXRfcG9ydF9tb2Rlcyh1bnNpZ25lZCBsb25nICptYXNrKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNjMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mzc0PXN0YXRpYyB2b2lkIHBoeWxpbmtfY2Fwc190b19saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzk1LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozOTY6dm9pZCBwaHlsaW5rX2xpbWl0X21hY19zcGVlZChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIG1heF9zcGVlZClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzk3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTk4Mz1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19wb2xsX3N0YXJ0KHN0cnVjdCBwaHlsaW5rICpwbClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTk4OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6OTg5OmludCBwaHlsaW5rX3Bjc19wcmVfaW5pdChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy05OTAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTgxNj1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4NTctICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4NTg6aW50IHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IHBoeWxpbmsgKnBsLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODU5LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTk5Mz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2NyZWF0ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMDAzLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMDA0OnZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjAwNS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMDE0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZGVzdHJveSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMDI0LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMDI1OmJvb2wgcGh5bGlua19leHBlY3RzX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIwMjYte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjI2Mz1zdGF0aWMgaW50IHBoeWxpbmtfYXR0YWNoX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjk2LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjk3OmludCBwaHlsaW5rX2Nvbm5lY3RfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjI5OC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzE3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY29ubmVjdF9waHkpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjMzMC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjMzMTppbnQgcGh5bGlua19vZl9waHlfY29ubmVjdChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzMzItXHRcdFx0ICAgdTMyIGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjMzNj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX29mX3BoeV9jb25uZWN0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzNDgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIzNDk6aW50IHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0KHN0cnVjdCBwaHlsaW5rICpwbCxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjM1MC1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzOTU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19md25vZGVfcGh5X2Nvbm5lY3QpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQwMy0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQwNDp2b2lkIHBoeWxpbmtfZGlzY29ubmVjdF9waHkoc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDA1LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI0MzA9c3RhdGljIHZvaWQgcGh5bGlua19saW5rX2NoYW5nZWQoc3RydWN0IHBoeWxpbmsgKnBsLCBib29sIHVwLCBjb25zdCBjaGFyICp3aGF0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ0NS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ0Njp2b2lkIHBoeWxpbmtfbWFjX2NoYW5nZShzdHJ1Y3QgcGh5bGluayAqcGwsIGJvb2wgdXApXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI0NDcte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjQ1MD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21hY19jaGFuZ2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ2Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ2Mzp2b2lkIHBoeWxpbmtfcGNzX2NoYW5nZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgYm9vbCB1cClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ2NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNDcyPXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlsaW5rX2xpbmtfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ4OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ4OTp2b2lkIHBoeWxpbmtfc3RhcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDkwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI1NDU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zdGFydCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTU4LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTU5OnZvaWQgcGh5bGlua19zdG9wKHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU2MC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNTc5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3RvcCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTg4LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTg5OnZvaWQgcGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhzdHJ1Y3QgcGh5bGluayAqcGwpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1OTAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjYwOD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MTctICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2MTg6dm9pZCBwaHlsaW5rX3J4X2Nsa19zdG9wX3VuYmxvY2soc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjE5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI2NTA9c3RhdGljIGJvb2wgcGh5bGlua19waHlfcG1fc3BlZWRfY3RybChzdHJ1Y3QgcGh5bGluayAqcGwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjcyLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjczOnZvaWQgcGh5bGlua19zdXNwZW5kKHN0cnVjdCBwaHlsaW5rICpwbCwgYm9vbCBtYWNfd29sKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjc0LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI3MDk9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zdXNwZW5kKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3MTgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI3MTk6dm9pZCBwaHlsaW5rX3ByZXBhcmVfcmVzdW1lKHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjcyMC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNzM0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcHJlcGFyZV9yZXN1bWUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjc0Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjc0Mzp2b2lkIHBoeWxpbmtfcmVzdW1lKHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjc0NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNzc3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcmVzdW1lKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3ODctICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI3ODg6dm9pZCBwaHlsaW5rX2V0aHRvb2xfZ2V0X3dvbChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjc4OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yODE0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfd29sKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI4MjYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI4Mjc6aW50IHBoeWxpbmtfZXRodG9vbF9zZXRfd29sKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yODI4LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5NDY9c3RhdGljIHZvaWQgcGh5bGlua19nZXRfa3NldHRpbmdzKGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk2OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjk2OTppbnQgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoc3RydWN0IHBoeWxpbmsgKnBsLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTcwLVx0XHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMwMTQ9c3RhdGljIGJvb2wgcGh5bGlua192YWxpZGF0ZV9wY3NfaW5iYW5kX2F1dG9uZWcoc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzAzOC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzAzOTppbnQgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoc3RydWN0IHBoeWxpbmsgKnBsLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMDQwLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMyMDI9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzIxNC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzIxNTppbnQgcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQoc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMjE2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMyMjc9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX253YXlfcmVzZXQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzIzMy0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzIzNDp2b2lkIHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgcGh5bGluayAqcGwsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyMzUtXHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMjQzPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMjQ5LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjUwOmludCBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMjUxLVx0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzI5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzQwLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMzQxOmludCBwaHlsaW5rX2dldF9lZWVfZXJyKHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM0Mi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzUyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZ2V0X2VlZV9lcnIpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM1OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM1OTppbnQgcGh5bGlua19ldGh0b29sX2dldF9lZWUoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZWUpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzNjAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM3OD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzg0LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMzg1OmludCBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVlZSlcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM4Ni17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNTUyPXN0YXRpYyBpbnQgcGh5bGlua19taWlfd3JpdGUoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBpbnQgcGh5X2lkLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzU4Ni0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzU4NzppbnQgcGh5bGlua19taWlfaW9jdGwoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzU4OC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNjQ1PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2lvY3RsKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM2NTgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM2NTk6aW50IHBoeWxpbmtfc3BlZWRfZG93bihzdHJ1Y3QgcGh5bGluayAqcGwsIGJvb2wgc3luYylcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzY2MC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNjcwPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3BlZWRfZG93bik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNjgxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNjgyOmludCBwaHlsaW5rX3NwZWVkX3VwKHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzY4My17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00MDk1PXN0YXRpYyBzdHJ1Y3Qge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDExMC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDExMTp2b2lkIHBoeWxpbmtfcmVzb2x2ZV9jNzMoc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQxMTIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDE1OD1zdGF0aWMgdm9pZCBwaHlsaW5rX2RlY29kZV9zZ21paV93b3JkKHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDE5NC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDE5NTp2b2lkIHBoeWxpbmtfZGVjb2RlX3VzeGdtaWlfd29yZChzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDE5Ni1cdFx0XHRcdCB1aW50MTZfdCBscGEpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00MjQwPXN0YXRpYyB2b2lkIHBoeWxpbmtfZGVjb2RlX3VzZ21paV93b3JkKHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDI3OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDI3OTp2b2lkIHBoeWxpbmtfbWlpX2MyMl9wY3NfZGVjb2RlX3N0YXRlKHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MjgwLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG5lZ19tb2RlLCB1MTYgYm1zciwgdTE2IGxwYSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQzMjY9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM0Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDM0Mzp2b2lkIHBoeWxpbmtfbWlpX2MyMl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBtZGlvX2RldmljZSAqcGNzLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MzQ0LVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDM1OD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21paV9jMjJfcGNzX2dldF9zdGF0ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MzczLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0Mzc0OmludCBwaHlsaW5rX21paV9jMjJfcGNzX2VuY29kZV9hZHZlcnRpc2VtZW50KHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQzNzUtXHRcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00Mzk4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2MyMl9wY3NfZW5jb2RlX2FkdmVydGlzZW1lbnQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDQxMS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDQxMjppbnQgcGh5bGlua19taWlfYzIyX3Bjc19jb25maWcoc3RydWN0IG1kaW9fZGV2aWNlICpwY3MsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ0MTMtXHRcdFx0ICAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00NDQyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2MyMl9wY3NfY29uZmlnKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ0NTQtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQ0NTU6dm9pZCBwaHlsaW5rX21paV9jMjJfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IG1kaW9fZGV2aWNlICpwY3MpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ0NTYte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDQ2NT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21paV9jMjJfcGNzX2FuX3Jlc3RhcnQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NDY2LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0NDY3OnZvaWQgcGh5bGlua19taWlfYzQ1X3Bjc19nZXRfc3RhdGUoc3RydWN0IG1kaW9fZGV2aWNlICpwY3MsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ0NjgtXHRcdFx0XHQgICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQ0OTQ9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19taWlfYzQ1X3Bjc19nZXRfc3RhdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDUwOC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDUwOTp2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4oc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NTEwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQ1MTU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19yZXBsYXlfbGlua19iZWdpbik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NTMxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0NTMyOnZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NTMzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0ODAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlbGV2YW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlOgoKKiAgIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgCiogICBgZXRobmxfcG9ydF9kdW1waXRgCiogICBgZXRobmxfcG9ydF9kdW1wX2RvbmVgCiogICBgcGh5X2xpbmtfdG9wb19hZGRfcG9ydGAKKiAgIGBwaHlfbGlua190b3BvX2RlbF9wb3J0YAoqICAgYHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNgCiogICBgcGh5X3NldF91cHN0cmVhbV9wb3J0YAoKSSBxdWlja2x5IHJlYWxpemVkIHRoZSBmaXJzdCB0aHJlZSBhcmUgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AuIEkgY2hlY2tlZCBmb3Igb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSwgYnV0IEkgY29uZmlybWVkIHRoYXQgdGhvc2UgYXJlIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb25zLgoKSSB3YXMgYnJpZWZseSBjb25jZXJuZWQgYWJvdXQgdGhlIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLCBsaWtlIGBwb3J0X3BhcnNlX3JlcXVlc3RgLCBgcG9ydF9wcmVwYXJlX2RhdGFgLCBgcG9ydF9yZXBseV9zaXplYCwgYW5kIGBwb3J0X2ZpbGxfcmVwbHlgLCB1c2VkIHdpdGhpbiBgbmV0L2V0aHRvb2wvcG9ydC5jYC4gQWx0aG91Z2ggdGhleSBhcmUgc3RhdGljLCBJIHJlY29nbml6ZWQgdGhleSYjMzk7cmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYGV0aG5sX3BvcnRfcmVxdWVzdF9vcHNgLCBzbyB0aGV5IGxpa2VseSBhcmVuJiMzOTt0IGlubGluZWQuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgZW1waGFzaXplcyBwcmlvcml0aXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLCBzbyBJJiMzOTttIHN0aWNraW5nIHdpdGggdGhlIG9yaWdpbmFsIGxpc3QuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgd2lsbCBiZSB0aGUgY29yZSBvZiB0aGUgYGRvaXRgIGNvbW1hbmQsIHNvIEkmIzM5O2xsIGtlZXAgdGhlbSBpbiBtaW5kLCBidXQgd29uJiMzOTt0IGluY2x1ZGUgdGhlbSBpbiB0aGUgZmluYWwgbGlzdCBmb3Igbm93LiBgZXRobmxfZGVmYXVsdF9kb2l0YCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgdG8gdGhhdCBsb2dpYy4KClRoZW4gSSBjb25zaWRlcmVkIG90aGVyIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AgYW5kIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCBsaWtlIGBwaHlfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlfZGVsX3NmcF9tb2RfcG9ydGAsIGBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0YCwgZXRjLiBidXQgdGhleSB3ZXJlIGFsbCBzdGF0aWMsIHNvIEkgaWdub3JlZCB0aGVtLgoKU28gSSBhbSBrZWVwaW5nIG15IGluaXRpYWwgbGlzdC4KCkZvciB0aGUgY29uZmlncywgSSYjMzk7bGwgbmVlZCBgRVRIVE9PTF9ORVRMSU5LYCwgYFBIWUxJQmAsIGFuZCBwb3NzaWJseSBgUEhZTElOS2AuIExldCBtZSBkb3VibGUtY2hlY2sgYFBIWUxJTktgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEhZTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjY6Y29uZmlnIFBIWUxJTktcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTctXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIFNGUCBQb3J0IFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGlzIFNGUCBwb3J0IHN1cHBvcnQgcGF0Y2guIEZpcnN0LCBgUEhZTElOS2AgaXMgdHJpc3RhdGUsIHNvIHRoYXQgZGVmaW5pdGVseSBnZXRzIGluY2x1ZGVkLiBMZXQmIzM5O3Mgc2VlLi4uIGBFVEhUT09MX05FVExJTktgIGlzIGRlZmF1bHQgeWVzLCBidXQgSSYjMzk7bSBnb2luZyB0byBsaXN0IGl0IGFueXdheSwganVzdCB0byBiZSB0aG9yb3VnaC4gVGhlbiwgYFBIWUxJQmAgYW5kIGBQSFlMSU5LYCBhcmUgYm90aCB0cmlzdGF0ZSwgc28gd2UgYWRkIHRob3NlIGFzIHdlbGwuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vdGhpbmcgZWxzZSByZXF1aXJlZDsgaXMgdGhlcmUgc29tZXRoaW5nIGxpa2UgYE1BQ0JgIG9yIGFub3RoZXIgZHJpdmVyIHRoYXQgd291bGQgbmVlZCB0byBiZSBlbmFibGVkIGZvciBhbiBTRlAgdGVzdD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyBjb21wbGV0ZWx5IHNlbGYgY29udGFpbmVkLiBSaWdodCwgdGhlIHBhdGNoIGFkZHMgU0ZQIHBvcnQgc3VwcG9ydCwgc28gbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSB0aGluayBJIHdpbGwgbmVlZCB0byBjaGVjayBpZiBgQ09ORklHX1NGUGAgaXMgZXZlbiByZXF1aXJlZCwgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIGluY2x1ZGUgdGhhdCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNGUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NjU9Y29uZmlnIFJVU1RfUEhZTElCX0FCU1RSQUNUSU9OU1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTcyLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NzM6Y29uZmlnIFNGUFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzQtXHR0cmlzdGF0ZSBcJiMzNDtTRlAgY2FnZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlNGUCBDYWdlIEVuYWJsZW1lbnQgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIGRlZmluaXRlbHkgcmVsYXRlZCB0byB0aGUgU0ZQIGNhZ2Ugc3VwcG9ydC4gSSBuZWVkIHRvIGdldCB0aGlzIHJpZ2h0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHNvbGlkIGFmZmlybWF0aW9uOiB5ZXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19TRlBgIGlzIGVuYWJsZWQuIFRoYXQgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBmaXJzdCBzdGVwLiBOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgZGV0YWlscyBmb3IgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbj8gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgaW4gdGhlIG5ldHdvcmsgUEhZIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBvcGVuIHVwIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgSSBjYW4gdW5jb3ZlciByZWdhcmRpbmcgdGhlIGBTRlBgIEtjb25maWcgb3B0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHQgICAgICAgICAgQWRkcyBzdXBwb3J0IG5lZWRlZCBmb3IgUEhZIGRyaXZlcnMgd3JpdHRlbiBpbiBSdXN0LiBJdCBwcm92aWRlc1xuICA3MTpcdCAgICAgICAgICBhIHdyYXBwZXIgYXJvdW5kIHRoZSBDIHBoeWxpYiBjb3JlLlxuICA3MjpcdFxuICA3MzpcdGNvbmZpZyBTRlBcbiAgNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O1NGUCBjYWdlIHN1cHBvcnRcJiMzNDtcbiAgNzU6XHRcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBQSFlMSU5LXG4gIDc2Olx0XHRkZXBlbmRzIG9uIEhXTU9OIHx8IEhXTU9OPW5cbiAgNzc6XHRcdHNlbGVjdCBNRElPX0kyQ1xuICA3ODpcdFxuICA3OTpcdGNvbW1lbnQgXCYjMzQ7TUlJIFBIWSBkZXZpY2UgZHJpdmVyc1wmIzM0O1xuICA4MDpcdFxuICA4MTpcdGNvbmZpZyBBUzIxWFhYX1BIWVxuICA4MjpcdFx0dHJpc3RhdGUgXCYjMzQ7QWVvbnNlbWkgQVMyMXh4eCBQSFlzXCYjMzQ7XG4gIDgzOlx0XHRoZWxwXG4gIDg0Olx0XHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgQWVvbnNlbWkgQVMyMXh4eCBQSFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTI5CgkJCQkJCQlvdXRwdXQ6IDIxMQoJCQkJCQkJdGhvdWdodHM6IDQwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU0ZQIEludGVncmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIFNGUCBzdXBwb3J0IHdpdGhpbiB0aGUgUEhZIGZyYW1ld29yayBhbmQgZXhwb3NlcyBhIG5ldyBuZXRsaW5rIEFQSSBmb3IgZ2V0dGluZyBwaHlzaWNhbCBwb3J0IGluZm9ybWF0aW9uLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgQ09ORklHX1NGUGAgKmRlZmluaXRlbHkqIGRlcGVuZHMgb24gYEkyQ2AgYW5kIGBQSFlMSU5LYC4gIEkgc2hvdWxkIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRob3NlIGRlcGVuZGVuY2llcyBpbiBteSBidWlsZC4gQW5kIEkmIzM5O2xsIGFkZCBgUEhZTElCYCwgYEVUSFRPT0xfTkVUTElOS2AsIGFuZCBvZiBjb3Vyc2UgYFNGUGAgaXRzZWxmLgoKVGhlIGNvcmUgb2YgdGhpcyBpcyB0aGUgbmV3IGBQT1JUX0dFVGAgY29tbWFuZCBpbiBldGh0b29sIG5ldGxpbmsuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBtYWpvciBvbmUgc2luY2Ugd2UmIzM5O3JlIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggdGhlIFBIWS9waHlsaW5rIGxvZ2ljIHRoYXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuIFRyYW5zbGF0aW9uOiAqVGhpcyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgZnV6emluZy4qICBXZSYjMzk7cmUgZXhwb3NpbmcgbmV3IEFQSXMsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyByb2J1c3QuCgpMZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIHNwZWNpZmljIHN5bWJvbHMgSSBzaG91bGQgZm9jdXMgb24gZm9yIGZ1enppbmcgYW5kIGNvdmVyYWdlLiBJJiMzOTttIHRoaW5raW5nOgoKKiAgIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgCiogICBgZXRobmxfcG9ydF9kdW1waXRgCiogICBgZXRobmxfcG9ydF9kdW1wX2RvbmVgCiogICBgcGh5X2xpbmtfdG9wb19hZGRfcG9ydGAKKiAgIGBwaHlfbGlua190b3BvX2RlbF9wb3J0YAoqICAgYHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNgCiogICBgcGh5X3NldF91cHN0cmVhbV9wb3J0YAoKVGhvc2Ugc2VlbSBsaWtlIHRoZSBjcnVjaWFsIGVudHJ5IGFuZCBleGl0IHBvaW50cyBmb3IgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LgoKQW5kIGxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayBteSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llczoKCiogICBgRVRIVE9PTF9ORVRMSU5LYCAtIG9idmlvdXNseSBhIGtleSBvbmUuCiogICBgUEhZTElCYCAtIGZ1bmRhbWVudGFsLCBmb3IgdGhlIFBIWSBmcmFtZXdvcmsgaXRzZWxmLgoqICAgYFBIWUxJTktgIC0gdGhlIGxpbmsgYmV0d2VlbiB0aGUgUEhZIGFuZCB0aGUgbmV0d29yay4KKiAgIGBTRlBgIC0gdGhlIGZlYXR1cmUgdGhhdCYjMzk7cyBkcml2aW5nIHRoZSBjaGFuZ2UuCiogICBgSTJDYCAtIGZvciBTRlAvbW9kdWxlIGludGVyYWN0aW9uLgoKSG1tLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHBvcnRfcGFyc2VfcmVxdWVzdGAgYW5kIHRoZSBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIGludm9sdmVkIGluIHByb2Nlc3NpbmcgcmVxdWVzdHMgYXJlIGV2ZW4gd29ydGggY29uc2lkZXJpbmcuIFRoZXkmIzM5O3JlIHN0YXRpYywgc28gaWYgdGhleSBhcmUgaW5saW5lZCwgdGhlaXIgc3ltYm9scyB3b24mIzM5O3QgYmUgZGlzdGluY3QsIGJ1dCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuIGluIGBldGhubF9wb3J0X3JlcXVlc3Rfb3BzYCwgc28gdGhhdCBzdWdnZXN0cyB0aGV5IGFyZSBub3QgaW5saW5lZC4gU2luY2Ugc3l6a2FsbGVyLCBhbmQgZ2VuZXJhbGx5IGNvdmVyYWdlIHRyYWNraW5nLCB1c2VzIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgc3ltYm9scywgSSYjMzk7bGwgc3RpY2sgdG8gbGlzdGluZyB0aG9zZSBub24tc3RhdGljIHN5bWJvbHMuCgpMZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQgYHBvcnRfcGFyc2VfcmVxdWVzdGAgaXMgaW5kZWVkIGluIGBuZXQvZXRodG9vbC9wb3J0LmNgLiAqWWVzLCBpdCBpcyouIE9rYXksIGdyZWF0LCBJIGNhbiBqdXN0IHByb3ZpZGUgdGhlIG5vbi1zdGF0aWMgb25lcy4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgc29saWQgcGxhbiBoZXJlLiBJJiMzOTtsbCBmbGFnIHRoaXMgYXMgbmVlZGluZyBjb3ZlcmFnZSB0ZXN0aW5nLiBBbmQgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFVEhUT09MX05FVExJTksmIzM0OywKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1BIWUxJTksmIzM0OywKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O0kyQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBpdCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBfZG9uZSYjMzQ7LAogICAgJiMzNDtwaHlfbGlua190b3BvX2FkZF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fZGVsX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyYjMzQ7LAogICAgJiMzNDtwaHlfc2V0X3Vwc3RyZWFtX3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZCBgUE9SVF9HRVRgIHRvIHJldHJpZXZlIHBoeXNpY2FsIHBvcnQgaW5mb3JtYXRpb24sIGFuZCBhZGRzIFNGUCBwb3J0IHN1cHBvcnQgdG8gdGhlIFBIWSBmcmFtZXdvcmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IG5ldGxpbmsgQVBJcyBhbmQgbW9kaWZpZXMgY29yZSBQSFkvcGh5bGluayBsb2dpYywgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGV0aHRvb2wgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7UEhZTElOSyYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7STJDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb19kZWxfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzJiMzNDssCiAgICAmIzM0O3BoeV9zZXRfdXBzdHJlYW1fcG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIGBQT1JUX0dFVGAgdG8gcmV0cmlldmUgcGh5c2ljYWwgcG9ydCBpbmZvcm1hdGlvbiwgYW5kIGFkZHMgU0ZQIHBvcnQgc3VwcG9ydCB0byB0aGUgUEhZIGZyYW1ld29yay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgbmV0bGluayBBUElzIGFuZCBtb2RpZmllcyBjb3JlIFBIWS9waHlsaW5rIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjE4LjAzOTg3Mzk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5NjI2NTcwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVRIVE9PTF9ORVRMSU5LXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlBIWUxJTktcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiSTJDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXRobmxfcG9ydF9kdW1wX3N0YXJ0XCIsXG4gICAgXCJldGhubF9wb3J0X2R1bXBpdFwiLFxuICAgIFwiZXRobmxfcG9ydF9kdW1wX2RvbmVcIixcbiAgICBcInBoeV9saW5rX3RvcG9fYWRkX3BvcnRcIixcbiAgICBcInBoeV9saW5rX3RvcG9fZGVsX3BvcnRcIixcbiAgICBcInBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNcIixcbiAgICBcInBoeV9zZXRfdXBzdHJlYW1fcG9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQgYFBPUlRfR0VUYCB0byByZXRyaWV2ZSBwaHlzaWNhbCBwb3J0IGluZm9ybWF0aW9uLCBhbmQgYWRkcyBTRlAgcG9ydCBzdXBwb3J0IHRvIHRoZSBQSFkgZnJhbWV3b3JrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBuZXRsaW5rIEFQSXMgYW5kIG1vZGlmaWVzIGNvcmUgUEhZL3BoeWxpbmsgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBldGh0b29sIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOToxOC4wMzk4Nzk4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzNzg1ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGFiZDUzOThjNTJjYTk4ODYwNjFlYjMwYTgxMjAyMDAyYWU2MmI0YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDEwOjI5OjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuaW5kZXggNWRkNGQxYjVkOTRiYi4uNjdhYzM0MDA0NjJiZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxcbkBAIC0yMTAsNiArMjEwLDExIEBAIGRlZmluaXRpb25zOlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogZGlzY2FyZFxcbiAgICAgICAgIHZhbHVlOiAzMVxcbisgIC1cXG4rICAgIG5hbWU6IHBvcnQtdHlwZVxcbisgICAgZG9jOiB0eXBlIG9mIHBoeXNpY2FsIGNvbm5lY3RvclxcbisgICAgdHlwZTogZW51bVxcbisgICAgZW50cmllczogW21kaSwgc2ZwXVxcbiBcXG4gYXR0cmlidXRlLXNldHM6XFxuICAgLVxcbkBAIC0xOTA1LDYgKzE5MTAsMzIgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgbmFtZTogbGlua1xcbiAgICAgICAgIHR5cGU6IG5lc3RcXG4gICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90XFxuKyAgLVxcbisgICAgbmFtZTogcG9ydFxcbisgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnRcXG4rICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBoZWFkZXJcXG4rICAgICAgICB0eXBlOiBuZXN0XFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlclxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogaWRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1tb2Rlc1xcbisgICAgICAgIHR5cGU6IG5lc3RcXG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtaW50ZXJmYWNlc1xcbisgICAgICAgIHR5cGU6IG5lc3RcXG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiB0eXBlXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZW51bTogcG9ydC10eXBlXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiB1cHN0cmVhbS1wb3J0XFxuKyAgICAgICAgdHlwZTogdTMyXFxuIFxcbiBvcGVyYXRpb25zOlxcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXFxuQEAgLTI4NTksNiArMjg5MCwyOSBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIHdvcnN0LWNoYW5uZWxcXG4gICAgICAgICAgICAgLSBsaW5rXFxuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHBvcnQtZ2V0XFxuKyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZVxcbitcXG4rICAgICAgYXR0cmlidXRlLXNldDogcG9ydFxcbitcXG4rICAgICAgZG86IFxcdTAwMjZwb3J0LWdldC1vcFxcbisgICAgICAgIHJlcXVlc3Q6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGlkXFxuKyAgICAgICAgcmVwbHk6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGlkXFxuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLW1vZGVzXFxuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLWludGVyZmFjZXNcXG4rICAgICAgICAgICAgLSB0eXBlXFxuKyAgICAgICAgICAgIC0gdXBzdHJlYW0tcG9ydFxcbisgICAgICBkdW1wOlxcbisgICAgICAgIHJlcXVlc3Q6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbiBcXG4gbWNhc3QtZ3JvdXBzOlxcbiAgIGxpc3Q6XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcXG5pbmRleCBlOTJhYmY0NWZhZjUwLi5iNDMyNmM4OWIwNzUxIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcXG5AQCAtMjUzNyw2ICsyNTM3LDM5IEBAIFdpdGhpbiBlYWNoIGNoYW5uZWwgbmVzdCwgb25seSB0aGUgbWV0cmljcyBzdXBwb3J0ZWQgYnkgdGhlIFBIWSB3aWxsIGJlIHByZXNlbnQuXFxuIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW5cXG4gYGBpbmNsdWRlL2xpbnV4L3BoeS5oYGAuXFxuIFxcbitQT1JUX0dFVFxcbis9PT09PT09PVxcbitcXG4rUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsXFxuK3JlZmVycmVkIHRvIGFzIFxcXCJwb3J0c1xcXCIuIFVzZXIgbmVlZHMgdG8gc3BlY2lmeSBhIFBPUlRfSUQgZm9yIHRoZSBETyBvcGVyYXRpb24sXFxuK2luIHdoaWNoIGNhc2UgdGhlIERPIHJlcXVlc3QgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNwZWNpZmljIHBvcnQuXFxuK1xcbitBcyB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBwb3J0LCB0aGUgRFVNUCBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gbGlzdCB0aGVcXG4rcG9ydHMgcHJlc2VudCBvbiBhIGdpdmVuIGludGVyZmFjZSwgYnkgcGFzc2luZyBhbiBpbnRlcmZhY2UgaW5kZXggb3IgbmFtZSBpblxcbit0aGUgZHVtcCByZXF1ZXN0LlxcbitcXG4rUmVxdWVzdCBjb250ZW50czpcXG4rXFxuKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcXG4rICBgYEVUSFRPT0xfQV9QT1JUX0lEYGAgICAgICAgICAgICAgICAgIHUzMiAgICAgcG9ydCBpZFxcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitLZXJuZWwgcmVzcG9uc2UgY29udGVudHM6XFxuK1xcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAgYGBFVEhUT09MX0FfUE9SVF9IRUFERVJgYCAgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcXG4rICBgYEVUSFRPT0xfQV9QT1JUX0lEYGAgICAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCdzIHVuaXF1ZSBpZGVudGlmaWVyLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBuZXRkZXZpY2UuXFxuKyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVNgYCAgICAgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBsaW5rbW9kZXNcXG4rICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTYGAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIE1JSVxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXNcXG4rICBgYEVUSFRPT0xfQV9QT1JUX1RZUEVgYCAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCB0eXBlXFxuKyAgYGBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUYGAgICAgICAgIHUzMiAgICAgSWYgYW55LCB0aGUgaW5kZXggb2YgdGhlIE1JSVxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgdGhhdCBmZWVkcyBpbnRvIHRoaXNcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LlxcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbiBSZXF1ZXN0IHRyYW5zbGF0aW9uXFxuID09PT09PT09PT09PT09PT09PT1cXG4gXFxuQEAgLTI2NDcsNCArMjY4MCw1IEBAIGFyZSBuZXRsaW5rIG9ubHkuXFxuICAgbi9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19QSFlfR0VUYGBcXG4gICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgXFxuICAgYGBTSU9DU0hXVFNUQU1QYGAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19UU0NPTkZJR19TRVRgYFxcbisgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgYFxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcXG5pbmRleCA2ZTI4ZDkwOTRiY2UzLi4yYTliMWVjOTNiNzBmIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0XFxuQEAgLTk5LDEzICs5OSwyOSBAQCB3aWxsIGV2ZW50dWFsbHkgYmUgYWJsZSB0byByZXBvcnQgaXRzIG93biBrc2V0dGluZ3M6OlxcbiAgICAgICAgICAgICAoX19fX18pLS0tLS18IFBvcnQgfFxcbiAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tK1xcbiBcXG4rU0ZQIHBvcnRzXFxuKz09PT09PT09PVxcbitcXG4rU0ZQIGludGVyZmFjZXMgaW52b2x2ZSAyIGRpc3RpbmN0IGNvbXBvbmVudHMsIGVhY2ggcmVwcmVzZW50ZWQgYnlcXG4rYSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXFx1MDAzY3BoeV9wb3J0XFx1MDAzZWAgaW5zdGFuY2UgOlxcbitcXG4rIC0gVGhlIFNGUCBjYWdlIGl0c2VsZiBpcyBhIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcXHUwMDNjcGh5X3BvcnRcXHUwMDNlYC4gSXQncyBzcGVjaWFsXFxuKyAgIGluIHRoYXQgaXQncyBub3QgYW4gTURJIGludGVyZmFjZSwgYnV0IHJhdGhlciBhIGhvdC1wbHVnZ2FibGUgTUlJLlxcbisgICBUaGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFxcdTAwM2NwaHlfcG9ydFxcdTAwM2VgIGFzc29jaWF0ZWQgdG8gaXQgbGlzdHMgdGhlIGRpZmZlcmVudFxcbisgICBNSUkgaW50ZXJmYWNlcyB3ZSBjYW4gdXNlIG9uIHRoZSBjYWdlLlxcbitcXG4rIC0gVGhlIFNGUCBtb2R1bGUsIHdoZW4gaW5zZXJ0ZWQsIHdpbGwgYWxzbyBiZSBhc3NvY2lhdGVkIHRvIGFcXG4rICAgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFxcdTAwM2NwaHlfcG9ydFxcdTAwM2VgLCB0aGF0IHJlcHJlc2VudHMgdGhlIHZhcmlvdXMgbGlua21vZGVzXFxuKyAgIHRoYXQgaXQgZ2l2ZXMgYWNjZXNzIHRvLiBUaGUgbW9kdWxlJ3MgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFxcdTAwM2NwaHlfcG9ydFxcdTAwM2VgXFxuKyAgIGRvZXNuJ3Qgc3VwZXJzZWRlIHRoZSBjYWdlJ3MgcG9ydCwgaXQgcmVmZXJlbmNlcyBpdCB0aHJvdWdoXFxuKyAgIHRoZSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXFx1MDAzY3BoeV9wb3J0XFx1MDAzZWAgOmM6bWVtYmVyOmB1cHN0cmVhbV9wb3J0YCBmaWVsZC5cXG4rXFxuIE5leHQgc3RlcHNcXG4gPT09PT09PT09PVxcbiBcXG4tQXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50YXRpb24sIG9ubHkgcG9ydHMgY29udHJvbGxlZCBieSBQSFkgZGV2aWNlcyBhcmVcXG4tc3VwcG9ydGVkLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGFkZCB0aGUgTmV0bGluayBBUEkgdG8gZXhwb3NlIHRoZXNlXFxuLXRvIHVzZXJzcGFjZSBhbmQgYWRkIHN1cHBvcnQgZm9yIHJhdyBwb3J0cyAoY29udHJvbGxlZCBieSBzb21lIGZpcm13YXJlLCBhbmQgZGlyZWN0bHlcXG4tbWFuYWdlZCBieSB0aGUgTklDIGRyaXZlcikuXFxuK0FzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCB0aGUgcG9ydCdzIHByZXNlbmNlIGFuZCBpbmZvcm1hdGlvbiBjYW4gb25seVxcbitiZSBxdWVyaWVkLCBhbmQgaXQncyBub3QgcG9zc2libGUgdG8gY2hhbmdlIGFueSBvZiB0aGUgcG9ydCdzIHNldHRpbmdzIG9yIHNlbGVjdFxcbit3aGljaCBvbmUgc2hvdWxkIGJlIHVzZWQuXFxuIFxcbiBBbm90aGVyIHBhcmFsbGVsIHRhc2sgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIE1JSSBtdXhpbmcgZnJhbWV3b3JrIHRvIGFsbG93IHRoZVxcbi1jb250cm9sIG9mIG5vbi1QSFkgZHJpdmVyIG11bHRpLXBvcnQgc2V0dXBzLlxcbitjb250cm9sIG9mIG5vbi1QSFkgZHJpdmVuIG11bHRpLXBvcnQgc2V0dXBzLlxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggOTMyZWExZGIwNDhlNS4uMzk1ZjhiNWQxODQ5NSAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE4ODE2LDYgKzE4ODE2LDcgQEAgRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2V0aGVybmV0LWNvbm5lY3Rvci55YW1sXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxcbiBGOlxcdGRyaXZlcnMvbmV0L3BoeS9waHlfcG9ydC5jXFxuIEY6XFx0aW5jbHVkZS9saW51eC9waHlfcG9ydC5oXFxuK0Y6XFx0bmV0L2V0aHRvb2wvcG9ydC5jXFxuIEs6XFx0c3RydWN0XFxcXHMrcGh5X3BvcnR8cGh5X3BvcnRfXFxuIFxcbiBORVRXT1JLSU5HIFtHRU5FUkFMXVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaCBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXFxuaW5kZXggNDIxMDg4ZTZmNmU4Zi4uZWMzZDM5YTBhZTA2YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXFxuQEAgLTY2LDUgKzY2LDcgQEAgdm9pZCBwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXFxuIFxcdFxcdFxcdFxcdCAgIGVudW0gZXRodG9vbF9saW5rX21lZGl1bSBtZWRpdW0sXFxuIFxcdFxcdFxcdFxcdCAgIGludCBsYW5lcyk7XFxuIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2Rlcyk7XFxuK3ZvaWQgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyh1bnNpZ25lZCBsb25nICp0bywgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTtcXG4gXFxuICNlbmRpZiAvKiBfX1BIWV9DQVBTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xcbmluZGV4IDk0MmQ0MzE5MTU2MWUuLjU1OGU0ZGY0ZDYzYzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xcbkBAIC00NDUsMyArNDQ1LDI5IEBAIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcXG4gXFx0cmV0dXJuIG1lZGl1bXM7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyk7XFxuK1xcbisvKipcXG4rICogcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcygpIC0gRmlsdGVyIGxpbmttb2RlcyB3aXRoIGFuIGludGVyZmFjZSBsaXN0XFxuKyAqIEB0bzogU3RvcmVzIHRoZSBmaWx0ZXJlZCBsaW5rbW9kZXNcXG4rICogQGZyb206IExpbmttb2RlcyB0byBmaWx0ZXJcXG4rICogQGludGVyZmFjZXM6IEJpdGZpZWxkIG9mIHBoeV9pbnRlcmZhY2VfdCB0aGF0IHdlIHVzZSBmb3IgZmlsdGVyaW5nXFxuKyAqXFxuKyAqIEZpbHRlciB0aGUgcHJvdmlkZWQgbGlua21vZGVzLCBvbmx5IHRvIGtlZXAgdGhlIG9uZXMgd2UgY2FuIHBvc3NpYmx5IGFjaGlldmVcXG4rICogd2hlbiB1c2luZyBhbnkgb2YgdGhlIHByb3ZpZGVkIE1JSSBpbnRlcmZhY2VzLlxcbisgKi9cXG4rdm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaW50ZXJmYWNlcylcXG4re1xcbitcXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhpZmFjZXNfc3VwcG9ydGVkKSA9IHt9O1xcbitcXHR1bnNpZ25lZCBpbnQgaWZhY2VzX2NhcHMgPSAwO1xcbitcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xcbitcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChpbnRlcmZhY2UsIGludGVyZmFjZXMsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgpXFxuK1xcdFxcdGlmYWNlc19jYXBzIHw9IHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKGludGVyZmFjZSk7XFxuK1xcbitcXHRwaHlfY2Fwc19saW5rbW9kZXMoaWZhY2VzX2NhcHMsIGlmYWNlc19zdXBwb3J0ZWQpO1xcbitcXG4rXFx0bGlua21vZGVfYW5kKHRvLCBmcm9tLCBpZmFjZXNfc3VwcG9ydGVkKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG5pbmRleCA5NGIyZTg1ZTAwYTM3Li4zZGE2ODcyZWJiYmEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuQEAgLTE0OTAsMTEgKzE0OTAsMjIgQEAgc3RhdGljIGludCBwaHlfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxcbiB7XFxuIFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2O1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKGRldilcXG4tXFx0XFx0cmV0dXJuIHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VoYXNfc2ZwX21vZF9waHkgPSB0cnVlO1xcbitcXHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBwaHlkZXYtXFx1MDAzZXNmcF9jYWdlX3BvcnQpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdC8qIElmIHdlIGFyZW4ndCBhdHRhY2hlZCB0byBhIG5ldGRldiwgd2UgY2FuJ3QgYWRkIHRoZSBTRlAgUEhZIHRvIGl0c1xcbitcXHQgKiB0b3BvbG9neS5cXG4rXFx0ICovXFxuK1xcdGlmICghZGV2KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VoYXNfc2ZwX21vZF9waHkgPSBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xNTEyLDggKzE1MjMsMTIgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXY7XFxuIFxcbitcXHRwaHlkZXYtXFx1MDAzZWhhc19zZnBfbW9kX3BoeSA9IGZhbHNlO1xcbitcXG4gXFx0aWYgKGRldilcXG4gXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTtcXG4rXFxuK1xcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIE5VTEwpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTYxNyw2ICsxNjMyLDc3IEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfbGlua19kb3duKHZvaWQgKnVwc3RyZWFtKVxcbiBcXHRcXHRwb3J0LVxcdTAwM2VvcHMtXFx1MDAzZWxpbmtfZG93bihwb3J0KTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBwaHlfYWRkX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHQvKiBDcmVhdGUgbW9kIHBvcnQgKi9cXG4rXFx0cG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7XFxuK1xcdGlmICghcG9ydClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwb3J0LVxcdTAwM2VhY3RpdmUgPSB0cnVlO1xcbitcXG4rXFx0Y2FwcyA9IHNmcF9nZXRfbW9kdWxlX2NhcHMocGh5ZGV2LVxcdTAwM2VzZnBfYnVzKTtcXG4rXFxuK1xcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cXHUwMDNlc3VwcG9ydGVkLCBjYXBzLVxcdTAwM2VsaW5rX21vZGVzLFxcbitcXHRcXHRcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9jYWdlX3BvcnQtXFx1MDAzZWludGVyZmFjZXMpO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KSB7XFxuK1xcdFxcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQocGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYsIHBvcnQpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Lyogd2UgZG9uJ3QgdXNlIHBoeV9hZGRfcG9ydCgpIGhlcmUgYXMgdGhlIG1vZHVsZSBwb3J0IGlzbid0IGEgZGlyZWN0XFxuK1xcdCAqIGludGVyZmFjZSBmcm9tIHRoZSBQSFksIGJ1dCByYXRoZXIgYW4gZXh0ZW5zaW9uIHRvIHRoZSBzZnAtYnVzLCB0aGF0XFxuK1xcdCAqIGlzIGFscmVhZHkgcmVwcmVzZW50ZWQgYnkgaXRzIG93biBwaHlfcG9ydFxcbitcXHQgKi9cXG4rXFx0cGh5ZGV2LVxcdTAwM2Vtb2RfcG9ydCA9IHBvcnQ7XFxuK1xcbitcXHRwb3J0LVxcdTAwM2V1cHN0cmVhbV9wb3J0ID0gcGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHBoeV9kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aWYgKCFwaHlkZXYtXFx1MDAzZW1vZF9wb3J0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYsIHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpO1xcbitcXG4rXFx0cGh5X3BvcnRfZGVzdHJveShwaHlkZXYtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vtb2RfcG9ydCA9IE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGh5X3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXFxuK3tcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbitcXG4rXFx0LyogSWYgdGhlcmUncyBhIGRvd25zdHJlYW0gU0ZQIG1vZHVsZSwgYW5kIGl0IGRvZXNuJ3QgY29udGFpbiBhIFBIWVxcbitcXHQgKiBkZXZpY2UsIGxldCdzIGNyZWF0ZSBhIHBoeV9wb3J0IHRvIHJlcHJlc2VudCB0aGF0IG1vZHVsZS5cXG4rXFx0ICovXFxuK1xcdGlmICghcGh5ZGV2LVxcdTAwM2VoYXNfc2ZwX21vZF9waHkpXFxuK1xcdFxcdHJldHVybiBwaHlfYWRkX3NmcF9tb2RfcG9ydChwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHBoeV9zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXFxuK3tcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbitcXG4rXFx0LyogQ2FsbGVkIHVwb24gbW9kdWxlIHJlbW92YWwgb3IgdXBzdHJlYW0gcmVtb3ZhbCAqL1xcbitcXHRpZiAoIXBoeWRldi1cXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxcbitcXHRcXHRwaHlfZGVsX3NmcF9tb2RfcG9ydChwaHlkZXYpO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XFxuIFxcdC5hdHRhY2ggPSBwaHlfc2ZwX2F0dGFjaCxcXG4gXFx0LmRldGFjaCA9IHBoeV9zZnBfZGV0YWNoLFxcbkBAIC0xNjI2LDYgKzE3MTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XFxuIFxcdC5saW5rX2Rvd24gPSBwaHlfc2ZwX2xpbmtfZG93bixcXG4gXFx0LmNvbm5lY3RfcGh5ID0gcGh5X3NmcF9jb25uZWN0X3BoeSxcXG4gXFx0LmRpc2Nvbm5lY3RfcGh5ID0gcGh5X3NmcF9kaXNjb25uZWN0X3BoeSxcXG4rXFx0Lm1vZHVsZV9zdGFydCA9IHBoeV9zZnBfbW9kdWxlX3N0YXJ0LFxcbitcXHQubW9kdWxlX3N0b3AgPSBwaHlfc2ZwX21vZHVsZV9zdG9wLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBwaHlfYWRkX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbkBAIC0xNjczLDEzICsxNzYxLDEzIEBAIHN0YXRpYyB2b2lkIHBoeV9kZWxfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuIFxcdHBoeWRldi1cXHUwMDNlbl9wb3J0cy0tO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbitzdGF0aWMgc3RydWN0IHBoeV9wb3J0ICpwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aWYgKCFwb3J0KVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbiBcXHRwb3J0LVxcdTAwM2VwYXJlbnRfdHlwZSA9IFBIWV9QT1JUX1BIWTtcXG4gXFx0cG9ydC1cXHUwMDNlcGh5ID0gcGh5ZGV2O1xcbkBAIC0xNjk0LDEwICsxNzgyLDEyIEBAIHN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdCAqIHdoZW4gYXR0YWNoaW5nIHRoZSBwb3J0IHRvIHRoZSBwaHlkZXYuXFxuIFxcdCAqL1xcbiBcXHRyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcXG4tXFx0aWYgKHJldClcXG4rXFx0aWYgKHJldCkge1xcbiBcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gcG9ydDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE3MDYsMjUgKzE3OTYsNTAgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gICovXFxuIHN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBzZnBfYnVzICpidXM7XFxuLVxcdGludCByZXQgPSAwO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKSB7XFxuLVxcdFxcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5md25vZGUpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKGJ1cykpXFxuLVxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1cyk7XFxuK1xcdGlmICghcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5md25vZGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gYnVzO1xcbitcXHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKTtcXG4rXFx0aWYgKElTX0VSUihidXMpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihidXMpO1xcbiBcXG4tXFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuLVxcdFxcdHNmcF9idXNfcHV0KGJ1cyk7XFxuK1xcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IGJ1cztcXG4gXFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XFxuK1xcdGlmIChidXMpIHtcXG4rXFx0XFx0cG9ydCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHBvcnQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IFBUUl9FUlIocG9ydCk7XFxuK1xcdFxcdFxcdHBvcnQgPSBOVUxMO1xcbitcXHRcXHRcXHRnb3RvIG91dF9zZnA7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VzZnBfYnVzKVxcbi1cXHRcXHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0ID0gcG9ydDtcXG4rXFxuK1xcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcXHUwMDI2c2ZwX3BoeWRldl9vcHMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3J0O1xcbitcXG4rXFx0Lyogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSBncmFicyBhIHJlZiB0byB0aGUgc2ZwIGJ1cyBvbiBzdWNjZXNzLCBpdCdzXFxuK1xcdCAqIHNhZmUgdG8gcmVsZWFzZSBpdCBub3cuXFxuK1xcdCAqL1xcbitcXHRzZnBfYnVzX3B1dChidXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rXFxuK291dF9wb3J0OlxcbitcXHRpZiAocG9ydCkge1xcbitcXHRcXHRwaHlfZGVsX3BvcnQocGh5ZGV2LCBwb3J0KTtcXG4rXFx0XFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcXG4rXFx0fVxcbitvdXRfc2ZwOlxcbitcXHRzZnBfYnVzX3B1dChidXMpO1xcbitcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBOVUxMO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xODE1LDYgKzE5MzAsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdFxcdGVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeWRldiwgUEhZX1VQU1RSRUFNX01BQywgZGV2KTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdFxcdGlmIChwaHlkZXYtXFx1MDAzZW1vZF9wb3J0KSB7XFxuK1xcdFxcdFxcdGVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoZGV2LCBwaHlkZXYtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBTb21lIEV0aGVybmV0IGRyaXZlcnMgdHJ5IHRvIGNvbm5lY3QgdG8gYSBQSFkgZGV2aWNlIGJlZm9yZVxcbkBAIC0xOTUxLDYgKzIwNzIsOCBAQCB2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYtXFx1MDAzZXBoeWRldiA9IE5VTEw7XFxuIFxcdFxcdHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2ID0gTlVMTDtcXG4gXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpXFxuK1xcdFxcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwaHlkZXYtXFx1MDAzZW1vZF9wb3J0KTtcXG4gXFx0fVxcbiBcXG4gXFx0cGh5ZGV2LVxcdTAwM2VwaHlfbGlua19jaGFuZ2UgPSBOVUxMO1xcbkBAIC0zNjA0LDYgKzM3MjcsMjUgQEAgc3RydWN0IHBoeV9wb3J0ICpwaHlfZ2V0X3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5X2dldF9zZnBfcG9ydCk7XFxuIFxcbisvKipcXG4rICogcGh5X3NldF91cHN0cmVhbV9wb3J0KCkgLSBTZXRzIHRoZSBwaHlfcG9ydCBjb250cm9sbGluZyB0aGUgTUlJIHRoaXMgUEhZIGlzXFxuKyAqXFx0XFx0XFx0ICAgICBhdHRhY2hlZCB0by5cXG4rICogQHBoeWRldjogcG9pbnRlciB0byB0aGUgUEhZIGRldmljZSB3ZSBzZXQgdGhlIHVwc3RyZWFtIG9mLlxcbisgKiBAcG9ydDogVGhlIHBoeV9wb3J0IHVwc3RyZWFtIG9mIHRoaXMgUEhZLCBjYW4gYmUgTlVMTC5cXG4rICovXFxuK3ZvaWQgcGh5X3NldF91cHN0cmVhbV9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7XFxuK1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcXG4rXFxuK1xcdHBoeV9mb3JfZWFjaF9wb3J0KHBoeWRldiwgbG9jYWxfcG9ydClcXG4rXFx0XFx0bG9jYWxfcG9ydC1cXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3NldF91cHN0cmVhbV9wb3J0KTtcXG4rXFxuIC8qKlxcbiAgKiBmd25vZGVfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZndub2RlLCBmaW5kIHRoZSBtZGlvX2RldmljZVxcbiAgKiBAZndub2RlOiBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSdzIGZ3bm9kZVxcbkBAIC0zODQyLDYgKzM5ODQsNyBAQCBzdGF0aWMgaW50IHBoeV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXG4gXFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGh5ZGV2LVxcdTAwM2VzZnBfYnVzKTtcXG4gXFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gTlVMTDtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcXG4gXFxuIFxcdHBoeV9jbGVhbnVwX3BvcnRzKHBoeWRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXFxuaW5kZXggNDEzNGRlN2FlMzEzZC4uNjcxMGExOTk5NjdhMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXFxuQEAgLTcsNiArNyw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfcG9ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbkBAIC0yMywxNyArMjQsODkgQEAgc3RhdGljIGludCBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2dG9wby1cXHUwMDNlcGh5cywgWEFfRkxBR1NfQUxMT0MxKTtcXG4gXFx0dG9wby1cXHUwMDNlbmV4dF9waHlfaW5kZXggPSAxO1xcbiBcXG4rXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIFhBX0ZMQUdTX0FMTE9DMSk7XFxuK1xcdHRvcG8tXFx1MDAzZW5leHRfcG9ydF9pbmRleCA9IDE7XFxuK1xcbiBcXHRkZXYtXFx1MDAzZWxpbmtfdG9wbyA9IHRvcG87XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlbGlua190b3BvKVxcbitcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VsaW5rX3RvcG87XFxuK1xcbitcXHQvKiBUaGUgdG9wb2xvZ3kgaXMgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIHdlIGFkZCBhbiBvYmplY3QgdG8gaXQuXFxuK1xcdCAqIEl0IGlzIGZyZWVkIGFsb25nc2lkZSB0aGUgbmV0ZGV2LiBJdCBjYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlXFxuK1xcdCAqIGNvbnRleHRzOlxcbitcXHQgKiAgLSBJdCBjYW4gYmUgY2FsbGVkIGZyb20gLnByb2JlKCkgOiBObyBydG5sLCBubyBuZXRkZXZfbG9ja1xcbitcXHQgKiAgLSAubmRvX29wZW4oKSA6IHJ0bmwgYW5kIHBvc3NpYmx5IG5ldGRldl9sb2NrXFxuK1xcdCAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdFxcbitcXHQgKlxcbitcXHQgKiAgSG93ZXZlciwgd2UgY2FuJ3QgcmVhbGx5IGhhdmUgcmFjZXMgOlxcbitcXHQgKiAgLSBJZiB3ZSBoYXZlIGEgUEhZLCBwaHlfbGlua190b3BvX2FkZF9waHkoKSB3aWxsIGFsd2F5cyBydW4gZmlyc3RcXG4rXFx0ICogICAgYW5kIHRyaWdnZXIgdGhlIGFsbG9jLiBPbmx5IHRoZW4gdGhlIHBvcnRzIGNhbiBiZSBhZGRlZCB0aHJvdWdoXFxuK1xcdCAqICAgIHBoeWxpYiBvZiBzZnAuXFxuK1xcdCAqICAtIElmIHdlIGRvbid0LCB0aGUgU0ZQIHBvcnQgZm9yIHRoZSBjYWdlIGlzIHJlZ2lzdGVyZWQgZmlyc3QsIGFuZFxcbitcXHQgKiAgICBvbmx5IHRoZW4gb3RoZXIgcG9ydHMvUEhZcyBjYW4gYmUgcmVnaXN0ZXJlZC5cXG4rXFx0ICovXFxuK1xcdHJldCA9IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXG4rXFx0cmV0dXJuIGRldi1cXHUwMDNlbGlua190b3BvO1xcbit9XFxuK1xcbitpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogUG9ydHMgY2FuIG5vdyBiZSBxdWVyaWVkIHdpdGhvdXQgcnRubCBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLCB3aGljaFxcbitcXHQgKiB3ZSBkb24ndCBzdXBwb3J0IG5vdyBhcyBwb3J0IHJldHJpZXZhbCBpcyBkb25lIHVuZGVyIHJ0bmwuXFxuK1xcdCAqIFdlIGRvbid0IGhhdmUgcGh5X3BvcnQgZW5hYmxlZCBkZXZpY2VzIHlldCwgbGV0J3MgbWFrZSBzdXJlXFxuK1xcdCAqIHdlIGFyZSBsb3VkbHkgd2FybmVkIGFib3V0IHRoYXQgd2hlbiBpdCBoYXBwZW5zLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRShuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0dG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7XFxuK1xcdGlmIChJU19FUlIodG9wbykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xcbitcXG4rXFx0LyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovXFxuK1xcdGlmIChwb3J0LVxcdTAwM2VpZClcXG4rXFx0XFx0cmV0ID0geGFfaW5zZXJ0KFxcdTAwMjZ0b3BvLVxcdTAwM2Vwb3J0cywgcG9ydC1cXHUwMDNlaWQsIHBvcnQsIEdGUF9LRVJORUwpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldCA9IHhhX2FsbG9jX2N5Y2xpYyhcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIFxcdTAwMjZwb3J0LVxcdTAwM2VpZCwgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgeGFfbGltaXRfMzJiLCBcXHUwMDI2dG9wby1cXHUwMDNlbmV4dF9wb3J0X2luZGV4LFxcbitcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19hZGRfcG9ydCk7XFxuK1xcbit2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cXHUwMDNlbGlua190b3BvO1xcbitcXG4rXFx0aWYgKCF0b3BvKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR4YV9lcmFzZShcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIHBvcnQtXFx1MDAzZWlkKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2RlbF9wb3J0KTtcXG4rXFxuIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbiBcXHRcXHRcXHQgIGVudW0gcGh5X3Vwc3RyZWFtIHVwdCwgdm9pZCAqdXBzdHJlYW0pXFxuIHtcXG4tXFx0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVxcdTAwM2VsaW5rX3RvcG87XFxuK1xcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbztcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBldGh0b29sIG9wcyBtYXkgcnVuIHdpdGhvdXQgcnRubF9sb2NrLCBhbmQgcnRubF9sb2NrIGlzIHdoYXRcXG5AQCAtNDUsMTMgKzExOCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKFdBUk5fT05fT05DRShuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0aWYgKCF0b3BvKSB7XFxuLVxcdFxcdHJldCA9IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShkZXYpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0XFx0dG9wbyA9IGRldi1cXHUwMDNlbGlua190b3BvO1xcbi1cXHR9XFxuK1xcdHRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpO1xcbitcXHRpZiAoSVNfRVJSKHRvcG8pKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUih0b3BvKTtcXG4gXFxuIFxcdHBkbiA9IGt6YWxsb2Nfb2JqKCpwZG4pO1xcbiBcXHRpZiAoIXBkbilcXG5AQCAtODYsOCArMTU1LDIwIEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4rXFx0LyogQWRkIGFsbCB0aGUgUEhZJ3MgcG9ydHMgdG8gdGhlIHRvcG9sb2d5ICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeS1cXHUwMDNlcG9ydHMsIGhlYWQpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBvcnQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGRlbF9wb3J0cztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbitkZWxfcG9ydHM6XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShwb3J0LCBcXHUwMDI2cGh5LVxcdTAwM2Vwb3J0cywgaGVhZClcXG4rXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xcbitcXG4rXFx0eGFfZXJhc2UoXFx1MDAyNnRvcG8tXFx1MDAzZXBoeXMsIHBoeS1cXHUwMDNlcGh5aW5kZXgpO1xcbiBlcnI6XFxuIFxcdGtmcmVlKHBkbik7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTk5LDEwICsxODAsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiBcXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXFx1MDAzZWxpbmtfdG9wbztcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuIFxcbiBcXHRpZiAoIXRvcG8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeS1cXHUwMDNlcG9ydHMsIGhlYWQpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwb3J0KTtcXG4rXFxuIFxcdHBkbiA9IHhhX2VyYXNlKFxcdTAwMjZ0b3BvLVxcdTAwM2VwaHlzLCBwaHktXFx1MDAzZXBoeWluZGV4KTtcXG4gXFxuIFxcdC8qIFdlIGRlbGV0ZSB0aGUgUEhZIGZyb20gdGhlIHRvcG9sb2d5LCBob3dldmVyIHdlIGRvbid0IHJlLXNldCB0aGVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG5pbmRleCBmNDBhY2MwZDQxMzM4Li5hNWYwMjUxODdhZmEyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuQEAgLTE0LDYgKzE0LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5X2ZpeGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfbGlua190b3BvbG9neS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5X3BvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeWxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG5AQCAtOTMsNiArOTUsOCBAQCBzdHJ1Y3QgcGh5bGluayB7XFxuIFxcdERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLKHNmcF9pbnRlcmZhY2VzKTtcXG4gXFx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc2ZwX3N1cHBvcnQpO1xcbiBcXHR1OCBzZnBfcG9ydDtcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0O1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xcbiBcXG4gXFx0c3RydWN0IGVlZV9jb25maWcgZWVlX2NmZztcXG4gXFxuQEAgLTE3NjQsNiArMTc2OCw1MSBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX2ZpeGVkX3BvbGwoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzO1xcbiBcXG4rc3RhdGljIGludCBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4re1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKCFwbC1cXHUwMDNlbmV0ZGV2IHx8ICFwbC1cXHUwMDNlc2ZwX2J1cylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcXG4rXFx0aWYgKCFwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBvcnQtXFx1MDAzZWlzX3NmcCA9IHRydWU7XFxuK1xcdHBvcnQtXFx1MDAzZWlzX21paSA9IHRydWU7XFxuK1xcdHBvcnQtXFx1MDAzZWFjdGl2ZSA9IHRydWU7XFxuK1xcbitcXHRwaHlfaW50ZXJmYWNlX2FuZChwb3J0LVxcdTAwM2VpbnRlcmZhY2VzLCBwbC1cXHUwMDNlY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyxcXG4rXFx0XFx0XFx0ICBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzKTtcXG4rXFx0cGh5X3BvcnRfdXBkYXRlX3N1cHBvcnRlZChwb3J0KTtcXG4rXFxuK1xcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQocGwtXFx1MDAzZW5ldGRldiwgcG9ydCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X2Rlc3Ryb3lfcG9ydDtcXG4rXFxuK1xcdHBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0ID0gcG9ydDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rb3V0X2Rlc3Ryb3lfcG9ydDpcXG4rXFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcXG4rXFx0cGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuK3tcXG4rXFx0aWYgKHBsLVxcdTAwM2VuZXRkZXYgXFx1MDAyNlxcdTAwMjYgcGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtXFx1MDAzZW5ldGRldiwgcGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpO1xcbitcXG4rXFx0aWYgKHBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0KVxcbitcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0KTtcXG4rXFxuK1xcdHBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBwaHlsaW5rX3JlZ2lzdGVyX3NmcChzdHJ1Y3QgcGh5bGluayAqcGwsXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuIHtcXG5AQCAtMTc4MSw5ICsxODMwLDE4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLFxcbiBcXG4gXFx0cGwtXFx1MDAzZXNmcF9idXMgPSBidXM7XFxuIFxcbitcXHRyZXQgPSBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHBsKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRzZnBfYnVzX3B1dChidXMpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbiBcXHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBsLCBcXHUwMDI2c2ZwX3BoeWxpbmtfb3BzKTtcXG4gXFx0c2ZwX2J1c19wdXQoYnVzKTtcXG4gXFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHBsKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTE5NDYsNiArMjAwNCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY3JlYXRlKTtcXG4gdm9pZCBwaHlsaW5rX2Rlc3Ryb3koc3RydWN0IHBoeWxpbmsgKnBsKVxcbiB7XFxuIFxcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBsLVxcdTAwM2VzZnBfYnVzKTtcXG4rXFx0cGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpO1xcbiBcXHRpZiAocGwtXFx1MDAzZWxpbmtfZ3BpbylcXG4gXFx0XFx0Z3Bpb2RfcHV0KHBsLVxcdTAwM2VsaW5rX2dwaW8pO1xcbiBcXG5AQCAtMzg3MSwxNCArMzkzMCw2NyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfcmVtb3ZlKHZvaWQgKnVwc3RyZWFtKVxcbiBcXHRwaHlfaW50ZXJmYWNlX3plcm8ocGwtXFx1MDAzZXNmcF9pbnRlcmZhY2VzKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoIXBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIENyZWF0ZSBtb2QgcG9ydCAqL1xcbitcXHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcXG4rXFx0aWYgKCFwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBvcnQtXFx1MDAzZWFjdGl2ZSA9IHRydWU7XFxuK1xcbitcXHRjYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwbC1cXHUwMDNlc2ZwX2J1cyk7XFxuK1xcbitcXHRwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHBvcnQtXFx1MDAzZXN1cHBvcnRlZCwgY2Fwcy1cXHUwMDNlbGlua19tb2RlcyxcXG4rXFx0XFx0XFx0XFx0XFx0cGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQtXFx1MDAzZWludGVyZmFjZXMpO1xcbitcXG4rXFx0aWYgKHBsLVxcdTAwM2VuZXRkZXYpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC1cXHUwMDNlbmV0ZGV2LCBwb3J0KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHBvcnQtXFx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwbC1cXHUwMDNlc2ZwX2NhZ2VfcG9ydDtcXG4rXFxuK1xcdHBsLVxcdTAwM2Vtb2RfcG9ydCA9IHBvcnQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4re1xcbitcXHRpZiAoIXBsLVxcdTAwM2Vtb2RfcG9ydClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHBsLVxcdTAwM2VuZXRkZXYpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtXFx1MDAzZW5ldGRldiwgcGwtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFxuK1xcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFx0cGwtXFx1MDAzZW1vZF9wb3J0ID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXFxuIHtcXG4gXFx0c3RydWN0IHBoeWxpbmsgKnBsID0gdXBzdHJlYW07XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdGFydCB0aGUgUEhZIG5vdy4gKi9cXG4gXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpIHtcXG4gXFx0XFx0cGh5X3N0YXJ0KHBsLVxcdTAwM2VwaHlkZXYpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHBsKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogSWYgdGhlIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWSBidXQgd2UgZGlkbid0IGRldGVjdCBvbmUgd2VcXG5AQCAtMzg4Nyw3ICszOTk5LDE2IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxcbiBcXHRpZiAoIXBsLVxcdTAwM2VzZnBfbWF5X2hhdmVfcGh5KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XFxuK1xcdHJldCA9IHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBkZWxfbW9kX3BvcnQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2RlbF9tb2RfcG9ydDpcXG4rXFx0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxcbkBAIC0zODk3LDYgKzQwMTgsOCBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSlcXG4gXFx0LyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi9cXG4gXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpXFxuIFxcdFxcdHBoeV9zdG9wKHBsLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChwbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSlcXG5AQCAtMzk0MSw2ICs0MDY0LDggQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG4gXFx0cGh5X2ludGVyZmFjZV9hbmQocGh5LVxcdTAwM2Vob3N0X2ludGVyZmFjZXMsIHBoeWxpbmtfc2ZwX2ludGVyZmFjZXMsXFxuIFxcdFxcdFxcdCAgcGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbiBcXG4rXFx0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpO1xcbitcXG4gXFx0LyogRG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiAqL1xcbiBcXHRyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX3BoeShwbCwgcGh5KTtcXG4gfVxcbkBAIC0zOTQ5LDYgKzQwNzQsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh1cHN0cmVhbSk7XFxuK1xcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHlkZXYsIE5VTEwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzID0ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDExMDkyYzMxNzViM2QuLjc0MWNhN2EwYTI1NzMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtNTgyLDYgKzU4Miw3IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcXG4gICogQHdvbF9lbmFibGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGUgUEhZIG9yIHRoZSBhdHRhY2hlZCBNQUMgaGF2ZSBXYWtlLW9uLUxBTlxcbiAgKiBcXHRcXHQgZW5hYmxlZC5cXG4gICogQGlzX2dlbnBoeV9kcml2ZW46IFBIWSBpcyBkcml2ZW4gYnkgb25lIG9mIHRoZSBnZW5lcmljIFBIWSBkcml2ZXJzXFxuKyAqIEBoYXNfc2ZwX21vZF9waHk6IFNldCB0cnVlIGlmIGRvd25zdHJlYW0gU0ZQIGJ1cydzIG1vZHVsZSBjb250YWlucyBhIFBIWVxcbiAgKiBAc3RhdGU6IFN0YXRlIG9mIHRoZSBQSFkgZm9yIG1hbmFnZW1lbnQgcHVycG9zZXNcXG4gICogQGRldl9mbGFnczogRGV2aWNlLXNwZWNpZmljIGZsYWdzIHVzZWQgYnkgdGhlIFBIWSBkcml2ZXIuXFxuICAqXFxuQEAgLTU5NCw2ICs1OTUsOSBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XFxuICAqIEBwaHlsaW5rOiBQb2ludGVyIHRvIHBoeWxpbmsgaW5zdGFuY2UgZm9yIHRoaXMgUEhZXFxuICAqIEBzZnBfYnVzX2F0dGFjaGVkOiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgU0ZQIGJ1cyBoYXMgYmVlbiBhdHRhY2hlZFxcbiAgKiBAc2ZwX2J1czogU0ZQIGJ1cyBhdHRhY2hlZCB0byB0aGlzIFBIWSdzIGZpYmVyIHBvcnRcXG4rICogQHNmcF9jYWdlX3BvcnQ6IFRoZSBwaHlfcG9ydCBjb25uZWN0ZWQgdG8gdGhlIGRvd25zdHJlYW0gU0ZQIGNhZ2VcXG4rICogQG1vZF9wb3J0OiBwaHlfcG9ydCByZXByZXNlbnRpbmcgdGhlIFNGUCBtb2R1bGUsIGlmIGl0IGlzIHBoeS1sZXNzXFxuKyAqIEB1cHN0cmVhbV9wb3J0OiBwaHlfcG9ydCB0aGlzIFBIWSdzIE1JSSBhdHRhY2hlcyB0bywgaWYgYW55XFxuICAqIEBhdHRhY2hlZF9kZXY6IFRoZSBhdHRhY2hlZCBlbmV0IGRyaXZlcidzIGRldmljZSBpbnN0YW5jZSBwdHJcXG4gICogQGFkanVzdF9saW5rOiBDYWxsYmFjayBmb3IgdGhlIGVuZXQgY29udHJvbGxlciB0byByZXNwb25kIHRvIGNoYW5nZXM6IGluIHRoZVxcbiAgKiAgICAgICAgICAgICAgIGxpbmsgc3RhdGUuXFxuQEAgLTcwNiw2ICs3MTAsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XFxuIFxcdHVuc2lnbmVkIGlycV9yZXJ1bjoxO1xcbiBcXG4gXFx0dW5zaWduZWQgZGVmYXVsdF90aW1lc3RhbXA6MTtcXG4rXFx0dW5zaWduZWQgaGFzX3NmcF9tb2RfcGh5OjE7XFxuIFxcbiBcXHRpbnQgcmF0ZV9tYXRjaGluZztcXG4gXFxuQEAgLTc4NSw2ICs3OTAsOSBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XFxuIFxcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cXG4gXFx0Ym9vbCBzZnBfYnVzX2F0dGFjaGVkO1xcbiBcXHRzdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX2J1cztcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0O1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnVwc3RyZWFtX3BvcnQ7XFxuIFxcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYXR0YWNoZWRfZGV2O1xcbiBcXHRzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHM7XFxuQEAgLTI0NjgsNiArMjQ3Niw4IEBAIGludCBfX3BoeV9od3RzdGFtcF9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFxuIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gXFxuK3ZvaWQgcGh5X3NldF91cHN0cmVhbV9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XFxuK1xcbiAvKipcXG4gICogcGh5X21vZHVsZV9kcml2ZXIoKSAtIEhlbHBlciBtYWNybyBmb3IgcmVnaXN0ZXJpbmcgUEhZIGRyaXZlcnNcXG4gICogQF9fcGh5X2RyaXZlcnM6IGFycmF5IG9mIFBIWSBkcml2ZXJzIHRvIHJlZ2lzdGVyXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxcbmluZGV4IDk1NTc1ZjY4ZDViYzcuLjk1ODUyODJjYWUzZmMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXFxuQEAgLTEzLDE0ICsxMywxOSBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgeGFycmF5O1xcbiBzdHJ1Y3QgcGh5X2RldmljZTtcXG4rc3RydWN0IHBoeV9wb3J0O1xcbiBzdHJ1Y3Qgc2ZwX2J1cztcXG4gXFxuIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSB7XFxuIFxcdHN0cnVjdCB4YXJyYXkgcGh5cztcXG4gXFx0dTMyIG5leHRfcGh5X2luZGV4O1xcbitcXG4rXFx0c3RydWN0IHhhcnJheSBwb3J0cztcXG4rXFx0dTMyIG5leHRfcG9ydF9pbmRleDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBwaHlfZGV2aWNlX25vZGUge1xcbkBAIC00OCw2ICs1Myw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFxuIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xcbiBcXG4raW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcXG4rdm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XFxuK1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcXG4gcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcXG4ge1xcbkBAIC02NCw2ICs3MiwyNSBAQCBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X3BvcnQgKlxcbitwaHlfbGlua190b3BvX2dldF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwb3J0X2lkKVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cXHUwMDNlbGlua190b3BvO1xcbitcXG4rXFx0aWYgKCF0b3BvKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdC8qIHBvcnRzIGluIHRoZSB0b3BvIGFyZSBSVE5MIHByb3RlY3RlZCwgYnV0IG1heSBiZSBhY2Nlc3NlZCB1bmRlclxcbitcXHQgKiBuZXRkZXZfbG9jayBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLiBGb3Igbm93IGtlZXAgdGhlbSB1bmRlciBydG5sXFxuK1xcdCAqIHByb3RlY3Rpb24sIGFzIG5vIG9wcy1sb2NrZWQgZGV2aWNlcyBoYXZlIHBoeV9wb3J0IGNhcGFiaWxpdGllc1xcbitcXHQgKiB5ZXQuXFxuK1xcdCAqL1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0LyogQ2FsbGVyIG11c3QgaG9sZCBSVE5MIHdoaWxlIGhhbmRsaW5nIHRoZSBwaHlfcG9ydCAqL1xcbitcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIHBvcnRfaWQpO1xcbit9XFxuK1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG5AQCAtNzcsMTEgKzEwNCwyOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcXG4gcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X3BvcnQgKlxcbitwaHlfbGlua190b3BvX2dldF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwb3J0X2lkKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9fUEhZX0xJTktfVE9QT0xPR1lfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcXG5pbmRleCAwZWYwZjVjZTQ3MDkyLi44ZjQ1YzAzMWNiYzEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxcbkBAIC0zNiw5ICszNiwxMiBAQCBzdHJ1Y3QgcGh5X3BvcnRfb3BzIHtcXG4gLyoqXFxuICAqIHN0cnVjdCBwaHlfcG9ydCAtIEEgcmVwcmVzZW50YXRpb24gb2YgYSBuZXR3b3JrIGRldmljZSBwaHlzaWNhbCBpbnRlcmZhY2VcXG4gICpcXG4rICogQGlkOiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBvcnQgd2l0aGluIHRoZSB0b3BvbG9neVxcbiAgKiBAaGVhZDogVXNlZCBieSB0aGUgcG9ydCdzIHBhcmVudCB0byBsaXN0IHBvcnRzXFxuICAqIEBwYXJlbnRfdHlwZTogVGhlIHR5cGUgb2YgZGV2aWNlIHRoaXMgcG9ydCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG9cXG4gICogQHBoeTogSWYgdGhlIHBhcmVudCBpcyBQSFlfUE9SVF9QSFlERVYsIHRoZSBQSFkgY29udHJvbGxpbmcgdGhhdCBwb3J0XFxuKyAqIEB1cHN0cmVhbV9wb3J0OiBJbmRpY2F0ZXMgdGhlIE1JSSBwb3J0IHRoYXQgZmVlZHMgdGhpcyBwb3J0LCBpZiBhbnksXFxuKyAqXFx0XFx0ICAgZS5nLiB0aGUgU0ZQIGNhZ2UgcG9ydCBmb3IgYSBTRlAgbW9kdWxlIHBvcnQuXFxuICAqIEBvcHM6IENhbGxiYWNrIG9wcyBpbXBsZW1lbnRlZCBieSB0aGUgcG9ydCBjb250cm9sbGVyXFxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxcbiAgKiBAbWVkaXVtczogQml0bWFzayBvZiB0aGUgcGh5c2ljYWwgbWVkaXVtcyB0aGlzIHBvcnQgcHJvdmlkZXMgYWNjZXNzIHRvXFxuQEAgLTUyLDExICs1NSwxMyBAQCBzdHJ1Y3QgcGh5X3BvcnRfb3BzIHtcXG4gICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuXFxuICAqL1xcbiBzdHJ1Y3QgcGh5X3BvcnQge1xcbitcXHR1MzIgaWQ7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgaGVhZDtcXG4gXFx0ZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeTtcXG4gXFx0fTtcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICp1cHN0cmVhbV9wb3J0O1xcbiBcXG4gXFx0Y29uc3Qgc3RydWN0IHBoeV9wb3J0X29wcyAqb3BzO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG5pbmRleCA4MTM0YmFmNzg2MGYzLi5mOWQ4Nzk0ZWFiYzE5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuQEAgLTc4LDYgKzc4LDExIEBAIGVudW0gZXRodG9vbF9wc2VfZXZlbnQge1xcbiBcXHRFVEhUT09MX1BTRV9FVkVOVF9TV19QV19DT05UUk9MX0VSUk9SID0gNjQsXFxuIH07XFxuIFxcbitlbnVtIGV0aHRvb2xfcG9ydF90eXBlIHtcXG4rXFx0RVRIVE9PTF9QT1JUX1RZUEVfTURJLFxcbitcXHRFVEhUT09MX1BPUlRfVFlQRV9TRlAsXFxuK307XFxuK1xcbiBlbnVtIHtcXG4gXFx0RVRIVE9PTF9BX0hFQURFUl9VTlNQRUMsXFxuIFxcdEVUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYLFxcbkBAIC04NDAsNiArODQ1LDE4IEBAIGVudW0ge1xcbiBcXHRFVEhUT09MX0FfTVNFX01BWCA9IChfX0VUSFRPT0xfQV9NU0VfQ05UIC0gMSlcXG4gfTtcXG4gXFxuK2VudW0ge1xcbitcXHRFVEhUT09MX0FfUE9SVF9IRUFERVIgPSAxLFxcbitcXHRFVEhUT09MX0FfUE9SVF9JRCxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxcbitcXHRFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfVFlQRSxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCxcXG4rXFxuK1xcdF9fRVRIVE9PTF9BX1BPUlRfQ05ULFxcbitcXHRFVEhUT09MX0FfUE9SVF9NQVggPSAoX19FVEhUT09MX0FfUE9SVF9DTlQgLSAxKVxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdEVUSFRPT0xfTVNHX1VTRVJfTk9ORSA9IDAsXFxuIFxcdEVUSFRPT0xfTVNHX1NUUlNFVF9HRVQgPSAxLFxcbkBAIC04OTMsNiArOTEwLDcgQEAgZW51bSB7XFxuIFxcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfQUNULFxcbiBcXHRFVEhUT09MX01TR19SU1NfREVMRVRFX0FDVCxcXG4gXFx0RVRIVE9PTF9NU0dfTVNFX0dFVCxcXG4rXFx0RVRIVE9PTF9NU0dfUE9SVF9HRVQsXFxuIFxcbiBcXHRfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULFxcbiBcXHRFVEhUT09MX01TR19VU0VSX01BWCA9IChfX0VUSFRPT0xfTVNHX1VTRVJfQ05UIC0gMSlcXG5AQCAtOTU0LDYgKzk3Miw3IEBAIGVudW0ge1xcbiBcXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX05URixcXG4gXFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9OVEYsXFxuIFxcdEVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksXFxuK1xcdEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLFxcbiBcXG4gXFx0X19FVEhUT09MX01TR19LRVJORUxfQ05ULFxcbiBcXHRFVEhUT09MX01TR19LRVJORUxfTUFYID0gKF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCAtIDEpXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCBjMWMxYmUxYTY5NjJmLi5iMzZjYzVjNDc4MTZhIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTEzMTUsNiArMTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXFx1MDAyNlxcdTAwMjYgdG9wbykge1xcbiBcXHRcXHR4YV9kZXN0cm95KFxcdTAwMjZ0b3BvLVxcdTAwM2VwaHlzKTtcXG4rXFx0XFx0eGFfZGVzdHJveShcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMpO1xcbiBcXHRcXHRrZnJlZSh0b3BvKTtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VsaW5rX3RvcG8gPSBOVUxMO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL01ha2VmaWxlIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcXG5pbmRleCA2MjljMTA5MTY2NzBlLi45YjViMDk2NzAwMDgxIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlXFxuKysrIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcXG5AQCAtOSw0ICs5LDQgQEAgZXRodG9vbF9ubC15XFx0Oj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXFxcXFxcbiBcXHRcXHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxcXFxuIFxcdFxcdCAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcXFxcXFxuIFxcdFxcdCAgIG1vZHVsZS5vIGNtaXNfZndfdXBkYXRlLm8gY21pc19jZGIubyBwc2UtcGQubyBwbGNhLm8gXFxcXFxcbi1cXHRcXHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vXFxuK1xcdFxcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gcG9ydC5vXFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuYyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xcbmluZGV4IDFhZjM5NWI1NDMzMGUuLmMwNzZjMDdkMGEwODAgMTAwNjQ0XFxuLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5jXFxuKysrIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXFxuQEAgLTI2LDYgKzI2LDggQEAgc3RhdGljIHUzMiBldGhubF9iY2FzdF9zZXE7XFxuIFxcdFxcdFxcdCAgICAgRVRIVE9PTF9GTEFHX09NSVRfUkVQTFkpXFxuICNkZWZpbmUgRVRIVE9PTF9GTEFHU19TVEFUUyAoRVRIVE9PTF9GTEFHU19CQVNJQyB8IEVUSFRPT0xfRkxBR19TVEFUUylcXG4gXFxuK2NoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rXFxuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lbXSA9IHtcXG4gXFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gXFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX05BTUVdXFx0PSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsXFxuQEAgLTQzMSw2ICs0MzMsNyBAQCBldGhubF9kZWZhdWx0X3JlcXVlc3RzW19fRVRIVE9PTF9NU0dfVVNFUl9DTlRdID0ge1xcbiBcXHRbRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUXVxcdD0gXFx1MDAyNmV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzLFxcbiBcXHRbRVRIVE9PTF9NU0dfUEhZX0dFVF1cXHRcXHQ9IFxcdTAwMjZldGhubF9waHlfcmVxdWVzdF9vcHMsXFxuIFxcdFtFVEhUT09MX01TR19NU0VfR0VUXVxcdFxcdD0gXFx1MDAyNmV0aG5sX21zZV9yZXF1ZXN0X29wcyxcXG4rXFx0W0VUSFRPT0xfTVNHX1BPUlRfR0VUXVxcdFxcdD0gXFx1MDAyNmV0aG5sX3BvcnRfcmVxdWVzdF9vcHMsXFxuIH07XFxuIFxcbiBzdGF0aWMgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbkBAIC0xNTcyLDYgKzE1NzUsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7XFxuIFxcdFxcdC5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSxcXG4gXFx0XFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmNtZFxcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXFxuK1xcdFxcdC5kb2l0XFx0PSBldGhubF9kZWZhdWx0X2RvaXQsXFxuK1xcdFxcdC5zdGFydFxcdD0gZXRobmxfcG9ydF9kdW1wX3N0YXJ0LFxcbitcXHRcXHQuZHVtcGl0XFx0PSBldGhubF9wb3J0X2R1bXBpdCxcXG4rXFx0XFx0LmRvbmVcXHQ9IGV0aG5sX3BvcnRfZHVtcF9kb25lLFxcbitcXHRcXHQucG9saWN5ID0gZXRobmxfcG9ydF9nZXRfcG9saWN5LFxcbitcXHRcXHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcG9ydF9nZXRfcG9saWN5KSAtIDEsXFxuK1xcdH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGV0aHRvb2xfbmxfbWNncnBzW10gPSB7XFxuQEAgLTE1OTQsMTAgKzE2MDYsMjMgQEAgc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBldGh0b29sX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4gXFxuIC8qIG1vZHVsZSBzZXR1cCAqL1xcbiBcXG4rc3RhdGljIHZvaWQgX19pbml0IGV0aG5sX3BoeV9uYW1lc19wb3B1bGF0ZSh2b2lkKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVg7IGkrKykge1xcbitcXHRcXHRuYW1lID0gcGh5X21vZGVzKGkpO1xcbitcXHRcXHRzdHJzY3B5KHBoeV9pbnRlcmZhY2VfbmFtZXNbaV0sIG5hbWUsIEVUSF9HU1RSSU5HX0xFTik7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBfX2luaXQgZXRobmxfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRldGhubF9waHlfbmFtZXNfcG9wdWxhdGUoKTtcXG4rXFxuIFxcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFxcdTAwMjZldGh0b29sX2dlbmxfZmFtaWx5KTtcXG4gXFx0aWYgKFdBUk4ocmV0IFxcdTAwM2MgMCwgXFxcImV0aHRvb2w6IGdlbmV0bGluayBmYW1pbHkgcmVnaXN0cmF0aW9uIGZhaWxlZFxcXCIpKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcXG5pbmRleCAzZTk2OWEwNzBmOWZlLi5kYzcyMTFmNjdjNGQ1IDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbkBAIC01LDExICs1LDE0IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBldGhubF9yZXFfaW5mbztcXG4gXFxuK2V4dGVybiBjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXTtcXG4rXFxuIGludCBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmVzdCwgc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbkBAIC00NzQsNiArNDc3LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tbV9yZXF1ZXN0X29wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbXNlX3JlcXVlc3Rfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHM7XFxuIFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5X3N0YXRzW0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgKyAxXTtcXG5AQCAtNTMwLDYgKzUzNCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX0hFQURFUiArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX21zZV9nZXRfcG9saWN5W0VUSFRPT0xfQV9NU0VfSEVBREVSICsgMV07XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgKyAxXTtcXG4gXFxuIGludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuIGludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5AQCAtNTQ1LDYgKzU1MCw5IEBAIGludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuIGludCBldGhubF90c2luZm9fZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xcbiBpbnQgZXRobmxfcnNzX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbiBpbnQgZXRobmxfcnNzX2RlbGV0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbitpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuK2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xcbitpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG4gXFxuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX3N0ZF9uYW1lc1tfX0VUSFRPT0xfU1RBVFNfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xcbiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19ldGhfcGh5X25hbWVzW19fRVRIVE9PTF9BX1NUQVRTX0VUSF9QSFlfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9wb3J0LmMgYi9uZXQvZXRodG9vbC9wb3J0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmUxYmNhZGJmZTQwYzBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbmV0L2V0aHRvb2wvcG9ydC5jXFxuQEAgLTAsMCArMSwzNzUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBDb3B5cmlnaHQgMjAyNiBCb290bGluXFxuKyAqL1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfbGlua190b3BvbG9neS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5X3BvcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJpdHNldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiY29tbW9uLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJuZXRsaW5rLmhcXFwiXFxuK1xcbitzdHJ1Y3QgcG9ydF9yZXFfaW5mbyB7XFxuK1xcdHN0cnVjdCBldGhubF9yZXFfaW5mbyBiYXNlO1xcbitcXHR1MzIgcG9ydF9pZDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEge1xcbitcXHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YVxcdGJhc2U7XFxuK1xcdF9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKHN1cHBvcnRlZCk7XFxuK1xcdERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLKGludGVyZmFjZXMpO1xcbitcXHR1MzIgcG9ydF9pZDtcXG4rXFx0Ym9vbCBtaWk7XFxuK1xcdGJvb2wgc2ZwO1xcbitcXHR1MzIgdXBzdHJlYW1fcG9ydDtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUE9SVF9SRVFJTkZPKF9fcmVxX2Jhc2UpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mKF9fcmVxX2Jhc2UsIHN0cnVjdCBwb3J0X3JlcV9pbmZvLCBiYXNlKVxcbitcXG4rI2RlZmluZSBQT1JUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEsIGJhc2UpXFxuK1xcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgKyAxXSA9IHtcXG4rXFx0W0VUSFRPT0xfQV9QT1JUX0hFQURFUl0gPSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSxcXG4rXFx0W0VUSFRPT0xfQV9QT1JUX0lEXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBwb3J0X3BhcnNlX3JlcXVlc3Qoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRiLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pO1xcbitcXG4rXFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRVRIVE9PTF9BX1BPUlRfSUQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcXVlc3QtXFx1MDAzZXBvcnRfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUE9SVF9JRF0pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcG9ydF9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpO1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcXG4rXFxuK1xcdC8qIFJUTkwgbXVzdCBiZSBoZWxkIHdoaWxlIGhvbGRpbmcgYSByZWYgdG8gdGhlIHBoeV9wb3J0LiBIZXJlLCBjYWxsZXJcXG4rXFx0ICogaG9sZHMgUlROTC5cXG4rXFx0ICovXFxuK1xcdHBvcnQgPSBwaHlfbGlua190b3BvX2dldF9wb3J0KHJlcV9pbmZvLVxcdTAwM2VkZXYsIHJlcXVlc3QtXFx1MDAzZXBvcnRfaWQpO1xcbitcXHRpZiAoIXBvcnQpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0bGlua21vZGVfY29weShyZXBseS1cXHUwMDNlc3VwcG9ydGVkLCBwb3J0LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXHRwaHlfaW50ZXJmYWNlX2NvcHkocmVwbHktXFx1MDAzZWludGVyZmFjZXMsIHBvcnQtXFx1MDAzZWludGVyZmFjZXMpO1xcbitcXHRyZXBseS1cXHUwMDNlcG9ydF9pZCA9IHBvcnQtXFx1MDAzZWlkO1xcbitcXHRyZXBseS1cXHUwMDNlbWlpID0gcG9ydC1cXHUwMDNlaXNfbWlpO1xcbitcXHRyZXBseS1cXHUwMDNlc2ZwID0gcG9ydC1cXHUwMDNlaXNfc2ZwO1xcbitcXHRyZXBseS1cXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXFx1MDAzZXVwc3RyZWFtX3BvcnQgPyBwb3J0LVxcdTAwM2V1cHN0cmVhbV9wb3J0LVxcdTAwM2VpZCA6IDA7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwb3J0X3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEpXFxuK3tcXG4rXFx0Ym9vbCBjb21wYWN0ID0gcmVxX2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRVRIVE9PTF9GTEFHX0NPTVBBQ1RfQklUU0VUUztcXG4rXFx0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XFxuK1xcdHNpemVfdCBzaXplID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIEVUSFRPT0xfQV9QT1JUX0lEICovXFxuK1xcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcbitcXG4rXFx0aWYgKCFyZXBseS1cXHUwMDNlbWlpKSB7XFxuK1xcdFxcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyAqL1xcbitcXHRcXHRyZXQgPSBldGhubF9iaXRzZXRfc2l6ZShyZXBseS1cXHUwMDNlc3VwcG9ydGVkLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsXFxuK1xcdFxcdFxcdFxcdFxcdGxpbmtfbW9kZV9uYW1lcywgY29tcGFjdCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0c2l6ZSArPSByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTICovXFxuK1xcdFxcdHJldCA9IGV0aG5sX2JpdHNldF9zaXplKHJlcGx5LVxcdTAwM2VpbnRlcmZhY2VzLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRQSFlfSU5URVJGQUNFX01PREVfTUFYLFxcbitcXHRcXHRcXHRcXHRcXHRwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRzaXplICs9IHJldDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqL1xcbitcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcXG4rXFxuK1xcdC8qIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQgKi9cXG4rXFx0aWYgKHJlcGx5LVxcdTAwM2V1cHN0cmVhbV9wb3J0KVxcbitcXHRcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcXG4rXFxuK1xcdHJldHVybiBzaXplO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBvcnRfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSlcXG4re1xcbitcXHRib29sIGNvbXBhY3QgPSByZXFfaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBFVEhUT09MX0ZMQUdfQ09NUEFDVF9CSVRTRVRTO1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcXG4rXFx0aW50IHJldCwgcG9ydF90eXBlID0gRVRIVE9PTF9QT1JUX1RZUEVfTURJO1xcbitcXG4rXFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfSUQsIHJlcGx5LVxcdTAwM2Vwb3J0X2lkKSlcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFxuK1xcdGlmICghcmVwbHktXFx1MDAzZW1paSkge1xcbitcXHRcXHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcmVwbHktXFx1MDAzZXN1cHBvcnRlZCwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGxpbmtfbW9kZV9uYW1lcywgY29tcGFjdCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICByZXBseS1cXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXBseS1cXHUwMDNlbWlpIHx8IHJlcGx5LVxcdTAwM2VzZnApXFxuK1xcdFxcdHBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX1NGUDtcXG4rXFxuK1xcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1RZUEUsIHBvcnRfdHlwZSkpXFxuK1xcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuK1xcbitcXHRpZiAocmVwbHktXFx1MDAzZXVwc3RyZWFtX3BvcnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCxcXG4rXFx0XFx0XFx0cmVwbHktXFx1MDAzZXVwc3RyZWFtX3BvcnQpKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0cnVjdCBwb3J0X2R1bXBfY3R4IHtcXG4rXFx0c3RydWN0IHBvcnRfcmVxX2luZm9cXHQqcmVxX2luZm87XFxuK1xcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGFcXHQqcmVwbHlfZGF0YTtcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGlmaW5kZXg7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRwb3NfaWZpbmRleDtcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHBvc19wb3J0aWQ7XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IHBvcnRfZHVtcF9jdHggKlxcbitwb3J0X2R1bXBfY3R4X2dldChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuK3tcXG4rXFx0cmV0dXJuIChzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqKWNiLVxcdTAwM2VjdHg7XFxuK31cXG4rXFxuK2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XFxuK1xcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XFxuK1xcdHN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tXFx1MDAzZWluZm8uYXR0cnM7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5X2RhdGE7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcV9pbmZvICpyZXFfaW5mbztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXFx1MDAzZSBzaXplb2YoY2ItXFx1MDAzZWN0eCkpO1xcbitcXG4rXFx0cmVxX2luZm8gPSBremFsbG9jX29iaigqcmVxX2luZm8pO1xcbitcXHRpZiAoIXJlcV9pbmZvKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJlcGx5X2RhdGEgPSBrbWFsbG9jX29iaigqcmVwbHlfZGF0YSk7XFxuK1xcdGlmICghcmVwbHlfZGF0YSkge1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGZyZWVfcmVxX2luZm87XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KFxcdTAwMjZyZXFfaW5mby1cXHUwMDNlYmFzZSwgdGJbRVRIVE9PTF9BX1BPUlRfSEVBREVSXSxcXG4rXFx0XFx0XFx0XFx0XFx0IGdlbmxfaW5mb19uZXQoXFx1MDAyNmluZm8tXFx1MDAzZWluZm8pLFxcbitcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlaW5mby5leHRhY2ssIGZhbHNlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZnJlZV9yZXBfZGF0YTtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlaWZpbmRleCA9IDA7XFxuK1xcdGN0eC1cXHUwMDNlcG9zX2lmaW5kZXggPSAwO1xcbitcXG4rXFx0LyogRm9yIGZpbHRlcmVkIERVTVAgcmVxdWVzdHMsIGxldCdzIGp1c3Qgc3RvcmUgdGhlIGlmaW5kZXguIFdlJ2xsIGNoZWNrXFxuK1xcdCAqIGFnYWluIGlmIHRoZSBuZXRkZXYgaXMgc3RpbGwgdGhlcmUgd2hlbiBsb29waW5nIG92ZXIgdGhlIG5ldGRldiBsaXN0XFxuK1xcdCAqIGluIHRoZSBEVU1QIGxvb3AuXFxuK1xcdCAqL1xcbitcXHRpZiAocmVxX2luZm8tXFx1MDAzZWJhc2UuZGV2KSB7XFxuK1xcdFxcdGN0eC1cXHUwMDNlaWZpbmRleCA9IHJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0bmV0ZGV2X3B1dChyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXYsIFxcdTAwMjZyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXZfdHJhY2tlcik7XFxuK1xcdFxcdHJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGN0eC1cXHUwMDNlcmVxX2luZm8gPSByZXFfaW5mbztcXG4rXFx0Y3R4LVxcdTAwM2VyZXBseV9kYXRhID0gcmVwbHlfZGF0YTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZnJlZV9yZXBfZGF0YTpcXG4rXFx0a2ZyZWUocmVwbHlfZGF0YSk7XFxuK2ZyZWVfcmVxX2luZm86XFxuK1xcdGtmcmVlKHJlcV9pbmZvKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcG9ydF9kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XFxuK1xcdHZvaWQgKmVoZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRlaGRyID0gZXRobmxfZHVtcF9wdXQoc2tiLCBjYiwgRVRIVE9PTF9NU0dfUE9SVF9HRVRfUkVQTFkpO1xcbitcXHRpZiAoIWVoZHIpXFxuK1xcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuK1xcbitcXHRtZW1zZXQoY3R4LVxcdTAwM2VyZXBseV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHBvcnRfcmVwbHlfZGF0YSkpO1xcbitcXHRjdHgtXFx1MDAzZXJlcGx5X2RhdGEtXFx1MDAzZWJhc2UuZGV2ID0gZGV2O1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbitcXG4rXFx0cmV0ID0gcG9ydF9wcmVwYXJlX2RhdGEoXFx1MDAyNmN0eC1cXHUwMDNlcmVxX2luZm8tXFx1MDAzZWJhc2UsIFxcdTAwMjZjdHgtXFx1MDAzZXJlcGx5X2RhdGEtXFx1MDAzZWJhc2UsXFxuK1xcdFxcdFxcdFxcdGdlbmxfaW5mb19kdW1wKGNiKSk7XFxuK1xcbitcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc2tiLCBkZXYsIEVUSFRPT0xfQV9QT1JUX0hFQURFUik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IHBvcnRfZmlsbF9yZXBseShza2IsIFxcdTAwMjZjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyZXBseV9kYXRhLVxcdTAwM2ViYXNlKTtcXG4rXFxuK291dDpcXG4rXFx0Y3R4LVxcdTAwM2VyZXBseV9kYXRhLVxcdTAwM2ViYXNlLmRldiA9IE5VTEw7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGdlbmxtc2dfZW5kKHNrYiwgZWhkcik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmVfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkZXYgPSBjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldjtcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VsaW5rX3RvcG8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0eGFfZm9yX2VhY2hfc3RhcnQoXFx1MDAyNmRldi1cXHUwMDNlbGlua190b3BvLVxcdTAwM2Vwb3J0cywgY3R4LVxcdTAwM2Vwb3NfcG9ydGlkLCBwb3J0LFxcbitcXHRcXHRcXHQgIGN0eC1cXHUwMDNlcG9zX3BvcnRpZCkge1xcbitcXHRcXHRjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2Vwb3J0X2lkID0gY3R4LVxcdTAwM2Vwb3NfcG9ydGlkO1xcbitcXG4rXFx0XFx0cmV0ID0gcG9ydF9kdW1wX29uZShza2IsIGRldiwgY2IpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRjdHgtXFx1MDAzZXBvc19wb3J0aWQgPSAwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcG9ydF9kdW1wX2FsbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbitcXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZXBvc19pZmluZGV4KSB7XFxuK1xcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRcXHRjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldiA9IGRldjtcXG4rXFx0XFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XFxuK1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2X3RyYWNrZXIpO1xcbitcXHRcXHRjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldiA9IE5VTEw7XFxuK1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHJldCA9IDA7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgZXRobmxfcG9ydF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XFxuK1xcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbitcXHRcXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcXG4rXFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFxuK1xcdFxcdGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChcXHUwMDI2aW5mby1cXHUwMDNlaW5mbyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgY3R4LVxcdTAwM2VpZmluZGV4LCBcXHUwMDI2ZGV2X3RyYWNrZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdFxcdGN0eC1cXHUwMDNlcmVxX2luZm8tXFx1MDAzZWJhc2UuZGV2ID0gZGV2O1xcbitcXHRcXHRyZXQgPSBwb3J0X2R1bXBfb25lX2Rldihza2IsIGNiKTtcXG4rXFxuK1xcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2X3RyYWNrZXIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBwb3J0X2R1bXBfYWxsX2Rldihza2IsIGNiKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IGV0aG5sX3BvcnRfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXG4rXFx0a2ZyZWUoY3R4LVxcdTAwM2VyZXFfaW5mbyk7XFxuK1xcdGtmcmVlKGN0eC1cXHUwMDNlcmVwbHlfZGF0YSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHMgPSB7XFxuK1xcdC5yZXF1ZXN0X2NtZFxcdFxcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXFxuK1xcdC5yZXBseV9jbWRcXHRcXHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLFxcbitcXHQuaGRyX2F0dHJcXHRcXHQ9IEVUSFRPT0xfQV9QT1JUX0hFQURFUixcXG4rXFx0LnJlcV9pbmZvX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXFfaW5mbyksXFxuK1xcdC5yZXBseV9kYXRhX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhKSxcXG4rXFxuK1xcdC5wYXJzZV9yZXF1ZXN0XFx0XFx0PSBwb3J0X3BhcnNlX3JlcXVlc3QsXFxuK1xcdC5wcmVwYXJlX2RhdGFcXHRcXHQ9IHBvcnRfcHJlcGFyZV9kYXRhLFxcbitcXHQucmVwbHlfc2l6ZVxcdFxcdD0gcG9ydF9yZXBseV9zaXplLFxcbitcXHQuZmlsbF9yZXBseVxcdFxcdD0gcG9ydF9maWxsX3JlcGx5LFxcbit9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOToxOC42NDQyODIwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY2MzU4MjQwOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVUSFRPT0xfTkVUTElOS1wiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJQSFlMSU5LXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIkkyQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9zdGFydFwiLFxuICAgIFwiZXRobmxfcG9ydF9kdW1waXRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9kb25lXCIsXG4gICAgXCJwaHlfbGlua190b3BvX2FkZF9wb3J0XCIsXG4gICAgXCJwaHlfbGlua190b3BvX2RlbF9wb3J0XCIsXG4gICAgXCJwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzXCIsXG4gICAgXCJwaHlfc2V0X3Vwc3RyZWFtX3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIGBQT1JUX0dFVGAgdG8gcmV0cmlldmUgcGh5c2ljYWwgcG9ydCBpbmZvcm1hdGlvbiwgYW5kIGFkZHMgU0ZQIHBvcnQgc3VwcG9ydCB0byB0aGUgUEhZIGZyYW1ld29yay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgbmV0bGluayBBUElzIGFuZCBtb2RpZmllcyBjb3JlIFBIWS9waHlsaW5rIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGFiZDUzOThjNTJjYTk4ODYwNjFlYjMwYTgxMjAyMDAyYWU2MmI0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTA6Mjk6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuaW5kZXggNWRkNGQxYjVkOTRiYi4uNjdhYzM0MDA0NjJiZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcbkBAIC0yMTAsNiArMjEwLDExIEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGRpc2NhcmRcbiAgICAgICAgIHZhbHVlOiAzMVxuKyAgLVxuKyAgICBuYW1lOiBwb3J0LXR5cGVcbisgICAgZG9jOiB0eXBlIG9mIHBoeXNpY2FsIGNvbm5lY3RvclxuKyAgICB0eXBlOiBlbnVtXG4rICAgIGVudHJpZXM6IFttZGksIHNmcF1cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xOTA1LDYgKzE5MTAsMzIgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBsaW5rXG4gICAgICAgICB0eXBlOiBuZXN0XG4gICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90XG4rICAtXG4rICAgIG5hbWU6IHBvcnRcbisgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnRcbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBoZWFkZXJcbisgICAgICAgIHR5cGU6IG5lc3RcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBpZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLW1vZGVzXG4rICAgICAgICB0eXBlOiBuZXN0XG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLWludGVyZmFjZXNcbisgICAgICAgIHR5cGU6IG5lc3RcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXRcbisgICAgICAtXG4rICAgICAgICBuYW1lOiB0eXBlXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IHBvcnQtdHlwZVxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHVwc3RyZWFtLXBvcnRcbisgICAgICAgIHR5cGU6IHUzMlxuIFxuIG9wZXJhdGlvbnM6XG4gICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbFxuQEAgLTI4NTksNiArMjg5MCwyOSBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gd29yc3QtY2hhbm5lbFxuICAgICAgICAgICAgIC0gbGlua1xuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXG4rICAgIC1cbisgICAgICBuYW1lOiBwb3J0LWdldFxuKyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZVxuK1xuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBvcnRcbitcbisgICAgICBkbzogXHUwMDI2cG9ydC1nZXQtb3BcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgICAgICAtIGlkXG4rICAgICAgICByZXBseTpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIGhlYWRlclxuKyAgICAgICAgICAgIC0gaWRcbisgICAgICAgICAgICAtIHN1cHBvcnRlZC1tb2Rlc1xuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLWludGVyZmFjZXNcbisgICAgICAgICAgICAtIHR5cGVcbisgICAgICAgICAgICAtIHVwc3RyZWFtLXBvcnRcbisgICAgICBkdW1wOlxuKyAgICAgICAgcmVxdWVzdDpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIGhlYWRlclxuIFxuIG1jYXN0LWdyb3VwczpcbiAgIGxpc3Q6XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdFxuaW5kZXggZTkyYWJmNDVmYWY1MC4uYjQzMjZjODliMDc1MSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdFxuQEAgLTI1MzcsNiArMjUzNywzOSBAQCBXaXRoaW4gZWFjaCBjaGFubmVsIG5lc3QsIG9ubHkgdGhlIG1ldHJpY3Mgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgd2lsbCBiZSBwcmVzZW50LlxuIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW5cbiBgYGluY2x1ZGUvbGludXgvcGh5LmhgYC5cbiBcbitQT1JUX0dFVFxuKz09PT09PT09XG4rXG4rUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsXG4rcmVmZXJyZWQgdG8gYXMgXCJwb3J0c1wiLiBVc2VyIG5lZWRzIHRvIHNwZWNpZnkgYSBQT1JUX0lEIGZvciB0aGUgRE8gb3BlcmF0aW9uLFxuK2luIHdoaWNoIGNhc2UgdGhlIERPIHJlcXVlc3QgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNwZWNpZmljIHBvcnQuXG4rXG4rQXMgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgcG9ydCwgdGhlIERVTVAgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIGxpc3QgdGhlXG4rcG9ydHMgcHJlc2VudCBvbiBhIGdpdmVuIGludGVyZmFjZSwgYnkgcGFzc2luZyBhbiBpbnRlcmZhY2UgaW5kZXggb3IgbmFtZSBpblxuK3RoZSBkdW1wIHJlcXVlc3QuXG4rXG4rUmVxdWVzdCBjb250ZW50czpcbitcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcbisgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgdTMyICAgICBwb3J0IGlkXG4rICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK0tlcm5lbCByZXNwb25zZSBjb250ZW50czpcbitcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgICAgbmVzdGVkICByZXF1ZXN0IGhlYWRlclxuKyAgYGBFVEhUT09MX0FfUE9SVF9JRGBgICAgICAgICAgICAgICAgICAgIHUzMiAgICAgdGhlIHBvcnQncyB1bmlxdWUgaWRlbnRpZmllcixcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBuZXRkZXZpY2UuXG4rICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFU2BgICAgICAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIGxpbmttb2Rlc1xuKyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFU2BgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBNSUlcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXNcbisgIGBgRVRIVE9PTF9BX1BPUlRfVFlQRWBgICAgICAgICAgICAgICAgICB1MzIgICAgIHRoZSBwb3J0IHR5cGVcbisgIGBgRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVGBgICAgICAgICB1MzIgICAgIElmIGFueSwgdGhlIGluZGV4IG9mIHRoZSBNSUlcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgdGhhdCBmZWVkcyBpbnRvIHRoaXNcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuXG4rICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuIFJlcXVlc3QgdHJhbnNsYXRpb25cbiA9PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtMjY0Nyw0ICsyNjgwLDUgQEAgYXJlIG5ldGxpbmsgb25seS5cbiAgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUEhZX0dFVGBgXG4gICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgXG4gICBgYFNJT0NTSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX1NFVGBgXG4rICBuL2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1BPUlRfR0VUYGBcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuaW5kZXggNmUyOGQ5MDk0YmNlMy4uMmE5YjFlYzkzYjcwZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbkBAIC05OSwxMyArOTksMjkgQEAgd2lsbCBldmVudHVhbGx5IGJlIGFibGUgdG8gcmVwb3J0IGl0cyBvd24ga3NldHRpbmdzOjpcbiAgICAgICAgICAgICAoX19fX18pLS0tLS18IFBvcnQgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0rXG4gXG4rU0ZQIHBvcnRzXG4rPT09PT09PT09XG4rXG4rU0ZQIGludGVyZmFjZXMgaW52b2x2ZSAyIGRpc3RpbmN0IGNvbXBvbmVudHMsIGVhY2ggcmVwcmVzZW50ZWQgYnlcbithIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWAgaW5zdGFuY2UgOlxuK1xuKyAtIFRoZSBTRlAgY2FnZSBpdHNlbGYgaXMgYSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgLiBJdCdzIHNwZWNpYWxcbisgICBpbiB0aGF0IGl0J3Mgbm90IGFuIE1ESSBpbnRlcmZhY2UsIGJ1dCByYXRoZXIgYSBob3QtcGx1Z2dhYmxlIE1JSS5cbisgICBUaGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCBhc3NvY2lhdGVkIHRvIGl0IGxpc3RzIHRoZSBkaWZmZXJlbnRcbisgICBNSUkgaW50ZXJmYWNlcyB3ZSBjYW4gdXNlIG9uIHRoZSBjYWdlLlxuK1xuKyAtIFRoZSBTRlAgbW9kdWxlLCB3aGVuIGluc2VydGVkLCB3aWxsIGFsc28gYmUgYXNzb2NpYXRlZCB0byBhXG4rICAgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCwgdGhhdCByZXByZXNlbnRzIHRoZSB2YXJpb3VzIGxpbmttb2Rlc1xuKyAgIHRoYXQgaXQgZ2l2ZXMgYWNjZXNzIHRvLiBUaGUgbW9kdWxlJ3MgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYFxuKyAgIGRvZXNuJ3Qgc3VwZXJzZWRlIHRoZSBjYWdlJ3MgcG9ydCwgaXQgcmVmZXJlbmNlcyBpdCB0aHJvdWdoXG4rICAgdGhlIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWAgOmM6bWVtYmVyOmB1cHN0cmVhbV9wb3J0YCBmaWVsZC5cbitcbiBOZXh0IHN0ZXBzXG4gPT09PT09PT09PVxuIFxuLUFzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCBvbmx5IHBvcnRzIGNvbnRyb2xsZWQgYnkgUEhZIGRldmljZXMgYXJlXG4tc3VwcG9ydGVkLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGFkZCB0aGUgTmV0bGluayBBUEkgdG8gZXhwb3NlIHRoZXNlXG4tdG8gdXNlcnNwYWNlIGFuZCBhZGQgc3VwcG9ydCBmb3IgcmF3IHBvcnRzIChjb250cm9sbGVkIGJ5IHNvbWUgZmlybXdhcmUsIGFuZCBkaXJlY3RseVxuLW1hbmFnZWQgYnkgdGhlIE5JQyBkcml2ZXIpLlxuK0FzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCB0aGUgcG9ydCdzIHByZXNlbmNlIGFuZCBpbmZvcm1hdGlvbiBjYW4gb25seVxuK2JlIHF1ZXJpZWQsIGFuZCBpdCdzIG5vdCBwb3NzaWJsZSB0byBjaGFuZ2UgYW55IG9mIHRoZSBwb3J0J3Mgc2V0dGluZ3Mgb3Igc2VsZWN0XG4rd2hpY2ggb25lIHNob3VsZCBiZSB1c2VkLlxuIFxuIEFub3RoZXIgcGFyYWxsZWwgdGFzayBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgTUlJIG11eGluZyBmcmFtZXdvcmsgdG8gYWxsb3cgdGhlXG4tY29udHJvbCBvZiBub24tUEhZIGRyaXZlciBtdWx0aS1wb3J0IHNldHVwcy5cbitjb250cm9sIG9mIG5vbi1QSFkgZHJpdmVuIG11bHRpLXBvcnQgc2V0dXBzLlxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDkzMmVhMWRiMDQ4ZTUuLjM5NWY4YjVkMTg0OTUgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xODgxNiw2ICsxODgxNiw3IEBAIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2V0aGVybmV0LWNvbm5lY3Rvci55YW1sXG4gRjpcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbiBGOlx0ZHJpdmVycy9uZXQvcGh5L3BoeV9wb3J0LmNcbiBGOlx0aW5jbHVkZS9saW51eC9waHlfcG9ydC5oXG4rRjpcdG5ldC9ldGh0b29sL3BvcnQuY1xuIEs6XHRzdHJ1Y3RcXHMrcGh5X3BvcnR8cGh5X3BvcnRfXG4gXG4gTkVUV09SS0lORyBbR0VORVJBTF1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaCBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXG5pbmRleCA0MjEwODhlNmY2ZThmLi5lYzNkMzlhMGFlMDZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmhcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXG5AQCAtNjYsNSArNjYsNyBAQCB2b2lkIHBoeV9jYXBzX21lZGl1bV9nZXRfc3VwcG9ydGVkKHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcbiBcdFx0XHRcdCAgIGVudW0gZXRodG9vbF9saW5rX21lZGl1bSBtZWRpdW0sXG4gXHRcdFx0XHQgICBpbnQgbGFuZXMpO1xuIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2Rlcyk7XG4rdm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmcm9tLFxuK1x0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTtcbiBcbiAjZW5kaWYgLyogX19QSFlfQ0FQU19IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xuaW5kZXggOTQyZDQzMTkxNTYxZS4uNTU4ZTRkZjRkNjNjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xuQEAgLTQ0NSwzICs0NDUsMjkgQEAgdTMyIHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxuIFx0cmV0dXJuIG1lZGl1bXM7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXMpO1xuK1xuKy8qKlxuKyAqIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMoKSAtIEZpbHRlciBsaW5rbW9kZXMgd2l0aCBhbiBpbnRlcmZhY2UgbGlzdFxuKyAqIEB0bzogU3RvcmVzIHRoZSBmaWx0ZXJlZCBsaW5rbW9kZXNcbisgKiBAZnJvbTogTGlua21vZGVzIHRvIGZpbHRlclxuKyAqIEBpbnRlcmZhY2VzOiBCaXRmaWVsZCBvZiBwaHlfaW50ZXJmYWNlX3QgdGhhdCB3ZSB1c2UgZm9yIGZpbHRlcmluZ1xuKyAqXG4rICogRmlsdGVyIHRoZSBwcm92aWRlZCBsaW5rbW9kZXMsIG9ubHkgdG8ga2VlcCB0aGUgb25lcyB3ZSBjYW4gcG9zc2libHkgYWNoaWV2ZVxuKyAqIHdoZW4gdXNpbmcgYW55IG9mIHRoZSBwcm92aWRlZCBNSUkgaW50ZXJmYWNlcy5cbisgKi9cbit2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sXG4rXHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4rXHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmludGVyZmFjZXMpXG4re1xuK1x0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soaWZhY2VzX3N1cHBvcnRlZCkgPSB7fTtcbitcdHVuc2lnbmVkIGludCBpZmFjZXNfY2FwcyA9IDA7XG4rXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuK1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChpbnRlcmZhY2UsIGludGVyZmFjZXMsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgpXG4rXHRcdGlmYWNlc19jYXBzIHw9IHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKGludGVyZmFjZSk7XG4rXG4rXHRwaHlfY2Fwc19saW5rbW9kZXMoaWZhY2VzX2NhcHMsIGlmYWNlc19zdXBwb3J0ZWQpO1xuK1xuK1x0bGlua21vZGVfYW5kKHRvLCBmcm9tLCBpZmFjZXNfc3VwcG9ydGVkKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbmluZGV4IDk0YjJlODVlMDBhMzcuLjNkYTY4NzJlYmJiYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTQ5MCwxMSArMTQ5MCwyMiBAQCBzdGF0aWMgaW50IHBoeV9zZnBfY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4ge1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXY7XG4rXHRpbnQgcmV0O1xuIFxuLVx0aWYgKGRldilcbi1cdFx0cmV0dXJuIHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcbitcdHBoeWRldi1cdTAwM2VoYXNfc2ZwX21vZF9waHkgPSB0cnVlO1xuK1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHQvKiBJZiB3ZSBhcmVuJ3QgYXR0YWNoZWQgdG8gYSBuZXRkZXYsIHdlIGNhbid0IGFkZCB0aGUgU0ZQIFBIWSB0byBpdHNcbitcdCAqIHRvcG9sb2d5LlxuK1x0ICovXG4rXHRpZiAoIWRldilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC0xNTEyLDggKzE1MjMsMTIgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbiBcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2O1xuIFxuK1x0cGh5ZGV2LVx1MDAzZWhhc19zZnBfbW9kX3BoeSA9IGZhbHNlO1xuK1xuIFx0aWYgKGRldilcbiBcdFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTtcbitcbitcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIE5VTEwpO1xuIH1cbiBcbiAvKipcbkBAIC0xNjE3LDYgKzE2MzIsNzcgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9saW5rX2Rvd24odm9pZCAqdXBzdHJlYW0pXG4gXHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWxpbmtfZG93bihwb3J0KTtcbiB9XG4gXG4rc3RhdGljIGludCBwaHlfYWRkX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdC8qIENyZWF0ZSBtb2QgcG9ydCAqL1xuK1x0cG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7XG4rXHRpZiAoIXBvcnQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cG9ydC1cdTAwM2VhY3RpdmUgPSB0cnVlO1xuK1xuK1x0Y2FwcyA9IHNmcF9nZXRfbW9kdWxlX2NhcHMocGh5ZGV2LVx1MDAzZXNmcF9idXMpO1xuK1xuK1x0cGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyhwb3J0LVx1MDAzZXN1cHBvcnRlZCwgY2Fwcy1cdTAwM2VsaW5rX21vZGVzLFxuK1x0XHRcdFx0XHRwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydC1cdTAwM2VpbnRlcmZhY2VzKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2KSB7XG4rXHRcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiwgcG9ydCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIHdlIGRvbid0IHVzZSBwaHlfYWRkX3BvcnQoKSBoZXJlIGFzIHRoZSBtb2R1bGUgcG9ydCBpc24ndCBhIGRpcmVjdFxuK1x0ICogaW50ZXJmYWNlIGZyb20gdGhlIFBIWSwgYnV0IHJhdGhlciBhbiBleHRlbnNpb24gdG8gdGhlIHNmcC1idXMsIHRoYXRcbitcdCAqIGlzIGFscmVhZHkgcmVwcmVzZW50ZWQgYnkgaXRzIG93biBwaHlfcG9ydFxuK1x0ICovXG4rXHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBwb3J0O1xuK1xuK1x0cG9ydC1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGh5X2RlbF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpZiAoIXBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4rXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiwgcGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbitcbitcdHBoeV9wb3J0X2Rlc3Ryb3kocGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbitcdHBoeWRldi1cdTAwM2Vtb2RfcG9ydCA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXG4re1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuK1xuK1x0LyogSWYgdGhlcmUncyBhIGRvd25zdHJlYW0gU0ZQIG1vZHVsZSwgYW5kIGl0IGRvZXNuJ3QgY29udGFpbiBhIFBIWVxuK1x0ICogZGV2aWNlLCBsZXQncyBjcmVhdGUgYSBwaHlfcG9ydCB0byByZXByZXNlbnQgdGhhdCBtb2R1bGUuXG4rXHQgKi9cbitcdGlmICghcGh5ZGV2LVx1MDAzZWhhc19zZnBfbW9kX3BoeSlcbitcdFx0cmV0dXJuIHBoeV9hZGRfc2ZwX21vZF9wb3J0KHBoeWRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGh5X3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSlcbit7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4rXG4rXHQvKiBDYWxsZWQgdXBvbiBtb2R1bGUgcmVtb3ZhbCBvciB1cHN0cmVhbSByZW1vdmFsICovXG4rXHRpZiAoIXBoeWRldi1cdTAwM2VoYXNfc2ZwX21vZF9waHkpXG4rXHRcdHBoeV9kZWxfc2ZwX21vZF9wb3J0KHBoeWRldik7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcbiBcdC5hdHRhY2ggPSBwaHlfc2ZwX2F0dGFjaCxcbiBcdC5kZXRhY2ggPSBwaHlfc2ZwX2RldGFjaCxcbkBAIC0xNjI2LDYgKzE3MTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG4gXHQubGlua19kb3duID0gcGh5X3NmcF9saW5rX2Rvd24sXG4gXHQuY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Nvbm5lY3RfcGh5LFxuIFx0LmRpc2Nvbm5lY3RfcGh5ID0gcGh5X3NmcF9kaXNjb25uZWN0X3BoeSxcbitcdC5tb2R1bGVfc3RhcnQgPSBwaHlfc2ZwX21vZHVsZV9zdGFydCxcbitcdC5tb2R1bGVfc3RvcCA9IHBoeV9zZnBfbW9kdWxlX3N0b3AsXG4gfTtcbiBcbiBzdGF0aWMgaW50IHBoeV9hZGRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG5AQCAtMTY3MywxMyArMTc2MSwxMyBAQCBzdGF0aWMgdm9pZCBwaHlfZGVsX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuIFx0cGh5ZGV2LVx1MDAzZW5fcG9ydHMtLTtcbiB9XG4gXG4tc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbitzdGF0aWMgc3RydWN0IHBoeV9wb3J0ICpwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghcG9ydClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuIFx0cG9ydC1cdTAwM2VwYXJlbnRfdHlwZSA9IFBIWV9QT1JUX1BIWTtcbiBcdHBvcnQtXHUwMDNlcGh5ID0gcGh5ZGV2O1xuQEAgLTE2OTQsMTAgKzE3ODIsMTIgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdCAqIHdoZW4gYXR0YWNoaW5nIHRoZSBwb3J0IHRvIHRoZSBwaHlkZXYuXG4gXHQgKi9cbiBcdHJldCA9IHBoeV9hZGRfcG9ydChwaHlkZXYsIHBvcnQpO1xuLVx0aWYgKHJldClcbitcdGlmIChyZXQpIHtcbiBcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gcG9ydDtcbiB9XG4gXG4gLyoqXG5AQCAtMTcwNiwyNSArMTc5Niw1MCBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuICAqL1xuIHN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbitcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2ZwX2J1cyAqYnVzO1xuLVx0aW50IHJldCA9IDA7XG4rXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpIHtcbi1cdFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKTtcbi1cdFx0aWYgKElTX0VSUihidXMpKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKGJ1cyk7XG4rXHRpZiAoIXBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpXG4rXHRcdHJldHVybiAwO1xuIFxuLVx0XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbitcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XG4rXHRpZiAoSVNfRVJSKGJ1cykpXG4rXHRcdHJldHVybiBQVFJfRVJSKGJ1cyk7XG4gXG4tXHRcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG4tXHRcdHNmcF9idXNfcHV0KGJ1cyk7XG4rXHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbiBcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XG4rXHRpZiAoYnVzKSB7XG4rXHRcdHBvcnQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbitcdFx0aWYgKElTX0VSUihwb3J0KSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIocG9ydCk7XG4rXHRcdFx0cG9ydCA9IE5VTEw7XG4rXHRcdFx0Z290byBvdXRfc2ZwO1xuK1x0XHR9XG4gXHR9XG4gXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZXNmcF9idXMpXG4tXHRcdHJldCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xuK1x0cGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBwb3J0O1xuK1xuK1x0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3BvcnQ7XG4rXG4rXHQvKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIGdyYWJzIGEgcmVmIHRvIHRoZSBzZnAgYnVzIG9uIHN1Y2Nlc3MsIGl0J3NcbitcdCAqIHNhZmUgdG8gcmVsZWFzZSBpdCBub3cuXG4rXHQgKi9cbitcdHNmcF9idXNfcHV0KGJ1cyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK1xuK291dF9wb3J0OlxuK1x0aWYgKHBvcnQpIHtcbitcdFx0cGh5X2RlbF9wb3J0KHBoeWRldiwgcG9ydCk7XG4rXHRcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XG4rXHRcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbitcdH1cbitvdXRfc2ZwOlxuK1x0c2ZwX2J1c19wdXQoYnVzKTtcbitcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE4MTUsNiArMTkzMCwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdFx0ZXJyID0gcGh5X2xpbmtfdG9wb19hZGRfcGh5KGRldiwgcGh5ZGV2LCBQSFlfVVBTVFJFQU1fTUFDLCBkZXYpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbW9kX3BvcnQpIHtcbitcdFx0XHRlcnIgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KGRldiwgcGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0Z290byBlcnJvcjtcbitcdFx0fVxuIFx0fVxuIFxuIFx0LyogU29tZSBFdGhlcm5ldCBkcml2ZXJzIHRyeSB0byBjb25uZWN0IHRvIGEgUEhZIGRldmljZSBiZWZvcmVcbkBAIC0xOTUxLDYgKzIwNzIsOCBAQCB2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldi1cdTAwM2VwaHlkZXYgPSBOVUxMO1xuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2ID0gTlVMTDtcbiBcdFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5ZGV2KTtcbitcdFx0aWYgKHBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbitcdFx0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KGRldiwgcGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbiBcdH1cbiBcbiBcdHBoeWRldi1cdTAwM2VwaHlfbGlua19jaGFuZ2UgPSBOVUxMO1xuQEAgLTM2MDQsNiArMzcyNywyNSBAQCBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5X2dldF9zZnBfcG9ydCk7XG4gXG4rLyoqXG4rICogcGh5X3NldF91cHN0cmVhbV9wb3J0KCkgLSBTZXRzIHRoZSBwaHlfcG9ydCBjb250cm9sbGluZyB0aGUgTUlJIHRoaXMgUEhZIGlzXG4rICpcdFx0XHQgICAgIGF0dGFjaGVkIHRvLlxuKyAqIEBwaHlkZXY6IHBvaW50ZXIgdG8gdGhlIFBIWSBkZXZpY2Ugd2Ugc2V0IHRoZSB1cHN0cmVhbSBvZi5cbisgKiBAcG9ydDogVGhlIHBoeV9wb3J0IHVwc3RyZWFtIG9mIHRoaXMgUEhZLCBjYW4gYmUgTlVMTC5cbisgKi9cbit2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHBoeV9wb3J0ICpsb2NhbF9wb3J0O1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdHBoeWRldi1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcbitcbitcdHBoeV9mb3JfZWFjaF9wb3J0KHBoeWRldiwgbG9jYWxfcG9ydClcbitcdFx0bG9jYWxfcG9ydC1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3NldF91cHN0cmVhbV9wb3J0KTtcbitcbiAvKipcbiAgKiBmd25vZGVfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZndub2RlLCBmaW5kIHRoZSBtZGlvX2RldmljZVxuICAqIEBmd25vZGU6IHBvaW50ZXIgdG8gdGhlIG1kaW9fZGV2aWNlJ3MgZndub2RlXG5AQCAtMzg0Miw2ICszOTg0LDcgQEAgc3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbiBcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbitcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbiBcbiBcdHBoeV9jbGVhbnVwX3BvcnRzKHBoeWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuaW5kZXggNDEzNGRlN2FlMzEzZC4uNjcxMGExOTk5NjdhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuQEAgLTcsNiArNyw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9wb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbkBAIC0yMywxNyArMjQsODkgQEAgc3RhdGljIGludCBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHhhX2luaXRfZmxhZ3MoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBYQV9GTEFHU19BTExPQzEpO1xuIFx0dG9wby1cdTAwM2VuZXh0X3BoeV9pbmRleCA9IDE7XG4gXG4rXHR4YV9pbml0X2ZsYWdzKFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIFhBX0ZMQUdTX0FMTE9DMSk7XG4rXHR0b3BvLVx1MDAzZW5leHRfcG9ydF9pbmRleCA9IDE7XG4rXG4gXHRkZXYtXHUwMDNlbGlua190b3BvID0gdG9wbztcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICpwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoZGV2LVx1MDAzZWxpbmtfdG9wbylcbitcdFx0cmV0dXJuIGRldi1cdTAwM2VsaW5rX3RvcG87XG4rXG4rXHQvKiBUaGUgdG9wb2xvZ3kgaXMgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIHdlIGFkZCBhbiBvYmplY3QgdG8gaXQuXG4rXHQgKiBJdCBpcyBmcmVlZCBhbG9uZ3NpZGUgdGhlIG5ldGRldi4gSXQgY2FuIGJlIGNhbGxlZCBvbiBtdWx0aXBsZVxuK1x0ICogY29udGV4dHM6XG4rXHQgKiAgLSBJdCBjYW4gYmUgY2FsbGVkIGZyb20gLnByb2JlKCkgOiBObyBydG5sLCBubyBuZXRkZXZfbG9ja1xuK1x0ICogIC0gLm5kb19vcGVuKCkgOiBydG5sIGFuZCBwb3NzaWJseSBuZXRkZXZfbG9ja1xuK1x0ICogIC0gU0ZQIHN0YXRlIG1hY2hpbmUgOiBydG5sIGhlbGQgb3Igbm90XG4rXHQgKlxuK1x0ICogIEhvd2V2ZXIsIHdlIGNhbid0IHJlYWxseSBoYXZlIHJhY2VzIDpcbitcdCAqICAtIElmIHdlIGhhdmUgYSBQSFksIHBoeV9saW5rX3RvcG9fYWRkX3BoeSgpIHdpbGwgYWx3YXlzIHJ1biBmaXJzdFxuK1x0ICogICAgYW5kIHRyaWdnZXIgdGhlIGFsbG9jLiBPbmx5IHRoZW4gdGhlIHBvcnRzIGNhbiBiZSBhZGRlZCB0aHJvdWdoXG4rXHQgKiAgICBwaHlsaWIgb2Ygc2ZwLlxuK1x0ICogIC0gSWYgd2UgZG9uJ3QsIHRoZSBTRlAgcG9ydCBmb3IgdGhlIGNhZ2UgaXMgcmVnaXN0ZXJlZCBmaXJzdCwgYW5kXG4rXHQgKiAgICBvbmx5IHRoZW4gb3RoZXIgcG9ydHMvUEhZcyBjYW4gYmUgcmVnaXN0ZXJlZC5cbitcdCAqL1xuK1x0cmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1xuK1x0cmV0dXJuIGRldi1cdTAwM2VsaW5rX3RvcG87XG4rfVxuK1xuK2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbit7XG4rXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG87XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogUG9ydHMgY2FuIG5vdyBiZSBxdWVyaWVkIHdpdGhvdXQgcnRubCBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLCB3aGljaFxuK1x0ICogd2UgZG9uJ3Qgc3VwcG9ydCBub3cgYXMgcG9ydCByZXRyaWV2YWwgaXMgZG9uZSB1bmRlciBydG5sLlxuK1x0ICogV2UgZG9uJ3QgaGF2ZSBwaHlfcG9ydCBlbmFibGVkIGRldmljZXMgeWV0LCBsZXQncyBtYWtlIHN1cmVcbitcdCAqIHdlIGFyZSBsb3VkbHkgd2FybmVkIGFib3V0IHRoYXQgd2hlbiBpdCBoYXBwZW5zLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHR0b3BvID0gcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2MoZGV2KTtcbitcdGlmIChJU19FUlIodG9wbykpXG4rXHRcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xuK1xuK1x0LyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovXG4rXHRpZiAocG9ydC1cdTAwM2VpZClcbitcdFx0cmV0ID0geGFfaW5zZXJ0KFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIHBvcnQtXHUwMDNlaWQsIHBvcnQsIEdGUF9LRVJORUwpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSB4YV9hbGxvY19jeWNsaWMoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgXHUwMDI2cG9ydC1cdTAwM2VpZCwgcG9ydCxcbitcdFx0XHRcdCAgICAgIHhhX2xpbWl0XzMyYiwgXHUwMDI2dG9wby1cdTAwM2VuZXh0X3BvcnRfaW5kZXgsXG4rXHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fYWRkX3BvcnQpO1xuK1xuK3ZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbitcbitcdGlmICghdG9wbylcbitcdFx0cmV0dXJuO1xuK1xuK1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgcG9ydC1cdTAwM2VpZCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fZGVsX3BvcnQpO1xuK1xuIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4gXHRcdFx0ICBlbnVtIHBoeV91cHN0cmVhbSB1cHQsIHZvaWQgKnVwc3RyZWFtKVxuIHtcbi1cdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cdTAwM2VsaW5rX3RvcG87XG4rXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG87XG4gXHRzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogZXRodG9vbCBvcHMgbWF5IHJ1biB3aXRob3V0IHJ0bmxfbG9jaywgYW5kIHJ0bmxfbG9jayBpcyB3aGF0XG5AQCAtNDUsMTMgKzExOCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChXQVJOX09OX09OQ0UobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghdG9wbykge1xuLVx0XHRyZXQgPSBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koZGV2KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHR0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbi1cdH1cbitcdHRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpO1xuK1x0aWYgKElTX0VSUih0b3BvKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIodG9wbyk7XG4gXG4gXHRwZG4gPSBremFsbG9jX29iaigqcGRuKTtcbiBcdGlmICghcGRuKVxuQEAgLTg2LDggKzE1NSwyMCBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbitcdC8qIEFkZCBhbGwgdGhlIFBIWSdzIHBvcnRzIHRvIHRoZSB0b3BvbG9neSAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwaHktXHUwMDNlcG9ydHMsIGhlYWQpIHtcbitcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBvcnQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gZGVsX3BvcnRzO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gXG4rZGVsX3BvcnRzOlxuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbitcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuK1xuK1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBwaHktXHUwMDNlcGh5aW5kZXgpO1xuIGVycjpcbiBcdGtmcmVlKHBkbik7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTk5LDEwICsxODAsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuIFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuIFxuIFx0aWYgKCF0b3BvKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbitcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuK1xuIFx0cGRuID0geGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBwaHktXHUwMDNlcGh5aW5kZXgpO1xuIFxuIFx0LyogV2UgZGVsZXRlIHRoZSBQSFkgZnJvbSB0aGUgdG9wb2xvZ3ksIGhvd2V2ZXIgd2UgZG9uJ3QgcmUtc2V0IHRoZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5pbmRleCBmNDBhY2MwZDQxMzM4Li5hNWYwMjUxODdhZmEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuQEAgLTE0LDYgKzE0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9maXhlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9wb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbkBAIC05Myw2ICs5NSw4IEBAIHN0cnVjdCBwaHlsaW5rIHtcbiBcdERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLKHNmcF9pbnRlcmZhY2VzKTtcbiBcdF9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKHNmcF9zdXBwb3J0KTtcbiBcdHU4IHNmcF9wb3J0O1xuK1x0c3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0O1xuK1x0c3RydWN0IHBoeV9wb3J0ICptb2RfcG9ydDtcbiBcbiBcdHN0cnVjdCBlZWVfY29uZmlnIGVlZV9jZmc7XG4gXG5AQCAtMTc2NCw2ICsxNzY4LDUxIEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfZml4ZWRfcG9sbChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzO1xuIFxuK3N0YXRpYyBpbnQgcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4re1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoIXBsLVx1MDAzZW5ldGRldiB8fCAhcGwtXHUwMDNlc2ZwX2J1cylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcbitcdGlmICghcG9ydClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwb3J0LVx1MDAzZWlzX3NmcCA9IHRydWU7XG4rXHRwb3J0LVx1MDAzZWlzX21paSA9IHRydWU7XG4rXHRwb3J0LVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4rXG4rXHRwaHlfaW50ZXJmYWNlX2FuZChwb3J0LVx1MDAzZWludGVyZmFjZXMsIHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyxcbitcdFx0XHQgIHBoeWxpbmtfc2ZwX2ludGVyZmFjZXMpO1xuK1x0cGh5X3BvcnRfdXBkYXRlX3N1cHBvcnRlZChwb3J0KTtcbitcbitcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQocGwtXHUwMDNlbmV0ZGV2LCBwb3J0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3lfcG9ydDtcbitcbitcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBwb3J0O1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rb3V0X2Rlc3Ryb3lfcG9ydDpcbitcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XG4rXHRwbC1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbit7XG4rXHRpZiAocGwtXHUwMDNlbmV0ZGV2IFx1MDAyNlx1MDAyNiBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KVxuK1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4rXG4rXHRpZiAocGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydClcbitcdFx0cGh5X3BvcnRfZGVzdHJveShwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbitcbitcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4ge1xuQEAgLTE3ODEsOSArMTgzMCwxOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcbiBcdHBsLVx1MDAzZXNmcF9idXMgPSBidXM7XG4gXG4rXHRyZXQgPSBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHBsKTtcbitcdGlmIChyZXQpIHtcbitcdFx0c2ZwX2J1c19wdXQoYnVzKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbiBcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGwsIFx1MDAyNnNmcF9waHlsaW5rX29wcyk7XG4gXHRzZnBfYnVzX3B1dChidXMpO1xuIFxuK1x0aWYgKHJldClcbitcdFx0cGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTk0Niw2ICsyMDA0LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpO1xuIHZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbClcbiB7XG4gXHRzZnBfYnVzX2RlbF91cHN0cmVhbShwbC1cdTAwM2VzZnBfYnVzKTtcbitcdHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHBsKTtcbiBcdGlmIChwbC1cdTAwM2VsaW5rX2dwaW8pXG4gXHRcdGdwaW9kX3B1dChwbC1cdTAwM2VsaW5rX2dwaW8pO1xuIFxuQEAgLTM4NzEsMTQgKzM5MzAsNjcgQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3JlbW92ZSh2b2lkICp1cHN0cmVhbSlcbiBcdHBoeV9pbnRlcmZhY2VfemVybyhwbC1cdTAwM2VzZnBfaW50ZXJmYWNlcyk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzO1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoIXBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogQ3JlYXRlIG1vZCBwb3J0ICovXG4rXHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcbitcdGlmICghcG9ydClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwb3J0LVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4rXG4rXHRjYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwbC1cdTAwM2VzZnBfYnVzKTtcbitcbitcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXHUwMDNlbGlua19tb2RlcyxcbitcdFx0XHRcdFx0cGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydC1cdTAwM2VpbnRlcmZhY2VzKTtcbitcbitcdGlmIChwbC1cdTAwM2VuZXRkZXYpIHtcbitcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBvcnQpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRwb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0O1xuK1xuK1x0cGwtXHUwMDNlbW9kX3BvcnQgPSBwb3J0O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4re1xuK1x0aWYgKCFwbC1cdTAwM2Vtb2RfcG9ydClcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHBsLVx1MDAzZW5ldGRldilcbitcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBsLVx1MDAzZW1vZF9wb3J0KTtcbitcbitcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXHUwMDNlbW9kX3BvcnQpO1xuK1x0cGwtXHUwMDNlbW9kX3BvcnQgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcbiB7XG4gXHRzdHJ1Y3QgcGh5bGluayAqcGwgPSB1cHN0cmVhbTtcbitcdGludCByZXQ7XG4gXG4gXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdGFydCB0aGUgUEhZIG5vdy4gKi9cbiBcdGlmIChwbC1cdTAwM2VwaHlkZXYpIHtcbiBcdFx0cGh5X3N0YXJ0KHBsLVx1MDAzZXBoeWRldik7XG4gXHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHBsKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0LyogSWYgdGhlIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWSBidXQgd2UgZGlkbid0IGRldGVjdCBvbmUgd2VcbkBAIC0zODg3LDcgKzM5OTksMTYgQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXG4gXHRpZiAoIXBsLVx1MDAzZXNmcF9tYXlfaGF2ZV9waHkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcbitcdHJldCA9IHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZGVsX21vZF9wb3J0O1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZGVsX21vZF9wb3J0OlxuK1x0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxuQEAgLTM4OTcsNiArNDAxOCw4IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxuIFx0LyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi9cbiBcdGlmIChwbC1cdTAwM2VwaHlkZXYpXG4gXHRcdHBoeV9zdG9wKHBsLVx1MDAzZXBoeWRldik7XG4rXHRlbHNlXG4rXHRcdHBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChwbCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSlcbkBAIC0zOTQxLDYgKzQwNjQsOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxuIFx0cGh5X2ludGVyZmFjZV9hbmQocGh5LVx1MDAzZWhvc3RfaW50ZXJmYWNlcywgcGh5bGlua19zZnBfaW50ZXJmYWNlcyxcbiBcdFx0XHQgIHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXG4rXHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbitcbiBcdC8qIERvIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gKi9cbiBcdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfcGh5KHBsLCBwaHkpO1xuIH1cbkBAIC0zOTQ5LDYgKzQwNzQsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkodXBzdHJlYW0pO1xuK1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeWRldiwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDExMDkyYzMxNzViM2QuLjc0MWNhN2EwYTI1NzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtNTgyLDYgKzU4Miw3IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcbiAgKiBAd29sX2VuYWJsZWQ6IFNldCB0byB0cnVlIGlmIHRoZSBQSFkgb3IgdGhlIGF0dGFjaGVkIE1BQyBoYXZlIFdha2Utb24tTEFOXG4gICogXHRcdCBlbmFibGVkLlxuICAqIEBpc19nZW5waHlfZHJpdmVuOiBQSFkgaXMgZHJpdmVuIGJ5IG9uZSBvZiB0aGUgZ2VuZXJpYyBQSFkgZHJpdmVyc1xuKyAqIEBoYXNfc2ZwX21vZF9waHk6IFNldCB0cnVlIGlmIGRvd25zdHJlYW0gU0ZQIGJ1cydzIG1vZHVsZSBjb250YWlucyBhIFBIWVxuICAqIEBzdGF0ZTogU3RhdGUgb2YgdGhlIFBIWSBmb3IgbWFuYWdlbWVudCBwdXJwb3Nlc1xuICAqIEBkZXZfZmxhZ3M6IERldmljZS1zcGVjaWZpYyBmbGFncyB1c2VkIGJ5IHRoZSBQSFkgZHJpdmVyLlxuICAqXG5AQCAtNTk0LDYgKzU5NSw5IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcbiAgKiBAcGh5bGluazogUG9pbnRlciB0byBwaHlsaW5rIGluc3RhbmNlIGZvciB0aGlzIFBIWVxuICAqIEBzZnBfYnVzX2F0dGFjaGVkOiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgU0ZQIGJ1cyBoYXMgYmVlbiBhdHRhY2hlZFxuICAqIEBzZnBfYnVzOiBTRlAgYnVzIGF0dGFjaGVkIHRvIHRoaXMgUEhZJ3MgZmliZXIgcG9ydFxuKyAqIEBzZnBfY2FnZV9wb3J0OiBUaGUgcGh5X3BvcnQgY29ubmVjdGVkIHRvIHRoZSBkb3duc3RyZWFtIFNGUCBjYWdlXG4rICogQG1vZF9wb3J0OiBwaHlfcG9ydCByZXByZXNlbnRpbmcgdGhlIFNGUCBtb2R1bGUsIGlmIGl0IGlzIHBoeS1sZXNzXG4rICogQHVwc3RyZWFtX3BvcnQ6IHBoeV9wb3J0IHRoaXMgUEhZJ3MgTUlJIGF0dGFjaGVzIHRvLCBpZiBhbnlcbiAgKiBAYXR0YWNoZWRfZGV2OiBUaGUgYXR0YWNoZWQgZW5ldCBkcml2ZXIncyBkZXZpY2UgaW5zdGFuY2UgcHRyXG4gICogQGFkanVzdF9saW5rOiBDYWxsYmFjayBmb3IgdGhlIGVuZXQgY29udHJvbGxlciB0byByZXNwb25kIHRvIGNoYW5nZXM6IGluIHRoZVxuICAqICAgICAgICAgICAgICAgbGluayBzdGF0ZS5cbkBAIC03MDYsNiArNzEwLDcgQEAgc3RydWN0IHBoeV9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaXJxX3JlcnVuOjE7XG4gXG4gXHR1bnNpZ25lZCBkZWZhdWx0X3RpbWVzdGFtcDoxO1xuK1x0dW5zaWduZWQgaGFzX3NmcF9tb2RfcGh5OjE7XG4gXG4gXHRpbnQgcmF0ZV9tYXRjaGluZztcbiBcbkBAIC03ODUsNiArNzkwLDkgQEAgc3RydWN0IHBoeV9kZXZpY2Uge1xuIFx0LyogVGhpcyBtYXkgYmUgbW9kaWZpZWQgdW5kZXIgdGhlIHJ0bmwgbG9jayAqL1xuIFx0Ym9vbCBzZnBfYnVzX2F0dGFjaGVkO1xuIFx0c3RydWN0IHNmcF9idXMgKnNmcF9idXM7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xuK1x0c3RydWN0IHBoeV9wb3J0ICp1cHN0cmVhbV9wb3J0O1xuIFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqYXR0YWNoZWRfZGV2O1xuIFx0c3RydWN0IG1paV90aW1lc3RhbXBlciAqbWlpX3RzO1xuQEAgLTI0NjgsNiArMjQ3Niw4IEBAIGludCBfX3BoeV9od3RzdGFtcF9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcbiBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4rdm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcbitcbiAvKipcbiAgKiBwaHlfbW9kdWxlX2RyaXZlcigpIC0gSGVscGVyIG1hY3JvIGZvciByZWdpc3RlcmluZyBQSFkgZHJpdmVyc1xuICAqIEBfX3BoeV9kcml2ZXJzOiBhcnJheSBvZiBQSFkgZHJpdmVycyB0byByZWdpc3RlclxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxuaW5kZXggOTU1NzVmNjhkNWJjNy4uOTU4NTI4MmNhZTNmYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXG5AQCAtMTMsMTQgKzEzLDE5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuIHN0cnVjdCB4YXJyYXk7XG4gc3RydWN0IHBoeV9kZXZpY2U7XG4rc3RydWN0IHBoeV9wb3J0O1xuIHN0cnVjdCBzZnBfYnVzO1xuIFxuIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSB7XG4gXHRzdHJ1Y3QgeGFycmF5IHBoeXM7XG4gXHR1MzIgbmV4dF9waHlfaW5kZXg7XG4rXG4rXHRzdHJ1Y3QgeGFycmF5IHBvcnRzO1xuK1x0dTMyIG5leHRfcG9ydF9pbmRleDtcbiB9O1xuIFxuIHN0cnVjdCBwaHlfZGV2aWNlX25vZGUge1xuQEAgLTQ4LDYgKzUzLDkgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuIFxuK2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4rdm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqXG4gcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiB7XG5AQCAtNjQsNiArNzIsMjUgQEAgcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXG4rcGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZClcbit7XG4rXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuK1xuK1x0aWYgKCF0b3BvKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdC8qIHBvcnRzIGluIHRoZSB0b3BvIGFyZSBSVE5MIHByb3RlY3RlZCwgYnV0IG1heSBiZSBhY2Nlc3NlZCB1bmRlclxuK1x0ICogbmV0ZGV2X2xvY2sgZm9yIG9wcy1sb2NrZWQgZGV2aWNlcy4gRm9yIG5vdyBrZWVwIHRoZW0gdW5kZXIgcnRubFxuK1x0ICogcHJvdGVjdGlvbiwgYXMgbm8gb3BzLWxvY2tlZCBkZXZpY2VzIGhhdmUgcGh5X3BvcnQgY2FwYWJpbGl0aWVzXG4rXHQgKiB5ZXQuXG4rXHQgKi9cbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHQvKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwgd2hpbGUgaGFuZGxpbmcgdGhlIHBoeV9wb3J0ICovXG4rXHRyZXR1cm4geGFfbG9hZChcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzLCBwb3J0X2lkKTtcbit9XG4rXG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbkBAIC03NywxMSArMTA0LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0IHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcbiBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXG4rcGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZClcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9fUEhZX0xJTktfVE9QT0xPR1lfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaCBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuaW5kZXggMGVmMGY1Y2U0NzA5Mi4uOGY0NWMwMzFjYmMxMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oXG5AQCAtMzYsOSArMzYsMTIgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7XG4gLyoqXG4gICogc3RydWN0IHBoeV9wb3J0IC0gQSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldHdvcmsgZGV2aWNlIHBoeXNpY2FsIGludGVyZmFjZVxuICAqXG4rICogQGlkOiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBvcnQgd2l0aGluIHRoZSB0b3BvbG9neVxuICAqIEBoZWFkOiBVc2VkIGJ5IHRoZSBwb3J0J3MgcGFyZW50IHRvIGxpc3QgcG9ydHNcbiAgKiBAcGFyZW50X3R5cGU6IFRoZSB0eXBlIG9mIGRldmljZSB0aGlzIHBvcnQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvXG4gICogQHBoeTogSWYgdGhlIHBhcmVudCBpcyBQSFlfUE9SVF9QSFlERVYsIHRoZSBQSFkgY29udHJvbGxpbmcgdGhhdCBwb3J0XG4rICogQHVwc3RyZWFtX3BvcnQ6IEluZGljYXRlcyB0aGUgTUlJIHBvcnQgdGhhdCBmZWVkcyB0aGlzIHBvcnQsIGlmIGFueSxcbisgKlx0XHQgICBlLmcuIHRoZSBTRlAgY2FnZSBwb3J0IGZvciBhIFNGUCBtb2R1bGUgcG9ydC5cbiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlclxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxuICAqIEBtZWRpdW1zOiBCaXRtYXNrIG9mIHRoZSBwaHlzaWNhbCBtZWRpdW1zIHRoaXMgcG9ydCBwcm92aWRlcyBhY2Nlc3MgdG9cbkBAIC01MiwxMSArNTUsMTMgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7XG4gICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuXG4gICovXG4gc3RydWN0IHBoeV9wb3J0IHtcbitcdHUzMiBpZDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgaGVhZDtcbiBcdGVudW0gcGh5X3BvcnRfcGFyZW50IHBhcmVudF90eXBlO1xuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xuIFx0fTtcbitcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcbiBcbiBcdGNvbnN0IHN0cnVjdCBwaHlfcG9ydF9vcHMgKm9wcztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmMy4uZjlkODc5NGVhYmMxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbkBAIC03OCw2ICs3OCwxMSBAQCBlbnVtIGV0aHRvb2xfcHNlX2V2ZW50IHtcbiBcdEVUSFRPT0xfUFNFX0VWRU5UX1NXX1BXX0NPTlRST0xfRVJST1IgPSA2NCxcbiB9O1xuIFxuK2VudW0gZXRodG9vbF9wb3J0X3R5cGUge1xuK1x0RVRIVE9PTF9QT1JUX1RZUEVfTURJLFxuK1x0RVRIVE9PTF9QT1JUX1RZUEVfU0ZQLFxuK307XG4rXG4gZW51bSB7XG4gXHRFVEhUT09MX0FfSEVBREVSX1VOU1BFQyxcbiBcdEVUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYLFxuQEAgLTg0MCw2ICs4NDUsMTggQEAgZW51bSB7XG4gXHRFVEhUT09MX0FfTVNFX01BWCA9IChfX0VUSFRPT0xfQV9NU0VfQ05UIC0gMSlcbiB9O1xuIFxuK2VudW0ge1xuK1x0RVRIVE9PTF9BX1BPUlRfSEVBREVSID0gMSxcbitcdEVUSFRPT0xfQV9QT1JUX0lELFxuK1x0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxuK1x0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsXG4rXHRFVEhUT09MX0FfUE9SVF9UWVBFLFxuK1x0RVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCxcbitcbitcdF9fRVRIVE9PTF9BX1BPUlRfQ05ULFxuK1x0RVRIVE9PTF9BX1BPUlRfTUFYID0gKF9fRVRIVE9PTF9BX1BPUlRfQ05UIC0gMSlcbit9O1xuK1xuIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfVVNFUl9OT05FID0gMCxcbiBcdEVUSFRPT0xfTVNHX1NUUlNFVF9HRVQgPSAxLFxuQEAgLTg5Myw2ICs5MTAsNyBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfQUNULFxuIFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9BQ1QsXG4gXHRFVEhUT09MX01TR19NU0VfR0VULFxuK1x0RVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4gXG4gXHRfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULFxuIFx0RVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpXG5AQCAtOTU0LDYgKzk3Miw3IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9OVEYsXG4gXHRFVEhUT09MX01TR19SU1NfREVMRVRFX05URixcbiBcdEVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksXG4rXHRFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSxcbiBcbiBcdF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCxcbiBcdEVUSFRPT0xfTVNHX0tFUk5FTF9NQVggPSAoX19FVEhUT09MX01TR19LRVJORUxfQ05UIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBjMWMxYmUxYTY5NjJmLi5iMzZjYzVjNDc4MTZhIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTEzMTUsNiArMTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXHUwMDI2XHUwMDI2IHRvcG8pIHtcbiBcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMpO1xuK1x0XHR4YV9kZXN0cm95KFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMpO1xuIFx0XHRrZnJlZSh0b3BvKTtcbiBcdFx0ZGV2LVx1MDAzZWxpbmtfdG9wbyA9IE5VTEw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuaW5kZXggNjI5YzEwOTE2NjcwZS4uOWI1YjA5NjcwMDA4MSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlXG4rKysgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuQEAgLTksNCArOSw0IEBAIGV0aHRvb2xfbmwteVx0Oj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXFxcbiBcdFx0ICAgY2hhbm5lbHMubyBjb2FsZXNjZS5vIHBhdXNlLm8gZWVlLm8gdHNpbmZvLm8gY2FibGV0ZXN0Lm8gXFxcbiBcdFx0ICAgdHVubmVscy5vIGZlYy5vIGVlcHJvbS5vIHN0YXRzLm8gcGhjX3ZjbG9ja3MubyBtbS5vIFxcXG4gXHRcdCAgIG1vZHVsZS5vIGNtaXNfZndfdXBkYXRlLm8gY21pc19jZGIubyBwc2UtcGQubyBwbGNhLm8gXFxcbi1cdFx0ICAgcGh5Lm8gdHNjb25maWcubyBtc2Uub1xuK1x0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vIHBvcnQub1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuYyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xuaW5kZXggMWFmMzk1YjU0MzMwZS4uYzA3NmMwN2QwYTA4MCAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuY1xuKysrIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5AQCAtMjYsNiArMjYsOCBAQCBzdGF0aWMgdTMyIGV0aG5sX2JjYXN0X3NlcTtcbiBcdFx0XHQgICAgIEVUSFRPT0xfRkxBR19PTUlUX1JFUExZKVxuICNkZWZpbmUgRVRIVE9PTF9GTEFHU19TVEFUUyAoRVRIVE9PTF9GTEFHU19CQVNJQyB8IEVUSFRPT0xfRkxBR19TVEFUUylcbiBcbitjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXSBfX3JvX2FmdGVyX2luaXQ7XG4rXG4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtdID0ge1xuIFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX05BTUVdXHQ9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyxcbkBAIC00MzEsNiArNDMzLDcgQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHtcbiBcdFtFVEhUT09MX01TR19UU0NPTkZJR19TRVRdXHQ9IFx1MDAyNmV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX1BIWV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX01TRV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfbXNlX3JlcXVlc3Rfb3BzLFxuK1x0W0VUSFRPT0xfTVNHX1BPUlRfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX3BvcnRfcmVxdWVzdF9vcHMsXG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuQEAgLTE1NzIsNiArMTU3NSwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIGV0aHRvb2xfZ2VubF9vcHNbXSA9IHtcbiBcdFx0LnBvbGljeSA9IGV0aG5sX21zZV9nZXRfcG9saWN5LFxuIFx0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfbXNlX2dldF9wb2xpY3kpIC0gMSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5jbWRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4rXHRcdC5kb2l0XHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcbitcdFx0LnN0YXJ0XHQ9IGV0aG5sX3BvcnRfZHVtcF9zdGFydCxcbitcdFx0LmR1bXBpdFx0PSBldGhubF9wb3J0X2R1bXBpdCxcbitcdFx0LmRvbmVcdD0gZXRobmxfcG9ydF9kdW1wX2RvbmUsXG4rXHRcdC5wb2xpY3kgPSBldGhubF9wb3J0X2dldF9wb2xpY3ksXG4rXHRcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9wb3J0X2dldF9wb2xpY3kpIC0gMSxcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGV0aHRvb2xfbmxfbWNncnBzW10gPSB7XG5AQCAtMTU5NCwxMCArMTYwNiwyMyBAQCBzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGV0aHRvb2xfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuIFxuIC8qIG1vZHVsZSBzZXR1cCAqL1xuIFxuK3N0YXRpYyB2b2lkIF9faW5pdCBldGhubF9waHlfbmFtZXNfcG9wdWxhdGUodm9pZClcbit7XG4rXHRjb25zdCBjaGFyICpuYW1lO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQSFlfSU5URVJGQUNFX01PREVfTUFYOyBpKyspIHtcbitcdFx0bmFtZSA9IHBoeV9tb2RlcyhpKTtcbitcdFx0c3Ryc2NweShwaHlfaW50ZXJmYWNlX25hbWVzW2ldLCBuYW1lLCBFVEhfR1NUUklOR19MRU4pO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IF9faW5pdCBldGhubF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbitcdGV0aG5sX3BoeV9uYW1lc19wb3B1bGF0ZSgpO1xuK1xuIFx0cmV0ID0gZ2VubF9yZWdpc3Rlcl9mYW1pbHkoXHUwMDI2ZXRodG9vbF9nZW5sX2ZhbWlseSk7XG4gXHRpZiAoV0FSTihyZXQgXHUwMDNjIDAsIFwiZXRodG9vbDogZ2VuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24gZmFpbGVkXCIpKVxuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuaW5kZXggM2U5NjlhMDcwZjlmZS4uZGM3MjExZjY3YzRkNSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxuKysrIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5AQCAtNSwxMSArNSwxNCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZXRobmxfcmVxX2luZm87XG4gXG4rZXh0ZXJuIGNoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dO1xuK1xuIGludCBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpuZXN0LCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbkBAIC00NzQsNiArNDc3LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tbV9yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BoeV9yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbXNlX3JlcXVlc3Rfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcG9ydF9yZXF1ZXN0X29wcztcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xuQEAgLTUzMCw2ICs1MzQsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9IRUFERVIgKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX3NldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX01BWCArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9tc2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfTVNFX0hFQURFUiArIDFdO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgKyAxXTtcbiBcbiBpbnQgZXRobmxfc2V0X2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbkBAIC01NDUsNiArNTUwLDkgQEAgaW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBpbnQgZXRobmxfdHNpbmZvX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBpbnQgZXRobmxfcnNzX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4raW50IGV0aG5sX3BvcnRfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuK2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuK2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuIFxuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX3N0ZF9uYW1lc1tfX0VUSFRPT0xfU1RBVFNfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX2V0aF9waHlfbmFtZXNbX19FVEhUT09MX0FfU1RBVFNfRVRIX1BIWV9DTlRdW0VUSF9HU1RSSU5HX0xFTl07XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcG9ydC5jIGIvbmV0L2V0aHRvb2wvcG9ydC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTFiY2FkYmZlNDBjMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2V0aHRvb2wvcG9ydC5jXG5AQCAtMCwwICsxLDM3NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIENvcHlyaWdodCAyMDI2IEJvb3RsaW5cbisgKi9cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfcG9ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImJpdHNldC5oXCJcbisjaW5jbHVkZSBcImNvbW1vbi5oXCJcbisjaW5jbHVkZSBcIm5ldGxpbmsuaFwiXG4rXG4rc3RydWN0IHBvcnRfcmVxX2luZm8ge1xuK1x0c3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7XG4rXHR1MzIgcG9ydF9pZDtcbit9O1xuK1xuK3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEge1xuK1x0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGFcdGJhc2U7XG4rXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpO1xuK1x0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soaW50ZXJmYWNlcyk7XG4rXHR1MzIgcG9ydF9pZDtcbitcdGJvb2wgbWlpO1xuK1x0Ym9vbCBzZnA7XG4rXHR1MzIgdXBzdHJlYW1fcG9ydDtcbit9O1xuK1xuKyNkZWZpbmUgUE9SVF9SRVFJTkZPKF9fcmVxX2Jhc2UpIFxcXG4rXHRjb250YWluZXJfb2YoX19yZXFfYmFzZSwgc3RydWN0IHBvcnRfcmVxX2luZm8sIGJhc2UpXG4rXG4rI2RlZmluZSBQT1JUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxuK1x0Y29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBvcnRfcmVwbHlfZGF0YSwgYmFzZSlcbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXG4rXHRbRVRIVE9PTF9BX1BPUlRfSURdID0gTkxBX1BPTElDWV9NSU4oTkxBX1UzMiwgMSksXG4rfTtcbitcbitzdGF0aWMgaW50IHBvcnRfcGFyc2VfcmVxdWVzdChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRiLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4rXG4rXHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBFVEhUT09MX0FfUE9SVF9JRCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVxdWVzdC1cdTAwM2Vwb3J0X2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BPUlRfSURdKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXG4rXHRcdFx0ICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XG4rXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4rXG4rXHQvKiBSVE5MIG11c3QgYmUgaGVsZCB3aGlsZSBob2xkaW5nIGEgcmVmIHRvIHRoZSBwaHlfcG9ydC4gSGVyZSwgY2FsbGVyXG4rXHQgKiBob2xkcyBSVE5MLlxuK1x0ICovXG4rXHRwb3J0ID0gcGh5X2xpbmtfdG9wb19nZXRfcG9ydChyZXFfaW5mby1cdTAwM2VkZXYsIHJlcXVlc3QtXHUwMDNlcG9ydF9pZCk7XG4rXHRpZiAoIXBvcnQpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0bGlua21vZGVfY29weShyZXBseS1cdTAwM2VzdXBwb3J0ZWQsIHBvcnQtXHUwMDNlc3VwcG9ydGVkKTtcbitcdHBoeV9pbnRlcmZhY2VfY29weShyZXBseS1cdTAwM2VpbnRlcmZhY2VzLCBwb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuK1x0cmVwbHktXHUwMDNlcG9ydF9pZCA9IHBvcnQtXHUwMDNlaWQ7XG4rXHRyZXBseS1cdTAwM2VtaWkgPSBwb3J0LVx1MDAzZWlzX21paTtcbitcdHJlcGx5LVx1MDAzZXNmcCA9IHBvcnQtXHUwMDNlaXNfc2ZwO1xuK1x0cmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA/IHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydC1cdTAwM2VpZCA6IDA7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwb3J0X3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbitcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSlcbit7XG4rXHRib29sIGNvbXBhY3QgPSByZXFfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRVRIVE9PTF9GTEFHX0NPTVBBQ1RfQklUU0VUUztcbitcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpO1xuK1x0c2l6ZV90IHNpemUgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdC8qIEVUSFRPT0xfQV9QT1JUX0lEICovXG4rXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbitcbitcdGlmICghcmVwbHktXHUwMDNlbWlpKSB7XG4rXHRcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyAqL1xuK1x0XHRyZXQgPSBldGhubF9iaXRzZXRfc2l6ZShyZXBseS1cdTAwM2VzdXBwb3J0ZWQsIE5VTEwsXG4rXHRcdFx0XHRcdF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyxcbitcdFx0XHRcdFx0bGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRzaXplICs9IHJldDtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTICovXG4rXHRcdHJldCA9IGV0aG5sX2JpdHNldF9zaXplKHJlcGx5LVx1MDAzZWludGVyZmFjZXMsIE5VTEwsXG4rXHRcdFx0XHRcdFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsXG4rXHRcdFx0XHRcdHBoeV9pbnRlcmZhY2VfbmFtZXMsIGNvbXBhY3QpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHNpemUgKz0gcmV0O1xuK1x0fVxuK1xuK1x0LyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqL1xuK1x0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XG4rXG4rXHQvKiBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUICovXG4rXHRpZiAocmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydClcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XG4rXG4rXHRyZXR1cm4gc2l6ZTtcbit9XG4rXG4rc3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKVxuK3tcbitcdGJvb2wgY29tcGFjdCA9IHJlcV9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBFVEhUT09MX0ZMQUdfQ09NUEFDVF9CSVRTRVRTO1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XG4rXHRpbnQgcmV0LCBwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9NREk7XG4rXG4rXHRpZiAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUE9SVF9JRCwgcmVwbHktXHUwMDNlcG9ydF9pZCkpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRpZiAoIXJlcGx5LVx1MDAzZW1paSkge1xuK1x0XHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxuK1x0XHRcdFx0ICAgICAgIHJlcGx5LVx1MDAzZXN1cHBvcnRlZCwgTlVMTCxcbitcdFx0XHRcdCAgICAgICBfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsXG4rXHRcdFx0XHQgICAgICAgbGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gZXRobmxfcHV0X2JpdHNldChza2IsIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTLFxuK1x0XHRcdFx0ICAgICAgIHJlcGx5LVx1MDAzZWludGVyZmFjZXMsIE5VTEwsXG4rXHRcdFx0XHQgICAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX01BWCxcbitcdFx0XHRcdCAgICAgICBwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKHJlcGx5LVx1MDAzZW1paSB8fCByZXBseS1cdTAwM2VzZnApXG4rXHRcdHBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX1NGUDtcbitcbitcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1RZUEUsIHBvcnRfdHlwZSkpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRpZiAocmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCBcdTAwMjZcdTAwMjZcbitcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsXG4rXHRcdFx0cmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCkpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RydWN0IHBvcnRfZHVtcF9jdHgge1xuK1x0c3RydWN0IHBvcnRfcmVxX2luZm9cdCpyZXFfaW5mbztcbitcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGFcdCpyZXBseV9kYXRhO1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRpZmluZGV4O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRwb3NfaWZpbmRleDtcbitcdHVuc2lnbmVkIGxvbmdcdFx0cG9zX3BvcnRpZDtcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqXG4rcG9ydF9kdW1wX2N0eF9nZXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHJldHVybiAoc3RydWN0IHBvcnRfZHVtcF9jdHggKiljYi1cdTAwM2VjdHg7XG4rfVxuK1xuK2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XG4rXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuK1x0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cdTAwM2VpbmZvLmF0dHJzO1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YTtcbitcdHN0cnVjdCBwb3J0X3JlcV9pbmZvICpyZXFfaW5mbztcbitcdGludCByZXQ7XG4rXG4rXHRCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpIFx1MDAzZSBzaXplb2YoY2ItXHUwMDNlY3R4KSk7XG4rXG4rXHRyZXFfaW5mbyA9IGt6YWxsb2Nfb2JqKCpyZXFfaW5mbyk7XG4rXHRpZiAoIXJlcV9pbmZvKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJlcGx5X2RhdGEgPSBrbWFsbG9jX29iaigqcmVwbHlfZGF0YSk7XG4rXHRpZiAoIXJlcGx5X2RhdGEpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBmcmVlX3JlcV9pbmZvO1xuK1x0fVxuK1xuK1x0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXHUwMDI2cmVxX2luZm8tXHUwMDNlYmFzZSwgdGJbRVRIVE9PTF9BX1BPUlRfSEVBREVSXSxcbitcdFx0XHRcdFx0IGdlbmxfaW5mb19uZXQoXHUwMDI2aW5mby1cdTAwM2VpbmZvKSxcbitcdFx0XHRcdFx0IGluZm8tXHUwMDNlaW5mby5leHRhY2ssIGZhbHNlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZnJlZV9yZXBfZGF0YTtcbitcbitcdGN0eC1cdTAwM2VpZmluZGV4ID0gMDtcbitcdGN0eC1cdTAwM2Vwb3NfaWZpbmRleCA9IDA7XG4rXG4rXHQvKiBGb3IgZmlsdGVyZWQgRFVNUCByZXF1ZXN0cywgbGV0J3MganVzdCBzdG9yZSB0aGUgaWZpbmRleC4gV2UnbGwgY2hlY2tcbitcdCAqIGFnYWluIGlmIHRoZSBuZXRkZXYgaXMgc3RpbGwgdGhlcmUgd2hlbiBsb29waW5nIG92ZXIgdGhlIG5ldGRldiBsaXN0XG4rXHQgKiBpbiB0aGUgRFVNUCBsb29wLlxuK1x0ICovXG4rXHRpZiAocmVxX2luZm8tXHUwMDNlYmFzZS5kZXYpIHtcbitcdFx0Y3R4LVx1MDAzZWlmaW5kZXggPSByZXFfaW5mby1cdTAwM2ViYXNlLmRldi1cdTAwM2VpZmluZGV4O1xuK1x0XHRuZXRkZXZfcHV0KHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LCBcdTAwMjZyZXFfaW5mby1cdTAwM2ViYXNlLmRldl90cmFja2VyKTtcbitcdFx0cmVxX2luZm8tXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xuK1x0fVxuK1xuK1x0Y3R4LVx1MDAzZXJlcV9pbmZvID0gcmVxX2luZm87XG4rXHRjdHgtXHUwMDNlcmVwbHlfZGF0YSA9IHJlcGx5X2RhdGE7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitmcmVlX3JlcF9kYXRhOlxuK1x0a2ZyZWUocmVwbHlfZGF0YSk7XG4rZnJlZV9yZXFfaW5mbzpcbitcdGtmcmVlKHJlcV9pbmZvKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcG9ydF9kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbitcdHZvaWQgKmVoZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTtcbitcdGlmICghZWhkcilcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdG1lbXNldChjdHgtXHUwMDNlcmVwbHlfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpKTtcbitcdGN0eC1cdTAwM2VyZXBseV9kYXRhLVx1MDAzZWJhc2UuZGV2ID0gZGV2O1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbitcbitcdHJldCA9IHBvcnRfcHJlcGFyZV9kYXRhKFx1MDAyNmN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLCBcdTAwMjZjdHgtXHUwMDNlcmVwbHlfZGF0YS1cdTAwM2ViYXNlLFxuK1x0XHRcdFx0Z2VubF9pbmZvX2R1bXAoY2IpKTtcbitcbitcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBldGhubF9maWxsX3JlcGx5X2hlYWRlcihza2IsIGRldiwgRVRIVE9PTF9BX1BPUlRfSEVBREVSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gcG9ydF9maWxsX3JlcGx5KHNrYiwgXHUwMDI2Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UsIFx1MDAyNmN0eC1cdTAwM2VyZXBseV9kYXRhLVx1MDAzZWJhc2UpO1xuK1xuK291dDpcbitcdGN0eC1cdTAwM2VyZXBseV9kYXRhLVx1MDAzZWJhc2UuZGV2ID0gTlVMTDtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdlbmxtc2dfY2FuY2VsKHNrYiwgZWhkcik7XG4rXHRlbHNlXG4rXHRcdGdlbmxtc2dfZW5kKHNrYiwgZWhkcik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmVfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbitcdGludCByZXQ7XG4rXG4rXHRkZXYgPSBjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZS5kZXY7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VsaW5rX3RvcG8pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0eGFfZm9yX2VhY2hfc3RhcnQoXHUwMDI2ZGV2LVx1MDAzZWxpbmtfdG9wby1cdTAwM2Vwb3J0cywgY3R4LVx1MDAzZXBvc19wb3J0aWQsIHBvcnQsXG4rXHRcdFx0ICBjdHgtXHUwMDNlcG9zX3BvcnRpZCkge1xuK1x0XHRjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlcG9ydF9pZCA9IGN0eC1cdTAwM2Vwb3NfcG9ydGlkO1xuK1xuK1x0XHRyZXQgPSBwb3J0X2R1bXBfb25lKHNrYiwgZGV2LCBjYik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGN0eC1cdTAwM2Vwb3NfcG9ydGlkID0gMDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfZHVtcF9hbGxfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbitcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2Vwb3NfaWZpbmRleCkge1xuK1x0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IGRldjtcbitcdFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XG4rXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbitcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gTlVMTDtcbitcbitcdFx0aWYgKHJldClcbitcdFx0XHRicmVhaztcbitcbitcdFx0cmV0ID0gMDtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xuK1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGN0eC1cdTAwM2VpZmluZGV4KSB7XG4rXHRcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuK1xuK1x0XHRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoXHUwMDI2aW5mby1cdTAwM2VpbmZvKSxcbitcdFx0XHRcdFx0ICBjdHgtXHUwMDNlaWZpbmRleCwgXHUwMDI2ZGV2X3RyYWNrZXIsXG4rXHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghZGV2KVxuK1x0XHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0XHRjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZS5kZXYgPSBkZXY7XG4rXHRcdHJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpO1xuK1xuK1x0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIpO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gcG9ydF9kdW1wX2FsbF9kZXYoc2tiLCBjYik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4rXG4rXHRrZnJlZShjdHgtXHUwMDNlcmVxX2luZm8pO1xuK1x0a2ZyZWUoY3R4LVx1MDAzZXJlcGx5X2RhdGEpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9wb3J0X3JlcXVlc3Rfb3BzID0ge1xuK1x0LnJlcXVlc3RfY21kXHRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4rXHQucmVwbHlfY21kXHRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVRfUkVQTFksXG4rXHQuaGRyX2F0dHJcdFx0PSBFVEhUT09MX0FfUE9SVF9IRUFERVIsXG4rXHQucmVxX2luZm9fc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXFfaW5mbyksXG4rXHQucmVwbHlfZGF0YV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhKSxcbitcbitcdC5wYXJzZV9yZXF1ZXN0XHRcdD0gcG9ydF9wYXJzZV9yZXF1ZXN0LFxuK1x0LnByZXBhcmVfZGF0YVx0XHQ9IHBvcnRfcHJlcGFyZV9kYXRhLFxuK1x0LnJlcGx5X3NpemVcdFx0PSBwb3J0X3JlcGx5X3NpemUsXG4rXHQuZmlsbF9yZXBseVx0XHQ9IHBvcnRfZmlsbF9yZXBseSxcbit9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6MTguNjQ0MjgzMjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzE1NTE0Njk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBldGh0b29sIFBPUlRfR0VUIE5ldGxpbmsgQVBJIGFuZCBTRlAgU3VwcG9ydCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBuZXcgcGF0Y2ggc2VyaWVzIGhlcmUuIEl0IHNlZW1zIGxpa2Ugd2UncmUgaW50cm9kdWNpbmcgYSBgUE9SVF9HRVRgIG5ldGxpbmsgQVBJIGNvbW1hbmQgaW4gZXRodG9vbCB0byBmZXRjaCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBwb2ludHMgb2YgYSBuZXR3b3JrIGRldmljZSwgb3IgXCJwb3J0c1wiLiBXZSdyZSBhbHNvIGFkZGluZyBzdXBwb3J0IGZvciBTRlAgcG9ydHMgd2l0aGluIHRoZSBQSFkgZnJhbWV3b3JrLiBMZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIHNlY3VyaXR5IGFuZCBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLlxuXG5GaXJzdCwgdGhlIEFQSSBpdHNlbGYuIFdlIGhhdmUgdGhlIHVzdWFsIGRvY3VtZW50YXRpb24gdXBkYXRlczogYGV0aHRvb2wueWFtbGAgdG8gZGVmaW5lIHRoZSBuZXcgZW51bSBhbmQgYXR0cmlidXRlcywgYGV0aHRvb2wtbmV0bGluay5yc3RgIGFuZCBgcGh5LXBvcnQucnN0YCB0byBkZXNjcmliZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgYW5kIFNGUCBwb3J0cywgcmVzcGVjdGl2ZWx5LiBUaGUgUEhZIGZyYW1ld29yayBzZWVzIGEgbG90IG9mIGNoYW5nZXMsIHdpdGggbmV3IGZ1bmN0aW9ucyBpbiBgcGh5X2NhcHMuY2AsIGBwaHlfZGV2aWNlLmNgLCBgcGh5X2xpbmtfdG9wb2xvZ3kuY2AsIGFuZCBgcGh5bGluay5jYCByZWxhdGVkIHRvIFNGUCBtb2R1bGVzIGFuZCBwb3J0IG1hbmFnZW1lbnQsIGFzIHdlbGwgYXMgdXBkYXRlcyB0byBzZXZlcmFsIGhlYWRlciBmaWxlcy4gVGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AsIHdoaWNoIGRlZmluZXMgdGhlIG5ldGxpbmsgY29tbWFuZCBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgIGluIHRoZSB1c2VyLXNwYWNlIEFQSS5cblxuRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgYFBPUlRfR0VUYCBjb21tYW5kIGlzIHRoZSBtYWluIHRhcmdldC4gV2UncmUgaW50cm9kdWNpbmcgYSBuZXcgbmV0bGluayBjb21tYW5kLCB3aGljaCBtZWFucyBhIG5ldyBhdHRhY2sgc3VyZmFjZS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyBpbiBgbmV0L2V0aHRvb2wvcG9ydC5jYDogYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBgcG9ydF9maWxsX3JlcGx5YCwgYGV0aG5sX3BvcnRfZHVtcF9zdGFydGAsIGBldGhubF9wb3J0X2R1bXBpdGAsIGBldGhubF9wb3J0X2R1bXBfZG9uZWAsIGBwb3J0X2R1bXBfb25lYCwgYHBvcnRfZHVtcF9vbmVfZGV2YCwgYW5kIGBwb3J0X2R1bXBfYWxsX2RldmAuIFdlJ2xsIG5lZWQgdG8gc2VlIGlmIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBleHBvcnRlZC5cblxuTGV0J3MgY2hlY2sgYG5ldC9ldGh0b29sL3BvcnQuY2AuIE9rYXksIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgLCBgZXRobmxfcG9ydF9kdW1waXRgLCBhbmQgYGV0aG5sX3BvcnRfZHVtcF9kb25lYCBhcmUgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QgZm9yIGRpcmVjdCBmdXp6aW5nIGFjY2Vzcy4gYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBhbmQgYHBvcnRfZmlsbF9yZXBseWAgYXJlIHN0YXRpYywgYnV0IHVzZWQgd2l0aGluIGBldGhubF9wb3J0X3JlcXVlc3Rfb3BzYCwgd2hpY2ggKmlzKiBleHBvcnRlZCBhbmQgdGhlbiB1c2VkIGJ5IGBldGhubF9kZWZhdWx0X3JlcXVlc3RzYCBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5jYC4gU28sIGBldGhubF9wb3J0X2R1bXBpdGAsIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgLCBhbmQgYGV0aG5sX3BvcnRfZHVtcF9kb25lYCBhcmUgZGVmaW5pdGVseSBnb29kIHRhcmdldHMsIGFuZCB3ZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRyaWdnZXIgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYGV0aG5sX3BvcnRfcmVxdWVzdF9vcHNgLCB3aGljaCBhcmUgY2FsbGVkIHZpYSBmdW5jdGlvbiBwb2ludGVycy5cblxuTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyB0byBjb25zaWRlcj8gTGV0J3Mgc2VlLi4uIHdlIGhhdmUgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgIGFuZCBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGAgaW4gYHBoeV9saW5rX3RvcG9sb2d5LmNgLCBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AgaW4gYHBoeV9jYXBzLmNgLCBhbmQgYHBoeV9zZXRfdXBzdHJlYW1fcG9ydGAgaW4gYHBoeV9kZXZpY2UuY2AuIFRoZXNlIG1heSByZXF1aXJlIGFkZGl0aW9uYWwgc2V0dXAgb3IgdHJpZ2dlciBmcm9tIGV2ZW50cyB3aXRoaW4gdGhlIFBIWSBzdWJzeXN0ZW0sIGJ1dCBhcmUgZ29vZCB0YXJnZXRzIHRvIGNvbnNpZGVyIGZvciBjb21wbGV0ZW5lc3MuXG5cbkluIHRlcm1zIG9mIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCwgYENPTkZJR19QSFlMSUJgLCBhbmQgYENPTkZJR19QSFlMSU5LYCBhcmUgdGhlIGVzc2VudGlhbHMuIEkgZXhwZWN0IGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdG8gZW5zdXJlIHRoaXMgY29kZSBpcyBidWlsdC4gTGV0J3Mgc2VlIGhvdyBgbmV0L2V0aHRvb2wvTWFrZWZpbGVgIGhhbmRsZXMgdGhpbmdzLi4uIFllYWgsIGl0IHVuY29uZGl0aW9uYWxseSBidWlsZHMgYHBvcnQub2AgaWYgdGhlIGV0aHRvb2wgbmV0bGluayBjb2RlIGlzIGJ1aWx0LCBzbyB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBOb3cgSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgcmVzdHJpY3Rpb25zLCBJIHdpbGwgc2VhcmNoIGZvciAgYENPTkZJR19FVEhUT09MX05FVExJTktgIGluIGBuZXQvS2NvbmZpZ2Agb3IgYG5ldC9ldGh0b29sL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDcyMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOTozMS43OTk0MzI4MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzM5NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFVEhUT09MX05FVExJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz01MDc9Y29uZmlnIEZBSUxPVkVSXFxuLS1cXG5uZXQvS2NvbmZpZy01MTktXFxubmV0L0tjb25maWc6NTIwOmNvbmZpZyBFVEhUT09MX05FVExJTktcXG5uZXQvS2NvbmZpZy01MjEtXFx0Ym9vbCBcXFwiTmV0bGluayBpbnRlcmZhY2UgZm9yIGV0aHRvb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjMxLjkwMTE3Nzk2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODcwMzM4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBmb3IgRVRIVE9PTF9ORVRMSU5LIGluIG5ldC9LY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBFVEhUT09MX05FVExJTktgIGlzIGhhbmRsZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJdCdzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gSSdsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCBpdHMgY29udGVudHMgdG8gc2VlIGlmIGBFVEhUT09MX05FVExJTktgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCBhbnl3aGVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVwZW5kZW5jaWVzLCB0aGUgd2F5IGl0J3MgZXhwb3NlZCB0byB0aGUgdXNlciwgYW5kIGlmIGl0IGhhcyBhbnkgZGVmYXVsdHMgb3IgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGFzIGEgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6MzQuNzg4MjE0Mzk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTE1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTE1OlxcdFxcdCAgZmFpbG92ZXIgbmV0ZGV2LiBUaGlzIGVuYWJsZXMgcGFyYXZpcnR1YWwgZHJpdmVycyB0byB1c2UgYVxcbiA1MTY6XFx0XFx0ICBWRiBhcyBhbiBhY2NlbGVyYXRlZCBsb3cgbGF0ZW5jeSBkYXRhcGF0aC4gSXQgYWxzbyBhbGxvd3MgbGl2ZVxcbiA1MTc6XFx0XFx0ICBtaWdyYXRpb24gb2YgVk1zIHdpdGggZGlyZWN0IGF0dGFjaGVkIFZGcyBieSBmYWlsaW5nIG92ZXIgdG8gdGhlXFxuIDUxODpcXHRcXHQgIHBhcmF2aXJ0dWFsIGRhdGFwYXRoIHdoZW4gdGhlIFZGIGlzIHVucGx1Z2dlZC5cXG4gNTE5OlxcdFxcbiA1MjA6XFx0Y29uZmlnIEVUSFRPT0xfTkVUTElOS1xcbiA1MjE6XFx0XFx0Ym9vbCBcXFwiTmV0bGluayBpbnRlcmZhY2UgZm9yIGV0aHRvb2xcXFwiXFxuIDUyMjpcXHRcXHRzZWxlY3QgRElNTElCXFxuIDUyMzpcXHRcXHRkZWZhdWx0IHlcXG4gNTI0OlxcdFxcdGhlbHBcXG4gNTI1OlxcdFxcdCAgQW4gYWx0ZXJuYXRpdmUgdXNlcnNwYWNlIGludGVyZmFjZSBmb3IgZXRodG9vbCBiYXNlZCBvbiBnZW5lcmljXFxuIDUyNjpcXHRcXHQgIG5ldGxpbmsuIEl0IHByb3ZpZGVzIGJldHRlciBleHRlbnNpYmlsaXR5IGFuZCBzb21lIG5ldyBmZWF0dXJlcyxcXG4gNTI3OlxcdFxcdCAgZS5nLiBub3RpZmljYXRpb24gbWVzc2FnZXMuXFxuIDUyODpcXHRcXG4gNTI5OlxcdGNvbmZpZyBORVRERVZfQUREUl9MSVNUX1RFU1RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6MzQuNzg4MzEwNjA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2NDYyMjMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGhhdmluZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzLi4uYW5kIGl0IHNlZW1zIHRoZSBzeXN0ZW0ncyBiZWhhdmluZyBhY2NvcmRpbmcgdG8gaXRzIGRlZmF1bHQgJ3knIHNldHRpbmcuIFRoaXMgaXNuJ3QgdW5leHBlY3RlZCwgYnV0IGl0IGRvZXNuJ3QgZ2l2ZSBtZSBtdWNoIGNvbnRleHQgeWV0LiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBXaGF0J3MgdGhlIGNvbnRleHQ/IExldCdzIHNlZS4uLiB3aGF0IGFib3V0IHRoZSBpbmZsdWVuY2Ugb2YgYENPTkZJR19QSFlMSUJgPyBJcyB0aGF0IGFjdGl2ZSwgYW5kIGhvdyBtaWdodCB0aGF0IGJlIGltcGFjdGluZyB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgSSdtIG9ic2VydmluZz8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gSSdtIHNlZWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjM3LjY1MjkzNjgyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYxOTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEhZTElCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9Nj1jb25maWcgUEhZTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU6bWVudWNvbmZpZyBQSFlMSUJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiUEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVxcdGRlZl9ib29sIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjM3LjcwMzU2MTMzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTI4OTI4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEV0aGVybmV0IFBvcnQgRHVtcCBGdW5jdGlvbnMgYW5kIFBIWUxJQiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGBQSFlMSUJgIGlzIGFsc28gc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgcmlnaHQ/IExldCdzIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0LiBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YFxuKiAgIGBldGhubF9wb3J0X2R1bXBpdGBcbiogICBgZXRobmxfcG9ydF9kdW1wX2RvbmVgXG4qICAgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgXG4qICAgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgXG4qICAgYHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNgXG4qICAgYHBoeV9zZXRfdXBzdHJlYW1fcG9ydGBcblxuUmlnaHQsIG5vdyB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHdoZXRoZXIgdGhlc2UgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucyBvciBqdXN0IG5vbi1zdGF0aWMgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXMuIExldCBtZSBzZWUuLi4gQWhhLCB0aGV5J3JlIG5vbi1zdGF0aWMuIFRoZXkgYXJlIHVzZWQgd2l0aGluIGBldGh0b29sX2dlbmxfb3BzYCBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5jYC4gSGFuZyBvbi4uLiBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCBpdHNlbGYgaXMgYWN0dWFsbHkgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AsIGJ1dCBpdCdzICpkZWNsYXJlZCogaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuaGAuIFllcywgb2theSwgdGhleSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMgYW5kIHZpc2libGUgdG8gdGhlIG5ldGxpbmsgaW50ZXJmYWNlLlxuXG5Ob3csIGxldCdzIHRha2UgYSBxdWljayBsb29rIGluc2lkZSBgbmV0L2V0aHRvb2wvcG9ydC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY2OCwiT3V0cHV0VG9rZW5zIjo3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOTo0Mi43MTY0NTcwNjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjU4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qXFxcXHMrXFxcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL3BvcnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9wb3J0LmM9MTcxPXBvcnRfZHVtcF9jdHhfZ2V0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL3BvcnQuYy0xNzUtXFxubmV0L2V0aHRvb2wvcG9ydC5jOjE3NjppbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvZXRodG9vbC9wb3J0LmMtMTc3LXtcXG4tLVxcbm5ldC9ldGh0b29sL3BvcnQuYz0yOTc9c3RhdGljIGludCBwb3J0X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvZXRodG9vbC9wb3J0LmMtMzI2LVxcbm5ldC9ldGh0b29sL3BvcnQuYzozMjc6aW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvZXRodG9vbC9wb3J0LmMtMzI4LXtcXG4tLVxcbm5ldC9ldGh0b29sL3BvcnQuYy0zNTMtXFxubmV0L2V0aHRvb2wvcG9ydC5jOjM1NDppbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9ldGh0b29sL3BvcnQuYy0zNTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOTo0Mi43NTk3Mjc0MzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NTc5MDM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4gSSdtIHNlZWluZyBhIHNlcXVlbmNlIOKAkyBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgdGhlbiBgZXRobmxfcG9ydF9kdW1waXRgLCBhbmQgZmluYWxseSBgZXRobmxfcG9ydF9kdW1wX2RvbmVgLiBUaGF0J3MgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdGlvbiBvZiBhIGR1bXAgcHJvY2VzcyByZWxhdGVkIHRvIEV0aGVybmV0IHBvcnQgaW5mb3JtYXRpb24sIGxpa2VseSB3aXRoaW4gdGhlIE5ldGxpbmsgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHdob2xlIGN5Y2xlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dC4gSG1tLCB3aGF0IGFib3V0IGBkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY2A/IFRoYXQgZmlsZSdzIHJlbGV2YW50LCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIGl0IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBkdW1wIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgdGhlIFBIWSBsYXllciBsaW5rIHRvcG9sb2d5IGlzIHNvbWV0aGluZyB0aGF0IGlzIGdvaW5nIHRvIG5lZWQgdG8gYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1ODMsIk91dHB1dFRva2VucyI6NzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOTo0Ni4wMTU1MjE5OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjY4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qXFxcXHMrXFxcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTM1PXN0YXRpYyBzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy02Mi1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYzo2MzppbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtNjQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmM9OTA9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19hZGRfcG9ydCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtOTEtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmM6OTI6dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy05My17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYz0xMDE9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19kZWxfcG9ydCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtMTAyLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jOjEwMzppbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtMTA0LVxcdFxcdFxcdCAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTE3Nj1FWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2FkZF9waHkpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jLTE3Ny1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYzoxNzg6dm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy0xNzktXFx0XFx0XFx0ICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6NDYuMDYwNzk3MTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjQwMzAyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgUEhZIExpbmsgVG9wb2xvZ3kgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgc2VlIGBwaHlfbGlua190b3BvX2FkZF9wb3J0YCBhbmQgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgIGFyZSBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0J3MgZ29vZC4gVGhleSdyZSBjbGVhcmx5IGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UsIHByb2JhYmx5IGJ5IHNvbWUgdXBwZXItbGV2ZWwgbmV0d29yayBzdGFjayBvciBhIHN5c3RlbSBtYW5hZ2VyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIFBIWSBtYW5hZ2VtZW50LlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHNsaWdodGx5LiBXaGVyZSBhcmUgdGhlIGNvcmUgY2FwYWJpbGl0aWVzIGRlZmluZWQ/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGVyZSBpcyBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGVzZSBuZXcgZnVuY3Rpb25zIGluIG15IGFyZWFzIG9mIGV4cGVydGlzZS4gSSBpbW1lZGlhdGVseSB0aGluayBvZiBgZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNgLiBJdCdzIGEga2V5IGZpbGUgd2hlcmUgUEhZIGNhcGFiaWxpdGllcyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbnMgYXJlIHVzdWFsbHkgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlc2UgbmV3IHRvcG9sb2d5IGZ1bmN0aW9ucyBoYXZlIGFuIGVmZmVjdCBoZXJlLCBhbmQgaG93LCBpZiBzby4gQSBxdWljayByZXZpZXcgb2YgdGhhdCBmaWxlIGlzIGluIG9yZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM1MywiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjQ5LjQyNDgzMDYyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNjYwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccytcXFxcKipbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9Nzc9aW50IF9faW5pdCBwaHlfY2Fwc19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0xMjEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MTIyOnNpemVfdCBwaHlfY2Fwc19zcGVlZHModW5zaWduZWQgaW50ICpzcGVlZHMsIHNpemVfdCBzaXplLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTEyMy1cXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9MjM2PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX2xvb2t1cCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0yNDItICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MjQzOnZvaWQgcGh5X2NhcHNfbGlua21vZGVfbWF4X3NwZWVkKHUzMiBtYXhfc3BlZWQsIHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0yNDQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMjYyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjI2Mzpib29sIHBoeV9jYXBzX3ZhbGlkKGludCBzcGVlZCwgaW50IGR1cGxleCwgY29uc3QgdW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTI2NC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0yNzctICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6Mjc4OnZvaWQgcGh5X2NhcHNfbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgY2FwcywgdW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTI3OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYz0zOTA9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtNDAxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjQwMjp2b2lkIHBoeV9jYXBzX21lZGl1bV9nZXRfc3VwcG9ydGVkKHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00MDMtXFx0XFx0XFx0XFx0ICAgZW51bSBldGh0b29sX2xpbmtfbWVkaXVtIG1lZGl1bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTQyNT1FWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00MzMtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6NDM0OnUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00MzUte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9NDQ3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtNDU3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjQ1ODp2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtNDU5LVxcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6NDkuNDczMDAyNzI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTYwODI2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZXNlIHBvaW50cyBhcyBhIG5ldHdvcmsgc3lzdGVtcyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBQSFkgQ2FwYWJpbGl0eSBGaWx0ZXJpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AgaGFzIGJlZW4gZXhwb3NlZC4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgd29uZGVyIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiBiZWluZyBleHBvcnRlZC4gSXQgc3VnZ2VzdHMgYSBtb3JlIGNvbnRyb2xsZWQsIHBlcmhhcHMgZmluZS1ncmFpbmVkLCBhcHByb2FjaCB0byBsaW5rIG1vZGUgZmlsdGVyaW5nIGF0IHRoZSBQSFkgbGV2ZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBXaGF0J3MgdGhlIGNvbnRleHQgZm9yIGl0P1xuXG5NeSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIFBIWSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmU/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIHBsYWNlcyB3aGVyZSBQSFkgY2FwYWJpbGl0aWVzIGFyZSBtYW5pcHVsYXRlZC4gVGhpcyB0cmlnZ2VycyBhbiBhc3NvY2lhdGlvbi4gV2hhdCBhYm91dCB0aGF0IGtleSBhcmVhIGZvciBQSFkgZHJpdmVyIG9wZXJhdGlvbnM/IEFoIHllcywgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLiBUaGF0IGZpbGUgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGxpa2VseSB3aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGlzIG5ldyBmdW5jdGlvbiB3b3VsZCBiZSBkZWZpbmVkIG9yIHVzZWQsIG9yIHdoZXJlIGl0cyBlZmZlY3RzIHdvdWxkIGJlIHNlZW4uIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3QgYXJlYSBJIHdpbGwgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mzg4LCJPdXRwdXRUb2tlbnMiOjcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6NTMuMTg5MDkxOTY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE4OTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxzK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTQ1PXN0YXRpYyB2b2lkIF9faW5pdCBmZWF0dXJlc19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwOS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIxMDp2b2lkIHBoeV9kZXZpY2VfZnJlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjM4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBnZW5waHlfZHJpdmVyO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjM5LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjQwOnN0YXRpYyBMSVNUX0hFQUQocGh5X2ZpeHVwX2xpc3QpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjQxOnN0YXRpYyBERUZJTkVfTVVURVgocGh5X2ZpeHVwX2xvY2spO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQyLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjQzPXN0YXRpYyBib29sIHBoeV9kcnZfd29sX2VuYWJsZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjUxLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjUyOmJvb2wgcGh5X21heV93YWtldXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1My17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM3OD1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IG1kaW9fYnVzX3BoeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MjYtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0Mjc6c3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG1kaW9fYnVzX3BoeV9wbV9vcHMsIG1kaW9fYnVzX3BoeV9zdXNwZW5kLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDI4LVxcdFxcdFxcdCBtZGlvX2J1c19waHlfcmVzdW1lKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDM4PXN0YXRpYyBpbnQgcGh5X3JlZ2lzdGVyX2ZpeHVwKGNvbnN0IGNoYXIgKmJ1c19pZCwgdTMyIHBoeV91aWQsIHUzMiBwaHlfdWlkX21hc2ssXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQ1OS0vKiBSZWdpc3RlcnMgYSBmaXh1cCB0byBiZSBydW4gb24gYW55IFBIWSB3aXRoIHRoZSBVSUQgaW4gcGh5X3VpZCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NDYwOmludCBwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX3VpZCh1MzIgcGh5X3VpZCwgdTMyIHBoeV91aWRfbWFzayxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQ2MS1cXHRcXHRcXHQgICAgICAgaW50ICgqcnVuKShzdHJ1Y3QgcGh5X2RldmljZSAqKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDY1PUVYUE9SVF9TWU1CT0wocGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl91aWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00NjctLyogUmVnaXN0ZXJzIGEgZml4dXAgdG8gYmUgcnVuIG9uIHRoZSBQSFkgd2l0aCBpZCBzdHJpbmcgYnVzX2lkICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0Njg6aW50IHBoeV9yZWdpc3Rlcl9maXh1cF9mb3JfaWQoY29uc3QgY2hhciAqYnVzX2lkLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDY5LVxcdFxcdFxcdCAgICAgIGludCAoKnJ1bikoc3RydWN0IHBoeV9kZXZpY2UgKikpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTQ4OD1zdGF0aWMgaW50IHBoeV9zY2FuX2ZpeHVwcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01MjEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo1MjI6aW50IGdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01MjMtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU2MT1waHlfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU2Ni19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo1Njc6c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9pZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01NjgtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU3MD1waHlfaW50ZXJmYWNlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01ODEtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NTgyOnN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfaW50ZXJmYWNlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU4My1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NTg1PXBoeV9oYXNfZml4dXBzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTkxLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjU5MjpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocGh5X2hhc19maXh1cHMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTkzLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NTk0PXN0YXRpYyBzc2l6ZV90IHBoeV9kZXZfZmxhZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTYwMS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo2MDI6c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9kZXZfZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNjAzLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz02MTc9c3RhdGljIHNzaXplX3QgbW1kIyNuIyNfZGV2aWNlX2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTYyMy19IFxcXFxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjYyNDpzdGF0aWMgREVWSUNFX0FUVFJfUk8obW1kIyNuIyNfZGV2aWNlX2lkKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNjI1LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDAyPXN0YXRpYyBpbnQgZ2V0X3BoeV9jMjJfaWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiAqcGh5X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDMzLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTAzNDppbnQgZndub2RlX2dldF9waHlfaWQoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgdTMyICpwaHlfaWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTEwMz1FWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwOC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTQyPUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNTEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTUyOnZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNTMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTY0PUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZW1vdmUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTcyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE3MzppbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTIxMj1zdGF0aWMgdm9pZCBwaHlfcHJlcGFyZV9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMjQtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjI1OmludCBwaHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMjYtXFx0XFx0ICAgICAgIHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTI4Nj1FWFBPUlRfU1lNQk9MKHBoeV9jb25uZWN0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI5Mi0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyOTM6dm9pZCBwaHlfZGlzY29ubmVjdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI5NC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEzMjU9c3RhdGljIGludCBwaHlfcG9sbF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzQwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM0MTppbnQgcGh5X2luaXRfaHcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNDIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzg4PUVYUE9SVF9TWU1CT0wocGh5X2luaXRfaHcpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM4OS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTA6dm9pZCBwaHlfYXR0YWNoZWRfaW5mbyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM5MS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEzOTQ9RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoZWRfaW5mbyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTYtI2RlZmluZSBBVFRBQ0hFRF9GTVQgXFxcImF0dGFjaGVkIFBIWSBkcml2ZXIgJXMobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVzKVxcXCJcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTc6Y2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTQxNz1FWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hlZF9pbmZvX2lycSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDE4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTQxOTp2b2lkIHBoeV9hdHRhY2hlZF9wcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MjAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNDcwPXBoeV9zdGFuZGFsb25lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ3Ni19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDc3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfc3RhbmRhbG9uZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDc4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xODQ3PXN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NjYtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODY3OmludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg2OC1cXHRcXHQgICAgICB1MzIgZmxhZ3MsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIwMjg9RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMzYtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMDM3OnZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjAzOC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIxMTA9RVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIxMTEtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMTEyOmludCBwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjExMy17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIxMzY9RVhQT1JUX1NZTUJPTChwaHlfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTM3LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjEzODppbnQgX19waHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjE1ND1FWFBPUlRfU1lNQk9MKF9fcGh5X3Jlc3VtZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTU1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjE1NjppbnQgcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjE1Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIxNjY9RVhQT1JUX1NZTUJPTChwaHlfcmVzdW1lKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjE3Ni0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIxNzc6aW50IHBoeV9yZXNldF9hZnRlcl9jbGtfZW5hYmxlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjI1Nj1zdGF0aWMgaW50IGdlbnBoeV9jMzdfY29uZmlnX2FkdmVydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMjg3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjI4ODppbnQgZ2VucGh5X3NldHVwX2ZvcmNlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjI4OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIzMDI9c3RhdGljIGludCBnZW5waHlfc2V0dXBfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzMzMtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMzM0OmludCBnZW5waHlfcmVhZF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMzc5PUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfbWFzdGVyX3NsYXZlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjM4NC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIzODU6aW50IGdlbnBoeV9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzODYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMzkxPUVYUE9SVF9TWU1CT0woZ2VucGh5X3Jlc3RhcnRfYW5lZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzOTktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNDAwOmludCBnZW5waHlfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNDAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjQyMT1FWFBPUlRfU1lNQk9MKGdlbnBoeV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQzMS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI0MzI6aW50IF9fZ2VucGh5X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgY2hhbmdlZClcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI0MzMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNDc4PUVYUE9SVF9TWU1CT0woX19nZW5waHlfY29uZmlnX2FuZWcpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNDg4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjQ4OTppbnQgZ2VucGh5X2MzN19jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQ5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI1MjY9RVhQT1JUX1NZTUJPTChnZW5waHlfYzM3X2NvbmZpZ19hbmVnKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjUzNS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI1MzY6aW50IGdlbnBoeV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1Mzcte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNTQyPUVYUE9SVF9TWU1CT0woZ2VucGh5X2FuZWdfZG9uZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1NTEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNTUyOmludCBnZW5waHlfdXBkYXRlX2xpbmsoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1NTMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNTk1PUVYUE9SVF9TWU1CT0woZ2VucGh5X3VwZGF0ZV9saW5rKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1OTYtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNTk3OmludCBnZW5waHlfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1OTgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNjQyPUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfbHBhKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY1MC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI2NTE6aW50IGdlbnBoeV9yZWFkX3N0YXR1c19maXhlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY1Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI2NzI9RVhQT1JUX1NZTUJPTChnZW5waHlfcmVhZF9zdGF0dXNfZml4ZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNjgyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjY4MzppbnQgZ2VucGh5X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNjg0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjcyMz1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZWFkX3N0YXR1cyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI3MzUtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNzM2OmludCBnZW5waHlfYzM3X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgKmNoYW5nZWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNzM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mjc4Nz1FWFBPUlRfU1lNQk9MKGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNzk3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mjc5ODppbnQgZ2VucGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI3OTkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yODI2PUVYUE9SVF9TWU1CT0woZ2VucGh5X3NvZnRfcmVzZXQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjgyNy1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI4Mjg6aXJxcmV0dXJuX3QgZ2VucGh5X2hhbmRsZV9pbnRlcnJ1cHRfbm9fYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yODI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjgzOT1FWFBPUlRfU1lNQk9MKGdlbnBoeV9oYW5kbGVfaW50ZXJydXB0X25vX2Fjayk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI4NDktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyODUwOmludCBnZW5waHlfcmVhZF9hYmlsaXRpZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI4NTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yODk0PUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfYWJpbGl0aWVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjkwMS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI5MDI6aW50IGdlbnBoeV9yZWFkX21tZF9jNDUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSwgdTE2IHJlZ251bSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MDMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTA5PUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfbW1kX2M0NSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTEwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjkxMTppbnQgZ2VucGh5X3dyaXRlX21tZF9jNDUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSwgdTE2IHJlZ251bSxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MTItXFx0XFx0XFx0IHUxNiB2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI5MTk9RVhQT1JUX1NZTUJPTChnZW5waHlfd3JpdGVfbW1kX2M0NSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MjQtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTI1OmludCBnZW5waHlfcmVhZF9tbWRfdW5zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoZGV2LCBpbnQgZGV2YWQsIHUxNiByZWdudW0pXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTI2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjkyOT1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTMwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjkzMTppbnQgZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZudW0sXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTMyLVxcdFxcdFxcdFxcdCB1MTYgcmVnbnVtLCB1MTYgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTM2PUVYUE9SVF9TWU1CT0woZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTM3LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjkzODppbnQgZ2VucGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5Mzkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTQyPUVYUE9SVF9TWU1CT0woZ2VucGh5X3N1c3BlbmQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjk0My1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI5NDQ6aW50IGdlbnBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5NDUte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTQ4PUVYUE9SVF9TWU1CT0woZ2VucGh5X3Jlc3VtZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTQ5LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mjk1MDppbnQgZ2VucGh5X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTUxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mjk3OT1FWFBPUlRfU1lNQk9MKGdlbnBoeV9sb29wYmFjayk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5ODktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTkwOnZvaWQgcGh5X3JlbW92ZV9saW5rX21vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGxpbmtfbW9kZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5OTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTk3PXN0YXRpYyB2b2lkIHBoeV9jb3B5X3BhdXNlX2JpdHModW5zaWduZWQgbG9uZyAqZHN0LCB1bnNpZ25lZCBsb25nICpzcmMpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwMTEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMDEyOnZvaWQgcGh5X2FkdmVydGlzZV9zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwMTMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMDIwPUVYUE9SVF9TWU1CT0wocGh5X2FkdmVydGlzZV9zdXBwb3J0ZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMDMxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzAzMjp2b2lkIHBoeV9hZHZlcnRpc2VfZWVlX2FsbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzAzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMwMzc9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2FkdmVydGlzZV9lZWVfYWxsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzA1OC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMwNTk6dm9pZCBwaHlfc3VwcG9ydF9lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMDgwPUVYUE9SVF9TWU1CT0wocGh5X3N1cHBvcnRfZWVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzA4OC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMwODk6dm9pZCBwaHlfZGlzYWJsZV9lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMDk3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9kaXNhYmxlX2VlZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMDUtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMTA2OnZvaWQgcGh5X3N1cHBvcnRfc3ltX3BhdXNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMTA3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzExMT1FWFBPUlRfU1lNQk9MKHBoeV9zdXBwb3J0X3N5bV9wYXVzZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMTgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMTE5OnZvaWQgcGh5X3N1cHBvcnRfYXN5bV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzEyMC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMxMjM9RVhQT1JUX1NZTUJPTChwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzEzNS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMxMzY6dm9pZCBwaHlfc2V0X3N5bV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJ4LCBib29sIHR4LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzEzNy1cXHRcXHQgICAgICAgYm9vbCBhdXRvbmVnKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMTQ3PUVYUE9SVF9TWU1CT0wocGh5X3NldF9zeW1fcGF1c2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMTU5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzE2MDp2b2lkIHBoeV9zZXRfYXN5bV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJ4LCBib29sIHR4KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzE2MS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMxNzE9RVhQT1JUX1NZTUJPTChwaHlfc2V0X2FzeW1fcGF1c2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMTgxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzE4Mjpib29sIHBoeV92YWxpZGF0ZV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzE4My1cXHRcXHRcXHRzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzE5Nj1FWFBPUlRfU1lNQk9MKHBoeV92YWxpZGF0ZV9wYXVzZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMyMDktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMjEwOnZvaWQgcGh5X2dldF9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICp0eF9wYXVzZSwgYm9vbCAqcnhfcGF1c2UpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMjExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzIzMD1zdGF0aWMgaW50IHBoeV9nZXRfdTMyX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwgdTMyICp2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMyNTAtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMjUxOnMzMiBwaHlfZ2V0X2ludGVybmFsX2RlbGF5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGludCAqZGVsYXlfdmFsdWVzLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzI1Mi1cXHRcXHRcXHQgICBpbnQgc2l6ZSwgYm9vbCBpc19yeClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzMxMz1FWFBPUlRfU1lNQk9MKHBoeV9nZXRfaW50ZXJuYWxfZGVsYXkpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMzIzLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzMyNDppbnQgcGh5X2dldF90eF9hbXBsaXR1ZGVfZ2FpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMzI1LVxcdFxcdFxcdCAgICAgIGVudW0gZXRodG9vbF9saW5rX21vZGVfYml0X2luZGljZXMgbGlua21vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMzMzc9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2dldF90eF9hbXBsaXR1ZGVfZ2Fpbik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMzNDYtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMzQ3OmludCBwaHlfZ2V0X21hY190ZXJtaW5hdGlvbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMzQ4LVxcdFxcdFxcdCAgICB1MzIgKnZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzcyOD1FWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzczNS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM3MzY6dm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzczNy17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTQwNTI9c3RhdGljIHZvaWQgcGh5X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZHJpdmVyICpkcnYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNTYtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0MDU3OmludCBwaHlfZHJpdmVyc19yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqbmV3X2RyaXZlciwgaW50IG4sXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDU4LVxcdFxcdFxcdCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDA3Mj1FWFBPUlRfU1lNQk9MKHBoeV9kcml2ZXJzX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNzMtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0MDc0OnZvaWQgcGh5X2RyaXZlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqZHJ2LCBpbnQgbilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOTo1My4yNDAyODUxNTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNTYzNTgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQaHkgRHJpdmVyIEV4cG9ydCBTdGF0dXMqKlxuXG5BbHJpZ2h0LCBzbyBgcGh5X3NldF91cHN0cmVhbV9wb3J0YCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCBub3RlZC4gSSdtIG1vdmluZyBvbiB0byBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBQSFkgc3Vic3lzdGVtLiBUaGF0IGxlYWRzIG1lIHRvIGltbWVkaWF0ZWx5IHdvbmRlciBhYm91dCB0aGUgcm9sZSBvZiBgZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY2AuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZSBleHBvcnQgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZnVuY3Rpb25hbGl0eSBtYW5hZ2VkIGJ5IGBwaHlsaW5rLmNgLiBEb2VzIGl0IGltcGFjdCBsaW5rIHN0YXRlIGhhbmRsaW5nLCBhdXRvbmVnb3RpYXRpb24gc2V0dXAsIG9yIGFueSBvdGhlciBjcml0aWNhbCBQSFkgb3BlcmF0aW9uYWwgYXJlYXMgdGhhdCB0aGF0IGZpbGUgdHlwaWNhbGx5IGhhbmRsZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGZsb3cgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZXhwb3J0IGNyZWF0ZXMgYW55IG9wcG9ydHVuaXRpZXMgb3IsIHBvdGVudGlhbGx5LCB1bmZvcmVzZWVuIGNvbnNlcXVlbmNlcyB3aXRoaW4gdGhlIFBIWSBmcmFtZXdvcmsuIE15IHRob3VnaHQgcHJvY2VzcyBpcyBub3cgY2VudGVyaW5nIG9uIHRoZSBpbnRlcmNvbm5lY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzYzLCJPdXRwdXRUb2tlbnMiOjcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6NTYuNzc1OTIzNzc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk4ODU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxzK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTQwPXN0YXRpYyBjb25zdCBwaHlfaW50ZXJmYWNlX3QgcGh5bGlua19zZnBfaW50ZXJmYWNlX3ByZWZlcmVuY2VbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTUzLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTU0OnN0YXRpYyBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhwaHlsaW5rX3NmcF9pbnRlcmZhY2VzKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE1NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTYxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTYyOnZvaWQgcGh5bGlua19zZXRfcG9ydF9tb2Rlcyh1bnNpZ25lZCBsb25nICptYXNrKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mzc0PXN0YXRpYyB2b2lkIHBoeWxpbmtfY2Fwc190b19saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zOTUtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozOTY6dm9pZCBwaHlsaW5rX2xpbWl0X21hY19zcGVlZChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIG1heF9zcGVlZClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM5Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTk4Mz1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19wb2xsX3N0YXJ0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtOTg4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6OTg5OmludCBwaHlsaW5rX3Bjc19wcmVfaW5pdChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtOTkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTgxNj1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTg1Ny0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4NTg6aW50IHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IHBoeWxpbmsgKnBsLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTg1OS1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTk5Mz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2NyZWF0ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIwMDMtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMDA0OnZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIwMDUte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMDE0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZGVzdHJveSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIwMjQtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMDI1OmJvb2wgcGh5bGlua19leHBlY3RzX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMDI2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjI2Mz1zdGF0aWMgaW50IHBoeWxpbmtfYXR0YWNoX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyOTYtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjk3OmludCBwaHlsaW5rX2Nvbm5lY3RfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzE3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY29ubmVjdF9waHkpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzMwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjMzMTppbnQgcGh5bGlua19vZl9waHlfY29ubmVjdChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzMyLVxcdFxcdFxcdCAgIHUzMiBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjMzNj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX29mX3BoeV9jb25uZWN0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjM0OC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIzNDk6aW50IHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0KHN0cnVjdCBwaHlsaW5rICpwbCxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzNTAtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzOTU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19md25vZGVfcGh5X2Nvbm5lY3QpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDAzLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQwNDp2b2lkIHBoeWxpbmtfZGlzY29ubmVjdF9waHkoc3RydWN0IHBoeWxpbmsgKnBsKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQwNS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI0MzA9c3RhdGljIHZvaWQgcGh5bGlua19saW5rX2NoYW5nZWQoc3RydWN0IHBoeWxpbmsgKnBsLCBib29sIHVwLCBjb25zdCBjaGFyICp3aGF0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDQ1LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ0Njp2b2lkIHBoeWxpbmtfbWFjX2NoYW5nZShzdHJ1Y3QgcGh5bGluayAqcGwsIGJvb2wgdXApXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDQ3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjQ1MD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21hY19jaGFuZ2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDYyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ2Mzp2b2lkIHBoeWxpbmtfcGNzX2NoYW5nZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgYm9vbCB1cClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI0NjQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNDcyPXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlsaW5rX2xpbmtfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDg4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ4OTp2b2lkIHBoeWxpbmtfc3RhcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI1NDU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zdGFydCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1NTgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTU5OnZvaWQgcGh5bGlua19zdG9wKHN0cnVjdCBwaHlsaW5rICpwbClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1NjAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNTc5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3RvcCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1ODgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTg5OnZvaWQgcGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjYwOD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjYxNy0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2MTg6dm9pZCBwaHlsaW5rX3J4X2Nsa19zdG9wX3VuYmxvY2soc3RydWN0IHBoeWxpbmsgKnBsKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjYxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI2NTA9c3RhdGljIGJvb2wgcGh5bGlua19waHlfcG1fc3BlZWRfY3RybChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2NzItICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjczOnZvaWQgcGh5bGlua19zdXNwZW5kKHN0cnVjdCBwaHlsaW5rICpwbCwgYm9vbCBtYWNfd29sKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjY3NC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI3MDk9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zdXNwZW5kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjcxOC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI3MTk6dm9pZCBwaHlsaW5rX3ByZXBhcmVfcmVzdW1lKHN0cnVjdCBwaHlsaW5rICpwbClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3MjAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNzM0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcHJlcGFyZV9yZXN1bWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzQyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjc0Mzp2b2lkIHBoeWxpbmtfcmVzdW1lKHN0cnVjdCBwaHlsaW5rICpwbClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3NDQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNzc3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcmVzdW1lKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjc4Ny0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI3ODg6dm9pZCBwaHlsaW5rX2V0aHRvb2xfZ2V0X3dvbChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3ODkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yODE0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfd29sKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjgyNi0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI4Mjc6aW50IHBoeWxpbmtfZXRodG9vbF9zZXRfd29sKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjgyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5NDY9c3RhdGljIHZvaWQgcGh5bGlua19nZXRfa3NldHRpbmdzKGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTY4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjk2OTppbnQgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoc3RydWN0IHBoeWxpbmsgKnBsLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICprc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMDE0PXN0YXRpYyBib29sIHBoeWxpbmtfdmFsaWRhdGVfcGNzX2luYmFuZF9hdXRvbmVnKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzAzOC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMwMzk6aW50IHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHN0cnVjdCBwaHlsaW5rICpwbCxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMwNDAtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzIwMj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyMTQtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjE1OmludCBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMjE2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzIyNz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyMzMtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjM0OnZvaWQgcGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyMzUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMjQzPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyNDktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjUwOmludCBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzI1MS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzMyOT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzQwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM0MTppbnQgcGh5bGlua19nZXRfZWVlX2VycihzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzQyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM1Mj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2dldF9lZWVfZXJyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM1OC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMzNTk6aW50IHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWVlKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMzNzg9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2dldF9lZWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzg0LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM4NTppbnQgcGh5bGlua19ldGh0b29sX3NldF9lZWUoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZWUpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzg2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzU1Mj1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX3dyaXRlKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgaW50IHBoeV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzU4Ni0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM1ODc6aW50IHBoeWxpbmtfbWlpX2lvY3RsKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzY0NT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21paV9pb2N0bCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM2NTgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNjU5OmludCBwaHlsaW5rX3NwZWVkX2Rvd24oc3RydWN0IHBoeWxpbmsgKnBsLCBib29sIHN5bmMpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNjYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzY3MD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NwZWVkX2Rvd24pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNjgxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzY4MjppbnQgcGh5bGlua19zcGVlZF91cChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNjgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDA5NT1zdGF0aWMgc3RydWN0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDExMC1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQxMTE6dm9pZCBwaHlsaW5rX3Jlc29sdmVfYzczKHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDExMi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQxNTg9c3RhdGljIHZvaWQgcGh5bGlua19kZWNvZGVfc2dtaWlfd29yZChzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDE5NC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQxOTU6dm9pZCBwaHlsaW5rX2RlY29kZV91c3hnbWlpX3dvcmQoc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MTk2LVxcdFxcdFxcdFxcdCB1aW50MTZfdCBscGEpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQyNDA9c3RhdGljIHZvaWQgcGh5bGlua19kZWNvZGVfdXNnbWlpX3dvcmQoc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQyNzgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0Mjc5OnZvaWQgcGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MjgwLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBuZWdfbW9kZSwgdTE2IGJtc3IsIHUxNiBscGEpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQzMjY9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MzQyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDM0Mzp2b2lkIHBoeWxpbmtfbWlpX2MyMl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBtZGlvX2RldmljZSAqcGNzLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM0NC1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQzNTg9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19taWlfYzIyX3Bjc19nZXRfc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MzczLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDM3NDppbnQgcGh5bGlua19taWlfYzIyX3Bjc19lbmNvZGVfYWR2ZXJ0aXNlbWVudChwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM3NS1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00Mzk4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2MyMl9wY3NfZW5jb2RlX2FkdmVydGlzZW1lbnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NDExLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDQxMjppbnQgcGh5bGlua19taWlfYzIyX3Bjc19jb25maWcoc3RydWN0IG1kaW9fZGV2aWNlICpwY3MsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NDEzLVxcdFxcdFxcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00NDQyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2MyMl9wY3NfY29uZmlnKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDQ1NC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQ0NTU6dm9pZCBwaHlsaW5rX21paV9jMjJfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IG1kaW9fZGV2aWNlICpwY3MpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NDU2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDQ2NT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21paV9jMjJfcGNzX2FuX3Jlc3RhcnQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDQ2Ni1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQ0Njc6dm9pZCBwaHlsaW5rX21paV9jNDVfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKnBjcyxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ0NjgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQ0OTQ9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19taWlfYzQ1X3Bjc19nZXRfc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NTA4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDUwOTp2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4oc3RydWN0IHBoeWxpbmsgKnBsKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDUxMC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQ1MTU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19yZXBsYXlfbGlua19iZWdpbik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ1MzEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0NTMyOnZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDUzMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjU2LjgyMDkxOTAyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTM4NjY1NjUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBSZWxldmFudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2U6XG5cbiogICBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YFxuKiAgIGBldGhubF9wb3J0X2R1bXBpdGBcbiogICBgZXRobmxfcG9ydF9kdW1wX2RvbmVgXG4qICAgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgXG4qICAgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgXG4qICAgYHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNgXG4qICAgYHBoeV9zZXRfdXBzdHJlYW1fcG9ydGBcblxuSSBxdWlja2x5IHJlYWxpemVkIHRoZSBmaXJzdCB0aHJlZSBhcmUgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AuIEkgY2hlY2tlZCBmb3Igb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSwgYnV0IEkgY29uZmlybWVkIHRoYXQgdGhvc2UgYXJlIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5JIHdhcyBicmllZmx5IGNvbmNlcm5lZCBhYm91dCB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMsIGxpa2UgYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBhbmQgYHBvcnRfZmlsbF9yZXBseWAsIHVzZWQgd2l0aGluIGBuZXQvZXRodG9vbC9wb3J0LmNgLiBBbHRob3VnaCB0aGV5IGFyZSBzdGF0aWMsIEkgcmVjb2duaXplZCB0aGV5J3JlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGBldGhubF9wb3J0X3JlcXVlc3Rfb3BzYCwgc28gdGhleSBsaWtlbHkgYXJlbid0IGlubGluZWQuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgZW1waGFzaXplcyBwcmlvcml0aXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLCBzbyBJJ20gc3RpY2tpbmcgd2l0aCB0aGUgb3JpZ2luYWwgbGlzdC4gVGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBjb3JlIG9mIHRoZSBgZG9pdGAgY29tbWFuZCwgc28gSSdsbCBrZWVwIHRoZW0gaW4gbWluZCwgYnV0IHdvbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgZmluYWwgbGlzdCBmb3Igbm93LiBgZXRobmxfZGVmYXVsdF9kb2l0YCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgdG8gdGhhdCBsb2dpYy5cblxuVGhlbiBJIGNvbnNpZGVyZWQgb3RoZXIgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgIGxpa2UgYHBoeV9hZGRfc2ZwX21vZF9wb3J0YCwgYHBoeV9kZWxfc2ZwX21vZF9wb3J0YCwgYHBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnRgLCBldGMuIGJ1dCB0aGV5IHdlcmUgYWxsIHN0YXRpYywgc28gSSBpZ25vcmVkIHRoZW0uXG5cblNvIEkgYW0ga2VlcGluZyBteSBpbml0aWFsIGxpc3QuXG5cbkZvciB0aGUgY29uZmlncywgSSdsbCBuZWVkIGBFVEhUT09MX05FVExJTktgLCBgUEhZTElCYCwgYW5kIHBvc3NpYmx5IGBQSFlMSU5LYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgUEhZTElOS2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDgwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDozMDowOC4yMDc1NzkyNjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjI0Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSFlMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2OmNvbmZpZyBQSFlMSU5LXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDozMDowOC4yNTcyMDg3NjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwNzU1NzMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIFNGUCBQb3J0IFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhpcyBTRlAgcG9ydCBzdXBwb3J0IHBhdGNoLiBGaXJzdCwgYFBIWUxJTktgIGlzIHRyaXN0YXRlLCBzbyB0aGF0IGRlZmluaXRlbHkgZ2V0cyBpbmNsdWRlZC4gTGV0J3Mgc2VlLi4uIGBFVEhUT09MX05FVExJTktgIGlzIGRlZmF1bHQgeWVzLCBidXQgSSdtIGdvaW5nIHRvIGxpc3QgaXQgYW55d2F5LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBUaGVuLCBgUEhZTElCYCBhbmQgYFBIWUxJTktgIGFyZSBib3RoIHRyaXN0YXRlLCBzbyB3ZSBhZGQgdGhvc2UgYXMgd2VsbC4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgdGhlcmUncyBub3RoaW5nIGVsc2UgcmVxdWlyZWQ7IGlzIHRoZXJlIHNvbWV0aGluZyBsaWtlIGBNQUNCYCBvciBhbm90aGVyIGRyaXZlciB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYW4gU0ZQIHRlc3Q/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgY29tcGxldGVseSBzZWxmIGNvbnRhaW5lZC4gUmlnaHQsIHRoZSBwYXRjaCBhZGRzIFNGUCBwb3J0IHN1cHBvcnQsIHNvIGxldCdzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSB0aGluayBJIHdpbGwgbmVlZCB0byBjaGVjayBpZiBgQ09ORklHX1NGUGAgaXMgZXZlbiByZXF1aXJlZCwgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIGluY2x1ZGUgdGhhdCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6MzA6MTIuODY0NzY5MzAzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ5MjE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0ZQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NjU9Y29uZmlnIFJVU1RfUEhZTElCX0FCU1RSQUNUSU9OU1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NzM6Y29uZmlnIFNGUFxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJTRlAgY2FnZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDozMDoxMi45MTEyNjU3NzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2ODAwNzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqU0ZQIENhZ2UgRW5hYmxlbWVudCBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gdGhlIFNGUCBjYWdlIHN1cHBvcnQuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHNvbGlkIGFmZmlybWF0aW9uOiB5ZXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19TRlBgIGlzIGVuYWJsZWQuIFRoYXQgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBmaXJzdCBzdGVwLiBOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgZGV0YWlscyBmb3IgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbj8gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgaW4gdGhlIG5ldHdvcmsgUEhZIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJ2xsIG9wZW4gdXAgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCB0byBzZWUgd2hhdCBJIGNhbiB1bmNvdmVyIHJlZ2FyZGluZyB0aGUgYFNGUGAgS2NvbmZpZyBvcHRpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gY29uZmlybSB0aGUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQ4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjMwOjE2LjM3OTI3NTcyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHQgICAgICAgICAgQWRkcyBzdXBwb3J0IG5lZWRlZCBmb3IgUEhZIGRyaXZlcnMgd3JpdHRlbiBpbiBSdXN0LiBJdCBwcm92aWRlc1xcbiAgNzE6XFx0ICAgICAgICAgIGEgd3JhcHBlciBhcm91bmQgdGhlIEMgcGh5bGliIGNvcmUuXFxuICA3MjpcXHRcXG4gIDczOlxcdGNvbmZpZyBTRlBcXG4gIDc0OlxcdFxcdHRyaXN0YXRlIFxcXCJTRlAgY2FnZSBzdXBwb3J0XFxcIlxcbiAgNzU6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgUEhZTElOS1xcbiAgNzY6XFx0XFx0ZGVwZW5kcyBvbiBIV01PTiB8fCBIV01PTj1uXFxuICA3NzpcXHRcXHRzZWxlY3QgTURJT19JMkNcXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29tbWVudCBcXFwiTUlJIFBIWSBkZXZpY2UgZHJpdmVyc1xcXCJcXG4gIDgwOlxcdFxcbiAgODE6XFx0Y29uZmlnIEFTMjFYWFhfUEhZXFxuICA4MjpcXHRcXHR0cmlzdGF0ZSBcXFwiQWVvbnNlbWkgQVMyMXh4eCBQSFlzXFxcIlxcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIEFlb25zZW1pIEFTMjF4eHggUEhZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDozMDoxNi4zNzkzNjE0NThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU0NTgyNjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU0ZQIEludGVncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgU0ZQIHN1cHBvcnQgd2l0aGluIHRoZSBQSFkgZnJhbWV3b3JrIGFuZCBleHBvc2VzIGEgbmV3IG5ldGxpbmsgQVBJIGZvciBnZXR0aW5nIHBoeXNpY2FsIHBvcnQgaW5mb3JtYXRpb24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBDT05GSUdfU0ZQYCAqZGVmaW5pdGVseSogZGVwZW5kcyBvbiBgSTJDYCBhbmQgYFBIWUxJTktgLiAgSSBzaG91bGQgbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhvc2UgZGVwZW5kZW5jaWVzIGluIG15IGJ1aWxkLiBBbmQgSSdsbCBhZGQgYFBIWUxJQmAsIGBFVEhUT09MX05FVExJTktgLCBhbmQgb2YgY291cnNlIGBTRlBgIGl0c2VsZi5cblxuVGhlIGNvcmUgb2YgdGhpcyBpcyB0aGUgbmV3IGBQT1JUX0dFVGAgY29tbWFuZCBpbiBldGh0b29sIG5ldGxpbmsuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBtYWpvciBvbmUgc2luY2Ugd2UncmUgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCB0aGUgUEhZL3BoeWxpbmsgbG9naWMgdGhhdCdzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiBUcmFuc2xhdGlvbjogKlRoaXMgaXMgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIGZ1enppbmcuKiAgV2UncmUgZXhwb3NpbmcgbmV3IEFQSXMsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyByb2J1c3QuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgc3BlY2lmaWMgc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbiBmb3IgZnV6emluZyBhbmQgY292ZXJhZ2UuIEknbSB0aGlua2luZzpcblxuKiAgIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgXG4qICAgYGV0aG5sX3BvcnRfZHVtcGl0YFxuKiAgIGBldGhubF9wb3J0X2R1bXBfZG9uZWBcbiogICBgcGh5X2xpbmtfdG9wb19hZGRfcG9ydGBcbiogICBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGBcbiogICBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2BcbiogICBgcGh5X3NldF91cHN0cmVhbV9wb3J0YFxuXG5UaG9zZSBzZWVtIGxpa2UgdGhlIGNydWNpYWwgZW50cnkgYW5kIGV4aXQgcG9pbnRzIGZvciB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cbkFuZCBsZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayBteSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llczpcblxuKiAgIGBFVEhUT09MX05FVExJTktgIC0gb2J2aW91c2x5IGEga2V5IG9uZS5cbiogICBgUEhZTElCYCAtIGZ1bmRhbWVudGFsLCBmb3IgdGhlIFBIWSBmcmFtZXdvcmsgaXRzZWxmLlxuKiAgIGBQSFlMSU5LYCAtIHRoZSBsaW5rIGJldHdlZW4gdGhlIFBIWSBhbmQgdGhlIG5ldHdvcmsuXG4qICAgYFNGUGAgLSB0aGUgZmVhdHVyZSB0aGF0J3MgZHJpdmluZyB0aGUgY2hhbmdlLlxuKiAgIGBJMkNgIC0gZm9yIFNGUC9tb2R1bGUgaW50ZXJhY3Rpb24uXG5cbkhtbSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHBvcnRfcGFyc2VfcmVxdWVzdGAgYW5kIHRoZSBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIGludm9sdmVkIGluIHByb2Nlc3NpbmcgcmVxdWVzdHMgYXJlIGV2ZW4gd29ydGggY29uc2lkZXJpbmcuIFRoZXkncmUgc3RhdGljLCBzbyBpZiB0aGV5IGFyZSBpbmxpbmVkLCB0aGVpciBzeW1ib2xzIHdvbid0IGJlIGRpc3RpbmN0LCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSBiZWluZyB0YWtlbiBpbiBgZXRobmxfcG9ydF9yZXF1ZXN0X29wc2AsIHNvIHRoYXQgc3VnZ2VzdHMgdGhleSBhcmUgbm90IGlubGluZWQuIFNpbmNlIHN5emthbGxlciwgYW5kIGdlbmVyYWxseSBjb3ZlcmFnZSB0cmFja2luZywgdXNlcyBleHBvcnRlZCBvciBub24tc3RhdGljIHN5bWJvbHMsIEknbGwgc3RpY2sgdG8gbGlzdGluZyB0aG9zZSBub24tc3RhdGljIHN5bWJvbHMuXG5cbkxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgcG9ydF9wYXJzZV9yZXF1ZXN0YCBpcyBpbmRlZWQgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AuICpZZXMsIGl0IGlzKi4gT2theSwgZ3JlYXQsIEkgY2FuIGp1c3QgcHJvdmlkZSB0aGUgbm9uLXN0YXRpYyBvbmVzLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEkndmUgZ290IGEgc29saWQgcGxhbiBoZXJlLiBJJ2xsIGZsYWcgdGhpcyBhcyBuZWVkaW5nIGNvdmVyYWdlIHRlc3RpbmcuIEFuZCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5MjksIk91dHB1dFRva2VucyI6MjExLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6MzA6MjQuOTI1MTkxMjM3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczMjk1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVUSFRPT0xfTkVUTElOS1wiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJQSFlMSU5LXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIkkyQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9zdGFydFwiLFxuICAgIFwiZXRobmxfcG9ydF9kdW1waXRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9kb25lXCIsXG4gICAgXCJwaHlfbGlua190b3BvX2FkZF9wb3J0XCIsXG4gICAgXCJwaHlfbGlua190b3BvX2RlbF9wb3J0XCIsXG4gICAgXCJwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzXCIsXG4gICAgXCJwaHlfc2V0X3Vwc3RyZWFtX3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIGBQT1JUX0dFVGAgdG8gcmV0cmlldmUgcGh5c2ljYWwgcG9ydCBpbmZvcm1hdGlvbiwgYW5kIGFkZHMgU0ZQIHBvcnQgc3VwcG9ydCB0byB0aGUgUEhZIGZyYW1ld29yay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgbmV0bGluayBBUElzIGFuZCBtb2RpZmllcyBjb3JlIFBIWS9waHlsaW5rIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFVEhUT09MX05FVExJTktcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiUEhZTElOS1wiLFxuICAgIFwiU0ZQXCIsXG4gICAgXCJJMkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldGhubF9wb3J0X2R1bXBfc3RhcnRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcGl0XCIsXG4gICAgXCJldGhubF9wb3J0X2R1bXBfZG9uZVwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19hZGRfcG9ydFwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19kZWxfcG9ydFwiLFxuICAgIFwicGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc1wiLFxuICAgIFwicGh5X3NldF91cHN0cmVhbV9wb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZCBgUE9SVF9HRVRgIHRvIHJldHJpZXZlIHBoeXNpY2FsIHBvcnQgaW5mb3JtYXRpb24sIGFuZCBhZGRzIFNGUCBwb3J0IHN1cHBvcnQgdG8gdGhlIFBIWSBmcmFtZXdvcmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IG5ldGxpbmsgQVBJcyBhbmQgbW9kaWZpZXMgY29yZSBQSFkvcGh5bGluayBsb2dpYywgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGV0aHRvb2wgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxtxkq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 10:13:47 +0000 UTC FinishedAt: 2026-08-02 10:30:26 +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": "1327e30657d283976c839f1bd24e2d3f68474097", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ETHTOOL_NETLINK", "PHYLIB", "PHYLINK", "SFP", "I2C" ], "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": "1327e30657d283976c839f1bd24e2d3f68474097", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ETHTOOL_NETLINK", "PHYLIB", "PHYLINK", "SFP", "I2C" ], "series_id": "438860b6-bd89-4285-84ae-795bb5de9ba2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ethnl_port_dump_start", "ethnl_port_dumpit", "ethnl_port_dump_done", "phy_link_topo_add_port", "phy_link_topo_del_port", "phy_caps_linkmode_filter_ifaces", "phy_set_upstream_port" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7UEhZTElOSyYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7STJDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb19kZWxfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzJiMzNDssCiAgICAmIzM0O3BoeV9zZXRfdXBzdHJlYW1fcG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIGBQT1JUX0dFVGAgdG8gcmV0cmlldmUgcGh5c2ljYWwgcG9ydCBpbmZvcm1hdGlvbiwgYW5kIGFkZHMgU0ZQIHBvcnQgc3VwcG9ydCB0byB0aGUgUEhZIGZyYW1ld29yay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgbmV0bGluayBBUElzIGFuZCBtb2RpZmllcyBjb3JlIFBIWS9waHlsaW5rIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBhYmQ1Mzk4YzUyY2E5ODg2MDYxZWIzMGE4MTIwMjAwMmFlNjJiNGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDEwOjI5OjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiLi42N2FjMzQwMDQ2MmJmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTIxMCw2ICYjNDM7MjEwLDExIEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGRpc2NhcmRcbiAgICAgICAgIHZhbHVlOiAzMVxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IHBvcnQtdHlwZVxuJiM0MzsgICAgZG9jOiB0eXBlIG9mIHBoeXNpY2FsIGNvbm5lY3RvclxuJiM0MzsgICAgdHlwZTogZW51bVxuJiM0MzsgICAgZW50cmllczogW21kaSwgc2ZwXVxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTE5MDUsNiAmIzQzOzE5MTAsMzIgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBsaW5rXG4gICAgICAgICB0eXBlOiBuZXN0XG4gICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90XG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogcG9ydFxuJiM0MzsgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnRcbiYjNDM7ICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBoZWFkZXJcbiYjNDM7ICAgICAgICB0eXBlOiBuZXN0XG4mIzQzOyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlclxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogaWRcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1tb2Rlc1xuJiM0MzsgICAgICAgIHR5cGU6IG5lc3RcbiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtaW50ZXJmYWNlc1xuJiM0MzsgICAgICAgIHR5cGU6IG5lc3RcbiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiB0eXBlXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZW51bTogcG9ydC10eXBlXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiB1cHN0cmVhbS1wb3J0XG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4gXG4gb3BlcmF0aW9uczpcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXG5AQCAtMjg1OSw2ICYjNDM7Mjg5MCwyOSBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gd29yc3QtY2hhbm5lbFxuICAgICAgICAgICAgIC0gbGlua1xuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IHBvcnQtZ2V0XG4mIzQzOyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZVxuJiM0MztcbiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogcG9ydFxuJiM0MztcbiYjNDM7ICAgICAgZG86IFx1MDAyNnBvcnQtZ2V0LW9wXG4mIzQzOyAgICAgICAgcmVxdWVzdDpcbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgICAgICAgIC0gaGVhZGVyXG4mIzQzOyAgICAgICAgICAgIC0gaWRcbiYjNDM7ICAgICAgICByZXBseTpcbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgICAgICAgIC0gaGVhZGVyXG4mIzQzOyAgICAgICAgICAgIC0gaWRcbiYjNDM7ICAgICAgICAgICAgLSBzdXBwb3J0ZWQtbW9kZXNcbiYjNDM7ICAgICAgICAgICAgLSBzdXBwb3J0ZWQtaW50ZXJmYWNlc1xuJiM0MzsgICAgICAgICAgICAtIHR5cGVcbiYjNDM7ICAgICAgICAgICAgLSB1cHN0cmVhbS1wb3J0XG4mIzQzOyAgICAgIGR1bXA6XG4mIzQzOyAgICAgICAgcmVxdWVzdDpcbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgICAgICAgIC0gaGVhZGVyXG4gXG4gbWNhc3QtZ3JvdXBzOlxuICAgbGlzdDpcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XG5pbmRleCBlOTJhYmY0NWZhZjUwLi5iNDMyNmM4OWIwNzUxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XG5AQCAtMjUzNyw2ICYjNDM7MjUzNywzOSBAQCBXaXRoaW4gZWFjaCBjaGFubmVsIG5lc3QsIG9ubHkgdGhlIG1ldHJpY3Mgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgd2lsbCBiZSBwcmVzZW50LlxuIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW5cbiBgYGluY2x1ZGUvbGludXgvcGh5LmhgYC5cbiBcbiYjNDM7UE9SVF9HRVRcbiYjNDM7PT09PT09PT1cbiYjNDM7XG4mIzQzO1JldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLFxuJiM0MztyZWZlcnJlZCB0byBhcyBcJiMzNDtwb3J0c1wmIzM0Oy4gVXNlciBuZWVkcyB0byBzcGVjaWZ5IGEgUE9SVF9JRCBmb3IgdGhlIERPIG9wZXJhdGlvbixcbiYjNDM7aW4gd2hpY2ggY2FzZSB0aGUgRE8gcmVxdWVzdCByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoYXQgc3BlY2lmaWMgcG9ydC5cbiYjNDM7XG4mIzQzO0FzIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIHBvcnQsIHRoZSBEVU1QIG9wZXJhdGlvbiBjYW4gYmUgdXNlZCB0byBsaXN0IHRoZVxuJiM0Mztwb3J0cyBwcmVzZW50IG9uIGEgZ2l2ZW4gaW50ZXJmYWNlLCBieSBwYXNzaW5nIGFuIGludGVyZmFjZSBpbmRleCBvciBuYW1lIGluXG4mIzQzO3RoZSBkdW1wIHJlcXVlc3QuXG4mIzQzO1xuJiM0MztSZXF1ZXN0IGNvbnRlbnRzOlxuJiM0MztcbiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSEVBREVSYGAgICAgICAgICAgICAgbmVzdGVkICByZXF1ZXN0IGhlYWRlclxuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgdTMyICAgICBwb3J0IGlkXG4mIzQzOyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO0tlcm5lbCByZXNwb25zZSBjb250ZW50czpcbiYjNDM7XG4mIzQzOyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgICAgbmVzdGVkICByZXF1ZXN0IGhlYWRlclxuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgICB1MzIgICAgIHRoZSBwb3J0JiMzOTtzIHVuaXF1ZSBpZGVudGlmaWVyLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBuZXRkZXZpY2UuXG4mIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVNgYCAgICAgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBsaW5rbW9kZXNcbiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTYGAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIE1JSVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXNcbiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1RZUEVgYCAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCB0eXBlXG4mIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUYGAgICAgICAgIHUzMiAgICAgSWYgYW55LCB0aGUgaW5kZXggb2YgdGhlIE1JSVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgdGhhdCBmZWVkcyBpbnRvIHRoaXNcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LlxuJiM0MzsgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuIFJlcXVlc3QgdHJhbnNsYXRpb25cbiA9PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtMjY0Nyw0ICYjNDM7MjY4MCw1IEBAIGFyZSBuZXRsaW5rIG9ubHkuXG4gICBuL2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1BIWV9HRVRgYFxuICAgYGBTSU9DR0hXVFNUQU1QYGAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19UU0NPTkZJR19HRVRgYFxuICAgYGBTSU9DU0hXVFNUQU1QYGAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19UU0NPTkZJR19TRVRgYFxuJiM0MzsgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgYFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0XG5pbmRleCA2ZTI4ZDkwOTRiY2UzLi4yYTliMWVjOTNiNzBmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuQEAgLTk5LDEzICYjNDM7OTksMjkgQEAgd2lsbCBldmVudHVhbGx5IGJlIGFibGUgdG8gcmVwb3J0IGl0cyBvd24ga3NldHRpbmdzOjpcbiAgICAgICAgICAgICAoX19fX18pLS0tLS18IFBvcnQgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tJiM0MztcbiBcbiYjNDM7U0ZQIHBvcnRzXG4mIzQzOz09PT09PT09PVxuJiM0MztcbiYjNDM7U0ZQIGludGVyZmFjZXMgaW52b2x2ZSAyIGRpc3RpbmN0IGNvbXBvbmVudHMsIGVhY2ggcmVwcmVzZW50ZWQgYnlcbiYjNDM7YSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgIGluc3RhbmNlIDpcbiYjNDM7XG4mIzQzOyAtIFRoZSBTRlAgY2FnZSBpdHNlbGYgaXMgYSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgLiBJdCYjMzk7cyBzcGVjaWFsXG4mIzQzOyAgIGluIHRoYXQgaXQmIzM5O3Mgbm90IGFuIE1ESSBpbnRlcmZhY2UsIGJ1dCByYXRoZXIgYSBob3QtcGx1Z2dhYmxlIE1JSS5cbiYjNDM7ICAgVGhlIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWAgYXNzb2NpYXRlZCB0byBpdCBsaXN0cyB0aGUgZGlmZmVyZW50XG4mIzQzOyAgIE1JSSBpbnRlcmZhY2VzIHdlIGNhbiB1c2Ugb24gdGhlIGNhZ2UuXG4mIzQzO1xuJiM0MzsgLSBUaGUgU0ZQIG1vZHVsZSwgd2hlbiBpbnNlcnRlZCwgd2lsbCBhbHNvIGJlIGFzc29jaWF0ZWQgdG8gYVxuJiM0MzsgICA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgLCB0aGF0IHJlcHJlc2VudHMgdGhlIHZhcmlvdXMgbGlua21vZGVzXG4mIzQzOyAgIHRoYXQgaXQgZ2l2ZXMgYWNjZXNzIHRvLiBUaGUgbW9kdWxlJiMzOTtzIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWBcbiYjNDM7ICAgZG9lc24mIzM5O3Qgc3VwZXJzZWRlIHRoZSBjYWdlJiMzOTtzIHBvcnQsIGl0IHJlZmVyZW5jZXMgaXQgdGhyb3VnaFxuJiM0MzsgICB0aGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCA6YzptZW1iZXI6YHVwc3RyZWFtX3BvcnRgIGZpZWxkLlxuJiM0MztcbiBOZXh0IHN0ZXBzXG4gPT09PT09PT09PVxuIFxuLUFzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCBvbmx5IHBvcnRzIGNvbnRyb2xsZWQgYnkgUEhZIGRldmljZXMgYXJlXG4tc3VwcG9ydGVkLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGFkZCB0aGUgTmV0bGluayBBUEkgdG8gZXhwb3NlIHRoZXNlXG4tdG8gdXNlcnNwYWNlIGFuZCBhZGQgc3VwcG9ydCBmb3IgcmF3IHBvcnRzIChjb250cm9sbGVkIGJ5IHNvbWUgZmlybXdhcmUsIGFuZCBkaXJlY3RseVxuLW1hbmFnZWQgYnkgdGhlIE5JQyBkcml2ZXIpLlxuJiM0MztBcyBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgdGhlIHBvcnQmIzM5O3MgcHJlc2VuY2UgYW5kIGluZm9ybWF0aW9uIGNhbiBvbmx5XG4mIzQzO2JlIHF1ZXJpZWQsIGFuZCBpdCYjMzk7cyBub3QgcG9zc2libGUgdG8gY2hhbmdlIGFueSBvZiB0aGUgcG9ydCYjMzk7cyBzZXR0aW5ncyBvciBzZWxlY3RcbiYjNDM7d2hpY2ggb25lIHNob3VsZCBiZSB1c2VkLlxuIFxuIEFub3RoZXIgcGFyYWxsZWwgdGFzayBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgTUlJIG11eGluZyBmcmFtZXdvcmsgdG8gYWxsb3cgdGhlXG4tY29udHJvbCBvZiBub24tUEhZIGRyaXZlciBtdWx0aS1wb3J0IHNldHVwcy5cbiYjNDM7Y29udHJvbCBvZiBub24tUEhZIGRyaXZlbiBtdWx0aS1wb3J0IHNldHVwcy5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA5MzJlYTFkYjA0OGU1Li4zOTVmOGI1ZDE4NDk1IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTg4MTYsNiAmIzQzOzE4ODE2LDcgQEAgRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZXRoZXJuZXQtY29ubmVjdG9yLnlhbWxcbiBGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuIEY6XHRkcml2ZXJzL25ldC9waHkvcGh5X3BvcnQuY1xuIEY6XHRpbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbiYjNDM7RjpcdG5ldC9ldGh0b29sL3BvcnQuY1xuIEs6XHRzdHJ1Y3RcXHMmIzQzO3BoeV9wb3J0fHBoeV9wb3J0X1xuIFxuIE5FVFdPUktJTkcgW0dFTkVSQUxdXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxuaW5kZXggNDIxMDg4ZTZmNmU4Zi4uZWMzZDM5YTBhZTA2YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxuQEAgLTY2LDUgJiM0Mzs2Niw3IEBAIHZvaWQgcGh5X2NhcHNfbWVkaXVtX2dldF9zdXBwb3J0ZWQodW5zaWduZWQgbG9uZyAqc3VwcG9ydGVkLFxuIFx0XHRcdFx0ICAgZW51bSBldGh0b29sX2xpbmtfbWVkaXVtIG1lZGl1bSxcbiBcdFx0XHRcdCAgIGludCBsYW5lcyk7XG4gdTMyIHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzKTtcbiYjNDM7dm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmcm9tLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaW50ZXJmYWNlcyk7XG4gXG4gI2VuZGlmIC8qIF9fUEhZX0NBUFNfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcbmluZGV4IDk0MmQ0MzE5MTU2MWUuLjU1OGU0ZGY0ZDYzYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcbkBAIC00NDUsMyAmIzQzOzQ0NSwyOSBAQCB1MzIgcGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpXG4gXHRyZXR1cm4gbWVkaXVtcztcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcygpIC0gRmlsdGVyIGxpbmttb2RlcyB3aXRoIGFuIGludGVyZmFjZSBsaXN0XG4mIzQzOyAqIEB0bzogU3RvcmVzIHRoZSBmaWx0ZXJlZCBsaW5rbW9kZXNcbiYjNDM7ICogQGZyb206IExpbmttb2RlcyB0byBmaWx0ZXJcbiYjNDM7ICogQGludGVyZmFjZXM6IEJpdGZpZWxkIG9mIHBoeV9pbnRlcmZhY2VfdCB0aGF0IHdlIHVzZSBmb3IgZmlsdGVyaW5nXG4mIzQzOyAqXG4mIzQzOyAqIEZpbHRlciB0aGUgcHJvdmlkZWQgbGlua21vZGVzLCBvbmx5IHRvIGtlZXAgdGhlIG9uZXMgd2UgY2FuIHBvc3NpYmx5IGFjaGlldmVcbiYjNDM7ICogd2hlbiB1c2luZyBhbnkgb2YgdGhlIHByb3ZpZGVkIE1JSSBpbnRlcmZhY2VzLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmludGVyZmFjZXMpXG4mIzQzO3tcbiYjNDM7XHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhpZmFjZXNfc3VwcG9ydGVkKSA9IHt9O1xuJiM0MztcdHVuc2lnbmVkIGludCBpZmFjZXNfY2FwcyA9IDA7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChpbnRlcmZhY2UsIGludGVyZmFjZXMsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgpXG4mIzQzO1x0XHRpZmFjZXNfY2FwcyB8PSBwaHlfY2Fwc19mcm9tX2ludGVyZmFjZShpbnRlcmZhY2UpO1xuJiM0MztcbiYjNDM7XHRwaHlfY2Fwc19saW5rbW9kZXMoaWZhY2VzX2NhcHMsIGlmYWNlc19zdXBwb3J0ZWQpO1xuJiM0MztcbiYjNDM7XHRsaW5rbW9kZV9hbmQodG8sIGZyb20sIGlmYWNlc19zdXBwb3J0ZWQpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCA5NGIyZTg1ZTAwYTM3Li4zZGE2ODcyZWJiYmEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE0OTAsMTEgJiM0MzsxNDkwLDIyIEBAIHN0YXRpYyBpbnQgcGh5X3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbiB7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0aWYgKGRldilcbi1cdFx0cmV0dXJuIHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gdHJ1ZTtcbiYjNDM7XHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHQvKiBJZiB3ZSBhcmVuJiMzOTt0IGF0dGFjaGVkIHRvIGEgbmV0ZGV2LCB3ZSBjYW4mIzM5O3QgYWRkIHRoZSBTRlAgUEhZIHRvIGl0c1xuJiM0MztcdCAqIHRvcG9sb2d5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZGV2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWhhc19zZnBfbW9kX3BoeSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC0xNTEyLDggJiM0MzsxNTIzLDEyIEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfZGlzY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbiBcbiYjNDM7XHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGRldilcbiBcdFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTtcbiYjNDM7XG4mIzQzO1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgTlVMTCk7XG4gfVxuIFxuIC8qKlxuQEAgLTE2MTcsNiAmIzQzOzE2MzIsNzcgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9saW5rX2Rvd24odm9pZCAqdXBzdHJlYW0pXG4gXHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWxpbmtfZG93bihwb3J0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGh5X2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgbW9kIHBvcnQgKi9cbiYjNDM7XHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcbiYjNDM7XHRpZiAoIXBvcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cG9ydC1cdTAwM2VhY3RpdmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRjYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwaHlkZXYtXHUwMDNlc2ZwX2J1cyk7XG4mIzQzO1xuJiM0MztcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXHUwMDNlbGlua19tb2RlcyxcbiYjNDM7XHRcdFx0XHRcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldikge1xuJiM0MztcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LCBwb3J0KTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHdlIGRvbiYjMzk7dCB1c2UgcGh5X2FkZF9wb3J0KCkgaGVyZSBhcyB0aGUgbW9kdWxlIHBvcnQgaXNuJiMzOTt0IGEgZGlyZWN0XG4mIzQzO1x0ICogaW50ZXJmYWNlIGZyb20gdGhlIFBIWSwgYnV0IHJhdGhlciBhbiBleHRlbnNpb24gdG8gdGhlIHNmcC1idXMsIHRoYXRcbiYjNDM7XHQgKiBpcyBhbHJlYWR5IHJlcHJlc2VudGVkIGJ5IGl0cyBvd24gcGh5X3BvcnRcbiYjNDM7XHQgKi9cbiYjNDM7XHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBwb3J0O1xuJiM0MztcbiYjNDM7XHRwb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBoeV9kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4mIzQzO1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1xuJiM0MztcdHBoeV9wb3J0X2Rlc3Ryb3kocGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV9zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuJiM0MztcbiYjNDM7XHQvKiBJZiB0aGVyZSYjMzk7cyBhIGRvd25zdHJlYW0gU0ZQIG1vZHVsZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGNvbnRhaW4gYSBQSFlcbiYjNDM7XHQgKiBkZXZpY2UsIGxldCYjMzk7cyBjcmVhdGUgYSBwaHlfcG9ydCB0byByZXByZXNlbnQgdGhhdCBtb2R1bGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxuJiM0MztcdFx0cmV0dXJuIHBoeV9hZGRfc2ZwX21vZF9wb3J0KHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwaHlfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuJiM0MztcbiYjNDM7XHQvKiBDYWxsZWQgdXBvbiBtb2R1bGUgcmVtb3ZhbCBvciB1cHN0cmVhbSByZW1vdmFsICovXG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxuJiM0MztcdFx0cGh5X2RlbF9zZnBfbW9kX3BvcnQocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG4gXHQuYXR0YWNoID0gcGh5X3NmcF9hdHRhY2gsXG4gXHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXG5AQCAtMTYyNiw2ICYjNDM7MTcxMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcbiBcdC5saW5rX2Rvd24gPSBwaHlfc2ZwX2xpbmtfZG93bixcbiBcdC5jb25uZWN0X3BoeSA9IHBoeV9zZnBfY29ubmVjdF9waHksXG4gXHQuZGlzY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Rpc2Nvbm5lY3RfcGh5LFxuJiM0MztcdC5tb2R1bGVfc3RhcnQgPSBwaHlfc2ZwX21vZHVsZV9zdGFydCxcbiYjNDM7XHQubW9kdWxlX3N0b3AgPSBwaHlfc2ZwX21vZHVsZV9zdG9wLFxuIH07XG4gXG4gc3RhdGljIGludCBwaHlfYWRkX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuQEAgLTE2NzMsMTMgJiM0MzsxNzYxLDEzIEBAIHN0YXRpYyB2b2lkIHBoeV9kZWxfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4gXHRwaHlkZXYtXHUwMDNlbl9wb3J0cy0tO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0MztzdGF0aWMgc3RydWN0IHBoeV9wb3J0ICpwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghcG9ydClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdHBvcnQtXHUwMDNlcGFyZW50X3R5cGUgPSBQSFlfUE9SVF9QSFk7XG4gXHRwb3J0LVx1MDAzZXBoeSA9IHBoeWRldjtcbkBAIC0xNjk0LDEwICYjNDM7MTc4MiwxMiBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0ICogd2hlbiBhdHRhY2hpbmcgdGhlIHBvcnQgdG8gdGhlIHBoeWRldi5cbiBcdCAqL1xuIFx0cmV0ID0gcGh5X2FkZF9wb3J0KHBoeWRldiwgcG9ydCk7XG4tXHRpZiAocmV0KVxuJiM0MztcdGlmIChyZXQpIHtcbiBcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcG9ydDtcbiB9XG4gXG4gLyoqXG5AQCAtMTcwNiwyNSAmIzQzOzE3OTYsNTAgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiAgKi9cbiBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBzZnBfYnVzICpidXM7XG4tXHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpIHtcbi1cdFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKTtcbi1cdFx0aWYgKElTX0VSUihidXMpKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKGJ1cyk7XG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4tXHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gYnVzO1xuJiM0MztcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XG4mIzQzO1x0aWYgKElTX0VSUihidXMpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYnVzKTtcbiBcbi1cdFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcbi1cdFx0c2ZwX2J1c19wdXQoYnVzKTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbiBcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XG4mIzQzO1x0aWYgKGJ1cykge1xuJiM0MztcdFx0cG9ydCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKElTX0VSUihwb3J0KSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHBvcnQpO1xuJiM0MztcdFx0XHRwb3J0ID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfc2ZwO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKVxuLVx0XHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3BvcnQ7XG4mIzQzO1xuJiM0MztcdC8qIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgZ3JhYnMgYSByZWYgdG8gdGhlIHNmcCBidXMgb24gc3VjY2VzcywgaXQmIzM5O3NcbiYjNDM7XHQgKiBzYWZlIHRvIHJlbGVhc2UgaXQgbm93LlxuJiM0MztcdCAqL1xuJiM0MztcdHNmcF9idXNfcHV0KGJ1cyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztvdXRfcG9ydDpcbiYjNDM7XHRpZiAocG9ydCkge1xuJiM0MztcdFx0cGh5X2RlbF9wb3J0KHBoeWRldiwgcG9ydCk7XG4mIzQzO1x0XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7b3V0X3NmcDpcbiYjNDM7XHRzZnBfYnVzX3B1dChidXMpO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE4MTUsNiAmIzQzOzE5MzAsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdGVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeWRldiwgUEhZX1VQU1RSRUFNX01BQywgZGV2KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwaHlkZXYtXHUwMDNlbW9kX3BvcnQpIHtcbiYjNDM7XHRcdFx0ZXJyID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdC8qIFNvbWUgRXRoZXJuZXQgZHJpdmVycyB0cnkgdG8gY29ubmVjdCB0byBhIFBIWSBkZXZpY2UgYmVmb3JlXG5AQCAtMTk1MSw2ICYjNDM7MjA3Miw4IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LVx1MDAzZXBoeWRldiA9IE5VTEw7XG4gXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xuIFx0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbiYjNDM7XHRcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4gXHR9XG4gXG4gXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gTlVMTDtcbkBAIC0zNjA0LDYgJiM0MzszNzI3LDI1IEBAIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeV9zZXRfdXBzdHJlYW1fcG9ydCgpIC0gU2V0cyB0aGUgcGh5X3BvcnQgY29udHJvbGxpbmcgdGhlIE1JSSB0aGlzIFBIWSBpc1xuJiM0MzsgKlx0XHRcdCAgICAgYXR0YWNoZWQgdG8uXG4mIzQzOyAqIEBwaHlkZXY6IHBvaW50ZXIgdG8gdGhlIFBIWSBkZXZpY2Ugd2Ugc2V0IHRoZSB1cHN0cmVhbSBvZi5cbiYjNDM7ICogQHBvcnQ6IFRoZSBwaHlfcG9ydCB1cHN0cmVhbSBvZiB0aGlzIFBIWSwgY2FuIGJlIE5VTEwuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcbiYjNDM7XG4mIzQzO1x0cGh5X2Zvcl9lYWNoX3BvcnQocGh5ZGV2LCBsb2NhbF9wb3J0KVxuJiM0MztcdFx0bG9jYWxfcG9ydC1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfc2V0X3Vwc3RyZWFtX3BvcnQpO1xuJiM0MztcbiAvKipcbiAgKiBmd25vZGVfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZndub2RlLCBmaW5kIHRoZSBtZGlvX2RldmljZVxuICAqIEBmd25vZGU6IHBvaW50ZXIgdG8gdGhlIG1kaW9fZGV2aWNlJiMzOTtzIGZ3bm9kZVxuQEAgLTM4NDIsNiAmIzQzOzM5ODQsNyBAQCBzdGF0aWMgaW50IHBoeV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFxuIFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGh5ZGV2LVx1MDAzZXNmcF9idXMpO1xuIFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbiBcbiBcdHBoeV9jbGVhbnVwX3BvcnRzKHBoeWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuaW5kZXggNDEzNGRlN2FlMzEzZC4uNjcxMGExOTk5NjdhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuQEAgLTcsNiAmIzQzOzcsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X3BvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuQEAgLTIzLDE3ICYjNDM7MjQsODkgQEAgc3RhdGljIGludCBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHhhX2luaXRfZmxhZ3MoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBYQV9GTEFHU19BTExPQzEpO1xuIFx0dG9wby1cdTAwM2VuZXh0X3BoeV9pbmRleCA9IDE7XG4gXG4mIzQzO1x0eGFfaW5pdF9mbGFncyhcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzLCBYQV9GTEFHU19BTExPQzEpO1xuJiM0MztcdHRvcG8tXHUwMDNlbmV4dF9wb3J0X2luZGV4ID0gMTtcbiYjNDM7XG4gXHRkZXYtXHUwMDNlbGlua190b3BvID0gdG9wbztcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlbGlua190b3BvKVxuJiM0MztcdFx0cmV0dXJuIGRldi1cdTAwM2VsaW5rX3RvcG87XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB0b3BvbG9neSBpcyBhbGxvY2F0ZWQgdGhlIGZpcnN0IHRpbWUgd2UgYWRkIGFuIG9iamVjdCB0byBpdC5cbiYjNDM7XHQgKiBJdCBpcyBmcmVlZCBhbG9uZ3NpZGUgdGhlIG5ldGRldi4gSXQgY2FuIGJlIGNhbGxlZCBvbiBtdWx0aXBsZVxuJiM0MztcdCAqIGNvbnRleHRzOlxuJiM0MztcdCAqICAtIEl0IGNhbiBiZSBjYWxsZWQgZnJvbSAucHJvYmUoKSA6IE5vIHJ0bmwsIG5vIG5ldGRldl9sb2NrXG4mIzQzO1x0ICogIC0gLm5kb19vcGVuKCkgOiBydG5sIGFuZCBwb3NzaWJseSBuZXRkZXZfbG9ja1xuJiM0MztcdCAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdFxuJiM0MztcdCAqXG4mIzQzO1x0ICogIEhvd2V2ZXIsIHdlIGNhbiYjMzk7dCByZWFsbHkgaGF2ZSByYWNlcyA6XG4mIzQzO1x0ICogIC0gSWYgd2UgaGF2ZSBhIFBIWSwgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkgd2lsbCBhbHdheXMgcnVuIGZpcnN0XG4mIzQzO1x0ICogICAgYW5kIHRyaWdnZXIgdGhlIGFsbG9jLiBPbmx5IHRoZW4gdGhlIHBvcnRzIGNhbiBiZSBhZGRlZCB0aHJvdWdoXG4mIzQzO1x0ICogICAgcGh5bGliIG9mIHNmcC5cbiYjNDM7XHQgKiAgLSBJZiB3ZSBkb24mIzM5O3QsIHRoZSBTRlAgcG9ydCBmb3IgdGhlIGNhZ2UgaXMgcmVnaXN0ZXJlZCBmaXJzdCwgYW5kXG4mIzQzO1x0ICogICAgb25seSB0aGVuIG90aGVyIHBvcnRzL1BIWXMgY2FuIGJlIHJlZ2lzdGVyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXYtXHUwMDNlbGlua190b3BvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogUG9ydHMgY2FuIG5vdyBiZSBxdWVyaWVkIHdpdGhvdXQgcnRubCBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLCB3aGljaFxuJiM0MztcdCAqIHdlIGRvbiYjMzk7dCBzdXBwb3J0IG5vdyBhcyBwb3J0IHJldHJpZXZhbCBpcyBkb25lIHVuZGVyIHJ0bmwuXG4mIzQzO1x0ICogV2UgZG9uJiMzOTt0IGhhdmUgcGh5X3BvcnQgZW5hYmxlZCBkZXZpY2VzIHlldCwgbGV0JiMzOTtzIG1ha2Ugc3VyZVxuJiM0MztcdCAqIHdlIGFyZSBsb3VkbHkgd2FybmVkIGFib3V0IHRoYXQgd2hlbiBpdCBoYXBwZW5zLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpO1xuJiM0MztcdGlmIChJU19FUlIodG9wbykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUih0b3BvKTtcbiYjNDM7XG4mIzQzO1x0LyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovXG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNlaWQpXG4mIzQzO1x0XHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgcG9ydC1cdTAwM2VpZCwgcG9ydCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0ID0geGFfYWxsb2NfY3ljbGljKFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIFx1MDAyNnBvcnQtXHUwMDNlaWQsIHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICAgeGFfbGltaXRfMzJiLCBcdTAwMjZ0b3BvLVx1MDAzZW5leHRfcG9ydF9pbmRleCxcbiYjNDM7XHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2FkZF9wb3J0KTtcbiYjNDM7XG4mIzQzO3ZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRvcG8pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHhhX2VyYXNlKFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIHBvcnQtXHUwMDNlaWQpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fZGVsX3BvcnQpO1xuJiM0MztcbiBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0ICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuIFx0XHRcdCAgZW51bSBwaHlfdXBzdHJlYW0gdXB0LCB2b2lkICp1cHN0cmVhbSlcbiB7XG4tXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuJiM0MztcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbztcbiBcdHN0cnVjdCBwaHlfZGV2aWNlX25vZGUgKnBkbjtcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogZXRodG9vbCBvcHMgbWF5IHJ1biB3aXRob3V0IHJ0bmxfbG9jaywgYW5kIHJ0bmxfbG9jayBpcyB3aGF0XG5AQCAtNDUsMTMgJiM0MzsxMTgsOSBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoIXRvcG8pIHtcbi1cdFx0cmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0dG9wbyA9IGRldi1cdTAwM2VsaW5rX3RvcG87XG4tXHR9XG4mIzQzO1x0dG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7XG4mIzQzO1x0aWYgKElTX0VSUih0b3BvKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xuIFxuIFx0cGRuID0ga3phbGxvY19vYmooKnBkbik7XG4gXHRpZiAoIXBkbilcbkBAIC04Niw4ICYjNDM7MTU1LDIwIEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuJiM0MztcdC8qIEFkZCBhbGwgdGhlIFBIWSYjMzk7cyBwb3J0cyB0byB0aGUgdG9wb2xvZ3kgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZCkge1xuJiM0MztcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBvcnQpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBkZWxfcG9ydHM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIFxuJiM0MztkZWxfcG9ydHM6XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbiYjNDM7XHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBwaHktXHUwMDNlcGh5aW5kZXgpO1xuIGVycjpcbiBcdGtmcmVlKHBkbik7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTk5LDEwICYjNDM7MTgwLDE0IEBAIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbiBcdHN0cnVjdCBwaHlfZGV2aWNlX25vZGUgKnBkbjtcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4gXG4gXHRpZiAoIXRvcG8pXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbiYjNDM7XHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwb3J0KTtcbiYjNDM7XG4gXHRwZG4gPSB4YV9lcmFzZShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMsIHBoeS1cdTAwM2VwaHlpbmRleCk7XG4gXG4gXHQvKiBXZSBkZWxldGUgdGhlIFBIWSBmcm9tIHRoZSB0b3BvbG9neSwgaG93ZXZlciB3ZSBkb24mIzM5O3QgcmUtc2V0IHRoZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5pbmRleCBmNDBhY2MwZDQxMzM4Li5hNWYwMjUxODdhZmEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuQEAgLTE0LDYgJiM0MzsxNCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfZml4ZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfbGlua190b3BvbG9neS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9wb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbkBAIC05Myw2ICYjNDM7OTUsOCBAQCBzdHJ1Y3QgcGh5bGluayB7XG4gXHRERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhzZnBfaW50ZXJmYWNlcyk7XG4gXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzZnBfc3VwcG9ydCk7XG4gXHR1OCBzZnBfcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICptb2RfcG9ydDtcbiBcbiBcdHN0cnVjdCBlZWVfY29uZmlnIGVlZV9jZmc7XG4gXG5AQCAtMTc2NCw2ICYjNDM7MTc2OCw1MSBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX2ZpeGVkX3BvbGwoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHNmcF9waHlsaW5rX29wcztcbiBcbiYjNDM7c3RhdGljIGludCBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbC1cdTAwM2VuZXRkZXYgfHwgIXBsLVx1MDAzZXNmcF9idXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7XG4mIzQzO1x0aWYgKCFwb3J0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBvcnQtXHUwMDNlaXNfc2ZwID0gdHJ1ZTtcbiYjNDM7XHRwb3J0LVx1MDAzZWlzX21paSA9IHRydWU7XG4mIzQzO1x0cG9ydC1cdTAwM2VhY3RpdmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRwaHlfaW50ZXJmYWNlX2FuZChwb3J0LVx1MDAzZWludGVyZmFjZXMsIHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyxcbiYjNDM7XHRcdFx0ICBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRwaHlfcG9ydF91cGRhdGVfc3VwcG9ydGVkKHBvcnQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcG9ydCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3lfcG9ydDtcbiYjNDM7XG4mIzQzO1x0cGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X2Rlc3Ryb3lfcG9ydDpcbiYjNDM7XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuJiM0MztcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbiYjNDM7e1xuJiM0MztcdGlmIChwbC1cdTAwM2VuZXRkZXYgXHUwMDI2XHUwMDI2IHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpXG4mIzQzO1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4mIzQzO1xuJiM0MztcdGlmIChwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KVxuJiM0MztcdFx0cGh5X3BvcnRfZGVzdHJveShwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbiYjNDM7XG4mIzQzO1x0cGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBwaHlsaW5rX3JlZ2lzdGVyX3NmcChzdHJ1Y3QgcGh5bGluayAqcGwsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuIHtcbkBAIC0xNzgxLDkgJiM0MzsxODMwLDE4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLFxuIFxuIFx0cGwtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbiBcbiYjNDM7XHRyZXQgPSBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHBsKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRzZnBfYnVzX3B1dChidXMpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwbCwgXHUwMDI2c2ZwX3BoeWxpbmtfb3BzKTtcbiBcdHNmcF9idXNfcHV0KGJ1cyk7XG4gXG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHBsKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xOTQ2LDYgJiM0MzsyMDA0LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpO1xuIHZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbClcbiB7XG4gXHRzZnBfYnVzX2RlbF91cHN0cmVhbShwbC1cdTAwM2VzZnBfYnVzKTtcbiYjNDM7XHRwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChwbCk7XG4gXHRpZiAocGwtXHUwMDNlbGlua19ncGlvKVxuIFx0XHRncGlvZF9wdXQocGwtXHUwMDNlbGlua19ncGlvKTtcbiBcbkBAIC0zODcxLDE0ICYjNDM7MzkzMCw2NyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfcmVtb3ZlKHZvaWQgKnVwc3RyZWFtKVxuIFx0cGh5X2ludGVyZmFjZV96ZXJvKHBsLVx1MDAzZXNmcF9pbnRlcmZhY2VzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogQ3JlYXRlIG1vZCBwb3J0ICovXG4mIzQzO1x0cG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7XG4mIzQzO1x0aWYgKCFwb3J0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBvcnQtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0Y2FwcyA9IHNmcF9nZXRfbW9kdWxlX2NhcHMocGwtXHUwMDNlc2ZwX2J1cyk7XG4mIzQzO1xuJiM0MztcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXHUwMDNlbGlua19tb2RlcyxcbiYjNDM7XHRcdFx0XHRcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQtXHUwMDNlaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdGlmIChwbC1cdTAwM2VuZXRkZXYpIHtcbiYjNDM7XHRcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQocGwtXHUwMDNlbmV0ZGV2LCBwb3J0KTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQ7XG4mIzQzO1xuJiM0MztcdHBsLVx1MDAzZW1vZF9wb3J0ID0gcG9ydDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXBsLVx1MDAzZW1vZF9wb3J0KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAocGwtXHUwMDNlbmV0ZGV2KVxuJiM0MztcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBsLVx1MDAzZW1vZF9wb3J0KTtcbiYjNDM7XG4mIzQzO1x0cGh5X3BvcnRfZGVzdHJveShwbC1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1x0cGwtXHUwMDNlbW9kX3BvcnQgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuIHtcbiBcdHN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdGFydCB0aGUgUEhZIG5vdy4gKi9cbiBcdGlmIChwbC1cdTAwM2VwaHlkZXYpIHtcbiBcdFx0cGh5X3N0YXJ0KHBsLVx1MDAzZXBoeWRldik7XG4gXHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQocGwpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdC8qIElmIHRoZSBtb2R1bGUgbWF5IGhhdmUgYSBQSFkgYnV0IHdlIGRpZG4mIzM5O3QgZGV0ZWN0IG9uZSB3ZVxuQEAgLTM4ODcsNyAmIzQzOzM5OTksMTYgQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXG4gXHRpZiAoIXBsLVx1MDAzZXNmcF9tYXlfaGF2ZV9waHkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcbiYjNDM7XHRyZXQgPSBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZGVsX21vZF9wb3J0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2RlbF9tb2RfcG9ydDpcbiYjNDM7XHRwaHlsaW5rX2RlbF9zZnBfbW9kX3BvcnQocGwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSlcbkBAIC0zODk3LDYgJiM0Mzs0MDE4LDggQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXG4gXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdG9wIGl0LiAqL1xuIFx0aWYgKHBsLVx1MDAzZXBoeWRldilcbiBcdFx0cGh5X3N0b3AocGwtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwaHlsaW5rX2RlbF9zZnBfbW9kX3BvcnQocGwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9saW5rX2Rvd24odm9pZCAqdXBzdHJlYW0pXG5AQCAtMzk0MSw2ICYjNDM7NDA2NCw4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4gXHRwaHlfaW50ZXJmYWNlX2FuZChwaHktXHUwMDNlaG9zdF9pbnRlcmZhY2VzLCBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzLFxuIFx0XHRcdCAgcGwtXHUwMDNlY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiBcbiYjNDM7XHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbiYjNDM7XG4gXHQvKiBEbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uICovXG4gXHRyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX3BoeShwbCwgcGh5KTtcbiB9XG5AQCAtMzk0OSw2ICYjNDM7NDA3NCw3IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2Rpc2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh1cHN0cmVhbSk7XG4mIzQzO1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeWRldiwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDExMDkyYzMxNzViM2QuLjc0MWNhN2EwYTI1NzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtNTgyLDYgJiM0Mzs1ODIsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHdvbF9lbmFibGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGUgUEhZIG9yIHRoZSBhdHRhY2hlZCBNQUMgaGF2ZSBXYWtlLW9uLUxBTlxuICAqIFx0XHQgZW5hYmxlZC5cbiAgKiBAaXNfZ2VucGh5X2RyaXZlbjogUEhZIGlzIGRyaXZlbiBieSBvbmUgb2YgdGhlIGdlbmVyaWMgUEhZIGRyaXZlcnNcbiYjNDM7ICogQGhhc19zZnBfbW9kX3BoeTogU2V0IHRydWUgaWYgZG93bnN0cmVhbSBTRlAgYnVzJiMzOTtzIG1vZHVsZSBjb250YWlucyBhIFBIWVxuICAqIEBzdGF0ZTogU3RhdGUgb2YgdGhlIFBIWSBmb3IgbWFuYWdlbWVudCBwdXJwb3Nlc1xuICAqIEBkZXZfZmxhZ3M6IERldmljZS1zcGVjaWZpYyBmbGFncyB1c2VkIGJ5IHRoZSBQSFkgZHJpdmVyLlxuICAqXG5AQCAtNTk0LDYgJiM0Mzs1OTUsOSBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHBoeWxpbms6IFBvaW50ZXIgdG8gcGh5bGluayBpbnN0YW5jZSBmb3IgdGhpcyBQSFlcbiAgKiBAc2ZwX2J1c19hdHRhY2hlZDogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFNGUCBidXMgaGFzIGJlZW4gYXR0YWNoZWRcbiAgKiBAc2ZwX2J1czogU0ZQIGJ1cyBhdHRhY2hlZCB0byB0aGlzIFBIWSYjMzk7cyBmaWJlciBwb3J0XG4mIzQzOyAqIEBzZnBfY2FnZV9wb3J0OiBUaGUgcGh5X3BvcnQgY29ubmVjdGVkIHRvIHRoZSBkb3duc3RyZWFtIFNGUCBjYWdlXG4mIzQzOyAqIEBtb2RfcG9ydDogcGh5X3BvcnQgcmVwcmVzZW50aW5nIHRoZSBTRlAgbW9kdWxlLCBpZiBpdCBpcyBwaHktbGVzc1xuJiM0MzsgKiBAdXBzdHJlYW1fcG9ydDogcGh5X3BvcnQgdGhpcyBQSFkmIzM5O3MgTUlJIGF0dGFjaGVzIHRvLCBpZiBhbnlcbiAgKiBAYXR0YWNoZWRfZGV2OiBUaGUgYXR0YWNoZWQgZW5ldCBkcml2ZXImIzM5O3MgZGV2aWNlIGluc3RhbmNlIHB0clxuICAqIEBhZGp1c3RfbGluazogQ2FsbGJhY2sgZm9yIHRoZSBlbmV0IGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBjaGFuZ2VzOiBpbiB0aGVcbiAgKiAgICAgICAgICAgICAgIGxpbmsgc3RhdGUuXG5AQCAtNzA2LDYgJiM0Mzs3MTAsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XG4gXHR1bnNpZ25lZCBpcnFfcmVydW46MTtcbiBcbiBcdHVuc2lnbmVkIGRlZmF1bHRfdGltZXN0YW1wOjE7XG4mIzQzO1x0dW5zaWduZWQgaGFzX3NmcF9tb2RfcGh5OjE7XG4gXG4gXHRpbnQgcmF0ZV9tYXRjaGluZztcbiBcbkBAIC03ODUsNiAmIzQzOzc5MCw5IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcbiBcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cbiBcdGJvb2wgc2ZwX2J1c19hdHRhY2hlZDtcbiBcdHN0cnVjdCBzZnBfYnVzICpzZnBfYnVzO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqc2ZwX2NhZ2VfcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcbiBcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmF0dGFjaGVkX2RldjtcbiBcdHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cztcbkBAIC0yNDY4LDYgJiM0MzsyNDc2LDggQEAgaW50IF9fcGh5X2h3dHN0YW1wX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFxuIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBcbiYjNDM7dm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcbiYjNDM7XG4gLyoqXG4gICogcGh5X21vZHVsZV9kcml2ZXIoKSAtIEhlbHBlciBtYWNybyBmb3IgcmVnaXN0ZXJpbmcgUEhZIGRyaXZlcnNcbiAgKiBAX19waHlfZHJpdmVyczogYXJyYXkgb2YgUEhZIGRyaXZlcnMgdG8gcmVnaXN0ZXJcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcbmluZGV4IDk1NTc1ZjY4ZDViYzcuLjk1ODUyODJjYWUzZmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxuQEAgLTEzLDE0ICYjNDM7MTMsMTkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuIHN0cnVjdCB4YXJyYXk7XG4gc3RydWN0IHBoeV9kZXZpY2U7XG4mIzQzO3N0cnVjdCBwaHlfcG9ydDtcbiBzdHJ1Y3Qgc2ZwX2J1cztcbiBcbiBzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kge1xuIFx0c3RydWN0IHhhcnJheSBwaHlzO1xuIFx0dTMyIG5leHRfcGh5X2luZGV4O1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgeGFycmF5IHBvcnRzO1xuJiM0MztcdHUzMiBuZXh0X3BvcnRfaW5kZXg7XG4gfTtcbiBcbiBzdHJ1Y3QgcGh5X2RldmljZV9ub2RlIHtcbkBAIC00OCw2ICYjNDM7NTMsOSBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7XG4gXG4mIzQzO2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4mIzQzO3ZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpO1xuJiM0MztcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcbiBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxuIHtcbkBAIC02NCw2ICYjNDM7NzIsMjUgQEAgcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X3BvcnQgKlxuJiM0MztwaHlfbGlua190b3BvX2dldF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwb3J0X2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbiYjNDM7XG4mIzQzO1x0aWYgKCF0b3BvKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdC8qIHBvcnRzIGluIHRoZSB0b3BvIGFyZSBSVE5MIHByb3RlY3RlZCwgYnV0IG1heSBiZSBhY2Nlc3NlZCB1bmRlclxuJiM0MztcdCAqIG5ldGRldl9sb2NrIGZvciBvcHMtbG9ja2VkIGRldmljZXMuIEZvciBub3cga2VlcCB0aGVtIHVuZGVyIHJ0bmxcbiYjNDM7XHQgKiBwcm90ZWN0aW9uLCBhcyBubyBvcHMtbG9ja2VkIGRldmljZXMgaGF2ZSBwaHlfcG9ydCBjYXBhYmlsaXRpZXNcbiYjNDM7XHQgKiB5ZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2FsbGVyIG11c3QgaG9sZCBSVE5MIHdoaWxlIGhhbmRsaW5nIHRoZSBwaHlfcG9ydCAqL1xuJiM0MztcdHJldHVybiB4YV9sb2FkKFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIHBvcnRfaWQpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG5AQCAtNzcsMTEgJiM0MzsxMDQsMjggQEAgc3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqXG4gcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXG4mIzQzO3BoeV9saW5rX3RvcG9fZ2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBvcnRfaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfX1BIWV9MSU5LX1RPUE9MT0dZX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbmluZGV4IDBlZjBmNWNlNDcwOTIuLjhmNDVjMDMxY2JjMTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuQEAgLTM2LDkgJiM0MzszNiwxMiBAQCBzdHJ1Y3QgcGh5X3BvcnRfb3BzIHtcbiAvKipcbiAgKiBzdHJ1Y3QgcGh5X3BvcnQgLSBBIHJlcHJlc2VudGF0aW9uIG9mIGEgbmV0d29yayBkZXZpY2UgcGh5c2ljYWwgaW50ZXJmYWNlXG4gICpcbiYjNDM7ICogQGlkOiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBvcnQgd2l0aGluIHRoZSB0b3BvbG9neVxuICAqIEBoZWFkOiBVc2VkIGJ5IHRoZSBwb3J0JiMzOTtzIHBhcmVudCB0byBsaXN0IHBvcnRzXG4gICogQHBhcmVudF90eXBlOiBUaGUgdHlwZSBvZiBkZXZpY2UgdGhpcyBwb3J0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0b1xuICAqIEBwaHk6IElmIHRoZSBwYXJlbnQgaXMgUEhZX1BPUlRfUEhZREVWLCB0aGUgUEhZIGNvbnRyb2xsaW5nIHRoYXQgcG9ydFxuJiM0MzsgKiBAdXBzdHJlYW1fcG9ydDogSW5kaWNhdGVzIHRoZSBNSUkgcG9ydCB0aGF0IGZlZWRzIHRoaXMgcG9ydCwgaWYgYW55LFxuJiM0MzsgKlx0XHQgICBlLmcuIHRoZSBTRlAgY2FnZSBwb3J0IGZvciBhIFNGUCBtb2R1bGUgcG9ydC5cbiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlclxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxuICAqIEBtZWRpdW1zOiBCaXRtYXNrIG9mIHRoZSBwaHlzaWNhbCBtZWRpdW1zIHRoaXMgcG9ydCBwcm92aWRlcyBhY2Nlc3MgdG9cbkBAIC01MiwxMSAmIzQzOzU1LDEzIEBAIHN0cnVjdCBwaHlfcG9ydF9vcHMge1xuICAqIEBpc19zZnA6IEluZGljYXRlcyBpZiB0aGlzIHBvcnQgZHJpdmVzIGFuIFNGUCBjYWdlLlxuICAqL1xuIHN0cnVjdCBwaHlfcG9ydCB7XG4mIzQzO1x0dTMyIGlkO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBoZWFkO1xuIFx0ZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XG4gXHR9O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcbiBcbiBcdGNvbnN0IHN0cnVjdCBwaHlfcG9ydF9vcHMgKm9wcztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmMy4uZjlkODc5NGVhYmMxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbkBAIC03OCw2ICYjNDM7NzgsMTEgQEAgZW51bSBldGh0b29sX3BzZV9ldmVudCB7XG4gXHRFVEhUT09MX1BTRV9FVkVOVF9TV19QV19DT05UUk9MX0VSUk9SID0gNjQsXG4gfTtcbiBcbiYjNDM7ZW51bSBldGh0b29sX3BvcnRfdHlwZSB7XG4mIzQzO1x0RVRIVE9PTF9QT1JUX1RZUEVfTURJLFxuJiM0MztcdEVUSFRPT0xfUE9SVF9UWVBFX1NGUCxcbiYjNDM7fTtcbiYjNDM7XG4gZW51bSB7XG4gXHRFVEhUT09MX0FfSEVBREVSX1VOU1BFQyxcbiBcdEVUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYLFxuQEAgLTg0MCw2ICYjNDM7ODQ1LDE4IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9BX01TRV9NQVggPSAoX19FVEhUT09MX0FfTVNFX0NOVCAtIDEpXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfSEVBREVSID0gMSxcbiYjNDM7XHRFVEhUT09MX0FfUE9SVF9JRCxcbiYjNDM7XHRFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfVFlQRSxcbiYjNDM7XHRFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JULFxuJiM0MztcbiYjNDM7XHRfX0VUSFRPT0xfQV9QT1JUX0NOVCxcbiYjNDM7XHRFVEhUT09MX0FfUE9SVF9NQVggPSAoX19FVEhUT09MX0FfUE9SVF9DTlQgLSAxKVxuJiM0Mzt9O1xuJiM0MztcbiBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1VTRVJfTk9ORSA9IDAsXG4gXHRFVEhUT09MX01TR19TVFJTRVRfR0VUID0gMSxcbkBAIC04OTMsNiAmIzQzOzkxMCw3IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9BQ1QsXG4gXHRFVEhUT09MX01TR19SU1NfREVMRVRFX0FDVCxcbiBcdEVUSFRPT0xfTVNHX01TRV9HRVQsXG4mIzQzO1x0RVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4gXG4gXHRfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULFxuIFx0RVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpXG5AQCAtOTU0LDYgJiM0Mzs5NzIsNyBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfTlRGLFxuIFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9OVEYsXG4gXHRFVEhUT09MX01TR19NU0VfR0VUX1JFUExZLFxuJiM0MztcdEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLFxuIFxuIFx0X19FVEhUT09MX01TR19LRVJORUxfQ05ULFxuIFx0RVRIVE9PTF9NU0dfS0VSTkVMX01BWCA9IChfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQgLSAxKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IGMxYzFiZTFhNjk2MmYuLmIzNmNjNWM0NzgxNmEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xMTMxNSw2ICYjNDM7MTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXHUwMDI2XHUwMDI2IHRvcG8pIHtcbiBcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMpO1xuJiM0MztcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzKTtcbiBcdFx0a2ZyZWUodG9wbyk7XG4gXHRcdGRldi1cdTAwM2VsaW5rX3RvcG8gPSBOVUxMO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL01ha2VmaWxlIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbmluZGV4IDYyOWMxMDkxNjY3MGUuLjliNWIwOTY3MDAwODEgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbkBAIC05LDQgJiM0Mzs5LDQgQEAgZXRodG9vbF9ubC15XHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxuIFx0XHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxuIFx0XHQgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXFxcbiBcdFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxuLVx0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vXG4mIzQzO1x0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vIHBvcnQub1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuYyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xuaW5kZXggMWFmMzk1YjU0MzMwZS4uYzA3NmMwN2QwYTA4MCAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5AQCAtMjYsNiAmIzQzOzI2LDggQEAgc3RhdGljIHUzMiBldGhubF9iY2FzdF9zZXE7XG4gXHRcdFx0ICAgICBFVEhUT09MX0ZMQUdfT01JVF9SRVBMWSlcbiAjZGVmaW5lIEVUSFRPT0xfRkxBR1NfU1RBVFMgKEVUSFRPT0xfRkxBR1NfQkFTSUMgfCBFVEhUT09MX0ZMQUdfU1RBVFMpXG4gXG4mIzQzO2NoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dIF9fcm9fYWZ0ZXJfaW5pdDtcbiYjNDM7XG4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtdID0ge1xuIFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX05BTUVdXHQ9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyxcbkBAIC00MzEsNiAmIzQzOzQzMyw3IEBAIGV0aG5sX2RlZmF1bHRfcmVxdWVzdHNbX19FVEhUT09MX01TR19VU0VSX0NOVF0gPSB7XG4gXHRbRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUXVx0PSBcdTAwMjZldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcyxcbiBcdFtFVEhUT09MX01TR19QSFlfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX3BoeV9yZXF1ZXN0X29wcyxcbiBcdFtFVEhUT09MX01TR19NU0VfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX21zZV9yZXF1ZXN0X29wcyxcbiYjNDM7XHRbRVRIVE9PTF9NU0dfUE9SVF9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfcG9ydF9yZXF1ZXN0X29wcyxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5AQCAtMTU3Miw2ICYjNDM7MTU3NSwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIGV0aHRvb2xfZ2VubF9vcHNbXSA9IHtcbiBcdFx0LnBvbGljeSA9IGV0aG5sX21zZV9nZXRfcG9saWN5LFxuIFx0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfbXNlX2dldF9wb2xpY3kpIC0gMSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmNtZFx0PSBFVEhUT09MX01TR19QT1JUX0dFVCxcbiYjNDM7XHRcdC5kb2l0XHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcbiYjNDM7XHRcdC5zdGFydFx0PSBldGhubF9wb3J0X2R1bXBfc3RhcnQsXG4mIzQzO1x0XHQuZHVtcGl0XHQ9IGV0aG5sX3BvcnRfZHVtcGl0LFxuJiM0MztcdFx0LmRvbmVcdD0gZXRobmxfcG9ydF9kdW1wX2RvbmUsXG4mIzQzO1x0XHQucG9saWN5ID0gZXRobmxfcG9ydF9nZXRfcG9saWN5LFxuJiM0MztcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX3BvcnRfZ2V0X3BvbGljeSkgLSAxLFxuJiM0MztcdH0sXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGV0aHRvb2xfbmxfbWNncnBzW10gPSB7XG5AQCAtMTU5NCwxMCAmIzQzOzE2MDYsMjMgQEAgc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBldGh0b29sX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcbiAvKiBtb2R1bGUgc2V0dXAgKi9cbiBcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGV0aG5sX3BoeV9uYW1lc19wb3B1bGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUEhZX0lOVEVSRkFDRV9NT0RFX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG5hbWUgPSBwaHlfbW9kZXMoaSk7XG4mIzQzO1x0XHRzdHJzY3B5KHBoeV9pbnRlcmZhY2VfbmFtZXNbaV0sIG5hbWUsIEVUSF9HU1RSSU5HX0xFTik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19pbml0IGV0aG5sX2luaXQodm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGV0aG5sX3BoeV9uYW1lc19wb3B1bGF0ZSgpO1xuJiM0MztcbiBcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmV0aHRvb2xfZ2VubF9mYW1pbHkpO1xuIFx0aWYgKFdBUk4ocmV0IFx1MDAzYyAwLCBcJiMzNDtldGh0b29sOiBnZW5ldGxpbmsgZmFtaWx5IHJlZ2lzdHJhdGlvbiBmYWlsZWRcJiMzNDspKVxuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuaW5kZXggM2U5NjlhMDcwZjlmZS4uZGM3MjExZjY3YzRkNSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5AQCAtNSwxMSAmIzQzOzUsMTQgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuIFxuIHN0cnVjdCBldGhubF9yZXFfaW5mbztcbiBcbiYjNDM7ZXh0ZXJuIGNoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dO1xuJiM0MztcbiBpbnQgZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmVzdCwgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG5AQCAtNDc0LDYgJiM0Mzs0NzcsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcG9ydF9yZXF1ZXN0X29wcztcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5X3N0YXRzW0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07XG5AQCAtNTMwLDYgJiM0Mzs1MzQsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9IRUFERVIgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfc2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfTUFYICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9tc2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfTVNFX0hFQURFUiAmIzQzOyAxXTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BvcnRfZ2V0X3BvbGljeVtFVEhUT09MX0FfUE9SVF9JRCAmIzQzOyAxXTtcbiBcbiBpbnQgZXRobmxfc2V0X2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbkBAIC01NDUsNiAmIzQzOzU1MCw5IEBAIGludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4gaW50IGV0aG5sX3RzaW5mb19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4gaW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBpbnQgZXRobmxfcnNzX2RlbGV0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4mIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBcbiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19zdGRfbmFtZXNbX19FVEhUT09MX1NUQVRTX0NOVF1bRVRIX0dTVFJJTkdfTEVOXTtcbiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19ldGhfcGh5X25hbWVzW19fRVRIVE9PTF9BX1NUQVRTX0VUSF9QSFlfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BvcnQuYyBiL25ldC9ldGh0b29sL3BvcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmUxYmNhZGJmZTQwYzBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL3BvcnQuY1xuQEAgLTAsMCAmIzQzOzEsMzc1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IDIwMjYgQm9vdGxpblxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfcG9ydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtiaXRzZXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtuZXRsaW5rLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwb3J0X3JlcV9pbmZvIHtcbiYjNDM7XHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbiYjNDM7XHR1MzIgcG9ydF9pZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEge1xuJiM0MztcdHN0cnVjdCBldGhubF9yZXBseV9kYXRhXHRiYXNlO1xuJiM0MztcdF9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKHN1cHBvcnRlZCk7XG4mIzQzO1x0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soaW50ZXJmYWNlcyk7XG4mIzQzO1x0dTMyIHBvcnRfaWQ7XG4mIzQzO1x0Ym9vbCBtaWk7XG4mIzQzO1x0Ym9vbCBzZnA7XG4mIzQzO1x0dTMyIHVwc3RyZWFtX3BvcnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBPUlRfUkVRSU5GTyhfX3JlcV9iYXNlKSBcXFxuJiM0MztcdGNvbnRhaW5lcl9vZihfX3JlcV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXFfaW5mbywgYmFzZSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUE9SVF9SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcbiYjNDM7XHRjb250YWluZXJfb2YoX19yZXBseV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhLCBiYXNlKVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcG9ydF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QT1JUX0lEICYjNDM7IDFdID0ge1xuJiM0MztcdFtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXG4mIzQzO1x0W0VUSFRPT0xfQV9QT1JUX0lEXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X3BhcnNlX3JlcXVlc3Qoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRiLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4mIzQzO1xuJiM0MztcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEVUSFRPT0xfQV9QT1JUX0lEKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZXBvcnRfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUE9SVF9JRF0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhLFxuJiM0MztcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuJiM0MztcbiYjNDM7XHQvKiBSVE5MIG11c3QgYmUgaGVsZCB3aGlsZSBob2xkaW5nIGEgcmVmIHRvIHRoZSBwaHlfcG9ydC4gSGVyZSwgY2FsbGVyXG4mIzQzO1x0ICogaG9sZHMgUlROTC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwb3J0ID0gcGh5X2xpbmtfdG9wb19nZXRfcG9ydChyZXFfaW5mby1cdTAwM2VkZXYsIHJlcXVlc3QtXHUwMDNlcG9ydF9pZCk7XG4mIzQzO1x0aWYgKCFwb3J0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGxpbmttb2RlX2NvcHkocmVwbHktXHUwMDNlc3VwcG9ydGVkLCBwb3J0LVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV9jb3B5KHJlcGx5LVx1MDAzZWludGVyZmFjZXMsIHBvcnQtXHUwMDNlaW50ZXJmYWNlcyk7XG4mIzQzO1x0cmVwbHktXHUwMDNlcG9ydF9pZCA9IHBvcnQtXHUwMDNlaWQ7XG4mIzQzO1x0cmVwbHktXHUwMDNlbWlpID0gcG9ydC1cdTAwM2Vpc19taWk7XG4mIzQzO1x0cmVwbHktXHUwMDNlc2ZwID0gcG9ydC1cdTAwM2Vpc19zZnA7XG4mIzQzO1x0cmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA/IHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydC1cdTAwM2VpZCA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBvcnRfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSlcbiYjNDM7e1xuJiM0MztcdGJvb2wgY29tcGFjdCA9IHJlcV9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBFVEhUT09MX0ZMQUdfQ09NUEFDVF9CSVRTRVRTO1xuJiM0MztcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpO1xuJiM0MztcdHNpemVfdCBzaXplID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBFVEhUT09MX0FfUE9SVF9JRCAqL1xuJiM0MztcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXBseS1cdTAwM2VtaWkpIHtcbiYjNDM7XHRcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyAqL1xuJiM0MztcdFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXHUwMDNlc3VwcG9ydGVkLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0X19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLFxuJiM0MztcdFx0XHRcdFx0bGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyAqL1xuJiM0MztcdFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsXG4mIzQzO1x0XHRcdFx0XHRwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqL1xuJiM0MztcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbiYjNDM7XG4mIzQzO1x0LyogRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCAqL1xuJiM0MztcdGlmIChyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KVxuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNvbXBhY3QgPSByZXFfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRVRIVE9PTF9GTEFHX0NPTVBBQ1RfQklUU0VUUztcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcbiYjNDM7XHRpbnQgcmV0LCBwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9NREk7XG4mIzQzO1xuJiM0MztcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS1cdTAwM2Vwb3J0X2lkKSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdGlmICghcmVwbHktXHUwMDNlbWlpKSB7XG4mIzQzO1x0XHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxuJiM0MztcdFx0XHRcdCAgICAgICByZXBseS1cdTAwM2VzdXBwb3J0ZWQsIE5VTEwsXG4mIzQzO1x0XHRcdFx0ICAgICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IGV0aG5sX3B1dF9iaXRzZXQoc2tiLCBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyxcbiYjNDM7XHRcdFx0XHQgICAgICAgcmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbiYjNDM7XHRcdFx0XHQgICAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX01BWCxcbiYjNDM7XHRcdFx0XHQgICAgICAgcGh5X2ludGVyZmFjZV9uYW1lcywgY29tcGFjdCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJlcGx5LVx1MDAzZW1paSB8fCByZXBseS1cdTAwM2VzZnApXG4mIzQzO1x0XHRwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9TRlA7XG4mIzQzO1xuJiM0MztcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1RZUEUsIHBvcnRfdHlwZSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JULFxuJiM0MztcdFx0XHRyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcG9ydF9kdW1wX2N0eCB7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVxX2luZm9cdCpyZXFfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhXHQqcmVwbHlfZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGlmaW5kZXg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRwb3NfaWZpbmRleDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdHBvc19wb3J0aWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBvcnRfZHVtcF9jdHggKlxuJiM0Mztwb3J0X2R1bXBfY3R4X2dldChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBwb3J0X2R1bXBfY3R4ICopY2ItXHUwMDNlY3R4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XG4mIzQzO1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbiYjNDM7XHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWluZm8uYXR0cnM7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxX2luZm87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKHNpemVvZigqY3R4KSBcdTAwM2Ugc2l6ZW9mKGNiLVx1MDAzZWN0eCkpO1xuJiM0MztcbiYjNDM7XHRyZXFfaW5mbyA9IGt6YWxsb2Nfb2JqKCpyZXFfaW5mbyk7XG4mIzQzO1x0aWYgKCFyZXFfaW5mbylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xuJiM0MztcdGlmICghcmVwbHlfZGF0YSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9yZXFfaW5mbztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KFx1MDAyNnJlcV9pbmZvLVx1MDAzZWJhc2UsIHRiW0VUSFRPT0xfQV9QT1JUX0hFQURFUl0sXG4mIzQzO1x0XHRcdFx0XHQgZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuJiM0MztcdFx0XHRcdFx0IGluZm8tXHUwMDNlaW5mby5leHRhY2ssIGZhbHNlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBmcmVlX3JlcF9kYXRhO1xuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlaWZpbmRleCA9IDA7XG4mIzQzO1x0Y3R4LVx1MDAzZXBvc19pZmluZGV4ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogRm9yIGZpbHRlcmVkIERVTVAgcmVxdWVzdHMsIGxldCYjMzk7cyBqdXN0IHN0b3JlIHRoZSBpZmluZGV4LiBXZSYjMzk7bGwgY2hlY2tcbiYjNDM7XHQgKiBhZ2FpbiBpZiB0aGUgbmV0ZGV2IGlzIHN0aWxsIHRoZXJlIHdoZW4gbG9vcGluZyBvdmVyIHRoZSBuZXRkZXYgbGlzdFxuJiM0MztcdCAqIGluIHRoZSBEVU1QIGxvb3AuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2KSB7XG4mIzQzO1x0XHRjdHgtXHUwMDNlaWZpbmRleCA9IHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHRuZXRkZXZfcHV0KHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LCBcdTAwMjZyZXFfaW5mby1cdTAwM2ViYXNlLmRldl90cmFja2VyKTtcbiYjNDM7XHRcdHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VyZXFfaW5mbyA9IHJlcV9pbmZvO1xuJiM0MztcdGN0eC1cdTAwM2VyZXBseV9kYXRhID0gcmVwbHlfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmcmVlX3JlcF9kYXRhOlxuJiM0MztcdGtmcmVlKHJlcGx5X2RhdGEpO1xuJiM0MztmcmVlX3JlcV9pbmZvOlxuJiM0MztcdGtmcmVlKHJlcV9pbmZvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuJiM0MztcdHZvaWQgKmVoZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTtcbiYjNDM7XHRpZiAoIWVoZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoY3R4LVx1MDAzZXJlcGx5X2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhKSk7XG4mIzQzO1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBkZXY7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwb3J0X3ByZXBhcmVfZGF0YShcdTAwMjZjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZSwgXHUwMDI2Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZSxcbiYjNDM7XHRcdFx0XHRnZW5sX2luZm9fZHVtcChjYikpO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc2tiLCBkZXYsIEVUSFRPT0xfQV9QT1JUX0hFQURFUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwb3J0X2ZpbGxfcmVwbHkoc2tiLCBcdTAwMjZjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZSwgXHUwMDI2Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZSk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGdlbmxtc2dfZW5kKHNrYiwgZWhkcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcG9ydF9kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXYgPSBjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZS5kZXY7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZWxpbmtfdG9wbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR4YV9mb3JfZWFjaF9zdGFydChcdTAwMjZkZXYtXHUwMDNlbGlua190b3BvLVx1MDAzZXBvcnRzLCBjdHgtXHUwMDNlcG9zX3BvcnRpZCwgcG9ydCxcbiYjNDM7XHRcdFx0ICBjdHgtXHUwMDNlcG9zX3BvcnRpZCkge1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZXBvcnRfaWQgPSBjdHgtXHUwMDNlcG9zX3BvcnRpZDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwb3J0X2R1bXBfb25lKHNrYiwgZGV2LCBjYik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZXBvc19wb3J0aWQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4mIzQzO1x0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlcG9zX2lmaW5kZXgpIHtcbiYjNDM7XHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gZGV2O1xuJiM0MztcdFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xuJiM0MztcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChjdHgtXHUwMDNlaWZpbmRleCkge1xuJiM0MztcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcbiYjNDM7XHRcdGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuJiM0MztcdFx0XHRcdFx0ICBjdHgtXHUwMDNlaWZpbmRleCwgXHUwMDI2ZGV2X3RyYWNrZXIsXG4mIzQzO1x0XHRcdFx0XHQgIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFkZXYpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IGRldjtcbiYjNDM7XHRcdHJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpO1xuJiM0MztcbiYjNDM7XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IHBvcnRfZHVtcF9hbGxfZGV2KHNrYiwgY2IpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4mIzQzO1xuJiM0MztcdGtmcmVlKGN0eC1cdTAwM2VyZXFfaW5mbyk7XG4mIzQzO1x0a2ZyZWUoY3R4LVx1MDAzZXJlcGx5X2RhdGEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHMgPSB7XG4mIzQzO1x0LnJlcXVlc3RfY21kXHRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4mIzQzO1x0LnJlcGx5X2NtZFx0XHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLFxuJiM0MztcdC5oZHJfYXR0clx0XHQ9IEVUSFRPT0xfQV9QT1JUX0hFQURFUixcbiYjNDM7XHQucmVxX2luZm9fc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXFfaW5mbyksXG4mIzQzO1x0LnJlcGx5X2RhdGFfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHBvcnRfcmVwbHlfZGF0YSksXG4mIzQzO1xuJiM0MztcdC5wYXJzZV9yZXF1ZXN0XHRcdD0gcG9ydF9wYXJzZV9yZXF1ZXN0LFxuJiM0MztcdC5wcmVwYXJlX2RhdGFcdFx0PSBwb3J0X3ByZXBhcmVfZGF0YSxcbiYjNDM7XHQucmVwbHlfc2l6ZVx0XHQ9IHBvcnRfcmVwbHlfc2l6ZSxcbiYjNDM7XHQuZmlsbF9yZXBseVx0XHQ9IHBvcnRfZmlsbF9yZXBseSxcbiYjNDM7fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVRIVE9PTF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtQSFlMSU5LJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtJMkMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldGhubF9wb3J0X2R1bXBfc3RhcnQmIzM0OywKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1waXQmIzM0OywKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1wX2RvbmUmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb19hZGRfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfbGlua190b3BvX2RlbF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMmIzM0OywKICAgICYjMzQ7cGh5X3NldF91cHN0cmVhbV9wb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQgYFBPUlRfR0VUYCB0byByZXRyaWV2ZSBwaHlzaWNhbCBwb3J0IGluZm9ybWF0aW9uLCBhbmQgYWRkcyBTRlAgcG9ydCBzdXBwb3J0IHRvIHRoZSBQSFkgZnJhbWV3b3JrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBuZXRsaW5rIEFQSXMgYW5kIG1vZGlmaWVzIGNvcmUgUEhZL3BoeWxpbmsgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBldGh0b29sIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGFiZDUzOThjNTJjYTk4ODYwNjFlYjMwYTgxMjAyMDAyYWU2MmI0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTA6Mjk6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAppbmRleCA1ZGQ0ZDFiNWQ5NGJiLi42N2FjMzQwMDQ2MmJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwKQEAgLTIxMCw2ICYjNDM7MjEwLDExIEBAIGRlZmluaXRpb25zOgogICAgICAgLQogICAgICAgICBuYW1lOiBkaXNjYXJkCiAgICAgICAgIHZhbHVlOiAzMQomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBwb3J0LXR5cGUKJiM0MzsgICAgZG9jOiB0eXBlIG9mIHBoeXNpY2FsIGNvbm5lY3RvcgomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIGVudHJpZXM6IFttZGksIHNmcF0KIAogYXR0cmlidXRlLXNldHM6CiAgIC0KQEAgLTE5MDUsNiAmIzQzOzE5MTAsMzIgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIG5hbWU6IGxpbmsKICAgICAgICAgdHlwZTogbmVzdAogICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90CiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IHBvcnQKJiM0MzsgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnQKJiM0MzsgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBoZWFkZXIKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBpZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogc3VwcG9ydGVkLW1vZGVzCiYjNDM7ICAgICAgICB0eXBlOiBuZXN0CiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogc3VwcG9ydGVkLWludGVyZmFjZXMKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXQKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiB0eXBlCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGVudW06IHBvcnQtdHlwZQomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHVwc3RyZWFtLXBvcnQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgogCiBvcGVyYXRpb25zOgogICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbApAQCAtMjg1OSw2ICYjNDM7Mjg5MCwyOSBAQCBvcGVyYXRpb25zOgogICAgICAgICAgICAgLSB3b3JzdC1jaGFubmVsCiAgICAgICAgICAgICAtIGxpbmsKICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBwb3J0LWdldAomIzQzOyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZQomIzQzOwomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBvcnQKJiM0MzsKJiM0MzsgICAgICBkbzogJmFtcDtwb3J0LWdldC1vcAomIzQzOyAgICAgICAgcmVxdWVzdDoKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIGhlYWRlcgomIzQzOyAgICAgICAgICAgIC0gaWQKJiM0MzsgICAgICAgIHJlcGx5OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICAgICAgLSBpZAomIzQzOyAgICAgICAgICAgIC0gc3VwcG9ydGVkLW1vZGVzCiYjNDM7ICAgICAgICAgICAgLSBzdXBwb3J0ZWQtaW50ZXJmYWNlcwomIzQzOyAgICAgICAgICAgIC0gdHlwZQomIzQzOyAgICAgICAgICAgIC0gdXBzdHJlYW0tcG9ydAomIzQzOyAgICAgIGR1bXA6CiYjNDM7ICAgICAgICByZXF1ZXN0OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiAKIG1jYXN0LWdyb3VwczoKICAgbGlzdDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QKaW5kZXggZTkyYWJmNDVmYWY1MC4uYjQzMjZjODliMDc1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QKQEAgLTI1MzcsNiAmIzQzOzI1MzcsMzkgQEAgV2l0aGluIGVhY2ggY2hhbm5lbCBuZXN0LCBvbmx5IHRoZSBtZXRyaWNzIHN1cHBvcnRlZCBieSB0aGUgUEhZIHdpbGwgYmUgcHJlc2VudC4KIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW4KIGBgaW5jbHVkZS9saW51eC9waHkuaGBgLgogCiYjNDM7UE9SVF9HRVQKJiM0Mzs9PT09PT09PQomIzQzOwomIzQzO1JldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLAomIzQzO3JlZmVycmVkIHRvIGFzICYjMzQ7cG9ydHMmIzM0Oy4gVXNlciBuZWVkcyB0byBzcGVjaWZ5IGEgUE9SVF9JRCBmb3IgdGhlIERPIG9wZXJhdGlvbiwKJiM0MztpbiB3aGljaCBjYXNlIHRoZSBETyByZXF1ZXN0IHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBzcGVjaWZpYyBwb3J0LgomIzQzOwomIzQzO0FzIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIHBvcnQsIHRoZSBEVU1QIG9wZXJhdGlvbiBjYW4gYmUgdXNlZCB0byBsaXN0IHRoZQomIzQzO3BvcnRzIHByZXNlbnQgb24gYSBnaXZlbiBpbnRlcmZhY2UsIGJ5IHBhc3NpbmcgYW4gaW50ZXJmYWNlIGluZGV4IG9yIG5hbWUgaW4KJiM0Mzt0aGUgZHVtcCByZXF1ZXN0LgomIzQzOwomIzQzO1JlcXVlc3QgY29udGVudHM6CiYjNDM7CiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9IRUFERVJgYCAgICAgICAgICAgICBuZXN0ZWQgIHJlcXVlc3QgaGVhZGVyCiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX0lEYGAgICAgICAgICAgICAgICAgIHUzMiAgICAgcG9ydCBpZAomIzQzOyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztLZXJuZWwgcmVzcG9uc2UgY29udGVudHM6CiYjNDM7CiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9IRUFERVJgYCAgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXIKJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgICB1MzIgICAgIHRoZSBwb3J0JiMzOTtzIHVuaXF1ZSBpZGVudGlmaWVyLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyIG5ldGRldmljZS4KJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTYGAgICAgICBiaXRzZXQgIGJpdHNldCBvZiBzdXBwb3J0ZWQgbGlua21vZGVzCiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTYGAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIE1JSQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlcwomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9UWVBFYGAgICAgICAgICAgICAgICAgIHUzMiAgICAgdGhlIHBvcnQgdHlwZQomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUYGAgICAgICAgIHUzMiAgICAgSWYgYW55LCB0aGUgaW5kZXggb2YgdGhlIE1JSQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCB0aGF0IGZlZWRzIGludG8gdGhpcwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC4KJiM0MzsgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiBSZXF1ZXN0IHRyYW5zbGF0aW9uCiA9PT09PT09PT09PT09PT09PT09CiAKQEAgLTI2NDcsNCAmIzQzOzI2ODAsNSBAQCBhcmUgbmV0bGluayBvbmx5LgogICBuL2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1BIWV9HRVRgYAogICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgCiAgIGBgU0lPQ1NIV1RTVEFNUGBgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUYGAKJiM0MzsgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgYAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdAppbmRleCA2ZTI4ZDkwOTRiY2UzLi4yYTliMWVjOTNiNzBmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3QKQEAgLTk5LDEzICYjNDM7OTksMjkgQEAgd2lsbCBldmVudHVhbGx5IGJlIGFibGUgdG8gcmVwb3J0IGl0cyBvd24ga3NldHRpbmdzOjoKICAgICAgICAgICAgIChfX19fXyktLS0tLXwgUG9ydCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAmIzQzOy0tLS0tLSYjNDM7CiAKJiM0MztTRlAgcG9ydHMKJiM0Mzs9PT09PT09PT0KJiM0MzsKJiM0MztTRlAgaW50ZXJmYWNlcyBpbnZvbHZlIDIgZGlzdGluY3QgY29tcG9uZW50cywgZWFjaCByZXByZXNlbnRlZCBieQomIzQzO2EgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0ICZsdDtwaHlfcG9ydCZndDtgIGluc3RhbmNlIDoKJiM0MzsKJiM0MzsgLSBUaGUgU0ZQIGNhZ2UgaXRzZWxmIGlzIGEgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0ICZsdDtwaHlfcG9ydCZndDtgLiBJdCYjMzk7cyBzcGVjaWFsCiYjNDM7ICAgaW4gdGhhdCBpdCYjMzk7cyBub3QgYW4gTURJIGludGVyZmFjZSwgYnV0IHJhdGhlciBhIGhvdC1wbHVnZ2FibGUgTUlJLgomIzQzOyAgIFRoZSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgJmx0O3BoeV9wb3J0Jmd0O2AgYXNzb2NpYXRlZCB0byBpdCBsaXN0cyB0aGUgZGlmZmVyZW50CiYjNDM7ICAgTUlJIGludGVyZmFjZXMgd2UgY2FuIHVzZSBvbiB0aGUgY2FnZS4KJiM0MzsKJiM0MzsgLSBUaGUgU0ZQIG1vZHVsZSwgd2hlbiBpbnNlcnRlZCwgd2lsbCBhbHNvIGJlIGFzc29jaWF0ZWQgdG8gYQomIzQzOyAgIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCAmbHQ7cGh5X3BvcnQmZ3Q7YCwgdGhhdCByZXByZXNlbnRzIHRoZSB2YXJpb3VzIGxpbmttb2RlcwomIzQzOyAgIHRoYXQgaXQgZ2l2ZXMgYWNjZXNzIHRvLiBUaGUgbW9kdWxlJiMzOTtzIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCAmbHQ7cGh5X3BvcnQmZ3Q7YAomIzQzOyAgIGRvZXNuJiMzOTt0IHN1cGVyc2VkZSB0aGUgY2FnZSYjMzk7cyBwb3J0LCBpdCByZWZlcmVuY2VzIGl0IHRocm91Z2gKJiM0MzsgICB0aGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0ICZsdDtwaHlfcG9ydCZndDtgIDpjOm1lbWJlcjpgdXBzdHJlYW1fcG9ydGAgZmllbGQuCiYjNDM7CiBOZXh0IHN0ZXBzCiA9PT09PT09PT09CiAKLUFzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCBvbmx5IHBvcnRzIGNvbnRyb2xsZWQgYnkgUEhZIGRldmljZXMgYXJlCi1zdXBwb3J0ZWQuIFRoZSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gYWRkIHRoZSBOZXRsaW5rIEFQSSB0byBleHBvc2UgdGhlc2UKLXRvIHVzZXJzcGFjZSBhbmQgYWRkIHN1cHBvcnQgZm9yIHJhdyBwb3J0cyAoY29udHJvbGxlZCBieSBzb21lIGZpcm13YXJlLCBhbmQgZGlyZWN0bHkKLW1hbmFnZWQgYnkgdGhlIE5JQyBkcml2ZXIpLgomIzQzO0FzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCB0aGUgcG9ydCYjMzk7cyBwcmVzZW5jZSBhbmQgaW5mb3JtYXRpb24gY2FuIG9ubHkKJiM0MztiZSBxdWVyaWVkLCBhbmQgaXQmIzM5O3Mgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgb2YgdGhlIHBvcnQmIzM5O3Mgc2V0dGluZ3Mgb3Igc2VsZWN0CiYjNDM7d2hpY2ggb25lIHNob3VsZCBiZSB1c2VkLgogCiBBbm90aGVyIHBhcmFsbGVsIHRhc2sgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIE1JSSBtdXhpbmcgZnJhbWV3b3JrIHRvIGFsbG93IHRoZQotY29udHJvbCBvZiBub24tUEhZIGRyaXZlciBtdWx0aS1wb3J0IHNldHVwcy4KJiM0Mztjb250cm9sIG9mIG5vbi1QSFkgZHJpdmVuIG11bHRpLXBvcnQgc2V0dXBzLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA5MzJlYTFkYjA0OGU1Li4zOTVmOGI1ZDE4NDk1IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTg4MTYsNiAmIzQzOzE4ODE2LDcgQEAgRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ldGhlcm5ldC1jb25uZWN0b3IueWFtbAogRjoJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdAogRjoJZHJpdmVycy9uZXQvcGh5L3BoeV9wb3J0LmMKIEY6CWluY2x1ZGUvbGludXgvcGh5X3BvcnQuaAomIzQzO0Y6CW5ldC9ldGh0b29sL3BvcnQuYwogSzoJc3RydWN0XHMmIzQzO3BoeV9wb3J0fHBoeV9wb3J0XwogCiBORVRXT1JLSU5HIFtHRU5FUkFMXQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaAppbmRleCA0MjEwODhlNmY2ZThmLi5lYzNkMzlhMGFlMDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaApAQCAtNjYsNSAmIzQzOzY2LDcgQEAgdm9pZCBwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsCiAJCQkJICAgZW51bSBldGh0b29sX2xpbmtfbWVkaXVtIG1lZGl1bSwKIAkJCQkgICBpbnQgbGFuZXMpOwogdTMyIHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzKTsKJiM0Mzt2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sCiYjNDM7CQkJCSAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaW50ZXJmYWNlcyk7CiAKICNlbmRpZiAvKiBfX1BIWV9DQVBTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMKaW5kZXggOTQyZDQzMTkxNTYxZS4uNTU4ZTRkZjRkNjNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMKQEAgLTQ0NSwzICYjNDM7NDQ1LDI5IEBAIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcykKIAlyZXR1cm4gbWVkaXVtczsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXMpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMoKSAtIEZpbHRlciBsaW5rbW9kZXMgd2l0aCBhbiBpbnRlcmZhY2UgbGlzdAomIzQzOyAqIEB0bzogU3RvcmVzIHRoZSBmaWx0ZXJlZCBsaW5rbW9kZXMKJiM0MzsgKiBAZnJvbTogTGlua21vZGVzIHRvIGZpbHRlcgomIzQzOyAqIEBpbnRlcmZhY2VzOiBCaXRmaWVsZCBvZiBwaHlfaW50ZXJmYWNlX3QgdGhhdCB3ZSB1c2UgZm9yIGZpbHRlcmluZwomIzQzOyAqCiYjNDM7ICogRmlsdGVyIHRoZSBwcm92aWRlZCBsaW5rbW9kZXMsIG9ubHkgdG8ga2VlcCB0aGUgb25lcyB3ZSBjYW4gcG9zc2libHkgYWNoaWV2ZQomIzQzOyAqIHdoZW4gdXNpbmcgYW55IG9mIHRoZSBwcm92aWRlZCBNSUkgaW50ZXJmYWNlcy4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sCiYjNDM7CQkJCSAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSwKJiM0MzsJCQkJICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKQomIzQzO3sKJiM0MzsJX19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soaWZhY2VzX3N1cHBvcnRlZCkgPSB7fTsKJiM0MzsJdW5zaWduZWQgaW50IGlmYWNlc19jYXBzID0gMDsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfc2V0X2JpdChpbnRlcmZhY2UsIGludGVyZmFjZXMsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgpCiYjNDM7CQlpZmFjZXNfY2FwcyB8PSBwaHlfY2Fwc19mcm9tX2ludGVyZmFjZShpbnRlcmZhY2UpOwomIzQzOwomIzQzOwlwaHlfY2Fwc19saW5rbW9kZXMoaWZhY2VzX2NhcHMsIGlmYWNlc19zdXBwb3J0ZWQpOwomIzQzOwomIzQzOwlsaW5rbW9kZV9hbmQodG8sIGZyb20sIGlmYWNlc19zdXBwb3J0ZWQpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDk0YjJlODVlMDBhMzcuLjNkYTY4NzJlYmJiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMTQ5MCwxMSAmIzQzOzE0OTAsMjIgQEAgc3RhdGljIGludCBwaHlfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQogewogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LSZndDthdHRhY2hlZF9kZXY7CiYjNDM7CWludCByZXQ7CiAKLQlpZiAoZGV2KQotCQlyZXR1cm4gcGh5X2xpbmtfdG9wb19hZGRfcGh5KGRldiwgcGh5LCBQSFlfVVBTVFJFQU1fUEhZLCBwaHlkZXYpOwomIzQzOwlwaHlkZXYtJmd0O2hhc19zZnBfbW9kX3BoeSA9IHRydWU7CiYjNDM7CXBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIHBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydCk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJLyogSWYgd2UgYXJlbiYjMzk7dCBhdHRhY2hlZCB0byBhIG5ldGRldiwgd2UgY2FuJiMzOTt0IGFkZCB0aGUgU0ZQIFBIWSB0byBpdHMKJiM0MzsJICogdG9wb2xvZ3kuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRldikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlwaHlkZXYtJmd0O2hhc19zZnBfbW9kX3BoeSA9IGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTE1MTIsOCAmIzQzOzE1MjMsMTIgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSkKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2OwogCiYjNDM7CXBoeWRldi0mZ3Q7aGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7CiYjNDM7CiAJaWYgKGRldikKIAkJcGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTsKJiM0MzsKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgTlVMTCk7CiB9CiAKIC8qKgpAQCAtMTYxNyw2ICYjNDM7MTYzMiw3NyBAQCBzdGF0aWMgdm9pZCBwaHlfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSkKIAkJcG9ydC0mZ3Q7b3BzLSZndDtsaW5rX2Rvd24ocG9ydCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBoeV9hZGRfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzOwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwkvKiBDcmVhdGUgbW9kIHBvcnQgKi8KJiM0MzsJcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7CiYjNDM7CWlmICghcG9ydCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwb3J0LSZndDthY3RpdmUgPSB0cnVlOwomIzQzOwomIzQzOwljYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwaHlkZXYtJmd0O3NmcF9idXMpOwomIzQzOwomIzQzOwlwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHBvcnQtJmd0O3N1cHBvcnRlZCwgY2Fwcy0mZ3Q7bGlua19tb2RlcywKJiM0MzsJCQkJCXBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydC0mZ3Q7aW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2F0dGFjaGVkX2RldikgewomIzQzOwkJcmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiwgcG9ydCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcGh5X3BvcnRfZGVzdHJveShwb3J0KTsKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHdlIGRvbiYjMzk7dCB1c2UgcGh5X2FkZF9wb3J0KCkgaGVyZSBhcyB0aGUgbW9kdWxlIHBvcnQgaXNuJiMzOTt0IGEgZGlyZWN0CiYjNDM7CSAqIGludGVyZmFjZSBmcm9tIHRoZSBQSFksIGJ1dCByYXRoZXIgYW4gZXh0ZW5zaW9uIHRvIHRoZSBzZnAtYnVzLCB0aGF0CiYjNDM7CSAqIGlzIGFscmVhZHkgcmVwcmVzZW50ZWQgYnkgaXRzIG93biBwaHlfcG9ydAomIzQzOwkgKi8KJiM0MzsJcGh5ZGV2LSZndDttb2RfcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXBvcnQtJmd0O3Vwc3RyZWFtX3BvcnQgPSBwaHlkZXYtJmd0O3NmcF9jYWdlX3BvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwaHlfZGVsX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaWYgKCFwaHlkZXYtJmd0O21vZF9wb3J0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDthdHRhY2hlZF9kZXYpCiYjNDM7CQlwaHlfbGlua190b3BvX2RlbF9wb3J0KHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LCBwaHlkZXYtJmd0O21vZF9wb3J0KTsKJiM0MzsKJiM0MzsJcGh5X3BvcnRfZGVzdHJveShwaHlkZXYtJmd0O21vZF9wb3J0KTsKJiM0MzsJcGh5ZGV2LSZndDttb2RfcG9ydCA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGh5X3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07CiYjNDM7CiYjNDM7CS8qIElmIHRoZXJlJiMzOTtzIGEgZG93bnN0cmVhbSBTRlAgbW9kdWxlLCBhbmQgaXQgZG9lc24mIzM5O3QgY29udGFpbiBhIFBIWQomIzQzOwkgKiBkZXZpY2UsIGxldCYjMzk7cyBjcmVhdGUgYSBwaHlfcG9ydCB0byByZXByZXNlbnQgdGhhdCBtb2R1bGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXBoeWRldi0mZ3Q7aGFzX3NmcF9tb2RfcGh5KQomIzQzOwkJcmV0dXJuIHBoeV9hZGRfc2ZwX21vZF9wb3J0KHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwaHlfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtOwomIzQzOwomIzQzOwkvKiBDYWxsZWQgdXBvbiBtb2R1bGUgcmVtb3ZhbCBvciB1cHN0cmVhbSByZW1vdmFsICovCiYjNDM7CWlmICghcGh5ZGV2LSZndDtoYXNfc2ZwX21vZF9waHkpCiYjNDM7CQlwaHlfZGVsX3NmcF9tb2RfcG9ydChwaHlkZXYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHsKIAkuYXR0YWNoID0gcGh5X3NmcF9hdHRhY2gsCiAJLmRldGFjaCA9IHBoeV9zZnBfZGV0YWNoLApAQCAtMTYyNiw2ICYjNDM7MTcxMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHsKIAkubGlua19kb3duID0gcGh5X3NmcF9saW5rX2Rvd24sCiAJLmNvbm5lY3RfcGh5ID0gcGh5X3NmcF9jb25uZWN0X3BoeSwKIAkuZGlzY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Rpc2Nvbm5lY3RfcGh5LAomIzQzOwkubW9kdWxlX3N0YXJ0ID0gcGh5X3NmcF9tb2R1bGVfc3RhcnQsCiYjNDM7CS5tb2R1bGVfc3RvcCA9IHBoeV9zZnBfbW9kdWxlX3N0b3AsCiB9OwogCiBzdGF0aWMgaW50IHBoeV9hZGRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpCkBAIC0xNjczLDEzICYjNDM7MTc2MSwxMyBAQCBzdGF0aWMgdm9pZCBwaHlfZGVsX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KQogCXBoeWRldi0mZ3Q7bl9wb3J0cy0tOwogfQogCi1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewogCXN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7CiAJaW50IHJldDsKIAogCWlmICghcG9ydCkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCXBvcnQtJmd0O3BhcmVudF90eXBlID0gUEhZX1BPUlRfUEhZOwogCXBvcnQtJmd0O3BoeSA9IHBoeWRldjsKQEAgLTE2OTQsMTAgJiM0MzsxNzgyLDEyIEBAIHN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJICogd2hlbiBhdHRhY2hpbmcgdGhlIHBvcnQgdG8gdGhlIHBoeWRldi4KIAkgKi8KIAlyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTsKLQlpZiAocmV0KQomIzQzOwlpZiAocmV0KSB7CiAJCXBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gcG9ydDsKIH0KIAogLyoqCkBAIC0xNzA2LDI1ICYjNDM7MTc5Niw1MCBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogICovCiBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gTlVMTDsKIAlzdHJ1Y3Qgc2ZwX2J1cyAqYnVzOwotCWludCByZXQgPSAwOwomIzQzOwlpbnQgcmV0OwogCi0JaWYgKHBoeWRldi0mZ3Q7bWRpby5kZXYuZndub2RlKSB7Ci0JCWJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LSZndDttZGlvLmRldi5md25vZGUpOwotCQlpZiAoSVNfRVJSKGJ1cykpCi0JCQlyZXR1cm4gUFRSX0VSUihidXMpOwomIzQzOwlpZiAoIXBoeWRldi0mZ3Q7bWRpby5kZXYuZndub2RlKQomIzQzOwkJcmV0dXJuIDA7CiAKLQkJcGh5ZGV2LSZndDtzZnBfYnVzID0gYnVzOwomIzQzOwlidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi0mZ3Q7bWRpby5kZXYuZndub2RlKTsKJiM0MzsJaWYgKElTX0VSUihidXMpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoYnVzKTsKIAotCQlyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgJmFtcDtzZnBfcGh5ZGV2X29wcyk7Ci0JCXNmcF9idXNfcHV0KGJ1cyk7CiYjNDM7CXBoeWRldi0mZ3Q7c2ZwX2J1cyA9IGJ1czsKIAotCQlpZiAocmV0KQotCQkJcGh5ZGV2LSZndDtzZnBfYnVzID0gTlVMTDsKJiM0MzsJaWYgKGJ1cykgewomIzQzOwkJcG9ydCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpOwomIzQzOwkJaWYgKElTX0VSUihwb3J0KSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIocG9ydCk7CiYjNDM7CQkJcG9ydCA9IE5VTEw7CiYjNDM7CQkJZ290byBvdXRfc2ZwOwomIzQzOwkJfQogCX0KIAotCWlmICghcmV0ICZhbXA7JmFtcDsgcGh5ZGV2LSZndDtzZnBfYnVzKQotCQlyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTsKJiM0MzsJcGh5ZGV2LSZndDtzZnBfY2FnZV9wb3J0ID0gcG9ydDsKJiM0MzsKJiM0MzsJcmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsICZhbXA7c2ZwX3BoeWRldl9vcHMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG9ydDsKJiM0MzsKJiM0MzsJLyogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSBncmFicyBhIHJlZiB0byB0aGUgc2ZwIGJ1cyBvbiBzdWNjZXNzLCBpdCYjMzk7cwomIzQzOwkgKiBzYWZlIHRvIHJlbGVhc2UgaXQgbm93LgomIzQzOwkgKi8KJiM0MzsJc2ZwX2J1c19wdXQoYnVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MzsKJiM0MztvdXRfcG9ydDoKJiM0MzsJaWYgKHBvcnQpIHsKJiM0MzsJCXBoeV9kZWxfcG9ydChwaHlkZXYsIHBvcnQpOwomIzQzOwkJcGh5X3BvcnRfZGVzdHJveShwb3J0KTsKJiM0MzsJCXBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydCA9IE5VTEw7CiYjNDM7CX0KJiM0MztvdXRfc2ZwOgomIzQzOwlzZnBfYnVzX3B1dChidXMpOwomIzQzOwlwaHlkZXYtJmd0O3NmcF9idXMgPSBOVUxMOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MTUsNiAmIzQzOzE5MzAsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJCWVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeWRldiwgUEhZX1VQU1RSRUFNX01BQywgZGV2KTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDttb2RfcG9ydCkgewomIzQzOwkJCWVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoZGV2LCBwaHlkZXYtJmd0O21vZF9wb3J0KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIGVycm9yOwomIzQzOwkJfQogCX0KIAogCS8qIFNvbWUgRXRoZXJuZXQgZHJpdmVycyB0cnkgdG8gY29ubmVjdCB0byBhIFBIWSBkZXZpY2UgYmVmb3JlCkBAIC0xOTUxLDYgJiM0MzsyMDcyLDggQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LSZndDtwaHlkZXYgPSBOVUxMOwogCQlwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiA9IE5VTEw7CiAJCXBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDttb2RfcG9ydCkKJiM0MzsJCQlwaHlfbGlua190b3BvX2RlbF9wb3J0KGRldiwgcGh5ZGV2LSZndDttb2RfcG9ydCk7CiAJfQogCiAJcGh5ZGV2LSZndDtwaHlfbGlua19jaGFuZ2UgPSBOVUxMOwpAQCAtMzYwNCw2ICYjNDM7MzcyNywyNSBAQCBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfc2ZwX3BvcnQpOwogCiYjNDM7LyoqCiYjNDM7ICogcGh5X3NldF91cHN0cmVhbV9wb3J0KCkgLSBTZXRzIHRoZSBwaHlfcG9ydCBjb250cm9sbGluZyB0aGUgTUlJIHRoaXMgUEhZIGlzCiYjNDM7ICoJCQkgICAgIGF0dGFjaGVkIHRvLgomIzQzOyAqIEBwaHlkZXY6IHBvaW50ZXIgdG8gdGhlIFBIWSBkZXZpY2Ugd2Ugc2V0IHRoZSB1cHN0cmVhbSBvZi4KJiM0MzsgKiBAcG9ydDogVGhlIHBoeV9wb3J0IHVwc3RyZWFtIG9mIHRoaXMgUEhZLCBjYW4gYmUgTlVMTC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7dXBzdHJlYW1fcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXBoeV9mb3JfZWFjaF9wb3J0KHBoeWRldiwgbG9jYWxfcG9ydCkKJiM0MzsJCWxvY2FsX3BvcnQtJmd0O3Vwc3RyZWFtX3BvcnQgPSBwb3J0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfc2V0X3Vwc3RyZWFtX3BvcnQpOwomIzQzOwogLyoqCiAgKiBmd25vZGVfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZndub2RlLCBmaW5kIHRoZSBtZGlvX2RldmljZQogICogQGZ3bm9kZTogcG9pbnRlciB0byB0aGUgbWRpb19kZXZpY2UmIzM5O3MgZndub2RlCkBAIC0zODQyLDYgJiM0MzszOTg0LDcgQEAgc3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIAogCXNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi0mZ3Q7c2ZwX2J1cyk7CiAJcGh5ZGV2LSZndDtzZnBfYnVzID0gTlVMTDsKJiM0MzsJcGh5ZGV2LSZndDtzZnBfY2FnZV9wb3J0ID0gTlVMTDsKIAogCXBoeV9jbGVhbnVwX3BvcnRzKHBoeWRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMKaW5kZXggNDEzNGRlN2FlMzEzZC4uNjcxMGExOTk5NjdhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMKQEAgLTcsNiAmIzQzOzcsNyBAQAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9waHlfbGlua190b3BvbG9neS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHlfcG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwpAQCAtMjMsMTcgJiM0MzsyNCw4OSBAQCBzdGF0aWMgaW50IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXhhX2luaXRfZmxhZ3MoJmFtcDt0b3BvLSZndDtwaHlzLCBYQV9GTEFHU19BTExPQzEpOwogCXRvcG8tJmd0O25leHRfcGh5X2luZGV4ID0gMTsKIAomIzQzOwl4YV9pbml0X2ZsYWdzKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIFhBX0ZMQUdTX0FMTE9DMSk7CiYjNDM7CXRvcG8tJmd0O25leHRfcG9ydF9pbmRleCA9IDE7CiYjNDM7CiAJZGV2LSZndDtsaW5rX3RvcG8gPSB0b3BvOwogCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICpwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7bGlua190b3BvKQomIzQzOwkJcmV0dXJuIGRldi0mZ3Q7bGlua190b3BvOwomIzQzOwomIzQzOwkvKiBUaGUgdG9wb2xvZ3kgaXMgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIHdlIGFkZCBhbiBvYmplY3QgdG8gaXQuCiYjNDM7CSAqIEl0IGlzIGZyZWVkIGFsb25nc2lkZSB0aGUgbmV0ZGV2LiBJdCBjYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlCiYjNDM7CSAqIGNvbnRleHRzOgomIzQzOwkgKiAgLSBJdCBjYW4gYmUgY2FsbGVkIGZyb20gLnByb2JlKCkgOiBObyBydG5sLCBubyBuZXRkZXZfbG9jawomIzQzOwkgKiAgLSAubmRvX29wZW4oKSA6IHJ0bmwgYW5kIHBvc3NpYmx5IG5ldGRldl9sb2NrCiYjNDM7CSAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdAomIzQzOwkgKgomIzQzOwkgKiAgSG93ZXZlciwgd2UgY2FuJiMzOTt0IHJlYWxseSBoYXZlIHJhY2VzIDoKJiM0MzsJICogIC0gSWYgd2UgaGF2ZSBhIFBIWSwgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkgd2lsbCBhbHdheXMgcnVuIGZpcnN0CiYjNDM7CSAqICAgIGFuZCB0cmlnZ2VyIHRoZSBhbGxvYy4gT25seSB0aGVuIHRoZSBwb3J0cyBjYW4gYmUgYWRkZWQgdGhyb3VnaAomIzQzOwkgKiAgICBwaHlsaWIgb2Ygc2ZwLgomIzQzOwkgKiAgLSBJZiB3ZSBkb24mIzM5O3QsIHRoZSBTRlAgcG9ydCBmb3IgdGhlIGNhZ2UgaXMgcmVnaXN0ZXJlZCBmaXJzdCwgYW5kCiYjNDM7CSAqICAgIG9ubHkgdGhlbiBvdGhlciBwb3J0cy9QSFlzIGNhbiBiZSByZWdpc3RlcmVkLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2LSZndDtsaW5rX3RvcG87CiYjNDM7fQomIzQzOwomIzQzO2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogUG9ydHMgY2FuIG5vdyBiZSBxdWVyaWVkIHdpdGhvdXQgcnRubCBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLCB3aGljaAomIzQzOwkgKiB3ZSBkb24mIzM5O3Qgc3VwcG9ydCBub3cgYXMgcG9ydCByZXRyaWV2YWwgaXMgZG9uZSB1bmRlciBydG5sLgomIzQzOwkgKiBXZSBkb24mIzM5O3QgaGF2ZSBwaHlfcG9ydCBlbmFibGVkIGRldmljZXMgeWV0LCBsZXQmIzM5O3MgbWFrZSBzdXJlCiYjNDM7CSAqIHdlIGFyZSBsb3VkbHkgd2FybmVkIGFib3V0IHRoYXQgd2hlbiBpdCBoYXBwZW5zLgomIzQzOwkgKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRShuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJdG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7CiYjNDM7CWlmIChJU19FUlIodG9wbykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUih0b3BvKTsKJiM0MzsKJiM0MzsJLyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovCiYjNDM7CWlmIChwb3J0LSZndDtpZCkKJiM0MzsJCXJldCA9IHhhX2luc2VydCgmYW1wO3RvcG8tJmd0O3BvcnRzLCBwb3J0LSZndDtpZCwgcG9ydCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IHhhX2FsbG9jX2N5Y2xpYygmYW1wO3RvcG8tJmd0O3BvcnRzLCAmYW1wO3BvcnQtJmd0O2lkLCBwb3J0LAomIzQzOwkJCQkgICAgICB4YV9saW1pdF8zMmIsICZhbXA7dG9wby0mZ3Q7bmV4dF9wb3J0X2luZGV4LAomIzQzOwkJCQkgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19hZGRfcG9ydCk7CiYjNDM7CiYjNDM7dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi0mZ3Q7bGlua190b3BvOwomIzQzOwomIzQzOwlpZiAoIXRvcG8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIHBvcnQtJmd0O2lkKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19kZWxfcG9ydCk7CiYjNDM7CiBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksCiAJCQkgIGVudW0gcGh5X3Vwc3RyZWFtIHVwdCwgdm9pZCAqdXBzdHJlYW0pCiB7Ci0Jc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LSZndDtsaW5rX3RvcG87CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbzsKIAlzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKIAlpbnQgcmV0OwogCiAJLyogZXRodG9vbCBvcHMgbWF5IHJ1biB3aXRob3V0IHJ0bmxfbG9jaywgYW5kIHJ0bmxfbG9jayBpcyB3aGF0CkBAIC00NSwxMyAmIzQzOzExOCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIXRvcG8pIHsKLQkJcmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXRvcG8gPSBkZXYtJmd0O2xpbmtfdG9wbzsKLQl9CiYjNDM7CXRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHRvcG8pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIodG9wbyk7CiAKIAlwZG4gPSBremFsbG9jX29iaigqcGRuKTsKIAlpZiAoIXBkbikKQEAgLTg2LDggJiM0MzsxNTUsMjAgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycjsKIAomIzQzOwkvKiBBZGQgYWxsIHRoZSBQSFkmIzM5O3MgcG9ydHMgdG8gdGhlIHRvcG9sb2d5ICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwaHktJmd0O3BvcnRzLCBoZWFkKSB7CiYjNDM7CQlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KGRldiwgcG9ydCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZGVsX3BvcnRzOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiAKJiM0MztkZWxfcG9ydHM6CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShwb3J0LCAmYW1wO3BoeS0mZ3Q7cG9ydHMsIGhlYWQpCiYjNDM7CQlwaHlfbGlua190b3BvX2RlbF9wb3J0KGRldiwgcG9ydCk7CiYjNDM7CiYjNDM7CXhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cGh5cywgcGh5LSZndDtwaHlpbmRleCk7CiBlcnI6CiAJa2ZyZWUocGRuKTsKIAlyZXR1cm4gcmV0OwpAQCAtOTksMTAgJiM0MzsxODAsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIAlzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtJmd0O2xpbmtfdG9wbzsKIAlzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKIAogCWlmICghdG9wbykKIAkJcmV0dXJuOwogCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwaHktJmd0O3BvcnRzLCBoZWFkKQomIzQzOwkJcGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpOwomIzQzOwogCXBkbiA9IHhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cGh5cywgcGh5LSZndDtwaHlpbmRleCk7CiAKIAkvKiBXZSBkZWxldGUgdGhlIFBIWSBmcm9tIHRoZSB0b3BvbG9neSwgaG93ZXZlciB3ZSBkb24mIzM5O3QgcmUtc2V0IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKaW5kZXggZjQwYWNjMGQ0MTMzOC4uYTVmMDI1MTg3YWZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCkBAIC0xNCw2ICYjNDM7MTQsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L29mX21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHlfZml4ZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5X3BvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHlsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKQEAgLTkzLDYgJiM0Mzs5NSw4IEBAIHN0cnVjdCBwaHlsaW5rIHsKIAlERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhzZnBfaW50ZXJmYWNlcyk7CiAJX19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc2ZwX3N1cHBvcnQpOwogCXU4IHNmcF9wb3J0OwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqbW9kX3BvcnQ7CiAKIAlzdHJ1Y3QgZWVlX2NvbmZpZyBlZWVfY2ZnOwogCkBAIC0xNzY0LDYgJiM0MzsxNzY4LDUxIEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfZml4ZWRfcG9sbChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHNmcF9waHlsaW5rX29wczsKIAomIzQzO3N0YXRpYyBpbnQgcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBsLSZndDtuZXRkZXYgfHwgIXBsLSZndDtzZnBfYnVzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXBvcnQgPSBwaHlfcG9ydF9hbGxvYygpOwomIzQzOwlpZiAoIXBvcnQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcG9ydC0mZ3Q7aXNfc2ZwID0gdHJ1ZTsKJiM0MzsJcG9ydC0mZ3Q7aXNfbWlpID0gdHJ1ZTsKJiM0MzsJcG9ydC0mZ3Q7YWN0aXZlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcGh5X2ludGVyZmFjZV9hbmQocG9ydC0mZ3Q7aW50ZXJmYWNlcywgcGwtJmd0O2NvbmZpZy0mZ3Q7c3VwcG9ydGVkX2ludGVyZmFjZXMsCiYjNDM7CQkJICBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzKTsKJiM0MzsJcGh5X3BvcnRfdXBkYXRlX3N1cHBvcnRlZChwb3J0KTsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC0mZ3Q7bmV0ZGV2LCBwb3J0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3lfcG9ydDsKJiM0MzsKJiM0MzsJcGwtJmd0O3NmcF9jYWdlX3BvcnQgPSBwb3J0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfZGVzdHJveV9wb3J0OgomIzQzOwlwaHlfcG9ydF9kZXN0cm95KHBvcnQpOwomIzQzOwlwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydCA9IE5VTEw7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbCkKJiM0Mzt7CiYjNDM7CWlmIChwbC0mZ3Q7bmV0ZGV2ICZhbXA7JmFtcDsgcGwtJmd0O3NmcF9jYWdlX3BvcnQpCiYjNDM7CQlwaHlfbGlua190b3BvX2RlbF9wb3J0KHBsLSZndDtuZXRkZXYsIHBsLSZndDtzZnBfY2FnZV9wb3J0KTsKJiM0MzsKJiM0MzsJaWYgKHBsLSZndDtzZnBfY2FnZV9wb3J0KQomIzQzOwkJcGh5X3BvcnRfZGVzdHJveShwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydCk7CiYjNDM7CiYjNDM7CXBsLSZndDtzZnBfY2FnZV9wb3J0ID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCwKIAkJCQljb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQogewpAQCAtMTc4MSw5ICYjNDM7MTgzMCwxOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCwKIAogCXBsLSZndDtzZnBfYnVzID0gYnVzOwogCiYjNDM7CXJldCA9IHBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnQocGwpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlzZnBfYnVzX3B1dChidXMpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwogCXJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGwsICZhbXA7c2ZwX3BoeWxpbmtfb3BzKTsKIAlzZnBfYnVzX3B1dChidXMpOwogCiYjNDM7CWlmIChyZXQpCiYjNDM7CQlwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChwbCk7CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTk0Niw2ICYjNDM7MjAwNCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY3JlYXRlKTsKIHZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbCkKIHsKIAlzZnBfYnVzX2RlbF91cHN0cmVhbShwbC0mZ3Q7c2ZwX2J1cyk7CiYjNDM7CXBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHBsKTsKIAlpZiAocGwtJmd0O2xpbmtfZ3BpbykKIAkJZ3Bpb2RfcHV0KHBsLSZndDtsaW5rX2dwaW8pOwogCkBAIC0zODcxLDE0ICYjNDM7MzkzMCw2NyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfcmVtb3ZlKHZvaWQgKnVwc3RyZWFtKQogCXBoeV9pbnRlcmZhY2VfemVybyhwbC0mZ3Q7c2ZwX2ludGVyZmFjZXMpOwogfQogCiYjNDM7c3RhdGljIGludCBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHNmcF9tb2R1bGVfY2FwcyAqY2FwczsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICpwb3J0OwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBDcmVhdGUgbW9kIHBvcnQgKi8KJiM0MzsJcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7CiYjNDM7CWlmICghcG9ydCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwb3J0LSZndDthY3RpdmUgPSB0cnVlOwomIzQzOwomIzQzOwljYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwbC0mZ3Q7c2ZwX2J1cyk7CiYjNDM7CiYjNDM7CXBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC0mZ3Q7c3VwcG9ydGVkLCBjYXBzLSZndDtsaW5rX21vZGVzLAomIzQzOwkJCQkJcGwtJmd0O3NmcF9jYWdlX3BvcnQtJmd0O2ludGVyZmFjZXMpOwomIzQzOwomIzQzOwlpZiAocGwtJmd0O25ldGRldikgewomIzQzOwkJcmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC0mZ3Q7bmV0ZGV2LCBwb3J0KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwaHlfcG9ydF9kZXN0cm95KHBvcnQpOwomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcG9ydC0mZ3Q7dXBzdHJlYW1fcG9ydCA9IHBsLSZndDtzZnBfY2FnZV9wb3J0OwomIzQzOwomIzQzOwlwbC0mZ3Q7bW9kX3BvcnQgPSBwb3J0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbCkKJiM0Mzt7CiYjNDM7CWlmICghcGwtJmd0O21vZF9wb3J0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocGwtJmd0O25ldGRldikKJiM0MzsJCXBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtJmd0O25ldGRldiwgcGwtJmd0O21vZF9wb3J0KTsKJiM0MzsKJiM0MzsJcGh5X3BvcnRfZGVzdHJveShwbC0mZ3Q7bW9kX3BvcnQpOwomIzQzOwlwbC0mZ3Q7bW9kX3BvcnQgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKQogewogCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOwomIzQzOwlpbnQgcmV0OwogCiAJLyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RhcnQgdGhlIFBIWSBub3cuICovCiAJaWYgKHBsLSZndDtwaHlkZXYpIHsKIAkJcGh5X3N0YXJ0KHBsLSZndDtwaHlkZXYpOwogCQlyZXR1cm4gMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydChwbCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiAJfQogCiAJLyogSWYgdGhlIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWSBidXQgd2UgZGlkbiYjMzk7dCBkZXRlY3Qgb25lIHdlCkBAIC0zODg3LDcgJiM0MzszOTk5LDE2IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKQogCWlmICghcGwtJmd0O3NmcF9tYXlfaGF2ZV9waHkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTsKJiM0MzsJcmV0ID0gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBkZWxfbW9kX3BvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2RlbF9tb2RfcG9ydDoKJiM0MzsJcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pCkBAIC0zODk3LDYgJiM0Mzs0MDE4LDggQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pCiAJLyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi8KIAlpZiAocGwtJmd0O3BoeWRldikKIAkJcGh5X3N0b3AocGwtJmd0O3BoeWRldik7CiYjNDM7CWVsc2UKJiM0MzsJCXBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChwbCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSkKQEAgLTM5NDEsNiAmIzQzOzQwNjQsOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQogCXBoeV9pbnRlcmZhY2VfYW5kKHBoeS0mZ3Q7aG9zdF9pbnRlcmZhY2VzLCBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzLAogCQkJICBwbC0mZ3Q7Y29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiAKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGwtJmd0O3NmcF9jYWdlX3BvcnQpOwomIzQzOwogCS8qIERvIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gKi8KIAlyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX3BoeShwbCwgcGh5KTsKIH0KQEAgLTM5NDksNiAmIzQzOzQwNzQsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwKIAkJCQkgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHVwc3RyZWFtKTsKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeWRldiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHMgPSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAxMTA5MmMzMTc1YjNkLi43NDFjYTdhMGEyNTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTU4Miw2ICYjNDM7NTgyLDcgQEAgc3RydWN0IHBoeV9vYXRjMTRfc3FpX2NhcGFiaWxpdHkgewogICogQHdvbF9lbmFibGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGUgUEhZIG9yIHRoZSBhdHRhY2hlZCBNQUMgaGF2ZSBXYWtlLW9uLUxBTgogICogCQkgZW5hYmxlZC4KICAqIEBpc19nZW5waHlfZHJpdmVuOiBQSFkgaXMgZHJpdmVuIGJ5IG9uZSBvZiB0aGUgZ2VuZXJpYyBQSFkgZHJpdmVycwomIzQzOyAqIEBoYXNfc2ZwX21vZF9waHk6IFNldCB0cnVlIGlmIGRvd25zdHJlYW0gU0ZQIGJ1cyYjMzk7cyBtb2R1bGUgY29udGFpbnMgYSBQSFkKICAqIEBzdGF0ZTogU3RhdGUgb2YgdGhlIFBIWSBmb3IgbWFuYWdlbWVudCBwdXJwb3NlcwogICogQGRldl9mbGFnczogRGV2aWNlLXNwZWNpZmljIGZsYWdzIHVzZWQgYnkgdGhlIFBIWSBkcml2ZXIuCiAgKgpAQCAtNTk0LDYgJiM0Mzs1OTUsOSBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7CiAgKiBAcGh5bGluazogUG9pbnRlciB0byBwaHlsaW5rIGluc3RhbmNlIGZvciB0aGlzIFBIWQogICogQHNmcF9idXNfYXR0YWNoZWQ6IEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBTRlAgYnVzIGhhcyBiZWVuIGF0dGFjaGVkCiAgKiBAc2ZwX2J1czogU0ZQIGJ1cyBhdHRhY2hlZCB0byB0aGlzIFBIWSYjMzk7cyBmaWJlciBwb3J0CiYjNDM7ICogQHNmcF9jYWdlX3BvcnQ6IFRoZSBwaHlfcG9ydCBjb25uZWN0ZWQgdG8gdGhlIGRvd25zdHJlYW0gU0ZQIGNhZ2UKJiM0MzsgKiBAbW9kX3BvcnQ6IHBoeV9wb3J0IHJlcHJlc2VudGluZyB0aGUgU0ZQIG1vZHVsZSwgaWYgaXQgaXMgcGh5LWxlc3MKJiM0MzsgKiBAdXBzdHJlYW1fcG9ydDogcGh5X3BvcnQgdGhpcyBQSFkmIzM5O3MgTUlJIGF0dGFjaGVzIHRvLCBpZiBhbnkKICAqIEBhdHRhY2hlZF9kZXY6IFRoZSBhdHRhY2hlZCBlbmV0IGRyaXZlciYjMzk7cyBkZXZpY2UgaW5zdGFuY2UgcHRyCiAgKiBAYWRqdXN0X2xpbms6IENhbGxiYWNrIGZvciB0aGUgZW5ldCBjb250cm9sbGVyIHRvIHJlc3BvbmQgdG8gY2hhbmdlczogaW4gdGhlCiAgKiAgICAgICAgICAgICAgIGxpbmsgc3RhdGUuCkBAIC03MDYsNiAmIzQzOzcxMCw3IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHsKIAl1bnNpZ25lZCBpcnFfcmVydW46MTsKIAogCXVuc2lnbmVkIGRlZmF1bHRfdGltZXN0YW1wOjE7CiYjNDM7CXVuc2lnbmVkIGhhc19zZnBfbW9kX3BoeToxOwogCiAJaW50IHJhdGVfbWF0Y2hpbmc7CiAKQEAgLTc4NSw2ICYjNDM7NzkwLDkgQEAgc3RydWN0IHBoeV9kZXZpY2UgewogCS8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi8KIAlib29sIHNmcF9idXNfYXR0YWNoZWQ7CiAJc3RydWN0IHNmcF9idXMgKnNmcF9idXM7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqc2ZwX2NhZ2VfcG9ydDsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICptb2RfcG9ydDsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICp1cHN0cmVhbV9wb3J0OwogCXN0cnVjdCBwaHlsaW5rICpwaHlsaW5rOwogCXN0cnVjdCBuZXRfZGV2aWNlICphdHRhY2hlZF9kZXY7CiAJc3RydWN0IG1paV90aW1lc3RhbXBlciAqbWlpX3RzOwpAQCAtMjQ2OCw2ICYjNDM7MjQ3Niw4IEBAIGludCBfX3BoeV9od3RzdGFtcF9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAogc3RydWN0IHBoeV9wb3J0ICpwaHlfZ2V0X3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogCiYjNDM7dm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTsKJiM0MzsKIC8qKgogICogcGh5X21vZHVsZV9kcml2ZXIoKSAtIEhlbHBlciBtYWNybyBmb3IgcmVnaXN0ZXJpbmcgUEhZIGRyaXZlcnMKICAqIEBfX3BoeV9kcml2ZXJzOiBhcnJheSBvZiBQSFkgZHJpdmVycyB0byByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oIGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oCmluZGV4IDk1NTc1ZjY4ZDViYzcuLjk1ODUyODJjYWUzZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmgKQEAgLTEzLDE0ICYjNDM7MTMsMTkgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aHRvb2wuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiAKIHN0cnVjdCB4YXJyYXk7CiBzdHJ1Y3QgcGh5X2RldmljZTsKJiM0MztzdHJ1Y3QgcGh5X3BvcnQ7CiBzdHJ1Y3Qgc2ZwX2J1czsKIAogc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5IHsKIAlzdHJ1Y3QgeGFycmF5IHBoeXM7CiAJdTMyIG5leHRfcGh5X2luZGV4OwomIzQzOwomIzQzOwlzdHJ1Y3QgeGFycmF5IHBvcnRzOwomIzQzOwl1MzIgbmV4dF9wb3J0X2luZGV4OwogfTsKIAogc3RydWN0IHBoeV9kZXZpY2Vfbm9kZSB7CkBAIC00OCw2ICYjNDM7NTMsOSBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpOwogCiYjNDM7aW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTsKJiM0Mzt2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKgogcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleCkKIHsKQEAgLTY0LDYgJiM0Mzs3MiwyNSBAQCBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KQogCXJldHVybiBOVUxMOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X3BvcnQgKgomIzQzO3BoeV9saW5rX3RvcG9fZ2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBvcnRfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtJmd0O2xpbmtfdG9wbzsKJiM0MzsKJiM0MzsJaWYgKCF0b3BvKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CS8qIHBvcnRzIGluIHRoZSB0b3BvIGFyZSBSVE5MIHByb3RlY3RlZCwgYnV0IG1heSBiZSBhY2Nlc3NlZCB1bmRlcgomIzQzOwkgKiBuZXRkZXZfbG9jayBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLiBGb3Igbm93IGtlZXAgdGhlbSB1bmRlciBydG5sCiYjNDM7CSAqIHByb3RlY3Rpb24sIGFzIG5vIG9wcy1sb2NrZWQgZGV2aWNlcyBoYXZlIHBoeV9wb3J0IGNhcGFiaWxpdGllcwomIzQzOwkgKiB5ZXQuCiYjNDM7CSAqLwomIzQzOwlBU1NFUlRfUlROTCgpOwomIzQzOwomIzQzOwkvKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwgd2hpbGUgaGFuZGxpbmcgdGhlIHBoeV9wb3J0ICovCiYjNDM7CXJldHVybiB4YV9sb2FkKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIHBvcnRfaWQpOwomIzQzO30KJiM0MzsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSwKQEAgLTc3LDExICYjNDM7MTA0LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCSBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCSAgc3RydWN0IHBoeV9wb3J0ICpwb3J0KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICoKIHBoeV9saW5rX3RvcG9fZ2V0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcGh5aW5kZXgpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X3BvcnQgKgomIzQzO3BoeV9saW5rX3RvcG9fZ2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBvcnRfaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fUEhZX0xJTktfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oIGIvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oCmluZGV4IDBlZjBmNWNlNDcwOTIuLjhmNDVjMDMxY2JjMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmgKQEAgLTM2LDkgJiM0MzszNiwxMiBAQCBzdHJ1Y3QgcGh5X3BvcnRfb3BzIHsKIC8qKgogICogc3RydWN0IHBoeV9wb3J0IC0gQSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldHdvcmsgZGV2aWNlIHBoeXNpY2FsIGludGVyZmFjZQogICoKJiM0MzsgKiBAaWQ6IFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcG9ydCB3aXRoaW4gdGhlIHRvcG9sb2d5CiAgKiBAaGVhZDogVXNlZCBieSB0aGUgcG9ydCYjMzk7cyBwYXJlbnQgdG8gbGlzdCBwb3J0cwogICogQHBhcmVudF90eXBlOiBUaGUgdHlwZSBvZiBkZXZpY2UgdGhpcyBwb3J0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0bwogICogQHBoeTogSWYgdGhlIHBhcmVudCBpcyBQSFlfUE9SVF9QSFlERVYsIHRoZSBQSFkgY29udHJvbGxpbmcgdGhhdCBwb3J0CiYjNDM7ICogQHVwc3RyZWFtX3BvcnQ6IEluZGljYXRlcyB0aGUgTUlJIHBvcnQgdGhhdCBmZWVkcyB0aGlzIHBvcnQsIGlmIGFueSwKJiM0MzsgKgkJICAgZS5nLiB0aGUgU0ZQIGNhZ2UgcG9ydCBmb3IgYSBTRlAgbW9kdWxlIHBvcnQuCiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlcgogICogQHBhaXJzOiBUaGUgbnVtYmVyIG9mICBwYWlycyB0aGlzIHBvcnQgaGFzLCAwIGlmIG5vdCBhcHBsaWNhYmxlCiAgKiBAbWVkaXVtczogQml0bWFzayBvZiB0aGUgcGh5c2ljYWwgbWVkaXVtcyB0aGlzIHBvcnQgcHJvdmlkZXMgYWNjZXNzIHRvCkBAIC01MiwxMSAmIzQzOzU1LDEzIEBAIHN0cnVjdCBwaHlfcG9ydF9vcHMgewogICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuCiAgKi8KIHN0cnVjdCBwaHlfcG9ydCB7CiYjNDM7CXUzMiBpZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CiAJZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7CiAJdW5pb24gewogCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwogCX07CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDsKIAogCWNvbnN0IHN0cnVjdCBwaHlfcG9ydF9vcHMgKm9wczsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKaW5kZXggODEzNGJhZjc4NjBmMy4uZjlkODc5NGVhYmMxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCkBAIC03OCw2ICYjNDM7NzgsMTEgQEAgZW51bSBldGh0b29sX3BzZV9ldmVudCB7CiAJRVRIVE9PTF9QU0VfRVZFTlRfU1dfUFdfQ09OVFJPTF9FUlJPUiA9IDY0LAogfTsKIAomIzQzO2VudW0gZXRodG9vbF9wb3J0X3R5cGUgewomIzQzOwlFVEhUT09MX1BPUlRfVFlQRV9NREksCiYjNDM7CUVUSFRPT0xfUE9SVF9UWVBFX1NGUCwKJiM0Mzt9OwomIzQzOwogZW51bSB7CiAJRVRIVE9PTF9BX0hFQURFUl9VTlNQRUMsCiAJRVRIVE9PTF9BX0hFQURFUl9ERVZfSU5ERVgsCkBAIC04NDAsNiAmIzQzOzg0NSwxOCBAQCBlbnVtIHsKIAlFVEhUT09MX0FfTVNFX01BWCA9IChfX0VUSFRPT0xfQV9NU0VfQ05UIC0gMSkKIH07CiAKJiM0MztlbnVtIHsKJiM0MzsJRVRIVE9PTF9BX1BPUlRfSEVBREVSID0gMSwKJiM0MzsJRVRIVE9PTF9BX1BPUlRfSUQsCiYjNDM7CUVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUywKJiM0MzsJRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsCiYjNDM7CUVUSFRPT0xfQV9QT1JUX1RZUEUsCiYjNDM7CUVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsCiYjNDM7CiYjNDM7CV9fRVRIVE9PTF9BX1BPUlRfQ05ULAomIzQzOwlFVEhUT09MX0FfUE9SVF9NQVggPSAoX19FVEhUT09MX0FfUE9SVF9DTlQgLSAxKQomIzQzO307CiYjNDM7CiBlbnVtIHsKIAlFVEhUT09MX01TR19VU0VSX05PTkUgPSAwLAogCUVUSFRPT0xfTVNHX1NUUlNFVF9HRVQgPSAxLApAQCAtODkzLDYgJiM0Mzs5MTAsNyBAQCBlbnVtIHsKIAlFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCwKIAlFVEhUT09MX01TR19SU1NfREVMRVRFX0FDVCwKIAlFVEhUT09MX01TR19NU0VfR0VULAomIzQzOwlFVEhUT09MX01TR19QT1JUX0dFVCwKIAogCV9fRVRIVE9PTF9NU0dfVVNFUl9DTlQsCiAJRVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpCkBAIC05NTQsNiAmIzQzOzk3Miw3IEBAIGVudW0gewogCUVUSFRPT0xfTVNHX1JTU19DUkVBVEVfTlRGLAogCUVUSFRPT0xfTVNHX1JTU19ERUxFVEVfTlRGLAogCUVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksCiYjNDM7CUVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLAogCiAJX19FVEhUT09MX01TR19LRVJORUxfQ05ULAogCUVUSFRPT0xfTVNHX0tFUk5FTF9NQVggPSAoX19FVEhUT09MX01TR19LRVJORUxfQ05UIC0gMSkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYzFjMWJlMWE2OTYyZi4uYjM2Y2M1YzQ3ODE2YSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExMzE1LDYgJiM0MzsxMTMxNSw3IEBAIHN0YXRpYyB2b2lkIG5ldGRldl9mcmVlX3BoeV9saW5rX3RvcG9sb2d5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUEhZTElCKSAmYW1wOyZhbXA7IHRvcG8pIHsKIAkJeGFfZGVzdHJveSgmYW1wO3RvcG8tJmd0O3BoeXMpOwomIzQzOwkJeGFfZGVzdHJveSgmYW1wO3RvcG8tJmd0O3BvcnRzKTsKIAkJa2ZyZWUodG9wbyk7CiAJCWRldi0mZ3Q7bGlua190b3BvID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9NYWtlZmlsZSBiL25ldC9ldGh0b29sL01ha2VmaWxlCmluZGV4IDYyOWMxMDkxNjY3MGUuLjliNWIwOTY3MDAwODEgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL01ha2VmaWxlCkBAIC05LDQgJiM0Mzs5LDQgQEAgZXRodG9vbF9ubC15CTo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFwKIAkJICAgY2hhbm5lbHMubyBjb2FsZXNjZS5vIHBhdXNlLm8gZWVlLm8gdHNpbmZvLm8gY2FibGV0ZXN0Lm8gXAogCQkgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXAogCQkgICBtb2R1bGUubyBjbWlzX2Z3X3VwZGF0ZS5vIGNtaXNfY2RiLm8gcHNlLXBkLm8gcGxjYS5vIFwKLQkJICAgcGh5Lm8gdHNjb25maWcubyBtc2UubwomIzQzOwkJICAgcGh5Lm8gdHNjb25maWcubyBtc2UubyBwb3J0Lm8KZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuYyBiL25ldC9ldGh0b29sL25ldGxpbmsuYwppbmRleCAxYWYzOTViNTQzMzBlLi5jMDc2YzA3ZDBhMDgwIDEwMDY0NAotLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5jCkBAIC0yNiw2ICYjNDM7MjYsOCBAQCBzdGF0aWMgdTMyIGV0aG5sX2JjYXN0X3NlcTsKIAkJCSAgICAgRVRIVE9PTF9GTEFHX09NSVRfUkVQTFkpCiAjZGVmaW5lIEVUSFRPT0xfRkxBR1NfU1RBVFMgKEVUSFRPT0xfRkxBR1NfQkFTSUMgfCBFVEhUT09MX0ZMQUdfU1RBVFMpCiAKJiM0MztjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXSBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7CiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W10gPSB7CiAJW0VUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW0VUSFRPT0xfQV9IRUFERVJfREVWX05BTUVdCT0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLApAQCAtNDMxLDYgJiM0Mzs0MzMsNyBAQCBldGhubF9kZWZhdWx0X3JlcXVlc3RzW19fRVRIVE9PTF9NU0dfVVNFUl9DTlRdID0gewogCVtFVEhUT09MX01TR19UU0NPTkZJR19TRVRdCT0gJmFtcDtldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcywKIAlbRVRIVE9PTF9NU0dfUEhZX0dFVF0JCT0gJmFtcDtldGhubF9waHlfcmVxdWVzdF9vcHMsCiAJW0VUSFRPT0xfTVNHX01TRV9HRVRdCQk9ICZhbXA7ZXRobmxfbXNlX3JlcXVlc3Rfb3BzLAomIzQzOwlbRVRIVE9PTF9NU0dfUE9SVF9HRVRdCQk9ICZhbXA7ZXRobmxfcG9ydF9yZXF1ZXN0X29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCkBAIC0xNTcyLDYgJiM0MzsxNTc1LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9vcHMgZXRodG9vbF9nZW5sX29wc1tdID0gewogCQkucG9saWN5ID0gZXRobmxfbXNlX2dldF9wb2xpY3ksCiAJCS5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9tc2VfZ2V0X3BvbGljeSkgLSAxLAogCX0sCiYjNDM7CXsKJiM0MzsJCS5jbWQJPSBFVEhUT09MX01TR19QT1JUX0dFVCwKJiM0MzsJCS5kb2l0CT0gZXRobmxfZGVmYXVsdF9kb2l0LAomIzQzOwkJLnN0YXJ0CT0gZXRobmxfcG9ydF9kdW1wX3N0YXJ0LAomIzQzOwkJLmR1bXBpdAk9IGV0aG5sX3BvcnRfZHVtcGl0LAomIzQzOwkJLmRvbmUJPSBldGhubF9wb3J0X2R1bXBfZG9uZSwKJiM0MzsJCS5wb2xpY3kgPSBldGhubF9wb3J0X2dldF9wb2xpY3ksCiYjNDM7CQkubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcG9ydF9nZXRfcG9saWN5KSAtIDEsCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGV0aHRvb2xfbmxfbWNncnBzW10gPSB7CkBAIC0xNTk0LDEwICYjNDM7MTYwNiwyMyBAQCBzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGV0aHRvb2xfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0gewogCiAvKiBtb2R1bGUgc2V0dXAgKi8KIAomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBldGhubF9waHlfbmFtZXNfcG9wdWxhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgUEhZX0lOVEVSRkFDRV9NT0RFX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW5hbWUgPSBwaHlfbW9kZXMoaSk7CiYjNDM7CQlzdHJzY3B5KHBoeV9pbnRlcmZhY2VfbmFtZXNbaV0sIG5hbWUsIEVUSF9HU1RSSU5HX0xFTik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9faW5pdCBldGhubF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAomIzQzOwlldGhubF9waHlfbmFtZXNfcG9wdWxhdGUoKTsKJiM0MzsKIAlyZXQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmYW1wO2V0aHRvb2xfZ2VubF9mYW1pbHkpOwogCWlmIChXQVJOKHJldCAmbHQ7IDAsICYjMzQ7ZXRodG9vbDogZ2VuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24gZmFpbGVkJiMzNDspKQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oCmluZGV4IDNlOTY5YTA3MGY5ZmUuLmRjNzIxMWY2N2M0ZDUgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKQEAgLTUsMTEgJiM0Mzs1LDE0IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sX25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2dlbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAKIHN0cnVjdCBldGhubF9yZXFfaW5mbzsKIAomIzQzO2V4dGVybiBjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXTsKJiM0MzsKIGludCBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5lc3QsIHN0cnVjdCBuZXQgKm5ldCwKIAkJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCkBAIC00NzQsNiAmIzQzOzQ3Nyw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbW1fcmVxdWVzdF9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BoeV9yZXF1ZXN0X29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21zZV9yZXF1ZXN0X29wczsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHM7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeV9zdGF0c1tFVEhUT09MX0FfSEVBREVSX0ZMQUdTICYjNDM7IDFdOwpAQCAtNTMwLDYgJiM0Mzs1MzQsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9IRUFERVIgJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX3NldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX01BWCAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9tc2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfTVNFX0hFQURFUiAmIzQzOyAxXTsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcG9ydF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QT1JUX0lEICYjNDM7IDFdOwogCiBpbnQgZXRobmxfc2V0X2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwpAQCAtNTQ1LDYgJiM0Mzs1NTAsOSBAQCBpbnQgZXRobmxfdHNpbmZvX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogaW50IGV0aG5sX3RzaW5mb19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiBpbnQgZXRobmxfcnNzX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IGV0aG5sX3Jzc19kZWxldGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiAKIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX3N0ZF9uYW1lc1tfX0VUSFRPT0xfU1RBVFNfQ05UXVtFVEhfR1NUUklOR19MRU5dOwogZXh0ZXJuIGNvbnN0IGNoYXIgc3RhdHNfZXRoX3BoeV9uYW1lc1tfX0VUSFRPT0xfQV9TVEFUU19FVEhfUEhZX0NOVF1bRVRIX0dTVFJJTkdfTEVOXTsKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BvcnQuYyBiL25ldC9ldGh0b29sL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lMWJjYWRiZmU0MGMwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcG9ydC5jCkBAIC0wLDAgJiM0MzsxLDM3NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAyMDI2IEJvb3RsaW4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeV9wb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbG9jay5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Yml0c2V0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0bGluay5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgcG9ydF9yZXFfaW5mbyB7CiYjNDM7CXN0cnVjdCBldGhubF9yZXFfaW5mbyBiYXNlOwomIzQzOwl1MzIgcG9ydF9pZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEgewomIzQzOwlzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YQliYXNlOwomIzQzOwlfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpOwomIzQzOwlERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhpbnRlcmZhY2VzKTsKJiM0MzsJdTMyIHBvcnRfaWQ7CiYjNDM7CWJvb2wgbWlpOwomIzQzOwlib29sIHNmcDsKJiM0MzsJdTMyIHVwc3RyZWFtX3BvcnQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFBPUlRfUkVRSU5GTyhfX3JlcV9iYXNlKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfX3JlcV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXFfaW5mbywgYmFzZSkKJiM0MzsKJiM0MzsjZGVmaW5lIFBPUlRfUkVQREFUQShfX3JlcGx5X2Jhc2UpIFwKJiM0MzsJY29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBvcnRfcmVwbHlfZGF0YSwgYmFzZSkKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgJiM0MzsgMV0gPSB7CiYjNDM7CVtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksCiYjNDM7CVtFVEhUT09MX0FfUE9SVF9JRF0gPSBOTEFfUE9MSUNZX01JTihOTEFfVTMyLCAxKSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcG9ydF9wYXJzZV9yZXF1ZXN0KHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pOwomIzQzOwomIzQzOwlpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBFVEhUT09MX0FfUE9SVF9JRCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVxdWVzdC0mZ3Q7cG9ydF9pZCA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QT1JUX0lEXSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiYjNDM7CQkJICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSwKJiM0MzsJCQkgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pOwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CiYjNDM7CS8qIFJUTkwgbXVzdCBiZSBoZWxkIHdoaWxlIGhvbGRpbmcgYSByZWYgdG8gdGhlIHBoeV9wb3J0LiBIZXJlLCBjYWxsZXIKJiM0MzsJICogaG9sZHMgUlROTC4KJiM0MzsJICovCiYjNDM7CXBvcnQgPSBwaHlfbGlua190b3BvX2dldF9wb3J0KHJlcV9pbmZvLSZndDtkZXYsIHJlcXVlc3QtJmd0O3BvcnRfaWQpOwomIzQzOwlpZiAoIXBvcnQpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJbGlua21vZGVfY29weShyZXBseS0mZ3Q7c3VwcG9ydGVkLCBwb3J0LSZndDtzdXBwb3J0ZWQpOwomIzQzOwlwaHlfaW50ZXJmYWNlX2NvcHkocmVwbHktJmd0O2ludGVyZmFjZXMsIHBvcnQtJmd0O2ludGVyZmFjZXMpOwomIzQzOwlyZXBseS0mZ3Q7cG9ydF9pZCA9IHBvcnQtJmd0O2lkOwomIzQzOwlyZXBseS0mZ3Q7bWlpID0gcG9ydC0mZ3Q7aXNfbWlpOwomIzQzOwlyZXBseS0mZ3Q7c2ZwID0gcG9ydC0mZ3Q7aXNfc2ZwOwomIzQzOwlyZXBseS0mZ3Q7dXBzdHJlYW1fcG9ydCA9IHBvcnQtJmd0O3Vwc3RyZWFtX3BvcnQgPyBwb3J0LSZndDt1cHN0cmVhbV9wb3J0LSZndDtpZCA6IDA7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKQomIzQzO3sKJiM0MzsJYm9vbCBjb21wYWN0ID0gcmVxX2luZm8tJmd0O2ZsYWdzICZhbXA7IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7CiYjNDM7CXN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpOwomIzQzOwlzaXplX3Qgc2l6ZSA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEVUSFRPT0xfQV9QT1JUX0lEICovCiYjNDM7CXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsKJiM0MzsKJiM0MzsJaWYgKCFyZXBseS0mZ3Q7bWlpKSB7CiYjNDM7CQkvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMgKi8KJiM0MzsJCXJldCA9IGV0aG5sX2JpdHNldF9zaXplKHJlcGx5LSZndDtzdXBwb3J0ZWQsIE5VTEwsCiYjNDM7CQkJCQlfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsCiYjNDM7CQkJCQlsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXNpemUgJiM0Mzs9IHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTICovCiYjNDM7CQlyZXQgPSBldGhubF9iaXRzZXRfc2l6ZShyZXBseS0mZ3Q7aW50ZXJmYWNlcywgTlVMTCwKJiM0MzsJCQkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsCiYjNDM7CQkJCQlwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlzaXplICYjNDM7PSByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqLwomIzQzOwlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CiYjNDM7CiYjNDM7CS8qIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQgKi8KJiM0MzsJaWYgKHJlcGx5LSZndDt1cHN0cmVhbV9wb3J0KQomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKQomIzQzO3sKJiM0MzsJYm9vbCBjb21wYWN0ID0gcmVxX2luZm8tJmd0O2ZsYWdzICZhbXA7IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7CiYjNDM7CXN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpOwomIzQzOwlpbnQgcmV0LCBwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9NREk7CiYjNDM7CiYjNDM7CWlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS0mZ3Q7cG9ydF9pZCkpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlpZiAoIXJlcGx5LSZndDttaWkpIHsKJiM0MzsJCXJldCA9IGV0aG5sX3B1dF9iaXRzZXQoc2tiLCBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMsCiYjNDM7CQkJCSAgICAgICByZXBseS0mZ3Q7c3VwcG9ydGVkLCBOVUxMLAomIzQzOwkJCQkgICAgICAgX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLAomIzQzOwkJCQkgICAgICAgbGlua19tb2RlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsCiYjNDM7CQkJCSAgICAgICByZXBseS0mZ3Q7aW50ZXJmYWNlcywgTlVMTCwKJiM0MzsJCQkJICAgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsCiYjNDM7CQkJCSAgICAgICBwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJlcGx5LSZndDttaWkgfHwgcmVwbHktJmd0O3NmcCkKJiM0MzsJCXBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX1NGUDsKJiM0MzsKJiM0MzsJaWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfVFlQRSwgcG9ydF90eXBlKSkKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiYjNDM7CiYjNDM7CWlmIChyZXBseS0mZ3Q7dXBzdHJlYW1fcG9ydCAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsCiYjNDM7CQkJcmVwbHktJmd0O3Vwc3RyZWFtX3BvcnQpKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBwb3J0X2R1bXBfY3R4IHsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8JKnJlcV9pbmZvOwomIzQzOwlzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhCSpyZXBseV9kYXRhOwomIzQzOwl1bnNpZ25lZCBsb25nCQlpZmluZGV4OwomIzQzOwl1bnNpZ25lZCBsb25nCQlwb3NfaWZpbmRleDsKJiM0MzsJdW5zaWduZWQgbG9uZwkJcG9zX3BvcnRpZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqCiYjNDM7cG9ydF9kdW1wX2N0eF9nZXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqKWNiLSZndDtjdHg7CiYjNDM7fQomIzQzOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTsKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsJc3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby0mZ3Q7aW5mby5hdHRyczsKJiM0MzsJc3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YTsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcV9pbmZvOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpICZndDsgc2l6ZW9mKGNiLSZndDtjdHgpKTsKJiM0MzsKJiM0MzsJcmVxX2luZm8gPSBremFsbG9jX29iaigqcmVxX2luZm8pOwomIzQzOwlpZiAoIXJlcV9pbmZvKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJlcGx5X2RhdGEgPSBrbWFsbG9jX29iaigqcmVwbHlfZGF0YSk7CiYjNDM7CWlmICghcmVwbHlfZGF0YSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZnJlZV9yZXFfaW5mbzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldCgmYW1wO3JlcV9pbmZvLSZndDtiYXNlLCB0YltFVEhUT09MX0FfUE9SVF9IRUFERVJdLAomIzQzOwkJCQkJIGdlbmxfaW5mb19uZXQoJmFtcDtpbmZvLSZndDtpbmZvKSwKJiM0MzsJCQkJCSBpbmZvLSZndDtpbmZvLmV4dGFjaywgZmFsc2UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZnJlZV9yZXBfZGF0YTsKJiM0MzsKJiM0MzsJY3R4LSZndDtpZmluZGV4ID0gMDsKJiM0MzsJY3R4LSZndDtwb3NfaWZpbmRleCA9IDA7CiYjNDM7CiYjNDM7CS8qIEZvciBmaWx0ZXJlZCBEVU1QIHJlcXVlc3RzLCBsZXQmIzM5O3MganVzdCBzdG9yZSB0aGUgaWZpbmRleC4gV2UmIzM5O2xsIGNoZWNrCiYjNDM7CSAqIGFnYWluIGlmIHRoZSBuZXRkZXYgaXMgc3RpbGwgdGhlcmUgd2hlbiBsb29waW5nIG92ZXIgdGhlIG5ldGRldiBsaXN0CiYjNDM7CSAqIGluIHRoZSBEVU1QIGxvb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAocmVxX2luZm8tJmd0O2Jhc2UuZGV2KSB7CiYjNDM7CQljdHgtJmd0O2lmaW5kZXggPSByZXFfaW5mby0mZ3Q7YmFzZS5kZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQluZXRkZXZfcHV0KHJlcV9pbmZvLSZndDtiYXNlLmRldiwgJmFtcDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXZfdHJhY2tlcik7CiYjNDM7CQlyZXFfaW5mby0mZ3Q7YmFzZS5kZXYgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7cmVxX2luZm8gPSByZXFfaW5mbzsKJiM0MzsJY3R4LSZndDtyZXBseV9kYXRhID0gcmVwbHlfZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZnJlZV9yZXBfZGF0YToKJiM0MzsJa2ZyZWUocmVwbHlfZGF0YSk7CiYjNDM7ZnJlZV9yZXFfaW5mbzoKJiM0MzsJa2ZyZWUocmVxX2luZm8pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsJdm9pZCAqZWhkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTsKJiM0MzsJaWYgKCFlaGRyKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJbWVtc2V0KGN0eC0mZ3Q7cmVwbHlfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpKTsKJiM0MzsJY3R4LSZndDtyZXBseV9kYXRhLSZndDtiYXNlLmRldiA9IGRldjsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGRldl9sb2NrX29wcyhkZXYpOwomIzQzOwomIzQzOwlyZXQgPSBwb3J0X3ByZXBhcmVfZGF0YSgmYW1wO2N0eC0mZ3Q7cmVxX2luZm8tJmd0O2Jhc2UsICZhbXA7Y3R4LSZndDtyZXBseV9kYXRhLSZndDtiYXNlLAomIzQzOwkJCQlnZW5sX2luZm9fZHVtcChjYikpOwomIzQzOwomIzQzOwluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBldGhubF9maWxsX3JlcGx5X2hlYWRlcihza2IsIGRldiwgRVRIVE9PTF9BX1BPUlRfSEVBREVSKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gcG9ydF9maWxsX3JlcGx5KHNrYiwgJmFtcDtjdHgtJmd0O3JlcV9pbmZvLSZndDtiYXNlLCAmYW1wO2N0eC0mZ3Q7cmVwbHlfZGF0YS0mZ3Q7YmFzZSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljdHgtJmd0O3JlcGx5X2RhdGEtJmd0O2Jhc2UuZGV2ID0gTlVMTDsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpOwomIzQzOwllbHNlCiYjNDM7CQlnZW5sbXNnX2VuZChza2IsIGVoZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmVfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZGV2ID0gY3R4LSZndDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXY7CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtsaW5rX3RvcG8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJeGFfZm9yX2VhY2hfc3RhcnQoJmFtcDtkZXYtJmd0O2xpbmtfdG9wby0mZ3Q7cG9ydHMsIGN0eC0mZ3Q7cG9zX3BvcnRpZCwgcG9ydCwKJiM0MzsJCQkgIGN0eC0mZ3Q7cG9zX3BvcnRpZCkgewomIzQzOwkJY3R4LSZndDtyZXFfaW5mby0mZ3Q7cG9ydF9pZCA9IGN0eC0mZ3Q7cG9zX3BvcnRpZDsKJiM0MzsKJiM0MzsJCXJldCA9IHBvcnRfZHVtcF9vbmUoc2tiLCBkZXYsIGNiKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwljdHgtJmd0O3Bvc19wb3J0aWQgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKJiM0MzsJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtJmd0O3Bvc19pZmluZGV4KSB7CiYjNDM7CQluZXRkZXZfaG9sZChkZXYsICZhbXA7ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CQljdHgtJmd0O3JlcV9pbmZvLSZndDtiYXNlLmRldiA9IGRldjsKJiM0MzsJCXJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpOwomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJbmV0ZGV2X3B1dChkZXYsICZhbXA7ZGV2X3RyYWNrZXIpOwomIzQzOwkJY3R4LSZndDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXYgPSBOVUxMOwomIzQzOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXJldCA9IDA7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpOwomIzQzOwlzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGN0eC0mZ3Q7aWZpbmRleCkgewomIzQzOwkJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwomIzQzOwomIzQzOwkJZGV2ID0gbmV0ZGV2X2dldF9ieV9pbmRleChnZW5sX2luZm9fbmV0KCZhbXA7aW5mby0mZ3Q7aW5mbyksCiYjNDM7CQkJCQkgIGN0eC0mZ3Q7aWZpbmRleCwgJmFtcDtkZXZfdHJhY2tlciwKJiM0MzsJCQkJCSAgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJCWN0eC0mZ3Q7cmVxX2luZm8tJmd0O2Jhc2UuZGV2ID0gZGV2OwomIzQzOwkJcmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7CiYjNDM7CiYjNDM7CQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXZfdHJhY2tlcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBwb3J0X2R1bXBfYWxsX2Rldihza2IsIGNiKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsKJiM0MzsJa2ZyZWUoY3R4LSZndDtyZXFfaW5mbyk7CiYjNDM7CWtmcmVlKGN0eC0mZ3Q7cmVwbHlfZGF0YSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcG9ydF9yZXF1ZXN0X29wcyA9IHsKJiM0MzsJLnJlcXVlc3RfY21kCQk9IEVUSFRPT0xfTVNHX1BPUlRfR0VULAomIzQzOwkucmVwbHlfY21kCQk9IEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLAomIzQzOwkuaGRyX2F0dHIJCT0gRVRIVE9PTF9BX1BPUlRfSEVBREVSLAomIzQzOwkucmVxX2luZm9fc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBvcnRfcmVxX2luZm8pLAomIzQzOwkucmVwbHlfZGF0YV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpLAomIzQzOwomIzQzOwkucGFyc2VfcmVxdWVzdAkJPSBwb3J0X3BhcnNlX3JlcXVlc3QsCiYjNDM7CS5wcmVwYXJlX2RhdGEJCT0gcG9ydF9wcmVwYXJlX2RhdGEsCiYjNDM7CS5yZXBseV9zaXplCQk9IHBvcnRfcmVwbHlfc2l6ZSwKJiM0MzsJLmZpbGxfcmVwbHkJCT0gcG9ydF9maWxsX3JlcGx5LAomIzQzO307CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzIzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTE2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBldGh0b29sIFBPUlRfR0VUIE5ldGxpbmsgQVBJIGFuZCBTRlAgU3VwcG9ydCoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IHBhdGNoIHNlcmllcyBoZXJlLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIGBQT1JUX0dFVGAgbmV0bGluayBBUEkgY29tbWFuZCBpbiBldGh0b29sIHRvIGZldGNoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLCBvciAmIzM0O3BvcnRzJiMzNDsuIFdlJiMzOTtyZSBhbHNvIGFkZGluZyBzdXBwb3J0IGZvciBTRlAgcG9ydHMgd2l0aGluIHRoZSBQSFkgZnJhbWV3b3JrLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBzZWN1cml0eSBhbmQgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZS4KCkZpcnN0LCB0aGUgQVBJIGl0c2VsZi4gV2UgaGF2ZSB0aGUgdXN1YWwgZG9jdW1lbnRhdGlvbiB1cGRhdGVzOiBgZXRodG9vbC55YW1sYCB0byBkZWZpbmUgdGhlIG5ldyBlbnVtIGFuZCBhdHRyaWJ1dGVzLCBgZXRodG9vbC1uZXRsaW5rLnJzdGAgYW5kIGBwaHktcG9ydC5yc3RgIHRvIGRlc2NyaWJlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBhbmQgU0ZQIHBvcnRzLCByZXNwZWN0aXZlbHkuIFRoZSBQSFkgZnJhbWV3b3JrIHNlZXMgYSBsb3Qgb2YgY2hhbmdlcywgd2l0aCBuZXcgZnVuY3Rpb25zIGluIGBwaHlfY2Fwcy5jYCwgYHBoeV9kZXZpY2UuY2AsIGBwaHlfbGlua190b3BvbG9neS5jYCwgYW5kIGBwaHlsaW5rLmNgIHJlbGF0ZWQgdG8gU0ZQIG1vZHVsZXMgYW5kIHBvcnQgbWFuYWdlbWVudCwgYXMgd2VsbCBhcyB1cGRhdGVzIHRvIHNldmVyYWwgaGVhZGVyIGZpbGVzLiBUaGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBpbiBgbmV0L2V0aHRvb2wvcG9ydC5jYCwgd2hpY2ggZGVmaW5lcyB0aGUgbmV0bGluayBjb21tYW5kIGBFVEhUT09MX01TR19QT1JUX0dFVGAgaW4gdGhlIHVzZXItc3BhY2UgQVBJLgoKRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgYFBPUlRfR0VUYCBjb21tYW5kIGlzIHRoZSBtYWluIHRhcmdldC4gV2UmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IG5ldGxpbmsgY29tbWFuZCwgd2hpY2ggbWVhbnMgYSBuZXcgYXR0YWNrIHN1cmZhY2UuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2A6IGBwb3J0X3BhcnNlX3JlcXVlc3RgLCBgcG9ydF9wcmVwYXJlX2RhdGFgLCBgcG9ydF9yZXBseV9zaXplYCwgYHBvcnRfZmlsbF9yZXBseWAsIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgLCBgZXRobmxfcG9ydF9kdW1waXRgLCBgZXRobmxfcG9ydF9kdW1wX2RvbmVgLCBgcG9ydF9kdW1wX29uZWAsIGBwb3J0X2R1bXBfb25lX2RldmAsIGFuZCBgcG9ydF9kdW1wX2FsbF9kZXZgLiBXZSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLgoKTGV0JiMzOTtzIGNoZWNrIGBuZXQvZXRodG9vbC9wb3J0LmNgLiBPa2F5LCBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgYGV0aG5sX3BvcnRfZHVtcGl0YCwgYW5kIGBldGhubF9wb3J0X2R1bXBfZG9uZWAgYXJlIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kIGZvciBkaXJlY3QgZnV6emluZyBhY2Nlc3MuIGBwb3J0X3BhcnNlX3JlcXVlc3RgLCBgcG9ydF9wcmVwYXJlX2RhdGFgLCBgcG9ydF9yZXBseV9zaXplYCwgYW5kIGBwb3J0X2ZpbGxfcmVwbHlgIGFyZSBzdGF0aWMsIGJ1dCB1c2VkIHdpdGhpbiBgZXRobmxfcG9ydF9yZXF1ZXN0X29wc2AsIHdoaWNoICppcyogZXhwb3J0ZWQgYW5kIHRoZW4gdXNlZCBieSBgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c2AgaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuY2AuIFNvLCBgZXRobmxfcG9ydF9kdW1waXRgLCBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgYW5kIGBldGhubF9wb3J0X2R1bXBfZG9uZWAgYXJlIGRlZmluaXRlbHkgZ29vZCB0YXJnZXRzLCBhbmQgd2UmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gdHJpZ2dlciB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgZXRobmxfcG9ydF9yZXF1ZXN0X29wc2AsIHdoaWNoIGFyZSBjYWxsZWQgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzLgoKTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyB0byBjb25zaWRlcj8gTGV0JiMzOTtzIHNlZS4uLiB3ZSBoYXZlIGBwaHlfbGlua190b3BvX2FkZF9wb3J0YCBhbmQgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgIGluIGBwaHlfbGlua190b3BvbG9neS5jYCwgYHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNgIGluIGBwaHlfY2Fwcy5jYCwgYW5kIGBwaHlfc2V0X3Vwc3RyZWFtX3BvcnRgIGluIGBwaHlfZGV2aWNlLmNgLiBUaGVzZSBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHNldHVwIG9yIHRyaWdnZXIgZnJvbSBldmVudHMgd2l0aGluIHRoZSBQSFkgc3Vic3lzdGVtLCBidXQgYXJlIGdvb2QgdGFyZ2V0cyB0byBjb25zaWRlciBmb3IgY29tcGxldGVuZXNzLgoKSW4gdGVybXMgb2YgYnVpbGQgY29uZmlndXJhdGlvbiwgYENPTkZJR19FVEhUT09MX05FVExJTktgLCBgQ09ORklHX1BIWUxJQmAsIGFuZCBgQ09ORklHX1BIWUxJTktgIGFyZSB0aGUgZXNzZW50aWFscy4gSSBleHBlY3QgYENPTkZJR19FVEhUT09MX05FVExJTktgIHRvIGJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBlbnN1cmUgdGhpcyBjb2RlIGlzIGJ1aWx0LiBMZXQmIzM5O3Mgc2VlIGhvdyBgbmV0L2V0aHRvb2wvTWFrZWZpbGVgIGhhbmRsZXMgdGhpbmdzLi4uIFllYWgsIGl0IHVuY29uZGl0aW9uYWxseSBidWlsZHMgYHBvcnQub2AgaWYgdGhlIGV0aHRvb2wgbmV0bGluayBjb2RlIGlzIGJ1aWx0LCBzbyB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93IEkgd2FudCB0byBjaGVjayBmb3IgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIHJlc3RyaWN0aW9ucywgSSB3aWxsIHNlYXJjaCBmb3IgIGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCBpbiBgbmV0L0tjb25maWdgIG9yIGBuZXQvZXRodG9vbC9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVRIVE9PTF9ORVRMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz01MDc9Y29uZmlnIEZBSUxPVkVSXG4tLVxubmV0L0tjb25maWctNTE5LVxubmV0L0tjb25maWc6NTIwOmNvbmZpZyBFVEhUT09MX05FVExJTktcbm5ldC9LY29uZmlnLTUyMS1cdGJvb2wgXCYjMzQ7TmV0bGluayBpbnRlcmZhY2UgZm9yIGV0aHRvb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg3MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBmb3IgRVRIVE9PTF9ORVRMSU5LIGluIG5ldC9LY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgRVRIVE9PTF9ORVRMSU5LYCBpcyBoYW5kbGVkIGluIHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGZvciBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCBpdHMgY29udGVudHMgdG8gc2VlIGlmIGBFVEhUT09MX05FVExJTktgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCBhbnl3aGVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVwZW5kZW5jaWVzLCB0aGUgd2F5IGl0JiMzOTtzIGV4cG9zZWQgdG8gdGhlIHVzZXIsIGFuZCBpZiBpdCBoYXMgYW55IGRlZmF1bHRzIG9yIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBmZWF0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxNTpcdFx0ICBmYWlsb3ZlciBuZXRkZXYuIFRoaXMgZW5hYmxlcyBwYXJhdmlydHVhbCBkcml2ZXJzIHRvIHVzZSBhXG4gNTE2Olx0XHQgIFZGIGFzIGFuIGFjY2VsZXJhdGVkIGxvdyBsYXRlbmN5IGRhdGFwYXRoLiBJdCBhbHNvIGFsbG93cyBsaXZlXG4gNTE3Olx0XHQgIG1pZ3JhdGlvbiBvZiBWTXMgd2l0aCBkaXJlY3QgYXR0YWNoZWQgVkZzIGJ5IGZhaWxpbmcgb3ZlciB0byB0aGVcbiA1MTg6XHRcdCAgcGFyYXZpcnR1YWwgZGF0YXBhdGggd2hlbiB0aGUgVkYgaXMgdW5wbHVnZ2VkLlxuIDUxOTpcdFxuIDUyMDpcdGNvbmZpZyBFVEhUT09MX05FVExJTktcbiA1MjE6XHRcdGJvb2wgXCYjMzQ7TmV0bGluayBpbnRlcmZhY2UgZm9yIGV0aHRvb2xcJiMzNDtcbiA1MjI6XHRcdHNlbGVjdCBESU1MSUJcbiA1MjM6XHRcdGRlZmF1bHQgeVxuIDUyNDpcdFx0aGVscFxuIDUyNTpcdFx0ICBBbiBhbHRlcm5hdGl2ZSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGZvciBldGh0b29sIGJhc2VkIG9uIGdlbmVyaWNcbiA1MjY6XHRcdCAgbmV0bGluay4gSXQgcHJvdmlkZXMgYmV0dGVyIGV4dGVuc2liaWxpdHkgYW5kIHNvbWUgbmV3IGZlYXR1cmVzLFxuIDUyNzpcdFx0ICBlLmcuIG5vdGlmaWNhdGlvbiBtZXNzYWdlcy5cbiA1Mjg6XHRcbiA1Mjk6XHRjb25maWcgTkVUREVWX0FERFJfTElTVF9URVNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSBoYXZpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcy4uLmFuZCBpdCBzZWVtcyB0aGUgc3lzdGVtJiMzOTtzIGJlaGF2aW5nIGFjY29yZGluZyB0byBpdHMgZGVmYXVsdCAmIzM5O3kmIzM5OyBzZXR0aW5nLiBUaGlzIGlzbiYjMzk7dCB1bmV4cGVjdGVkLCBidXQgaXQgZG9lc24mIzM5O3QgZ2l2ZSBtZSBtdWNoIGNvbnRleHQgeWV0LiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYWJvdXQgdGhlIGluZmx1ZW5jZSBvZiBgQ09ORklHX1BIWUxJQmA/IElzIHRoYXQgYWN0aXZlLCBhbmQgaG93IG1pZ2h0IHRoYXQgYmUgaW1wYWN0aW5nIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBJJiMzOTttIG9ic2VydmluZz8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uIG5vdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIEkmIzM5O20gc2VlaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQSFlMSUImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTY9Y29uZmlnIFBIWUxJTktcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE1Om1lbnVjb25maWcgUEhZTElCXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNi1cdHRyaXN0YXRlIFwmIzM0O1BIWSBEZXZpY2Ugc3VwcG9ydCBhbmQgaW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz00Nj1jb25maWcgT1BFTl9BTExJQU5DRV9IRUxQRVJTXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDgtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo0OTpjb25maWcgUEhZTElCX0xFRFNcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVx0ZGVmX2Jvb2wgT0ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY2OAoJCQkJCQkJb3V0cHV0OiA3MAoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRXRoZXJuZXQgUG9ydCBEdW1wIEZ1bmN0aW9ucyBhbmQgUEhZTElCIEludGVncmF0aW9uKioKCk9rYXksIHNvIGBQSFlMSUJgIGlzIGFsc28gc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgcmlnaHQ/IExldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZXJhY3QuIEkmIzM5O20gZm9jdXNpbmcgb246CgoqICAgYGV0aG5sX3BvcnRfZHVtcF9zdGFydGAKKiAgIGBldGhubF9wb3J0X2R1bXBpdGAKKiAgIGBldGhubF9wb3J0X2R1bXBfZG9uZWAKKiAgIGBwaHlfbGlua190b3BvX2FkZF9wb3J0YAoqICAgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgCiogICBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AKKiAgIGBwaHlfc2V0X3Vwc3RyZWFtX3BvcnRgCgpSaWdodCwgbm93IHRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgd2hldGhlciB0aGVzZSBhcmUgZXhwb3J0ZWQgZnVuY3Rpb25zIG9yIGp1c3Qgbm9uLXN0YXRpYyB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcy4gTGV0IG1lIHNlZS4uLiBBaGEsIHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMuIFRoZXkgYXJlIHVzZWQgd2l0aGluIGBldGh0b29sX2dlbmxfb3BzYCBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5jYC4gSGFuZyBvbi4uLiBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCBpdHNlbGYgaXMgYWN0dWFsbHkgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AsIGJ1dCBpdCYjMzk7cyAqZGVjbGFyZWQqIGluIGBuZXQvZXRodG9vbC9uZXRsaW5rLmhgLiBZZXMsIG9rYXksIHRoZXkgYXJlIGluZGVlZCBub24tc3RhdGljIGFuZCB2aXNpYmxlIHRvIHRoZSBuZXRsaW5rIGludGVyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGluc2lkZSBgbmV0L2V0aHRvb2wvcG9ydC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7XFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9wb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvcG9ydC5jPTE3MT1wb3J0X2R1bXBfY3R4X2dldChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2V0aHRvb2wvcG9ydC5jLTE3NS1cbm5ldC9ldGh0b29sL3BvcnQuYzoxNzY6aW50IGV0aG5sX3BvcnRfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvZXRodG9vbC9wb3J0LmMtMTc3LXtcbi0tXG5uZXQvZXRodG9vbC9wb3J0LmM9Mjk3PXN0YXRpYyBpbnQgcG9ydF9kdW1wX2FsbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL3BvcnQuYy0zMjYtXG5uZXQvZXRodG9vbC9wb3J0LmM6MzI3OmludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvZXRodG9vbC9wb3J0LmMtMzI4LXtcbi0tXG5uZXQvZXRodG9vbC9wb3J0LmMtMzUzLVxubmV0L2V0aHRvb2wvcG9ydC5jOjM1NDppbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2V0aHRvb2wvcG9ydC5jLTM1NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTgzCgkJCQkJCQlvdXRwdXQ6IDc0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUgd2UgZ28uIEkmIzM5O20gc2VlaW5nIGEgc2VxdWVuY2Ug4oCTIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgLCB0aGVuIGBldGhubF9wb3J0X2R1bXBpdGAsIGFuZCBmaW5hbGx5IGBldGhubF9wb3J0X2R1bXBfZG9uZWAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdGlvbiBvZiBhIGR1bXAgcHJvY2VzcyByZWxhdGVkIHRvIEV0aGVybmV0IHBvcnQgaW5mb3JtYXRpb24sIGxpa2VseSB3aXRoaW4gdGhlIE5ldGxpbmsgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHdob2xlIGN5Y2xlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQuIEhtbSwgd2hhdCBhYm91dCBgZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmNgPyBUaGF0IGZpbGUmIzM5O3MgcmVsZXZhbnQsIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaXQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIGR1bXAgcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSB0aGUgUEhZIGxheWVyIGxpbmsgdG9wb2xvZ3kgaXMgc29tZXRoaW5nIHRoYXQgaXMgZ29pbmcgdG8gbmVlZCB0byBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7XFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYz0zNT1zdGF0aWMgc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICpwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jLTYyLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmM6NjM6aW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtNjQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTkwPUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fYWRkX3BvcnQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtOTEtXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYzo5Mjp2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtOTMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTEwMT1FWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2RlbF9wb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jLTEwMi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jOjEwMzppbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy0xMDQtXHRcdFx0ICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTE3Nj1FWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2FkZF9waHkpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtMTc3LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmM6MTc4OnZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy0xNzktXHRcdFx0ICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNTMKCQkJCQkJCW91dHB1dDogNzIKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIFBIWSBMaW5rIFRvcG9sb2d5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBzZWUgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgIGFuZCBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGAgYXJlIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgZ29vZC4gVGhleSYjMzk7cmUgY2xlYXJseSBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwcm9iYWJseSBieSBzb21lIHVwcGVyLWxldmVsIG5ldHdvcmsgc3RhY2sgb3IgYSBzeXN0ZW0gbWFuYWdlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlIHRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBQSFkgbWFuYWdlbWVudC4KCk5vdywgbXkgbWluZCBzaGlmdHMgc2xpZ2h0bHkuIFdoZXJlIGFyZSB0aGUgY29yZSBjYXBhYmlsaXRpZXMgZGVmaW5lZD8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoZXJlIGlzIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZXNlIG5ldyBmdW5jdGlvbnMgaW4gbXkgYXJlYXMgb2YgZXhwZXJ0aXNlLiBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGBkcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY2AuIEl0JiMzOTtzIGEga2V5IGZpbGUgd2hlcmUgUEhZIGNhcGFiaWxpdGllcyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbnMgYXJlIHVzdWFsbHkgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlc2UgbmV3IHRvcG9sb2d5IGZ1bmN0aW9ucyBoYXZlIGFuIGVmZmVjdCBoZXJlLCBhbmQgaG93LCBpZiBzby4gQSBxdWljayByZXZpZXcgb2YgdGhhdCBmaWxlIGlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7XFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYz03Nz1pbnQgX19pbml0IHBoeV9jYXBzX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0xMjEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzoxMjI6c2l6ZV90IHBoeV9jYXBzX3NwZWVkcyh1bnNpZ25lZCBpbnQgKnNwZWVkcywgc2l6ZV90IHNpemUsXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0xMjMtXHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9MjM2PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX2xvb2t1cCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMjQyLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MjQzOnZvaWQgcGh5X2NhcHNfbGlua21vZGVfbWF4X3NwZWVkKHUzMiBtYXhfc3BlZWQsIHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTI0NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMjYyLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MjYzOmJvb2wgcGh5X2NhcHNfdmFsaWQoaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBjb25zdCB1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0yNjQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTI3Ny0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjI3ODp2b2lkIHBoeV9jYXBzX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nIGNhcHMsIHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTI3OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9MzkwPUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00MDEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzo0MDI6dm9pZCBwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00MDMtXHRcdFx0XHQgICBlbnVtIGV0aHRvb2xfbGlua19tZWRpdW0gbWVkaXVtLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTQyNT1FWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtNDMzLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6NDM0OnUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTQzNS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9NDQ3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTQ1Ny0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjQ1ODp2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00NTktXHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzg4CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBwb2ludHMgYXMgYSBuZXR3b3JrIHN5c3RlbXMgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFBIWSBDYXBhYmlsaXR5IEZpbHRlcmluZyoqCgpBbHJpZ2h0LCBzbyBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AgaGFzIGJlZW4gZXhwb3NlZC4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IHdvbmRlciBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gYmVpbmcgZXhwb3J0ZWQuIEl0IHN1Z2dlc3RzIGEgbW9yZSBjb250cm9sbGVkLCBwZXJoYXBzIGZpbmUtZ3JhaW5lZCwgYXBwcm9hY2ggdG8gbGluayBtb2RlIGZpbHRlcmluZyBhdCB0aGUgUEhZIGxldmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHN5c3RlbS4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBmb3IgaXQ/CgpNeSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIFBIWSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmU/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIHBsYWNlcyB3aGVyZSBQSFkgY2FwYWJpbGl0aWVzIGFyZSBtYW5pcHVsYXRlZC4gVGhpcyB0cmlnZ2VycyBhbiBhc3NvY2lhdGlvbi4gV2hhdCBhYm91dCB0aGF0IGtleSBhcmVhIGZvciBQSFkgZHJpdmVyIG9wZXJhdGlvbnM/IEFoIHllcywgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLiBUaGF0IGZpbGUgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGxpa2VseSB3aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGlzIG5ldyBmdW5jdGlvbiB3b3VsZCBiZSBkZWZpbmVkIG9yIHVzZWQsIG9yIHdoZXJlIGl0cyBlZmZlY3RzIHdvdWxkIGJlIHNlZW4uIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3QgYXJlYSBJIHdpbGwgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNDU9c3RhdGljIHZvaWQgX19pbml0IGZlYXR1cmVzX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwOS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjEwOnZvaWQgcGh5X2RldmljZV9mcmVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIxMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMzg9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGdlbnBoeV9kcml2ZXI7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzOS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjQwOnN0YXRpYyBMSVNUX0hFQUQocGh5X2ZpeHVwX2xpc3QpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNDE6c3RhdGljIERFRklORV9NVVRFWChwaHlfZml4dXBfbG9jayk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI0Mi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjQzPXN0YXRpYyBib29sIHBoeV9kcnZfd29sX2VuYWJsZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1MS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjUyOmJvb2wgcGh5X21heV93YWtldXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjUzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM3OD1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IG1kaW9fYnVzX3BoeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDI2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0Mjc6c3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG1kaW9fYnVzX3BoeV9wbV9vcHMsIG1kaW9fYnVzX3BoeV9zdXNwZW5kLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MjgtXHRcdFx0IG1kaW9fYnVzX3BoeV9yZXN1bWUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDM4PXN0YXRpYyBpbnQgcGh5X3JlZ2lzdGVyX2ZpeHVwKGNvbnN0IGNoYXIgKmJ1c19pZCwgdTMyIHBoeV91aWQsIHUzMiBwaHlfdWlkX21hc2ssXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00NTktLyogUmVnaXN0ZXJzIGEgZml4dXAgdG8gYmUgcnVuIG9uIGFueSBQSFkgd2l0aCB0aGUgVUlEIGluIHBoeV91aWQgKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NDYwOmludCBwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX3VpZCh1MzIgcGh5X3VpZCwgdTMyIHBoeV91aWRfbWFzayxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDYxLVx0XHRcdCAgICAgICBpbnQgKCpydW4pKHN0cnVjdCBwaHlfZGV2aWNlICopKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDY1PUVYUE9SVF9TWU1CT0wocGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl91aWQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDY3LS8qIFJlZ2lzdGVycyBhIGZpeHVwIHRvIGJlIHJ1biBvbiB0aGUgUEhZIHdpdGggaWQgc3RyaW5nIGJ1c19pZCAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0Njg6aW50IHBoeV9yZWdpc3Rlcl9maXh1cF9mb3JfaWQoY29uc3QgY2hhciAqYnVzX2lkLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00NjktXHRcdFx0ICAgICAgaW50ICgqcnVuKShzdHJ1Y3QgcGh5X2RldmljZSAqKSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTQ4OD1zdGF0aWMgaW50IHBoeV9zY2FuX2ZpeHVwcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTIxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo1MjI6aW50IGdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTUyMy1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU2MT1waHlfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01NjYtfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo1Njc6c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9pZCk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU2OC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU3MD1waHlfaW50ZXJmYWNlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTgxLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NTgyOnN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfaW50ZXJmYWNlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTgzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NTg1PXBoeV9oYXNfZml4dXBzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU5MS19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjU5MjpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocGh5X2hhc19maXh1cHMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01OTMtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU5ND1zdGF0aWMgc3NpemVfdCBwaHlfZGV2X2ZsYWdzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNjAxLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NjAyOnN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfZGV2X2ZsYWdzKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNjAzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NjE3PXN0YXRpYyBzc2l6ZV90IG1tZCMjbiMjX2RldmljZV9pZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgXFxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTYyMy19IFxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjYyNDpzdGF0aWMgREVWSUNFX0FUVFJfUk8obW1kIyNuIyNfZGV2aWNlX2lkKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy02MjUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDAyPXN0YXRpYyBpbnQgZ2V0X3BoeV9jMjJfaWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiAqcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTAzMy0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTAzNDppbnQgZndub2RlX2dldF9waHlfaWQoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgdTMyICpwaHlfaWQpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwMzUte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTEwMz1FWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTQyPUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTUxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTUyOnZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE1My17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTY0PUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZW1vdmUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE3MzppbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNzQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTIxMj1zdGF0aWMgdm9pZCBwaHlfcHJlcGFyZV9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjI0LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjI1OmludCBwaHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIyNi1cdFx0ICAgICAgIHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyODY9RVhQT1JUX1NZTUJPTChwaHlfY29ubmVjdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjkyLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjkzOnZvaWQgcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI5NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzI1PXN0YXRpYyBpbnQgcGh5X3BvbGxfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNDAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzNDE6aW50IHBoeV9pbml0X2h3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNDIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTM4OD1FWFBPUlRfU1lNQk9MKHBoeV9pbml0X2h3KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM4OS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM5MDp2b2lkIHBoeV9hdHRhY2hlZF9pbmZvKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTEte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTM5ND1FWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hlZF9pbmZvKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTYtI2RlZmluZSBBVFRBQ0hFRF9GTVQgXCYjMzQ7YXR0YWNoZWQgUEhZIGRyaXZlciAlcyhtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JXMpXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTc6Y2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTQxNz1FWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hlZF9pbmZvX2lycSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MTgtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE0MTk6dm9pZCBwaHlfYXR0YWNoZWRfcHJpbnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MjAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTQ3MD1waHlfc3RhbmRhbG9uZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDc2LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTQ3NzpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocGh5X3N0YW5kYWxvbmUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDc4LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTg0Nz1zdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg2Ni0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg2NzppbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg2OC1cdFx0ICAgICAgdTMyIGZsYWdzLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjAyOD1FWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMzYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIwMzc6dm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMzgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjExMD1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTExLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMTEyOmludCBwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTEzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIxMzY9RVhQT1JUX1NZTUJPTChwaHlfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIxMzctXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIxMzg6aW50IF9fcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTM5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIxNTQ9RVhQT1JUX1NZTUJPTChfX3BoeV9yZXN1bWUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTU1LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMTU2OmludCBwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIxNTcte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjE2Nj1FWFBPUlRfU1lNQk9MKHBoeV9yZXN1bWUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjE3Ni0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjE3NzppbnQgcGh5X3Jlc2V0X2FmdGVyX2Nsa19lbmFibGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjE3OC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMjU2PXN0YXRpYyBpbnQgZ2VucGh5X2MzN19jb25maWdfYWR2ZXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMjg3LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMjg4OmludCBnZW5waHlfc2V0dXBfZm9yY2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIyODkte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjMwMj1zdGF0aWMgaW50IGdlbnBoeV9zZXR1cF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzMzMtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIzMzQ6aW50IGdlbnBoeV9yZWFkX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzM1LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIzNzk9RVhQT1JUX1NZTUJPTChnZW5waHlfcmVhZF9tYXN0ZXJfc2xhdmUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjM4NC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjM4NTppbnQgZ2VucGh5X3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzg2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIzOTE9RVhQT1JUX1NZTUJPTChnZW5waHlfcmVzdGFydF9hbmVnKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzOTktICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI0MDA6aW50IGdlbnBoeV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydClcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQwMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNDIxPUVYUE9SVF9TWU1CT0woZ2VucGh5X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQzMS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjQzMjppbnQgX19nZW5waHlfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBjaGFuZ2VkKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNDMzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI0Nzg9RVhQT1JUX1NZTUJPTChfX2dlbnBoeV9jb25maWdfYW5lZyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNDg4LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNDg5OmludCBnZW5waHlfYzM3X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI0OTAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjUyNj1FWFBPUlRfU1lNQk9MKGdlbnBoeV9jMzdfY29uZmlnX2FuZWcpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjUzNS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjUzNjppbnQgZ2VucGh5X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNTM3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI1NDI9RVhQT1JUX1NZTUJPTChnZW5waHlfYW5lZ19kb25lKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1NTEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI1NTI6aW50IGdlbnBoeV91cGRhdGVfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNTUzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI1OTU9RVhQT1JUX1NZTUJPTChnZW5waHlfdXBkYXRlX2xpbmspO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNTk2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNTk3OmludCBnZW5waHlfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjU5OC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNjQyPUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfbHBhKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI2NTAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI2NTE6aW50IGdlbnBoeV9yZWFkX3N0YXR1c19maXhlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNjUyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI2NzI9RVhQT1JUX1NZTUJPTChnZW5waHlfcmVhZF9zdGF0dXNfZml4ZWQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY4Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjY4MzppbnQgZ2VucGh5X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI2ODQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjcyMz1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZWFkX3N0YXR1cyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNzM1LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNzM2OmludCBnZW5waHlfYzM3X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgKmNoYW5nZWQpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI3Mzcte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mjc4Nz1FWFBPUlRfU1lNQk9MKGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjc5Ny0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mjc5ODppbnQgZ2VucGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjc5OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yODI2PUVYUE9SVF9TWU1CT0woZ2VucGh5X3NvZnRfcmVzZXQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yODI3LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyODI4OmlycXJldHVybl90IGdlbnBoeV9oYW5kbGVfaW50ZXJydXB0X25vX2FjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yODI5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI4Mzk9RVhQT1JUX1NZTUJPTChnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2spO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjg0OS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mjg1MDppbnQgZ2VucGh5X3JlYWRfYWJpbGl0aWVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI4NTEte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mjg5ND1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZWFkX2FiaWxpdGllcyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTAxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTAyOmludCBnZW5waHlfcmVhZF9tbWRfYzQ1KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sIHUxNiByZWdudW0pXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MDMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjkwOT1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZWFkX21tZF9jNDUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTEwLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTExOmludCBnZW5waHlfd3JpdGVfbW1kX2M0NShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2bnVtLCB1MTYgcmVnbnVtLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTEyLVx0XHRcdCB1MTYgdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjkxOT1FWFBPUlRfU1lNQk9MKGdlbnBoeV93cml0ZV9tbWRfYzQ1KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MjQtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI5MjU6aW50IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZhZCwgdTE2IHJlZ251bSlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjkyNi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTI5PUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjkzMC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjkzMTppbnQgZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZudW0sXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MzItXHRcdFx0XHQgdTE2IHJlZ251bSwgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI5MzY9RVhQT1JUX1NZTUJPTChnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjkzNy1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjkzODppbnQgZ2VucGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjkzOS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTQyPUVYUE9SVF9TWU1CT0woZ2VucGh5X3N1c3BlbmQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTQzLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTQ0OmludCBnZW5waHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5NDUte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mjk0OD1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZXN1bWUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTQ5LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTUwOmludCBnZW5waHlfbG9vcGJhY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsIGludCBzcGVlZClcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjk1MS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTc5PUVYUE9SVF9TWU1CT0woZ2VucGh5X2xvb3BiYWNrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5ODktICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI5OTA6dm9pZCBwaHlfcmVtb3ZlX2xpbmtfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgbGlua19tb2RlKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTkxLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI5OTc9c3RhdGljIHZvaWQgcGh5X2NvcHlfcGF1c2VfYml0cyh1bnNpZ25lZCBsb25nICpkc3QsIHVuc2lnbmVkIGxvbmcgKnNyYylcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwMTEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMwMTI6dm9pZCBwaHlfYWR2ZXJ0aXNlX3N1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMDEzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMwMjA9RVhQT1JUX1NZTUJPTChwaHlfYWR2ZXJ0aXNlX3N1cHBvcnRlZCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMDMxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMDMyOnZvaWQgcGh5X2FkdmVydGlzZV9lZWVfYWxsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwMzMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzAzNz1FWFBPUlRfU1lNQk9MX0dQTChwaHlfYWR2ZXJ0aXNlX2VlZV9hbGwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzA1OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzA1OTp2b2lkIHBoeV9zdXBwb3J0X2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMDYwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMwODA9RVhQT1JUX1NZTUJPTChwaHlfc3VwcG9ydF9lZWUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzA4OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzA4OTp2b2lkIHBoeV9kaXNhYmxlX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMDkwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMwOTc9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2Rpc2FibGVfZWVlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMDUtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMxMDY6dm9pZCBwaHlfc3VwcG9ydF9zeW1fcGF1c2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzEwNy17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMTExPUVYUE9SVF9TWU1CT0wocGh5X3N1cHBvcnRfc3ltX3BhdXNlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMTgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMxMTk6dm9pZCBwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMjAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzEyMz1FWFBPUlRfU1lNQk9MKHBoeV9zdXBwb3J0X2FzeW1fcGF1c2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzEzNS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzEzNjp2b2lkIHBoeV9zZXRfc3ltX3BhdXNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcngsIGJvb2wgdHgsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMzctXHRcdCAgICAgICBib29sIGF1dG9uZWcpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMTQ3PUVYUE9SVF9TWU1CT0wocGh5X3NldF9zeW1fcGF1c2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzE1OS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzE2MDp2b2lkIHBoeV9zZXRfYXN5bV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJ4LCBib29sIHR4KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMTYxLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMxNzE9RVhQT1JUX1NZTUJPTChwaHlfc2V0X2FzeW1fcGF1c2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzE4MS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzE4Mjpib29sIHBoeV92YWxpZGF0ZV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMTgzLVx0XHRcdHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzE5Nj1FWFBPUlRfU1lNQk9MKHBoeV92YWxpZGF0ZV9wYXVzZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMjA5LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMjEwOnZvaWQgcGh5X2dldF9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICp0eF9wYXVzZSwgYm9vbCAqcnhfcGF1c2UpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMyMTEte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzIzMD1zdGF0aWMgaW50IHBoeV9nZXRfdTMyX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwgdTMyICp2YWwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMjUwLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMjUxOnMzMiBwaHlfZ2V0X2ludGVybmFsX2RlbGF5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGludCAqZGVsYXlfdmFsdWVzLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMjUyLVx0XHRcdCAgIGludCBzaXplLCBib29sIGlzX3J4KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzMxMz1FWFBPUlRfU1lNQk9MKHBoeV9nZXRfaW50ZXJuYWxfZGVsYXkpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzMyMy0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzMyNDppbnQgcGh5X2dldF90eF9hbXBsaXR1ZGVfZ2FpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMzMjUtXHRcdFx0ICAgICAgZW51bSBldGh0b29sX2xpbmtfbW9kZV9iaXRfaW5kaWNlcyBsaW5rbW9kZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMzMzc9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2dldF90eF9hbXBsaXR1ZGVfZ2Fpbik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMzQ2LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMzQ3OmludCBwaHlfZ2V0X21hY190ZXJtaW5hdGlvbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMzNDgtXHRcdFx0ICAgIHUzMiAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzcyOD1FWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM3MzUtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM3MzY6dm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzM3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTQwNTI9c3RhdGljIHZvaWQgcGh5X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZHJpdmVyICpkcnYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDU2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0MDU3OmludCBwaHlfZHJpdmVyc19yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqbmV3X2RyaXZlciwgaW50IG4sXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNTgtXHRcdFx0IHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDA3Mj1FWFBPUlRfU1lNQk9MKHBoeV9kcml2ZXJzX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDA3My1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NDA3NDp2b2lkIHBoeV9kcml2ZXJzX3VucmVnaXN0ZXIoc3RydWN0IHBoeV9kcml2ZXIgKmRydiwgaW50IG4pXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM2MwoJCQkJCQkJb3V0cHV0OiA3MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBoeSBEcml2ZXIgRXhwb3J0IFN0YXR1cyoqCgpBbHJpZ2h0LCBzbyBgcGh5X3NldF91cHN0cmVhbV9wb3J0YCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCBub3RlZC4gSSYjMzk7bSBtb3Zpbmcgb24gdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIFBIWSBzdWJzeXN0ZW0uIFRoYXQgbGVhZHMgbWUgdG8gaW1tZWRpYXRlbHkgd29uZGVyIGFib3V0IHRoZSByb2xlIG9mIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYC4gSSBuZWVkIHRvIGFzc2VzcyBob3cgdGhlIGV4cG9ydCBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBmdW5jdGlvbmFsaXR5IG1hbmFnZWQgYnkgYHBoeWxpbmsuY2AuIERvZXMgaXQgaW1wYWN0IGxpbmsgc3RhdGUgaGFuZGxpbmcsIGF1dG9uZWdvdGlhdGlvbiBzZXR1cCwgb3IgYW55IG90aGVyIGNyaXRpY2FsIFBIWSBvcGVyYXRpb25hbCBhcmVhcyB0aGF0IHRoYXQgZmlsZSB0eXBpY2FsbHkgaGFuZGxlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgZmxvdyB0byBkZXRlcm1pbmUgaWYgdGhpcyBleHBvcnQgY3JlYXRlcyBhbnkgb3Bwb3J0dW5pdGllcyBvciwgcG90ZW50aWFsbHksIHVuZm9yZXNlZW4gY29uc2VxdWVuY2VzIHdpdGhpbiB0aGUgUEhZIGZyYW1ld29yay4gTXkgdGhvdWdodCBwcm9jZXNzIGlzIG5vdyBjZW50ZXJpbmcgb24gdGhlIGludGVyY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSpcXHMmIzQzO1xcKipbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTE0MD1zdGF0aWMgY29uc3QgcGh5X2ludGVyZmFjZV90IHBoeWxpbmtfc2ZwX2ludGVyZmFjZV9wcmVmZXJlbmNlW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNTMtXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE1NDpzdGF0aWMgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0socGh5bGlua19zZnBfaW50ZXJmYWNlcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE1NS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE2MS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTYyOnZvaWQgcGh5bGlua19zZXRfcG9ydF9tb2Rlcyh1bnNpZ25lZCBsb25nICptYXNrKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNjMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mzc0PXN0YXRpYyB2b2lkIHBoeWxpbmtfY2Fwc190b19saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzk1LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozOTY6dm9pZCBwaHlsaW5rX2xpbWl0X21hY19zcGVlZChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIG1heF9zcGVlZClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzk3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTk4Mz1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19wb2xsX3N0YXJ0KHN0cnVjdCBwaHlsaW5rICpwbClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTk4OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6OTg5OmludCBwaHlsaW5rX3Bjc19wcmVfaW5pdChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy05OTAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTgxNj1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4NTctICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4NTg6aW50IHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IHBoeWxpbmsgKnBsLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODU5LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTk5Mz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2NyZWF0ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMDAzLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMDA0OnZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjAwNS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMDE0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZGVzdHJveSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMDI0LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMDI1OmJvb2wgcGh5bGlua19leHBlY3RzX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIwMjYte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjI2Mz1zdGF0aWMgaW50IHBoeWxpbmtfYXR0YWNoX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjk2LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjk3OmludCBwaHlsaW5rX2Nvbm5lY3RfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjI5OC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzE3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY29ubmVjdF9waHkpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjMzMC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjMzMTppbnQgcGh5bGlua19vZl9waHlfY29ubmVjdChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzMzItXHRcdFx0ICAgdTMyIGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjMzNj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX29mX3BoeV9jb25uZWN0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzNDgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIzNDk6aW50IHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0KHN0cnVjdCBwaHlsaW5rICpwbCxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjM1MC1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzOTU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19md25vZGVfcGh5X2Nvbm5lY3QpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQwMy0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQwNDp2b2lkIHBoeWxpbmtfZGlzY29ubmVjdF9waHkoc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDA1LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI0MzA9c3RhdGljIHZvaWQgcGh5bGlua19saW5rX2NoYW5nZWQoc3RydWN0IHBoeWxpbmsgKnBsLCBib29sIHVwLCBjb25zdCBjaGFyICp3aGF0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ0NS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ0Njp2b2lkIHBoeWxpbmtfbWFjX2NoYW5nZShzdHJ1Y3QgcGh5bGluayAqcGwsIGJvb2wgdXApXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI0NDcte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjQ1MD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21hY19jaGFuZ2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ2Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ2Mzp2b2lkIHBoeWxpbmtfcGNzX2NoYW5nZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgYm9vbCB1cClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ2NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNDcyPXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlsaW5rX2xpbmtfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ4OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ4OTp2b2lkIHBoeWxpbmtfc3RhcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDkwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI1NDU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zdGFydCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTU4LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTU5OnZvaWQgcGh5bGlua19zdG9wKHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU2MC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNTc5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3RvcCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTg4LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTg5OnZvaWQgcGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhzdHJ1Y3QgcGh5bGluayAqcGwpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1OTAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjYwOD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MTctICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2MTg6dm9pZCBwaHlsaW5rX3J4X2Nsa19zdG9wX3VuYmxvY2soc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjE5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI2NTA9c3RhdGljIGJvb2wgcGh5bGlua19waHlfcG1fc3BlZWRfY3RybChzdHJ1Y3QgcGh5bGluayAqcGwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjcyLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjczOnZvaWQgcGh5bGlua19zdXNwZW5kKHN0cnVjdCBwaHlsaW5rICpwbCwgYm9vbCBtYWNfd29sKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjc0LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI3MDk9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zdXNwZW5kKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3MTgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI3MTk6dm9pZCBwaHlsaW5rX3ByZXBhcmVfcmVzdW1lKHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjcyMC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNzM0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcHJlcGFyZV9yZXN1bWUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjc0Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjc0Mzp2b2lkIHBoeWxpbmtfcmVzdW1lKHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjc0NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNzc3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcmVzdW1lKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3ODctICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI3ODg6dm9pZCBwaHlsaW5rX2V0aHRvb2xfZ2V0X3dvbChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjc4OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yODE0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfd29sKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI4MjYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI4Mjc6aW50IHBoeWxpbmtfZXRodG9vbF9zZXRfd29sKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yODI4LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5NDY9c3RhdGljIHZvaWQgcGh5bGlua19nZXRfa3NldHRpbmdzKGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk2OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjk2OTppbnQgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoc3RydWN0IHBoeWxpbmsgKnBsLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTcwLVx0XHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMwMTQ9c3RhdGljIGJvb2wgcGh5bGlua192YWxpZGF0ZV9wY3NfaW5iYW5kX2F1dG9uZWcoc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzAzOC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzAzOTppbnQgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoc3RydWN0IHBoeWxpbmsgKnBsLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMDQwLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMyMDI9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzIxNC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzIxNTppbnQgcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQoc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMjE2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMyMjc9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX253YXlfcmVzZXQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzIzMy0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzIzNDp2b2lkIHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgcGh5bGluayAqcGwsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyMzUtXHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMjQzPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMjQ5LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjUwOmludCBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMjUxLVx0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzI5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzQwLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMzQxOmludCBwaHlsaW5rX2dldF9lZWVfZXJyKHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM0Mi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzUyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZ2V0X2VlZV9lcnIpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM1OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM1OTppbnQgcGh5bGlua19ldGh0b29sX2dldF9lZWUoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZWUpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzNjAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM3OD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzg0LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMzg1OmludCBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVlZSlcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM4Ni17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNTUyPXN0YXRpYyBpbnQgcGh5bGlua19taWlfd3JpdGUoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBpbnQgcGh5X2lkLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzU4Ni0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzU4NzppbnQgcGh5bGlua19taWlfaW9jdGwoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzU4OC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNjQ1PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2lvY3RsKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM2NTgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM2NTk6aW50IHBoeWxpbmtfc3BlZWRfZG93bihzdHJ1Y3QgcGh5bGluayAqcGwsIGJvb2wgc3luYylcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzY2MC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNjcwPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3BlZWRfZG93bik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNjgxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNjgyOmludCBwaHlsaW5rX3NwZWVkX3VwKHN0cnVjdCBwaHlsaW5rICpwbClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzY4My17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00MDk1PXN0YXRpYyBzdHJ1Y3Qge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDExMC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDExMTp2b2lkIHBoeWxpbmtfcmVzb2x2ZV9jNzMoc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQxMTIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDE1OD1zdGF0aWMgdm9pZCBwaHlsaW5rX2RlY29kZV9zZ21paV93b3JkKHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDE5NC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDE5NTp2b2lkIHBoeWxpbmtfZGVjb2RlX3VzeGdtaWlfd29yZChzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDE5Ni1cdFx0XHRcdCB1aW50MTZfdCBscGEpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00MjQwPXN0YXRpYyB2b2lkIHBoeWxpbmtfZGVjb2RlX3VzZ21paV93b3JkKHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDI3OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDI3OTp2b2lkIHBoeWxpbmtfbWlpX2MyMl9wY3NfZGVjb2RlX3N0YXRlKHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MjgwLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG5lZ19tb2RlLCB1MTYgYm1zciwgdTE2IGxwYSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQzMjY9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM0Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDM0Mzp2b2lkIHBoeWxpbmtfbWlpX2MyMl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBtZGlvX2RldmljZSAqcGNzLFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MzQ0LVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDM1OD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21paV9jMjJfcGNzX2dldF9zdGF0ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MzczLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0Mzc0OmludCBwaHlsaW5rX21paV9jMjJfcGNzX2VuY29kZV9hZHZlcnRpc2VtZW50KHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQzNzUtXHRcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00Mzk4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2MyMl9wY3NfZW5jb2RlX2FkdmVydGlzZW1lbnQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDQxMS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDQxMjppbnQgcGh5bGlua19taWlfYzIyX3Bjc19jb25maWcoc3RydWN0IG1kaW9fZGV2aWNlICpwY3MsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ0MTMtXHRcdFx0ICAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00NDQyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2MyMl9wY3NfY29uZmlnKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ0NTQtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQ0NTU6dm9pZCBwaHlsaW5rX21paV9jMjJfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IG1kaW9fZGV2aWNlICpwY3MpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ0NTYte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDQ2NT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21paV9jMjJfcGNzX2FuX3Jlc3RhcnQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NDY2LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0NDY3OnZvaWQgcGh5bGlua19taWlfYzQ1X3Bjc19nZXRfc3RhdGUoc3RydWN0IG1kaW9fZGV2aWNlICpwY3MsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ0NjgtXHRcdFx0XHQgICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQ0OTQ9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19taWlfYzQ1X3Bjc19nZXRfc3RhdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDUwOC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDUwOTp2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4oc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NTEwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQ1MTU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19yZXBsYXlfbGlua19iZWdpbik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NTMxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0NTMyOnZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NTMzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0ODAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlbGV2YW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlOgoKKiAgIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgCiogICBgZXRobmxfcG9ydF9kdW1waXRgCiogICBgZXRobmxfcG9ydF9kdW1wX2RvbmVgCiogICBgcGh5X2xpbmtfdG9wb19hZGRfcG9ydGAKKiAgIGBwaHlfbGlua190b3BvX2RlbF9wb3J0YAoqICAgYHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNgCiogICBgcGh5X3NldF91cHN0cmVhbV9wb3J0YAoKSSBxdWlja2x5IHJlYWxpemVkIHRoZSBmaXJzdCB0aHJlZSBhcmUgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AuIEkgY2hlY2tlZCBmb3Igb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSwgYnV0IEkgY29uZmlybWVkIHRoYXQgdGhvc2UgYXJlIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb25zLgoKSSB3YXMgYnJpZWZseSBjb25jZXJuZWQgYWJvdXQgdGhlIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLCBsaWtlIGBwb3J0X3BhcnNlX3JlcXVlc3RgLCBgcG9ydF9wcmVwYXJlX2RhdGFgLCBgcG9ydF9yZXBseV9zaXplYCwgYW5kIGBwb3J0X2ZpbGxfcmVwbHlgLCB1c2VkIHdpdGhpbiBgbmV0L2V0aHRvb2wvcG9ydC5jYC4gQWx0aG91Z2ggdGhleSBhcmUgc3RhdGljLCBJIHJlY29nbml6ZWQgdGhleSYjMzk7cmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYGV0aG5sX3BvcnRfcmVxdWVzdF9vcHNgLCBzbyB0aGV5IGxpa2VseSBhcmVuJiMzOTt0IGlubGluZWQuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgZW1waGFzaXplcyBwcmlvcml0aXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLCBzbyBJJiMzOTttIHN0aWNraW5nIHdpdGggdGhlIG9yaWdpbmFsIGxpc3QuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgd2lsbCBiZSB0aGUgY29yZSBvZiB0aGUgYGRvaXRgIGNvbW1hbmQsIHNvIEkmIzM5O2xsIGtlZXAgdGhlbSBpbiBtaW5kLCBidXQgd29uJiMzOTt0IGluY2x1ZGUgdGhlbSBpbiB0aGUgZmluYWwgbGlzdCBmb3Igbm93LiBgZXRobmxfZGVmYXVsdF9kb2l0YCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgdG8gdGhhdCBsb2dpYy4KClRoZW4gSSBjb25zaWRlcmVkIG90aGVyIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AgYW5kIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCBsaWtlIGBwaHlfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlfZGVsX3NmcF9tb2RfcG9ydGAsIGBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0YCwgZXRjLiBidXQgdGhleSB3ZXJlIGFsbCBzdGF0aWMsIHNvIEkgaWdub3JlZCB0aGVtLgoKU28gSSBhbSBrZWVwaW5nIG15IGluaXRpYWwgbGlzdC4KCkZvciB0aGUgY29uZmlncywgSSYjMzk7bGwgbmVlZCBgRVRIVE9PTF9ORVRMSU5LYCwgYFBIWUxJQmAsIGFuZCBwb3NzaWJseSBgUEhZTElOS2AuIExldCBtZSBkb3VibGUtY2hlY2sgYFBIWUxJTktgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEhZTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjY6Y29uZmlnIFBIWUxJTktcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTctXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIFNGUCBQb3J0IFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGlzIFNGUCBwb3J0IHN1cHBvcnQgcGF0Y2guIEZpcnN0LCBgUEhZTElOS2AgaXMgdHJpc3RhdGUsIHNvIHRoYXQgZGVmaW5pdGVseSBnZXRzIGluY2x1ZGVkLiBMZXQmIzM5O3Mgc2VlLi4uIGBFVEhUT09MX05FVExJTktgIGlzIGRlZmF1bHQgeWVzLCBidXQgSSYjMzk7bSBnb2luZyB0byBsaXN0IGl0IGFueXdheSwganVzdCB0byBiZSB0aG9yb3VnaC4gVGhlbiwgYFBIWUxJQmAgYW5kIGBQSFlMSU5LYCBhcmUgYm90aCB0cmlzdGF0ZSwgc28gd2UgYWRkIHRob3NlIGFzIHdlbGwuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vdGhpbmcgZWxzZSByZXF1aXJlZDsgaXMgdGhlcmUgc29tZXRoaW5nIGxpa2UgYE1BQ0JgIG9yIGFub3RoZXIgZHJpdmVyIHRoYXQgd291bGQgbmVlZCB0byBiZSBlbmFibGVkIGZvciBhbiBTRlAgdGVzdD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyBjb21wbGV0ZWx5IHNlbGYgY29udGFpbmVkLiBSaWdodCwgdGhlIHBhdGNoIGFkZHMgU0ZQIHBvcnQgc3VwcG9ydCwgc28gbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSB0aGluayBJIHdpbGwgbmVlZCB0byBjaGVjayBpZiBgQ09ORklHX1NGUGAgaXMgZXZlbiByZXF1aXJlZCwgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIGluY2x1ZGUgdGhhdCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNGUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NjU9Y29uZmlnIFJVU1RfUEhZTElCX0FCU1RSQUNUSU9OU1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTcyLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NzM6Y29uZmlnIFNGUFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzQtXHR0cmlzdGF0ZSBcJiMzNDtTRlAgY2FnZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlNGUCBDYWdlIEVuYWJsZW1lbnQgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIGRlZmluaXRlbHkgcmVsYXRlZCB0byB0aGUgU0ZQIGNhZ2Ugc3VwcG9ydC4gSSBuZWVkIHRvIGdldCB0aGlzIHJpZ2h0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHNvbGlkIGFmZmlybWF0aW9uOiB5ZXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19TRlBgIGlzIGVuYWJsZWQuIFRoYXQgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBmaXJzdCBzdGVwLiBOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgZGV0YWlscyBmb3IgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbj8gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgaW4gdGhlIG5ldHdvcmsgUEhZIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBvcGVuIHVwIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgSSBjYW4gdW5jb3ZlciByZWdhcmRpbmcgdGhlIGBTRlBgIEtjb25maWcgb3B0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHQgICAgICAgICAgQWRkcyBzdXBwb3J0IG5lZWRlZCBmb3IgUEhZIGRyaXZlcnMgd3JpdHRlbiBpbiBSdXN0LiBJdCBwcm92aWRlc1xuICA3MTpcdCAgICAgICAgICBhIHdyYXBwZXIgYXJvdW5kIHRoZSBDIHBoeWxpYiBjb3JlLlxuICA3MjpcdFxuICA3MzpcdGNvbmZpZyBTRlBcbiAgNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O1NGUCBjYWdlIHN1cHBvcnRcJiMzNDtcbiAgNzU6XHRcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBQSFlMSU5LXG4gIDc2Olx0XHRkZXBlbmRzIG9uIEhXTU9OIHx8IEhXTU9OPW5cbiAgNzc6XHRcdHNlbGVjdCBNRElPX0kyQ1xuICA3ODpcdFxuICA3OTpcdGNvbW1lbnQgXCYjMzQ7TUlJIFBIWSBkZXZpY2UgZHJpdmVyc1wmIzM0O1xuICA4MDpcdFxuICA4MTpcdGNvbmZpZyBBUzIxWFhYX1BIWVxuICA4MjpcdFx0dHJpc3RhdGUgXCYjMzQ7QWVvbnNlbWkgQVMyMXh4eCBQSFlzXCYjMzQ7XG4gIDgzOlx0XHRoZWxwXG4gIDg0Olx0XHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgQWVvbnNlbWkgQVMyMXh4eCBQSFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTI5CgkJCQkJCQlvdXRwdXQ6IDIxMQoJCQkJCQkJdGhvdWdodHM6IDQwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU0ZQIEludGVncmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIFNGUCBzdXBwb3J0IHdpdGhpbiB0aGUgUEhZIGZyYW1ld29yayBhbmQgZXhwb3NlcyBhIG5ldyBuZXRsaW5rIEFQSSBmb3IgZ2V0dGluZyBwaHlzaWNhbCBwb3J0IGluZm9ybWF0aW9uLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgQ09ORklHX1NGUGAgKmRlZmluaXRlbHkqIGRlcGVuZHMgb24gYEkyQ2AgYW5kIGBQSFlMSU5LYC4gIEkgc2hvdWxkIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRob3NlIGRlcGVuZGVuY2llcyBpbiBteSBidWlsZC4gQW5kIEkmIzM5O2xsIGFkZCBgUEhZTElCYCwgYEVUSFRPT0xfTkVUTElOS2AsIGFuZCBvZiBjb3Vyc2UgYFNGUGAgaXRzZWxmLgoKVGhlIGNvcmUgb2YgdGhpcyBpcyB0aGUgbmV3IGBQT1JUX0dFVGAgY29tbWFuZCBpbiBldGh0b29sIG5ldGxpbmsuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBtYWpvciBvbmUgc2luY2Ugd2UmIzM5O3JlIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggdGhlIFBIWS9waHlsaW5rIGxvZ2ljIHRoYXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuIFRyYW5zbGF0aW9uOiAqVGhpcyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgZnV6emluZy4qICBXZSYjMzk7cmUgZXhwb3NpbmcgbmV3IEFQSXMsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyByb2J1c3QuCgpMZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIHNwZWNpZmljIHN5bWJvbHMgSSBzaG91bGQgZm9jdXMgb24gZm9yIGZ1enppbmcgYW5kIGNvdmVyYWdlLiBJJiMzOTttIHRoaW5raW5nOgoKKiAgIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgCiogICBgZXRobmxfcG9ydF9kdW1waXRgCiogICBgZXRobmxfcG9ydF9kdW1wX2RvbmVgCiogICBgcGh5X2xpbmtfdG9wb19hZGRfcG9ydGAKKiAgIGBwaHlfbGlua190b3BvX2RlbF9wb3J0YAoqICAgYHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNgCiogICBgcGh5X3NldF91cHN0cmVhbV9wb3J0YAoKVGhvc2Ugc2VlbSBsaWtlIHRoZSBjcnVjaWFsIGVudHJ5IGFuZCBleGl0IHBvaW50cyBmb3IgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LgoKQW5kIGxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayBteSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llczoKCiogICBgRVRIVE9PTF9ORVRMSU5LYCAtIG9idmlvdXNseSBhIGtleSBvbmUuCiogICBgUEhZTElCYCAtIGZ1bmRhbWVudGFsLCBmb3IgdGhlIFBIWSBmcmFtZXdvcmsgaXRzZWxmLgoqICAgYFBIWUxJTktgIC0gdGhlIGxpbmsgYmV0d2VlbiB0aGUgUEhZIGFuZCB0aGUgbmV0d29yay4KKiAgIGBTRlBgIC0gdGhlIGZlYXR1cmUgdGhhdCYjMzk7cyBkcml2aW5nIHRoZSBjaGFuZ2UuCiogICBgSTJDYCAtIGZvciBTRlAvbW9kdWxlIGludGVyYWN0aW9uLgoKSG1tLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHBvcnRfcGFyc2VfcmVxdWVzdGAgYW5kIHRoZSBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIGludm9sdmVkIGluIHByb2Nlc3NpbmcgcmVxdWVzdHMgYXJlIGV2ZW4gd29ydGggY29uc2lkZXJpbmcuIFRoZXkmIzM5O3JlIHN0YXRpYywgc28gaWYgdGhleSBhcmUgaW5saW5lZCwgdGhlaXIgc3ltYm9scyB3b24mIzM5O3QgYmUgZGlzdGluY3QsIGJ1dCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuIGluIGBldGhubF9wb3J0X3JlcXVlc3Rfb3BzYCwgc28gdGhhdCBzdWdnZXN0cyB0aGV5IGFyZSBub3QgaW5saW5lZC4gU2luY2Ugc3l6a2FsbGVyLCBhbmQgZ2VuZXJhbGx5IGNvdmVyYWdlIHRyYWNraW5nLCB1c2VzIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgc3ltYm9scywgSSYjMzk7bGwgc3RpY2sgdG8gbGlzdGluZyB0aG9zZSBub24tc3RhdGljIHN5bWJvbHMuCgpMZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQgYHBvcnRfcGFyc2VfcmVxdWVzdGAgaXMgaW5kZWVkIGluIGBuZXQvZXRodG9vbC9wb3J0LmNgLiAqWWVzLCBpdCBpcyouIE9rYXksIGdyZWF0LCBJIGNhbiBqdXN0IHByb3ZpZGUgdGhlIG5vbi1zdGF0aWMgb25lcy4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgc29saWQgcGxhbiBoZXJlLiBJJiMzOTtsbCBmbGFnIHRoaXMgYXMgbmVlZGluZyBjb3ZlcmFnZSB0ZXN0aW5nLiBBbmQgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFVEhUT09MX05FVExJTksmIzM0OywKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1BIWUxJTksmIzM0OywKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O0kyQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBpdCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBfZG9uZSYjMzQ7LAogICAgJiMzNDtwaHlfbGlua190b3BvX2FkZF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fZGVsX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyYjMzQ7LAogICAgJiMzNDtwaHlfc2V0X3Vwc3RyZWFtX3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZCBgUE9SVF9HRVRgIHRvIHJldHJpZXZlIHBoeXNpY2FsIHBvcnQgaW5mb3JtYXRpb24sIGFuZCBhZGRzIFNGUCBwb3J0IHN1cHBvcnQgdG8gdGhlIFBIWSBmcmFtZXdvcmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IG5ldGxpbmsgQVBJcyBhbmQgbW9kaWZpZXMgY29yZSBQSFkvcGh5bGluayBsb2dpYywgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGV0aHRvb2wgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7UEhZTElOSyYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7STJDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb19kZWxfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzJiMzNDssCiAgICAmIzM0O3BoeV9zZXRfdXBzdHJlYW1fcG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIGBQT1JUX0dFVGAgdG8gcmV0cmlldmUgcGh5c2ljYWwgcG9ydCBpbmZvcm1hdGlvbiwgYW5kIGFkZHMgU0ZQIHBvcnQgc3VwcG9ydCB0byB0aGUgUEhZIGZyYW1ld29yay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgbmV0bGluayBBUElzIGFuZCBtb2RpZmllcyBjb3JlIFBIWS9waHlsaW5rIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjE4LjAzOTg3Mzk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5NjI2NTcwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVRIVE9PTF9ORVRMSU5LXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlBIWUxJTktcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiSTJDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXRobmxfcG9ydF9kdW1wX3N0YXJ0XCIsXG4gICAgXCJldGhubF9wb3J0X2R1bXBpdFwiLFxuICAgIFwiZXRobmxfcG9ydF9kdW1wX2RvbmVcIixcbiAgICBcInBoeV9saW5rX3RvcG9fYWRkX3BvcnRcIixcbiAgICBcInBoeV9saW5rX3RvcG9fZGVsX3BvcnRcIixcbiAgICBcInBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNcIixcbiAgICBcInBoeV9zZXRfdXBzdHJlYW1fcG9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQgYFBPUlRfR0VUYCB0byByZXRyaWV2ZSBwaHlzaWNhbCBwb3J0IGluZm9ybWF0aW9uLCBhbmQgYWRkcyBTRlAgcG9ydCBzdXBwb3J0IHRvIHRoZSBQSFkgZnJhbWV3b3JrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBuZXRsaW5rIEFQSXMgYW5kIG1vZGlmaWVzIGNvcmUgUEhZL3BoeWxpbmsgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSBldGh0b29sIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOToxOC4wMzk4Nzk4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzNzg1ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGFiZDUzOThjNTJjYTk4ODYwNjFlYjMwYTgxMjAyMDAyYWU2MmI0YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDEwOjI5OjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuaW5kZXggNWRkNGQxYjVkOTRiYi4uNjdhYzM0MDA0NjJiZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxcbkBAIC0yMTAsNiArMjEwLDExIEBAIGRlZmluaXRpb25zOlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogZGlzY2FyZFxcbiAgICAgICAgIHZhbHVlOiAzMVxcbisgIC1cXG4rICAgIG5hbWU6IHBvcnQtdHlwZVxcbisgICAgZG9jOiB0eXBlIG9mIHBoeXNpY2FsIGNvbm5lY3RvclxcbisgICAgdHlwZTogZW51bVxcbisgICAgZW50cmllczogW21kaSwgc2ZwXVxcbiBcXG4gYXR0cmlidXRlLXNldHM6XFxuICAgLVxcbkBAIC0xOTA1LDYgKzE5MTAsMzIgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgbmFtZTogbGlua1xcbiAgICAgICAgIHR5cGU6IG5lc3RcXG4gICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90XFxuKyAgLVxcbisgICAgbmFtZTogcG9ydFxcbisgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnRcXG4rICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBoZWFkZXJcXG4rICAgICAgICB0eXBlOiBuZXN0XFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlclxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogaWRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1tb2Rlc1xcbisgICAgICAgIHR5cGU6IG5lc3RcXG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtaW50ZXJmYWNlc1xcbisgICAgICAgIHR5cGU6IG5lc3RcXG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiB0eXBlXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZW51bTogcG9ydC10eXBlXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiB1cHN0cmVhbS1wb3J0XFxuKyAgICAgICAgdHlwZTogdTMyXFxuIFxcbiBvcGVyYXRpb25zOlxcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXFxuQEAgLTI4NTksNiArMjg5MCwyOSBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIHdvcnN0LWNoYW5uZWxcXG4gICAgICAgICAgICAgLSBsaW5rXFxuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHBvcnQtZ2V0XFxuKyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZVxcbitcXG4rICAgICAgYXR0cmlidXRlLXNldDogcG9ydFxcbitcXG4rICAgICAgZG86IFxcdTAwMjZwb3J0LWdldC1vcFxcbisgICAgICAgIHJlcXVlc3Q6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGlkXFxuKyAgICAgICAgcmVwbHk6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGlkXFxuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLW1vZGVzXFxuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLWludGVyZmFjZXNcXG4rICAgICAgICAgICAgLSB0eXBlXFxuKyAgICAgICAgICAgIC0gdXBzdHJlYW0tcG9ydFxcbisgICAgICBkdW1wOlxcbisgICAgICAgIHJlcXVlc3Q6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbiBcXG4gbWNhc3QtZ3JvdXBzOlxcbiAgIGxpc3Q6XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcXG5pbmRleCBlOTJhYmY0NWZhZjUwLi5iNDMyNmM4OWIwNzUxIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcXG5AQCAtMjUzNyw2ICsyNTM3LDM5IEBAIFdpdGhpbiBlYWNoIGNoYW5uZWwgbmVzdCwgb25seSB0aGUgbWV0cmljcyBzdXBwb3J0ZWQgYnkgdGhlIFBIWSB3aWxsIGJlIHByZXNlbnQuXFxuIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW5cXG4gYGBpbmNsdWRlL2xpbnV4L3BoeS5oYGAuXFxuIFxcbitQT1JUX0dFVFxcbis9PT09PT09PVxcbitcXG4rUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsXFxuK3JlZmVycmVkIHRvIGFzIFxcXCJwb3J0c1xcXCIuIFVzZXIgbmVlZHMgdG8gc3BlY2lmeSBhIFBPUlRfSUQgZm9yIHRoZSBETyBvcGVyYXRpb24sXFxuK2luIHdoaWNoIGNhc2UgdGhlIERPIHJlcXVlc3QgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNwZWNpZmljIHBvcnQuXFxuK1xcbitBcyB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBwb3J0LCB0aGUgRFVNUCBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gbGlzdCB0aGVcXG4rcG9ydHMgcHJlc2VudCBvbiBhIGdpdmVuIGludGVyZmFjZSwgYnkgcGFzc2luZyBhbiBpbnRlcmZhY2UgaW5kZXggb3IgbmFtZSBpblxcbit0aGUgZHVtcCByZXF1ZXN0LlxcbitcXG4rUmVxdWVzdCBjb250ZW50czpcXG4rXFxuKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcXG4rICBgYEVUSFRPT0xfQV9QT1JUX0lEYGAgICAgICAgICAgICAgICAgIHUzMiAgICAgcG9ydCBpZFxcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitLZXJuZWwgcmVzcG9uc2UgY29udGVudHM6XFxuK1xcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAgYGBFVEhUT09MX0FfUE9SVF9IRUFERVJgYCAgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcXG4rICBgYEVUSFRPT0xfQV9QT1JUX0lEYGAgICAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCdzIHVuaXF1ZSBpZGVudGlmaWVyLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBuZXRkZXZpY2UuXFxuKyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVNgYCAgICAgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBsaW5rbW9kZXNcXG4rICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTYGAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIE1JSVxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXNcXG4rICBgYEVUSFRPT0xfQV9QT1JUX1RZUEVgYCAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCB0eXBlXFxuKyAgYGBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUYGAgICAgICAgIHUzMiAgICAgSWYgYW55LCB0aGUgaW5kZXggb2YgdGhlIE1JSVxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgdGhhdCBmZWVkcyBpbnRvIHRoaXNcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LlxcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbiBSZXF1ZXN0IHRyYW5zbGF0aW9uXFxuID09PT09PT09PT09PT09PT09PT1cXG4gXFxuQEAgLTI2NDcsNCArMjY4MCw1IEBAIGFyZSBuZXRsaW5rIG9ubHkuXFxuICAgbi9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19QSFlfR0VUYGBcXG4gICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgXFxuICAgYGBTSU9DU0hXVFNUQU1QYGAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19UU0NPTkZJR19TRVRgYFxcbisgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgYFxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcXG5pbmRleCA2ZTI4ZDkwOTRiY2UzLi4yYTliMWVjOTNiNzBmIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0XFxuQEAgLTk5LDEzICs5OSwyOSBAQCB3aWxsIGV2ZW50dWFsbHkgYmUgYWJsZSB0byByZXBvcnQgaXRzIG93biBrc2V0dGluZ3M6OlxcbiAgICAgICAgICAgICAoX19fX18pLS0tLS18IFBvcnQgfFxcbiAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tK1xcbiBcXG4rU0ZQIHBvcnRzXFxuKz09PT09PT09PVxcbitcXG4rU0ZQIGludGVyZmFjZXMgaW52b2x2ZSAyIGRpc3RpbmN0IGNvbXBvbmVudHMsIGVhY2ggcmVwcmVzZW50ZWQgYnlcXG4rYSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXFx1MDAzY3BoeV9wb3J0XFx1MDAzZWAgaW5zdGFuY2UgOlxcbitcXG4rIC0gVGhlIFNGUCBjYWdlIGl0c2VsZiBpcyBhIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcXHUwMDNjcGh5X3BvcnRcXHUwMDNlYC4gSXQncyBzcGVjaWFsXFxuKyAgIGluIHRoYXQgaXQncyBub3QgYW4gTURJIGludGVyZmFjZSwgYnV0IHJhdGhlciBhIGhvdC1wbHVnZ2FibGUgTUlJLlxcbisgICBUaGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFxcdTAwM2NwaHlfcG9ydFxcdTAwM2VgIGFzc29jaWF0ZWQgdG8gaXQgbGlzdHMgdGhlIGRpZmZlcmVudFxcbisgICBNSUkgaW50ZXJmYWNlcyB3ZSBjYW4gdXNlIG9uIHRoZSBjYWdlLlxcbitcXG4rIC0gVGhlIFNGUCBtb2R1bGUsIHdoZW4gaW5zZXJ0ZWQsIHdpbGwgYWxzbyBiZSBhc3NvY2lhdGVkIHRvIGFcXG4rICAgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFxcdTAwM2NwaHlfcG9ydFxcdTAwM2VgLCB0aGF0IHJlcHJlc2VudHMgdGhlIHZhcmlvdXMgbGlua21vZGVzXFxuKyAgIHRoYXQgaXQgZ2l2ZXMgYWNjZXNzIHRvLiBUaGUgbW9kdWxlJ3MgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFxcdTAwM2NwaHlfcG9ydFxcdTAwM2VgXFxuKyAgIGRvZXNuJ3Qgc3VwZXJzZWRlIHRoZSBjYWdlJ3MgcG9ydCwgaXQgcmVmZXJlbmNlcyBpdCB0aHJvdWdoXFxuKyAgIHRoZSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXFx1MDAzY3BoeV9wb3J0XFx1MDAzZWAgOmM6bWVtYmVyOmB1cHN0cmVhbV9wb3J0YCBmaWVsZC5cXG4rXFxuIE5leHQgc3RlcHNcXG4gPT09PT09PT09PVxcbiBcXG4tQXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50YXRpb24sIG9ubHkgcG9ydHMgY29udHJvbGxlZCBieSBQSFkgZGV2aWNlcyBhcmVcXG4tc3VwcG9ydGVkLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGFkZCB0aGUgTmV0bGluayBBUEkgdG8gZXhwb3NlIHRoZXNlXFxuLXRvIHVzZXJzcGFjZSBhbmQgYWRkIHN1cHBvcnQgZm9yIHJhdyBwb3J0cyAoY29udHJvbGxlZCBieSBzb21lIGZpcm13YXJlLCBhbmQgZGlyZWN0bHlcXG4tbWFuYWdlZCBieSB0aGUgTklDIGRyaXZlcikuXFxuK0FzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCB0aGUgcG9ydCdzIHByZXNlbmNlIGFuZCBpbmZvcm1hdGlvbiBjYW4gb25seVxcbitiZSBxdWVyaWVkLCBhbmQgaXQncyBub3QgcG9zc2libGUgdG8gY2hhbmdlIGFueSBvZiB0aGUgcG9ydCdzIHNldHRpbmdzIG9yIHNlbGVjdFxcbit3aGljaCBvbmUgc2hvdWxkIGJlIHVzZWQuXFxuIFxcbiBBbm90aGVyIHBhcmFsbGVsIHRhc2sgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIE1JSSBtdXhpbmcgZnJhbWV3b3JrIHRvIGFsbG93IHRoZVxcbi1jb250cm9sIG9mIG5vbi1QSFkgZHJpdmVyIG11bHRpLXBvcnQgc2V0dXBzLlxcbitjb250cm9sIG9mIG5vbi1QSFkgZHJpdmVuIG11bHRpLXBvcnQgc2V0dXBzLlxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggOTMyZWExZGIwNDhlNS4uMzk1ZjhiNWQxODQ5NSAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE4ODE2LDYgKzE4ODE2LDcgQEAgRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2V0aGVybmV0LWNvbm5lY3Rvci55YW1sXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxcbiBGOlxcdGRyaXZlcnMvbmV0L3BoeS9waHlfcG9ydC5jXFxuIEY6XFx0aW5jbHVkZS9saW51eC9waHlfcG9ydC5oXFxuK0Y6XFx0bmV0L2V0aHRvb2wvcG9ydC5jXFxuIEs6XFx0c3RydWN0XFxcXHMrcGh5X3BvcnR8cGh5X3BvcnRfXFxuIFxcbiBORVRXT1JLSU5HIFtHRU5FUkFMXVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaCBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXFxuaW5kZXggNDIxMDg4ZTZmNmU4Zi4uZWMzZDM5YTBhZTA2YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXFxuQEAgLTY2LDUgKzY2LDcgQEAgdm9pZCBwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXFxuIFxcdFxcdFxcdFxcdCAgIGVudW0gZXRodG9vbF9saW5rX21lZGl1bSBtZWRpdW0sXFxuIFxcdFxcdFxcdFxcdCAgIGludCBsYW5lcyk7XFxuIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2Rlcyk7XFxuK3ZvaWQgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyh1bnNpZ25lZCBsb25nICp0bywgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTtcXG4gXFxuICNlbmRpZiAvKiBfX1BIWV9DQVBTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xcbmluZGV4IDk0MmQ0MzE5MTU2MWUuLjU1OGU0ZGY0ZDYzYzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xcbkBAIC00NDUsMyArNDQ1LDI5IEBAIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcXG4gXFx0cmV0dXJuIG1lZGl1bXM7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyk7XFxuK1xcbisvKipcXG4rICogcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcygpIC0gRmlsdGVyIGxpbmttb2RlcyB3aXRoIGFuIGludGVyZmFjZSBsaXN0XFxuKyAqIEB0bzogU3RvcmVzIHRoZSBmaWx0ZXJlZCBsaW5rbW9kZXNcXG4rICogQGZyb206IExpbmttb2RlcyB0byBmaWx0ZXJcXG4rICogQGludGVyZmFjZXM6IEJpdGZpZWxkIG9mIHBoeV9pbnRlcmZhY2VfdCB0aGF0IHdlIHVzZSBmb3IgZmlsdGVyaW5nXFxuKyAqXFxuKyAqIEZpbHRlciB0aGUgcHJvdmlkZWQgbGlua21vZGVzLCBvbmx5IHRvIGtlZXAgdGhlIG9uZXMgd2UgY2FuIHBvc3NpYmx5IGFjaGlldmVcXG4rICogd2hlbiB1c2luZyBhbnkgb2YgdGhlIHByb3ZpZGVkIE1JSSBpbnRlcmZhY2VzLlxcbisgKi9cXG4rdm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaW50ZXJmYWNlcylcXG4re1xcbitcXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhpZmFjZXNfc3VwcG9ydGVkKSA9IHt9O1xcbitcXHR1bnNpZ25lZCBpbnQgaWZhY2VzX2NhcHMgPSAwO1xcbitcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xcbitcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChpbnRlcmZhY2UsIGludGVyZmFjZXMsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgpXFxuK1xcdFxcdGlmYWNlc19jYXBzIHw9IHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKGludGVyZmFjZSk7XFxuK1xcbitcXHRwaHlfY2Fwc19saW5rbW9kZXMoaWZhY2VzX2NhcHMsIGlmYWNlc19zdXBwb3J0ZWQpO1xcbitcXG4rXFx0bGlua21vZGVfYW5kKHRvLCBmcm9tLCBpZmFjZXNfc3VwcG9ydGVkKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG5pbmRleCA5NGIyZTg1ZTAwYTM3Li4zZGE2ODcyZWJiYmEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuQEAgLTE0OTAsMTEgKzE0OTAsMjIgQEAgc3RhdGljIGludCBwaHlfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxcbiB7XFxuIFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2O1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKGRldilcXG4tXFx0XFx0cmV0dXJuIHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VoYXNfc2ZwX21vZF9waHkgPSB0cnVlO1xcbitcXHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBwaHlkZXYtXFx1MDAzZXNmcF9jYWdlX3BvcnQpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdC8qIElmIHdlIGFyZW4ndCBhdHRhY2hlZCB0byBhIG5ldGRldiwgd2UgY2FuJ3QgYWRkIHRoZSBTRlAgUEhZIHRvIGl0c1xcbitcXHQgKiB0b3BvbG9neS5cXG4rXFx0ICovXFxuK1xcdGlmICghZGV2KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VoYXNfc2ZwX21vZF9waHkgPSBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xNTEyLDggKzE1MjMsMTIgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXY7XFxuIFxcbitcXHRwaHlkZXYtXFx1MDAzZWhhc19zZnBfbW9kX3BoeSA9IGZhbHNlO1xcbitcXG4gXFx0aWYgKGRldilcXG4gXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTtcXG4rXFxuK1xcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIE5VTEwpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTYxNyw2ICsxNjMyLDc3IEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfbGlua19kb3duKHZvaWQgKnVwc3RyZWFtKVxcbiBcXHRcXHRwb3J0LVxcdTAwM2VvcHMtXFx1MDAzZWxpbmtfZG93bihwb3J0KTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBwaHlfYWRkX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHQvKiBDcmVhdGUgbW9kIHBvcnQgKi9cXG4rXFx0cG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7XFxuK1xcdGlmICghcG9ydClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwb3J0LVxcdTAwM2VhY3RpdmUgPSB0cnVlO1xcbitcXG4rXFx0Y2FwcyA9IHNmcF9nZXRfbW9kdWxlX2NhcHMocGh5ZGV2LVxcdTAwM2VzZnBfYnVzKTtcXG4rXFxuK1xcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cXHUwMDNlc3VwcG9ydGVkLCBjYXBzLVxcdTAwM2VsaW5rX21vZGVzLFxcbitcXHRcXHRcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9jYWdlX3BvcnQtXFx1MDAzZWludGVyZmFjZXMpO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KSB7XFxuK1xcdFxcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQocGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYsIHBvcnQpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Lyogd2UgZG9uJ3QgdXNlIHBoeV9hZGRfcG9ydCgpIGhlcmUgYXMgdGhlIG1vZHVsZSBwb3J0IGlzbid0IGEgZGlyZWN0XFxuK1xcdCAqIGludGVyZmFjZSBmcm9tIHRoZSBQSFksIGJ1dCByYXRoZXIgYW4gZXh0ZW5zaW9uIHRvIHRoZSBzZnAtYnVzLCB0aGF0XFxuK1xcdCAqIGlzIGFscmVhZHkgcmVwcmVzZW50ZWQgYnkgaXRzIG93biBwaHlfcG9ydFxcbitcXHQgKi9cXG4rXFx0cGh5ZGV2LVxcdTAwM2Vtb2RfcG9ydCA9IHBvcnQ7XFxuK1xcbitcXHRwb3J0LVxcdTAwM2V1cHN0cmVhbV9wb3J0ID0gcGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHBoeV9kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aWYgKCFwaHlkZXYtXFx1MDAzZW1vZF9wb3J0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYsIHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpO1xcbitcXG4rXFx0cGh5X3BvcnRfZGVzdHJveShwaHlkZXYtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vtb2RfcG9ydCA9IE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGh5X3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXFxuK3tcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbitcXG4rXFx0LyogSWYgdGhlcmUncyBhIGRvd25zdHJlYW0gU0ZQIG1vZHVsZSwgYW5kIGl0IGRvZXNuJ3QgY29udGFpbiBhIFBIWVxcbitcXHQgKiBkZXZpY2UsIGxldCdzIGNyZWF0ZSBhIHBoeV9wb3J0IHRvIHJlcHJlc2VudCB0aGF0IG1vZHVsZS5cXG4rXFx0ICovXFxuK1xcdGlmICghcGh5ZGV2LVxcdTAwM2VoYXNfc2ZwX21vZF9waHkpXFxuK1xcdFxcdHJldHVybiBwaHlfYWRkX3NmcF9tb2RfcG9ydChwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHBoeV9zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXFxuK3tcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbitcXG4rXFx0LyogQ2FsbGVkIHVwb24gbW9kdWxlIHJlbW92YWwgb3IgdXBzdHJlYW0gcmVtb3ZhbCAqL1xcbitcXHRpZiAoIXBoeWRldi1cXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxcbitcXHRcXHRwaHlfZGVsX3NmcF9tb2RfcG9ydChwaHlkZXYpO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XFxuIFxcdC5hdHRhY2ggPSBwaHlfc2ZwX2F0dGFjaCxcXG4gXFx0LmRldGFjaCA9IHBoeV9zZnBfZGV0YWNoLFxcbkBAIC0xNjI2LDYgKzE3MTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XFxuIFxcdC5saW5rX2Rvd24gPSBwaHlfc2ZwX2xpbmtfZG93bixcXG4gXFx0LmNvbm5lY3RfcGh5ID0gcGh5X3NmcF9jb25uZWN0X3BoeSxcXG4gXFx0LmRpc2Nvbm5lY3RfcGh5ID0gcGh5X3NmcF9kaXNjb25uZWN0X3BoeSxcXG4rXFx0Lm1vZHVsZV9zdGFydCA9IHBoeV9zZnBfbW9kdWxlX3N0YXJ0LFxcbitcXHQubW9kdWxlX3N0b3AgPSBwaHlfc2ZwX21vZHVsZV9zdG9wLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBwaHlfYWRkX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbkBAIC0xNjczLDEzICsxNzYxLDEzIEBAIHN0YXRpYyB2b2lkIHBoeV9kZWxfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuIFxcdHBoeWRldi1cXHUwMDNlbl9wb3J0cy0tO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbitzdGF0aWMgc3RydWN0IHBoeV9wb3J0ICpwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aWYgKCFwb3J0KVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbiBcXHRwb3J0LVxcdTAwM2VwYXJlbnRfdHlwZSA9IFBIWV9QT1JUX1BIWTtcXG4gXFx0cG9ydC1cXHUwMDNlcGh5ID0gcGh5ZGV2O1xcbkBAIC0xNjk0LDEwICsxNzgyLDEyIEBAIHN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdCAqIHdoZW4gYXR0YWNoaW5nIHRoZSBwb3J0IHRvIHRoZSBwaHlkZXYuXFxuIFxcdCAqL1xcbiBcXHRyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcXG4tXFx0aWYgKHJldClcXG4rXFx0aWYgKHJldCkge1xcbiBcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gcG9ydDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE3MDYsMjUgKzE3OTYsNTAgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gICovXFxuIHN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBzZnBfYnVzICpidXM7XFxuLVxcdGludCByZXQgPSAwO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKSB7XFxuLVxcdFxcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5md25vZGUpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKGJ1cykpXFxuLVxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1cyk7XFxuK1xcdGlmICghcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5md25vZGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gYnVzO1xcbitcXHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKTtcXG4rXFx0aWYgKElTX0VSUihidXMpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihidXMpO1xcbiBcXG4tXFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuLVxcdFxcdHNmcF9idXNfcHV0KGJ1cyk7XFxuK1xcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IGJ1cztcXG4gXFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XFxuK1xcdGlmIChidXMpIHtcXG4rXFx0XFx0cG9ydCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHBvcnQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IFBUUl9FUlIocG9ydCk7XFxuK1xcdFxcdFxcdHBvcnQgPSBOVUxMO1xcbitcXHRcXHRcXHRnb3RvIG91dF9zZnA7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VzZnBfYnVzKVxcbi1cXHRcXHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0ID0gcG9ydDtcXG4rXFxuK1xcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcXHUwMDI2c2ZwX3BoeWRldl9vcHMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3J0O1xcbitcXG4rXFx0Lyogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSBncmFicyBhIHJlZiB0byB0aGUgc2ZwIGJ1cyBvbiBzdWNjZXNzLCBpdCdzXFxuK1xcdCAqIHNhZmUgdG8gcmVsZWFzZSBpdCBub3cuXFxuK1xcdCAqL1xcbitcXHRzZnBfYnVzX3B1dChidXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rXFxuK291dF9wb3J0OlxcbitcXHRpZiAocG9ydCkge1xcbitcXHRcXHRwaHlfZGVsX3BvcnQocGh5ZGV2LCBwb3J0KTtcXG4rXFx0XFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcXG4rXFx0fVxcbitvdXRfc2ZwOlxcbitcXHRzZnBfYnVzX3B1dChidXMpO1xcbitcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBOVUxMO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xODE1LDYgKzE5MzAsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdFxcdGVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeWRldiwgUEhZX1VQU1RSRUFNX01BQywgZGV2KTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdFxcdGlmIChwaHlkZXYtXFx1MDAzZW1vZF9wb3J0KSB7XFxuK1xcdFxcdFxcdGVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoZGV2LCBwaHlkZXYtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBTb21lIEV0aGVybmV0IGRyaXZlcnMgdHJ5IHRvIGNvbm5lY3QgdG8gYSBQSFkgZGV2aWNlIGJlZm9yZVxcbkBAIC0xOTUxLDYgKzIwNzIsOCBAQCB2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYtXFx1MDAzZXBoeWRldiA9IE5VTEw7XFxuIFxcdFxcdHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2ID0gTlVMTDtcXG4gXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpXFxuK1xcdFxcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwaHlkZXYtXFx1MDAzZW1vZF9wb3J0KTtcXG4gXFx0fVxcbiBcXG4gXFx0cGh5ZGV2LVxcdTAwM2VwaHlfbGlua19jaGFuZ2UgPSBOVUxMO1xcbkBAIC0zNjA0LDYgKzM3MjcsMjUgQEAgc3RydWN0IHBoeV9wb3J0ICpwaHlfZ2V0X3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5X2dldF9zZnBfcG9ydCk7XFxuIFxcbisvKipcXG4rICogcGh5X3NldF91cHN0cmVhbV9wb3J0KCkgLSBTZXRzIHRoZSBwaHlfcG9ydCBjb250cm9sbGluZyB0aGUgTUlJIHRoaXMgUEhZIGlzXFxuKyAqXFx0XFx0XFx0ICAgICBhdHRhY2hlZCB0by5cXG4rICogQHBoeWRldjogcG9pbnRlciB0byB0aGUgUEhZIGRldmljZSB3ZSBzZXQgdGhlIHVwc3RyZWFtIG9mLlxcbisgKiBAcG9ydDogVGhlIHBoeV9wb3J0IHVwc3RyZWFtIG9mIHRoaXMgUEhZLCBjYW4gYmUgTlVMTC5cXG4rICovXFxuK3ZvaWQgcGh5X3NldF91cHN0cmVhbV9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7XFxuK1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcXG4rXFxuK1xcdHBoeV9mb3JfZWFjaF9wb3J0KHBoeWRldiwgbG9jYWxfcG9ydClcXG4rXFx0XFx0bG9jYWxfcG9ydC1cXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3NldF91cHN0cmVhbV9wb3J0KTtcXG4rXFxuIC8qKlxcbiAgKiBmd25vZGVfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZndub2RlLCBmaW5kIHRoZSBtZGlvX2RldmljZVxcbiAgKiBAZndub2RlOiBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSdzIGZ3bm9kZVxcbkBAIC0zODQyLDYgKzM5ODQsNyBAQCBzdGF0aWMgaW50IHBoeV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXG4gXFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGh5ZGV2LVxcdTAwM2VzZnBfYnVzKTtcXG4gXFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gTlVMTDtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcXG4gXFxuIFxcdHBoeV9jbGVhbnVwX3BvcnRzKHBoeWRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXFxuaW5kZXggNDEzNGRlN2FlMzEzZC4uNjcxMGExOTk5NjdhMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXFxuQEAgLTcsNiArNyw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfcG9ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbkBAIC0yMywxNyArMjQsODkgQEAgc3RhdGljIGludCBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2dG9wby1cXHUwMDNlcGh5cywgWEFfRkxBR1NfQUxMT0MxKTtcXG4gXFx0dG9wby1cXHUwMDNlbmV4dF9waHlfaW5kZXggPSAxO1xcbiBcXG4rXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIFhBX0ZMQUdTX0FMTE9DMSk7XFxuK1xcdHRvcG8tXFx1MDAzZW5leHRfcG9ydF9pbmRleCA9IDE7XFxuK1xcbiBcXHRkZXYtXFx1MDAzZWxpbmtfdG9wbyA9IHRvcG87XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlbGlua190b3BvKVxcbitcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VsaW5rX3RvcG87XFxuK1xcbitcXHQvKiBUaGUgdG9wb2xvZ3kgaXMgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIHdlIGFkZCBhbiBvYmplY3QgdG8gaXQuXFxuK1xcdCAqIEl0IGlzIGZyZWVkIGFsb25nc2lkZSB0aGUgbmV0ZGV2LiBJdCBjYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlXFxuK1xcdCAqIGNvbnRleHRzOlxcbitcXHQgKiAgLSBJdCBjYW4gYmUgY2FsbGVkIGZyb20gLnByb2JlKCkgOiBObyBydG5sLCBubyBuZXRkZXZfbG9ja1xcbitcXHQgKiAgLSAubmRvX29wZW4oKSA6IHJ0bmwgYW5kIHBvc3NpYmx5IG5ldGRldl9sb2NrXFxuK1xcdCAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdFxcbitcXHQgKlxcbitcXHQgKiAgSG93ZXZlciwgd2UgY2FuJ3QgcmVhbGx5IGhhdmUgcmFjZXMgOlxcbitcXHQgKiAgLSBJZiB3ZSBoYXZlIGEgUEhZLCBwaHlfbGlua190b3BvX2FkZF9waHkoKSB3aWxsIGFsd2F5cyBydW4gZmlyc3RcXG4rXFx0ICogICAgYW5kIHRyaWdnZXIgdGhlIGFsbG9jLiBPbmx5IHRoZW4gdGhlIHBvcnRzIGNhbiBiZSBhZGRlZCB0aHJvdWdoXFxuK1xcdCAqICAgIHBoeWxpYiBvZiBzZnAuXFxuK1xcdCAqICAtIElmIHdlIGRvbid0LCB0aGUgU0ZQIHBvcnQgZm9yIHRoZSBjYWdlIGlzIHJlZ2lzdGVyZWQgZmlyc3QsIGFuZFxcbitcXHQgKiAgICBvbmx5IHRoZW4gb3RoZXIgcG9ydHMvUEhZcyBjYW4gYmUgcmVnaXN0ZXJlZC5cXG4rXFx0ICovXFxuK1xcdHJldCA9IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXG4rXFx0cmV0dXJuIGRldi1cXHUwMDNlbGlua190b3BvO1xcbit9XFxuK1xcbitpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogUG9ydHMgY2FuIG5vdyBiZSBxdWVyaWVkIHdpdGhvdXQgcnRubCBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLCB3aGljaFxcbitcXHQgKiB3ZSBkb24ndCBzdXBwb3J0IG5vdyBhcyBwb3J0IHJldHJpZXZhbCBpcyBkb25lIHVuZGVyIHJ0bmwuXFxuK1xcdCAqIFdlIGRvbid0IGhhdmUgcGh5X3BvcnQgZW5hYmxlZCBkZXZpY2VzIHlldCwgbGV0J3MgbWFrZSBzdXJlXFxuK1xcdCAqIHdlIGFyZSBsb3VkbHkgd2FybmVkIGFib3V0IHRoYXQgd2hlbiBpdCBoYXBwZW5zLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRShuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0dG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7XFxuK1xcdGlmIChJU19FUlIodG9wbykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xcbitcXG4rXFx0LyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovXFxuK1xcdGlmIChwb3J0LVxcdTAwM2VpZClcXG4rXFx0XFx0cmV0ID0geGFfaW5zZXJ0KFxcdTAwMjZ0b3BvLVxcdTAwM2Vwb3J0cywgcG9ydC1cXHUwMDNlaWQsIHBvcnQsIEdGUF9LRVJORUwpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldCA9IHhhX2FsbG9jX2N5Y2xpYyhcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIFxcdTAwMjZwb3J0LVxcdTAwM2VpZCwgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgeGFfbGltaXRfMzJiLCBcXHUwMDI2dG9wby1cXHUwMDNlbmV4dF9wb3J0X2luZGV4LFxcbitcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19hZGRfcG9ydCk7XFxuK1xcbit2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cXHUwMDNlbGlua190b3BvO1xcbitcXG4rXFx0aWYgKCF0b3BvKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR4YV9lcmFzZShcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIHBvcnQtXFx1MDAzZWlkKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2RlbF9wb3J0KTtcXG4rXFxuIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbiBcXHRcXHRcXHQgIGVudW0gcGh5X3Vwc3RyZWFtIHVwdCwgdm9pZCAqdXBzdHJlYW0pXFxuIHtcXG4tXFx0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVxcdTAwM2VsaW5rX3RvcG87XFxuK1xcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbztcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBldGh0b29sIG9wcyBtYXkgcnVuIHdpdGhvdXQgcnRubF9sb2NrLCBhbmQgcnRubF9sb2NrIGlzIHdoYXRcXG5AQCAtNDUsMTMgKzExOCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKFdBUk5fT05fT05DRShuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0aWYgKCF0b3BvKSB7XFxuLVxcdFxcdHJldCA9IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShkZXYpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0XFx0dG9wbyA9IGRldi1cXHUwMDNlbGlua190b3BvO1xcbi1cXHR9XFxuK1xcdHRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpO1xcbitcXHRpZiAoSVNfRVJSKHRvcG8pKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUih0b3BvKTtcXG4gXFxuIFxcdHBkbiA9IGt6YWxsb2Nfb2JqKCpwZG4pO1xcbiBcXHRpZiAoIXBkbilcXG5AQCAtODYsOCArMTU1LDIwIEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4rXFx0LyogQWRkIGFsbCB0aGUgUEhZJ3MgcG9ydHMgdG8gdGhlIHRvcG9sb2d5ICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeS1cXHUwMDNlcG9ydHMsIGhlYWQpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBvcnQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGRlbF9wb3J0cztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbitkZWxfcG9ydHM6XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShwb3J0LCBcXHUwMDI2cGh5LVxcdTAwM2Vwb3J0cywgaGVhZClcXG4rXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xcbitcXG4rXFx0eGFfZXJhc2UoXFx1MDAyNnRvcG8tXFx1MDAzZXBoeXMsIHBoeS1cXHUwMDNlcGh5aW5kZXgpO1xcbiBlcnI6XFxuIFxcdGtmcmVlKHBkbik7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTk5LDEwICsxODAsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiBcXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXFx1MDAzZWxpbmtfdG9wbztcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuIFxcbiBcXHRpZiAoIXRvcG8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeS1cXHUwMDNlcG9ydHMsIGhlYWQpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwb3J0KTtcXG4rXFxuIFxcdHBkbiA9IHhhX2VyYXNlKFxcdTAwMjZ0b3BvLVxcdTAwM2VwaHlzLCBwaHktXFx1MDAzZXBoeWluZGV4KTtcXG4gXFxuIFxcdC8qIFdlIGRlbGV0ZSB0aGUgUEhZIGZyb20gdGhlIHRvcG9sb2d5LCBob3dldmVyIHdlIGRvbid0IHJlLXNldCB0aGVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG5pbmRleCBmNDBhY2MwZDQxMzM4Li5hNWYwMjUxODdhZmEyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuQEAgLTE0LDYgKzE0LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5X2ZpeGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfbGlua190b3BvbG9neS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5X3BvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeWxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG5AQCAtOTMsNiArOTUsOCBAQCBzdHJ1Y3QgcGh5bGluayB7XFxuIFxcdERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLKHNmcF9pbnRlcmZhY2VzKTtcXG4gXFx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc2ZwX3N1cHBvcnQpO1xcbiBcXHR1OCBzZnBfcG9ydDtcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0O1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xcbiBcXG4gXFx0c3RydWN0IGVlZV9jb25maWcgZWVlX2NmZztcXG4gXFxuQEAgLTE3NjQsNiArMTc2OCw1MSBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX2ZpeGVkX3BvbGwoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzO1xcbiBcXG4rc3RhdGljIGludCBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4re1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKCFwbC1cXHUwMDNlbmV0ZGV2IHx8ICFwbC1cXHUwMDNlc2ZwX2J1cylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcXG4rXFx0aWYgKCFwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBvcnQtXFx1MDAzZWlzX3NmcCA9IHRydWU7XFxuK1xcdHBvcnQtXFx1MDAzZWlzX21paSA9IHRydWU7XFxuK1xcdHBvcnQtXFx1MDAzZWFjdGl2ZSA9IHRydWU7XFxuK1xcbitcXHRwaHlfaW50ZXJmYWNlX2FuZChwb3J0LVxcdTAwM2VpbnRlcmZhY2VzLCBwbC1cXHUwMDNlY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyxcXG4rXFx0XFx0XFx0ICBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzKTtcXG4rXFx0cGh5X3BvcnRfdXBkYXRlX3N1cHBvcnRlZChwb3J0KTtcXG4rXFxuK1xcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQocGwtXFx1MDAzZW5ldGRldiwgcG9ydCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X2Rlc3Ryb3lfcG9ydDtcXG4rXFxuK1xcdHBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0ID0gcG9ydDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rb3V0X2Rlc3Ryb3lfcG9ydDpcXG4rXFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcXG4rXFx0cGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuK3tcXG4rXFx0aWYgKHBsLVxcdTAwM2VuZXRkZXYgXFx1MDAyNlxcdTAwMjYgcGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtXFx1MDAzZW5ldGRldiwgcGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpO1xcbitcXG4rXFx0aWYgKHBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0KVxcbitcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0KTtcXG4rXFxuK1xcdHBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBwaHlsaW5rX3JlZ2lzdGVyX3NmcChzdHJ1Y3QgcGh5bGluayAqcGwsXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuIHtcXG5AQCAtMTc4MSw5ICsxODMwLDE4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLFxcbiBcXG4gXFx0cGwtXFx1MDAzZXNmcF9idXMgPSBidXM7XFxuIFxcbitcXHRyZXQgPSBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHBsKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRzZnBfYnVzX3B1dChidXMpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbiBcXHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBsLCBcXHUwMDI2c2ZwX3BoeWxpbmtfb3BzKTtcXG4gXFx0c2ZwX2J1c19wdXQoYnVzKTtcXG4gXFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHBsKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTE5NDYsNiArMjAwNCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY3JlYXRlKTtcXG4gdm9pZCBwaHlsaW5rX2Rlc3Ryb3koc3RydWN0IHBoeWxpbmsgKnBsKVxcbiB7XFxuIFxcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBsLVxcdTAwM2VzZnBfYnVzKTtcXG4rXFx0cGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpO1xcbiBcXHRpZiAocGwtXFx1MDAzZWxpbmtfZ3BpbylcXG4gXFx0XFx0Z3Bpb2RfcHV0KHBsLVxcdTAwM2VsaW5rX2dwaW8pO1xcbiBcXG5AQCAtMzg3MSwxNCArMzkzMCw2NyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfcmVtb3ZlKHZvaWQgKnVwc3RyZWFtKVxcbiBcXHRwaHlfaW50ZXJmYWNlX3plcm8ocGwtXFx1MDAzZXNmcF9pbnRlcmZhY2VzKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoIXBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIENyZWF0ZSBtb2QgcG9ydCAqL1xcbitcXHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcXG4rXFx0aWYgKCFwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBvcnQtXFx1MDAzZWFjdGl2ZSA9IHRydWU7XFxuK1xcbitcXHRjYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwbC1cXHUwMDNlc2ZwX2J1cyk7XFxuK1xcbitcXHRwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHBvcnQtXFx1MDAzZXN1cHBvcnRlZCwgY2Fwcy1cXHUwMDNlbGlua19tb2RlcyxcXG4rXFx0XFx0XFx0XFx0XFx0cGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQtXFx1MDAzZWludGVyZmFjZXMpO1xcbitcXG4rXFx0aWYgKHBsLVxcdTAwM2VuZXRkZXYpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC1cXHUwMDNlbmV0ZGV2LCBwb3J0KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHBvcnQtXFx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwbC1cXHUwMDNlc2ZwX2NhZ2VfcG9ydDtcXG4rXFxuK1xcdHBsLVxcdTAwM2Vtb2RfcG9ydCA9IHBvcnQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4re1xcbitcXHRpZiAoIXBsLVxcdTAwM2Vtb2RfcG9ydClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHBsLVxcdTAwM2VuZXRkZXYpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtXFx1MDAzZW5ldGRldiwgcGwtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFxuK1xcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFx0cGwtXFx1MDAzZW1vZF9wb3J0ID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXFxuIHtcXG4gXFx0c3RydWN0IHBoeWxpbmsgKnBsID0gdXBzdHJlYW07XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdGFydCB0aGUgUEhZIG5vdy4gKi9cXG4gXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpIHtcXG4gXFx0XFx0cGh5X3N0YXJ0KHBsLVxcdTAwM2VwaHlkZXYpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHBsKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogSWYgdGhlIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWSBidXQgd2UgZGlkbid0IGRldGVjdCBvbmUgd2VcXG5AQCAtMzg4Nyw3ICszOTk5LDE2IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxcbiBcXHRpZiAoIXBsLVxcdTAwM2VzZnBfbWF5X2hhdmVfcGh5KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XFxuK1xcdHJldCA9IHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBkZWxfbW9kX3BvcnQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2RlbF9tb2RfcG9ydDpcXG4rXFx0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxcbkBAIC0zODk3LDYgKzQwMTgsOCBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSlcXG4gXFx0LyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi9cXG4gXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpXFxuIFxcdFxcdHBoeV9zdG9wKHBsLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChwbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSlcXG5AQCAtMzk0MSw2ICs0MDY0LDggQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG4gXFx0cGh5X2ludGVyZmFjZV9hbmQocGh5LVxcdTAwM2Vob3N0X2ludGVyZmFjZXMsIHBoeWxpbmtfc2ZwX2ludGVyZmFjZXMsXFxuIFxcdFxcdFxcdCAgcGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbiBcXG4rXFx0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpO1xcbitcXG4gXFx0LyogRG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiAqL1xcbiBcXHRyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX3BoeShwbCwgcGh5KTtcXG4gfVxcbkBAIC0zOTQ5LDYgKzQwNzQsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh1cHN0cmVhbSk7XFxuK1xcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHlkZXYsIE5VTEwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzID0ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDExMDkyYzMxNzViM2QuLjc0MWNhN2EwYTI1NzMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtNTgyLDYgKzU4Miw3IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcXG4gICogQHdvbF9lbmFibGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGUgUEhZIG9yIHRoZSBhdHRhY2hlZCBNQUMgaGF2ZSBXYWtlLW9uLUxBTlxcbiAgKiBcXHRcXHQgZW5hYmxlZC5cXG4gICogQGlzX2dlbnBoeV9kcml2ZW46IFBIWSBpcyBkcml2ZW4gYnkgb25lIG9mIHRoZSBnZW5lcmljIFBIWSBkcml2ZXJzXFxuKyAqIEBoYXNfc2ZwX21vZF9waHk6IFNldCB0cnVlIGlmIGRvd25zdHJlYW0gU0ZQIGJ1cydzIG1vZHVsZSBjb250YWlucyBhIFBIWVxcbiAgKiBAc3RhdGU6IFN0YXRlIG9mIHRoZSBQSFkgZm9yIG1hbmFnZW1lbnQgcHVycG9zZXNcXG4gICogQGRldl9mbGFnczogRGV2aWNlLXNwZWNpZmljIGZsYWdzIHVzZWQgYnkgdGhlIFBIWSBkcml2ZXIuXFxuICAqXFxuQEAgLTU5NCw2ICs1OTUsOSBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XFxuICAqIEBwaHlsaW5rOiBQb2ludGVyIHRvIHBoeWxpbmsgaW5zdGFuY2UgZm9yIHRoaXMgUEhZXFxuICAqIEBzZnBfYnVzX2F0dGFjaGVkOiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgU0ZQIGJ1cyBoYXMgYmVlbiBhdHRhY2hlZFxcbiAgKiBAc2ZwX2J1czogU0ZQIGJ1cyBhdHRhY2hlZCB0byB0aGlzIFBIWSdzIGZpYmVyIHBvcnRcXG4rICogQHNmcF9jYWdlX3BvcnQ6IFRoZSBwaHlfcG9ydCBjb25uZWN0ZWQgdG8gdGhlIGRvd25zdHJlYW0gU0ZQIGNhZ2VcXG4rICogQG1vZF9wb3J0OiBwaHlfcG9ydCByZXByZXNlbnRpbmcgdGhlIFNGUCBtb2R1bGUsIGlmIGl0IGlzIHBoeS1sZXNzXFxuKyAqIEB1cHN0cmVhbV9wb3J0OiBwaHlfcG9ydCB0aGlzIFBIWSdzIE1JSSBhdHRhY2hlcyB0bywgaWYgYW55XFxuICAqIEBhdHRhY2hlZF9kZXY6IFRoZSBhdHRhY2hlZCBlbmV0IGRyaXZlcidzIGRldmljZSBpbnN0YW5jZSBwdHJcXG4gICogQGFkanVzdF9saW5rOiBDYWxsYmFjayBmb3IgdGhlIGVuZXQgY29udHJvbGxlciB0byByZXNwb25kIHRvIGNoYW5nZXM6IGluIHRoZVxcbiAgKiAgICAgICAgICAgICAgIGxpbmsgc3RhdGUuXFxuQEAgLTcwNiw2ICs3MTAsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XFxuIFxcdHVuc2lnbmVkIGlycV9yZXJ1bjoxO1xcbiBcXG4gXFx0dW5zaWduZWQgZGVmYXVsdF90aW1lc3RhbXA6MTtcXG4rXFx0dW5zaWduZWQgaGFzX3NmcF9tb2RfcGh5OjE7XFxuIFxcbiBcXHRpbnQgcmF0ZV9tYXRjaGluZztcXG4gXFxuQEAgLTc4NSw2ICs3OTAsOSBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XFxuIFxcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cXG4gXFx0Ym9vbCBzZnBfYnVzX2F0dGFjaGVkO1xcbiBcXHRzdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX2J1cztcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0O1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnVwc3RyZWFtX3BvcnQ7XFxuIFxcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYXR0YWNoZWRfZGV2O1xcbiBcXHRzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHM7XFxuQEAgLTI0NjgsNiArMjQ3Niw4IEBAIGludCBfX3BoeV9od3RzdGFtcF9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFxuIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gXFxuK3ZvaWQgcGh5X3NldF91cHN0cmVhbV9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XFxuK1xcbiAvKipcXG4gICogcGh5X21vZHVsZV9kcml2ZXIoKSAtIEhlbHBlciBtYWNybyBmb3IgcmVnaXN0ZXJpbmcgUEhZIGRyaXZlcnNcXG4gICogQF9fcGh5X2RyaXZlcnM6IGFycmF5IG9mIFBIWSBkcml2ZXJzIHRvIHJlZ2lzdGVyXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxcbmluZGV4IDk1NTc1ZjY4ZDViYzcuLjk1ODUyODJjYWUzZmMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXFxuQEAgLTEzLDE0ICsxMywxOSBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgeGFycmF5O1xcbiBzdHJ1Y3QgcGh5X2RldmljZTtcXG4rc3RydWN0IHBoeV9wb3J0O1xcbiBzdHJ1Y3Qgc2ZwX2J1cztcXG4gXFxuIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSB7XFxuIFxcdHN0cnVjdCB4YXJyYXkgcGh5cztcXG4gXFx0dTMyIG5leHRfcGh5X2luZGV4O1xcbitcXG4rXFx0c3RydWN0IHhhcnJheSBwb3J0cztcXG4rXFx0dTMyIG5leHRfcG9ydF9pbmRleDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBwaHlfZGV2aWNlX25vZGUge1xcbkBAIC00OCw2ICs1Myw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFxuIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xcbiBcXG4raW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcXG4rdm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XFxuK1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcXG4gcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcXG4ge1xcbkBAIC02NCw2ICs3MiwyNSBAQCBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X3BvcnQgKlxcbitwaHlfbGlua190b3BvX2dldF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwb3J0X2lkKVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cXHUwMDNlbGlua190b3BvO1xcbitcXG4rXFx0aWYgKCF0b3BvKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdC8qIHBvcnRzIGluIHRoZSB0b3BvIGFyZSBSVE5MIHByb3RlY3RlZCwgYnV0IG1heSBiZSBhY2Nlc3NlZCB1bmRlclxcbitcXHQgKiBuZXRkZXZfbG9jayBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLiBGb3Igbm93IGtlZXAgdGhlbSB1bmRlciBydG5sXFxuK1xcdCAqIHByb3RlY3Rpb24sIGFzIG5vIG9wcy1sb2NrZWQgZGV2aWNlcyBoYXZlIHBoeV9wb3J0IGNhcGFiaWxpdGllc1xcbitcXHQgKiB5ZXQuXFxuK1xcdCAqL1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0LyogQ2FsbGVyIG11c3QgaG9sZCBSVE5MIHdoaWxlIGhhbmRsaW5nIHRoZSBwaHlfcG9ydCAqL1xcbitcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIHBvcnRfaWQpO1xcbit9XFxuK1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG5AQCAtNzcsMTEgKzEwNCwyOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcXG4gcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X3BvcnQgKlxcbitwaHlfbGlua190b3BvX2dldF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwb3J0X2lkKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9fUEhZX0xJTktfVE9QT0xPR1lfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcXG5pbmRleCAwZWYwZjVjZTQ3MDkyLi44ZjQ1YzAzMWNiYzEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxcbkBAIC0zNiw5ICszNiwxMiBAQCBzdHJ1Y3QgcGh5X3BvcnRfb3BzIHtcXG4gLyoqXFxuICAqIHN0cnVjdCBwaHlfcG9ydCAtIEEgcmVwcmVzZW50YXRpb24gb2YgYSBuZXR3b3JrIGRldmljZSBwaHlzaWNhbCBpbnRlcmZhY2VcXG4gICpcXG4rICogQGlkOiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBvcnQgd2l0aGluIHRoZSB0b3BvbG9neVxcbiAgKiBAaGVhZDogVXNlZCBieSB0aGUgcG9ydCdzIHBhcmVudCB0byBsaXN0IHBvcnRzXFxuICAqIEBwYXJlbnRfdHlwZTogVGhlIHR5cGUgb2YgZGV2aWNlIHRoaXMgcG9ydCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG9cXG4gICogQHBoeTogSWYgdGhlIHBhcmVudCBpcyBQSFlfUE9SVF9QSFlERVYsIHRoZSBQSFkgY29udHJvbGxpbmcgdGhhdCBwb3J0XFxuKyAqIEB1cHN0cmVhbV9wb3J0OiBJbmRpY2F0ZXMgdGhlIE1JSSBwb3J0IHRoYXQgZmVlZHMgdGhpcyBwb3J0LCBpZiBhbnksXFxuKyAqXFx0XFx0ICAgZS5nLiB0aGUgU0ZQIGNhZ2UgcG9ydCBmb3IgYSBTRlAgbW9kdWxlIHBvcnQuXFxuICAqIEBvcHM6IENhbGxiYWNrIG9wcyBpbXBsZW1lbnRlZCBieSB0aGUgcG9ydCBjb250cm9sbGVyXFxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxcbiAgKiBAbWVkaXVtczogQml0bWFzayBvZiB0aGUgcGh5c2ljYWwgbWVkaXVtcyB0aGlzIHBvcnQgcHJvdmlkZXMgYWNjZXNzIHRvXFxuQEAgLTUyLDExICs1NSwxMyBAQCBzdHJ1Y3QgcGh5X3BvcnRfb3BzIHtcXG4gICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuXFxuICAqL1xcbiBzdHJ1Y3QgcGh5X3BvcnQge1xcbitcXHR1MzIgaWQ7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgaGVhZDtcXG4gXFx0ZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeTtcXG4gXFx0fTtcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICp1cHN0cmVhbV9wb3J0O1xcbiBcXG4gXFx0Y29uc3Qgc3RydWN0IHBoeV9wb3J0X29wcyAqb3BzO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG5pbmRleCA4MTM0YmFmNzg2MGYzLi5mOWQ4Nzk0ZWFiYzE5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuQEAgLTc4LDYgKzc4LDExIEBAIGVudW0gZXRodG9vbF9wc2VfZXZlbnQge1xcbiBcXHRFVEhUT09MX1BTRV9FVkVOVF9TV19QV19DT05UUk9MX0VSUk9SID0gNjQsXFxuIH07XFxuIFxcbitlbnVtIGV0aHRvb2xfcG9ydF90eXBlIHtcXG4rXFx0RVRIVE9PTF9QT1JUX1RZUEVfTURJLFxcbitcXHRFVEhUT09MX1BPUlRfVFlQRV9TRlAsXFxuK307XFxuK1xcbiBlbnVtIHtcXG4gXFx0RVRIVE9PTF9BX0hFQURFUl9VTlNQRUMsXFxuIFxcdEVUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYLFxcbkBAIC04NDAsNiArODQ1LDE4IEBAIGVudW0ge1xcbiBcXHRFVEhUT09MX0FfTVNFX01BWCA9IChfX0VUSFRPT0xfQV9NU0VfQ05UIC0gMSlcXG4gfTtcXG4gXFxuK2VudW0ge1xcbitcXHRFVEhUT09MX0FfUE9SVF9IRUFERVIgPSAxLFxcbitcXHRFVEhUT09MX0FfUE9SVF9JRCxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxcbitcXHRFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfVFlQRSxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCxcXG4rXFxuK1xcdF9fRVRIVE9PTF9BX1BPUlRfQ05ULFxcbitcXHRFVEhUT09MX0FfUE9SVF9NQVggPSAoX19FVEhUT09MX0FfUE9SVF9DTlQgLSAxKVxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdEVUSFRPT0xfTVNHX1VTRVJfTk9ORSA9IDAsXFxuIFxcdEVUSFRPT0xfTVNHX1NUUlNFVF9HRVQgPSAxLFxcbkBAIC04OTMsNiArOTEwLDcgQEAgZW51bSB7XFxuIFxcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfQUNULFxcbiBcXHRFVEhUT09MX01TR19SU1NfREVMRVRFX0FDVCxcXG4gXFx0RVRIVE9PTF9NU0dfTVNFX0dFVCxcXG4rXFx0RVRIVE9PTF9NU0dfUE9SVF9HRVQsXFxuIFxcbiBcXHRfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULFxcbiBcXHRFVEhUT09MX01TR19VU0VSX01BWCA9IChfX0VUSFRPT0xfTVNHX1VTRVJfQ05UIC0gMSlcXG5AQCAtOTU0LDYgKzk3Miw3IEBAIGVudW0ge1xcbiBcXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX05URixcXG4gXFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9OVEYsXFxuIFxcdEVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksXFxuK1xcdEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLFxcbiBcXG4gXFx0X19FVEhUT09MX01TR19LRVJORUxfQ05ULFxcbiBcXHRFVEhUT09MX01TR19LRVJORUxfTUFYID0gKF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCAtIDEpXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCBjMWMxYmUxYTY5NjJmLi5iMzZjYzVjNDc4MTZhIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTEzMTUsNiArMTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXFx1MDAyNlxcdTAwMjYgdG9wbykge1xcbiBcXHRcXHR4YV9kZXN0cm95KFxcdTAwMjZ0b3BvLVxcdTAwM2VwaHlzKTtcXG4rXFx0XFx0eGFfZGVzdHJveShcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMpO1xcbiBcXHRcXHRrZnJlZSh0b3BvKTtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VsaW5rX3RvcG8gPSBOVUxMO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL01ha2VmaWxlIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcXG5pbmRleCA2MjljMTA5MTY2NzBlLi45YjViMDk2NzAwMDgxIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlXFxuKysrIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcXG5AQCAtOSw0ICs5LDQgQEAgZXRodG9vbF9ubC15XFx0Oj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXFxcXFxcbiBcXHRcXHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxcXFxuIFxcdFxcdCAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcXFxcXFxuIFxcdFxcdCAgIG1vZHVsZS5vIGNtaXNfZndfdXBkYXRlLm8gY21pc19jZGIubyBwc2UtcGQubyBwbGNhLm8gXFxcXFxcbi1cXHRcXHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vXFxuK1xcdFxcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gcG9ydC5vXFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuYyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xcbmluZGV4IDFhZjM5NWI1NDMzMGUuLmMwNzZjMDdkMGEwODAgMTAwNjQ0XFxuLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5jXFxuKysrIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXFxuQEAgLTI2LDYgKzI2LDggQEAgc3RhdGljIHUzMiBldGhubF9iY2FzdF9zZXE7XFxuIFxcdFxcdFxcdCAgICAgRVRIVE9PTF9GTEFHX09NSVRfUkVQTFkpXFxuICNkZWZpbmUgRVRIVE9PTF9GTEFHU19TVEFUUyAoRVRIVE9PTF9GTEFHU19CQVNJQyB8IEVUSFRPT0xfRkxBR19TVEFUUylcXG4gXFxuK2NoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rXFxuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lbXSA9IHtcXG4gXFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gXFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX05BTUVdXFx0PSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsXFxuQEAgLTQzMSw2ICs0MzMsNyBAQCBldGhubF9kZWZhdWx0X3JlcXVlc3RzW19fRVRIVE9PTF9NU0dfVVNFUl9DTlRdID0ge1xcbiBcXHRbRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUXVxcdD0gXFx1MDAyNmV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzLFxcbiBcXHRbRVRIVE9PTF9NU0dfUEhZX0dFVF1cXHRcXHQ9IFxcdTAwMjZldGhubF9waHlfcmVxdWVzdF9vcHMsXFxuIFxcdFtFVEhUT09MX01TR19NU0VfR0VUXVxcdFxcdD0gXFx1MDAyNmV0aG5sX21zZV9yZXF1ZXN0X29wcyxcXG4rXFx0W0VUSFRPT0xfTVNHX1BPUlRfR0VUXVxcdFxcdD0gXFx1MDAyNmV0aG5sX3BvcnRfcmVxdWVzdF9vcHMsXFxuIH07XFxuIFxcbiBzdGF0aWMgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbkBAIC0xNTcyLDYgKzE1NzUsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7XFxuIFxcdFxcdC5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSxcXG4gXFx0XFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmNtZFxcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXFxuK1xcdFxcdC5kb2l0XFx0PSBldGhubF9kZWZhdWx0X2RvaXQsXFxuK1xcdFxcdC5zdGFydFxcdD0gZXRobmxfcG9ydF9kdW1wX3N0YXJ0LFxcbitcXHRcXHQuZHVtcGl0XFx0PSBldGhubF9wb3J0X2R1bXBpdCxcXG4rXFx0XFx0LmRvbmVcXHQ9IGV0aG5sX3BvcnRfZHVtcF9kb25lLFxcbitcXHRcXHQucG9saWN5ID0gZXRobmxfcG9ydF9nZXRfcG9saWN5LFxcbitcXHRcXHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcG9ydF9nZXRfcG9saWN5KSAtIDEsXFxuK1xcdH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGV0aHRvb2xfbmxfbWNncnBzW10gPSB7XFxuQEAgLTE1OTQsMTAgKzE2MDYsMjMgQEAgc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBldGh0b29sX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4gXFxuIC8qIG1vZHVsZSBzZXR1cCAqL1xcbiBcXG4rc3RhdGljIHZvaWQgX19pbml0IGV0aG5sX3BoeV9uYW1lc19wb3B1bGF0ZSh2b2lkKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVg7IGkrKykge1xcbitcXHRcXHRuYW1lID0gcGh5X21vZGVzKGkpO1xcbitcXHRcXHRzdHJzY3B5KHBoeV9pbnRlcmZhY2VfbmFtZXNbaV0sIG5hbWUsIEVUSF9HU1RSSU5HX0xFTik7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBfX2luaXQgZXRobmxfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRldGhubF9waHlfbmFtZXNfcG9wdWxhdGUoKTtcXG4rXFxuIFxcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFxcdTAwMjZldGh0b29sX2dlbmxfZmFtaWx5KTtcXG4gXFx0aWYgKFdBUk4ocmV0IFxcdTAwM2MgMCwgXFxcImV0aHRvb2w6IGdlbmV0bGluayBmYW1pbHkgcmVnaXN0cmF0aW9uIGZhaWxlZFxcXCIpKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcXG5pbmRleCAzZTk2OWEwNzBmOWZlLi5kYzcyMTFmNjdjNGQ1IDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbkBAIC01LDExICs1LDE0IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBldGhubF9yZXFfaW5mbztcXG4gXFxuK2V4dGVybiBjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXTtcXG4rXFxuIGludCBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmVzdCwgc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbkBAIC00NzQsNiArNDc3LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tbV9yZXF1ZXN0X29wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbXNlX3JlcXVlc3Rfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHM7XFxuIFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5X3N0YXRzW0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgKyAxXTtcXG5AQCAtNTMwLDYgKzUzNCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX0hFQURFUiArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX21zZV9nZXRfcG9saWN5W0VUSFRPT0xfQV9NU0VfSEVBREVSICsgMV07XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgKyAxXTtcXG4gXFxuIGludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuIGludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5AQCAtNTQ1LDYgKzU1MCw5IEBAIGludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuIGludCBldGhubF90c2luZm9fZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xcbiBpbnQgZXRobmxfcnNzX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbiBpbnQgZXRobmxfcnNzX2RlbGV0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbitpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuK2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xcbitpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG4gXFxuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX3N0ZF9uYW1lc1tfX0VUSFRPT0xfU1RBVFNfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xcbiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19ldGhfcGh5X25hbWVzW19fRVRIVE9PTF9BX1NUQVRTX0VUSF9QSFlfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9wb3J0LmMgYi9uZXQvZXRodG9vbC9wb3J0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmUxYmNhZGJmZTQwYzBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbmV0L2V0aHRvb2wvcG9ydC5jXFxuQEAgLTAsMCArMSwzNzUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBDb3B5cmlnaHQgMjAyNiBCb290bGluXFxuKyAqL1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfbGlua190b3BvbG9neS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5X3BvcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJpdHNldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiY29tbW9uLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJuZXRsaW5rLmhcXFwiXFxuK1xcbitzdHJ1Y3QgcG9ydF9yZXFfaW5mbyB7XFxuK1xcdHN0cnVjdCBldGhubF9yZXFfaW5mbyBiYXNlO1xcbitcXHR1MzIgcG9ydF9pZDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEge1xcbitcXHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YVxcdGJhc2U7XFxuK1xcdF9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKHN1cHBvcnRlZCk7XFxuK1xcdERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLKGludGVyZmFjZXMpO1xcbitcXHR1MzIgcG9ydF9pZDtcXG4rXFx0Ym9vbCBtaWk7XFxuK1xcdGJvb2wgc2ZwO1xcbitcXHR1MzIgdXBzdHJlYW1fcG9ydDtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUE9SVF9SRVFJTkZPKF9fcmVxX2Jhc2UpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mKF9fcmVxX2Jhc2UsIHN0cnVjdCBwb3J0X3JlcV9pbmZvLCBiYXNlKVxcbitcXG4rI2RlZmluZSBQT1JUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEsIGJhc2UpXFxuK1xcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgKyAxXSA9IHtcXG4rXFx0W0VUSFRPT0xfQV9QT1JUX0hFQURFUl0gPSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSxcXG4rXFx0W0VUSFRPT0xfQV9QT1JUX0lEXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBwb3J0X3BhcnNlX3JlcXVlc3Qoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRiLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pO1xcbitcXG4rXFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgRVRIVE9PTF9BX1BPUlRfSUQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcXVlc3QtXFx1MDAzZXBvcnRfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUE9SVF9JRF0pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcG9ydF9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpO1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcXG4rXFxuK1xcdC8qIFJUTkwgbXVzdCBiZSBoZWxkIHdoaWxlIGhvbGRpbmcgYSByZWYgdG8gdGhlIHBoeV9wb3J0LiBIZXJlLCBjYWxsZXJcXG4rXFx0ICogaG9sZHMgUlROTC5cXG4rXFx0ICovXFxuK1xcdHBvcnQgPSBwaHlfbGlua190b3BvX2dldF9wb3J0KHJlcV9pbmZvLVxcdTAwM2VkZXYsIHJlcXVlc3QtXFx1MDAzZXBvcnRfaWQpO1xcbitcXHRpZiAoIXBvcnQpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0bGlua21vZGVfY29weShyZXBseS1cXHUwMDNlc3VwcG9ydGVkLCBwb3J0LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXHRwaHlfaW50ZXJmYWNlX2NvcHkocmVwbHktXFx1MDAzZWludGVyZmFjZXMsIHBvcnQtXFx1MDAzZWludGVyZmFjZXMpO1xcbitcXHRyZXBseS1cXHUwMDNlcG9ydF9pZCA9IHBvcnQtXFx1MDAzZWlkO1xcbitcXHRyZXBseS1cXHUwMDNlbWlpID0gcG9ydC1cXHUwMDNlaXNfbWlpO1xcbitcXHRyZXBseS1cXHUwMDNlc2ZwID0gcG9ydC1cXHUwMDNlaXNfc2ZwO1xcbitcXHRyZXBseS1cXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXFx1MDAzZXVwc3RyZWFtX3BvcnQgPyBwb3J0LVxcdTAwM2V1cHN0cmVhbV9wb3J0LVxcdTAwM2VpZCA6IDA7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwb3J0X3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEpXFxuK3tcXG4rXFx0Ym9vbCBjb21wYWN0ID0gcmVxX2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRVRIVE9PTF9GTEFHX0NPTVBBQ1RfQklUU0VUUztcXG4rXFx0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XFxuK1xcdHNpemVfdCBzaXplID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIEVUSFRPT0xfQV9QT1JUX0lEICovXFxuK1xcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcbitcXG4rXFx0aWYgKCFyZXBseS1cXHUwMDNlbWlpKSB7XFxuK1xcdFxcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyAqL1xcbitcXHRcXHRyZXQgPSBldGhubF9iaXRzZXRfc2l6ZShyZXBseS1cXHUwMDNlc3VwcG9ydGVkLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsXFxuK1xcdFxcdFxcdFxcdFxcdGxpbmtfbW9kZV9uYW1lcywgY29tcGFjdCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0c2l6ZSArPSByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTICovXFxuK1xcdFxcdHJldCA9IGV0aG5sX2JpdHNldF9zaXplKHJlcGx5LVxcdTAwM2VpbnRlcmZhY2VzLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRQSFlfSU5URVJGQUNFX01PREVfTUFYLFxcbitcXHRcXHRcXHRcXHRcXHRwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRzaXplICs9IHJldDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqL1xcbitcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcXG4rXFxuK1xcdC8qIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQgKi9cXG4rXFx0aWYgKHJlcGx5LVxcdTAwM2V1cHN0cmVhbV9wb3J0KVxcbitcXHRcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcXG4rXFxuK1xcdHJldHVybiBzaXplO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBvcnRfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSlcXG4re1xcbitcXHRib29sIGNvbXBhY3QgPSByZXFfaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBFVEhUT09MX0ZMQUdfQ09NUEFDVF9CSVRTRVRTO1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcXG4rXFx0aW50IHJldCwgcG9ydF90eXBlID0gRVRIVE9PTF9QT1JUX1RZUEVfTURJO1xcbitcXG4rXFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfSUQsIHJlcGx5LVxcdTAwM2Vwb3J0X2lkKSlcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFxuK1xcdGlmICghcmVwbHktXFx1MDAzZW1paSkge1xcbitcXHRcXHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcmVwbHktXFx1MDAzZXN1cHBvcnRlZCwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGxpbmtfbW9kZV9uYW1lcywgY29tcGFjdCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICByZXBseS1cXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXBseS1cXHUwMDNlbWlpIHx8IHJlcGx5LVxcdTAwM2VzZnApXFxuK1xcdFxcdHBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX1NGUDtcXG4rXFxuK1xcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1RZUEUsIHBvcnRfdHlwZSkpXFxuK1xcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuK1xcbitcXHRpZiAocmVwbHktXFx1MDAzZXVwc3RyZWFtX3BvcnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCxcXG4rXFx0XFx0XFx0cmVwbHktXFx1MDAzZXVwc3RyZWFtX3BvcnQpKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0cnVjdCBwb3J0X2R1bXBfY3R4IHtcXG4rXFx0c3RydWN0IHBvcnRfcmVxX2luZm9cXHQqcmVxX2luZm87XFxuK1xcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGFcXHQqcmVwbHlfZGF0YTtcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGlmaW5kZXg7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRwb3NfaWZpbmRleDtcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHBvc19wb3J0aWQ7XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IHBvcnRfZHVtcF9jdHggKlxcbitwb3J0X2R1bXBfY3R4X2dldChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuK3tcXG4rXFx0cmV0dXJuIChzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqKWNiLVxcdTAwM2VjdHg7XFxuK31cXG4rXFxuK2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XFxuK1xcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XFxuK1xcdHN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tXFx1MDAzZWluZm8uYXR0cnM7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5X2RhdGE7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcV9pbmZvICpyZXFfaW5mbztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXFx1MDAzZSBzaXplb2YoY2ItXFx1MDAzZWN0eCkpO1xcbitcXG4rXFx0cmVxX2luZm8gPSBremFsbG9jX29iaigqcmVxX2luZm8pO1xcbitcXHRpZiAoIXJlcV9pbmZvKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJlcGx5X2RhdGEgPSBrbWFsbG9jX29iaigqcmVwbHlfZGF0YSk7XFxuK1xcdGlmICghcmVwbHlfZGF0YSkge1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGZyZWVfcmVxX2luZm87XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KFxcdTAwMjZyZXFfaW5mby1cXHUwMDNlYmFzZSwgdGJbRVRIVE9PTF9BX1BPUlRfSEVBREVSXSxcXG4rXFx0XFx0XFx0XFx0XFx0IGdlbmxfaW5mb19uZXQoXFx1MDAyNmluZm8tXFx1MDAzZWluZm8pLFxcbitcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlaW5mby5leHRhY2ssIGZhbHNlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZnJlZV9yZXBfZGF0YTtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlaWZpbmRleCA9IDA7XFxuK1xcdGN0eC1cXHUwMDNlcG9zX2lmaW5kZXggPSAwO1xcbitcXG4rXFx0LyogRm9yIGZpbHRlcmVkIERVTVAgcmVxdWVzdHMsIGxldCdzIGp1c3Qgc3RvcmUgdGhlIGlmaW5kZXguIFdlJ2xsIGNoZWNrXFxuK1xcdCAqIGFnYWluIGlmIHRoZSBuZXRkZXYgaXMgc3RpbGwgdGhlcmUgd2hlbiBsb29waW5nIG92ZXIgdGhlIG5ldGRldiBsaXN0XFxuK1xcdCAqIGluIHRoZSBEVU1QIGxvb3AuXFxuK1xcdCAqL1xcbitcXHRpZiAocmVxX2luZm8tXFx1MDAzZWJhc2UuZGV2KSB7XFxuK1xcdFxcdGN0eC1cXHUwMDNlaWZpbmRleCA9IHJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0bmV0ZGV2X3B1dChyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXYsIFxcdTAwMjZyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXZfdHJhY2tlcik7XFxuK1xcdFxcdHJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGN0eC1cXHUwMDNlcmVxX2luZm8gPSByZXFfaW5mbztcXG4rXFx0Y3R4LVxcdTAwM2VyZXBseV9kYXRhID0gcmVwbHlfZGF0YTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZnJlZV9yZXBfZGF0YTpcXG4rXFx0a2ZyZWUocmVwbHlfZGF0YSk7XFxuK2ZyZWVfcmVxX2luZm86XFxuK1xcdGtmcmVlKHJlcV9pbmZvKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcG9ydF9kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XFxuK1xcdHZvaWQgKmVoZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRlaGRyID0gZXRobmxfZHVtcF9wdXQoc2tiLCBjYiwgRVRIVE9PTF9NU0dfUE9SVF9HRVRfUkVQTFkpO1xcbitcXHRpZiAoIWVoZHIpXFxuK1xcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuK1xcbitcXHRtZW1zZXQoY3R4LVxcdTAwM2VyZXBseV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHBvcnRfcmVwbHlfZGF0YSkpO1xcbitcXHRjdHgtXFx1MDAzZXJlcGx5X2RhdGEtXFx1MDAzZWJhc2UuZGV2ID0gZGV2O1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbitcXG4rXFx0cmV0ID0gcG9ydF9wcmVwYXJlX2RhdGEoXFx1MDAyNmN0eC1cXHUwMDNlcmVxX2luZm8tXFx1MDAzZWJhc2UsIFxcdTAwMjZjdHgtXFx1MDAzZXJlcGx5X2RhdGEtXFx1MDAzZWJhc2UsXFxuK1xcdFxcdFxcdFxcdGdlbmxfaW5mb19kdW1wKGNiKSk7XFxuK1xcbitcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc2tiLCBkZXYsIEVUSFRPT0xfQV9QT1JUX0hFQURFUik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IHBvcnRfZmlsbF9yZXBseShza2IsIFxcdTAwMjZjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyZXBseV9kYXRhLVxcdTAwM2ViYXNlKTtcXG4rXFxuK291dDpcXG4rXFx0Y3R4LVxcdTAwM2VyZXBseV9kYXRhLVxcdTAwM2ViYXNlLmRldiA9IE5VTEw7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGdlbmxtc2dfZW5kKHNrYiwgZWhkcik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmVfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkZXYgPSBjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldjtcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VsaW5rX3RvcG8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0eGFfZm9yX2VhY2hfc3RhcnQoXFx1MDAyNmRldi1cXHUwMDNlbGlua190b3BvLVxcdTAwM2Vwb3J0cywgY3R4LVxcdTAwM2Vwb3NfcG9ydGlkLCBwb3J0LFxcbitcXHRcXHRcXHQgIGN0eC1cXHUwMDNlcG9zX3BvcnRpZCkge1xcbitcXHRcXHRjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2Vwb3J0X2lkID0gY3R4LVxcdTAwM2Vwb3NfcG9ydGlkO1xcbitcXG4rXFx0XFx0cmV0ID0gcG9ydF9kdW1wX29uZShza2IsIGRldiwgY2IpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRjdHgtXFx1MDAzZXBvc19wb3J0aWQgPSAwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcG9ydF9kdW1wX2FsbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbitcXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZXBvc19pZmluZGV4KSB7XFxuK1xcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRcXHRjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldiA9IGRldjtcXG4rXFx0XFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XFxuK1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2X3RyYWNrZXIpO1xcbitcXHRcXHRjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldiA9IE5VTEw7XFxuK1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHJldCA9IDA7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgZXRobmxfcG9ydF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XFxuK1xcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbitcXHRcXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcXG4rXFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFxuK1xcdFxcdGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChcXHUwMDI2aW5mby1cXHUwMDNlaW5mbyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgY3R4LVxcdTAwM2VpZmluZGV4LCBcXHUwMDI2ZGV2X3RyYWNrZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdFxcdGN0eC1cXHUwMDNlcmVxX2luZm8tXFx1MDAzZWJhc2UuZGV2ID0gZGV2O1xcbitcXHRcXHRyZXQgPSBwb3J0X2R1bXBfb25lX2Rldihza2IsIGNiKTtcXG4rXFxuK1xcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2X3RyYWNrZXIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBwb3J0X2R1bXBfYWxsX2Rldihza2IsIGNiKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IGV0aG5sX3BvcnRfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXG4rXFx0a2ZyZWUoY3R4LVxcdTAwM2VyZXFfaW5mbyk7XFxuK1xcdGtmcmVlKGN0eC1cXHUwMDNlcmVwbHlfZGF0YSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHMgPSB7XFxuK1xcdC5yZXF1ZXN0X2NtZFxcdFxcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXFxuK1xcdC5yZXBseV9jbWRcXHRcXHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLFxcbitcXHQuaGRyX2F0dHJcXHRcXHQ9IEVUSFRPT0xfQV9QT1JUX0hFQURFUixcXG4rXFx0LnJlcV9pbmZvX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXFfaW5mbyksXFxuK1xcdC5yZXBseV9kYXRhX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhKSxcXG4rXFxuK1xcdC5wYXJzZV9yZXF1ZXN0XFx0XFx0PSBwb3J0X3BhcnNlX3JlcXVlc3QsXFxuK1xcdC5wcmVwYXJlX2RhdGFcXHRcXHQ9IHBvcnRfcHJlcGFyZV9kYXRhLFxcbitcXHQucmVwbHlfc2l6ZVxcdFxcdD0gcG9ydF9yZXBseV9zaXplLFxcbitcXHQuZmlsbF9yZXBseVxcdFxcdD0gcG9ydF9maWxsX3JlcGx5LFxcbit9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOToxOC42NDQyODIwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY2MzU4MjQwOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVUSFRPT0xfTkVUTElOS1wiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJQSFlMSU5LXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIkkyQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9zdGFydFwiLFxuICAgIFwiZXRobmxfcG9ydF9kdW1waXRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9kb25lXCIsXG4gICAgXCJwaHlfbGlua190b3BvX2FkZF9wb3J0XCIsXG4gICAgXCJwaHlfbGlua190b3BvX2RlbF9wb3J0XCIsXG4gICAgXCJwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzXCIsXG4gICAgXCJwaHlfc2V0X3Vwc3RyZWFtX3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIGBQT1JUX0dFVGAgdG8gcmV0cmlldmUgcGh5c2ljYWwgcG9ydCBpbmZvcm1hdGlvbiwgYW5kIGFkZHMgU0ZQIHBvcnQgc3VwcG9ydCB0byB0aGUgUEhZIGZyYW1ld29yay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgbmV0bGluayBBUElzIGFuZCBtb2RpZmllcyBjb3JlIFBIWS9waHlsaW5rIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGFiZDUzOThjNTJjYTk4ODYwNjFlYjMwYTgxMjAyMDAyYWU2MmI0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTA6Mjk6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuaW5kZXggNWRkNGQxYjVkOTRiYi4uNjdhYzM0MDA0NjJiZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcbkBAIC0yMTAsNiArMjEwLDExIEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGRpc2NhcmRcbiAgICAgICAgIHZhbHVlOiAzMVxuKyAgLVxuKyAgICBuYW1lOiBwb3J0LXR5cGVcbisgICAgZG9jOiB0eXBlIG9mIHBoeXNpY2FsIGNvbm5lY3RvclxuKyAgICB0eXBlOiBlbnVtXG4rICAgIGVudHJpZXM6IFttZGksIHNmcF1cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xOTA1LDYgKzE5MTAsMzIgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBsaW5rXG4gICAgICAgICB0eXBlOiBuZXN0XG4gICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90XG4rICAtXG4rICAgIG5hbWU6IHBvcnRcbisgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnRcbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBoZWFkZXJcbisgICAgICAgIHR5cGU6IG5lc3RcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBpZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLW1vZGVzXG4rICAgICAgICB0eXBlOiBuZXN0XG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLWludGVyZmFjZXNcbisgICAgICAgIHR5cGU6IG5lc3RcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXRcbisgICAgICAtXG4rICAgICAgICBuYW1lOiB0eXBlXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IHBvcnQtdHlwZVxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHVwc3RyZWFtLXBvcnRcbisgICAgICAgIHR5cGU6IHUzMlxuIFxuIG9wZXJhdGlvbnM6XG4gICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbFxuQEAgLTI4NTksNiArMjg5MCwyOSBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gd29yc3QtY2hhbm5lbFxuICAgICAgICAgICAgIC0gbGlua1xuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXG4rICAgIC1cbisgICAgICBuYW1lOiBwb3J0LWdldFxuKyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZVxuK1xuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBvcnRcbitcbisgICAgICBkbzogXHUwMDI2cG9ydC1nZXQtb3BcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgICAgICAtIGlkXG4rICAgICAgICByZXBseTpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIGhlYWRlclxuKyAgICAgICAgICAgIC0gaWRcbisgICAgICAgICAgICAtIHN1cHBvcnRlZC1tb2Rlc1xuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLWludGVyZmFjZXNcbisgICAgICAgICAgICAtIHR5cGVcbisgICAgICAgICAgICAtIHVwc3RyZWFtLXBvcnRcbisgICAgICBkdW1wOlxuKyAgICAgICAgcmVxdWVzdDpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIGhlYWRlclxuIFxuIG1jYXN0LWdyb3VwczpcbiAgIGxpc3Q6XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdFxuaW5kZXggZTkyYWJmNDVmYWY1MC4uYjQzMjZjODliMDc1MSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdFxuQEAgLTI1MzcsNiArMjUzNywzOSBAQCBXaXRoaW4gZWFjaCBjaGFubmVsIG5lc3QsIG9ubHkgdGhlIG1ldHJpY3Mgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgd2lsbCBiZSBwcmVzZW50LlxuIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW5cbiBgYGluY2x1ZGUvbGludXgvcGh5LmhgYC5cbiBcbitQT1JUX0dFVFxuKz09PT09PT09XG4rXG4rUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsXG4rcmVmZXJyZWQgdG8gYXMgXCJwb3J0c1wiLiBVc2VyIG5lZWRzIHRvIHNwZWNpZnkgYSBQT1JUX0lEIGZvciB0aGUgRE8gb3BlcmF0aW9uLFxuK2luIHdoaWNoIGNhc2UgdGhlIERPIHJlcXVlc3QgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNwZWNpZmljIHBvcnQuXG4rXG4rQXMgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgcG9ydCwgdGhlIERVTVAgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIGxpc3QgdGhlXG4rcG9ydHMgcHJlc2VudCBvbiBhIGdpdmVuIGludGVyZmFjZSwgYnkgcGFzc2luZyBhbiBpbnRlcmZhY2UgaW5kZXggb3IgbmFtZSBpblxuK3RoZSBkdW1wIHJlcXVlc3QuXG4rXG4rUmVxdWVzdCBjb250ZW50czpcbitcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcbisgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgdTMyICAgICBwb3J0IGlkXG4rICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK0tlcm5lbCByZXNwb25zZSBjb250ZW50czpcbitcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgICAgbmVzdGVkICByZXF1ZXN0IGhlYWRlclxuKyAgYGBFVEhUT09MX0FfUE9SVF9JRGBgICAgICAgICAgICAgICAgICAgIHUzMiAgICAgdGhlIHBvcnQncyB1bmlxdWUgaWRlbnRpZmllcixcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBuZXRkZXZpY2UuXG4rICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFU2BgICAgICAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIGxpbmttb2Rlc1xuKyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFU2BgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBNSUlcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXNcbisgIGBgRVRIVE9PTF9BX1BPUlRfVFlQRWBgICAgICAgICAgICAgICAgICB1MzIgICAgIHRoZSBwb3J0IHR5cGVcbisgIGBgRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVGBgICAgICAgICB1MzIgICAgIElmIGFueSwgdGhlIGluZGV4IG9mIHRoZSBNSUlcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgdGhhdCBmZWVkcyBpbnRvIHRoaXNcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuXG4rICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuIFJlcXVlc3QgdHJhbnNsYXRpb25cbiA9PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtMjY0Nyw0ICsyNjgwLDUgQEAgYXJlIG5ldGxpbmsgb25seS5cbiAgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUEhZX0dFVGBgXG4gICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgXG4gICBgYFNJT0NTSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX1NFVGBgXG4rICBuL2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1BPUlRfR0VUYGBcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuaW5kZXggNmUyOGQ5MDk0YmNlMy4uMmE5YjFlYzkzYjcwZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbkBAIC05OSwxMyArOTksMjkgQEAgd2lsbCBldmVudHVhbGx5IGJlIGFibGUgdG8gcmVwb3J0IGl0cyBvd24ga3NldHRpbmdzOjpcbiAgICAgICAgICAgICAoX19fX18pLS0tLS18IFBvcnQgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0rXG4gXG4rU0ZQIHBvcnRzXG4rPT09PT09PT09XG4rXG4rU0ZQIGludGVyZmFjZXMgaW52b2x2ZSAyIGRpc3RpbmN0IGNvbXBvbmVudHMsIGVhY2ggcmVwcmVzZW50ZWQgYnlcbithIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWAgaW5zdGFuY2UgOlxuK1xuKyAtIFRoZSBTRlAgY2FnZSBpdHNlbGYgaXMgYSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgLiBJdCdzIHNwZWNpYWxcbisgICBpbiB0aGF0IGl0J3Mgbm90IGFuIE1ESSBpbnRlcmZhY2UsIGJ1dCByYXRoZXIgYSBob3QtcGx1Z2dhYmxlIE1JSS5cbisgICBUaGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCBhc3NvY2lhdGVkIHRvIGl0IGxpc3RzIHRoZSBkaWZmZXJlbnRcbisgICBNSUkgaW50ZXJmYWNlcyB3ZSBjYW4gdXNlIG9uIHRoZSBjYWdlLlxuK1xuKyAtIFRoZSBTRlAgbW9kdWxlLCB3aGVuIGluc2VydGVkLCB3aWxsIGFsc28gYmUgYXNzb2NpYXRlZCB0byBhXG4rICAgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCwgdGhhdCByZXByZXNlbnRzIHRoZSB2YXJpb3VzIGxpbmttb2Rlc1xuKyAgIHRoYXQgaXQgZ2l2ZXMgYWNjZXNzIHRvLiBUaGUgbW9kdWxlJ3MgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYFxuKyAgIGRvZXNuJ3Qgc3VwZXJzZWRlIHRoZSBjYWdlJ3MgcG9ydCwgaXQgcmVmZXJlbmNlcyBpdCB0aHJvdWdoXG4rICAgdGhlIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWAgOmM6bWVtYmVyOmB1cHN0cmVhbV9wb3J0YCBmaWVsZC5cbitcbiBOZXh0IHN0ZXBzXG4gPT09PT09PT09PVxuIFxuLUFzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCBvbmx5IHBvcnRzIGNvbnRyb2xsZWQgYnkgUEhZIGRldmljZXMgYXJlXG4tc3VwcG9ydGVkLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGFkZCB0aGUgTmV0bGluayBBUEkgdG8gZXhwb3NlIHRoZXNlXG4tdG8gdXNlcnNwYWNlIGFuZCBhZGQgc3VwcG9ydCBmb3IgcmF3IHBvcnRzIChjb250cm9sbGVkIGJ5IHNvbWUgZmlybXdhcmUsIGFuZCBkaXJlY3RseVxuLW1hbmFnZWQgYnkgdGhlIE5JQyBkcml2ZXIpLlxuK0FzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCB0aGUgcG9ydCdzIHByZXNlbmNlIGFuZCBpbmZvcm1hdGlvbiBjYW4gb25seVxuK2JlIHF1ZXJpZWQsIGFuZCBpdCdzIG5vdCBwb3NzaWJsZSB0byBjaGFuZ2UgYW55IG9mIHRoZSBwb3J0J3Mgc2V0dGluZ3Mgb3Igc2VsZWN0XG4rd2hpY2ggb25lIHNob3VsZCBiZSB1c2VkLlxuIFxuIEFub3RoZXIgcGFyYWxsZWwgdGFzayBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgTUlJIG11eGluZyBmcmFtZXdvcmsgdG8gYWxsb3cgdGhlXG4tY29udHJvbCBvZiBub24tUEhZIGRyaXZlciBtdWx0aS1wb3J0IHNldHVwcy5cbitjb250cm9sIG9mIG5vbi1QSFkgZHJpdmVuIG11bHRpLXBvcnQgc2V0dXBzLlxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDkzMmVhMWRiMDQ4ZTUuLjM5NWY4YjVkMTg0OTUgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xODgxNiw2ICsxODgxNiw3IEBAIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2V0aGVybmV0LWNvbm5lY3Rvci55YW1sXG4gRjpcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbiBGOlx0ZHJpdmVycy9uZXQvcGh5L3BoeV9wb3J0LmNcbiBGOlx0aW5jbHVkZS9saW51eC9waHlfcG9ydC5oXG4rRjpcdG5ldC9ldGh0b29sL3BvcnQuY1xuIEs6XHRzdHJ1Y3RcXHMrcGh5X3BvcnR8cGh5X3BvcnRfXG4gXG4gTkVUV09SS0lORyBbR0VORVJBTF1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaCBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXG5pbmRleCA0MjEwODhlNmY2ZThmLi5lYzNkMzlhMGFlMDZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmhcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXG5AQCAtNjYsNSArNjYsNyBAQCB2b2lkIHBoeV9jYXBzX21lZGl1bV9nZXRfc3VwcG9ydGVkKHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcbiBcdFx0XHRcdCAgIGVudW0gZXRodG9vbF9saW5rX21lZGl1bSBtZWRpdW0sXG4gXHRcdFx0XHQgICBpbnQgbGFuZXMpO1xuIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2Rlcyk7XG4rdm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmcm9tLFxuK1x0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTtcbiBcbiAjZW5kaWYgLyogX19QSFlfQ0FQU19IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xuaW5kZXggOTQyZDQzMTkxNTYxZS4uNTU4ZTRkZjRkNjNjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xuQEAgLTQ0NSwzICs0NDUsMjkgQEAgdTMyIHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxuIFx0cmV0dXJuIG1lZGl1bXM7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXMpO1xuK1xuKy8qKlxuKyAqIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMoKSAtIEZpbHRlciBsaW5rbW9kZXMgd2l0aCBhbiBpbnRlcmZhY2UgbGlzdFxuKyAqIEB0bzogU3RvcmVzIHRoZSBmaWx0ZXJlZCBsaW5rbW9kZXNcbisgKiBAZnJvbTogTGlua21vZGVzIHRvIGZpbHRlclxuKyAqIEBpbnRlcmZhY2VzOiBCaXRmaWVsZCBvZiBwaHlfaW50ZXJmYWNlX3QgdGhhdCB3ZSB1c2UgZm9yIGZpbHRlcmluZ1xuKyAqXG4rICogRmlsdGVyIHRoZSBwcm92aWRlZCBsaW5rbW9kZXMsIG9ubHkgdG8ga2VlcCB0aGUgb25lcyB3ZSBjYW4gcG9zc2libHkgYWNoaWV2ZVxuKyAqIHdoZW4gdXNpbmcgYW55IG9mIHRoZSBwcm92aWRlZCBNSUkgaW50ZXJmYWNlcy5cbisgKi9cbit2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sXG4rXHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4rXHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmludGVyZmFjZXMpXG4re1xuK1x0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soaWZhY2VzX3N1cHBvcnRlZCkgPSB7fTtcbitcdHVuc2lnbmVkIGludCBpZmFjZXNfY2FwcyA9IDA7XG4rXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuK1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChpbnRlcmZhY2UsIGludGVyZmFjZXMsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgpXG4rXHRcdGlmYWNlc19jYXBzIHw9IHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKGludGVyZmFjZSk7XG4rXG4rXHRwaHlfY2Fwc19saW5rbW9kZXMoaWZhY2VzX2NhcHMsIGlmYWNlc19zdXBwb3J0ZWQpO1xuK1xuK1x0bGlua21vZGVfYW5kKHRvLCBmcm9tLCBpZmFjZXNfc3VwcG9ydGVkKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbmluZGV4IDk0YjJlODVlMDBhMzcuLjNkYTY4NzJlYmJiYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTQ5MCwxMSArMTQ5MCwyMiBAQCBzdGF0aWMgaW50IHBoeV9zZnBfY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4ge1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXY7XG4rXHRpbnQgcmV0O1xuIFxuLVx0aWYgKGRldilcbi1cdFx0cmV0dXJuIHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcbitcdHBoeWRldi1cdTAwM2VoYXNfc2ZwX21vZF9waHkgPSB0cnVlO1xuK1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHQvKiBJZiB3ZSBhcmVuJ3QgYXR0YWNoZWQgdG8gYSBuZXRkZXYsIHdlIGNhbid0IGFkZCB0aGUgU0ZQIFBIWSB0byBpdHNcbitcdCAqIHRvcG9sb2d5LlxuK1x0ICovXG4rXHRpZiAoIWRldilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC0xNTEyLDggKzE1MjMsMTIgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbiBcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2O1xuIFxuK1x0cGh5ZGV2LVx1MDAzZWhhc19zZnBfbW9kX3BoeSA9IGZhbHNlO1xuK1xuIFx0aWYgKGRldilcbiBcdFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTtcbitcbitcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIE5VTEwpO1xuIH1cbiBcbiAvKipcbkBAIC0xNjE3LDYgKzE2MzIsNzcgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9saW5rX2Rvd24odm9pZCAqdXBzdHJlYW0pXG4gXHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWxpbmtfZG93bihwb3J0KTtcbiB9XG4gXG4rc3RhdGljIGludCBwaHlfYWRkX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdC8qIENyZWF0ZSBtb2QgcG9ydCAqL1xuK1x0cG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7XG4rXHRpZiAoIXBvcnQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cG9ydC1cdTAwM2VhY3RpdmUgPSB0cnVlO1xuK1xuK1x0Y2FwcyA9IHNmcF9nZXRfbW9kdWxlX2NhcHMocGh5ZGV2LVx1MDAzZXNmcF9idXMpO1xuK1xuK1x0cGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyhwb3J0LVx1MDAzZXN1cHBvcnRlZCwgY2Fwcy1cdTAwM2VsaW5rX21vZGVzLFxuK1x0XHRcdFx0XHRwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydC1cdTAwM2VpbnRlcmZhY2VzKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2KSB7XG4rXHRcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiwgcG9ydCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIHdlIGRvbid0IHVzZSBwaHlfYWRkX3BvcnQoKSBoZXJlIGFzIHRoZSBtb2R1bGUgcG9ydCBpc24ndCBhIGRpcmVjdFxuK1x0ICogaW50ZXJmYWNlIGZyb20gdGhlIFBIWSwgYnV0IHJhdGhlciBhbiBleHRlbnNpb24gdG8gdGhlIHNmcC1idXMsIHRoYXRcbitcdCAqIGlzIGFscmVhZHkgcmVwcmVzZW50ZWQgYnkgaXRzIG93biBwaHlfcG9ydFxuK1x0ICovXG4rXHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBwb3J0O1xuK1xuK1x0cG9ydC1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGh5X2RlbF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpZiAoIXBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4rXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiwgcGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbitcbitcdHBoeV9wb3J0X2Rlc3Ryb3kocGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbitcdHBoeWRldi1cdTAwM2Vtb2RfcG9ydCA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXG4re1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuK1xuK1x0LyogSWYgdGhlcmUncyBhIGRvd25zdHJlYW0gU0ZQIG1vZHVsZSwgYW5kIGl0IGRvZXNuJ3QgY29udGFpbiBhIFBIWVxuK1x0ICogZGV2aWNlLCBsZXQncyBjcmVhdGUgYSBwaHlfcG9ydCB0byByZXByZXNlbnQgdGhhdCBtb2R1bGUuXG4rXHQgKi9cbitcdGlmICghcGh5ZGV2LVx1MDAzZWhhc19zZnBfbW9kX3BoeSlcbitcdFx0cmV0dXJuIHBoeV9hZGRfc2ZwX21vZF9wb3J0KHBoeWRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGh5X3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSlcbit7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4rXG4rXHQvKiBDYWxsZWQgdXBvbiBtb2R1bGUgcmVtb3ZhbCBvciB1cHN0cmVhbSByZW1vdmFsICovXG4rXHRpZiAoIXBoeWRldi1cdTAwM2VoYXNfc2ZwX21vZF9waHkpXG4rXHRcdHBoeV9kZWxfc2ZwX21vZF9wb3J0KHBoeWRldik7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcbiBcdC5hdHRhY2ggPSBwaHlfc2ZwX2F0dGFjaCxcbiBcdC5kZXRhY2ggPSBwaHlfc2ZwX2RldGFjaCxcbkBAIC0xNjI2LDYgKzE3MTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG4gXHQubGlua19kb3duID0gcGh5X3NmcF9saW5rX2Rvd24sXG4gXHQuY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Nvbm5lY3RfcGh5LFxuIFx0LmRpc2Nvbm5lY3RfcGh5ID0gcGh5X3NmcF9kaXNjb25uZWN0X3BoeSxcbitcdC5tb2R1bGVfc3RhcnQgPSBwaHlfc2ZwX21vZHVsZV9zdGFydCxcbitcdC5tb2R1bGVfc3RvcCA9IHBoeV9zZnBfbW9kdWxlX3N0b3AsXG4gfTtcbiBcbiBzdGF0aWMgaW50IHBoeV9hZGRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG5AQCAtMTY3MywxMyArMTc2MSwxMyBAQCBzdGF0aWMgdm9pZCBwaHlfZGVsX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuIFx0cGh5ZGV2LVx1MDAzZW5fcG9ydHMtLTtcbiB9XG4gXG4tc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbitzdGF0aWMgc3RydWN0IHBoeV9wb3J0ICpwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghcG9ydClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuIFx0cG9ydC1cdTAwM2VwYXJlbnRfdHlwZSA9IFBIWV9QT1JUX1BIWTtcbiBcdHBvcnQtXHUwMDNlcGh5ID0gcGh5ZGV2O1xuQEAgLTE2OTQsMTAgKzE3ODIsMTIgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdCAqIHdoZW4gYXR0YWNoaW5nIHRoZSBwb3J0IHRvIHRoZSBwaHlkZXYuXG4gXHQgKi9cbiBcdHJldCA9IHBoeV9hZGRfcG9ydChwaHlkZXYsIHBvcnQpO1xuLVx0aWYgKHJldClcbitcdGlmIChyZXQpIHtcbiBcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gcG9ydDtcbiB9XG4gXG4gLyoqXG5AQCAtMTcwNiwyNSArMTc5Niw1MCBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuICAqL1xuIHN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbitcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2ZwX2J1cyAqYnVzO1xuLVx0aW50IHJldCA9IDA7XG4rXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpIHtcbi1cdFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKTtcbi1cdFx0aWYgKElTX0VSUihidXMpKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKGJ1cyk7XG4rXHRpZiAoIXBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpXG4rXHRcdHJldHVybiAwO1xuIFxuLVx0XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbitcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XG4rXHRpZiAoSVNfRVJSKGJ1cykpXG4rXHRcdHJldHVybiBQVFJfRVJSKGJ1cyk7XG4gXG4tXHRcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG4tXHRcdHNmcF9idXNfcHV0KGJ1cyk7XG4rXHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbiBcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XG4rXHRpZiAoYnVzKSB7XG4rXHRcdHBvcnQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbitcdFx0aWYgKElTX0VSUihwb3J0KSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIocG9ydCk7XG4rXHRcdFx0cG9ydCA9IE5VTEw7XG4rXHRcdFx0Z290byBvdXRfc2ZwO1xuK1x0XHR9XG4gXHR9XG4gXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZXNmcF9idXMpXG4tXHRcdHJldCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xuK1x0cGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBwb3J0O1xuK1xuK1x0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3BvcnQ7XG4rXG4rXHQvKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIGdyYWJzIGEgcmVmIHRvIHRoZSBzZnAgYnVzIG9uIHN1Y2Nlc3MsIGl0J3NcbitcdCAqIHNhZmUgdG8gcmVsZWFzZSBpdCBub3cuXG4rXHQgKi9cbitcdHNmcF9idXNfcHV0KGJ1cyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK1xuK291dF9wb3J0OlxuK1x0aWYgKHBvcnQpIHtcbitcdFx0cGh5X2RlbF9wb3J0KHBoeWRldiwgcG9ydCk7XG4rXHRcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XG4rXHRcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbitcdH1cbitvdXRfc2ZwOlxuK1x0c2ZwX2J1c19wdXQoYnVzKTtcbitcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE4MTUsNiArMTkzMCwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdFx0ZXJyID0gcGh5X2xpbmtfdG9wb19hZGRfcGh5KGRldiwgcGh5ZGV2LCBQSFlfVVBTVFJFQU1fTUFDLCBkZXYpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbW9kX3BvcnQpIHtcbitcdFx0XHRlcnIgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KGRldiwgcGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0Z290byBlcnJvcjtcbitcdFx0fVxuIFx0fVxuIFxuIFx0LyogU29tZSBFdGhlcm5ldCBkcml2ZXJzIHRyeSB0byBjb25uZWN0IHRvIGEgUEhZIGRldmljZSBiZWZvcmVcbkBAIC0xOTUxLDYgKzIwNzIsOCBAQCB2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldi1cdTAwM2VwaHlkZXYgPSBOVUxMO1xuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2ID0gTlVMTDtcbiBcdFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5ZGV2KTtcbitcdFx0aWYgKHBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbitcdFx0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KGRldiwgcGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbiBcdH1cbiBcbiBcdHBoeWRldi1cdTAwM2VwaHlfbGlua19jaGFuZ2UgPSBOVUxMO1xuQEAgLTM2MDQsNiArMzcyNywyNSBAQCBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5X2dldF9zZnBfcG9ydCk7XG4gXG4rLyoqXG4rICogcGh5X3NldF91cHN0cmVhbV9wb3J0KCkgLSBTZXRzIHRoZSBwaHlfcG9ydCBjb250cm9sbGluZyB0aGUgTUlJIHRoaXMgUEhZIGlzXG4rICpcdFx0XHQgICAgIGF0dGFjaGVkIHRvLlxuKyAqIEBwaHlkZXY6IHBvaW50ZXIgdG8gdGhlIFBIWSBkZXZpY2Ugd2Ugc2V0IHRoZSB1cHN0cmVhbSBvZi5cbisgKiBAcG9ydDogVGhlIHBoeV9wb3J0IHVwc3RyZWFtIG9mIHRoaXMgUEhZLCBjYW4gYmUgTlVMTC5cbisgKi9cbit2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHBoeV9wb3J0ICpsb2NhbF9wb3J0O1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdHBoeWRldi1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcbitcbitcdHBoeV9mb3JfZWFjaF9wb3J0KHBoeWRldiwgbG9jYWxfcG9ydClcbitcdFx0bG9jYWxfcG9ydC1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3NldF91cHN0cmVhbV9wb3J0KTtcbitcbiAvKipcbiAgKiBmd25vZGVfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZndub2RlLCBmaW5kIHRoZSBtZGlvX2RldmljZVxuICAqIEBmd25vZGU6IHBvaW50ZXIgdG8gdGhlIG1kaW9fZGV2aWNlJ3MgZndub2RlXG5AQCAtMzg0Miw2ICszOTg0LDcgQEAgc3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbiBcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbitcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbiBcbiBcdHBoeV9jbGVhbnVwX3BvcnRzKHBoeWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuaW5kZXggNDEzNGRlN2FlMzEzZC4uNjcxMGExOTk5NjdhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuQEAgLTcsNiArNyw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9wb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbkBAIC0yMywxNyArMjQsODkgQEAgc3RhdGljIGludCBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHhhX2luaXRfZmxhZ3MoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBYQV9GTEFHU19BTExPQzEpO1xuIFx0dG9wby1cdTAwM2VuZXh0X3BoeV9pbmRleCA9IDE7XG4gXG4rXHR4YV9pbml0X2ZsYWdzKFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIFhBX0ZMQUdTX0FMTE9DMSk7XG4rXHR0b3BvLVx1MDAzZW5leHRfcG9ydF9pbmRleCA9IDE7XG4rXG4gXHRkZXYtXHUwMDNlbGlua190b3BvID0gdG9wbztcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICpwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoZGV2LVx1MDAzZWxpbmtfdG9wbylcbitcdFx0cmV0dXJuIGRldi1cdTAwM2VsaW5rX3RvcG87XG4rXG4rXHQvKiBUaGUgdG9wb2xvZ3kgaXMgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIHdlIGFkZCBhbiBvYmplY3QgdG8gaXQuXG4rXHQgKiBJdCBpcyBmcmVlZCBhbG9uZ3NpZGUgdGhlIG5ldGRldi4gSXQgY2FuIGJlIGNhbGxlZCBvbiBtdWx0aXBsZVxuK1x0ICogY29udGV4dHM6XG4rXHQgKiAgLSBJdCBjYW4gYmUgY2FsbGVkIGZyb20gLnByb2JlKCkgOiBObyBydG5sLCBubyBuZXRkZXZfbG9ja1xuK1x0ICogIC0gLm5kb19vcGVuKCkgOiBydG5sIGFuZCBwb3NzaWJseSBuZXRkZXZfbG9ja1xuK1x0ICogIC0gU0ZQIHN0YXRlIG1hY2hpbmUgOiBydG5sIGhlbGQgb3Igbm90XG4rXHQgKlxuK1x0ICogIEhvd2V2ZXIsIHdlIGNhbid0IHJlYWxseSBoYXZlIHJhY2VzIDpcbitcdCAqICAtIElmIHdlIGhhdmUgYSBQSFksIHBoeV9saW5rX3RvcG9fYWRkX3BoeSgpIHdpbGwgYWx3YXlzIHJ1biBmaXJzdFxuK1x0ICogICAgYW5kIHRyaWdnZXIgdGhlIGFsbG9jLiBPbmx5IHRoZW4gdGhlIHBvcnRzIGNhbiBiZSBhZGRlZCB0aHJvdWdoXG4rXHQgKiAgICBwaHlsaWIgb2Ygc2ZwLlxuK1x0ICogIC0gSWYgd2UgZG9uJ3QsIHRoZSBTRlAgcG9ydCBmb3IgdGhlIGNhZ2UgaXMgcmVnaXN0ZXJlZCBmaXJzdCwgYW5kXG4rXHQgKiAgICBvbmx5IHRoZW4gb3RoZXIgcG9ydHMvUEhZcyBjYW4gYmUgcmVnaXN0ZXJlZC5cbitcdCAqL1xuK1x0cmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1xuK1x0cmV0dXJuIGRldi1cdTAwM2VsaW5rX3RvcG87XG4rfVxuK1xuK2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbit7XG4rXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG87XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogUG9ydHMgY2FuIG5vdyBiZSBxdWVyaWVkIHdpdGhvdXQgcnRubCBmb3Igb3BzLWxvY2tlZCBkZXZpY2VzLCB3aGljaFxuK1x0ICogd2UgZG9uJ3Qgc3VwcG9ydCBub3cgYXMgcG9ydCByZXRyaWV2YWwgaXMgZG9uZSB1bmRlciBydG5sLlxuK1x0ICogV2UgZG9uJ3QgaGF2ZSBwaHlfcG9ydCBlbmFibGVkIGRldmljZXMgeWV0LCBsZXQncyBtYWtlIHN1cmVcbitcdCAqIHdlIGFyZSBsb3VkbHkgd2FybmVkIGFib3V0IHRoYXQgd2hlbiBpdCBoYXBwZW5zLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHR0b3BvID0gcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2MoZGV2KTtcbitcdGlmIChJU19FUlIodG9wbykpXG4rXHRcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xuK1xuK1x0LyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovXG4rXHRpZiAocG9ydC1cdTAwM2VpZClcbitcdFx0cmV0ID0geGFfaW5zZXJ0KFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIHBvcnQtXHUwMDNlaWQsIHBvcnQsIEdGUF9LRVJORUwpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSB4YV9hbGxvY19jeWNsaWMoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgXHUwMDI2cG9ydC1cdTAwM2VpZCwgcG9ydCxcbitcdFx0XHRcdCAgICAgIHhhX2xpbWl0XzMyYiwgXHUwMDI2dG9wby1cdTAwM2VuZXh0X3BvcnRfaW5kZXgsXG4rXHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fYWRkX3BvcnQpO1xuK1xuK3ZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbitcbitcdGlmICghdG9wbylcbitcdFx0cmV0dXJuO1xuK1xuK1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgcG9ydC1cdTAwM2VpZCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fZGVsX3BvcnQpO1xuK1xuIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4gXHRcdFx0ICBlbnVtIHBoeV91cHN0cmVhbSB1cHQsIHZvaWQgKnVwc3RyZWFtKVxuIHtcbi1cdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cdTAwM2VsaW5rX3RvcG87XG4rXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG87XG4gXHRzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogZXRodG9vbCBvcHMgbWF5IHJ1biB3aXRob3V0IHJ0bmxfbG9jaywgYW5kIHJ0bmxfbG9jayBpcyB3aGF0XG5AQCAtNDUsMTMgKzExOCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChXQVJOX09OX09OQ0UobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghdG9wbykge1xuLVx0XHRyZXQgPSBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koZGV2KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHR0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbi1cdH1cbitcdHRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpO1xuK1x0aWYgKElTX0VSUih0b3BvKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIodG9wbyk7XG4gXG4gXHRwZG4gPSBremFsbG9jX29iaigqcGRuKTtcbiBcdGlmICghcGRuKVxuQEAgLTg2LDggKzE1NSwyMCBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbitcdC8qIEFkZCBhbGwgdGhlIFBIWSdzIHBvcnRzIHRvIHRoZSB0b3BvbG9neSAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwaHktXHUwMDNlcG9ydHMsIGhlYWQpIHtcbitcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBvcnQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gZGVsX3BvcnRzO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gXG4rZGVsX3BvcnRzOlxuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbitcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuK1xuK1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBwaHktXHUwMDNlcGh5aW5kZXgpO1xuIGVycjpcbiBcdGtmcmVlKHBkbik7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTk5LDEwICsxODAsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuIFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuIFxuIFx0aWYgKCF0b3BvKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbitcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuK1xuIFx0cGRuID0geGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBwaHktXHUwMDNlcGh5aW5kZXgpO1xuIFxuIFx0LyogV2UgZGVsZXRlIHRoZSBQSFkgZnJvbSB0aGUgdG9wb2xvZ3ksIGhvd2V2ZXIgd2UgZG9uJ3QgcmUtc2V0IHRoZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5pbmRleCBmNDBhY2MwZDQxMzM4Li5hNWYwMjUxODdhZmEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuQEAgLTE0LDYgKzE0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9maXhlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9wb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbkBAIC05Myw2ICs5NSw4IEBAIHN0cnVjdCBwaHlsaW5rIHtcbiBcdERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLKHNmcF9pbnRlcmZhY2VzKTtcbiBcdF9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKHNmcF9zdXBwb3J0KTtcbiBcdHU4IHNmcF9wb3J0O1xuK1x0c3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0O1xuK1x0c3RydWN0IHBoeV9wb3J0ICptb2RfcG9ydDtcbiBcbiBcdHN0cnVjdCBlZWVfY29uZmlnIGVlZV9jZmc7XG4gXG5AQCAtMTc2NCw2ICsxNzY4LDUxIEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfZml4ZWRfcG9sbChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzO1xuIFxuK3N0YXRpYyBpbnQgcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4re1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoIXBsLVx1MDAzZW5ldGRldiB8fCAhcGwtXHUwMDNlc2ZwX2J1cylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcbitcdGlmICghcG9ydClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwb3J0LVx1MDAzZWlzX3NmcCA9IHRydWU7XG4rXHRwb3J0LVx1MDAzZWlzX21paSA9IHRydWU7XG4rXHRwb3J0LVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4rXG4rXHRwaHlfaW50ZXJmYWNlX2FuZChwb3J0LVx1MDAzZWludGVyZmFjZXMsIHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyxcbitcdFx0XHQgIHBoeWxpbmtfc2ZwX2ludGVyZmFjZXMpO1xuK1x0cGh5X3BvcnRfdXBkYXRlX3N1cHBvcnRlZChwb3J0KTtcbitcbitcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQocGwtXHUwMDNlbmV0ZGV2LCBwb3J0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3lfcG9ydDtcbitcbitcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBwb3J0O1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rb3V0X2Rlc3Ryb3lfcG9ydDpcbitcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XG4rXHRwbC1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbit7XG4rXHRpZiAocGwtXHUwMDNlbmV0ZGV2IFx1MDAyNlx1MDAyNiBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KVxuK1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4rXG4rXHRpZiAocGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydClcbitcdFx0cGh5X3BvcnRfZGVzdHJveShwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbitcbitcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4ge1xuQEAgLTE3ODEsOSArMTgzMCwxOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcbiBcdHBsLVx1MDAzZXNmcF9idXMgPSBidXM7XG4gXG4rXHRyZXQgPSBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHBsKTtcbitcdGlmIChyZXQpIHtcbitcdFx0c2ZwX2J1c19wdXQoYnVzKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbiBcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGwsIFx1MDAyNnNmcF9waHlsaW5rX29wcyk7XG4gXHRzZnBfYnVzX3B1dChidXMpO1xuIFxuK1x0aWYgKHJldClcbitcdFx0cGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTk0Niw2ICsyMDA0LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpO1xuIHZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbClcbiB7XG4gXHRzZnBfYnVzX2RlbF91cHN0cmVhbShwbC1cdTAwM2VzZnBfYnVzKTtcbitcdHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHBsKTtcbiBcdGlmIChwbC1cdTAwM2VsaW5rX2dwaW8pXG4gXHRcdGdwaW9kX3B1dChwbC1cdTAwM2VsaW5rX2dwaW8pO1xuIFxuQEAgLTM4NzEsMTQgKzM5MzAsNjcgQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3JlbW92ZSh2b2lkICp1cHN0cmVhbSlcbiBcdHBoeV9pbnRlcmZhY2VfemVybyhwbC1cdTAwM2VzZnBfaW50ZXJmYWNlcyk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzO1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoIXBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogQ3JlYXRlIG1vZCBwb3J0ICovXG4rXHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcbitcdGlmICghcG9ydClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwb3J0LVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4rXG4rXHRjYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwbC1cdTAwM2VzZnBfYnVzKTtcbitcbitcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXHUwMDNlbGlua19tb2RlcyxcbitcdFx0XHRcdFx0cGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydC1cdTAwM2VpbnRlcmZhY2VzKTtcbitcbitcdGlmIChwbC1cdTAwM2VuZXRkZXYpIHtcbitcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBvcnQpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRwb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0O1xuK1xuK1x0cGwtXHUwMDNlbW9kX3BvcnQgPSBwb3J0O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4re1xuK1x0aWYgKCFwbC1cdTAwM2Vtb2RfcG9ydClcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHBsLVx1MDAzZW5ldGRldilcbitcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBsLVx1MDAzZW1vZF9wb3J0KTtcbitcbitcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXHUwMDNlbW9kX3BvcnQpO1xuK1x0cGwtXHUwMDNlbW9kX3BvcnQgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcbiB7XG4gXHRzdHJ1Y3QgcGh5bGluayAqcGwgPSB1cHN0cmVhbTtcbitcdGludCByZXQ7XG4gXG4gXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdGFydCB0aGUgUEhZIG5vdy4gKi9cbiBcdGlmIChwbC1cdTAwM2VwaHlkZXYpIHtcbiBcdFx0cGh5X3N0YXJ0KHBsLVx1MDAzZXBoeWRldik7XG4gXHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHBsKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0LyogSWYgdGhlIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWSBidXQgd2UgZGlkbid0IGRldGVjdCBvbmUgd2VcbkBAIC0zODg3LDcgKzM5OTksMTYgQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXG4gXHRpZiAoIXBsLVx1MDAzZXNmcF9tYXlfaGF2ZV9waHkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcbitcdHJldCA9IHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZGVsX21vZF9wb3J0O1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZGVsX21vZF9wb3J0OlxuK1x0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxuQEAgLTM4OTcsNiArNDAxOCw4IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxuIFx0LyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi9cbiBcdGlmIChwbC1cdTAwM2VwaHlkZXYpXG4gXHRcdHBoeV9zdG9wKHBsLVx1MDAzZXBoeWRldik7XG4rXHRlbHNlXG4rXHRcdHBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChwbCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSlcbkBAIC0zOTQxLDYgKzQwNjQsOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxuIFx0cGh5X2ludGVyZmFjZV9hbmQocGh5LVx1MDAzZWhvc3RfaW50ZXJmYWNlcywgcGh5bGlua19zZnBfaW50ZXJmYWNlcyxcbiBcdFx0XHQgIHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXG4rXHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbitcbiBcdC8qIERvIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gKi9cbiBcdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfcGh5KHBsLCBwaHkpO1xuIH1cbkBAIC0zOTQ5LDYgKzQwNzQsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkodXBzdHJlYW0pO1xuK1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeWRldiwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDExMDkyYzMxNzViM2QuLjc0MWNhN2EwYTI1NzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtNTgyLDYgKzU4Miw3IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcbiAgKiBAd29sX2VuYWJsZWQ6IFNldCB0byB0cnVlIGlmIHRoZSBQSFkgb3IgdGhlIGF0dGFjaGVkIE1BQyBoYXZlIFdha2Utb24tTEFOXG4gICogXHRcdCBlbmFibGVkLlxuICAqIEBpc19nZW5waHlfZHJpdmVuOiBQSFkgaXMgZHJpdmVuIGJ5IG9uZSBvZiB0aGUgZ2VuZXJpYyBQSFkgZHJpdmVyc1xuKyAqIEBoYXNfc2ZwX21vZF9waHk6IFNldCB0cnVlIGlmIGRvd25zdHJlYW0gU0ZQIGJ1cydzIG1vZHVsZSBjb250YWlucyBhIFBIWVxuICAqIEBzdGF0ZTogU3RhdGUgb2YgdGhlIFBIWSBmb3IgbWFuYWdlbWVudCBwdXJwb3Nlc1xuICAqIEBkZXZfZmxhZ3M6IERldmljZS1zcGVjaWZpYyBmbGFncyB1c2VkIGJ5IHRoZSBQSFkgZHJpdmVyLlxuICAqXG5AQCAtNTk0LDYgKzU5NSw5IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcbiAgKiBAcGh5bGluazogUG9pbnRlciB0byBwaHlsaW5rIGluc3RhbmNlIGZvciB0aGlzIFBIWVxuICAqIEBzZnBfYnVzX2F0dGFjaGVkOiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgU0ZQIGJ1cyBoYXMgYmVlbiBhdHRhY2hlZFxuICAqIEBzZnBfYnVzOiBTRlAgYnVzIGF0dGFjaGVkIHRvIHRoaXMgUEhZJ3MgZmliZXIgcG9ydFxuKyAqIEBzZnBfY2FnZV9wb3J0OiBUaGUgcGh5X3BvcnQgY29ubmVjdGVkIHRvIHRoZSBkb3duc3RyZWFtIFNGUCBjYWdlXG4rICogQG1vZF9wb3J0OiBwaHlfcG9ydCByZXByZXNlbnRpbmcgdGhlIFNGUCBtb2R1bGUsIGlmIGl0IGlzIHBoeS1sZXNzXG4rICogQHVwc3RyZWFtX3BvcnQ6IHBoeV9wb3J0IHRoaXMgUEhZJ3MgTUlJIGF0dGFjaGVzIHRvLCBpZiBhbnlcbiAgKiBAYXR0YWNoZWRfZGV2OiBUaGUgYXR0YWNoZWQgZW5ldCBkcml2ZXIncyBkZXZpY2UgaW5zdGFuY2UgcHRyXG4gICogQGFkanVzdF9saW5rOiBDYWxsYmFjayBmb3IgdGhlIGVuZXQgY29udHJvbGxlciB0byByZXNwb25kIHRvIGNoYW5nZXM6IGluIHRoZVxuICAqICAgICAgICAgICAgICAgbGluayBzdGF0ZS5cbkBAIC03MDYsNiArNzEwLDcgQEAgc3RydWN0IHBoeV9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaXJxX3JlcnVuOjE7XG4gXG4gXHR1bnNpZ25lZCBkZWZhdWx0X3RpbWVzdGFtcDoxO1xuK1x0dW5zaWduZWQgaGFzX3NmcF9tb2RfcGh5OjE7XG4gXG4gXHRpbnQgcmF0ZV9tYXRjaGluZztcbiBcbkBAIC03ODUsNiArNzkwLDkgQEAgc3RydWN0IHBoeV9kZXZpY2Uge1xuIFx0LyogVGhpcyBtYXkgYmUgbW9kaWZpZWQgdW5kZXIgdGhlIHJ0bmwgbG9jayAqL1xuIFx0Ym9vbCBzZnBfYnVzX2F0dGFjaGVkO1xuIFx0c3RydWN0IHNmcF9idXMgKnNmcF9idXM7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xuK1x0c3RydWN0IHBoeV9wb3J0ICp1cHN0cmVhbV9wb3J0O1xuIFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqYXR0YWNoZWRfZGV2O1xuIFx0c3RydWN0IG1paV90aW1lc3RhbXBlciAqbWlpX3RzO1xuQEAgLTI0NjgsNiArMjQ3Niw4IEBAIGludCBfX3BoeV9od3RzdGFtcF9zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcbiBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4rdm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcbitcbiAvKipcbiAgKiBwaHlfbW9kdWxlX2RyaXZlcigpIC0gSGVscGVyIG1hY3JvIGZvciByZWdpc3RlcmluZyBQSFkgZHJpdmVyc1xuICAqIEBfX3BoeV9kcml2ZXJzOiBhcnJheSBvZiBQSFkgZHJpdmVycyB0byByZWdpc3RlclxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxuaW5kZXggOTU1NzVmNjhkNWJjNy4uOTU4NTI4MmNhZTNmYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXG5AQCAtMTMsMTQgKzEzLDE5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuIHN0cnVjdCB4YXJyYXk7XG4gc3RydWN0IHBoeV9kZXZpY2U7XG4rc3RydWN0IHBoeV9wb3J0O1xuIHN0cnVjdCBzZnBfYnVzO1xuIFxuIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSB7XG4gXHRzdHJ1Y3QgeGFycmF5IHBoeXM7XG4gXHR1MzIgbmV4dF9waHlfaW5kZXg7XG4rXG4rXHRzdHJ1Y3QgeGFycmF5IHBvcnRzO1xuK1x0dTMyIG5leHRfcG9ydF9pbmRleDtcbiB9O1xuIFxuIHN0cnVjdCBwaHlfZGV2aWNlX25vZGUge1xuQEAgLTQ4LDYgKzUzLDkgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuIFxuK2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4rdm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqXG4gcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiB7XG5AQCAtNjQsNiArNzIsMjUgQEAgcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXG4rcGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZClcbit7XG4rXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuK1xuK1x0aWYgKCF0b3BvKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdC8qIHBvcnRzIGluIHRoZSB0b3BvIGFyZSBSVE5MIHByb3RlY3RlZCwgYnV0IG1heSBiZSBhY2Nlc3NlZCB1bmRlclxuK1x0ICogbmV0ZGV2X2xvY2sgZm9yIG9wcy1sb2NrZWQgZGV2aWNlcy4gRm9yIG5vdyBrZWVwIHRoZW0gdW5kZXIgcnRubFxuK1x0ICogcHJvdGVjdGlvbiwgYXMgbm8gb3BzLWxvY2tlZCBkZXZpY2VzIGhhdmUgcGh5X3BvcnQgY2FwYWJpbGl0aWVzXG4rXHQgKiB5ZXQuXG4rXHQgKi9cbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHQvKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwgd2hpbGUgaGFuZGxpbmcgdGhlIHBoeV9wb3J0ICovXG4rXHRyZXR1cm4geGFfbG9hZChcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzLCBwb3J0X2lkKTtcbit9XG4rXG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbkBAIC03NywxMSArMTA0LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0IHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcbiBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXG4rcGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZClcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9fUEhZX0xJTktfVE9QT0xPR1lfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaCBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuaW5kZXggMGVmMGY1Y2U0NzA5Mi4uOGY0NWMwMzFjYmMxMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oXG5AQCAtMzYsOSArMzYsMTIgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7XG4gLyoqXG4gICogc3RydWN0IHBoeV9wb3J0IC0gQSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldHdvcmsgZGV2aWNlIHBoeXNpY2FsIGludGVyZmFjZVxuICAqXG4rICogQGlkOiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBvcnQgd2l0aGluIHRoZSB0b3BvbG9neVxuICAqIEBoZWFkOiBVc2VkIGJ5IHRoZSBwb3J0J3MgcGFyZW50IHRvIGxpc3QgcG9ydHNcbiAgKiBAcGFyZW50X3R5cGU6IFRoZSB0eXBlIG9mIGRldmljZSB0aGlzIHBvcnQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvXG4gICogQHBoeTogSWYgdGhlIHBhcmVudCBpcyBQSFlfUE9SVF9QSFlERVYsIHRoZSBQSFkgY29udHJvbGxpbmcgdGhhdCBwb3J0XG4rICogQHVwc3RyZWFtX3BvcnQ6IEluZGljYXRlcyB0aGUgTUlJIHBvcnQgdGhhdCBmZWVkcyB0aGlzIHBvcnQsIGlmIGFueSxcbisgKlx0XHQgICBlLmcuIHRoZSBTRlAgY2FnZSBwb3J0IGZvciBhIFNGUCBtb2R1bGUgcG9ydC5cbiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlclxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxuICAqIEBtZWRpdW1zOiBCaXRtYXNrIG9mIHRoZSBwaHlzaWNhbCBtZWRpdW1zIHRoaXMgcG9ydCBwcm92aWRlcyBhY2Nlc3MgdG9cbkBAIC01MiwxMSArNTUsMTMgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7XG4gICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuXG4gICovXG4gc3RydWN0IHBoeV9wb3J0IHtcbitcdHUzMiBpZDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgaGVhZDtcbiBcdGVudW0gcGh5X3BvcnRfcGFyZW50IHBhcmVudF90eXBlO1xuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xuIFx0fTtcbitcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcbiBcbiBcdGNvbnN0IHN0cnVjdCBwaHlfcG9ydF9vcHMgKm9wcztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmMy4uZjlkODc5NGVhYmMxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbkBAIC03OCw2ICs3OCwxMSBAQCBlbnVtIGV0aHRvb2xfcHNlX2V2ZW50IHtcbiBcdEVUSFRPT0xfUFNFX0VWRU5UX1NXX1BXX0NPTlRST0xfRVJST1IgPSA2NCxcbiB9O1xuIFxuK2VudW0gZXRodG9vbF9wb3J0X3R5cGUge1xuK1x0RVRIVE9PTF9QT1JUX1RZUEVfTURJLFxuK1x0RVRIVE9PTF9QT1JUX1RZUEVfU0ZQLFxuK307XG4rXG4gZW51bSB7XG4gXHRFVEhUT09MX0FfSEVBREVSX1VOU1BFQyxcbiBcdEVUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYLFxuQEAgLTg0MCw2ICs4NDUsMTggQEAgZW51bSB7XG4gXHRFVEhUT09MX0FfTVNFX01BWCA9IChfX0VUSFRPT0xfQV9NU0VfQ05UIC0gMSlcbiB9O1xuIFxuK2VudW0ge1xuK1x0RVRIVE9PTF9BX1BPUlRfSEVBREVSID0gMSxcbitcdEVUSFRPT0xfQV9QT1JUX0lELFxuK1x0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxuK1x0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsXG4rXHRFVEhUT09MX0FfUE9SVF9UWVBFLFxuK1x0RVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCxcbitcbitcdF9fRVRIVE9PTF9BX1BPUlRfQ05ULFxuK1x0RVRIVE9PTF9BX1BPUlRfTUFYID0gKF9fRVRIVE9PTF9BX1BPUlRfQ05UIC0gMSlcbit9O1xuK1xuIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfVVNFUl9OT05FID0gMCxcbiBcdEVUSFRPT0xfTVNHX1NUUlNFVF9HRVQgPSAxLFxuQEAgLTg5Myw2ICs5MTAsNyBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfQUNULFxuIFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9BQ1QsXG4gXHRFVEhUT09MX01TR19NU0VfR0VULFxuK1x0RVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4gXG4gXHRfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULFxuIFx0RVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpXG5AQCAtOTU0LDYgKzk3Miw3IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9OVEYsXG4gXHRFVEhUT09MX01TR19SU1NfREVMRVRFX05URixcbiBcdEVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksXG4rXHRFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSxcbiBcbiBcdF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCxcbiBcdEVUSFRPT0xfTVNHX0tFUk5FTF9NQVggPSAoX19FVEhUT09MX01TR19LRVJORUxfQ05UIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBjMWMxYmUxYTY5NjJmLi5iMzZjYzVjNDc4MTZhIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTEzMTUsNiArMTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXHUwMDI2XHUwMDI2IHRvcG8pIHtcbiBcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMpO1xuK1x0XHR4YV9kZXN0cm95KFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMpO1xuIFx0XHRrZnJlZSh0b3BvKTtcbiBcdFx0ZGV2LVx1MDAzZWxpbmtfdG9wbyA9IE5VTEw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuaW5kZXggNjI5YzEwOTE2NjcwZS4uOWI1YjA5NjcwMDA4MSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlXG4rKysgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuQEAgLTksNCArOSw0IEBAIGV0aHRvb2xfbmwteVx0Oj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXFxcbiBcdFx0ICAgY2hhbm5lbHMubyBjb2FsZXNjZS5vIHBhdXNlLm8gZWVlLm8gdHNpbmZvLm8gY2FibGV0ZXN0Lm8gXFxcbiBcdFx0ICAgdHVubmVscy5vIGZlYy5vIGVlcHJvbS5vIHN0YXRzLm8gcGhjX3ZjbG9ja3MubyBtbS5vIFxcXG4gXHRcdCAgIG1vZHVsZS5vIGNtaXNfZndfdXBkYXRlLm8gY21pc19jZGIubyBwc2UtcGQubyBwbGNhLm8gXFxcbi1cdFx0ICAgcGh5Lm8gdHNjb25maWcubyBtc2Uub1xuK1x0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vIHBvcnQub1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuYyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xuaW5kZXggMWFmMzk1YjU0MzMwZS4uYzA3NmMwN2QwYTA4MCAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuY1xuKysrIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5AQCAtMjYsNiArMjYsOCBAQCBzdGF0aWMgdTMyIGV0aG5sX2JjYXN0X3NlcTtcbiBcdFx0XHQgICAgIEVUSFRPT0xfRkxBR19PTUlUX1JFUExZKVxuICNkZWZpbmUgRVRIVE9PTF9GTEFHU19TVEFUUyAoRVRIVE9PTF9GTEFHU19CQVNJQyB8IEVUSFRPT0xfRkxBR19TVEFUUylcbiBcbitjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXSBfX3JvX2FmdGVyX2luaXQ7XG4rXG4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtdID0ge1xuIFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W0VUSFRPT0xfQV9IRUFERVJfREVWX05BTUVdXHQ9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyxcbkBAIC00MzEsNiArNDMzLDcgQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHtcbiBcdFtFVEhUT09MX01TR19UU0NPTkZJR19TRVRdXHQ9IFx1MDAyNmV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX1BIWV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX01TRV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfbXNlX3JlcXVlc3Rfb3BzLFxuK1x0W0VUSFRPT0xfTVNHX1BPUlRfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX3BvcnRfcmVxdWVzdF9vcHMsXG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuQEAgLTE1NzIsNiArMTU3NSwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIGV0aHRvb2xfZ2VubF9vcHNbXSA9IHtcbiBcdFx0LnBvbGljeSA9IGV0aG5sX21zZV9nZXRfcG9saWN5LFxuIFx0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfbXNlX2dldF9wb2xpY3kpIC0gMSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5jbWRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4rXHRcdC5kb2l0XHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcbitcdFx0LnN0YXJ0XHQ9IGV0aG5sX3BvcnRfZHVtcF9zdGFydCxcbitcdFx0LmR1bXBpdFx0PSBldGhubF9wb3J0X2R1bXBpdCxcbitcdFx0LmRvbmVcdD0gZXRobmxfcG9ydF9kdW1wX2RvbmUsXG4rXHRcdC5wb2xpY3kgPSBldGhubF9wb3J0X2dldF9wb2xpY3ksXG4rXHRcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9wb3J0X2dldF9wb2xpY3kpIC0gMSxcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGV0aHRvb2xfbmxfbWNncnBzW10gPSB7XG5AQCAtMTU5NCwxMCArMTYwNiwyMyBAQCBzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGV0aHRvb2xfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuIFxuIC8qIG1vZHVsZSBzZXR1cCAqL1xuIFxuK3N0YXRpYyB2b2lkIF9faW5pdCBldGhubF9waHlfbmFtZXNfcG9wdWxhdGUodm9pZClcbit7XG4rXHRjb25zdCBjaGFyICpuYW1lO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQSFlfSU5URVJGQUNFX01PREVfTUFYOyBpKyspIHtcbitcdFx0bmFtZSA9IHBoeV9tb2RlcyhpKTtcbitcdFx0c3Ryc2NweShwaHlfaW50ZXJmYWNlX25hbWVzW2ldLCBuYW1lLCBFVEhfR1NUUklOR19MRU4pO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IF9faW5pdCBldGhubF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbitcdGV0aG5sX3BoeV9uYW1lc19wb3B1bGF0ZSgpO1xuK1xuIFx0cmV0ID0gZ2VubF9yZWdpc3Rlcl9mYW1pbHkoXHUwMDI2ZXRodG9vbF9nZW5sX2ZhbWlseSk7XG4gXHRpZiAoV0FSTihyZXQgXHUwMDNjIDAsIFwiZXRodG9vbDogZ2VuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24gZmFpbGVkXCIpKVxuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuaW5kZXggM2U5NjlhMDcwZjlmZS4uZGM3MjExZjY3YzRkNSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxuKysrIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5AQCAtNSwxMSArNSwxNCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZXRobmxfcmVxX2luZm87XG4gXG4rZXh0ZXJuIGNoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dO1xuK1xuIGludCBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpuZXN0LCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbkBAIC00NzQsNiArNDc3LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tbV9yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BoeV9yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbXNlX3JlcXVlc3Rfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcG9ydF9yZXF1ZXN0X29wcztcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xuQEAgLTUzMCw2ICs1MzQsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9IRUFERVIgKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX3NldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX01BWCArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9tc2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfTVNFX0hFQURFUiArIDFdO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgKyAxXTtcbiBcbiBpbnQgZXRobmxfc2V0X2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbkBAIC01NDUsNiArNTUwLDkgQEAgaW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBpbnQgZXRobmxfdHNpbmZvX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBpbnQgZXRobmxfcnNzX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4raW50IGV0aG5sX3BvcnRfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuK2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuK2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuIFxuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX3N0ZF9uYW1lc1tfX0VUSFRPT0xfU1RBVFNfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX2V0aF9waHlfbmFtZXNbX19FVEhUT09MX0FfU1RBVFNfRVRIX1BIWV9DTlRdW0VUSF9HU1RSSU5HX0xFTl07XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcG9ydC5jIGIvbmV0L2V0aHRvb2wvcG9ydC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTFiY2FkYmZlNDBjMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2V0aHRvb2wvcG9ydC5jXG5AQCAtMCwwICsxLDM3NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIENvcHlyaWdodCAyMDI2IEJvb3RsaW5cbisgKi9cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfcG9ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImJpdHNldC5oXCJcbisjaW5jbHVkZSBcImNvbW1vbi5oXCJcbisjaW5jbHVkZSBcIm5ldGxpbmsuaFwiXG4rXG4rc3RydWN0IHBvcnRfcmVxX2luZm8ge1xuK1x0c3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7XG4rXHR1MzIgcG9ydF9pZDtcbit9O1xuK1xuK3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEge1xuK1x0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGFcdGJhc2U7XG4rXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpO1xuK1x0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soaW50ZXJmYWNlcyk7XG4rXHR1MzIgcG9ydF9pZDtcbitcdGJvb2wgbWlpO1xuK1x0Ym9vbCBzZnA7XG4rXHR1MzIgdXBzdHJlYW1fcG9ydDtcbit9O1xuK1xuKyNkZWZpbmUgUE9SVF9SRVFJTkZPKF9fcmVxX2Jhc2UpIFxcXG4rXHRjb250YWluZXJfb2YoX19yZXFfYmFzZSwgc3RydWN0IHBvcnRfcmVxX2luZm8sIGJhc2UpXG4rXG4rI2RlZmluZSBQT1JUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxuK1x0Y29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBvcnRfcmVwbHlfZGF0YSwgYmFzZSlcbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXG4rXHRbRVRIVE9PTF9BX1BPUlRfSURdID0gTkxBX1BPTElDWV9NSU4oTkxBX1UzMiwgMSksXG4rfTtcbitcbitzdGF0aWMgaW50IHBvcnRfcGFyc2VfcmVxdWVzdChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRiLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4rXG4rXHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBFVEhUT09MX0FfUE9SVF9JRCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVxdWVzdC1cdTAwM2Vwb3J0X2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BPUlRfSURdKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXG4rXHRcdFx0ICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XG4rXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4rXG4rXHQvKiBSVE5MIG11c3QgYmUgaGVsZCB3aGlsZSBob2xkaW5nIGEgcmVmIHRvIHRoZSBwaHlfcG9ydC4gSGVyZSwgY2FsbGVyXG4rXHQgKiBob2xkcyBSVE5MLlxuK1x0ICovXG4rXHRwb3J0ID0gcGh5X2xpbmtfdG9wb19nZXRfcG9ydChyZXFfaW5mby1cdTAwM2VkZXYsIHJlcXVlc3QtXHUwMDNlcG9ydF9pZCk7XG4rXHRpZiAoIXBvcnQpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0bGlua21vZGVfY29weShyZXBseS1cdTAwM2VzdXBwb3J0ZWQsIHBvcnQtXHUwMDNlc3VwcG9ydGVkKTtcbitcdHBoeV9pbnRlcmZhY2VfY29weShyZXBseS1cdTAwM2VpbnRlcmZhY2VzLCBwb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuK1x0cmVwbHktXHUwMDNlcG9ydF9pZCA9IHBvcnQtXHUwMDNlaWQ7XG4rXHRyZXBseS1cdTAwM2VtaWkgPSBwb3J0LVx1MDAzZWlzX21paTtcbitcdHJlcGx5LVx1MDAzZXNmcCA9IHBvcnQtXHUwMDNlaXNfc2ZwO1xuK1x0cmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA/IHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydC1cdTAwM2VpZCA6IDA7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwb3J0X3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbitcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSlcbit7XG4rXHRib29sIGNvbXBhY3QgPSByZXFfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRVRIVE9PTF9GTEFHX0NPTVBBQ1RfQklUU0VUUztcbitcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpO1xuK1x0c2l6ZV90IHNpemUgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdC8qIEVUSFRPT0xfQV9QT1JUX0lEICovXG4rXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbitcbitcdGlmICghcmVwbHktXHUwMDNlbWlpKSB7XG4rXHRcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyAqL1xuK1x0XHRyZXQgPSBldGhubF9iaXRzZXRfc2l6ZShyZXBseS1cdTAwM2VzdXBwb3J0ZWQsIE5VTEwsXG4rXHRcdFx0XHRcdF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyxcbitcdFx0XHRcdFx0bGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRzaXplICs9IHJldDtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTICovXG4rXHRcdHJldCA9IGV0aG5sX2JpdHNldF9zaXplKHJlcGx5LVx1MDAzZWludGVyZmFjZXMsIE5VTEwsXG4rXHRcdFx0XHRcdFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsXG4rXHRcdFx0XHRcdHBoeV9pbnRlcmZhY2VfbmFtZXMsIGNvbXBhY3QpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHNpemUgKz0gcmV0O1xuK1x0fVxuK1xuK1x0LyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqL1xuK1x0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XG4rXG4rXHQvKiBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUICovXG4rXHRpZiAocmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydClcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XG4rXG4rXHRyZXR1cm4gc2l6ZTtcbit9XG4rXG4rc3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKVxuK3tcbitcdGJvb2wgY29tcGFjdCA9IHJlcV9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBFVEhUT09MX0ZMQUdfQ09NUEFDVF9CSVRTRVRTO1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XG4rXHRpbnQgcmV0LCBwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9NREk7XG4rXG4rXHRpZiAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUE9SVF9JRCwgcmVwbHktXHUwMDNlcG9ydF9pZCkpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRpZiAoIXJlcGx5LVx1MDAzZW1paSkge1xuK1x0XHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxuK1x0XHRcdFx0ICAgICAgIHJlcGx5LVx1MDAzZXN1cHBvcnRlZCwgTlVMTCxcbitcdFx0XHRcdCAgICAgICBfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsXG4rXHRcdFx0XHQgICAgICAgbGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gZXRobmxfcHV0X2JpdHNldChza2IsIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTLFxuK1x0XHRcdFx0ICAgICAgIHJlcGx5LVx1MDAzZWludGVyZmFjZXMsIE5VTEwsXG4rXHRcdFx0XHQgICAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX01BWCxcbitcdFx0XHRcdCAgICAgICBwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKHJlcGx5LVx1MDAzZW1paSB8fCByZXBseS1cdTAwM2VzZnApXG4rXHRcdHBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX1NGUDtcbitcbitcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1RZUEUsIHBvcnRfdHlwZSkpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRpZiAocmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCBcdTAwMjZcdTAwMjZcbitcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsXG4rXHRcdFx0cmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCkpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RydWN0IHBvcnRfZHVtcF9jdHgge1xuK1x0c3RydWN0IHBvcnRfcmVxX2luZm9cdCpyZXFfaW5mbztcbitcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGFcdCpyZXBseV9kYXRhO1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRpZmluZGV4O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRwb3NfaWZpbmRleDtcbitcdHVuc2lnbmVkIGxvbmdcdFx0cG9zX3BvcnRpZDtcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqXG4rcG9ydF9kdW1wX2N0eF9nZXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHJldHVybiAoc3RydWN0IHBvcnRfZHVtcF9jdHggKiljYi1cdTAwM2VjdHg7XG4rfVxuK1xuK2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XG4rXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuK1x0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cdTAwM2VpbmZvLmF0dHJzO1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YTtcbitcdHN0cnVjdCBwb3J0X3JlcV9pbmZvICpyZXFfaW5mbztcbitcdGludCByZXQ7XG4rXG4rXHRCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpIFx1MDAzZSBzaXplb2YoY2ItXHUwMDNlY3R4KSk7XG4rXG4rXHRyZXFfaW5mbyA9IGt6YWxsb2Nfb2JqKCpyZXFfaW5mbyk7XG4rXHRpZiAoIXJlcV9pbmZvKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJlcGx5X2RhdGEgPSBrbWFsbG9jX29iaigqcmVwbHlfZGF0YSk7XG4rXHRpZiAoIXJlcGx5X2RhdGEpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBmcmVlX3JlcV9pbmZvO1xuK1x0fVxuK1xuK1x0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXHUwMDI2cmVxX2luZm8tXHUwMDNlYmFzZSwgdGJbRVRIVE9PTF9BX1BPUlRfSEVBREVSXSxcbitcdFx0XHRcdFx0IGdlbmxfaW5mb19uZXQoXHUwMDI2aW5mby1cdTAwM2VpbmZvKSxcbitcdFx0XHRcdFx0IGluZm8tXHUwMDNlaW5mby5leHRhY2ssIGZhbHNlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZnJlZV9yZXBfZGF0YTtcbitcbitcdGN0eC1cdTAwM2VpZmluZGV4ID0gMDtcbitcdGN0eC1cdTAwM2Vwb3NfaWZpbmRleCA9IDA7XG4rXG4rXHQvKiBGb3IgZmlsdGVyZWQgRFVNUCByZXF1ZXN0cywgbGV0J3MganVzdCBzdG9yZSB0aGUgaWZpbmRleC4gV2UnbGwgY2hlY2tcbitcdCAqIGFnYWluIGlmIHRoZSBuZXRkZXYgaXMgc3RpbGwgdGhlcmUgd2hlbiBsb29waW5nIG92ZXIgdGhlIG5ldGRldiBsaXN0XG4rXHQgKiBpbiB0aGUgRFVNUCBsb29wLlxuK1x0ICovXG4rXHRpZiAocmVxX2luZm8tXHUwMDNlYmFzZS5kZXYpIHtcbitcdFx0Y3R4LVx1MDAzZWlmaW5kZXggPSByZXFfaW5mby1cdTAwM2ViYXNlLmRldi1cdTAwM2VpZmluZGV4O1xuK1x0XHRuZXRkZXZfcHV0KHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LCBcdTAwMjZyZXFfaW5mby1cdTAwM2ViYXNlLmRldl90cmFja2VyKTtcbitcdFx0cmVxX2luZm8tXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xuK1x0fVxuK1xuK1x0Y3R4LVx1MDAzZXJlcV9pbmZvID0gcmVxX2luZm87XG4rXHRjdHgtXHUwMDNlcmVwbHlfZGF0YSA9IHJlcGx5X2RhdGE7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitmcmVlX3JlcF9kYXRhOlxuK1x0a2ZyZWUocmVwbHlfZGF0YSk7XG4rZnJlZV9yZXFfaW5mbzpcbitcdGtmcmVlKHJlcV9pbmZvKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcG9ydF9kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbitcdHZvaWQgKmVoZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTtcbitcdGlmICghZWhkcilcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdG1lbXNldChjdHgtXHUwMDNlcmVwbHlfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpKTtcbitcdGN0eC1cdTAwM2VyZXBseV9kYXRhLVx1MDAzZWJhc2UuZGV2ID0gZGV2O1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbitcbitcdHJldCA9IHBvcnRfcHJlcGFyZV9kYXRhKFx1MDAyNmN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLCBcdTAwMjZjdHgtXHUwMDNlcmVwbHlfZGF0YS1cdTAwM2ViYXNlLFxuK1x0XHRcdFx0Z2VubF9pbmZvX2R1bXAoY2IpKTtcbitcbitcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBldGhubF9maWxsX3JlcGx5X2hlYWRlcihza2IsIGRldiwgRVRIVE9PTF9BX1BPUlRfSEVBREVSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gcG9ydF9maWxsX3JlcGx5KHNrYiwgXHUwMDI2Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UsIFx1MDAyNmN0eC1cdTAwM2VyZXBseV9kYXRhLVx1MDAzZWJhc2UpO1xuK1xuK291dDpcbitcdGN0eC1cdTAwM2VyZXBseV9kYXRhLVx1MDAzZWJhc2UuZGV2ID0gTlVMTDtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdlbmxtc2dfY2FuY2VsKHNrYiwgZWhkcik7XG4rXHRlbHNlXG4rXHRcdGdlbmxtc2dfZW5kKHNrYiwgZWhkcik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmVfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbitcdGludCByZXQ7XG4rXG4rXHRkZXYgPSBjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZS5kZXY7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VsaW5rX3RvcG8pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0eGFfZm9yX2VhY2hfc3RhcnQoXHUwMDI2ZGV2LVx1MDAzZWxpbmtfdG9wby1cdTAwM2Vwb3J0cywgY3R4LVx1MDAzZXBvc19wb3J0aWQsIHBvcnQsXG4rXHRcdFx0ICBjdHgtXHUwMDNlcG9zX3BvcnRpZCkge1xuK1x0XHRjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlcG9ydF9pZCA9IGN0eC1cdTAwM2Vwb3NfcG9ydGlkO1xuK1xuK1x0XHRyZXQgPSBwb3J0X2R1bXBfb25lKHNrYiwgZGV2LCBjYik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGN0eC1cdTAwM2Vwb3NfcG9ydGlkID0gMDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfZHVtcF9hbGxfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbitcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2Vwb3NfaWZpbmRleCkge1xuK1x0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IGRldjtcbitcdFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XG4rXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbitcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gTlVMTDtcbitcbitcdFx0aWYgKHJldClcbitcdFx0XHRicmVhaztcbitcbitcdFx0cmV0ID0gMDtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xuK1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGN0eC1cdTAwM2VpZmluZGV4KSB7XG4rXHRcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuK1xuK1x0XHRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoXHUwMDI2aW5mby1cdTAwM2VpbmZvKSxcbitcdFx0XHRcdFx0ICBjdHgtXHUwMDNlaWZpbmRleCwgXHUwMDI2ZGV2X3RyYWNrZXIsXG4rXHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghZGV2KVxuK1x0XHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0XHRjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZS5kZXYgPSBkZXY7XG4rXHRcdHJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpO1xuK1xuK1x0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIpO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gcG9ydF9kdW1wX2FsbF9kZXYoc2tiLCBjYik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4rXG4rXHRrZnJlZShjdHgtXHUwMDNlcmVxX2luZm8pO1xuK1x0a2ZyZWUoY3R4LVx1MDAzZXJlcGx5X2RhdGEpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9wb3J0X3JlcXVlc3Rfb3BzID0ge1xuK1x0LnJlcXVlc3RfY21kXHRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4rXHQucmVwbHlfY21kXHRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVRfUkVQTFksXG4rXHQuaGRyX2F0dHJcdFx0PSBFVEhUT09MX0FfUE9SVF9IRUFERVIsXG4rXHQucmVxX2luZm9fc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXFfaW5mbyksXG4rXHQucmVwbHlfZGF0YV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhKSxcbitcbitcdC5wYXJzZV9yZXF1ZXN0XHRcdD0gcG9ydF9wYXJzZV9yZXF1ZXN0LFxuK1x0LnByZXBhcmVfZGF0YVx0XHQ9IHBvcnRfcHJlcGFyZV9kYXRhLFxuK1x0LnJlcGx5X3NpemVcdFx0PSBwb3J0X3JlcGx5X3NpemUsXG4rXHQuZmlsbF9yZXBseVx0XHQ9IHBvcnRfZmlsbF9yZXBseSxcbit9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6MTguNjQ0MjgzMjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzE1NTE0Njk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBldGh0b29sIFBPUlRfR0VUIE5ldGxpbmsgQVBJIGFuZCBTRlAgU3VwcG9ydCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBuZXcgcGF0Y2ggc2VyaWVzIGhlcmUuIEl0IHNlZW1zIGxpa2Ugd2UncmUgaW50cm9kdWNpbmcgYSBgUE9SVF9HRVRgIG5ldGxpbmsgQVBJIGNvbW1hbmQgaW4gZXRodG9vbCB0byBmZXRjaCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBwb2ludHMgb2YgYSBuZXR3b3JrIGRldmljZSwgb3IgXCJwb3J0c1wiLiBXZSdyZSBhbHNvIGFkZGluZyBzdXBwb3J0IGZvciBTRlAgcG9ydHMgd2l0aGluIHRoZSBQSFkgZnJhbWV3b3JrLiBMZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIHNlY3VyaXR5IGFuZCBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLlxuXG5GaXJzdCwgdGhlIEFQSSBpdHNlbGYuIFdlIGhhdmUgdGhlIHVzdWFsIGRvY3VtZW50YXRpb24gdXBkYXRlczogYGV0aHRvb2wueWFtbGAgdG8gZGVmaW5lIHRoZSBuZXcgZW51bSBhbmQgYXR0cmlidXRlcywgYGV0aHRvb2wtbmV0bGluay5yc3RgIGFuZCBgcGh5LXBvcnQucnN0YCB0byBkZXNjcmliZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgYW5kIFNGUCBwb3J0cywgcmVzcGVjdGl2ZWx5LiBUaGUgUEhZIGZyYW1ld29yayBzZWVzIGEgbG90IG9mIGNoYW5nZXMsIHdpdGggbmV3IGZ1bmN0aW9ucyBpbiBgcGh5X2NhcHMuY2AsIGBwaHlfZGV2aWNlLmNgLCBgcGh5X2xpbmtfdG9wb2xvZ3kuY2AsIGFuZCBgcGh5bGluay5jYCByZWxhdGVkIHRvIFNGUCBtb2R1bGVzIGFuZCBwb3J0IG1hbmFnZW1lbnQsIGFzIHdlbGwgYXMgdXBkYXRlcyB0byBzZXZlcmFsIGhlYWRlciBmaWxlcy4gVGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AsIHdoaWNoIGRlZmluZXMgdGhlIG5ldGxpbmsgY29tbWFuZCBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgIGluIHRoZSB1c2VyLXNwYWNlIEFQSS5cblxuRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgYFBPUlRfR0VUYCBjb21tYW5kIGlzIHRoZSBtYWluIHRhcmdldC4gV2UncmUgaW50cm9kdWNpbmcgYSBuZXcgbmV0bGluayBjb21tYW5kLCB3aGljaCBtZWFucyBhIG5ldyBhdHRhY2sgc3VyZmFjZS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyBpbiBgbmV0L2V0aHRvb2wvcG9ydC5jYDogYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBgcG9ydF9maWxsX3JlcGx5YCwgYGV0aG5sX3BvcnRfZHVtcF9zdGFydGAsIGBldGhubF9wb3J0X2R1bXBpdGAsIGBldGhubF9wb3J0X2R1bXBfZG9uZWAsIGBwb3J0X2R1bXBfb25lYCwgYHBvcnRfZHVtcF9vbmVfZGV2YCwgYW5kIGBwb3J0X2R1bXBfYWxsX2RldmAuIFdlJ2xsIG5lZWQgdG8gc2VlIGlmIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBleHBvcnRlZC5cblxuTGV0J3MgY2hlY2sgYG5ldC9ldGh0b29sL3BvcnQuY2AuIE9rYXksIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgLCBgZXRobmxfcG9ydF9kdW1waXRgLCBhbmQgYGV0aG5sX3BvcnRfZHVtcF9kb25lYCBhcmUgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QgZm9yIGRpcmVjdCBmdXp6aW5nIGFjY2Vzcy4gYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBhbmQgYHBvcnRfZmlsbF9yZXBseWAgYXJlIHN0YXRpYywgYnV0IHVzZWQgd2l0aGluIGBldGhubF9wb3J0X3JlcXVlc3Rfb3BzYCwgd2hpY2ggKmlzKiBleHBvcnRlZCBhbmQgdGhlbiB1c2VkIGJ5IGBldGhubF9kZWZhdWx0X3JlcXVlc3RzYCBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5jYC4gU28sIGBldGhubF9wb3J0X2R1bXBpdGAsIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgLCBhbmQgYGV0aG5sX3BvcnRfZHVtcF9kb25lYCBhcmUgZGVmaW5pdGVseSBnb29kIHRhcmdldHMsIGFuZCB3ZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRyaWdnZXIgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYGV0aG5sX3BvcnRfcmVxdWVzdF9vcHNgLCB3aGljaCBhcmUgY2FsbGVkIHZpYSBmdW5jdGlvbiBwb2ludGVycy5cblxuTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyB0byBjb25zaWRlcj8gTGV0J3Mgc2VlLi4uIHdlIGhhdmUgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgIGFuZCBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGAgaW4gYHBoeV9saW5rX3RvcG9sb2d5LmNgLCBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AgaW4gYHBoeV9jYXBzLmNgLCBhbmQgYHBoeV9zZXRfdXBzdHJlYW1fcG9ydGAgaW4gYHBoeV9kZXZpY2UuY2AuIFRoZXNlIG1heSByZXF1aXJlIGFkZGl0aW9uYWwgc2V0dXAgb3IgdHJpZ2dlciBmcm9tIGV2ZW50cyB3aXRoaW4gdGhlIFBIWSBzdWJzeXN0ZW0sIGJ1dCBhcmUgZ29vZCB0YXJnZXRzIHRvIGNvbnNpZGVyIGZvciBjb21wbGV0ZW5lc3MuXG5cbkluIHRlcm1zIG9mIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCwgYENPTkZJR19QSFlMSUJgLCBhbmQgYENPTkZJR19QSFlMSU5LYCBhcmUgdGhlIGVzc2VudGlhbHMuIEkgZXhwZWN0IGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdG8gZW5zdXJlIHRoaXMgY29kZSBpcyBidWlsdC4gTGV0J3Mgc2VlIGhvdyBgbmV0L2V0aHRvb2wvTWFrZWZpbGVgIGhhbmRsZXMgdGhpbmdzLi4uIFllYWgsIGl0IHVuY29uZGl0aW9uYWxseSBidWlsZHMgYHBvcnQub2AgaWYgdGhlIGV0aHRvb2wgbmV0bGluayBjb2RlIGlzIGJ1aWx0LCBzbyB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBOb3cgSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgcmVzdHJpY3Rpb25zLCBJIHdpbGwgc2VhcmNoIGZvciAgYENPTkZJR19FVEhUT09MX05FVExJTktgIGluIGBuZXQvS2NvbmZpZ2Agb3IgYG5ldC9ldGh0b29sL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDcyMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOTozMS43OTk0MzI4MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzM5NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFVEhUT09MX05FVExJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz01MDc9Y29uZmlnIEZBSUxPVkVSXFxuLS1cXG5uZXQvS2NvbmZpZy01MTktXFxubmV0L0tjb25maWc6NTIwOmNvbmZpZyBFVEhUT09MX05FVExJTktcXG5uZXQvS2NvbmZpZy01MjEtXFx0Ym9vbCBcXFwiTmV0bGluayBpbnRlcmZhY2UgZm9yIGV0aHRvb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjMxLjkwMTE3Nzk2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODcwMzM4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBmb3IgRVRIVE9PTF9ORVRMSU5LIGluIG5ldC9LY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBFVEhUT09MX05FVExJTktgIGlzIGhhbmRsZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJdCdzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gSSdsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCBpdHMgY29udGVudHMgdG8gc2VlIGlmIGBFVEhUT09MX05FVExJTktgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCBhbnl3aGVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVwZW5kZW5jaWVzLCB0aGUgd2F5IGl0J3MgZXhwb3NlZCB0byB0aGUgdXNlciwgYW5kIGlmIGl0IGhhcyBhbnkgZGVmYXVsdHMgb3IgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGFzIGEgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6MzQuNzg4MjE0Mzk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTE1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTE1OlxcdFxcdCAgZmFpbG92ZXIgbmV0ZGV2LiBUaGlzIGVuYWJsZXMgcGFyYXZpcnR1YWwgZHJpdmVycyB0byB1c2UgYVxcbiA1MTY6XFx0XFx0ICBWRiBhcyBhbiBhY2NlbGVyYXRlZCBsb3cgbGF0ZW5jeSBkYXRhcGF0aC4gSXQgYWxzbyBhbGxvd3MgbGl2ZVxcbiA1MTc6XFx0XFx0ICBtaWdyYXRpb24gb2YgVk1zIHdpdGggZGlyZWN0IGF0dGFjaGVkIFZGcyBieSBmYWlsaW5nIG92ZXIgdG8gdGhlXFxuIDUxODpcXHRcXHQgIHBhcmF2aXJ0dWFsIGRhdGFwYXRoIHdoZW4gdGhlIFZGIGlzIHVucGx1Z2dlZC5cXG4gNTE5OlxcdFxcbiA1MjA6XFx0Y29uZmlnIEVUSFRPT0xfTkVUTElOS1xcbiA1MjE6XFx0XFx0Ym9vbCBcXFwiTmV0bGluayBpbnRlcmZhY2UgZm9yIGV0aHRvb2xcXFwiXFxuIDUyMjpcXHRcXHRzZWxlY3QgRElNTElCXFxuIDUyMzpcXHRcXHRkZWZhdWx0IHlcXG4gNTI0OlxcdFxcdGhlbHBcXG4gNTI1OlxcdFxcdCAgQW4gYWx0ZXJuYXRpdmUgdXNlcnNwYWNlIGludGVyZmFjZSBmb3IgZXRodG9vbCBiYXNlZCBvbiBnZW5lcmljXFxuIDUyNjpcXHRcXHQgIG5ldGxpbmsuIEl0IHByb3ZpZGVzIGJldHRlciBleHRlbnNpYmlsaXR5IGFuZCBzb21lIG5ldyBmZWF0dXJlcyxcXG4gNTI3OlxcdFxcdCAgZS5nLiBub3RpZmljYXRpb24gbWVzc2FnZXMuXFxuIDUyODpcXHRcXG4gNTI5OlxcdGNvbmZpZyBORVRERVZfQUREUl9MSVNUX1RFU1RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6MzQuNzg4MzEwNjA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2NDYyMjMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGhhdmluZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzLi4uYW5kIGl0IHNlZW1zIHRoZSBzeXN0ZW0ncyBiZWhhdmluZyBhY2NvcmRpbmcgdG8gaXRzIGRlZmF1bHQgJ3knIHNldHRpbmcuIFRoaXMgaXNuJ3QgdW5leHBlY3RlZCwgYnV0IGl0IGRvZXNuJ3QgZ2l2ZSBtZSBtdWNoIGNvbnRleHQgeWV0LiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBXaGF0J3MgdGhlIGNvbnRleHQ/IExldCdzIHNlZS4uLiB3aGF0IGFib3V0IHRoZSBpbmZsdWVuY2Ugb2YgYENPTkZJR19QSFlMSUJgPyBJcyB0aGF0IGFjdGl2ZSwgYW5kIGhvdyBtaWdodCB0aGF0IGJlIGltcGFjdGluZyB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgSSdtIG9ic2VydmluZz8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gSSdtIHNlZWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjM3LjY1MjkzNjgyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYxOTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEhZTElCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9Nj1jb25maWcgUEhZTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU6bWVudWNvbmZpZyBQSFlMSUJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiUEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVxcdGRlZl9ib29sIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjM3LjcwMzU2MTMzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTI4OTI4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEV0aGVybmV0IFBvcnQgRHVtcCBGdW5jdGlvbnMgYW5kIFBIWUxJQiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGBQSFlMSUJgIGlzIGFsc28gc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgcmlnaHQ/IExldCdzIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0LiBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YFxuKiAgIGBldGhubF9wb3J0X2R1bXBpdGBcbiogICBgZXRobmxfcG9ydF9kdW1wX2RvbmVgXG4qICAgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgXG4qICAgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgXG4qICAgYHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNgXG4qICAgYHBoeV9zZXRfdXBzdHJlYW1fcG9ydGBcblxuUmlnaHQsIG5vdyB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHdoZXRoZXIgdGhlc2UgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucyBvciBqdXN0IG5vbi1zdGF0aWMgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXMuIExldCBtZSBzZWUuLi4gQWhhLCB0aGV5J3JlIG5vbi1zdGF0aWMuIFRoZXkgYXJlIHVzZWQgd2l0aGluIGBldGh0b29sX2dlbmxfb3BzYCBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5jYC4gSGFuZyBvbi4uLiBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCBpdHNlbGYgaXMgYWN0dWFsbHkgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AsIGJ1dCBpdCdzICpkZWNsYXJlZCogaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuaGAuIFllcywgb2theSwgdGhleSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMgYW5kIHZpc2libGUgdG8gdGhlIG5ldGxpbmsgaW50ZXJmYWNlLlxuXG5Ob3csIGxldCdzIHRha2UgYSBxdWljayBsb29rIGluc2lkZSBgbmV0L2V0aHRvb2wvcG9ydC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY2OCwiT3V0cHV0VG9rZW5zIjo3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOTo0Mi43MTY0NTcwNjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjU4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qXFxcXHMrXFxcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL3BvcnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9wb3J0LmM9MTcxPXBvcnRfZHVtcF9jdHhfZ2V0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL3BvcnQuYy0xNzUtXFxubmV0L2V0aHRvb2wvcG9ydC5jOjE3NjppbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvZXRodG9vbC9wb3J0LmMtMTc3LXtcXG4tLVxcbm5ldC9ldGh0b29sL3BvcnQuYz0yOTc9c3RhdGljIGludCBwb3J0X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvZXRodG9vbC9wb3J0LmMtMzI2LVxcbm5ldC9ldGh0b29sL3BvcnQuYzozMjc6aW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvZXRodG9vbC9wb3J0LmMtMzI4LXtcXG4tLVxcbm5ldC9ldGh0b29sL3BvcnQuYy0zNTMtXFxubmV0L2V0aHRvb2wvcG9ydC5jOjM1NDppbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9ldGh0b29sL3BvcnQuYy0zNTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOTo0Mi43NTk3Mjc0MzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NTc5MDM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4gSSdtIHNlZWluZyBhIHNlcXVlbmNlIOKAkyBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgdGhlbiBgZXRobmxfcG9ydF9kdW1waXRgLCBhbmQgZmluYWxseSBgZXRobmxfcG9ydF9kdW1wX2RvbmVgLiBUaGF0J3MgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdGlvbiBvZiBhIGR1bXAgcHJvY2VzcyByZWxhdGVkIHRvIEV0aGVybmV0IHBvcnQgaW5mb3JtYXRpb24sIGxpa2VseSB3aXRoaW4gdGhlIE5ldGxpbmsgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHdob2xlIGN5Y2xlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dC4gSG1tLCB3aGF0IGFib3V0IGBkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY2A/IFRoYXQgZmlsZSdzIHJlbGV2YW50LCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIGl0IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBkdW1wIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgdGhlIFBIWSBsYXllciBsaW5rIHRvcG9sb2d5IGlzIHNvbWV0aGluZyB0aGF0IGlzIGdvaW5nIHRvIG5lZWQgdG8gYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1ODMsIk91dHB1dFRva2VucyI6NzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOTo0Ni4wMTU1MjE5OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjY4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qXFxcXHMrXFxcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTM1PXN0YXRpYyBzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy02Mi1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYzo2MzppbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtNjQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmM9OTA9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19hZGRfcG9ydCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtOTEtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmM6OTI6dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy05My17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYz0xMDE9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19kZWxfcG9ydCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtMTAyLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jOjEwMzppbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtMTA0LVxcdFxcdFxcdCAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTE3Nj1FWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2FkZF9waHkpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jLTE3Ny1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYzoxNzg6dm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy0xNzktXFx0XFx0XFx0ICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6NDYuMDYwNzk3MTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjQwMzAyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgUEhZIExpbmsgVG9wb2xvZ3kgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgc2VlIGBwaHlfbGlua190b3BvX2FkZF9wb3J0YCBhbmQgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgIGFyZSBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0J3MgZ29vZC4gVGhleSdyZSBjbGVhcmx5IGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UsIHByb2JhYmx5IGJ5IHNvbWUgdXBwZXItbGV2ZWwgbmV0d29yayBzdGFjayBvciBhIHN5c3RlbSBtYW5hZ2VyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIFBIWSBtYW5hZ2VtZW50LlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHNsaWdodGx5LiBXaGVyZSBhcmUgdGhlIGNvcmUgY2FwYWJpbGl0aWVzIGRlZmluZWQ/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGVyZSBpcyBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGVzZSBuZXcgZnVuY3Rpb25zIGluIG15IGFyZWFzIG9mIGV4cGVydGlzZS4gSSBpbW1lZGlhdGVseSB0aGluayBvZiBgZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNgLiBJdCdzIGEga2V5IGZpbGUgd2hlcmUgUEhZIGNhcGFiaWxpdGllcyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbnMgYXJlIHVzdWFsbHkgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlc2UgbmV3IHRvcG9sb2d5IGZ1bmN0aW9ucyBoYXZlIGFuIGVmZmVjdCBoZXJlLCBhbmQgaG93LCBpZiBzby4gQSBxdWljayByZXZpZXcgb2YgdGhhdCBmaWxlIGlzIGluIG9yZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM1MywiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjQ5LjQyNDgzMDYyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNjYwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccytcXFxcKipbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9Nzc9aW50IF9faW5pdCBwaHlfY2Fwc19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0xMjEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MTIyOnNpemVfdCBwaHlfY2Fwc19zcGVlZHModW5zaWduZWQgaW50ICpzcGVlZHMsIHNpemVfdCBzaXplLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTEyMy1cXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9MjM2PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX2xvb2t1cCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0yNDItICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MjQzOnZvaWQgcGh5X2NhcHNfbGlua21vZGVfbWF4X3NwZWVkKHUzMiBtYXhfc3BlZWQsIHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0yNDQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMjYyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjI2Mzpib29sIHBoeV9jYXBzX3ZhbGlkKGludCBzcGVlZCwgaW50IGR1cGxleCwgY29uc3QgdW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTI2NC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0yNzctICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6Mjc4OnZvaWQgcGh5X2NhcHNfbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgY2FwcywgdW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTI3OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYz0zOTA9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtNDAxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjQwMjp2b2lkIHBoeV9jYXBzX21lZGl1bV9nZXRfc3VwcG9ydGVkKHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00MDMtXFx0XFx0XFx0XFx0ICAgZW51bSBldGh0b29sX2xpbmtfbWVkaXVtIG1lZGl1bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTQyNT1FWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00MzMtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6NDM0OnUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2RlcylcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy00MzUte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9NDQ3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtNDU3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjQ1ODp2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtNDU5LVxcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6NDkuNDczMDAyNzI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTYwODI2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZXNlIHBvaW50cyBhcyBhIG5ldHdvcmsgc3lzdGVtcyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBQSFkgQ2FwYWJpbGl0eSBGaWx0ZXJpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AgaGFzIGJlZW4gZXhwb3NlZC4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgd29uZGVyIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiBiZWluZyBleHBvcnRlZC4gSXQgc3VnZ2VzdHMgYSBtb3JlIGNvbnRyb2xsZWQsIHBlcmhhcHMgZmluZS1ncmFpbmVkLCBhcHByb2FjaCB0byBsaW5rIG1vZGUgZmlsdGVyaW5nIGF0IHRoZSBQSFkgbGV2ZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBXaGF0J3MgdGhlIGNvbnRleHQgZm9yIGl0P1xuXG5NeSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIFBIWSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmU/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIHBsYWNlcyB3aGVyZSBQSFkgY2FwYWJpbGl0aWVzIGFyZSBtYW5pcHVsYXRlZC4gVGhpcyB0cmlnZ2VycyBhbiBhc3NvY2lhdGlvbi4gV2hhdCBhYm91dCB0aGF0IGtleSBhcmVhIGZvciBQSFkgZHJpdmVyIG9wZXJhdGlvbnM/IEFoIHllcywgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLiBUaGF0IGZpbGUgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGxpa2VseSB3aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGlzIG5ldyBmdW5jdGlvbiB3b3VsZCBiZSBkZWZpbmVkIG9yIHVzZWQsIG9yIHdoZXJlIGl0cyBlZmZlY3RzIHdvdWxkIGJlIHNlZW4uIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3QgYXJlYSBJIHdpbGwgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mzg4LCJPdXRwdXRUb2tlbnMiOjcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6NTMuMTg5MDkxOTY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE4OTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxzK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTQ1PXN0YXRpYyB2b2lkIF9faW5pdCBmZWF0dXJlc19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwOS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIxMDp2b2lkIHBoeV9kZXZpY2VfZnJlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjM4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBnZW5waHlfZHJpdmVyO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjM5LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjQwOnN0YXRpYyBMSVNUX0hFQUQocGh5X2ZpeHVwX2xpc3QpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjQxOnN0YXRpYyBERUZJTkVfTVVURVgocGh5X2ZpeHVwX2xvY2spO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQyLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjQzPXN0YXRpYyBib29sIHBoeV9kcnZfd29sX2VuYWJsZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjUxLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjUyOmJvb2wgcGh5X21heV93YWtldXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1My17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM3OD1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IG1kaW9fYnVzX3BoeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MjYtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0Mjc6c3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG1kaW9fYnVzX3BoeV9wbV9vcHMsIG1kaW9fYnVzX3BoeV9zdXNwZW5kLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDI4LVxcdFxcdFxcdCBtZGlvX2J1c19waHlfcmVzdW1lKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDM4PXN0YXRpYyBpbnQgcGh5X3JlZ2lzdGVyX2ZpeHVwKGNvbnN0IGNoYXIgKmJ1c19pZCwgdTMyIHBoeV91aWQsIHUzMiBwaHlfdWlkX21hc2ssXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQ1OS0vKiBSZWdpc3RlcnMgYSBmaXh1cCB0byBiZSBydW4gb24gYW55IFBIWSB3aXRoIHRoZSBVSUQgaW4gcGh5X3VpZCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NDYwOmludCBwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX3VpZCh1MzIgcGh5X3VpZCwgdTMyIHBoeV91aWRfbWFzayxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQ2MS1cXHRcXHRcXHQgICAgICAgaW50ICgqcnVuKShzdHJ1Y3QgcGh5X2RldmljZSAqKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDY1PUVYUE9SVF9TWU1CT0wocGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl91aWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00NjctLyogUmVnaXN0ZXJzIGEgZml4dXAgdG8gYmUgcnVuIG9uIHRoZSBQSFkgd2l0aCBpZCBzdHJpbmcgYnVzX2lkICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0Njg6aW50IHBoeV9yZWdpc3Rlcl9maXh1cF9mb3JfaWQoY29uc3QgY2hhciAqYnVzX2lkLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDY5LVxcdFxcdFxcdCAgICAgIGludCAoKnJ1bikoc3RydWN0IHBoeV9kZXZpY2UgKikpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTQ4OD1zdGF0aWMgaW50IHBoeV9zY2FuX2ZpeHVwcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01MjEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo1MjI6aW50IGdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01MjMtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU2MT1waHlfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU2Ni19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo1Njc6c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9pZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01NjgtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU3MD1waHlfaW50ZXJmYWNlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01ODEtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NTgyOnN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfaW50ZXJmYWNlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU4My1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NTg1PXBoeV9oYXNfZml4dXBzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTkxLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjU5MjpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocGh5X2hhc19maXh1cHMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTkzLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NTk0PXN0YXRpYyBzc2l6ZV90IHBoeV9kZXZfZmxhZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTYwMS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo2MDI6c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9kZXZfZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNjAzLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz02MTc9c3RhdGljIHNzaXplX3QgbW1kIyNuIyNfZGV2aWNlX2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTYyMy19IFxcXFxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjYyNDpzdGF0aWMgREVWSUNFX0FUVFJfUk8obW1kIyNuIyNfZGV2aWNlX2lkKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNjI1LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDAyPXN0YXRpYyBpbnQgZ2V0X3BoeV9jMjJfaWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiAqcGh5X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDMzLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTAzNDppbnQgZndub2RlX2dldF9waHlfaWQoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgdTMyICpwaHlfaWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTEwMz1FWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwOC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTQyPUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNTEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTUyOnZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNTMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTY0PUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZW1vdmUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTcyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE3MzppbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTIxMj1zdGF0aWMgdm9pZCBwaHlfcHJlcGFyZV9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMjQtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjI1OmludCBwaHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMjYtXFx0XFx0ICAgICAgIHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTI4Nj1FWFBPUlRfU1lNQk9MKHBoeV9jb25uZWN0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI5Mi0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyOTM6dm9pZCBwaHlfZGlzY29ubmVjdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI5NC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEzMjU9c3RhdGljIGludCBwaHlfcG9sbF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzQwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM0MTppbnQgcGh5X2luaXRfaHcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNDIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzg4PUVYUE9SVF9TWU1CT0wocGh5X2luaXRfaHcpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM4OS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTA6dm9pZCBwaHlfYXR0YWNoZWRfaW5mbyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM5MS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEzOTQ9RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoZWRfaW5mbyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTYtI2RlZmluZSBBVFRBQ0hFRF9GTVQgXFxcImF0dGFjaGVkIFBIWSBkcml2ZXIgJXMobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVzKVxcXCJcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTc6Y2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTQxNz1FWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hlZF9pbmZvX2lycSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDE4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTQxOTp2b2lkIHBoeV9hdHRhY2hlZF9wcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MjAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNDcwPXBoeV9zdGFuZGFsb25lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ3Ni19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDc3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfc3RhbmRhbG9uZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDc4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xODQ3PXN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NjYtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODY3OmludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg2OC1cXHRcXHQgICAgICB1MzIgZmxhZ3MsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIwMjg9RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMzYtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMDM3OnZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjAzOC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIxMTA9RVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIxMTEtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMTEyOmludCBwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjExMy17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIxMzY9RVhQT1JUX1NZTUJPTChwaHlfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTM3LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjEzODppbnQgX19waHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjE1ND1FWFBPUlRfU1lNQk9MKF9fcGh5X3Jlc3VtZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTU1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjE1NjppbnQgcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjE1Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIxNjY9RVhQT1JUX1NZTUJPTChwaHlfcmVzdW1lKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjE3Ni0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIxNzc6aW50IHBoeV9yZXNldF9hZnRlcl9jbGtfZW5hYmxlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMTc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjI1Nj1zdGF0aWMgaW50IGdlbnBoeV9jMzdfY29uZmlnX2FkdmVydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMjg3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjI4ODppbnQgZ2VucGh5X3NldHVwX2ZvcmNlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjI4OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIzMDI9c3RhdGljIGludCBnZW5waHlfc2V0dXBfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzMzMtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMzM0OmludCBnZW5waHlfcmVhZF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMzc5PUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfbWFzdGVyX3NsYXZlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjM4NC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIzODU6aW50IGdlbnBoeV9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzODYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMzkxPUVYUE9SVF9TWU1CT0woZ2VucGh5X3Jlc3RhcnRfYW5lZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzOTktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNDAwOmludCBnZW5waHlfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNDAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjQyMT1FWFBPUlRfU1lNQk9MKGdlbnBoeV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQzMS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI0MzI6aW50IF9fZ2VucGh5X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgY2hhbmdlZClcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI0MzMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNDc4PUVYUE9SVF9TWU1CT0woX19nZW5waHlfY29uZmlnX2FuZWcpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNDg4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjQ4OTppbnQgZ2VucGh5X2MzN19jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQ5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI1MjY9RVhQT1JUX1NZTUJPTChnZW5waHlfYzM3X2NvbmZpZ19hbmVnKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjUzNS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI1MzY6aW50IGdlbnBoeV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1Mzcte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNTQyPUVYUE9SVF9TWU1CT0woZ2VucGh5X2FuZWdfZG9uZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1NTEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNTUyOmludCBnZW5waHlfdXBkYXRlX2xpbmsoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1NTMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNTk1PUVYUE9SVF9TWU1CT0woZ2VucGh5X3VwZGF0ZV9saW5rKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1OTYtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNTk3OmludCBnZW5waHlfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI1OTgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNjQyPUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfbHBhKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY1MC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI2NTE6aW50IGdlbnBoeV9yZWFkX3N0YXR1c19maXhlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY1Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI2NzI9RVhQT1JUX1NZTUJPTChnZW5waHlfcmVhZF9zdGF0dXNfZml4ZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNjgyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjY4MzppbnQgZ2VucGh5X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNjg0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjcyMz1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZWFkX3N0YXR1cyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI3MzUtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNzM2OmludCBnZW5waHlfYzM3X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgKmNoYW5nZWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNzM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mjc4Nz1FWFBPUlRfU1lNQk9MKGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNzk3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mjc5ODppbnQgZ2VucGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI3OTkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yODI2PUVYUE9SVF9TWU1CT0woZ2VucGh5X3NvZnRfcmVzZXQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjgyNy1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI4Mjg6aXJxcmV0dXJuX3QgZ2VucGh5X2hhbmRsZV9pbnRlcnJ1cHRfbm9fYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yODI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjgzOT1FWFBPUlRfU1lNQk9MKGdlbnBoeV9oYW5kbGVfaW50ZXJydXB0X25vX2Fjayk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI4NDktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyODUwOmludCBnZW5waHlfcmVhZF9hYmlsaXRpZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI4NTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yODk0PUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfYWJpbGl0aWVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjkwMS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI5MDI6aW50IGdlbnBoeV9yZWFkX21tZF9jNDUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSwgdTE2IHJlZ251bSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MDMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTA5PUVYUE9SVF9TWU1CT0woZ2VucGh5X3JlYWRfbW1kX2M0NSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTEwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjkxMTppbnQgZ2VucGh5X3dyaXRlX21tZF9jNDUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSwgdTE2IHJlZ251bSxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MTItXFx0XFx0XFx0IHUxNiB2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI5MTk9RVhQT1JUX1NZTUJPTChnZW5waHlfd3JpdGVfbW1kX2M0NSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5MjQtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTI1OmludCBnZW5waHlfcmVhZF9tbWRfdW5zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoZGV2LCBpbnQgZGV2YWQsIHUxNiByZWdudW0pXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTI2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjkyOT1FWFBPUlRfU1lNQk9MKGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTMwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjkzMTppbnQgZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZudW0sXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTMyLVxcdFxcdFxcdFxcdCB1MTYgcmVnbnVtLCB1MTYgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTM2PUVYUE9SVF9TWU1CT0woZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTM3LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjkzODppbnQgZ2VucGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5Mzkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTQyPUVYUE9SVF9TWU1CT0woZ2VucGh5X3N1c3BlbmQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjk0My1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI5NDQ6aW50IGdlbnBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5NDUte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTQ4PUVYUE9SVF9TWU1CT0woZ2VucGh5X3Jlc3VtZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTQ5LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mjk1MDppbnQgZ2VucGh5X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yOTUxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mjk3OT1FWFBPUlRfU1lNQk9MKGdlbnBoeV9sb29wYmFjayk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5ODktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyOTkwOnZvaWQgcGh5X3JlbW92ZV9saW5rX21vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGxpbmtfbW9kZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI5OTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yOTk3PXN0YXRpYyB2b2lkIHBoeV9jb3B5X3BhdXNlX2JpdHModW5zaWduZWQgbG9uZyAqZHN0LCB1bnNpZ25lZCBsb25nICpzcmMpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwMTEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMDEyOnZvaWQgcGh5X2FkdmVydGlzZV9zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwMTMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMDIwPUVYUE9SVF9TWU1CT0wocGh5X2FkdmVydGlzZV9zdXBwb3J0ZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMDMxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzAzMjp2b2lkIHBoeV9hZHZlcnRpc2VfZWVlX2FsbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzAzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMwMzc9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2FkdmVydGlzZV9lZWVfYWxsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzA1OC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMwNTk6dm9pZCBwaHlfc3VwcG9ydF9lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMDgwPUVYUE9SVF9TWU1CT0wocGh5X3N1cHBvcnRfZWVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzA4OC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMwODk6dm9pZCBwaHlfZGlzYWJsZV9lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMwOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMDk3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9kaXNhYmxlX2VlZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMDUtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMTA2OnZvaWQgcGh5X3N1cHBvcnRfc3ltX3BhdXNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMTA3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzExMT1FWFBPUlRfU1lNQk9MKHBoeV9zdXBwb3J0X3N5bV9wYXVzZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMxMTgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMTE5OnZvaWQgcGh5X3N1cHBvcnRfYXN5bV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzEyMC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMxMjM9RVhQT1JUX1NZTUJPTChwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzEzNS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjMxMzY6dm9pZCBwaHlfc2V0X3N5bV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJ4LCBib29sIHR4LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzEzNy1cXHRcXHQgICAgICAgYm9vbCBhdXRvbmVnKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zMTQ3PUVYUE9SVF9TWU1CT0wocGh5X3NldF9zeW1fcGF1c2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMTU5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzE2MDp2b2lkIHBoeV9zZXRfYXN5bV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJ4LCBib29sIHR4KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzE2MS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMxNzE9RVhQT1JUX1NZTUJPTChwaHlfc2V0X2FzeW1fcGF1c2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMTgxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzE4Mjpib29sIHBoeV92YWxpZGF0ZV9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzE4My1cXHRcXHRcXHRzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzE5Nj1FWFBPUlRfU1lNQk9MKHBoeV92YWxpZGF0ZV9wYXVzZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMyMDktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMjEwOnZvaWQgcGh5X2dldF9wYXVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICp0eF9wYXVzZSwgYm9vbCAqcnhfcGF1c2UpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMjExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzIzMD1zdGF0aWMgaW50IHBoeV9nZXRfdTMyX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwgdTMyICp2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMyNTAtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMjUxOnMzMiBwaHlfZ2V0X2ludGVybmFsX2RlbGF5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGludCAqZGVsYXlfdmFsdWVzLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzI1Mi1cXHRcXHRcXHQgICBpbnQgc2l6ZSwgYm9vbCBpc19yeClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzMxMz1FWFBPUlRfU1lNQk9MKHBoeV9nZXRfaW50ZXJuYWxfZGVsYXkpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMzIzLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzMyNDppbnQgcGh5X2dldF90eF9hbXBsaXR1ZGVfZ2FpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMzI1LVxcdFxcdFxcdCAgICAgIGVudW0gZXRodG9vbF9saW5rX21vZGVfYml0X2luZGljZXMgbGlua21vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMzMzc9RVhQT1JUX1NZTUJPTF9HUEwocGh5X2dldF90eF9hbXBsaXR1ZGVfZ2Fpbik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMzNDYtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMzQ3OmludCBwaHlfZ2V0X21hY190ZXJtaW5hdGlvbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMzQ4LVxcdFxcdFxcdCAgICB1MzIgKnZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzcyOD1FWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzczNS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM3MzY6dm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzczNy17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTQwNTI9c3RhdGljIHZvaWQgcGh5X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZHJpdmVyICpkcnYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNTYtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0MDU3OmludCBwaHlfZHJpdmVyc19yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqbmV3X2RyaXZlciwgaW50IG4sXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDU4LVxcdFxcdFxcdCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDA3Mj1FWFBPUlRfU1lNQk9MKHBoeV9kcml2ZXJzX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNzMtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo0MDc0OnZvaWQgcGh5X2RyaXZlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqZHJ2LCBpbnQgbilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDoyOTo1My4yNDAyODUxNTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNTYzNTgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQaHkgRHJpdmVyIEV4cG9ydCBTdGF0dXMqKlxuXG5BbHJpZ2h0LCBzbyBgcGh5X3NldF91cHN0cmVhbV9wb3J0YCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCBub3RlZC4gSSdtIG1vdmluZyBvbiB0byBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBQSFkgc3Vic3lzdGVtLiBUaGF0IGxlYWRzIG1lIHRvIGltbWVkaWF0ZWx5IHdvbmRlciBhYm91dCB0aGUgcm9sZSBvZiBgZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY2AuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZSBleHBvcnQgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZnVuY3Rpb25hbGl0eSBtYW5hZ2VkIGJ5IGBwaHlsaW5rLmNgLiBEb2VzIGl0IGltcGFjdCBsaW5rIHN0YXRlIGhhbmRsaW5nLCBhdXRvbmVnb3RpYXRpb24gc2V0dXAsIG9yIGFueSBvdGhlciBjcml0aWNhbCBQSFkgb3BlcmF0aW9uYWwgYXJlYXMgdGhhdCB0aGF0IGZpbGUgdHlwaWNhbGx5IGhhbmRsZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGZsb3cgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZXhwb3J0IGNyZWF0ZXMgYW55IG9wcG9ydHVuaXRpZXMgb3IsIHBvdGVudGlhbGx5LCB1bmZvcmVzZWVuIGNvbnNlcXVlbmNlcyB3aXRoaW4gdGhlIFBIWSBmcmFtZXdvcmsuIE15IHRob3VnaHQgcHJvY2VzcyBpcyBub3cgY2VudGVyaW5nIG9uIHRoZSBpbnRlcmNvbm5lY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzYzLCJPdXRwdXRUb2tlbnMiOjcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6Mjk6NTYuNzc1OTIzNzc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk4ODU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxzK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTQwPXN0YXRpYyBjb25zdCBwaHlfaW50ZXJmYWNlX3QgcGh5bGlua19zZnBfaW50ZXJmYWNlX3ByZWZlcmVuY2VbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTUzLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTU0OnN0YXRpYyBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhwaHlsaW5rX3NmcF9pbnRlcmZhY2VzKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE1NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTYxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTYyOnZvaWQgcGh5bGlua19zZXRfcG9ydF9tb2Rlcyh1bnNpZ25lZCBsb25nICptYXNrKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mzc0PXN0YXRpYyB2b2lkIHBoeWxpbmtfY2Fwc190b19saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zOTUtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozOTY6dm9pZCBwaHlsaW5rX2xpbWl0X21hY19zcGVlZChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIG1heF9zcGVlZClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM5Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTk4Mz1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19wb2xsX3N0YXJ0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtOTg4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6OTg5OmludCBwaHlsaW5rX3Bjc19wcmVfaW5pdChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtOTkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTgxNj1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTg1Ny0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4NTg6aW50IHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IHBoeWxpbmsgKnBsLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTg1OS1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTk5Mz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2NyZWF0ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIwMDMtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMDA0OnZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIwMDUte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMDE0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZGVzdHJveSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIwMjQtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMDI1OmJvb2wgcGh5bGlua19leHBlY3RzX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMDI2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjI2Mz1zdGF0aWMgaW50IHBoeWxpbmtfYXR0YWNoX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyOTYtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjk3OmludCBwaHlsaW5rX2Nvbm5lY3RfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzE3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY29ubmVjdF9waHkpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzMwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjMzMTppbnQgcGh5bGlua19vZl9waHlfY29ubmVjdChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzMyLVxcdFxcdFxcdCAgIHUzMiBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjMzNj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX29mX3BoeV9jb25uZWN0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjM0OC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIzNDk6aW50IHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0KHN0cnVjdCBwaHlsaW5rICpwbCxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzNTAtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzOTU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19md25vZGVfcGh5X2Nvbm5lY3QpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDAzLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQwNDp2b2lkIHBoeWxpbmtfZGlzY29ubmVjdF9waHkoc3RydWN0IHBoeWxpbmsgKnBsKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQwNS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI0MzA9c3RhdGljIHZvaWQgcGh5bGlua19saW5rX2NoYW5nZWQoc3RydWN0IHBoeWxpbmsgKnBsLCBib29sIHVwLCBjb25zdCBjaGFyICp3aGF0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDQ1LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ0Njp2b2lkIHBoeWxpbmtfbWFjX2NoYW5nZShzdHJ1Y3QgcGh5bGluayAqcGwsIGJvb2wgdXApXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDQ3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjQ1MD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21hY19jaGFuZ2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDYyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ2Mzp2b2lkIHBoeWxpbmtfcGNzX2NoYW5nZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgYm9vbCB1cClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI0NjQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNDcyPXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlsaW5rX2xpbmtfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDg4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQ4OTp2b2lkIHBoeWxpbmtfc3RhcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI1NDU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zdGFydCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1NTgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTU5OnZvaWQgcGh5bGlua19zdG9wKHN0cnVjdCBwaHlsaW5rICpwbClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1NjAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNTc5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3RvcCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1ODgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTg5OnZvaWQgcGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjYwOD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjYxNy0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2MTg6dm9pZCBwaHlsaW5rX3J4X2Nsa19zdG9wX3VuYmxvY2soc3RydWN0IHBoeWxpbmsgKnBsKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjYxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI2NTA9c3RhdGljIGJvb2wgcGh5bGlua19waHlfcG1fc3BlZWRfY3RybChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2NzItICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjczOnZvaWQgcGh5bGlua19zdXNwZW5kKHN0cnVjdCBwaHlsaW5rICpwbCwgYm9vbCBtYWNfd29sKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjY3NC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI3MDk9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zdXNwZW5kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjcxOC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI3MTk6dm9pZCBwaHlsaW5rX3ByZXBhcmVfcmVzdW1lKHN0cnVjdCBwaHlsaW5rICpwbClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3MjAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNzM0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcHJlcGFyZV9yZXN1bWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzQyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjc0Mzp2b2lkIHBoeWxpbmtfcmVzdW1lKHN0cnVjdCBwaHlsaW5rICpwbClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3NDQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNzc3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcmVzdW1lKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjc4Ny0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI3ODg6dm9pZCBwaHlsaW5rX2V0aHRvb2xfZ2V0X3dvbChzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3ODkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yODE0PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfd29sKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjgyNi0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI4Mjc6aW50IHBoeWxpbmtfZXRodG9vbF9zZXRfd29sKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjgyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5NDY9c3RhdGljIHZvaWQgcGh5bGlua19nZXRfa3NldHRpbmdzKGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTY4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjk2OTppbnQgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoc3RydWN0IHBoeWxpbmsgKnBsLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICprc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMDE0PXN0YXRpYyBib29sIHBoeWxpbmtfdmFsaWRhdGVfcGNzX2luYmFuZF9hdXRvbmVnKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzAzOC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMwMzk6aW50IHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHN0cnVjdCBwaHlsaW5rICpwbCxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMwNDAtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzIwMj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyMTQtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjE1OmludCBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMjE2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzIyNz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyMzMtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjM0OnZvaWQgcGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyMzUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMjQzPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyNDktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjUwOmludCBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzI1MS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzMyOT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzQwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM0MTppbnQgcGh5bGlua19nZXRfZWVlX2VycihzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzQyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM1Mj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2dldF9lZWVfZXJyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM1OC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMzNTk6aW50IHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWVlKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMzNzg9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2dldF9lZWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzg0LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM4NTppbnQgcGh5bGlua19ldGh0b29sX3NldF9lZWUoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZWUpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzg2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzU1Mj1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX3dyaXRlKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgaW50IHBoeV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzU4Ni0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM1ODc6aW50IHBoeWxpbmtfbWlpX2lvY3RsKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzY0NT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21paV9pb2N0bCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM2NTgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNjU5OmludCBwaHlsaW5rX3NwZWVkX2Rvd24oc3RydWN0IHBoeWxpbmsgKnBsLCBib29sIHN5bmMpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNjYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzY3MD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NwZWVkX2Rvd24pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNjgxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzY4MjppbnQgcGh5bGlua19zcGVlZF91cChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNjgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDA5NT1zdGF0aWMgc3RydWN0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDExMC1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQxMTE6dm9pZCBwaHlsaW5rX3Jlc29sdmVfYzczKHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDExMi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQxNTg9c3RhdGljIHZvaWQgcGh5bGlua19kZWNvZGVfc2dtaWlfd29yZChzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDE5NC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQxOTU6dm9pZCBwaHlsaW5rX2RlY29kZV91c3hnbWlpX3dvcmQoc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MTk2LVxcdFxcdFxcdFxcdCB1aW50MTZfdCBscGEpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQyNDA9c3RhdGljIHZvaWQgcGh5bGlua19kZWNvZGVfdXNnbWlpX3dvcmQoc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQyNzgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0Mjc5OnZvaWQgcGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MjgwLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBuZWdfbW9kZSwgdTE2IGJtc3IsIHUxNiBscGEpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQzMjY9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MzQyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDM0Mzp2b2lkIHBoeWxpbmtfbWlpX2MyMl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBtZGlvX2RldmljZSAqcGNzLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM0NC1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQzNTg9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19taWlfYzIyX3Bjc19nZXRfc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00MzczLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDM3NDppbnQgcGh5bGlua19taWlfYzIyX3Bjc19lbmNvZGVfYWR2ZXJ0aXNlbWVudChwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM3NS1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00Mzk4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2MyMl9wY3NfZW5jb2RlX2FkdmVydGlzZW1lbnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NDExLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDQxMjppbnQgcGh5bGlua19taWlfYzIyX3Bjc19jb25maWcoc3RydWN0IG1kaW9fZGV2aWNlICpwY3MsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NDEzLVxcdFxcdFxcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00NDQyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2MyMl9wY3NfY29uZmlnKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDQ1NC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQ0NTU6dm9pZCBwaHlsaW5rX21paV9jMjJfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IG1kaW9fZGV2aWNlICpwY3MpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NDU2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDQ2NT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21paV9jMjJfcGNzX2FuX3Jlc3RhcnQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDQ2Ni1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQ0Njc6dm9pZCBwaHlsaW5rX21paV9jNDVfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKnBjcyxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ0NjgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQ0OTQ9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19taWlfYzQ1X3Bjc19nZXRfc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00NTA4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDUwOTp2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4oc3RydWN0IHBoeWxpbmsgKnBsKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDUxMC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTQ1MTU9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19yZXBsYXlfbGlua19iZWdpbik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQ1MzEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0NTMyOnZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDUzMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjI5OjU2LjgyMDkxOTAyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTM4NjY1NjUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBSZWxldmFudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2U6XG5cbiogICBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YFxuKiAgIGBldGhubF9wb3J0X2R1bXBpdGBcbiogICBgZXRobmxfcG9ydF9kdW1wX2RvbmVgXG4qICAgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgXG4qICAgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgXG4qICAgYHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNgXG4qICAgYHBoeV9zZXRfdXBzdHJlYW1fcG9ydGBcblxuSSBxdWlja2x5IHJlYWxpemVkIHRoZSBmaXJzdCB0aHJlZSBhcmUgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AuIEkgY2hlY2tlZCBmb3Igb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSwgYnV0IEkgY29uZmlybWVkIHRoYXQgdGhvc2UgYXJlIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5JIHdhcyBicmllZmx5IGNvbmNlcm5lZCBhYm91dCB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMsIGxpa2UgYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBhbmQgYHBvcnRfZmlsbF9yZXBseWAsIHVzZWQgd2l0aGluIGBuZXQvZXRodG9vbC9wb3J0LmNgLiBBbHRob3VnaCB0aGV5IGFyZSBzdGF0aWMsIEkgcmVjb2duaXplZCB0aGV5J3JlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGBldGhubF9wb3J0X3JlcXVlc3Rfb3BzYCwgc28gdGhleSBsaWtlbHkgYXJlbid0IGlubGluZWQuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgZW1waGFzaXplcyBwcmlvcml0aXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLCBzbyBJJ20gc3RpY2tpbmcgd2l0aCB0aGUgb3JpZ2luYWwgbGlzdC4gVGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBjb3JlIG9mIHRoZSBgZG9pdGAgY29tbWFuZCwgc28gSSdsbCBrZWVwIHRoZW0gaW4gbWluZCwgYnV0IHdvbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgZmluYWwgbGlzdCBmb3Igbm93LiBgZXRobmxfZGVmYXVsdF9kb2l0YCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgdG8gdGhhdCBsb2dpYy5cblxuVGhlbiBJIGNvbnNpZGVyZWQgb3RoZXIgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgIGxpa2UgYHBoeV9hZGRfc2ZwX21vZF9wb3J0YCwgYHBoeV9kZWxfc2ZwX21vZF9wb3J0YCwgYHBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnRgLCBldGMuIGJ1dCB0aGV5IHdlcmUgYWxsIHN0YXRpYywgc28gSSBpZ25vcmVkIHRoZW0uXG5cblNvIEkgYW0ga2VlcGluZyBteSBpbml0aWFsIGxpc3QuXG5cbkZvciB0aGUgY29uZmlncywgSSdsbCBuZWVkIGBFVEhUT09MX05FVExJTktgLCBgUEhZTElCYCwgYW5kIHBvc3NpYmx5IGBQSFlMSU5LYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgUEhZTElOS2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDgwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDozMDowOC4yMDc1NzkyNjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjI0Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSFlMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2OmNvbmZpZyBQSFlMSU5LXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDozMDowOC4yNTcyMDg3NjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwNzU1NzMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIFNGUCBQb3J0IFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhpcyBTRlAgcG9ydCBzdXBwb3J0IHBhdGNoLiBGaXJzdCwgYFBIWUxJTktgIGlzIHRyaXN0YXRlLCBzbyB0aGF0IGRlZmluaXRlbHkgZ2V0cyBpbmNsdWRlZC4gTGV0J3Mgc2VlLi4uIGBFVEhUT09MX05FVExJTktgIGlzIGRlZmF1bHQgeWVzLCBidXQgSSdtIGdvaW5nIHRvIGxpc3QgaXQgYW55d2F5LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBUaGVuLCBgUEhZTElCYCBhbmQgYFBIWUxJTktgIGFyZSBib3RoIHRyaXN0YXRlLCBzbyB3ZSBhZGQgdGhvc2UgYXMgd2VsbC4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgdGhlcmUncyBub3RoaW5nIGVsc2UgcmVxdWlyZWQ7IGlzIHRoZXJlIHNvbWV0aGluZyBsaWtlIGBNQUNCYCBvciBhbm90aGVyIGRyaXZlciB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYW4gU0ZQIHRlc3Q/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgY29tcGxldGVseSBzZWxmIGNvbnRhaW5lZC4gUmlnaHQsIHRoZSBwYXRjaCBhZGRzIFNGUCBwb3J0IHN1cHBvcnQsIHNvIGxldCdzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSB0aGluayBJIHdpbGwgbmVlZCB0byBjaGVjayBpZiBgQ09ORklHX1NGUGAgaXMgZXZlbiByZXF1aXJlZCwgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIGluY2x1ZGUgdGhhdCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6MzA6MTIuODY0NzY5MzAzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ5MjE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0ZQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NjU9Y29uZmlnIFJVU1RfUEhZTElCX0FCU1RSQUNUSU9OU1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NzM6Y29uZmlnIFNGUFxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJTRlAgY2FnZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDozMDoxMi45MTEyNjU3NzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2ODAwNzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqU0ZQIENhZ2UgRW5hYmxlbWVudCBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gdGhlIFNGUCBjYWdlIHN1cHBvcnQuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHNvbGlkIGFmZmlybWF0aW9uOiB5ZXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19TRlBgIGlzIGVuYWJsZWQuIFRoYXQgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBmaXJzdCBzdGVwLiBOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgZGV0YWlscyBmb3IgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbj8gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgaW4gdGhlIG5ldHdvcmsgUEhZIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJ2xsIG9wZW4gdXAgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCB0byBzZWUgd2hhdCBJIGNhbiB1bmNvdmVyIHJlZ2FyZGluZyB0aGUgYFNGUGAgS2NvbmZpZyBvcHRpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gY29uZmlybSB0aGUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQ4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEwOjMwOjE2LjM3OTI3NTcyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHQgICAgICAgICAgQWRkcyBzdXBwb3J0IG5lZWRlZCBmb3IgUEhZIGRyaXZlcnMgd3JpdHRlbiBpbiBSdXN0LiBJdCBwcm92aWRlc1xcbiAgNzE6XFx0ICAgICAgICAgIGEgd3JhcHBlciBhcm91bmQgdGhlIEMgcGh5bGliIGNvcmUuXFxuICA3MjpcXHRcXG4gIDczOlxcdGNvbmZpZyBTRlBcXG4gIDc0OlxcdFxcdHRyaXN0YXRlIFxcXCJTRlAgY2FnZSBzdXBwb3J0XFxcIlxcbiAgNzU6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgUEhZTElOS1xcbiAgNzY6XFx0XFx0ZGVwZW5kcyBvbiBIV01PTiB8fCBIV01PTj1uXFxuICA3NzpcXHRcXHRzZWxlY3QgTURJT19JMkNcXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29tbWVudCBcXFwiTUlJIFBIWSBkZXZpY2UgZHJpdmVyc1xcXCJcXG4gIDgwOlxcdFxcbiAgODE6XFx0Y29uZmlnIEFTMjFYWFhfUEhZXFxuICA4MjpcXHRcXHR0cmlzdGF0ZSBcXFwiQWVvbnNlbWkgQVMyMXh4eCBQSFlzXFxcIlxcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIEFlb25zZW1pIEFTMjF4eHggUEhZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMDozMDoxNi4zNzkzNjE0NThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU0NTgyNjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU0ZQIEludGVncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgU0ZQIHN1cHBvcnQgd2l0aGluIHRoZSBQSFkgZnJhbWV3b3JrIGFuZCBleHBvc2VzIGEgbmV3IG5ldGxpbmsgQVBJIGZvciBnZXR0aW5nIHBoeXNpY2FsIHBvcnQgaW5mb3JtYXRpb24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBDT05GSUdfU0ZQYCAqZGVmaW5pdGVseSogZGVwZW5kcyBvbiBgSTJDYCBhbmQgYFBIWUxJTktgLiAgSSBzaG91bGQgbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhvc2UgZGVwZW5kZW5jaWVzIGluIG15IGJ1aWxkLiBBbmQgSSdsbCBhZGQgYFBIWUxJQmAsIGBFVEhUT09MX05FVExJTktgLCBhbmQgb2YgY291cnNlIGBTRlBgIGl0c2VsZi5cblxuVGhlIGNvcmUgb2YgdGhpcyBpcyB0aGUgbmV3IGBQT1JUX0dFVGAgY29tbWFuZCBpbiBldGh0b29sIG5ldGxpbmsuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBtYWpvciBvbmUgc2luY2Ugd2UncmUgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCB0aGUgUEhZL3BoeWxpbmsgbG9naWMgdGhhdCdzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiBUcmFuc2xhdGlvbjogKlRoaXMgaXMgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIGZ1enppbmcuKiAgV2UncmUgZXhwb3NpbmcgbmV3IEFQSXMsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyByb2J1c3QuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgc3BlY2lmaWMgc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbiBmb3IgZnV6emluZyBhbmQgY292ZXJhZ2UuIEknbSB0aGlua2luZzpcblxuKiAgIGBldGhubF9wb3J0X2R1bXBfc3RhcnRgXG4qICAgYGV0aG5sX3BvcnRfZHVtcGl0YFxuKiAgIGBldGhubF9wb3J0X2R1bXBfZG9uZWBcbiogICBgcGh5X2xpbmtfdG9wb19hZGRfcG9ydGBcbiogICBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGBcbiogICBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2BcbiogICBgcGh5X3NldF91cHN0cmVhbV9wb3J0YFxuXG5UaG9zZSBzZWVtIGxpa2UgdGhlIGNydWNpYWwgZW50cnkgYW5kIGV4aXQgcG9pbnRzIGZvciB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cbkFuZCBsZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayBteSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llczpcblxuKiAgIGBFVEhUT09MX05FVExJTktgIC0gb2J2aW91c2x5IGEga2V5IG9uZS5cbiogICBgUEhZTElCYCAtIGZ1bmRhbWVudGFsLCBmb3IgdGhlIFBIWSBmcmFtZXdvcmsgaXRzZWxmLlxuKiAgIGBQSFlMSU5LYCAtIHRoZSBsaW5rIGJldHdlZW4gdGhlIFBIWSBhbmQgdGhlIG5ldHdvcmsuXG4qICAgYFNGUGAgLSB0aGUgZmVhdHVyZSB0aGF0J3MgZHJpdmluZyB0aGUgY2hhbmdlLlxuKiAgIGBJMkNgIC0gZm9yIFNGUC9tb2R1bGUgaW50ZXJhY3Rpb24uXG5cbkhtbSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHBvcnRfcGFyc2VfcmVxdWVzdGAgYW5kIHRoZSBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIGludm9sdmVkIGluIHByb2Nlc3NpbmcgcmVxdWVzdHMgYXJlIGV2ZW4gd29ydGggY29uc2lkZXJpbmcuIFRoZXkncmUgc3RhdGljLCBzbyBpZiB0aGV5IGFyZSBpbmxpbmVkLCB0aGVpciBzeW1ib2xzIHdvbid0IGJlIGRpc3RpbmN0LCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSBiZWluZyB0YWtlbiBpbiBgZXRobmxfcG9ydF9yZXF1ZXN0X29wc2AsIHNvIHRoYXQgc3VnZ2VzdHMgdGhleSBhcmUgbm90IGlubGluZWQuIFNpbmNlIHN5emthbGxlciwgYW5kIGdlbmVyYWxseSBjb3ZlcmFnZSB0cmFja2luZywgdXNlcyBleHBvcnRlZCBvciBub24tc3RhdGljIHN5bWJvbHMsIEknbGwgc3RpY2sgdG8gbGlzdGluZyB0aG9zZSBub24tc3RhdGljIHN5bWJvbHMuXG5cbkxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgcG9ydF9wYXJzZV9yZXF1ZXN0YCBpcyBpbmRlZWQgaW4gYG5ldC9ldGh0b29sL3BvcnQuY2AuICpZZXMsIGl0IGlzKi4gT2theSwgZ3JlYXQsIEkgY2FuIGp1c3QgcHJvdmlkZSB0aGUgbm9uLXN0YXRpYyBvbmVzLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEkndmUgZ290IGEgc29saWQgcGxhbiBoZXJlLiBJJ2xsIGZsYWcgdGhpcyBhcyBuZWVkaW5nIGNvdmVyYWdlIHRlc3RpbmcuIEFuZCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5MjksIk91dHB1dFRva2VucyI6MjExLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTA6MzA6MjQuOTI1MTkxMjM3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczMjk1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVUSFRPT0xfTkVUTElOS1wiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJQSFlMSU5LXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIkkyQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9zdGFydFwiLFxuICAgIFwiZXRobmxfcG9ydF9kdW1waXRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9kb25lXCIsXG4gICAgXCJwaHlfbGlua190b3BvX2FkZF9wb3J0XCIsXG4gICAgXCJwaHlfbGlua190b3BvX2RlbF9wb3J0XCIsXG4gICAgXCJwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzXCIsXG4gICAgXCJwaHlfc2V0X3Vwc3RyZWFtX3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIGBQT1JUX0dFVGAgdG8gcmV0cmlldmUgcGh5c2ljYWwgcG9ydCBpbmZvcm1hdGlvbiwgYW5kIGFkZHMgU0ZQIHBvcnQgc3VwcG9ydCB0byB0aGUgUEhZIGZyYW1ld29yay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgbmV0bGluayBBUElzIGFuZCBtb2RpZmllcyBjb3JlIFBIWS9waHlsaW5rIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFVEhUT09MX05FVExJTktcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiUEhZTElOS1wiLFxuICAgIFwiU0ZQXCIsXG4gICAgXCJJMkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldGhubF9wb3J0X2R1bXBfc3RhcnRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcGl0XCIsXG4gICAgXCJldGhubF9wb3J0X2R1bXBfZG9uZVwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19hZGRfcG9ydFwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19kZWxfcG9ydFwiLFxuICAgIFwicGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc1wiLFxuICAgIFwicGh5X3NldF91cHN0cmVhbV9wb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZCBgUE9SVF9HRVRgIHRvIHJldHJpZXZlIHBoeXNpY2FsIHBvcnQgaW5mb3JtYXRpb24sIGFuZCBhZGRzIFNGUCBwb3J0IHN1cHBvcnQgdG8gdGhlIFBIWSBmcmFtZXdvcmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IG5ldGxpbmsgQVBJcyBhbmQgbW9kaWZpZXMgY29yZSBQSFkvcGh5bGluayBsb2dpYywgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGV0aHRvb2wgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxtxkq[1] Phase: Succeeded StartedAt: 2026-08-02 10:30:49 +0000 UTC FinishedAt: 2026-08-02 10:30:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 10:30:49 +0000 UTC FinishedAt: 2026-08-02 10:30:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2] Phase: Succeeded StartedAt: 2026-08-02 10:30:49 +0000 UTC FinishedAt: 2026-08-02 14:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 10:30:49 +0000 UTC FinishedAt: 2026-08-02 14:18:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","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-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 10:30:49 +0000 UTC FinishedAt: 2026-08-02 10:31:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 10:30:49 +0000 UTC FinishedAt: 2026-08-02 10:30:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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-workflowxtxkq/series-workflowxtxkq-convert-artifact-2960261076/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 10:31:00 +0000 UTC FinishedAt: 2026-08-02 10:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 10:31:00 +0000 UTC FinishedAt: 2026-08-02 10:50:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a451e861-e3f8-4298-953d-51f6d8ba3035,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-workflowxtxkq/series-workflowxtxkq-convert-artifact-2960261076/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": "2f6d8d82-c9f4-46e0-8b1c-dfe2c56fb62d", "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-workflowxtxkq/series-workflowxtxkq-build-action-817511250/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 10:31:00 +0000 UTC FinishedAt: 2026-08-02 10:50:29 +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:*a451e861-e3f8-4298-953d-51f6d8ba3035,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-workflowxtxkq/series-workflowxtxkq-convert-artifact-2960261076/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": "2f6d8d82-c9f4-46e0-8b1c-dfe2c56fb62d", "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-workflowxtxkq/series-workflowxtxkq-build-action-817511250/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 10:50:56 +0000 UTC FinishedAt: 2026-08-02 10:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 10:50:56 +0000 UTC FinishedAt: 2026-08-02 10:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 10:50:56 +0000 UTC FinishedAt: 2026-08-02 10:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 10:50:56 +0000 UTC FinishedAt: 2026-08-02 10:51:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","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-workflowxtxkq/series-workflowxtxkq-convert-artifact-4290299283/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 10:51:30 +0000 UTC FinishedAt: 2026-08-02 10:53:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 10:51:30 +0000 UTC FinishedAt: 2026-08-02 10:53:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f6d8d82-c9f4-46e0-8b1c-dfe2c56fb62d,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-workflowxtxkq/series-workflowxtxkq-build-action-817511250/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-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 10:53:29 +0000 UTC FinishedAt: 2026-08-02 10:53:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 10:53:29 +0000 UTC FinishedAt: 2026-08-02 10:53:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 10:53:29 +0000 UTC FinishedAt: 2026-08-02 11:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 10:53:29 +0000 UTC FinishedAt: 2026-08-02 11:13:47 +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:*a451e861-e3f8-4298-953d-51f6d8ba3035,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-workflowxtxkq/series-workflowxtxkq-convert-artifact-4290299283/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": "e2694efc-3cf1-4a64-9c0e-a65e48a291ad", "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-workflowxtxkq/series-workflowxtxkq-build-action-3650591687/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 10:53:29 +0000 UTC FinishedAt: 2026-08-02 11:13:37 +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:*a451e861-e3f8-4298-953d-51f6d8ba3035,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-workflowxtxkq/series-workflowxtxkq-convert-artifact-4290299283/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": "e2694efc-3cf1-4a64-9c0e-a65e48a291ad", "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-workflowxtxkq/series-workflowxtxkq-build-action-3650591687/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 11:13:47 +0000 UTC FinishedAt: 2026-08-02 11:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 11:13:47 +0000 UTC FinishedAt: 2026-08-02 11:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 11:13:47 +0000 UTC FinishedAt: 2026-08-02 11:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 11:13:47 +0000 UTC FinishedAt: 2026-08-02 11:15:53 +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:*e2694efc-3cf1-4a64-9c0e-a65e48a291ad,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-workflowxtxkq/series-workflowxtxkq-build-action-3650591687/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-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 11:16:03 +0000 UTC FinishedAt: 2026-08-02 14:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 11:16:03 +0000 UTC FinishedAt: 2026-08-02 14:18:49 +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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"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:*2f6d8d82-c9f4-46e0-8b1c-dfe2c56fb62d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e2694efc-3cf1-4a64-9c0e-a65e48a291ad,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-workflowxtxkq/series-workflowxtxkq-build-action-817511250/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-workflowxtxkq/series-workflowxtxkq-build-action-3650591687/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 11:16:03 +0000 UTC FinishedAt: 2026-08-02 11:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 11:16:03 +0000 UTC FinishedAt: 2026-08-02 11:16:08 +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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"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-workflowxtxkq/series-workflowxtxkq-convert-artifact-1059097612/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 11:16:03 +0000 UTC FinishedAt: 2026-08-02 11:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 11:16:03 +0000 UTC FinishedAt: 2026-08-02 11:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 11:16:03 +0000 UTC FinishedAt: 2026-08-02 11:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 11:16:13 +0000 UTC FinishedAt: 2026-08-02 14:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtxkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"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":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","phy_link_topo_add_port","phy_link_topo_del_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1327e30657d283976c839f1bd24e2d3f68474097","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK","PHYLIB","PHYLINK","SFP","I2C"],"series_id":"438860b6-bd89-4285-84ae-795bb5de9ba2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 11:16:13 +0000 UTC FinishedAt: 2026-08-02 14:18:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f6d8d82-c9f4-46e0-8b1c-dfe2c56fb62d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e2694efc-3cf1-4a64-9c0e-a65e48a291ad,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-workflowxtxkq/series-workflowxtxkq-build-action-817511250/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-workflowxtxkq/series-workflowxtxkq-build-action-3650591687/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-workflowxtxkq/series-workflowxtxkq-convert-artifact-1059097612/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,}