Name: series-workflow94j7j Phase: Succeeded StartedAt: 2026-07-13 17:06:37 +0000 UTC FinishedAt: 2026-07-13 19:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[0] Phase: Succeeded StartedAt: 2026-07-13 17:06:37 +0000 UTC FinishedAt: 2026-07-13 17:26:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 17:06:37 +0000 UTC FinishedAt: 2026-07-13 17:26:08 +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": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAP8211R_PHY" ], "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": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAP8211R_PHY" ], "series_id": "d6250d5c-783d-426b-b32c-b714fbd04318" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dap8211r_probe", "dap8211r_config_init", "pkg_gen_write", "info_show", "pkg_gen_show" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBUDgyMTFSX1BIWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhcDgyMTFyX3Byb2JlJiMzNDssCiAgICAmIzM0O2RhcDgyMTFyX2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3BrZ19nZW5fd3JpdGUmIzM0OywKICAgICYjMzQ7aW5mb19zaG93JiMzNDssCiAgICAmIzM0O3BrZ19nZW5fc2hvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKS4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIEV0aGVybmV0IGRldmljZSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgcmVzcG9uZHMgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBEQVA4MjExUiBQSFkgSUQuIE9uY2UgcHJvYmVkLCB0aGUgZHJpdmVyJiMzOTtzIGBjb25maWdfaW5pdGAgYW5kIGRlYnVnZnMgb3BlcmF0aW9ucyAoYGluZm9fc2hvd2AsIGBwa2dfZ2VuX3Nob3dgLCBgcGtnX2dlbl93cml0ZWApIGNhbiBiZSBleGVyY2lzZWQgYnkgdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzM0NmY3MTUwMGI2YTdiYjFiMDVhODNiODIyODE5ZjE0OTY2ZGFkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDE3OjIyOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGFwdSxkYXA4MjExci55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjA4YTgyZjc3OWQ2MWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGFwdSxkYXA4MjExci55YW1sXG5AQCAtMCwwICYjNDM7MSw3OCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiYjNDM7JVlBTUwgMS4yXG4mIzQzOy0tLVxuJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWVxuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBBcnRlbSBTaGlta28gXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246IHxcbiYjNDM7ICBUaGUgREFQODIxMVIoSSkgaXMgYSBHaWdhYml0IEV0aGVybmV0IFBIWSB3aXRoIFJHTUlJIGludGVyZmFjZSxcbiYjNDM7ICBzdXBwb3J0aW5nIElFRUUgODAyLjNheiBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0LCBJRUVFIDE1ODggU3luY0UsXG4mIzQzOyAgYW5kIGFuIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IgZm9yIGRpYWdub3N0aWNzLlxuJiM0MztcbiYjNDM7ICBTcGVjaWZpY2F0aW9uczpcbiYjNDM7ICAgIC0gMTBCQVNFLVRlLCAxMDBCQVNFLVRYLCAxMDAwQkFTRS1UXG4mIzQzOyAgICAtIFJHTUlJIHdpdGggY29uZmlndXJhYmxlIFRYL1JYIGNsb2NrIGRlbGF5cyAoMTUwIHBzIHN0ZXBzLCAwLTIyNTAgcHMpXG4mIzQzOyAgICAtIElFRUUgODAyLjNhei0yMDEwIEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXRcbiYjNDM7ICAgIC0gSUVFRSAxNTg4IFN5bmNFIHN1cHBvcnRcbiYjNDM7ICAgIC0gSW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvciBhbmQgY2hlY2tlciBmb3IgbGluayBkaWFnbm9zdGljc1xuJiM0MztcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDA4LjAxMWJcbiYjNDM7XG4mIzQzOyAgcmVnOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgcngtaW50ZXJuYWwtZGVsYXktcHM6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgUkdNSUkgUlggY2xvY2sgZGVsYXkgaW4gcGljb3NlY29uZHMuIFRoZSBQSFkgc3VwcG9ydHMgMTUwIHBzIHN0ZXBzXG4mIzQzOyAgICAgIGZyb20gMCB0byAyMjUwIHBzLiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byAxOTUwIHBzLiBJZiB0aGVcbiYjNDM7ICAgICAgcmVxdWVzdGVkIHZhbHVlIGRvZXMgbm90IGV4YWN0bHkgbWF0Y2ggYSBzdXBwb3J0ZWQgc3RlcCwgdGhlIGRyaXZlclxuJiM0MzsgICAgICBzZWxlY3RzIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZSBhbmQgaXNzdWVzIGEgd2FybmluZy5cbiYjNDM7ICAgIGVudW06IFswLCAxNTAsIDMwMCwgNDUwLCA2MDAsIDc1MCwgOTAwLCAxMDUwLCAxMjAwLCAxMzUwLCAxNTAwLFxuJiM0MzsgICAgICAgICAgIDE2NTAsIDE4MDAsIDE5NTAsIDIxMDAsIDIyNTBdXG4mIzQzOyAgICBkZWZhdWx0OiAxOTUwXG4mIzQzO1xuJiM0MzsgIHR4LWludGVybmFsLWRlbGF5LXBzOlxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFJHTUlJIFRYIGNsb2NrIGRlbGF5IGluIHBpY29zZWNvbmRzLiBUaGUgUEhZIHN1cHBvcnRzIDE1MCBwcyBzdGVwc1xuJiM0MzsgICAgICBmcm9tIDAgdG8gMjI1MCBwcy4gSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gMTk1MCBwcy4gSWYgdGhlXG4mIzQzOyAgICAgIHJlcXVlc3RlZCB2YWx1ZSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIGEgc3VwcG9ydGVkIHN0ZXAsIHRoZSBkcml2ZXJcbiYjNDM7ICAgICAgc2VsZWN0cyB0aGUgbmVhcmVzdCBzdXBwb3J0ZWQgdmFsdWUgYW5kIGlzc3VlcyBhIHdhcm5pbmcuXG4mIzQzOyAgICBlbnVtOiBbMCwgMTUwLCAzMDAsIDQ1MCwgNjAwLCA3NTAsIDkwMCwgMTA1MCwgMTIwMCwgMTM1MCwgMTUwMCxcbiYjNDM7ICAgICAgICAgICAxNjUwLCAxODAwLCAxOTUwLCAyMTAwLCAyMjUwXVxuJiM0MzsgICAgZGVmYXVsdDogMTk1MFxuJiM0MztcbiYjNDM7ICB0eC1pbnZlcnRlZC1jbGs6XG4mIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9mbGFnXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgSWYgcHJlc2VudCwgdGhlIFJHTUlJIFRYIGNsb2NrIHRvIHRoZSBNQUMgaXMgaW52ZXJ0ZWQgKDE4MCBkZWdyZWVcbiYjNDM7ICAgICAgcGhhc2Ugc2hpZnQgcmVsYXRpdmUgdG8gdGhlIGRhdGEgbGluZXMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljXG4mIzQzOyAgICAgIGV4dGVuc2lvbiBmb3IgYm9hcmRzIHdoZXJlIFBDQiB0cmFjZSBsZW5ndGggb3IgTUFDIHJlcXVpcmVtZW50c1xuJiM0MzsgICAgICBuZWNlc3NpdGF0ZSBjbG9jayBpbnZlcnNpb24uIE9ubHkgdXNlIHRoaXMgcHJvcGVydHkgYWZ0ZXIgaGFyZHdhcmVcbiYjNDM7ICAgICAgc2lnbmFsIGludGVncml0eSB2YWxpZGF0aW9uLlxuJiM0MztcbiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1waHlAMSB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgcngtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxMDUwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB0eC1pbnRlcm5hbC1kZWxheS1wcyA9IFx1MDAzYzExNTBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHR4LWludmVydGVkLWNsaztcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCAwOTlmMjVkY2VhYmJjNy4uNDU3NmY3MDdhYzk0NDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbkBAIC0yMzcsNiAmIzQzOzIzNywxNiBAQCBjb25maWcgREFWSUNPTV9QSFlcbiBcdGhlbHBcbiBcdCAgQ3VycmVudGx5IHN1cHBvcnRzIGRtOTE2MWUgYW5kIGRtOTEzMVxuIFxuJiM0Mztjb25maWcgREFQODIxMVJfUEhZXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7REFQVSBUZWxlY29tIERBUDgyMTFSKEkpIEdpZ2FiaXQgRXRoZXJuZXQgUEhZXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBPRlxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFN1cHBvcnQgZm9yIHRoZSBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkgR2lnYWJpdCBFdGhlcm5ldCBQSFkuXG4mIzQzO1x0ICBUaGlzIFBIWSBpcyBkZXNpZ25lZCBmb3IgZW50ZXJwcmlzZSBhbmQgaW5kdXN0cmlhbCBuZXR3b3JraW5nXG4mIzQzO1x0ICBhcHBsaWNhdGlvbnMsIHN1cHBvcnRpbmcgMTAvMTAwLzEwMDAgTWJwcyBvcGVyYXRpb24uXG4mIzQzO1x0ICBSR01JSSB3aXRoOiBjb25maWd1cmFibGUgVFgvUlggY2xvY2sgZGVsYXlzLCBvcHRpb25hbCBmbGFnIHRvIGVuYWJsZVxuJiM0MztcdCAgMTgwLWRlZ3JlZSBUWCBjbG9jayBwaGFzZSBzaGlmdCBhbmQgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvci5cbiYjNDM7XG4gY29uZmlnIElDUExVU19QSFlcbiBcdHRyaXN0YXRlIFwmIzM0O0lDUGx1cyBQSFlzXCYjMzQ7XG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5pbmRleCBkZTY2MGFlOTQ5NDUzZC4uYWQzNTczM2ViNGJiNjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTUzLDYgJiM0Mzs1Myw3IEBAIG9iai0kKENPTkZJR19CUk9BRENPTV9QSFkpXHQmIzQzOz0gYnJvYWRjb20ub1xuIG9iai0kKENPTkZJR19DSUNBREFfUEhZKVx0JiM0Mzs9IGNpY2FkYS5vXG4gb2JqLSQoQ09ORklHX0NPUlRJTkFfUEhZKVx0JiM0Mzs9IGNvcnRpbmEub1xuIG9iai0kKENPTkZJR19EQVZJQ09NX1BIWSlcdCYjNDM7PSBkYXZpY29tLm9cbiYjNDM7b2JqLSQoQ09ORklHX0RBUDgyMTFSX1BIWSlcdCYjNDM7PSBkYXA4MjExci5vXG4gb2JqLSQoQ09ORklHX0RQODM2NDBfUEhZKVx0JiM0Mzs9IGRwODM2NDAub1xuIG9iai0kKENPTkZJR19EUDgzODIyX1BIWSlcdCYjNDM7PSBkcDgzODIyLm9cbiBvYmotJChDT05GSUdfRFA4Mzg0OF9QSFkpXHQmIzQzOz0gZHA4Mzg0OC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMgYi9kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZDY5NWJjNDk1M2EyYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmNcbkBAIC0wLDAgJiM0MzsxLDU0NCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMXG4mIzQzOy8qXG4mIzQzOyAqIERyaXZlciBmb3IgdGhlIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWS5cbiYjNDM7ICpcbiYjNDM7ICogU3BlY2lmaWNhdGlvbnM6XG4mIzQzOyAqICAgLSBJRUVFIDgwMi4zIDEwQkFTRS1UZSwgMTAwQkFTRS1UWCwgMTAwMEJBU0UtVFxuJiM0MzsgKiAgIC0gSUVFRSA4MDIuM2F6LTIwMTAgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldFxuJiM0MzsgKiAgIC0gSUVFRSAxNTg4IFN5bmNFIHN1cHBvcnRcbiYjNDM7ICogICAtIFJHTUlJXG4mIzQzOyAqICAgLSBQYWNrYWdlIEdlbmVyYXRvciBmb3IgZGlhZ25vc3RpY3NcbiYjNDM7ICpcbiYjNDM7ICogQXV0aG9yOiBBcnRlbSBTaGlta28gXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2wuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taWkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BIWV9JRFx0XHRcdDB4MDAwODAxMUJcbiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfSURfTUFTS1x0XHQweEZGRkZGRkZGXG4mIzQzO1xuJiM0MzsjZGVmaW5lIERBUDgyMTFSX0VYVF9BRERcdFx0MHgxRVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX0VYVF9EQVRBXHRcdDB4MUZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUEtHQzVcdFx0XHQweEEwXG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUEtHX1BMX01BU0tcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19QTF81QUE1XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19DT1JfQ1JDXHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fRU5cdFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTU9ERVx0XHRCSVQoMTMpXG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUEtHX0dBVEVfRU5cdFx0QklUKDE0KVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19DSEtfRU5cdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUEhZX0NPTlx0XHQweEEwMDFcbiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfTERPX0VOXHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BIWV9SWF9ETFlcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUEhZX0dBVEVfUlhfQ0xLXHRCSVQoOSlcbiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfU1dfUlNUXHRcdEJJVCgxNSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUkdNSUlfQ09OXHRcdDB4QTAwM1xuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLXHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0tcdEdFTk1BU0soMTMsIDEwKVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlRcdEJJVCgxNClcbiYjNDM7XG4mIzQzOy8qIERlZmF1bHQgUkdNSUkgZGVsYXkgKDEuOTVucyA9PSAxMyAqIDE1MClwcykgKi9cbiYjNDM7I2RlZmluZSBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTXHQxOTUwXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFwODIxMXJfZGVsYXlfY29uZmlnIHtcbiYjNDM7XHR1MzIgcHM7XG4mIzQzO1x0dTggc2VsO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcgZGVsYXlfY29uZmlnW10gPSB7XG4mIzQzO1x0eyAgIDAsIDB9LFxuJiM0MztcdHsgMTUwLCAxfSxcbiYjNDM7XHR7IDMwMCwgMn0sXG4mIzQzO1x0eyA0NTAsIDN9LFxuJiM0MztcdHsgNjAwLCA0fSxcbiYjNDM7XHR7IDc1MCwgNX0sXG4mIzQzO1x0eyA5MDAsIDZ9LFxuJiM0MztcdHsxMDUwLCA3fSxcbiYjNDM7XHR7MTIwMCwgOH0sXG4mIzQzO1x0ezEzNTAsIDl9LFxuJiM0MztcdHsxNTAwLCAxMH0sXG4mIzQzO1x0ezE2NTAsIDExfSxcbiYjNDM7XHR7MTgwMCwgMTJ9LFxuJiM0MztcdHsxOTUwLCAxM30sXG4mIzQzO1x0ezIxMDAsIDE0fSxcbiYjNDM7XHR7MjI1MCwgMTV9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBEQVA4MjExUl9ERUxBWV9DT1VOVFx0QVJSQVlfU0laRShkZWxheV9jb25maWcpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFwODIxMXJfcHJpdiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfRlMpXG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqcm9vdF9kaXI7XG4mIzQzO1x0Ym9vbCBjcmNfY29yO1xuJiM0MztcdGJvb2wgbG9vcGJhY2s7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRhcDgyMTFyX2RlbGF5X3BzX3RvX3NlbCgpIC0gQ29udmVydCBwaWNvc2Vjb25kcyB0byByZWdpc3RlciB2YWx1ZVxuJiM0MzsgKiBAcHM6IERlbGF5IGluIHBpY29zZWNvbmRzICgwLTIyNTApXG4mIzQzOyAqXG4mIzQzOyAqIENvbnZlcnRzIGEgZGVsYXkgdmFsdWUgaW4gcGljb3NlY29uZHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgdmFsdWVcbiYjNDM7ICogZm9yIFJHTUlJIGRlbGF5IGNvbmZpZ3VyYXRpb24uIFRoZSBQSFkgc3VwcG9ydHMgMTUwcHMgc3RlcHMgZnJvbSAwIHRvIDIyNTBwcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZWdpc3RlciB2YWx1ZSAoMC0xNSlcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1MTYgZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwcylcbiYjNDM7e1xuJiM0MztcdGludCBpLCBiZXN0X2lkeCA9IDA7XG4mIzQzO1x0dTMyIGJlc3RfZGlmZiA9IFVJTlRfTUFYLCBkaWZmID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQVA4MjExUl9ERUxBWV9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGRpZmYgPSBhYnMocHMgLSBkZWxheV9jb25maWdbaV0ucHMpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChkaWZmIFx1MDAzYyBiZXN0X2RpZmYpIHtcbiYjNDM7XHRcdFx0YmVzdF9kaWZmID0gZGlmZjtcbiYjNDM7XHRcdFx0YmVzdF9pZHggPSBpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghZGlmZilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoYmVzdF9kaWZmKVxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtEZWxheSAldSBwcyBub3QgZm91bmQsIHVzaW5nIGNsb3Nlc3QgJXUgcHNcXG5cJiMzNDssIHBzLFxuJiM0MztcdFx0XHQgICAgZGVsYXlfY29uZmlnW2Jlc3RfaWR4XS5wcyk7XG4mIzQzO1xuJiM0MztcdHBoeWRldl9kYmcocGh5ZGV2LCBcJiMzNDtEZWxheSBwcyBpZHg6ICV1XFxuXCYjMzQ7LCBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRhcDgyMTFyX3JlYWRfZXh0KCkgLSBSZWFkIGV4dGVuZGVkIHJlZ2lzdGVyXG4mIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqIEByZWc6IEV4dGVuZGVkIHJlZ2lzdGVyIGFkZHJlc3NcbiYjNDM7ICpcbiYjNDM7ICogUmVhZHMgYSBQSFkgZXh0ZW5kZWQgcmVnaXN0ZXIgdXNpbmcgdGhlIGluZGlyZWN0IGFjY2VzcyBtZXRob2QuXG4mIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBNRElPIGJ1cyBsb2NrLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFJlZ2lzdGVyIHZhbHVlIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZGFwODIxMXJfcmVhZF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZylcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBEQVA4MjExUl9FWFRfQURELCByZWcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIERBUDgyMTFSX0VYVF9EQVRBKTtcbiYjNDM7b3V0OlxuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZGFwODIxMXJfbW9kaWZ5X2V4dCgpIC0gTW9kaWZ5IGV4dGVuZGVkIHJlZ2lzdGVyIGJpdHNcbiYjNDM7ICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHJlZzogRXh0ZW5kZWQgcmVnaXN0ZXIgYWRkcmVzc1xuJiM0MzsgKiBAbWFzazogQml0IG1hc2sgb2YgYml0cyB0byBjbGVhclxuJiM0MzsgKiBAc2V0OiBCaXQgbWFzayBvZiBiaXRzIHRvIHNldFxuJiM0MzsgKlxuJiM0MzsgKiBNb2RpZmllcyBhIFBIWSBleHRlbmRlZCByZWdpc3RlciB1c2luZyB0aGUgaW5kaXJlY3QgYWNjZXNzIG1ldGhvZC5cbiYjNDM7ICogTmV3IHZhbHVlID0gKG9sZCB2YWx1ZSBcdTAwMjYgfm1hc2spIHwgc2V0LlxuJiM0MzsgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgTURJTyBidXMgbG9jay5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZGFwODIxMXJfbW9kaWZ5X2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnLCB1MTYgbWFzaywgdTE2IHNldClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBEQVA4MjExUl9FWFRfQURELCByZWcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgREFQODIxMVJfRVhUX0RBVEEsIG1hc2ssIHNldCk7XG4mIzQzO291dDpcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRhcDgyMTFyX2dldF9yZ21paV9kZWxheSgpIC0gR2V0IFJHTUlJIGRlbGF5IGZyb20gZGV2aWNlIHRyZWVcbiYjNDM7ICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHByb3BfbmFtZTogRGV2aWNlIHRyZWUgcHJvcGVydHkgbmFtZVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkcyB0aGUgUkdNSUkgZGVsYXkgZnJvbSB0aGUgZGV2aWNlIHRyZWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3RcbiYjNDM7ICogc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBkZWxheSAoMTk1MHBzKSBpcyB1c2VkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFJlZ2lzdGVyIHZhbHVlICgwLTE1KSBvciBkZWZhdWx0IGlmIHByb3BlcnR5IG5vdCBmb3VuZFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHUzMiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTMyIHBzID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIHByb3BfbmFtZSwgXHUwMDI2cHMpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHBoeWRldl9kYmcocGh5ZGV2LCBcJiMzNDtVc2luZyBkZWZhdWx0IGRlbGF5ICgldXBzKVxcblwmIzM0OywgREFQODIxMVJfREVGQVVMVF9ERUxBWV9QUyk7XG4mIzQzO1x0XHRwcyA9IERBUDgyMTFSX0RFRkFVTFRfREVMQVlfUFM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKHBoeWRldiwgcHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZGFwODIxMXJfY29uZmlnX2luaXQoKSAtIEluaXRpYWxpemUgUEhZXG4mIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIENvbmZpZ3VyZXMgdGhlIFBIWSBkdXJpbmcgaW5pdGlhbGl6YXRpb246XG4mIzQzOyAqIC0gUkdNSUkgZGVsYXlzIGJhc2VkIG9uIGludGVyZmFjZSBtb2RlXG4mIzQzOyAqIC0gVFggY2xvY2sgaW52ZXJ0aW9uXG4mIzQzOyAqIC0gU29mdHdhcmUgcmVzZXQgdG8gYXBwbHkgc2V0dGluZ3NcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZGFwODIxMXJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5ZGV2X25vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiYjNDM7XHR1MTYgbWFzayA9IDAsIHNldCA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKSB7XG4mIzQzO1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOlxuJiM0MztcdFx0c2V0ID0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSyxcbiYjNDM7XHRcdFx0XHQgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHBoeWRldiwgXCYjMzQ7cngtaW50ZXJuYWwtZGVsYXktcHNcJiMzNDspKTtcbiYjNDM7XHRcdG1hc2sgPSBEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEOlxuJiM0MztcdFx0c2V0ID0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSyxcbiYjNDM7XHRcdFx0XHQgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHBoeWRldiwgXCYjMzQ7cngtaW50ZXJuYWwtZGVsYXktcHNcJiMzNDspKTtcbiYjNDM7XHRcdG1hc2sgPSBEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSztcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6XG4mIzQzO1x0XHRzZXQgfD0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9UWF9ERUxfTUFTSyxcbiYjNDM7XHRcdFx0XHQgIGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsIFwmIzM0O3R4LWludGVybmFsLWRlbGF5LXBzXCYjMzQ7KSk7XG4mIzQzO1x0XHRtYXNrIHw9IERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBpbnRlcmZhY2U6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwaHlkZXZfbm9kZSwgXCYjMzQ7dHgtdXNlLWludmVydGVkLWNsa1wmIzM0OykpXG4mIzQzO1x0XHRzZXQgfD0gREFQODIxMVJfUkdNSUlfQ0xLX0lOVkVSVDtcbiYjNDM7XG4mIzQzO1x0bWFzayB8PSBEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkYXA4MjExcl9tb2RpZnlfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTiwgREFQODIxMVJfUEhZX1NXX1JTVCwgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIHJlc2V0IHNlbGYtY2xlYXIgKi9cbiYjNDM7XHRmc2xlZXAoMjAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGFwODIxMXJfbW9kaWZ5X2V4dChwaHlkZXYsIERBUDgyMTFSX1JHTUlJX0NPTiwgbWFzaywgc2V0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0O1JHTUlJIGNvbmZpZ3VyZWQ6IGludGVyZmFjZT0lZCwgbWFzaz0weCUwNHgsIHNldD0weCUwNHhcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBwaHlkZXYtXHUwMDNlaW50ZXJmYWNlLCBtYXNrLCBzZXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGluZm9fc2hvdygpIC0gU2hvdyBQSFkgc3RhdHVzIGluZm9ybWF0aW9uXG4mIzQzOyAqIEBzZjogU2VxdWVuY2UgZmlsZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGRhdGE6IFByaXZhdGUgZGF0YSAoc3RydWN0IGRhcDgyMTFyX3ByaXYgKilcbiYjNDM7ICpcbiYjNDM7ICogRGlzcGxheXMgUEhZIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cyByZWdpc3RlcnMgZm9yIGRlYnVnZ2luZy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdiA9IHNmLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cdTAwM2VkZXYpO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTik7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB2YWw7XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYoc2YsIFwmIzM0O1BIWV9DT046IDB4JTA0eFxcblwmIzM0OywgdmFsKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDsgIExETyBlbmFibGVkOiAlc1xcblwmIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1BIWV9MRE9fRU4sIHZhbCkgID9cbiYjNDM7XHRcdCAgIFwmIzM0O3llc1wmIzM0OyA6IFwmIzM0O25vXCYjMzQ7KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDsgIFJYIGRseSBlbjogJXNcXG5cJiMzNDssIEZJRUxEX0dFVChEQVA4MjExUl9QSFlfUlhfRExZLCB2YWwpID9cbiYjNDM7XHRcdCAgIFwmIzM0O3llc1wmIzM0OyA6IFwmIzM0O25vXCYjMzQ7KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDsgIFJYIGNrbCBnYXRpbmc6ICVzXFxuXCYjMzQ7LCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX0dBVEVfUlhfQ0xLLCB2YWwpID9cbiYjNDM7XHRcdCAgIFwmIzM0O3llc1wmIzM0OyA6IFwmIzM0O25vXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9SR01JSV9DT04pO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDtSR01JSV9DT046IDB4JTA0eFxcblwmIzM0OywgdmFsKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDsgIFRYIGRlbGF5IGlkeDogJWx4XFxuXCYjMzQ7LCBGSUVMRF9HRVQoREFQODIxMVJfUkdNSUlfVFhfREVMX01BU0ssIHZhbCkpO1xuJiM0MztcdHNlcV9wcmludGYoc2YsIFwmIzM0OyAgUlggZGVsYXkgaWR4OiAlbHhcXG5cJiMzNDssIEZJRUxEX0dFVChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSywgdmFsKSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzZiwgXCYjMzQ7ICBDTEsgaW52ZXJ0OiAlc1xcblwmIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQsIHZhbCkgP1xuJiM0MztcdFx0ICAgXCYjMzQ7eWVzXCYjMzQ7IDogXCYjMzQ7bm9cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTVNSKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihzZiwgXCYjMzQ7Qk1TUjogMHglMDR4XFxuXCYjMzQ7LCB2YWwpO1xuJiM0MztcdHNlcV9wcmludGYoc2YsIFwmIzM0OyAgTGluazogJXNcXG5cJiMzNDssIEZJRUxEX0dFVChCTVNSX0xTVEFUVVMsIHZhbCkgP1xuJiM0MztcdFx0ICAgXCYjMzQ7dXBcJiMzNDsgOiBcJiMzNDtkb3duXCYjMzQ7KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDsgIEFOIGNvbXBsZXRlOiAlc1xcblwmIzM0OywgRklFTERfR0VUKEJNU1JfQU5FR0NPTVBMRVRFLCB2YWwpID9cbiYjNDM7XHRcdCAgIFwmIzM0O3llc1wmIzM0OyA6IFwmIzM0O25vXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSk7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB2YWw7XG4mIzQzO1xuJiM0MztcdGlmIChGSUVMRF9HRVQoREFQODIxMVJfUEtHX0dFTl9FTiwgdmFsKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgRklFTERfR0VUKERBUDgyMTFSX1BLR19DSEtfRU4sIHZhbCkpXG4mIzQzO1x0XHRzZXFfcHV0cyhzZiwgXCYjMzQ7V0FSTklORzogUGFja2FnZSBHZW5lcmF0aW5nIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztERUZJTkVfU0hPV19BVFRSSUJVVEUoaW5mbyk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGtnX2dlbl9zaG93KCkgLSBTaG93IHBhY2tldCBnZW5lcmF0b3Igc3RhdHVzXG4mIzQzOyAqIEBzZjogU2VxdWVuY2UgZmlsZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGRhdGE6IFByaXZhdGUgZGF0YSAoc3RydWN0IGRhcDgyMTFyX3ByaXYgKilcbiYjNDM7ICpcbiYjNDM7ICogRGlzcGxheXMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yLFxuJiM0MzsgKiBpbmNsdWRpbmcgQ1JDIGNvcnJ1cHRpb24gYW5kIGxvb3BiYWNrIHNldHRpbmdzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBwa2dfZ2VuX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2ID0gc2YtXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVx1MDAzZWRldik7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSk7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB2YWw7XG4mIzQzO1xuJiM0MztcdHNlcV9wdXRzKHNmLCBcJiMzNDtQYWNrYWdlIEdlbmVyYXRpbmc6IFwmIzM0Oyk7XG4mIzQzO1x0aWYgKEZJRUxEX0dFVChEQVA4MjExUl9QS0dfR0VOX0VOLCB2YWwpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBGSUVMRF9HRVQoREFQODIxMVJfUEtHX0NIS19FTiwgdmFsKSlcbiYjNDM7XHRcdHNlcV9wdXRzKHNmLCBcJiMzNDtlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzZXFfcHV0cyhzZiwgXCYjMzQ7ZGlzYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDtDUkMgY29ycnVwdGlvbiBlbjogJXNcXG5cJiMzNDssIEZJRUxEX0dFVChEQVA4MjExUl9QS0dfQ09SX0NSQywgdmFsKSA/XG4mIzQzO1x0XHQgICBcJiMzNDtlbmFibGVkXCYjMzQ7IDogXCYjMzQ7ZGlzYWJsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihzZiwgXCYjMzQ7TG9vcGJhY2sgZW46ICVzXFxuXCYjMzQ7LCBGSUVMRF9HRVQoQk1DUl9MT09QQkFDSywgdmFsKSA/XG4mIzQzO1x0XHQgICBcJiMzNDtlbmFibGVkXCYjMzQ7IDogXCYjMzQ7ZGlzYWJsZWRcJiMzNDspO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGtnX2dlbl93cml0ZSgpIC0gRW5hYmxlL2Rpc2FibGUgcGFja2V0IGdlbmVyYXRvclxuJiM0MzsgKiBAZmlsZTogRmlsZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHVzZXJfYnVmOiBVc2VyIHNwYWNlIGJ1ZmZlclxuJiM0MzsgKiBAY291bnQ6IEJ1ZmZlciBzaXplXG4mIzQzOyAqIEBwcG9zOiBGaWxlIHBvc2l0aW9uXG4mIzQzOyAqXG4mIzQzOyAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IuXG4mIzQzOyAqIEFsc28gY29udHJvbHMgbG9vcGJhY2sgYW5kIENSQyBjb3JydXB0aW9uIHZpYSBkZWJ1Z2ZzIGZsYWdzLlxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOiBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCB1c2UgZ2VucGh5X2xvb3BiYWNrKCkgaGVyZS5cbiYjNDM7ICogZ2VucGh5X2xvb3BiYWNrKCkgZG9lcyBhIGZ1bGwgQk1DUiBvdmVyd3JpdGUgKG1hc2sgPSB+MCkgYW5kXG4mIzQzOyAqIHdhaXRzIHVwIHRvIDUwMCBtcyBmb3IgbGluayBpbiBsb29wYmFjayBtb2RlLiBUaGlzIGlzIHRvb1xuJiM0MzsgKiBoZWF2eSBmb3IgYSBkaWFnbm9zdGljIHBhY2tldCBnZW5lcmF0b3I6XG4mIzQzOyAqXG4mIzQzOyAqIC0gSXQgZGVzdHJveXMgYWxsIG90aGVyIEJNQ1Igc3RhdGUgKHNwZWVkLCBkdXBsZXgsIEFOIGNvbmZpZykuXG4mIzQzOyAqIC0gVGhlIDUwMCBtcyBsaW5rIHBvbGwgaXMgdW5uZWNlc3Nhcnk6IHdlIGFscmVhZHkgaGF2ZSBhIGxpbmtcbiYjNDM7ICogICBvciBhcmUgZGVsaWJlcmF0ZWx5IHNldHRpbmcgdXAgYSB0ZXN0IGNvbmRpdGlvbi5cbiYjNDM7ICogLSBXZSB3YW50IHRvIG1pbmltaXplIGNoYW5nZXMgdG8gQk1DUiBkdXJpbmcgZGVidWdnaW5nLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyB3cml0dGVuIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHBrZ19nZW5fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4mIzQzO1x0XHRcdCAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuJiM0MztcdFx0XHQgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNlcV9maWxlICpzZiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2ID0gc2YtXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVx1MDAzZWRldik7XG4mIzQzO1x0Ym9vbCBlbjtcbiYjNDM7XHR1MTYgbWFzaywgc2V0LCBzZXRfYm1jcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3RydG9ib29sX2Zyb21fdXNlcih1c2VyX2J1ZiwgY291bnQsIFx1MDAyNmVuKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuKSB7XG4mIzQzO1x0XHRzZXQgPSBEQVA4MjExUl9QS0dfR0VOX0VOIHwgREFQODIxMVJfUEtHX0NIS19FTiB8IERBUDgyMTFSX1BLR19QTF81QUE1O1xuJiM0MztcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWNyY19jb3IpXG4mIzQzO1x0XHRcdHNldCB8PSBEQVA4MjExUl9QS0dfQ09SX0NSQztcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2Vsb29wYmFjaylcbiYjNDM7XHRcdFx0c2V0X2JtY3IgPSBCTUNSX0xPT1BCQUNLO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzZXRfYm1jciA9IEJNQ1JfQU5FTkFCTEU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHNldCA9IERBUDgyMTFSX1BLR19HRU5fTU9ERSB8IERBUDgyMTFSX1BLR19HQVRFX0VOO1xuJiM0MztcdFx0c2V0X2JtY3IgPSBCTUNSX0FORU5BQkxFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLIHwgQk1DUl9BTkVOQUJMRSwgc2V0X2JtY3IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtYXNrID0gREFQODIxMVJfUEtHX0dFTl9NQVNLIHwgREFQODIxMVJfUEtHX1BMX01BU0sgfCBEQVA4MjExUl9QS0dfQ09SX0NSQztcbiYjNDM7XHRyZXQgPSBkYXA4MjExcl9tb2RpZnlfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUsIG1hc2ssIHNldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLLCAwKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7REVGSU5FX1NIT1dfU1RPUkVfQVRUUklCVVRFKHBrZ19nZW4pO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRhcDgyMTFyX2RlYnVnX2luaXQoKSAtIEluaXRpYWxpemUgZGVidWdmcyBlbnRyaWVzXG4mIzQzOyAqIEBwcml2OiBQcml2YXRlIGRyaXZlciBkYXRhXG4mIzQzOyAqXG4mIzQzOyAqIENyZWF0ZXMgZGVidWdmcyBkaXJlY3RvcnkgYW5kIGZpbGVzIGZvciBQSFkgZGVidWdnaW5nLlxuJiM0MzsgKiAtIGluZm86IFBIWSBzdGF0dXMgaW5mb3JtYXRpb25cbiYjNDM7ICogLSBwa2dfZ2VuOiBFbmFibGUvZGlzYWJsZSBnZW5lcmF0b3IgKDEvMClcbiYjNDM7ICogLSBwa2dfZ2VuX2NyY19jb3I6IEVuYWJsZSBDUkMgY29ycnVwdGlvbiAoWS9OKVxuJiM0MzsgKiAtIHBrZ19nZW5fbG9vcGJhY2s6IEVuYWJsZSBsb29wYmFjayAoWS9OKVxuJiM0MzsgKlxuJiM0MzsgKiBEZWJ1Z2ZzIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RFQlVHX0ZTIGlzIGVuYWJsZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cHJpdi1cdTAwM2Vyb290X2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZShwcml2LVx1MDAzZWRldiksIE5VTEwpO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2Vyb290X2RpcikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7aW5mb1wmIzM0OywgMDQ0NCwgcHJpdi1cdTAwM2Vyb290X2RpciwgcHJpdixcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNmluZm9fZm9wcyk7XG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtwa2dfZ2VuXCYjMzQ7LCAwNjQ0LCBwcml2LVx1MDAzZXJvb3RfZGlyLCBwcml2LFxuJiM0MztcdFx0XHQgICAgXHUwMDI2cGtnX2dlbl9mb3BzKTtcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV9ib29sKFwmIzM0O3BrZ19nZW5fY3JjX2NvclwmIzM0OywgMDY0NCwgcHJpdi1cdTAwM2Vyb290X2RpcixcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnByaXYtXHUwMDNlY3JjX2Nvcik7XG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfYm9vbChcJiMzNDtwa2dfZ2VuX2xvb3BiYWNrXCYjMzQ7LCAwNjQ0LCBwcml2LVx1MDAzZXJvb3RfZGlyLFxuJiM0MztcdFx0XHQgICAgXHUwMDI2cHJpdi1cdTAwM2Vsb29wYmFjayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkYXA4MjExcl9kZWJ1Z19yZW1vdmUoKSAtIFJlbW92ZSBkZWJ1Z2ZzIGVudHJpZXNcbiYjNDM7ICogQHByaXY6IFByaXZhdGUgZHJpdmVyIGRhdGFcbiYjNDM7ICpcbiYjNDM7ICogUmVjdXJzaXZlbHkgcmVtb3ZlcyBhbGwgZGVidWdmcyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgY3JlYXRlZFxuJiM0MzsgKiBieSBkYXA4MjExcl9kZWJ1Z19pbml0KCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19yZW1vdmUoc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocHJpdi1cdTAwM2Vyb290X2Rpcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbHNlIC8qICFDT05GSUdfREVCVUdfRlMgKi9cbiYjNDM7c3RhdGljIHZvaWQgZGFwODIxMXJfZGVidWdfaW5pdChzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cbiYjNDM7c3RhdGljIHZvaWQgZGFwODIxMXJfZGVidWdfcmVtb3ZlKHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KSB7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZGFwODIxMXJfcHJvYmUoKSAtIFBIWSBwcm9iZSBjYWxsYmFja1xuJiM0MzsgKiBAcGh5ZGV2OiBQSFkgZGV2aWNlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZWQgd2hlbiB0aGUgUEhZIGlzIGRpc2NvdmVyZWQuIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXNcbiYjNDM7ICogcHJpdmF0ZSBkcml2ZXIgZGF0YSBhbmQgZGVidWdmcyBlbnRyaWVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBkYXA4MjExcl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XG4mIzQzO1x0ZGFwODIxMXJfZGVidWdfaW5pdChwcml2KTtcbiYjNDM7XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7REFQODIxMVIgUEhZIHByb2JlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZGFwODIxMXJfcmVtb3ZlKCkgLSBQSFkgcmVtb3ZlIGNhbGxiYWNrXG4mIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIENhbGxlZCB3aGVuIHRoZSBQSFkgaXMgcmVtb3ZlZC4gQ2xlYW5zIHVwIHByaXZhdGUgZHJpdmVyIGRhdGFcbiYjNDM7ICogYW5kIGRlYnVnZnMgZW50cmllcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGRhcDgyMTFyX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0ZGFwODIxMXJfZGVidWdfcmVtb3ZlKHBoeWRldi1cdTAwM2Vwcml2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRhcDgyMTFyX2RyaXZlcltdID0ge1xuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChEQVA4MjExUl9QSFlfSUQpLFxuJiM0MztcdFx0Lm5hbWVcdFx0PSBcJiMzNDtEQVA4MjExUiBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdFx0LnByb2JlICAgICAgICAgID0gZGFwODIxMXJfcHJvYmUsXG4mIzQzO1x0XHQucmVtb3ZlXHRcdD0gZGFwODIxMXJfcmVtb3ZlLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHQ9IGRhcDgyMTFyX2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHQ9IGdlbnBoeV9yZWFkX3N0YXR1cyxcbiYjNDM7XHRcdC5zZXRfbG9vcGJhY2tcdD0gZ2VucGh5X2xvb3BiYWNrLFxuJiM0MztcdFx0LmNvbmZpZ19hbmVnXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIoZGFwODIxMXJfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtEQVA4MjExUiBHaWdhYml0IEV0aGVybmV0IFBIWSBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0FydGVtIFNoaW1rbyBcdTAwM2NhLnNoaW1rby5kZXZAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZGFwODIxMXJfdGJbXSA9IHtcbiYjNDM7XHR7IERBUDgyMTFSX1BIWV9JRCwgREFQODIxMVJfUEhZX0lEX01BU0sgfSxcbiYjNDM7XHR7IC8qIHNlbnRpbmVsICovIH1cbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBkYXA4MjExcl90Yik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFQODIxMVJfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFwODIxMXJfcHJvYmUmIzM0OywKICAgICYjMzQ7ZGFwODIxMXJfY29uZmlnX2luaXQmIzM0OywKICAgICYjMzQ7cGtnX2dlbl93cml0ZSYjMzQ7LAogICAgJiMzNDtpbmZvX3Nob3cmIzM0OywKICAgICYjMzQ7cGtnX2dlbl9zaG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgREFQVSBUZWxlY29tIERBUDgyMTFSKEkpLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgRXRoZXJuZXQgZGV2aWNlIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCByZXNwb25kcyB0byBNRElPIHJlYWRzIHdpdGggdGhlIERBUDgyMTFSIFBIWSBJRC4gT25jZSBwcm9iZWQsIHRoZSBkcml2ZXImIzM5O3MgYGNvbmZpZ19pbml0YCBhbmQgZGVidWdmcyBvcGVyYXRpb25zIChgaW5mb19zaG93YCwgYHBrZ19nZW5fc2hvd2AsIGBwa2dfZ2VuX3dyaXRlYCkgY2FuIGJlIGV4ZXJjaXNlZCBieSB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzNDZmNzE1MDBiNmE3YmIxYjA1YTgzYjgyMjgxOWYxNDk2NmRhZDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAxNzoyMjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGFwdSxkYXA4MjExci55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIwOGE4MmY3NzlkNjFlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwKQEAgLTAsMCAmIzQzOzEsNzggQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWQomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBBcnRlbSBTaGlta28gJmx0O2Euc2hpbWtvLmRldkBnbWFpbC5jb20mZ3Q7CiYjNDM7CiYjNDM7ZGVzY3JpcHRpb246IHwKJiM0MzsgIFRoZSBEQVA4MjExUihJKSBpcyBhIEdpZ2FiaXQgRXRoZXJuZXQgUEhZIHdpdGggUkdNSUkgaW50ZXJmYWNlLAomIzQzOyAgc3VwcG9ydGluZyBJRUVFIDgwMi4zYXogRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldCwgSUVFRSAxNTg4IFN5bmNFLAomIzQzOyAgYW5kIGFuIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IgZm9yIGRpYWdub3N0aWNzLgomIzQzOwomIzQzOyAgU3BlY2lmaWNhdGlvbnM6CiYjNDM7ICAgIC0gMTBCQVNFLVRlLCAxMDBCQVNFLVRYLCAxMDAwQkFTRS1UCiYjNDM7ICAgIC0gUkdNSUkgd2l0aCBjb25maWd1cmFibGUgVFgvUlggY2xvY2sgZGVsYXlzICgxNTAgcHMgc3RlcHMsIDAtMjI1MCBwcykKJiM0MzsgICAgLSBJRUVFIDgwMi4zYXotMjAxMCBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0CiYjNDM7ICAgIC0gSUVFRSAxNTg4IFN5bmNFIHN1cHBvcnQKJiM0MzsgICAgLSBJbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yIGFuZCBjaGVja2VyIGZvciBsaW5rIGRpYWdub3N0aWNzCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IGV0aGVybmV0LXBoeS55YW1sIwomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDAwOC4wMTFiCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICByeC1pbnRlcm5hbC1kZWxheS1wczoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUkdNSUkgUlggY2xvY2sgZGVsYXkgaW4gcGljb3NlY29uZHMuIFRoZSBQSFkgc3VwcG9ydHMgMTUwIHBzIHN0ZXBzCiYjNDM7ICAgICAgZnJvbSAwIHRvIDIyNTAgcHMuIElmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIDE5NTAgcHMuIElmIHRoZQomIzQzOyAgICAgIHJlcXVlc3RlZCB2YWx1ZSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIGEgc3VwcG9ydGVkIHN0ZXAsIHRoZSBkcml2ZXIKJiM0MzsgICAgICBzZWxlY3RzIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZSBhbmQgaXNzdWVzIGEgd2FybmluZy4KJiM0MzsgICAgZW51bTogWzAsIDE1MCwgMzAwLCA0NTAsIDYwMCwgNzUwLCA5MDAsIDEwNTAsIDEyMDAsIDEzNTAsIDE1MDAsCiYjNDM7ICAgICAgICAgICAxNjUwLCAxODAwLCAxOTUwLCAyMTAwLCAyMjUwXQomIzQzOyAgICBkZWZhdWx0OiAxOTUwCiYjNDM7CiYjNDM7ICB0eC1pbnRlcm5hbC1kZWxheS1wczoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUkdNSUkgVFggY2xvY2sgZGVsYXkgaW4gcGljb3NlY29uZHMuIFRoZSBQSFkgc3VwcG9ydHMgMTUwIHBzIHN0ZXBzCiYjNDM7ICAgICAgZnJvbSAwIHRvIDIyNTAgcHMuIElmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIDE5NTAgcHMuIElmIHRoZQomIzQzOyAgICAgIHJlcXVlc3RlZCB2YWx1ZSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIGEgc3VwcG9ydGVkIHN0ZXAsIHRoZSBkcml2ZXIKJiM0MzsgICAgICBzZWxlY3RzIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZSBhbmQgaXNzdWVzIGEgd2FybmluZy4KJiM0MzsgICAgZW51bTogWzAsIDE1MCwgMzAwLCA0NTAsIDYwMCwgNzUwLCA5MDAsIDEwNTAsIDEyMDAsIDEzNTAsIDE1MDAsCiYjNDM7ICAgICAgICAgICAxNjUwLCAxODAwLCAxOTUwLCAyMTAwLCAyMjUwXQomIzQzOyAgICBkZWZhdWx0OiAxOTUwCiYjNDM7CiYjNDM7ICB0eC1pbnZlcnRlZC1jbGs6CiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL2ZsYWcKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgSWYgcHJlc2VudCwgdGhlIFJHTUlJIFRYIGNsb2NrIHRvIHRoZSBNQUMgaXMgaW52ZXJ0ZWQgKDE4MCBkZWdyZWUKJiM0MzsgICAgICBwaGFzZSBzaGlmdCByZWxhdGl2ZSB0byB0aGUgZGF0YSBsaW5lcykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMKJiM0MzsgICAgICBleHRlbnNpb24gZm9yIGJvYXJkcyB3aGVyZSBQQ0IgdHJhY2UgbGVuZ3RoIG9yIE1BQyByZXF1aXJlbWVudHMKJiM0MzsgICAgICBuZWNlc3NpdGF0ZSBjbG9jayBpbnZlcnNpb24uIE9ubHkgdXNlIHRoaXMgcHJvcGVydHkgYWZ0ZXIgaGFyZHdhcmUKJiM0MzsgICAgICBzaWduYWwgaW50ZWdyaXR5IHZhbGlkYXRpb24uCiYjNDM7CiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO2V4YW1wbGVzOgomIzQzOyAgLSB8CiYjNDM7ICAgIG1kaW8gewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeUAxIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDtldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMiYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICByeC1pbnRlcm5hbC1kZWxheS1wcyA9ICZsdDsxMDUwJmd0OzsKJiM0MzsgICAgICAgICAgICB0eC1pbnRlcm5hbC1kZWxheS1wcyA9ICZsdDsxMTUwJmd0OzsKJiM0MzsgICAgICAgICAgICB0eC1pbnZlcnRlZC1jbGs7CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKaW5kZXggMDk5ZjI1ZGNlYWJiYzcuLjQ1NzZmNzA3YWM5NDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtMjM3LDYgJiM0MzsyMzcsMTYgQEAgY29uZmlnIERBVklDT01fUEhZCiAJaGVscAogCSAgQ3VycmVudGx5IHN1cHBvcnRzIGRtOTE2MWUgYW5kIGRtOTEzMQogCiYjNDM7Y29uZmlnIERBUDgyMTFSX1BIWQomIzQzOwl0cmlzdGF0ZSAmIzM0O0RBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWSYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gT0YKJiM0MzsJaGVscAomIzQzOwkgIFN1cHBvcnQgZm9yIHRoZSBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkgR2lnYWJpdCBFdGhlcm5ldCBQSFkuCiYjNDM7CSAgVGhpcyBQSFkgaXMgZGVzaWduZWQgZm9yIGVudGVycHJpc2UgYW5kIGluZHVzdHJpYWwgbmV0d29ya2luZwomIzQzOwkgIGFwcGxpY2F0aW9ucywgc3VwcG9ydGluZyAxMC8xMDAvMTAwMCBNYnBzIG9wZXJhdGlvbi4KJiM0MzsJICBSR01JSSB3aXRoOiBjb25maWd1cmFibGUgVFgvUlggY2xvY2sgZGVsYXlzLCBvcHRpb25hbCBmbGFnIHRvIGVuYWJsZQomIzQzOwkgIDE4MC1kZWdyZWUgVFggY2xvY2sgcGhhc2Ugc2hpZnQgYW5kIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IuCiYjNDM7CiBjb25maWcgSUNQTFVTX1BIWQogCXRyaXN0YXRlICYjMzQ7SUNQbHVzIFBIWXMmIzM0OwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQppbmRleCBkZTY2MGFlOTQ5NDUzZC4uYWQzNTczM2ViNGJiNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKQEAgLTUzLDYgJiM0Mzs1Myw3IEBAIG9iai0kKENPTkZJR19CUk9BRENPTV9QSFkpCSYjNDM7PSBicm9hZGNvbS5vCiBvYmotJChDT05GSUdfQ0lDQURBX1BIWSkJJiM0Mzs9IGNpY2FkYS5vCiBvYmotJChDT05GSUdfQ09SVElOQV9QSFkpCSYjNDM7PSBjb3J0aW5hLm8KIG9iai0kKENPTkZJR19EQVZJQ09NX1BIWSkJJiM0Mzs9IGRhdmljb20ubwomIzQzO29iai0kKENPTkZJR19EQVA4MjExUl9QSFkpCSYjNDM7PSBkYXA4MjExci5vCiBvYmotJChDT05GSUdfRFA4MzY0MF9QSFkpCSYjNDM7PSBkcDgzNjQwLm8KIG9iai0kKENPTkZJR19EUDgzODIyX1BIWSkJJiM0Mzs9IGRwODM4MjIubwogb2JqLSQoQ09ORklHX0RQODM4NDhfUEhZKQkmIzQzOz0gZHA4Mzg0OC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYyBiL2RyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZDY5NWJjNDk1M2EyYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jCkBAIC0wLDAgJiM0MzsxLDU0NCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwKJiM0MzsvKgomIzQzOyAqIERyaXZlciBmb3IgdGhlIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWS4KJiM0MzsgKgomIzQzOyAqIFNwZWNpZmljYXRpb25zOgomIzQzOyAqICAgLSBJRUVFIDgwMi4zIDEwQkFTRS1UZSwgMTAwQkFTRS1UWCwgMTAwMEJBU0UtVAomIzQzOyAqICAgLSBJRUVFIDgwMi4zYXotMjAxMCBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0CiYjNDM7ICogICAtIElFRUUgMTU4OCBTeW5jRSBzdXBwb3J0CiYjNDM7ICogICAtIFJHTUlJCiYjNDM7ICogICAtIFBhY2thZ2UgR2VuZXJhdG9yIGZvciBkaWFnbm9zdGljcwomIzQzOyAqCiYjNDM7ICogQXV0aG9yOiBBcnRlbSBTaGlta28gJmx0O2Euc2hpbWtvLmRldkBnbWFpbC5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXRodG9vbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfSUQJCQkweDAwMDgwMTFCCiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfSURfTUFTSwkJMHhGRkZGRkZGRgomIzQzOwomIzQzOyNkZWZpbmUgREFQODIxMVJfRVhUX0FERAkJMHgxRQomIzQzOyNkZWZpbmUgREFQODIxMVJfRVhUX0RBVEEJCTB4MUYKJiM0MzsKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR0M1CQkJMHhBMAomIzQzOyNkZWZpbmUgREFQODIxMVJfUEtHX1BMX01BU0sJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19QTF81QUE1CQlCSVQoMSkKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19DT1JfQ1JDCQlCSVQoMikKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fRU4JCUJJVCgxMikKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTU9ERQkJQklUKDEzKQomIzQzOyNkZWZpbmUgREFQODIxMVJfUEtHX0dBVEVfRU4JCUJJVCgxNCkKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19DSEtfRU4JCUJJVCgxNSkKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTUFTSwkJR0VOTUFTSygxNSwgMTIpCiYjNDM7CiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfQ09OCQkweEEwMDEKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BIWV9MRE9fRU4JCUJJVCg2KQomIzQzOyNkZWZpbmUgREFQODIxMVJfUEhZX1JYX0RMWQkJQklUKDgpCiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfR0FURV9SWF9DTEsJQklUKDkpCiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfU1dfUlNUCQlCSVQoMTUpCiYjNDM7CiYjNDM7I2RlZmluZSBEQVA4MjExUl9SR01JSV9DT04JCTB4QTAwMwomIzQzOyNkZWZpbmUgREFQODIxMVJfUkdNSUlfVFhfREVMX01BU0sJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0sJR0VOTUFTSygxMywgMTApCiYjNDM7I2RlZmluZSBEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJUCUJJVCgxNCkKJiM0MzsKJiM0MzsvKiBEZWZhdWx0IFJHTUlJIGRlbGF5ICgxLjk1bnMgPT0gMTMgKiAxNTApcHMpICovCiYjNDM7I2RlZmluZSBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTCTE5NTAKJiM0MzsKJiM0MztzdHJ1Y3QgZGFwODIxMXJfZGVsYXlfY29uZmlnIHsKJiM0MzsJdTMyIHBzOwomIzQzOwl1OCBzZWw7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRhcDgyMTFyX2RlbGF5X2NvbmZpZyBkZWxheV9jb25maWdbXSA9IHsKJiM0MzsJeyAgIDAsIDB9LAomIzQzOwl7IDE1MCwgMX0sCiYjNDM7CXsgMzAwLCAyfSwKJiM0MzsJeyA0NTAsIDN9LAomIzQzOwl7IDYwMCwgNH0sCiYjNDM7CXsgNzUwLCA1fSwKJiM0MzsJeyA5MDAsIDZ9LAomIzQzOwl7MTA1MCwgN30sCiYjNDM7CXsxMjAwLCA4fSwKJiM0MzsJezEzNTAsIDl9LAomIzQzOwl7MTUwMCwgMTB9LAomIzQzOwl7MTY1MCwgMTF9LAomIzQzOwl7MTgwMCwgMTJ9LAomIzQzOwl7MTk1MCwgMTN9LAomIzQzOwl7MjEwMCwgMTR9LAomIzQzOwl7MjI1MCwgMTV9LAomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBEQVA4MjExUl9ERUxBWV9DT1VOVAlBUlJBWV9TSVpFKGRlbGF5X2NvbmZpZykKJiM0MzsKJiM0MztzdHJ1Y3QgZGFwODIxMXJfcHJpdiB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfRlMpCiYjNDM7CXN0cnVjdCBkZW50cnkgKnJvb3RfZGlyOwomIzQzOwlib29sIGNyY19jb3I7CiYjNDM7CWJvb2wgbG9vcGJhY2s7CiYjNDM7I2VuZGlmCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkYXA4MjExcl9kZWxheV9wc190b19zZWwoKSAtIENvbnZlcnQgcGljb3NlY29uZHMgdG8gcmVnaXN0ZXIgdmFsdWUKJiM0MzsgKiBAcHM6IERlbGF5IGluIHBpY29zZWNvbmRzICgwLTIyNTApCiYjNDM7ICoKJiM0MzsgKiBDb252ZXJ0cyBhIGRlbGF5IHZhbHVlIGluIHBpY29zZWNvbmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIHZhbHVlCiYjNDM7ICogZm9yIFJHTUlJIGRlbGF5IGNvbmZpZ3VyYXRpb24uIFRoZSBQSFkgc3VwcG9ydHMgMTUwcHMgc3RlcHMgZnJvbSAwIHRvIDIyNTBwcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmVnaXN0ZXIgdmFsdWUgKDAtMTUpCiYjNDM7ICovCiYjNDM7c3RhdGljIHUxNiBkYXA4MjExcl9kZWxheV9wc190b19zZWwoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBzKQomIzQzO3sKJiM0MzsJaW50IGksIGJlc3RfaWR4ID0gMDsKJiM0MzsJdTMyIGJlc3RfZGlmZiA9IFVJTlRfTUFYLCBkaWZmID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwcykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgREFQODIxMVJfREVMQVlfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlkaWZmID0gYWJzKHBzIC0gZGVsYXlfY29uZmlnW2ldLnBzKTsKJiM0MzsKJiM0MzsJCWlmIChkaWZmICZsdDsgYmVzdF9kaWZmKSB7CiYjNDM7CQkJYmVzdF9kaWZmID0gZGlmZjsKJiM0MzsJCQliZXN0X2lkeCA9IGk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWRpZmYpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJlc3RfZGlmZikKJiM0MzsJCXBoeWRldl93YXJuKHBoeWRldiwgJiMzNDtEZWxheSAldSBwcyBub3QgZm91bmQsIHVzaW5nIGNsb3Nlc3QgJXUgcHNcbiYjMzQ7LCBwcywKJiM0MzsJCQkgICAgZGVsYXlfY29uZmlnW2Jlc3RfaWR4XS5wcyk7CiYjNDM7CiYjNDM7CXBoeWRldl9kYmcocGh5ZGV2LCAmIzM0O0RlbGF5IHBzIGlkeDogJXVcbiYjMzQ7LCBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbCk7CiYjNDM7CiYjNDM7CXJldHVybiBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGFwODIxMXJfcmVhZF9leHQoKSAtIFJlYWQgZXh0ZW5kZWQgcmVnaXN0ZXIKJiM0MzsgKiBAcGh5ZGV2OiBQSFkgZGV2aWNlIHN0cnVjdHVyZQomIzQzOyAqIEByZWc6IEV4dGVuZGVkIHJlZ2lzdGVyIGFkZHJlc3MKJiM0MzsgKgomIzQzOyAqIFJlYWRzIGEgUEhZIGV4dGVuZGVkIHJlZ2lzdGVyIHVzaW5nIHRoZSBpbmRpcmVjdCBhY2Nlc3MgbWV0aG9kLgomIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBNRElPIGJ1cyBsb2NrLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBSZWdpc3RlciB2YWx1ZSBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYXA4MjExcl9yZWFkX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBEQVA4MjExUl9FWFRfQURELCByZWcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgREFQODIxMVJfRVhUX0RBVEEpOwomIzQzO291dDoKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkYXA4MjExcl9tb2RpZnlfZXh0KCkgLSBNb2RpZnkgZXh0ZW5kZWQgcmVnaXN0ZXIgYml0cwomIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICogQHJlZzogRXh0ZW5kZWQgcmVnaXN0ZXIgYWRkcmVzcwomIzQzOyAqIEBtYXNrOiBCaXQgbWFzayBvZiBiaXRzIHRvIGNsZWFyCiYjNDM7ICogQHNldDogQml0IG1hc2sgb2YgYml0cyB0byBzZXQKJiM0MzsgKgomIzQzOyAqIE1vZGlmaWVzIGEgUEhZIGV4dGVuZGVkIHJlZ2lzdGVyIHVzaW5nIHRoZSBpbmRpcmVjdCBhY2Nlc3MgbWV0aG9kLgomIzQzOyAqIE5ldyB2YWx1ZSA9IChvbGQgdmFsdWUgJmFtcDsgfm1hc2spIHwgc2V0LgomIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBNRElPIGJ1cyBsb2NrLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGRhcDgyMTFyX21vZGlmeV9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IG1hc2ssIHUxNiBzZXQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIERBUDgyMTFSX0VYVF9BREQsIHJlZyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIERBUDgyMTFSX0VYVF9EQVRBLCBtYXNrLCBzZXQpOwomIzQzO291dDoKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoKSAtIEdldCBSR01JSSBkZWxheSBmcm9tIGRldmljZSB0cmVlCiYjNDM7ICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAcHJvcF9uYW1lOiBEZXZpY2UgdHJlZSBwcm9wZXJ0eSBuYW1lCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgUkdNSUkgZGVsYXkgZnJvbSB0aGUgZGV2aWNlIHRyZWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QKJiM0MzsgKiBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGRlbGF5ICgxOTUwcHMpIGlzIHVzZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJlZ2lzdGVyIHZhbHVlICgwLTE1KSBvciBkZWZhdWx0IGlmIHByb3BlcnR5IG5vdCBmb3VuZAomIzQzOyAqLwomIzQzO3N0YXRpYyB1MzIgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKnByb3BfbmFtZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGU7CiYjNDM7CWludCByZXQ7CiYjNDM7CXUzMiBwcyA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBwcm9wX25hbWUsICZhbXA7cHMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDtVc2luZyBkZWZhdWx0IGRlbGF5ICgldXBzKVxuJiMzNDssIERBUDgyMTFSX0RFRkFVTFRfREVMQVlfUFMpOwomIzQzOwkJcHMgPSBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBkYXA4MjExcl9kZWxheV9wc190b19zZWwocGh5ZGV2LCBwcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRhcDgyMTFyX2NvbmZpZ19pbml0KCkgLSBJbml0aWFsaXplIFBIWQomIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBDb25maWd1cmVzIHRoZSBQSFkgZHVyaW5nIGluaXRpYWxpemF0aW9uOgomIzQzOyAqIC0gUkdNSUkgZGVsYXlzIGJhc2VkIG9uIGludGVyZmFjZSBtb2RlCiYjNDM7ICogLSBUWCBjbG9jayBpbnZlcnRpb24KJiM0MzsgKiAtIFNvZnR3YXJlIHJlc2V0IHRvIGFwcGx5IHNldHRpbmdzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZGFwODIxMXJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5ZGV2X25vZGUgPSBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGU7CiYjNDM7CXUxNiBtYXNrID0gMCwgc2V0ID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChwaHlkZXYtJmd0O2ludGVyZmFjZSkgewomIzQzOwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSToKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOgomIzQzOwkJc2V0ID0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSywKJiM0MzsJCQkJIGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsICYjMzQ7cngtaW50ZXJuYWwtZGVsYXktcHMmIzM0OykpOwomIzQzOwkJbWFzayA9IERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEOgomIzQzOwkJc2V0ID0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSywKJiM0MzsJCQkJIGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsICYjMzQ7cngtaW50ZXJuYWwtZGVsYXktcHMmIzM0OykpOwomIzQzOwkJbWFzayA9IERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6CiYjNDM7CQlzZXQgfD0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9UWF9ERUxfTUFTSywKJiM0MzsJCQkJICBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkocGh5ZGV2LCAmIzM0O3R4LWludGVybmFsLWRlbGF5LXBzJiMzNDspKTsKJiM0MzsJCW1hc2sgfD0gREFQODIxMVJfUkdNSUlfVFhfREVMX01BU0s7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIGludGVyZmFjZTogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGh5ZGV2X25vZGUsICYjMzQ7dHgtdXNlLWludmVydGVkLWNsayYjMzQ7KSkKJiM0MzsJCXNldCB8PSBEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJUOwomIzQzOwomIzQzOwltYXNrIHw9IERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQ7CiYjNDM7CiYjNDM7CXJldCA9IGRhcDgyMTFyX21vZGlmeV9leHQocGh5ZGV2LCBEQVA4MjExUl9QSFlfQ09OLCBEQVA4MjExUl9QSFlfU1dfUlNULCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIHJlc2V0IHNlbGYtY2xlYXIgKi8KJiM0MzsJZnNsZWVwKDIwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGRhcDgyMTFyX21vZGlmeV9leHQocGh5ZGV2LCBEQVA4MjExUl9SR01JSV9DT04sIG1hc2ssIHNldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDtSR01JSSBjb25maWd1cmVkOiBpbnRlcmZhY2U9JWQsIG1hc2s9MHglMDR4LCBzZXQ9MHglMDR4XG4mIzM0OywKJiM0MzsJCSAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlLCBtYXNrLCBzZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGluZm9fc2hvdygpIC0gU2hvdyBQSFkgc3RhdHVzIGluZm9ybWF0aW9uCiYjNDM7ICogQHNmOiBTZXF1ZW5jZSBmaWxlIHN0cnVjdHVyZQomIzQzOyAqIEBkYXRhOiBQcml2YXRlIGRhdGEgKHN0cnVjdCBkYXA4MjExcl9wcml2ICopCiYjNDM7ICoKJiM0MzsgKiBEaXNwbGF5cyBQSFkgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzIHJlZ2lzdGVycyBmb3IgZGVidWdnaW5nLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGluZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi0mZ3Q7ZGV2KTsKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJdmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QSFlfQ09OKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwlzZXFfcHJpbnRmKHNmLCAmIzM0O1BIWV9DT046IDB4JTA0eFxuJiMzNDssIHZhbCk7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7ICBMRE8gZW5hYmxlZDogJXNcbiYjMzQ7LCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX0xET19FTiwgdmFsKSAgPwomIzQzOwkJICAgJiMzNDt5ZXMmIzM0OyA6ICYjMzQ7bm8mIzM0Oyk7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7ICBSWCBkbHkgZW46ICVzXG4mIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1BIWV9SWF9ETFksIHZhbCkgPwomIzQzOwkJICAgJiMzNDt5ZXMmIzM0OyA6ICYjMzQ7bm8mIzM0Oyk7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7ICBSWCBja2wgZ2F0aW5nOiAlc1xuJiMzNDssIEZJRUxEX0dFVChEQVA4MjExUl9QSFlfR0FURV9SWF9DTEssIHZhbCkgPwomIzQzOwkJICAgJiMzNDt5ZXMmIzM0OyA6ICYjMzQ7bm8mIzM0Oyk7CiYjNDM7CiYjNDM7CXZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUkdNSUlfQ09OKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwlzZXFfcHJpbnRmKHNmLCAmIzM0O1JHTUlJX0NPTjogMHglMDR4XG4mIzM0OywgdmFsKTsKJiM0MzsJc2VxX3ByaW50ZihzZiwgJiMzNDsgIFRYIGRlbGF5IGlkeDogJWx4XG4mIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLLCB2YWwpKTsKJiM0MzsJc2VxX3ByaW50ZihzZiwgJiMzNDsgIFJYIGRlbGF5IGlkeDogJWx4XG4mIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLLCB2YWwpKTsKJiM0MzsJc2VxX3ByaW50ZihzZiwgJiMzNDsgIENMSyBpbnZlcnQ6ICVzXG4mIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQsIHZhbCkgPwomIzQzOwkJICAgJiMzNDt5ZXMmIzM0OyA6ICYjMzQ7bm8mIzM0Oyk7CiYjNDM7CiYjNDM7CXZhbCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNU1IpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7Qk1TUjogMHglMDR4XG4mIzM0OywgdmFsKTsKJiM0MzsJc2VxX3ByaW50ZihzZiwgJiMzNDsgIExpbms6ICVzXG4mIzM0OywgRklFTERfR0VUKEJNU1JfTFNUQVRVUywgdmFsKSA/CiYjNDM7CQkgICAmIzM0O3VwJiMzNDsgOiAmIzM0O2Rvd24mIzM0Oyk7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7ICBBTiBjb21wbGV0ZTogJXNcbiYjMzQ7LCBGSUVMRF9HRVQoQk1TUl9BTkVHQ09NUExFVEUsIHZhbCkgPwomIzQzOwkJICAgJiMzNDt5ZXMmIzM0OyA6ICYjMzQ7bm8mIzM0Oyk7CiYjNDM7CiYjNDM7CXZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CiYjNDM7CWlmIChGSUVMRF9HRVQoREFQODIxMVJfUEtHX0dFTl9FTiwgdmFsKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBGSUVMRF9HRVQoREFQODIxMVJfUEtHX0NIS19FTiwgdmFsKSkKJiM0MzsJCXNlcV9wdXRzKHNmLCAmIzM0O1dBUk5JTkc6IFBhY2thZ2UgR2VuZXJhdGluZyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztERUZJTkVfU0hPV19BVFRSSUJVVEUoaW5mbyk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGtnX2dlbl9zaG93KCkgLSBTaG93IHBhY2tldCBnZW5lcmF0b3Igc3RhdHVzCiYjNDM7ICogQHNmOiBTZXF1ZW5jZSBmaWxlIHN0cnVjdHVyZQomIzQzOyAqIEBkYXRhOiBQcml2YXRlIGRhdGEgKHN0cnVjdCBkYXA4MjExcl9wcml2ICopCiYjNDM7ICoKJiM0MzsgKiBEaXNwbGF5cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IsCiYjNDM7ICogaW5jbHVkaW5nIENSQyBjb3JydXB0aW9uIGFuZCBsb29wYmFjayBzZXR0aW5ncy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBwa2dfZ2VuX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2ID0gc2YtJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0b19waHlfZGV2aWNlKHByaXYtJmd0O2Rldik7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CiYjNDM7CXNlcV9wdXRzKHNmLCAmIzM0O1BhY2thZ2UgR2VuZXJhdGluZzogJiMzNDspOwomIzQzOwlpZiAoRklFTERfR0VUKERBUDgyMTFSX1BLR19HRU5fRU4sIHZhbCkgJmFtcDsmYW1wOwomIzQzOwkgICAgRklFTERfR0VUKERBUDgyMTFSX1BLR19DSEtfRU4sIHZhbCkpCiYjNDM7CQlzZXFfcHV0cyhzZiwgJiMzNDtlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCXNlcV9wdXRzKHNmLCAmIzM0O2Rpc2FibGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7Q1JDIGNvcnJ1cHRpb24gZW46ICVzXG4mIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1BLR19DT1JfQ1JDLCB2YWwpID8KJiM0MzsJCSAgICYjMzQ7ZW5hYmxlZCYjMzQ7IDogJiMzNDtkaXNhYmxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJdmFsID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmICh2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHZhbDsKJiM0MzsKJiM0MzsJc2VxX3ByaW50ZihzZiwgJiMzNDtMb29wYmFjayBlbjogJXNcbiYjMzQ7LCBGSUVMRF9HRVQoQk1DUl9MT09QQkFDSywgdmFsKSA/CiYjNDM7CQkgICAmIzM0O2VuYWJsZWQmIzM0OyA6ICYjMzQ7ZGlzYWJsZWQmIzM0Oyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwa2dfZ2VuX3dyaXRlKCkgLSBFbmFibGUvZGlzYWJsZSBwYWNrZXQgZ2VuZXJhdG9yCiYjNDM7ICogQGZpbGU6IEZpbGUgc3RydWN0dXJlCiYjNDM7ICogQHVzZXJfYnVmOiBVc2VyIHNwYWNlIGJ1ZmZlcgomIzQzOyAqIEBjb3VudDogQnVmZmVyIHNpemUKJiM0MzsgKiBAcHBvczogRmlsZSBwb3NpdGlvbgomIzQzOyAqCiYjNDM7ICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvci4KJiM0MzsgKiBBbHNvIGNvbnRyb2xzIGxvb3BiYWNrIGFuZCBDUkMgY29ycnVwdGlvbiB2aWEgZGVidWdmcyBmbGFncy4KJiM0MzsgKgomIzQzOyAqIE5PVEU6IFdlIGludGVudGlvbmFsbHkgZG8gbm90IHVzZSBnZW5waHlfbG9vcGJhY2soKSBoZXJlLgomIzQzOyAqIGdlbnBoeV9sb29wYmFjaygpIGRvZXMgYSBmdWxsIEJNQ1Igb3ZlcndyaXRlIChtYXNrID0gfjApIGFuZAomIzQzOyAqIHdhaXRzIHVwIHRvIDUwMCBtcyBmb3IgbGluayBpbiBsb29wYmFjayBtb2RlLiBUaGlzIGlzIHRvbwomIzQzOyAqIGhlYXZ5IGZvciBhIGRpYWdub3N0aWMgcGFja2V0IGdlbmVyYXRvcjoKJiM0MzsgKgomIzQzOyAqIC0gSXQgZGVzdHJveXMgYWxsIG90aGVyIEJNQ1Igc3RhdGUgKHNwZWVkLCBkdXBsZXgsIEFOIGNvbmZpZykuCiYjNDM7ICogLSBUaGUgNTAwIG1zIGxpbmsgcG9sbCBpcyB1bm5lY2Vzc2FyeTogd2UgYWxyZWFkeSBoYXZlIGEgbGluawomIzQzOyAqICAgb3IgYXJlIGRlbGliZXJhdGVseSBzZXR0aW5nIHVwIGEgdGVzdCBjb25kaXRpb24uCiYjNDM7ICogLSBXZSB3YW50IHRvIG1pbmltaXplIGNoYW5nZXMgdG8gQk1DUiBkdXJpbmcgZGVidWdnaW5nLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QgcGtnX2dlbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKJiM0MzsJCQkgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKJiM0MzsJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQomIzQzO3sKJiM0MzsJc3RydWN0IHNlcV9maWxlICpzZiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi0mZ3Q7ZGV2KTsKJiM0MzsJYm9vbCBlbjsKJiM0MzsJdTE2IG1hc2ssIHNldCwgc2V0X2JtY3I7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b2Jvb2xfZnJvbV91c2VyKHVzZXJfYnVmLCBjb3VudCwgJmFtcDtlbik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoZW4pIHsKJiM0MzsJCXNldCA9IERBUDgyMTFSX1BLR19HRU5fRU4gfCBEQVA4MjExUl9QS0dfQ0hLX0VOIHwgREFQODIxMVJfUEtHX1BMXzVBQTU7CiYjNDM7CiYjNDM7CQlpZiAocHJpdi0mZ3Q7Y3JjX2NvcikKJiM0MzsJCQlzZXQgfD0gREFQODIxMVJfUEtHX0NPUl9DUkM7CiYjNDM7CiYjNDM7CQlpZiAocHJpdi0mZ3Q7bG9vcGJhY2spCiYjNDM7CQkJc2V0X2JtY3IgPSBCTUNSX0xPT1BCQUNLOwomIzQzOwkJZWxzZQomIzQzOwkJCXNldF9ibWNyID0gQk1DUl9BTkVOQUJMRTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXNldCA9IERBUDgyMTFSX1BLR19HRU5fTU9ERSB8IERBUDgyMTFSX1BLR19HQVRFX0VOOwomIzQzOwkJc2V0X2JtY3IgPSBCTUNSX0FORU5BQkxFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9MT09QQkFDSyB8IEJNQ1JfQU5FTkFCTEUsIHNldF9ibWNyKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwltYXNrID0gREFQODIxMVJfUEtHX0dFTl9NQVNLIHwgREFQODIxMVJfUEtHX1BMX01BU0sgfCBEQVA4MjExUl9QS0dfQ09SX0NSQzsKJiM0MzsJcmV0ID0gZGFwODIxMXJfbW9kaWZ5X2V4dChwaHlkZXYsIERBUDgyMTFSX1BLR0M1LCBtYXNrLCBzZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLLCAwKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MztERUZJTkVfU0hPV19TVE9SRV9BVFRSSUJVVEUocGtnX2dlbik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGFwODIxMXJfZGVidWdfaW5pdCgpIC0gSW5pdGlhbGl6ZSBkZWJ1Z2ZzIGVudHJpZXMKJiM0MzsgKiBAcHJpdjogUHJpdmF0ZSBkcml2ZXIgZGF0YQomIzQzOyAqCiYjNDM7ICogQ3JlYXRlcyBkZWJ1Z2ZzIGRpcmVjdG9yeSBhbmQgZmlsZXMgZm9yIFBIWSBkZWJ1Z2dpbmcuCiYjNDM7ICogLSBpbmZvOiBQSFkgc3RhdHVzIGluZm9ybWF0aW9uCiYjNDM7ICogLSBwa2dfZ2VuOiBFbmFibGUvZGlzYWJsZSBnZW5lcmF0b3IgKDEvMCkKJiM0MzsgKiAtIHBrZ19nZW5fY3JjX2NvcjogRW5hYmxlIENSQyBjb3JydXB0aW9uIChZL04pCiYjNDM7ICogLSBwa2dfZ2VuX2xvb3BiYWNrOiBFbmFibGUgbG9vcGJhY2sgKFkvTikKJiM0MzsgKgomIzQzOyAqIERlYnVnZnMgaXMgb25seSBhdmFpbGFibGUgd2hlbiBDT05GSUdfREVCVUdfRlMgaXMgZW5hYmxlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcHJpdi0mZ3Q7cm9vdF9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUocHJpdi0mZ3Q7ZGV2KSwgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7cm9vdF9kaXIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7aW5mbyYjMzQ7LCAwNDQ0LCBwcml2LSZndDtyb290X2RpciwgcHJpdiwKJiM0MzsJCQkgICAgJmFtcDtpbmZvX2ZvcHMpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7cGtnX2dlbiYjMzQ7LCAwNjQ0LCBwcml2LSZndDtyb290X2RpciwgcHJpdiwKJiM0MzsJCQkgICAgJmFtcDtwa2dfZ2VuX2ZvcHMpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCYjMzQ7cGtnX2dlbl9jcmNfY29yJiMzNDssIDA2NDQsIHByaXYtJmd0O3Jvb3RfZGlyLAomIzQzOwkJCSAgICAmYW1wO3ByaXYtJmd0O2NyY19jb3IpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCYjMzQ7cGtnX2dlbl9sb29wYmFjayYjMzQ7LCAwNjQ0LCBwcml2LSZndDtyb290X2RpciwKJiM0MzsJCQkgICAgJmFtcDtwcml2LSZndDtsb29wYmFjayk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRhcDgyMTFyX2RlYnVnX3JlbW92ZSgpIC0gUmVtb3ZlIGRlYnVnZnMgZW50cmllcwomIzQzOyAqIEBwcml2OiBQcml2YXRlIGRyaXZlciBkYXRhCiYjNDM7ICoKJiM0MzsgKiBSZWN1cnNpdmVseSByZW1vdmVzIGFsbCBkZWJ1Z2ZzIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBjcmVhdGVkCiYjNDM7ICogYnkgZGFwODIxMXJfZGVidWdfaW5pdCgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShwcml2LSZndDtyb290X2Rpcik7CiYjNDM7fQomIzQzOwomIzQzOyNlbHNlIC8qICFDT05GSUdfREVCVUdfRlMgKi8KJiM0MztzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KSB7fQomIzQzO3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGFwODIxMXJfcHJvYmUoKSAtIFBIWSBwcm9iZSBjYWxsYmFjawomIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBDYWxsZWQgd2hlbiB0aGUgUEhZIGlzIGRpc2NvdmVyZWQuIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMKJiM0MzsgKiBwcml2YXRlIGRyaXZlciBkYXRhIGFuZCBkZWJ1Z2ZzIGVudHJpZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZGFwODIxMXJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXY7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXByaXYtJmd0O2RldiA9IGRldjsKJiM0MzsJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsKJiM0MzsJZGFwODIxMXJfZGVidWdfaW5pdChwcml2KTsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7REFQODIxMVIgUEhZIHByb2JlZFxuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGFwODIxMXJfcmVtb3ZlKCkgLSBQSFkgcmVtb3ZlIGNhbGxiYWNrCiYjNDM7ICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmUKJiM0MzsgKgomIzQzOyAqIENhbGxlZCB3aGVuIHRoZSBQSFkgaXMgcmVtb3ZlZC4gQ2xlYW5zIHVwIHByaXZhdGUgZHJpdmVyIGRhdGEKJiM0MzsgKiBhbmQgZGVidWdmcyBlbnRyaWVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRhcDgyMTFyX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJZGFwODIxMXJfZGVidWdfcmVtb3ZlKHBoeWRldi0mZ3Q7cHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkYXA4MjExcl9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKERBUDgyMTFSX1BIWV9JRCksCiYjNDM7CQkubmFtZQkJPSAmIzM0O0RBUDgyMTFSIEdpZ2FiaXQgRXRoZXJuZXQmIzM0OywKJiM0MzsJCS5wcm9iZSAgICAgICAgICA9IGRhcDgyMTFyX3Byb2JlLAomIzQzOwkJLnJlbW92ZQkJPSBkYXA4MjExcl9yZW1vdmUsCiYjNDM7CQkuY29uZmlnX2luaXQJPSBkYXA4MjExcl9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKJiM0MzsJCS5zZXRfbG9vcGJhY2sJPSBnZW5waHlfbG9vcGJhY2ssCiYjNDM7CQkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCiYjNDM7CQkuc3VzcGVuZAk9IGdlbnBoeV9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAomIzQzOwl9LAomIzQzO307CiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIoZGFwODIxMXJfZHJpdmVyKTsKJiM0MzsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtEQVA4MjExUiBHaWdhYml0IEV0aGVybmV0IFBIWSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0FydGVtIFNoaW1rbyAmbHQ7YS5zaGlta28uZGV2QGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBkYXA4MjExcl90YltdID0gewomIzQzOwl7IERBUDgyMTFSX1BIWV9JRCwgREFQODIxMVJfUEhZX0lEX01BU0sgfSwKJiM0MzsJeyAvKiBzZW50aW5lbCAqLyB9CiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGRhcDgyMTFyX3RiKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMzQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVGhvdWdodHMgb24gUHJvYmluZyB0aGUgTmV3IERBUDgyMTFSIFBIWSBEcml2ZXIgaW4gYSBGdXp6aW5nIENvbnRleHQqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBQSFkgZHJpdmVyLCBgZGFwODIxMXIuY2AsIGZvciB0aGUgREFQVSBUZWxlY29tIERBUDgyMTFSKEkpIEdpZ2FiaXQgRXRoZXJuZXQgUEhZLiBJdCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGltcGxlbWVudHMgdGhlIHN0YW5kYXJkIHByb2JlLCByZW1vdmUsIGFuZCBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucywgYW5kIGV2ZW4gYWRkcyBkZWJ1Z2ZzIGVudHJpZXMgaWYgYENPTkZJR19ERUJVR19GU2AgaXMgZW5hYmxlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIHJlYWNoZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBjYW4gd2UgcmVhY2ggdGhpcyBkcml2ZXIgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50IGxpa2Ugc3l6a2FsbGVyPwoKUEhZIGRyaXZlcnMgYXJlIHR5cGljYWxseSBwcm9iZWQgZWl0aGVyIHdoZW4gYSBuZXR3b3JrIGRldmljZSByZWdpc3RlcnMgYSBQSFksIG9yIHRocm91Z2ggYW4gTURJTyBidXMgc2Nhbi4gSW4gc3l6a2FsbGVyLCB3ZSBjb3VsZCBwb3RlbnRpYWxseSBpbmplY3QgTURJTyBkZXZpY2VzIGRpcmVjdGx5LCBvciBtYXliZSBldmVuIHVzZSBhIGR1bW15IG5ldHdvcmsgZGV2aWNlIHRoYXQgcmVnaXN0ZXJzIGEgUEhZLiBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIG5ldHdvcmsgZnV6emluZyBjYXBhYmlsaXRpZXMgYWxyZWFkeSwgbGlrZSBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5YCwgYnV0IHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhpcyBQSFksIHdlJiMzOTtkIHByb2JhYmx5IGJlIGxvb2tpbmcgYXQgYGlvY3RsKFNJT0NTTUlJUkVHKWAgY2FsbHMsIG9yIHBlcmhhcHMgaW50ZXJhY3RpbmcgdGhyb3VnaCBuZXRsaW5rLCBhc3N1bWluZyBhIHN1aXRhYmxlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGF2YWlsYWJsZS4gT3IsIHRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBtaWdodCBiZSB0byBwcm9iZSBpdCB2aWEgdGhlIE1ESU8gYnVzIGlmIHdlIGhhdmUgYSBtb2NrIE1ESU8gYnVzLgoKTm93LCBzeXprYWxsZXIgaGFzIHByb3ZlbiBpdHNlbGYgY2FwYWJsZSB3aXRoIGB2a21zYCBmb3IgRFJNIGFuZCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBzbyBkb2VzIGl0IGhhdmUgYSB3YXkgdG8gcHJvYmUgYXJiaXRyYXJ5IFBIWSBkcml2ZXJzPyBDYW4gd2UgY3JlYXRlIGEgdmlydHVhbCBNRElPIGJ1cz8gT3IsIHdvdWxkIHVzaW5nIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgKGBkc2FgKSBiZSBhIHBhdGggdG93YXJkIHByb2JpbmcgdGhpcyBkcml2ZXI/IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZ1enogdGhlIGBtZGlvYCBidXMuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaG93IGRvIHdlICp0cmlnZ2VyKiBgZGFwODIxMXJfcHJvYmVgPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiB0aGUgTURJTyBidXMgZXhwb3NlcyBhIHdheSB0byBjcmVhdGUgZGV2aWNlcyBmcm9tIHVzZXJzcGFjZSwgb3IgdG8gc2VlIGlmIGFueSBleGlzdGluZyBQSFkgZnV6emVycyBjYW4gYmUgcmVwdXJwb3NlZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc2VhcmNoIGZvciBgbWRpb2AgYW5kIGBwaHlgIHRvIGlkZW50aWZ5IGFueSByZWxldmFudCBpbnN0YW50aWF0aW9uIG1lY2hhbmlzbXMuCgpUaGlua2luZyBhYm91dCBpdCwgc3l6a2FsbGVyICpjYW4qIGxvYWQgbW9kdWxlcy4gSWYgdGhlcmUmIzM5O3MgYSBkZXZpY2UgdHJlZSBvdmVybGF5LCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXQgKm1pZ2h0KiBwcm9iZSBpdCBhdXRvbWF0aWNhbGx5LiBIb3dldmVyLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgdXN1YWxseSBoYW5kbGUgRFQgb3ZlcmxheXMgdW5sZXNzIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGZvciBpdCwgc28gdGhhdOKAmXMgcHJvYmFibHkgbm90IHRoZSBzdGFuZGFyZCBwYXRoLiBJIHNlZSBub3cgdGhhdCBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgIHNlZW1zIHRvIGJlIHJlbGV2YW50LgoKSG9sZCBvbiwgc3l6a2FsbGVyIGNhbiB1c2UgYGlvY3RsKFNJT0NTTUlJUkVHKWAgdG8gaW50ZXJhY3Qgd2l0aCBQSFlzLCBidXQgdGhhdCBhc3N1bWVzIHRoZSBQSFkgZGV2aWNlIGFscmVhZHkgKmV4aXN0cyouIFNvIHRoYXQgZ2V0cyB1cyBiYWNrIHRvOiBjYW4gd2UgY3JlYXRlIHRoaXMgUEhZIGRldmljZSBkeW5hbWljYWxseT8gSSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gdmVyaWZ5IHRoYXQgYGRhcDgyMTFyX3Byb2JlYCBjYW4gYmUgcmVhY2hlZC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgYSBzdWNjZXNzZnVsIGZ1enppbmcgY2FtcGFpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFwODIxMXJfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9NDc4PXN0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00ODEtLyoqXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0ODI6ICogZGFwODIxMXJfcHJvYmUoKSAtIFBIWSBwcm9iZSBjYWxsYmFja1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDgzLSAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDg5LSAqL1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6NDkwOnN0YXRpYyBpbnQgZGFwODIxMXJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ5MS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9NTIwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkYXA4MjExcl9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MjMtXHRcdC5uYW1lXHRcdD0gXCYjMzQ7REFQODIxMVIgR2lnYWJpdCBFdGhlcm5ldFwmIzM0OyxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjUyNDpcdFx0LnByb2JlICAgICAgICAgID0gZGFwODIxMXJfcHJvYmUsXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MjUtXHRcdC5yZW1vdmVcdFx0PSBkYXA4MjExcl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NTgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUHJvYmluZyBQSFkgRHJpdmVycyB3aXRoIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHdvbmRlcmluZyBpZiBzeXprYWxsZXIgY2FuIGFjdHVhbGx5IGdldCBhdCB0aG9zZSBQSFkgZHJpdmVycy4gSXQgc2VlbXMgbGlrZSB0aGUgdXN1YWwgd2F5cyBhIFBIWSBkcml2ZXIgaXMgbG9hZGVkIOKAkyBlaXRoZXIgdGhyb3VnaCBhbiBNRElPIGJ1cyBzY2FuIGFuZCBtYXRjaGluZyBJRCwgb3IgYnkgYSBEZXZpY2UgVHJlZSBub2RlIHNwZWNpZnlpbmcgdGhlIFBIWSDigJMgcHJvYmFibHkgd29uJiMzOTt0IHdvcmsgaW4gYSBRRU1VLWxpa2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRlZCBNRElPIGJ1cyB3aXRoIHRoYXQgKmV4YWN0KiBJRCwgb3Igc29tZSBjbGV2ZXIgc29mdHdhcmUgcmVnaXN0cmF0aW9uIG1ldGhvZCwgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIGp1c3Qgbm90IGdvaW5nIHRvIGdldCBjYWxsZWQsIHJpZ2h0PyBIbW0sIGxldCYjMzk7cyBzZWUuLi4gYXJlIHRoZXJlIGFueSBvcHRpb25zIGxpa2UgYGRzYV9sb29wYCwgYGZpeGVkLXBoeWAsIG9yIHRoYXQgYG1kaW8tbW9ja2AgdGhpbmc/IE1heWJlIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBtb2NrIE1ESU8gYnVzIGltcGxlbWVudGF0aW9uIEkgY2FuIGxldmVyYWdlLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIHRoZXJlJiMzOTtzIGEgZ29vZCB3YXkgdG8gc2ltdWxhdGUgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uIG5lZWRlZCB0byBnZXQgdGhlc2UgZHJpdmVycyB0byBsb2FkLiBMZXQgbWUgbG9vayBmb3IgYSBtb2NrIE1ESU8gYnVzIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRvIHNlZSB3aGF0JiMzOTtzIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKm1vY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgVXNlcnNwYWNlIFBIWSBEZXZpY2UgUmVnaXN0cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHByb2JlIHdoZXRoZXIgaXQmIzM5O3MgYWN0dWFsbHkgcG9zc2libGUgdG8gcmVnaXN0ZXIgYSBQSFkgZGV2aWNlIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVHJhZGl0aW9uYWxseSwgUEhZIGRldmljZSBtYW5hZ2VtZW50IGhhcyBiZWVuIGZpcm1seSByb290ZWQgaW4gdGhlIGtlcm5lbCwgcHJpbWFyaWx5IGR1ZSB0byB0aGUgbmVlZCBmb3IgZGlyZWN0IGhhcmR3YXJlIGFjY2VzcywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgbWFuYWdpbmcgdGhlIGxvdy1sZXZlbCBjb21tdW5pY2F0aW9uIHByb3RvY29scyAoTURJTywgZXRjLikuIEhvd2V2ZXIsIHdpdGggdGhlIGV2b2x1dGlvbiBvZiBkcml2ZXJzIGFuZCBwb3RlbnRpYWwgZm9yIG1vcmUgYWJzdHJhY3RlZCBoYXJkd2FyZSBpbnRlcmZhY2VzLCBJJiMzOTttIGN1cmlvdXMgaWYgdGhlcmUmIzM5O3MgYmVlbiBhbnkgYWR2YW5jZW1lbnQgaW4gYWxsb3dpbmcgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgUEhZIGRldmljZSBsaWZlY3ljbGUuIE1heWJlIHZpYSBhIHdlbGwtZGVmaW5lZCBBUEkgdGhhdCBwcm92aWRlcyBzYWZlIGFuZCBjb250cm9sbGVkIGFjY2VzcyB0byB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhIG1lY2hhbmlzbSwgcGVyaGFwcyB0aHJvdWdoIGEgY2hhcmFjdGVyIGRldmljZSwgbmV0bGluayBzb2NrZXQsIG9yIGV2ZW4gYSBuZXdlciwgbW9yZSBzb3BoaXN0aWNhdGVkIGludGVyZmFjZSBsaWtlIFVJTyBvciBWRklPLCB0aGF0IHdvdWxkIGZhY2lsaXRhdGUgdGhpcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgc2VjdXJpdHkgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQ7IGhvdyB3b3VsZCB3ZSBlbnN1cmUgdGhhdCBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBkb2VzbiYjMzk7dCBpbmFkdmVydGVudGx5IGludGVyZmVyZSB3aXRoIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcyBvciBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzPyBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHJlbGV2YW50IHN1YnN5c3RlbSBkcml2ZXJzLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb3IgZXhpc3RpbmcgbWVjaGFuaXNtcyB0aGF0IGNvdWxkIGJlIGV4dGVuZGVkIG9yIGFkYXB0ZWQgZm9yIHRoaXMgcHVycG9zZS4gSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgbWlnaHQgaW50ZXJhY3Qgd2l0aCBleGlzdGluZyBuZXR3b3JraW5nIHN0YWNrIGNvbmZpZ3VyYXRpb25zLCBsaWtlIGJvbmRpbmcgb3IgYnJpZGdpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTkzMT1zdGF0aWMgaW50IHhnYmVfcGh5X2ZpbmRfcGh5X2RldmljZShzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05NzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk3NjpcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc3LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5Nzg6XHRcdG5ldGRldl9lcnIocGRhdGEtXHUwMDNlbmV0ZGV2LCBcJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk3OS1cdFx0cGh5X2RldmljZV9mcmVlKHBoeWRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYz03MTY9aG5zX21hY19yZWdpc3Rlcl9waHlkZXYoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBobnNfbWFjX2NiICptYWNfY2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYy03NDQtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmM6NzQ1Olx0cmMgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0Ni1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYz0xOTI5PXN0YXRpYyBpbnQgbmV0c2VjX3JlZ2lzdGVyX21kaW8oc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCB1MzIgcGh5X2FkZHIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4NDpcdFx0cmV0ID0gcGh5X2RldmljZV9yZWdpc3Rlcihwcml2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk4NS1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy0xOTg4LVx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4OTpcdFx0XHRcdFwmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXIgZXJyKCVkKVxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy0xOTkwLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTQyPWZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy02OS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo3MDppbnQgZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy03MS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDMtXHQgKi9cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMDQ6XHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDUtXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTE0LX1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTU6RVhQT1JUX1NZTUJPTChmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTYtXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9MTE3PWludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTQ5LVx0XHQvKiBBbGwgZGF0YSBpcyBub3cgc3RvcmVkIGluIHRoZSBwaHkgc3RydWN0LCBzbyByZWdpc3RlciBpdCAqL1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1MDpcdFx0cmMgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTUxLVx0XHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU2LVx0fSBlbHNlIGlmIChpc19vZl9ub2RlKGNoaWxkKSkge1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1NzpcdFx0cmMgPSBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKGJ1cywgcGh5LCBjaGlsZCwgYWRkcik7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU4LVx0XHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmM9MjYzPXN0cnVjdCBwaHlfZGV2aWNlICp4Z2VuZV9lbmV0X3BoeV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmMtMjcwLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmM6MjcxOlx0aWYgKHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5X2RldikpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8teGdlbmUuYy0yNzItXHRcdHBoeV9kZXZpY2VfZnJlZShwaHlfZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz0zMj1zdGF0aWMgaW50IG9mX2dldF9waHlfaWQoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIHUzMiAqcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM2LVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6Mzc6aW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM4LVx0XHRcdFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0zOS17XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo0MDpcdHJldHVybiBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKG1kaW8sIHBoeSxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxLVx0XHRcdFx0XHRcdCAgb2ZfZndub2RlX2hhbmRsZShjaGlsZCksXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDMtfVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDQ6RVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTEzMT1zdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2Mi1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNjM6XHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQwOD1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDM3LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDM4Olx0ZXJyID0gcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDM5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTU1MT1zdGF0aWMgdm9pZCB0amExMTAyX3AxX3JlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTctXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1OTg6XHRcdHJldCA9IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihidXMsIHBoeSwgY2hpbGQsIGFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTk5LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTAzPUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwNS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwNjogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDctICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQxLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0MjpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0OC0gKiBUaGlzIGRvZXNuJiMzOTt0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0OTogKiBvZiBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkuIFVzZSBwaHlfZGV2aWNlX2ZyZWUoKSB0byBmcmVlIHRoZSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE1MC0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIwNzA9c3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMDg1LVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIwODY6XHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjA4Ny1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMDg4LVx0XHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMDg5Olx0XHRkZXZfZXJyKHNmcC1cdTAwM2VkZXYsIFwmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjA5MC1cdFx0XHRFUlJfUFRSKGVycikpO1xuLS1cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfRldOT0RFX01ESU8pXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmg6MTI6aW50IGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmgtMTMtXHRcdFx0XHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbi0tXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmg9MTY9aW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuLS1cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xOS0jZWxzZSAvKiBDT05GSUdfRldOT0RFX01ESU8gKi9cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaDoyMDppbnQgZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0yMS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oPTQ5PWJvb2wgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucCk7XG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaDo1MDppbnQgb2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmgtNTEtXHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcik7XG4tLVxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg9MTQwPXN0YXRpYyBpbmxpbmUgYm9vbCBvZl9waHlfaXNfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oLTE0NC1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oOjE0NTpzdGF0aWMgaW5saW5lIGludCBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDYtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjE1OT1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KTtcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE2MDppbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcbmluY2x1ZGUvbGludXgvcGh5LmgtMjE2MS12b2lkIHBoeV9kZXZpY2VfZnJlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUzNAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNRElPIEJ1cyBJbnZlc3RpZ2F0aW9uIGZvciBzeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHBvdGVudGlhbGx5IGxldmVyYWdlIHN5emthbGxlciB0byByZWFjaCB0aGUgTURJTyBidXMuIEkga25vdyBzeXprYWxsZXIgY2FuIHVzZSBgaW9jdGwoU0lPQ1NNSUlSRUcpYCB0byB3cml0ZSB0byBpdCwgd2hpY2ggaXMgaW50cmlndWluZy4gVGhlIGNhdGNoLCBvZiBjb3Vyc2UsIGlzIHRoYXQgdGhlcmUgbmVlZHMgdG8gKmJlKiBhbiBNRElPIGJ1cyBwcmVzZW50LiBEb2VzIHN5emthbGxlciBhbHJlYWR5IGhhdmUgYSB3YXkgdG8gZXN0YWJsaXNoIG9uZT8gSG1tLCBpdCBkb2VzIGhhdmUgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAgYW5kIGBzeXpfaW5pdF9uZXRfc29ja2V0YC4gQW5kLCBoZXksIHRoZXJlJiMzOTtzIHNvbWUgZXZpZGVuY2Ugb2YgYG1kaW9gIGJ1cyBmdXp6aW5nIGluIHRoZSBjb2RlYmFzZSwgYnV0IG5vdGhpbmcgZXhwbGljaXQuCgpBbHJpZ2h0LCB3aGF0IGFib3V0IGNyZWF0aW5nIGEgc2NlbmFyaW8gd2hlcmUgb25lIGdldHMgY3JlYXRlZD8gSSBrbm93IGBkYXA4MjExcl9wcm9iZWAgZ2V0cyBjYWxsZWQgZHVyaW5nIGEgUEhZIGRldmljZSByZWdpc3RyYXRpb24uIE5vdyB0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSAqZm9yY2UqIGEgUEhZIGRldmljZSByZWdpc3RyYXRpb24gZnJvbSB1c2Vyc3BhY2U/IE5vcGUsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBpc24mIzM5O3QgZXhwb3NlZC4KCk9rYXksIGJhY2sgdG8gdGhlIGRyYXdpbmcgYm9hcmQuIElzIHRoZXJlIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSB0aGF0ICptaWdodCogcmVnaXN0ZXIgYSBQSFk/IFRoaW5raW5nIGFib3V0IGBtYWNiYCwgYHhnYmVgLCBgaG5zYCwgYG5ldHNlY2AsIGFuZCBgZml4ZWRfcGh5YC4gQnV0LCB3YWl0LCBgZml4ZWRfcGh5YCBkZWZpbml0ZWx5IGNhbiYjMzk7dCBiZSByZWdpc3RlcmVkIGZyb20gdXNlcnNwYWNlLiBUaGVuIHdoYXQgYWJvdXQgRFNBPyBJIHJlY2FsbCB0aGF0IERTQSBjYW4gYmUgY29uZmlndXJlZCB2aWEgbmV0bGluayBvciBzeXNmcywgYnV0IHVwb24gZnVydGhlciByZWZsZWN0aW9uLCBpdCBpcyBjb25maWd1cmVkIHZpYSBkZXZpY2UgdHJlZS4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2ssIHN5emthbGxlciBoYXMgYHN5el91c2JfY29ubmVjdGAuIENvdWxkIGEgVVNCIG5ldHdvcmsgYWRhcHRlciBnZXQgdXMgdGhlcmU/IEFyZSB0aGVyZSBhbnkgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIHRoYXQgdXNlIE1ESU8gYW5kIGNhbiBwcm9iZSBhcmJpdHJhcnkgUEhZcz8gWWVzISBJdCBhcHBlYXJzIHRoYXQgZHJpdmVycyBsaWtlIGBkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jYCwgYHNtc2M5NXh4LmNgLCBgYXNpeGAsIG9yIGBjZGNfZXRoZXJgIGNvdWxkIGJlIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlIGlmIGFueSBvZiB0aGVzZSBVU0IgbmV0d29yayBkcml2ZXJzIHJlZ2lzdGVyIGFuZCBzY2FuIGFuIE1ESU8gYnVzLiBUaGlzIGZlZWxzIGxpa2UgdGhlIG1vc3QgcHJvbWlzaW5nIGFuZ2xlIGF0IHRoZSBtb21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMjcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdD0zNDg9TURJT1xuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTAtICBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZSgpXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q6MzUxOiAgZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKClcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTI6ICBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoKVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1My1cbi0tXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdD0xMj1kZXZpY2UgKHRoZSBzYW1lIG9iamVjdHMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB2aWFcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0OjEzOmBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KClgYCkuIE1BQy1zaWRlIGNvbm5lY3Rpb24gcHJvcGVydGllcyBzdWNoIGFzXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdC0xNC1gYHBoeS1oYW5kbGVgYCBhbmQgYGBwaHktbW9kZWBgIGFyZSBkb2N1bWVudGVkIGluIFthY3BpLW1kaW8tcGh5XV8uXG4tLVxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0PTc9VGhlIFBIWXMgb24gYW4gTURJTyBidXMgW3BoeV0gYXJlIHByb2JlZCBhbmQgcmVnaXN0ZXJlZCB1c2luZ1xuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0Ojg6Zndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KCkuXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3QtOS1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD00MD1yZWdpc3RlcmVkIGFzIGEgZGlzdGluY3QgZGV2aWNlLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTU2LSAgIGRyaXZlciBuZWVkcywgc2V0dXAgdGhlIG1paV9idXMgc3RydWN0dXJlLCBhbmQgcmVnaXN0ZXIgd2l0aCB0aGUgUEFMIHVzaW5nXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo1NzogICBtZGlvYnVzX3JlZ2lzdGVyLiAgU2ltaWxhcmx5LCB0aGVyZSYjMzk7cyBhIHJlbW92ZSBmdW5jdGlvbiB0byB1bmRvIGFsbCBvZlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTgtICAgdGhhdCAodXNlIG1kaW9idXNfdW5yZWdpc3RlcikuXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYz0xMDk9c3RhdGljIGludCBlcDgyNDhlX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzItXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jOjEzMzpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzNC1cdGlmIChyZXQpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM9MjA3PXN0YXRpYyBpbnQgZ3Bpb19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jOjI0NDpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4My1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0Olx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9MTg3PXN0YXRpYyBpbnQgZ3N3aXBfbWRpbyhzdHJ1Y3QgZ3N3aXBfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTMtXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzoyMTQ6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0MjpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yMzIxPWludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTItXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMzkzOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz02ODU9c3RhdGljIGludCBsYW45Mzd4X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1NS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6NzU2Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjM3MT1tdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0MDYtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjQwNzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDA4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM4MzQ9c3RhdGljIGludCBtdjg4ZTZ4eHhfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM4ODg6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTItXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjk0LVx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MTQ5PXN0YXRpYyBpbnQgbmV0Y19wb3J0X2NyZWF0ZV9lbWRpb19idXMoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTc5LVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6MTgwOlx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE4MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9OTU3PXN0YXRpYyBpbnQgdnNjOTk1OV9tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTAxNDpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxNS1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM9ODc4PXN0YXRpYyBpbnQgdnNjOTk1M19tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDMtXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0Olx0cmMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDUtXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODMtXHRvZl9ub2RlX3B1dChtbnApO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTk0Nz1xY2E4a19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4Ni1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk4NzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTk5LVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQzLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0Olx0cmV0dXJuIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDUtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0zMDc9dm9pZCBzamExMTA1X2ZyYW1lX21lbW9yeV9wYXJ0aXRpb25pbmcoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg6MzEwOmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMTEtdm9pZCBzamExMTA1X21kaW9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTMwMjY9c3RhdGljIGludCBzamExMTA1X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MzA2ODpcdHJjID0gc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0yNTg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90eF9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjI4ODpcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQzLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0Olx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQ1LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5NS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM5NjpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk3LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9NDM5PXN0YXRpYyB2b2lkIHNqYTExMDVfbWRpb2J1c19wY3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQ1OTppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ2MC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTU5NT15dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTItXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NjEzOlx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTQtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz03MjY9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNzQzLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjc0NDpcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNzQ1LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYz00NTk9c3RhdGljIGludCBheF9taWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jOjQ3OTpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXgtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00ODAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYz0xMzIxPXN0YXRpYyBpbnQgb3dsX2VtYWNfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM6MTM0NjpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM9NTA5PXN0YXRpYyBpbnQgYWRpbjExMTBfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3QgYWRpbjExMTBfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYzo1MzA6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUzMS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYz0xMjkwPXN0YXRpYyBpbnQgZ3JldGhfbWRpb19pbml0KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jOjEzMDc6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGdyZXRoLVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTM5MzE9c3RhdGljIGludCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYzo0MDI3Olx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI4LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jPTEyMT1zdGF0aWMgaW50IGFsdGVyYV90c2VfbWRpb19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6MTU4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1OS1cdGlmIChyZXQgIT0gMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9MTA2MT1zdGF0aWMgaW50IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM6MTIyMjpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXVwLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9MzQyOD1zdGF0aWMgaW50IHhnYmVfcGh5X2luaXQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxNy1cdHNucHJpbnRmKG1paS1cdTAwM2VpZCwgc2l6ZW9mKG1paS1cdTAwM2VpZCksIFwmIzM0OyVzXCYjMzQ7LCBkZXZfbmFtZShwZGF0YS1cdTAwM2VkZXYpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcxODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxOS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcyMDpcdFx0ZGV2X2VycihwZGF0YS1cdTAwM2VkZXYsIFwmIzM0O21kaW9idXNfcmVnaXN0ZXIgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcyMS1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jPTk4PWludCB4Z2VfbWRpb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMTgtXHRtZGlvX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4MTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM6MTE5Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTEyMC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz04Mzc9aW50IHhnZW5lX2VuZXRfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjg4ODpzdGF0aWMgaW50IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODktXHRcdFx0XHQgIHN0cnVjdCBtaWlfYnVzICptZGlvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTEyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MTM6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxNC1cdFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjEtXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTIyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTkzOT1pbnQgeGdlbmVfZW5ldF9tZGlvX2NvbmZpZyhzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjk1ODpcdHJldCA9IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIocGRhdGEsIG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYz0xMzE9aW50IGFyY19tZGlvX3Byb2JlKHN0cnVjdCBhcmNfZW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM6MTczOlx0ZXJyb3IgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbWRpb19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzQtXHRvZl9ub2RlX3B1dChtZGlvX25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jPTk2Nj1zdGF0aWMgaW50IGF4ODg3OTZjX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jOjEwMTE6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpLVx1MDAzZWRldiwgYXhfbG9jYWwtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEyLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM9Njg3PXN0YXRpYyBpbnQgYWc3MXh4X21kaW9fcHJvYmUoc3RydWN0IGFnNzF4eCAqYWcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjctXHRtbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjcyODpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyOS1cdG9mX25vZGVfcHV0KG1ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjYwOlx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNjEtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9MTcxMz1zdGF0aWMgaW50IGJjbV9lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjE4MzA6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MzEtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYz0yMTE9c3RydWN0IG1paV9idXMgKmJjbWFfbWRpb19taWlfcmVnaXN0ZXIoc3RydWN0IGJnbWFjICpiZ21hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYzoyMzY6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNy1cdG9mX25vZGVfcHV0KG5wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz0xOTM9aW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBpbml0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzMy1cdFx0cGh5X25hbWUgPSBcJiMzNDtleHRlcm5hbCBSdk1JSVwmIzM0OztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjIzNDpcdFx0Lyogb2ZfbWRpb2J1c19yZWdpc3RlciB0b29rIGNhcmUgb2YgcmVhZGluZyB0aGUgJiMzOTttYXgtc3BlZWQmIzM5O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjM1LVx0XHQgKiBQSFkgcHJvcGVydHkgZm9yIHVzLCBlZmZlY3RpdmVseSBsaW1pdGluZyB0aGUgUEhZIHN1cHBvcnRlZFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYz0yMTU3PXN0YXRpYyBpbnQgc2JtYWNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldiwgbG9uZyBsb25nIGJhc2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjctXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMjI4Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihzYy1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE1MDU9c3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNTU4Olx0aSA9IG1kaW9idXNfcmVnaXN0ZXIodHAtXHUwMDNlbWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1OS1cdGlmIChpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwOTc6c3RhdGljIGludCBtYWNiX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1hY2IgKmJwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNC1cdGlmIChtZGlvX25wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTA1Olx0XHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMTk6XHRcdFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIwLVx0XHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMjI6XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTI1PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTU5Olx0ZXJyID0gbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKGJwLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE2MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYz0xMTA3PXN0YXRpYyBpbnQgZG05MDUxX21kaW9fcmVnaXN0ZXIoc3RydWN0IGJvYXJkX2luZm8gKmRiKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM6MTEyNTpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZzcGktXHUwMDNlZGV2LCBkYi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTI0MjM9c3RhdGljIGludCB0c25lcF9tZGlvX2luaXQoc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6MjQ1NTpcdHJldHZhbCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cdTAwM2VtZGlvYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jPTEwMjQ9c3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM6MTIwODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwOS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3MzQ9c3RhdGljIGludCBmdGdtYWMxMDBfc2V0dXBfbWRpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc3MDpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgcHJpdi1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc3MS1cdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jPTM2PXN0YXRpYyBpbnQgZW5ldGNfcGNpX21kaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYzo5MTpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBkZXYtXHUwMDNlb2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTE2MD1zdGF0aWMgaW50IGVuZXRjX21kaW9fcHJvYmUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMTg2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjE4NzpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMTg4LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MjAyPXN0YXRpYyBpbnQgZW5ldGNfaW1kaW9fY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTIzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzoyMzc6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjM4LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTMwNDI9c3RhdGljIGludCBmZWNfZW5ldF9taWlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMTYxOlx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihmZXAtXHUwMDNlbWlpX2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM9NjU9c3RhdGljIGludCBtcGM1Mnh4X2ZlY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM6MTA2Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDctXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM9MTQ5PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoxNzY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM9OTc9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYzoxNjc6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTQwOT1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6NDk0Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTUtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYz0zNzE9c3RhdGljIGludCB4Z21hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjYtXHRpZiAoaXNfb2Zfbm9kZShmd25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjc6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCB0b19vZl9ub2RlKGZ3bm9kZSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjgtXHRlbHNlIGlmIChpc19hY3BpX25vZGUoZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI5Olx0XHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBmd25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MzAtXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyOTI6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jPTEwOTQ9c3RhdGljIGludCBoaXg1aGQyX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jOjExODY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0xMjM9aW50IGhjbGdlX21hY19tZGlvX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU0LVx0bWRpb19idXMtXHUwMDNlcGh5X21hc2sgPSB+KDFVIFx1MDAzY1x1MDAzYyBtYWMtXHUwMDNlcGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYzoxNTU6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU2LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jPTQ5NT1zdGF0aWMgaW50IGhuc19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTg0Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTg1LVx0fSBlbHNlIGlmIChpc19hY3BpX25vZGUocGRldi1cdTAwM2VkZXYuZndub2RlKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5Mi1cdFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1OTM6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTQtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYz0yNTYwPXN0YXRpYyBpbnQgZW1hY19kdF9tZGlvX3Byb2JlKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODQtXHRzbnByaW50ZihidXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7JXNcJiMzNDssIGRldi1cdTAwM2VvZmRldi1cdTAwM2VuYW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYzoyNTg1Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNmRldi1cdTAwM2VvZmRldi1cdTAwM2VkZXYsIGJ1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg2LVx0aWYgKHJlcykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTEwMjY9aW50IGl4Z2JlX21paV9idXNfaW5pdChzdHJ1Y3QgaXhnYmVfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwODgtXHRhZGFwdGVyLVx1MDAzZW1paV9idXMgPSBidXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoxMDg5Olx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwOTAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM9Mzg1PWx0cV9ldG9wX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDAyLVx0XHQgcHJpdi1cdTAwM2VwZGV2LVx1MDAzZW5hbWUsIHByaXYtXHUwMDNlcGRldi1cdTAwM2VpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjQwMzpcdGlmIChtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWlpX2J1cykpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDA0LVx0XHRlcnIgPSAtRU5YSU87XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYz0yODM9c3RhdGljIGludCBvcmlvbl9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODEtXHQvKiBGb3IgdGhlIHBsYXRmb3JtcyBub3Qgc3VwcG9ydGluZyBEVC9BQ1BJIGZhbGwtYmFja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODI6XHQgKiB0byBtZGlvYnVzX3JlZ2lzdGVyIHZpYSBvZl9tZGlvYnVzX3JlZ2lzdGVyLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODMtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg0LVx0aWYgKGlzX2FjcGlfbm9kZShwZGV2LVx1MDAzZWRldi5md25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODU6XHRcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4Ni1cdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg3Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4OC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYz0xMzg3PXN0YXRpYyBpbnQgcHhhMTY4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDQtXHRwZXAtXHUwMDNlc21pX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4ZmZmZmZmZmY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYzoxNTA1Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihwZXAtXHUwMDNlc21pX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA2LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTk5OD1zdGF0aWMgaW50IG10a19tZGlvX2luaXQoc3RydWN0IG10a19ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzctXHRkZXZfZGJnKGV0aC1cdTAwM2VkZXYsIFwmIzM0O01EQyBpcyBydW5uaW5nIG9uICVkIEh6XFxuXCYjMzQ7LCBNRENfTUFYX0ZSRVEgLyBldGgtXHUwMDNlbWRjX2RpdmlkZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzoxMDM4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihldGgtXHUwMDNlbWlpX2J1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMTAzOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM9MTQyMj1zdGF0aWMgaW50IG10a19zdGFyX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzoxNDQ4Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cdTAwM2VtaWksIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jPTI4Nz1pbnQgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBtbHhiZl9naWdlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmMtMzMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYzozMzM6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM9MjUzPWludCBmYm5pY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmMtMjcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM6MjczOlx0ZXJyID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGZiZC1cdTAwM2VkZXYsIGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYy0yNzQtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYz0xMDM2PXN0YXRpYyBpbnQga3M4ODUxX3JlZ2lzdGVyX21kaW9idXMoc3RydWN0IGtzODg1MV9uZXQgKmtzLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDUzOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA1NC1cdGlmIChyZXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jOjEwNTU6XHRcdGdvdG8gZXJyX21kaW9idXNfcmVnaXN0ZXI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDYwLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjQ0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBNRElPIEJ1cyBEcml2ZXIgTGFuZHNjYXBlKioKCk9rYXksIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IGEgZmV3IE1ESU8gYnVzLXJlbGF0ZWQgZnVuY3Rpb25zIOKAkyBgZmJuaWNfbWRpb2J1c19jcmVhdGVgLCBgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlYCwgYG10a19zdGFyX21kaW9faW5pdGAsIGFuZCBzbyBvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBjYW4gd2UgYnVpbGQgYW4gTURJTyBidXMgZHJpdmVyIGZyb20gdXNlciBzcGFjZT8gVGhpcyBpcyBhIHF1ZXN0aW9uIEkgb2Z0ZW4gY29uc2lkZXIgd2hlbiByZXZpZXdpbmcgZHJpdmVyIGFyY2hpdGVjdHVyZXMgZm9yIGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWwgb2ZmbG9hZGluZy4KClRoZSBkaXJlY3Rpb24gSSYjMzk7bSB0YWtpbmcgaXMgZ3VpZGVkIGJ5IHRoZSBkZXNpcmUgdG8gaWRlbnRpZnkgYSBkcml2ZXIgdG8gbG9vayBpbnRvIHRvIHNhdGlzZnkgdGhhdCBjb25jZXJuLiBJIHJlY2FsbCBzZWVpbmcgYGRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmNgIHV0aWxpemUgYG1kaW9idXNfcmVnaXN0ZXJgLCB3aGljaCBpbXBsaWVzIGl0IGlzIGEgYnVzIGl0c2VsZiwgYW5kIG5vdCBhIGRldmljZS4gQmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCBpdCYjMzk7cyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIGRlbHZlIGludG8gYGxhbjc4eHguY2AgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGl0IGNhbiBvZmZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY2OT1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY4NzpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02ODgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9NjE9c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc5LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6ODA6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy04MS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwOTE9c3RhdGljIGludCBsYW43OHh4X21kaW9faW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjEtXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O21kaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIyOlx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlbWRpb2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjMtXHRvZl9ub2RlX3B1dChub2RlKTtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihwZGF0YS1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDMtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTEwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGBkYXA4MjExcl9wcm9iZWAgVGhyb3VnaCBVU0IgRnV6emluZzogQSBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGFuZCBpdCBsb29rcyBsaWtlIGBzbXNjOTV4eGAsIGBsYW43OHh4YCwgYGF4ODgxNzJhYCwgYW5kIGBhc2l4X2RldmljZXNgIGFsbCByZWdpc3RlciBhbiBNRElPIGJ1cy4gVGhhdCYjMzk7cyBrZXkuIFdoZW4gdGhleSBkbywgYG1kaW9idXNfcmVnaXN0ZXJgIHNjYW5zIGl0LiBOb3csIGlmIHdlIGNhbiBlbXVsYXRlIGEgVVNCIGRldmljZSwgYW5kIGBzeXprYWxsZXJgICpjYW4qIGRvIHRoYXQgdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLCB3ZSBjYW4gZmVlZCBpdCBhcmJpdHJhcnkgcmVzcG9uc2VzIHRvIE1ESU8gcmVhZHMuCgpIZXJlJiMzOTtzIHRoZSB0cmljazogSWYgdGhlIFVTQiBkZXZpY2UgcmVzcG9uZHMgdG8gYW4gTURJTyByZWFkIG9uIGFkZHJlc3MgWCB3aXRoIHRoZSBQSFkgSUQgb2YgREFQODIxMVIgKHRoYXQmIzM5O3MgYDB4MDAwODAxMUJgKSwgYG1kaW9idXNfc2NhbmAgd2lsbCBwaWNrIGl0IHVwLCBhbGxvY2F0ZSBhIGBwaHlfZGV2aWNlYCwgYW5kIHJlZ2lzdGVyIGl0LiBUaGVuLCB0aGUgZHJpdmVyIGNvcmUgd2lsbCBtYXRjaCB0aGF0IFBIWSBJRCBhbmQgcHJvYmUgdGhlIGBkYXA4MjExcl9kcml2ZXJgLiBUaGVyZWZvcmUsIGBkYXA4MjExcl9wcm9iZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB2aWEgVVNCIGZ1enppbmchCgpXYWl0LCB0aG91Z2gsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYERBUDgyMTFSX1BIWWAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gQWgsIHRoZSBwYXRjaCAqYWRkcyogYGNvbmZpZyBEQVA4MjExUl9QSFlgLiBUaGF0JiMzOTtzIGl0ISBXZSBuZWVkIHRvIGVuYWJsZSBpdCwgc28sIGBFbmFibGVDb25maWdzOiBbJiMzNDtEQVA4MjExUl9QSFkmIzM0O11gLiBHb3QgaXQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkcml2ZXIgY29kZSBhbmQgc2VlIHdoYXQgZnVuY3Rpb25zIHdlIHNob3VsZCBmb2N1cyBvbi4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgd2UgaGF2ZSBgZGFwODIxMXJfcHJvYmVgLCBgZGFwODIxMXJfcmVtb3ZlYCwgYGRhcDgyMTFyX2NvbmZpZ19pbml0YCwgYGluZm9fc2hvd2AsIGBwa2dfZ2VuX3Nob3dgLCBhbmQgYHBrZ19nZW5fd3JpdGVgLgoKV2FpdCwgdGhvc2UgYGluZm9fc2hvd2AsIGBwa2dfZ2VuX3Nob3dgLCBgcGtnX2dlbl93cml0ZWAgZnVuY3Rpb25zIGFyZSBkZWJ1Z2ZzIG9wZXJhdGlvbnMuIEFyZSB0aG9zZSByZWFjaGFibGUgYnkgYHN5emthbGxlcmA/IFllcywgdGhleSBhcmUuIGBzeXprYWxsZXJgIGNhbiBvcGVuIGFuZCByZWFkL3dyaXRlIGRlYnVnZnMgZmlsZXMgaWYgaXQga25vd3MgdGhlIHBhdGhzLiBUaGUgcGF0aHMgd291bGQgYmUgc29tZXRoaW5nIGxpa2UgYC9zeXMva2VybmVsL2RlYnVnLyZsdDtkZXZfbmFtZSZndDsvaW5mb2Agb3IgYC9zeXMva2VybmVsL2RlYnVnL3BrZ19nZW5gLiBUaGUgYGRldl9uYW1lYCB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBQSFkgZGV2aWNlLCBsaWtlIGBtZGlvLWJ1czowMWAuIFRoYXQmIzM5O3MgZ3JlYXQsIGBzeXprYWxsZXJgICpjYW4qIGZ1enogZGVidWdmcyEKCkxldCYjMzk7cyBkaXZlIGRlZXBlciBpbnRvIGBkYXA4MjExcl9jb25maWdfaW5pdGAuIEl0IHJlYWRzIHByb3BlcnRpZXMgZnJvbSB0aGUgZGV2aWNlIHRyZWU6IGByeC1pbnRlcm5hbC1kZWxheS1wc2AsIGB0eC1pbnRlcm5hbC1kZWxheS1wc2AsIGFuZCBgdHgtdXNlLWludmVydGVkLWNsa2AuIEhlcmUmIzM5O3MgdGhlIGNhdGNoOiBzaW5jZSB3ZSYjMzk7cmUgaW5zdGFudGlhdGluZyB0aGlzIHZpYSBVU0IgTURJTyBzY2FuLCB0aGVyZSYjMzk7cyBubyBkZXZpY2UgdHJlZSBub2RlIGZvciB0aGUgUEhZIOKAkyB1bmxlc3Mgd2UgdXNlIERUIG92ZXJsYXlzLCB3aGljaCBgc3l6a2FsbGVyYCBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgdG91Y2guIElmIHRoZXJlJiMzOTtzIG5vIERUIG5vZGUsIGBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGVgIHdpbGwgYmUgTlVMTC4gVGh1cywgYG9mX3Byb3BlcnR5X3JlYWRfdTMyYCB3aWxsIHJldHVybiBhbiBlcnJvciwgYW5kIGl0IHdpbGwganVzdCB1c2UgdGhlIGRlZmF1bHQgZGVsYXkgYERBUDgyMTFSX0RFRkFVTFRfREVMQVlfUFNgLiBUaGUgc2FtZSBhcHBsaWVzIGZvciBgb2ZfcHJvcGVydHlfcmVhZF9ib29sYCwgd2hpY2ggcmV0dXJucyBmYWxzZS4gVGhpcyBtZWFucyBgZGFwODIxMXJfY29uZmlnX2luaXRgIHdpbGwgc3RpbGwgZXhlY3V0ZSBhbmQgY29uZmlndXJlIHRoZSBQSFksIGJ1dCB3aXRoIGRlZmF1bHQgdmFsdWVzLgoKTm93IGxldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZG8gd2l0aCBgcGtnX2dlbl93cml0ZWAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5hcmd1bWVudCAmIzM0O0ZpcnN0TGluZSYjMzQ7IGhhcyB3cm9uZyB0eXBlOiBnb3Qgc3RyaW5nLCB3YW50IGludDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6ICYjMzQ7MzMwJiMzNDssCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogJiMzNDsxMDAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDthcmd1bWVudCBcJiMzNDtGaXJzdExpbmVcJiMzNDsgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTY1MgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqVGhlIERlYnVnZ2luZyBEYW5jZTogQSBNb21lbnQgb2YgQ2xhcml0eSoqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IHRoYXQgZXJyb3IgbWVzc2FnZSBhZ2FpbiwgYW5kIGl0IGZpbmFsbHkgY2xpY2tlZC4gT2YgY291cnNlISBJJiMzOTttIHN1Y2ggYSBmb29sIHNvbWV0aW1lcy4gSSB3YXMgc28gZm9jdXNlZCBvbiB0aGUgbG9naWMgb2YgdGhlIGFsZ29yaXRobSB0aGF0IEkgY29tcGxldGVseSBtaXNzZWQgdGhlIHR5cGUgbWlzbWF0Y2guIEkgcGFzc2VkIGEgc3RyaW5nLCBhIHBlcmZlY3RseSB2YWxpZCBzdHJpbmcgYXQgdGhhdCwgYXMgdGhlIGlucHV0IGZvciBgRmlyc3RMaW5lYC4gQnV0IGl0IGV4cGVjdHMgYW4gaW50ZWdlciwgb2J2aW91c2x5LiBUaGUgY29kZSYjMzk7cyBnb2luZyB0byBjaG9rZSBpZiBJIHRyeSB0byBmZWVkIGl0IHRoZSB3cm9uZyBkYXRhIHR5cGUuIFRoaXMgaXMgYmFzaWMsIGFsbW9zdCBlbWJhcnJhc3NpbmcuIEJ1dCBJJiMzOTttIGdsYWQgSSBjYXVnaHQgaXQgZWFybHkuIE5vdyB0byBmaXggdGhhdCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdC8qKlxuIDMzMTpcdCAqIHBrZ19nZW5fc2hvdygpIC0gU2hvdyBwYWNrZXQgZ2VuZXJhdG9yIHN0YXR1c1xuIDMzMjpcdCAqIEBzZjogU2VxdWVuY2UgZmlsZSBzdHJ1Y3R1cmVcbiAzMzM6XHQgKiBAZGF0YTogUHJpdmF0ZSBkYXRhIChzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqKVxuIDMzNDpcdCAqXG4gMzM1Olx0ICogRGlzcGxheXMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yLFxuIDMzNjpcdCAqIGluY2x1ZGluZyBDUkMgY29ycnVwdGlvbiBhbmQgbG9vcGJhY2sgc2V0dGluZ3MuXG4gMzM3Olx0ICpcbiAzMzg6XHQgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuIDMzOTpcdCAqL1xuIDM0MDpcdHN0YXRpYyBpbnQgcGtnX2dlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKmRhdGEpXG4gMzQxOlx0e1xuIDM0MjpcdFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cdTAwM2Vwcml2YXRlO1xuIDM0MzpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cdTAwM2VkZXYpO1xuIDM0NDpcdFx0aW50IHZhbDtcbiAzNDU6XHRcbiAzNDY6XHRcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUpO1xuIDM0NzpcdFx0aWYgKHZhbCBcdTAwM2MgMClcbiAzNDg6XHRcdFx0cmV0dXJuIHZhbDtcbiAzNDk6XHRcbiAzNTA6XHRcdHNlcV9wdXRzKHNmLCBcJiMzNDtQYWNrYWdlIEdlbmVyYXRpbmc6IFwmIzM0Oyk7XG4gMzUxOlx0XHRpZiAoRklFTERfR0VUKERBUDgyMTFSX1BLR19HRU5fRU4sIHZhbCkgXHUwMDI2XHUwMDI2XG4gMzUyOlx0XHQgICAgRklFTERfR0VUKERBUDgyMTFSX1BLR19DSEtfRU4sIHZhbCkpXG4gMzUzOlx0XHRcdHNlcV9wdXRzKHNmLCBcJiMzNDtlbmFibGVkXFxuXCYjMzQ7KTtcbiAzNTQ6XHRcdGVsc2VcbiAzNTU6XHRcdFx0c2VxX3B1dHMoc2YsIFwmIzM0O2Rpc2FibGVkXFxuXCYjMzQ7KTtcbiAzNTY6XHRcbiAzNTc6XHRcdHNlcV9wcmludGYoc2YsIFwmIzM0O0NSQyBjb3JydXB0aW9uIGVuOiAlc1xcblwmIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1BLR19DT1JfQ1JDLCB2YWwpID9cbiAzNTg6XHRcdFx0ICAgXCYjMzQ7ZW5hYmxlZFwmIzM0OyA6IFwmIzM0O2Rpc2FibGVkXCYjMzQ7KTtcbiAzNTk6XHRcbiAzNjA6XHRcdHZhbCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuIDM2MTpcdFx0aWYgKHZhbCBcdTAwM2MgMClcbiAzNjI6XHRcdFx0cmV0dXJuIHZhbDtcbiAzNjM6XHRcbiAzNjQ6XHRcdHNlcV9wcmludGYoc2YsIFwmIzM0O0xvb3BiYWNrIGVuOiAlc1xcblwmIzM0OywgRklFTERfR0VUKEJNQ1JfTE9PUEJBQ0ssIHZhbCkgP1xuIDM2NTpcdFx0XHQgICBcJiMzNDtlbmFibGVkXCYjMzQ7IDogXCYjMzQ7ZGlzYWJsZWRcJiMzNDspO1xuIDM2NjpcdFx0cmV0dXJuIDA7XG4gMzY3Olx0fVxuIDM2ODpcdFxuIDM2OTpcdC8qKlxuIDM3MDpcdCAqIHBrZ19nZW5fd3JpdGUoKSAtIEVuYWJsZS9kaXNhYmxlIHBhY2tldCBnZW5lcmF0b3JcbiAzNzE6XHQgKiBAZmlsZTogRmlsZSBzdHJ1Y3R1cmVcbiAzNzI6XHQgKiBAdXNlcl9idWY6IFVzZXIgc3BhY2UgYnVmZmVyXG4gMzczOlx0ICogQGNvdW50OiBCdWZmZXIgc2l6ZVxuIDM3NDpcdCAqIEBwcG9zOiBGaWxlIHBvc2l0aW9uXG4gMzc1Olx0ICpcbiAzNzY6XHQgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yLlxuIDM3NzpcdCAqIEFsc28gY29udHJvbHMgbG9vcGJhY2sgYW5kIENSQyBjb3JydXB0aW9uIHZpYSBkZWJ1Z2ZzIGZsYWdzLlxuIDM3ODpcdCAqXG4gMzc5Olx0ICogTk9URTogV2UgaW50ZW50aW9uYWxseSBkbyBub3QgdXNlIGdlbnBoeV9sb29wYmFjaygpIGhlcmUuXG4gMzgwOlx0ICogZ2VucGh5X2xvb3BiYWNrKCkgZG9lcyBhIGZ1bGwgQk1DUiBvdmVyd3JpdGUgKG1hc2sgPSB+MCkgYW5kXG4gMzgxOlx0ICogd2FpdHMgdXAgdG8gNTAwIG1zIGZvciBsaW5rIGluIGxvb3BiYWNrIG1vZGUuIFRoaXMgaXMgdG9vXG4gMzgyOlx0ICogaGVhdnkgZm9yIGEgZGlhZ25vc3RpYyBwYWNrZXQgZ2VuZXJhdG9yOlxuIDM4MzpcdCAqXG4gMzg0Olx0ICogLSBJdCBkZXN0cm95cyBhbGwgb3RoZXIgQk1DUiBzdGF0ZSAoc3BlZWQsIGR1cGxleCwgQU4gY29uZmlnKS5cbiAzODU6XHQgKiAtIFRoZSA1MDAgbXMgbGluayBwb2xsIGlzIHVubmVjZXNzYXJ5OiB3ZSBhbHJlYWR5IGhhdmUgYSBsaW5rXG4gMzg2Olx0ICogICBvciBhcmUgZGVsaWJlcmF0ZWx5IHNldHRpbmcgdXAgYSB0ZXN0IGNvbmRpdGlvbi5cbiAzODc6XHQgKiAtIFdlIHdhbnQgdG8gbWluaW1pemUgY2hhbmdlcyB0byBCTUNSIGR1cmluZyBkZWJ1Z2dpbmcuXG4gMzg4Olx0ICpcbiAzODk6XHQgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyB3cml0dGVuIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiAzOTA6XHQgKi9cbiAzOTE6XHRzdGF0aWMgc3NpemVfdCBwa2dfZ2VuX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIDM5MjpcdFx0XHRcdCAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuIDM5MzpcdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gMzk0Olx0e1xuIDM5NTpcdFx0c3RydWN0IHNlcV9maWxlICpzZiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDM5NjpcdFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cdTAwM2Vwcml2YXRlO1xuIDM5NzpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cdTAwM2VkZXYpO1xuIDM5ODpcdFx0Ym9vbCBlbjtcbiAzOTk6XHRcdHUxNiBtYXNrLCBzZXQsIHNldF9ibWNyO1xuIDQwMDpcdFx0aW50IHJldDtcbiA0MDE6XHRcbiA0MDI6XHRcdHJldCA9IGtzdHJ0b2Jvb2xfZnJvbV91c2VyKHVzZXJfYnVmLCBjb3VudCwgXHUwMDI2ZW4pO1xuIDQwMzpcdFx0aWYgKHJldClcbiA0MDQ6XHRcdFx0cmV0dXJuIHJldDtcbiA0MDU6XHRcbiA0MDY6XHRcdGlmIChlbikge1xuIDQwNzpcdFx0XHRzZXQgPSBEQVA4MjExUl9QS0dfR0VOX0VOIHwgREFQODIxMVJfUEtHX0NIS19FTiB8IERBUDgyMTFSX1BLR19QTF81QUE1O1xuIDQwODpcdFxuIDQwOTpcdFx0XHRpZiAocHJpdi1cdTAwM2VjcmNfY29yKVxuIDQxMDpcdFx0XHRcdHNldCB8PSBEQVA4MjExUl9QS0dfQ09SX0NSQztcbiA0MTE6XHRcbiA0MTI6XHRcdFx0aWYgKHByaXYtXHUwMDNlbG9vcGJhY2spXG4gNDEzOlx0XHRcdFx0c2V0X2JtY3IgPSBCTUNSX0xPT1BCQUNLO1xuIDQxNDpcdFx0XHRlbHNlXG4gNDE1Olx0XHRcdFx0c2V0X2JtY3IgPSBCTUNSX0FORU5BQkxFO1xuIDQxNjpcdFx0fSBlbHNlIHtcbiA0MTc6XHRcdFx0c2V0ID0gREFQODIxMVJfUEtHX0dFTl9NT0RFIHwgREFQODIxMVJfUEtHX0dBVEVfRU47XG4gNDE4Olx0XHRcdHNldF9ibWNyID0gQk1DUl9BTkVOQUJMRTtcbiA0MTk6XHRcdH1cbiA0MjA6XHRcbiA0MjE6XHRcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9MT09QQkFDSyB8IEJNQ1JfQU5FTkFCTEUsIHNldF9ibWNyKTtcbiA0MjI6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNDIzOlx0XHRcdHJldHVybiByZXQ7XG4gNDI0Olx0XG4gNDI1Olx0XHRtYXNrID0gREFQODIxMVJfUEtHX0dFTl9NQVNLIHwgREFQODIxMVJfUEtHX1BMX01BU0sgfCBEQVA4MjExUl9QS0dfQ09SX0NSQztcbiA0MjY6XHRcdHJldCA9IGRhcDgyMTFyX21vZGlmeV9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSwgbWFzaywgc2V0KTtcbiA0Mjc6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiA0Mjg6XHRcdFx0cGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLLCAwKTtcbiA0Mjk6XHRcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NDIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMDA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFQODIxMVIgUEhZIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIHRoZSBEQVA4MjExUiBQSFkgZHJpdmVyLCBrZWVwaW5nIGluIG1pbmQgdGhlIGNvbnRleHQgb2YgdXNpbmcgc3l6a2FsbGVyLgoKRmlyc3QsIEkgc2VlIHRoZSBkcml2ZXIgZXhwb3NlcyBhIGZldyBgZGVidWdmc2AgZmlsZXM6IGBpbmZvYCAocmVhZC1vbmx5KSwgYHBrZ19nZW5gIChyZWFkLXdyaXRlKSwgYW5kIGEgY291cGxlIG9mIGJvb2xzOiBgcGtnX2dlbl9jcmNfY29yYCwgYHBrZ19nZW5fbG9vcGJhY2tgLiBUaGVzZSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBieSBzeXprYWxsZXIgd2hpY2ggaXMgdmVyeSBjb252ZW5pZW50LgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgZmlndXJpbmcgb3V0IGhvdyB0aGUgY29yZSBQSFkgaW5pdGlhbGl6YXRpb24gaGFwcGVucy4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGlzIGBkYXA4MjExcl9jb25maWdfaW5pdGAuIEl0JiMzOTtzIGNhbGxlZCBieSBgcGh5X2luaXRfaHdgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgcGh5X2F0dGFjaF9kaXJlY3RgLiBgcGh5X2F0dGFjaF9kaXJlY3RgIGlzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgYXR0YWNoZXMgdG8gdGhlIFBIWS4gSWYgSSBjYW4gZ2V0IGEgVVNCIGV0aGVybmV0IGRldmljZSB0byBlbXVsYXRlIGEgUEhZIGNvbm5lY3Rpb24sIEkgY2FuIHRyaWdnZXIgYGRhcDgyMTFyX2NvbmZpZ19pbml0YC4gVGhhdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHBhdGgsIHNvIGl0JiMzOTtzIGRlZmluYXRlbHkgb24gdGhlIGxpc3QuCgpBbG9uZyB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiwgdGhlIGBwa2dfZ2VuX3dyaXRlYCBhbmQgYGluZm9fc2hvd2AgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIGBkZWJ1Z2ZzYC4gCgpJJiMzOTt2ZSBhbHNvIHNjYW5uZWQgdGhyb3VnaCB0aGUgY29kZSBmb3IgaGVscGVyIGZ1bmN0aW9ucywgdGhlcmUmIzM5O3MgYGRhcDgyMTFyX3JlYWRfZXh0YCwgYGRhcDgyMTFyX21vZGlmeV9leHRgLCBgZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsYCwgYW5kIGBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXlgLiBXaGlsZSBpbnRlcmVzdGluZywgdGhleSBhcmVuJiMzOTt0IHRoZSBwcmltYXJ5IHRhcmdldHMuCgpTbywgdGhlIGZvY3VzIHBvaW50cyBhcmU6CgoqICAgYGRhcDgyMTFyX2NvbmZpZ19pbml0YAoqICAgYHBrZ19nZW5fd3JpdGVgCiogICBgaW5mb19zaG93YAoqICAgYHBrZ19nZW5fc2hvd2AKCmBpbmZvX3Nob3dgIGFuZCBgcGtnX2dlbl9zaG93YCBhcHBlYXIgdG8gYmUgc2ltcGxlIHJlZ2lzdGVyIHJlYWRzIGFuZCBwcmludHMuIE5vdCBzdXBlciBjb21wbGV4LCBidXQgcGFydCBvZiB0aGUgZHJpdmVyJiMzOTtzIG9wZXJhdGlvbi4gYHBrZ19nZW5fd3JpdGVgIGlzIGRlZmluaXRlbHkgbW9yZSBpbnRlcmVzdGluZywgaXQmIzM5O3MgbW9kaWZ5aW5nIFBIWSByZWdpc3RlcnMuIFRoZW4gdGhlcmUgaXMgYGRhcDgyMTFyX2NvbmZpZ19pbml0YCwgdGhlIFBIWSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19EQVA4MjExUl9QSFlgIGlzIHRoZSBwcmltYXJ5IG9uZSwgb2YgY291cnNlLiBXYWl0LCBgQ09ORklHX0RFQlVHX0ZTYCBpcyBuZWVkZWQgZm9yIHRoZSBkZWJ1Z2ZzIGZpbGVzLiBUaGFua2Z1bGx5IHN5emthbGxlciBoYXMgYENPTkZJR19ERUJVR19GU2AgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyB0YWtlbiBjYXJlIG9mLgoKQSBkb3VibGUgY2hlY2sgb2YgdGhlIEtjb25maWcgcmV2ZWFscyBhIGRlcGVuZGVuY3kgb24gYE9GYCAoT3BlbiBGaXJtd2FyZSwgYWthIERldmljZSBUcmVlKS4gVGhhdCYjMzk7cyBhIGtleSBwb2ludC4gRG9lcyB0aGlzIG1lYW4gaXQmIzM5O3Mgc3RyaWN0bHkgYSBEZXZpY2UgVHJlZS1iYXNlZCBwcm9iZT8gTm8sIGJ1dCB0aGUgY29kZSBkb2VzIHVzZSBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIGFuZCBgb2ZfcHJvcGVydHlfcmVhZF9ib29sYCwgd2hpY2ggaGF2ZSBzdHVicyB3aGVuIE9GIGlzbiYjMzk7dCBlbmFibGVkLiBTaW5jZSBpdCBkZXBlbmRzIG9uIE9GLCB0aGV5IHdpbGwgYmUgYnVpbHQgb25seSBpZiBPRiBpcyBlbmFibGVkLiBJIGtub3cgc3l6a2FsbGVyIHRlc3RzIG9uIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcywgaW5jbHVkaW5nIHg4NlxfNjQgYW5kIGFybTY0LCBhbmQgb2Z0ZW4gYENPTkZJR19PRmAgaXMgZW5hYmxlZCAoZXNwZWNpYWxseSBvbiBhcm02NCBhbmQgc29tZXRpbWVzIG9uIHg4NlxfNjQgZm9yIHRlc3RpbmcpLgoKV2hhdCBhYm91dCB0aGUgRGV2aWNlIFRyZWUgZGVwZW5kZW5jeSBpbiBtb3JlIGRldGFpbD8gU2luY2UgdGhlIFBIWSBpcyBwcm9iZWQgdmlhIFVTQiBNRElPIHNjYW4sIHRoZXJlIHdvbiYjMzk7dCBiZSBhbiBgb2Zfbm9kZWAgYXR0YWNoZWQgdG8gYHBoeWRldi0mZ3Q7bWRpby5kZXZgLiBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAgZnVuY3Rpb25zIHdpbGwgcmV0dXJuIGAtRUlOVkFMYCBhbmQgdGhlIGRyaXZlciB3aWxsIHVzZSBkZWZhdWx0IHZhbHVlcy4gVGhpcyBpcyBmaW5lOyBpdCYjMzk7cyBqdXN0IGEgZGlmZmVyZW50IGNvZGVwYXRoLgoKQW55IG90aGVyIGNvbmZpZ3VyYXRpb25zPyBObyBgQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElOR2Agb3IgYENPTkZJR19NQUNTRUNgLgoKVGltZSB0byByZXZpZXcgdGhlIGZvY3VzIHBvaW50cyBhZ2FpbiwgdGFraW5nIGludG8gYWNjb3VudCBob3cgdGhlIGRyaXZlciBpcyBhY3R1YWxseSB1c2VkOgoKKiAgIGBkYXA4MjExcl9jb25maWdfaW5pdGAgKFBIWSBpbml0aWFsaXphdGlvbikuCiogICBgcGtnX2dlbl93cml0ZWAgKGRlYnVnZnMgYWNjZXNzIGZvciByZWdpc3RlciB3cml0ZXMpLgoqICAgYGRhcDgyMTFyX3Byb2JlYCAoZGV2aWNlIHByb2JlKS4KCkkmIzM5O2xsIGluY2x1ZGUgdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBkYXA4MjExcl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYz01NT1zdHJ1Y3QgZGFwODIxMXJfZGVsYXlfY29uZmlnIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01OS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjYwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGFwODIxMXJfZGVsYXlfY29uZmlnIGRlbGF5X2NvbmZpZ1tdID0ge1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNjEtXHR7ICAgMCwgMH0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9ODE9c3RydWN0IGRhcDgyMTFyX3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTk4LSAqL1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6OTk6c3RhdGljIHUxNiBkYXA4MjExcl9kZWxheV9wc190b19zZWwoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBzKVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTAwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0xMzctICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzoxMzg6c3RhdGljIGludCBkYXA4MjExcl9yZWFkX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnKVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTM5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0xNjUtICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzoxNjY6c3RhdGljIGludCBkYXA4MjExcl9tb2RpZnlfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcsIHUxNiBtYXNrLCB1MTYgc2V0KVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTY3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0xOTAtICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzoxOTE6c3RhdGljIHUzMiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTkyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0yMTYtICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzoyMTc6c3RhdGljIGludCBkYXA4MjExcl9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMjE4LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYz00MzQ9REVGSU5FX1NIT1dfU1RPUkVfQVRUUklCVVRFKHBrZ19nZW4pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ0Ny0gKi9cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjQ0ODpzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDQ5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00NzAtICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0NzE6c3RhdGljIHZvaWQgZGFwODIxMXJfZGVidWdfcmVtb3ZlKHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDcyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00NzYtI2Vsc2UgLyogIUNPTkZJR19ERUJVR19GUyAqL1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6NDc3OnN0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX2luaXQoc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYpIHt9XG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0Nzg6c3RhdGljIHZvaWQgZGFwODIxMXJfZGVidWdfcmVtb3ZlKHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KSB7fVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDc5LSNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi9cbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00ODktICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0OTA6c3RhdGljIGludCBkYXA4MjExcl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDkxLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MTQtICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1MTU6c3RhdGljIHZvaWQgZGFwODIxMXJfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MTYte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTUxOS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjUyMDpzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZGFwODIxMXJfZHJpdmVyW10gPSB7XG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MjEtXHR7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9NTM4PU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MzktXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1NDA6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBkYXA4MjExcl90YltdID0ge1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNTQxLVx0eyBEQVA4MjExUl9QSFlfSUQsIERBUDgyMTFSX1BIWV9JRF9NQVNLIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTEyCgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDUwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgREFQODIxMVIgUEhZIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBnb3QgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciwgdGhlIERBUDgyMTFSKEkpLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZnV6emluZyBhcHByb2FjaC4gTG9va2luZyBhdCB0aGUgZnVuY3Rpb25zLCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGZvY3VzIG9uIGBkYXA4MjExcl9jb25maWdfaW5pdGAsIGBwa2dfZ2VuX3dyaXRlYCwgYGRhcDgyMTFyX3Byb2JlYCwgYGluZm9fc2hvd2AsIGFuZCBgcGtnX2dlbl9zaG93YC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBkZWJ1ZyBpbnRlcmZhY2VzLgoKTm93LCBJIHNlZSB0aGF0IGBEQVA4MjExUl9QSFlgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBzbyB0aGF0JiMzOTtzIGEgZ28gZm9yIGBFbmFibGVDb25maWdzYC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZS4KClRoZSBiaWdnZXIgcXVlc3Rpb24gaXMsICpzaG91bGQqIEkgZnV6eiB0aGlzPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgbmV3IFBIWSBkcml2ZXIsIGFuZCB0aGUgZmFjdCB0aGF0IGl0IGNhbiBiZSByZWFjaGVkIHRocm91Z2ggVVNCIE1ESU8gc2Nhbm5pbmcgYW5kIHZpYSBkZWJ1Z2ZzIG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0LiBUaGUgZHJpdmVyIGhhcyBgY29uZmlnX2luaXRgIHRvIHNldCB1cCB0aGUgZHJpdmVyIGFuZCBpdCBpbXBsZW1lbnRzIGRlYnVnZnMgb3BlcmF0aW9ucywgYWxsIG9mIHdoaWNoIHJlcHJlc2VudCBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLgoKU28sIGxldCYjMzk7cyBzdW1tYXJpemUgdGhlIGxvZ2ljIGJlaGluZCB0aGUgZnV6emluZyBhcHByb2FjaDogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgdGhlIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKS4gSXQgY2FuIGJlIHByb2JlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBFdGhlcm5ldCBkZXZpY2UuIE9uY2UgcHJvYmVkLCB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIGFuZCBkZWJ1Z2ZzIG9wZXJhdGlvbnMgYXJlIHJlYWR5IHRvIGJlIHVzZWQuIFRoaXMgbWFrZXMgZm9yIGEgcGVyZmVjdCB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9sczogYGRhcDgyMTFyX3Byb2JlYCwgYGRhcDgyMTFyX2NvbmZpZ19pbml0YCwgYHBrZ19nZW5fd3JpdGVgLCBgaW5mb19zaG93YCwgYW5kIGBwa2dfZ2VuX3Nob3dgLiBUaGUgYERBUDgyMTFSX1BIWWAgY29uZmlndXJhdGlvbiBpcyBuZWNlc3NhcnkgdG8gZ2V0IHRoaXMgZ29pbmcuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBwbGFuLiBUaW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBnZXQgdGhpcyBwcm9jZXNzIHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQVA4MjExUl9QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXA4MjExcl9wcm9iZSYjMzQ7LAogICAgJiMzNDtkYXA4MjExcl9jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDtwa2dfZ2VuX3dyaXRlJiMzNDssCiAgICAmIzM0O2luZm9fc2hvdyYjMzQ7LAogICAgJiMzNDtwa2dfZ2VuX3Nob3cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBFdGhlcm5ldCBkZXZpY2UgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgREFQODIxMVIgUEhZIElELiBPbmNlIHByb2JlZCwgdGhlIGRyaXZlciYjMzk7cyBgY29uZmlnX2luaXRgIGFuZCBkZWJ1Z2ZzIG9wZXJhdGlvbnMgKGBpbmZvX3Nob3dgLCBgcGtnX2dlbl9zaG93YCwgYHBrZ19nZW5fd3JpdGVgKSBjYW4gYmUgZXhlcmNpc2VkIGJ5IHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFQODIxMVJfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFwODIxMXJfcHJvYmUmIzM0OywKICAgICYjMzQ7ZGFwODIxMXJfY29uZmlnX2luaXQmIzM0OywKICAgICYjMzQ7cGtnX2dlbl93cml0ZSYjMzQ7LAogICAgJiMzNDtpbmZvX3Nob3cmIzM0OywKICAgICYjMzQ7cGtnX2dlbl9zaG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgREFQVSBUZWxlY29tIERBUDgyMTFSKEkpLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgRXRoZXJuZXQgZGV2aWNlIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCByZXNwb25kcyB0byBNRElPIHJlYWRzIHdpdGggdGhlIERBUDgyMTFSIFBIWSBJRC4gT25jZSBwcm9iZWQsIHRoZSBkcml2ZXImIzM5O3MgYGNvbmZpZ19pbml0YCBhbmQgZGVidWdmcyBvcGVyYXRpb25zIChgaW5mb19zaG93YCwgYHBrZ19nZW5fc2hvd2AsIGBwa2dfZ2VuX3dyaXRlYCkgY2FuIGJlIGV4ZXJjaXNlZCBieSB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMjo0Ny41MzA2NzY4NzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjE2MzI4Mjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQVA4MjExUl9QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXA4MjExcl9wcm9iZVwiLFxuICAgIFwiZGFwODIxMXJfY29uZmlnX2luaXRcIixcbiAgICBcInBrZ19nZW5fd3JpdGVcIixcbiAgICBcImluZm9fc2hvd1wiLFxuICAgIFwicGtnX2dlbl9zaG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBFdGhlcm5ldCBkZXZpY2UgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgREFQODIxMVIgUEhZIElELiBPbmNlIHByb2JlZCwgdGhlIGRyaXZlcidzIGBjb25maWdfaW5pdGAgYW5kIGRlYnVnZnMgb3BlcmF0aW9ucyAoYGluZm9fc2hvd2AsIGBwa2dfZ2VuX3Nob3dgLCBgcGtnX2dlbl93cml0ZWApIGNhbiBiZSBleGVyY2lzZWQgYnkgdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMjo0Ny41MzA2OTgwNDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTYxODk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzNDZmNzE1MDBiNmE3YmIxYjA1YTgzYjgyMjgxOWYxNDk2NmRhZDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTc6MjI6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RhcHUsZGFwODIxMXIueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIwOGE4MmY3NzlkNjFlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGFwdSxkYXA4MjExci55YW1sXFxuQEAgLTAsMCArMSw3OCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcXG4rJVlBTUwgMS4yXFxuKy0tLVxcbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWVxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBBcnRlbSBTaGlta28gXFx1MDAzY2Euc2hpbWtvLmRldkBnbWFpbC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjogfFxcbisgIFRoZSBEQVA4MjExUihJKSBpcyBhIEdpZ2FiaXQgRXRoZXJuZXQgUEhZIHdpdGggUkdNSUkgaW50ZXJmYWNlLFxcbisgIHN1cHBvcnRpbmcgSUVFRSA4MDIuM2F6IEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXQsIElFRUUgMTU4OCBTeW5jRSxcXG4rICBhbmQgYW4gaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvciBmb3IgZGlhZ25vc3RpY3MuXFxuK1xcbisgIFNwZWNpZmljYXRpb25zOlxcbisgICAgLSAxMEJBU0UtVGUsIDEwMEJBU0UtVFgsIDEwMDBCQVNFLVRcXG4rICAgIC0gUkdNSUkgd2l0aCBjb25maWd1cmFibGUgVFgvUlggY2xvY2sgZGVsYXlzICgxNTAgcHMgc3RlcHMsIDAtMjI1MCBwcylcXG4rICAgIC0gSUVFRSA4MDIuM2F6LTIwMTAgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldFxcbisgICAgLSBJRUVFIDE1ODggU3luY0Ugc3VwcG9ydFxcbisgICAgLSBJbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yIGFuZCBjaGVja2VyIGZvciBsaW5rIGRpYWdub3N0aWNzXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwMDguMDExYlxcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICByeC1pbnRlcm5hbC1kZWxheS1wczpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBSR01JSSBSWCBjbG9jayBkZWxheSBpbiBwaWNvc2Vjb25kcy4gVGhlIFBIWSBzdXBwb3J0cyAxNTAgcHMgc3RlcHNcXG4rICAgICAgZnJvbSAwIHRvIDIyNTAgcHMuIElmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIDE5NTAgcHMuIElmIHRoZVxcbisgICAgICByZXF1ZXN0ZWQgdmFsdWUgZG9lcyBub3QgZXhhY3RseSBtYXRjaCBhIHN1cHBvcnRlZCBzdGVwLCB0aGUgZHJpdmVyXFxuKyAgICAgIHNlbGVjdHMgdGhlIG5lYXJlc3Qgc3VwcG9ydGVkIHZhbHVlIGFuZCBpc3N1ZXMgYSB3YXJuaW5nLlxcbisgICAgZW51bTogWzAsIDE1MCwgMzAwLCA0NTAsIDYwMCwgNzUwLCA5MDAsIDEwNTAsIDEyMDAsIDEzNTAsIDE1MDAsXFxuKyAgICAgICAgICAgMTY1MCwgMTgwMCwgMTk1MCwgMjEwMCwgMjI1MF1cXG4rICAgIGRlZmF1bHQ6IDE5NTBcXG4rXFxuKyAgdHgtaW50ZXJuYWwtZGVsYXktcHM6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgUkdNSUkgVFggY2xvY2sgZGVsYXkgaW4gcGljb3NlY29uZHMuIFRoZSBQSFkgc3VwcG9ydHMgMTUwIHBzIHN0ZXBzXFxuKyAgICAgIGZyb20gMCB0byAyMjUwIHBzLiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byAxOTUwIHBzLiBJZiB0aGVcXG4rICAgICAgcmVxdWVzdGVkIHZhbHVlIGRvZXMgbm90IGV4YWN0bHkgbWF0Y2ggYSBzdXBwb3J0ZWQgc3RlcCwgdGhlIGRyaXZlclxcbisgICAgICBzZWxlY3RzIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZSBhbmQgaXNzdWVzIGEgd2FybmluZy5cXG4rICAgIGVudW06IFswLCAxNTAsIDMwMCwgNDUwLCA2MDAsIDc1MCwgOTAwLCAxMDUwLCAxMjAwLCAxMzUwLCAxNTAwLFxcbisgICAgICAgICAgIDE2NTAsIDE4MDAsIDE5NTAsIDIxMDAsIDIyNTBdXFxuKyAgICBkZWZhdWx0OiAxOTUwXFxuK1xcbisgIHR4LWludmVydGVkLWNsazpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL2ZsYWdcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBJZiBwcmVzZW50LCB0aGUgUkdNSUkgVFggY2xvY2sgdG8gdGhlIE1BQyBpcyBpbnZlcnRlZCAoMTgwIGRlZ3JlZVxcbisgICAgICBwaGFzZSBzaGlmdCByZWxhdGl2ZSB0byB0aGUgZGF0YSBsaW5lcykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWNcXG4rICAgICAgZXh0ZW5zaW9uIGZvciBib2FyZHMgd2hlcmUgUENCIHRyYWNlIGxlbmd0aCBvciBNQUMgcmVxdWlyZW1lbnRzXFxuKyAgICAgIG5lY2Vzc2l0YXRlIGNsb2NrIGludmVyc2lvbi4gT25seSB1c2UgdGhpcyBwcm9wZXJ0eSBhZnRlciBoYXJkd2FyZVxcbisgICAgICBzaWduYWwgaW50ZWdyaXR5IHZhbGlkYXRpb24uXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHlAMSB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjJcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgIHJ4LWludGVybmFsLWRlbGF5LXBzID0gXFx1MDAzYzEwNTBcXHUwMDNlO1xcbisgICAgICAgICAgICB0eC1pbnRlcm5hbC1kZWxheS1wcyA9IFxcdTAwM2MxMTUwXFx1MDAzZTtcXG4rICAgICAgICAgICAgdHgtaW52ZXJ0ZWQtY2xrO1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuaW5kZXggMDk5ZjI1ZGNlYWJiYzcuLjQ1NzZmNzA3YWM5NDQ1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5AQCAtMjM3LDYgKzIzNywxNiBAQCBjb25maWcgREFWSUNPTV9QSFlcXG4gXFx0aGVscFxcbiBcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBkbTkxNjFlIGFuZCBkbTkxMzFcXG4gXFxuK2NvbmZpZyBEQVA4MjExUl9QSFlcXG4rXFx0dHJpc3RhdGUgXFxcIkRBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWVxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBPRlxcbitcXHRoZWxwXFxuK1xcdCAgU3VwcG9ydCBmb3IgdGhlIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWS5cXG4rXFx0ICBUaGlzIFBIWSBpcyBkZXNpZ25lZCBmb3IgZW50ZXJwcmlzZSBhbmQgaW5kdXN0cmlhbCBuZXR3b3JraW5nXFxuK1xcdCAgYXBwbGljYXRpb25zLCBzdXBwb3J0aW5nIDEwLzEwMC8xMDAwIE1icHMgb3BlcmF0aW9uLlxcbitcXHQgIFJHTUlJIHdpdGg6IGNvbmZpZ3VyYWJsZSBUWC9SWCBjbG9jayBkZWxheXMsIG9wdGlvbmFsIGZsYWcgdG8gZW5hYmxlXFxuK1xcdCAgMTgwLWRlZ3JlZSBUWCBjbG9jayBwaGFzZSBzaGlmdCBhbmQgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvci5cXG4rXFxuIGNvbmZpZyBJQ1BMVVNfUEhZXFxuIFxcdHRyaXN0YXRlIFxcXCJJQ1BsdXMgUEhZc1xcXCJcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcXG5pbmRleCBkZTY2MGFlOTQ5NDUzZC4uYWQzNTczM2ViNGJiNjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuQEAgLTUzLDYgKzUzLDcgQEAgb2JqLSQoQ09ORklHX0JST0FEQ09NX1BIWSlcXHQrPSBicm9hZGNvbS5vXFxuIG9iai0kKENPTkZJR19DSUNBREFfUEhZKVxcdCs9IGNpY2FkYS5vXFxuIG9iai0kKENPTkZJR19DT1JUSU5BX1BIWSlcXHQrPSBjb3J0aW5hLm9cXG4gb2JqLSQoQ09ORklHX0RBVklDT01fUEhZKVxcdCs9IGRhdmljb20ub1xcbitvYmotJChDT05GSUdfREFQODIxMVJfUEhZKVxcdCs9IGRhcDgyMTFyLm9cXG4gb2JqLSQoQ09ORklHX0RQODM2NDBfUEhZKVxcdCs9IGRwODM2NDAub1xcbiBvYmotJChDT05GSUdfRFA4MzgyMl9QSFkpXFx0Kz0gZHA4MzgyMi5vXFxuIG9iai0kKENPTkZJR19EUDgzODQ4X1BIWSlcXHQrPSBkcDgzODQ4Lm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMgYi9kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJkNjk1YmM0OTUzYTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jXFxuQEAgLTAsMCArMSw1NDQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTFxcbisvKlxcbisgKiBEcml2ZXIgZm9yIHRoZSBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkgR2lnYWJpdCBFdGhlcm5ldCBQSFkuXFxuKyAqXFxuKyAqIFNwZWNpZmljYXRpb25zOlxcbisgKiAgIC0gSUVFRSA4MDIuMyAxMEJBU0UtVGUsIDEwMEJBU0UtVFgsIDEwMDBCQVNFLVRcXG4rICogICAtIElFRUUgODAyLjNhei0yMDEwIEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXRcXG4rICogICAtIElFRUUgMTU4OCBTeW5jRSBzdXBwb3J0XFxuKyAqICAgLSBSR01JSVxcbisgKiAgIC0gUGFja2FnZSBHZW5lcmF0b3IgZm9yIGRpYWdub3N0aWNzXFxuKyAqXFxuKyAqIEF1dGhvcjogQXJ0ZW0gU2hpbWtvIFxcdTAwM2NhLnNoaW1rby5kZXZAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9JRFxcdFxcdFxcdDB4MDAwODAxMUJcXG4rI2RlZmluZSBEQVA4MjExUl9QSFlfSURfTUFTS1xcdFxcdDB4RkZGRkZGRkZcXG4rXFxuKyNkZWZpbmUgREFQODIxMVJfRVhUX0FERFxcdFxcdDB4MUVcXG4rI2RlZmluZSBEQVA4MjExUl9FWFRfREFUQVxcdFxcdDB4MUZcXG4rXFxuKyNkZWZpbmUgREFQODIxMVJfUEtHQzVcXHRcXHRcXHQweEEwXFxuKyNkZWZpbmUgREFQODIxMVJfUEtHX1BMX01BU0tcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgREFQODIxMVJfUEtHX1BMXzVBQTVcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSBEQVA4MjExUl9QS0dfQ09SX0NSQ1xcdFxcdEJJVCgyKVxcbisjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fRU5cXHRcXHRCSVQoMTIpXFxuKyNkZWZpbmUgREFQODIxMVJfUEtHX0dFTl9NT0RFXFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIERBUDgyMTFSX1BLR19HQVRFX0VOXFx0XFx0QklUKDE0KVxcbisjZGVmaW5lIERBUDgyMTFSX1BLR19DSEtfRU5cXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgREFQODIxMVJfUEtHX0dFTl9NQVNLXFx0XFx0R0VOTUFTSygxNSwgMTIpXFxuK1xcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9DT05cXHRcXHQweEEwMDFcXG4rI2RlZmluZSBEQVA4MjExUl9QSFlfTERPX0VOXFx0XFx0QklUKDYpXFxuKyNkZWZpbmUgREFQODIxMVJfUEhZX1JYX0RMWVxcdFxcdEJJVCg4KVxcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9HQVRFX1JYX0NMS1xcdEJJVCg5KVxcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9TV19SU1RcXHRcXHRCSVQoMTUpXFxuK1xcbisjZGVmaW5lIERBUDgyMTFSX1JHTUlJX0NPTlxcdFxcdDB4QTAwM1xcbisjZGVmaW5lIERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLXFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLXFx0R0VOTUFTSygxMywgMTApXFxuKyNkZWZpbmUgREFQODIxMVJfUkdNSUlfQ0xLX0lOVkVSVFxcdEJJVCgxNClcXG4rXFxuKy8qIERlZmF1bHQgUkdNSUkgZGVsYXkgKDEuOTVucyA9PSAxMyAqIDE1MClwcykgKi9cXG4rI2RlZmluZSBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTXFx0MTk1MFxcbitcXG4rc3RydWN0IGRhcDgyMTFyX2RlbGF5X2NvbmZpZyB7XFxuK1xcdHUzMiBwcztcXG4rXFx0dTggc2VsO1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcgZGVsYXlfY29uZmlnW10gPSB7XFxuK1xcdHsgICAwLCAwfSxcXG4rXFx0eyAxNTAsIDF9LFxcbitcXHR7IDMwMCwgMn0sXFxuK1xcdHsgNDUwLCAzfSxcXG4rXFx0eyA2MDAsIDR9LFxcbitcXHR7IDc1MCwgNX0sXFxuK1xcdHsgOTAwLCA2fSxcXG4rXFx0ezEwNTAsIDd9LFxcbitcXHR7MTIwMCwgOH0sXFxuK1xcdHsxMzUwLCA5fSxcXG4rXFx0ezE1MDAsIDEwfSxcXG4rXFx0ezE2NTAsIDExfSxcXG4rXFx0ezE4MDAsIDEyfSxcXG4rXFx0ezE5NTAsIDEzfSxcXG4rXFx0ezIxMDAsIDE0fSxcXG4rXFx0ezIyNTAsIDE1fSxcXG4rfTtcXG4rXFxuKyNkZWZpbmUgREFQODIxMVJfREVMQVlfQ09VTlRcXHRBUlJBWV9TSVpFKGRlbGF5X2NvbmZpZylcXG4rXFxuK3N0cnVjdCBkYXA4MjExcl9wcml2IHtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfRlMpXFxuK1xcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGlyO1xcbitcXHRib29sIGNyY19jb3I7XFxuK1xcdGJvb2wgbG9vcGJhY2s7XFxuKyNlbmRpZlxcbit9O1xcbitcXG4rLyoqXFxuKyAqIGRhcDgyMTFyX2RlbGF5X3BzX3RvX3NlbCgpIC0gQ29udmVydCBwaWNvc2Vjb25kcyB0byByZWdpc3RlciB2YWx1ZVxcbisgKiBAcHM6IERlbGF5IGluIHBpY29zZWNvbmRzICgwLTIyNTApXFxuKyAqXFxuKyAqIENvbnZlcnRzIGEgZGVsYXkgdmFsdWUgaW4gcGljb3NlY29uZHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgdmFsdWVcXG4rICogZm9yIFJHTUlJIGRlbGF5IGNvbmZpZ3VyYXRpb24uIFRoZSBQSFkgc3VwcG9ydHMgMTUwcHMgc3RlcHMgZnJvbSAwIHRvIDIyNTBwcy5cXG4rICpcXG4rICogUmV0dXJuOiBSZWdpc3RlciB2YWx1ZSAoMC0xNSlcXG4rICovXFxuK3N0YXRpYyB1MTYgZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwcylcXG4re1xcbitcXHRpbnQgaSwgYmVzdF9pZHggPSAwO1xcbitcXHR1MzIgYmVzdF9kaWZmID0gVUlOVF9NQVgsIGRpZmYgPSAwO1xcbitcXG4rXFx0aWYgKCFwcylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgREFQODIxMVJfREVMQVlfQ09VTlQ7IGkrKykge1xcbitcXHRcXHRkaWZmID0gYWJzKHBzIC0gZGVsYXlfY29uZmlnW2ldLnBzKTtcXG4rXFxuK1xcdFxcdGlmIChkaWZmIFxcdTAwM2MgYmVzdF9kaWZmKSB7XFxuK1xcdFxcdFxcdGJlc3RfZGlmZiA9IGRpZmY7XFxuK1xcdFxcdFxcdGJlc3RfaWR4ID0gaTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFkaWZmKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGJlc3RfZGlmZilcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiRGVsYXkgJXUgcHMgbm90IGZvdW5kLCB1c2luZyBjbG9zZXN0ICV1IHBzXFxcXG5cXFwiLCBwcyxcXG4rXFx0XFx0XFx0ICAgIGRlbGF5X2NvbmZpZ1tiZXN0X2lkeF0ucHMpO1xcbitcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCJEZWxheSBwcyBpZHg6ICV1XFxcXG5cXFwiLCBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbCk7XFxuK1xcbitcXHRyZXR1cm4gZGVsYXlfY29uZmlnW2Jlc3RfaWR4XS5zZWw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXA4MjExcl9yZWFkX2V4dCgpIC0gUmVhZCBleHRlbmRlZCByZWdpc3RlclxcbisgKiBAcGh5ZGV2OiBQSFkgZGV2aWNlIHN0cnVjdHVyZVxcbisgKiBAcmVnOiBFeHRlbmRlZCByZWdpc3RlciBhZGRyZXNzXFxuKyAqXFxuKyAqIFJlYWRzIGEgUEhZIGV4dGVuZGVkIHJlZ2lzdGVyIHVzaW5nIHRoZSBpbmRpcmVjdCBhY2Nlc3MgbWV0aG9kLlxcbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgTURJTyBidXMgbG9jay5cXG4rICpcXG4rICogUmV0dXJuOiBSZWdpc3RlciB2YWx1ZSBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IGRhcDgyMTFyX3JlYWRfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgREFQODIxMVJfRVhUX0FERCwgcmVnKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIERBUDgyMTFSX0VYVF9EQVRBKTtcXG4rb3V0OlxcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXA4MjExcl9tb2RpZnlfZXh0KCkgLSBNb2RpZnkgZXh0ZW5kZWQgcmVnaXN0ZXIgYml0c1xcbisgKiBAcGh5ZGV2OiBQSFkgZGV2aWNlIHN0cnVjdHVyZVxcbisgKiBAcmVnOiBFeHRlbmRlZCByZWdpc3RlciBhZGRyZXNzXFxuKyAqIEBtYXNrOiBCaXQgbWFzayBvZiBiaXRzIHRvIGNsZWFyXFxuKyAqIEBzZXQ6IEJpdCBtYXNrIG9mIGJpdHMgdG8gc2V0XFxuKyAqXFxuKyAqIE1vZGlmaWVzIGEgUEhZIGV4dGVuZGVkIHJlZ2lzdGVyIHVzaW5nIHRoZSBpbmRpcmVjdCBhY2Nlc3MgbWV0aG9kLlxcbisgKiBOZXcgdmFsdWUgPSAob2xkIHZhbHVlIFxcdTAwMjYgfm1hc2spIHwgc2V0LlxcbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgTURJTyBidXMgbG9jay5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgZGFwODIxMXJfbW9kaWZ5X2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnLCB1MTYgbWFzaywgdTE2IHNldClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBEQVA4MjExUl9FWFRfQURELCByZWcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBEQVA4MjExUl9FWFRfREFUQSwgbWFzaywgc2V0KTtcXG4rb3V0OlxcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoKSAtIEdldCBSR01JSSBkZWxheSBmcm9tIGRldmljZSB0cmVlXFxuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXFxuKyAqIEBwcm9wX25hbWU6IERldmljZSB0cmVlIHByb3BlcnR5IG5hbWVcXG4rICpcXG4rICogUmVhZHMgdGhlIFJHTUlJIGRlbGF5IGZyb20gdGhlIGRldmljZSB0cmVlLiBJZiB0aGUgcHJvcGVydHkgaXMgbm90XFxuKyAqIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgZGVsYXkgKDE5NTBwcykgaXMgdXNlZC5cXG4rICpcXG4rICogUmV0dXJuOiBSZWdpc3RlciB2YWx1ZSAoMC0xNSkgb3IgZGVmYXVsdCBpZiBwcm9wZXJ0eSBub3QgZm91bmRcXG4rICovXFxuK3N0YXRpYyB1MzIgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKnByb3BfbmFtZSlcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbitcXHRpbnQgcmV0O1xcbitcXHR1MzIgcHMgPSAwO1xcbitcXG4rXFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIHByb3BfbmFtZSwgXFx1MDAyNnBzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIlVzaW5nIGRlZmF1bHQgZGVsYXkgKCV1cHMpXFxcXG5cXFwiLCBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTKTtcXG4rXFx0XFx0cHMgPSBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKHBoeWRldiwgcHMpO1xcbit9XFxuK1xcbisvKipcXG4rICogZGFwODIxMXJfY29uZmlnX2luaXQoKSAtIEluaXRpYWxpemUgUEhZXFxuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXFxuKyAqXFxuKyAqIENvbmZpZ3VyZXMgdGhlIFBIWSBkdXJpbmcgaW5pdGlhbGl6YXRpb246XFxuKyAqIC0gUkdNSUkgZGVsYXlzIGJhc2VkIG9uIGludGVyZmFjZSBtb2RlXFxuKyAqIC0gVFggY2xvY2sgaW52ZXJ0aW9uXFxuKyAqIC0gU29mdHdhcmUgcmVzZXQgdG8gYXBwbHkgc2V0dGluZ3NcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgZGFwODIxMXJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeWRldl9ub2RlID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbitcXHR1MTYgbWFzayA9IDAsIHNldCA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzd2l0Y2ggKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlKSB7XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfUlhJRDpcXG4rXFx0XFx0c2V0ID0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSyxcXG4rXFx0XFx0XFx0XFx0IGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsIFxcXCJyeC1pbnRlcm5hbC1kZWxheS1wc1xcXCIpKTtcXG4rXFx0XFx0bWFzayA9IERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ6XFxuK1xcdFxcdHNldCA9IEZJRUxEX1BSRVAoREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0ssXFxuK1xcdFxcdFxcdFxcdCBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkocGh5ZGV2LCBcXFwicngtaW50ZXJuYWwtZGVsYXktcHNcXFwiKSk7XFxuK1xcdFxcdG1hc2sgPSBEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSztcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6XFxuK1xcdFxcdHNldCB8PSBGSUVMRF9QUkVQKERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLLFxcbitcXHRcXHRcXHRcXHQgIGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsIFxcXCJ0eC1pbnRlcm5hbC1kZWxheS1wc1xcXCIpKTtcXG4rXFx0XFx0bWFzayB8PSBEQVA4MjExUl9SR01JSV9UWF9ERUxfTUFTSztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgaW50ZXJmYWNlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwaHlkZXZfbm9kZSwgXFxcInR4LXVzZS1pbnZlcnRlZC1jbGtcXFwiKSlcXG4rXFx0XFx0c2V0IHw9IERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQ7XFxuK1xcbitcXHRtYXNrIHw9IERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQ7XFxuK1xcbitcXHRyZXQgPSBkYXA4MjExcl9tb2RpZnlfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTiwgREFQODIxMVJfUEhZX1NXX1JTVCwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBXYWl0IGZvciByZXNldCBzZWxmLWNsZWFyICovXFxuK1xcdGZzbGVlcCgyMDApO1xcbitcXG4rXFx0cmV0ID0gZGFwODIxMXJfbW9kaWZ5X2V4dChwaHlkZXYsIERBUDgyMTFSX1JHTUlJX0NPTiwgbWFzaywgc2V0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBoeWRldl9kYmcocGh5ZGV2LCBcXFwiUkdNSUkgY29uZmlndXJlZDogaW50ZXJmYWNlPSVkLCBtYXNrPTB4JTA0eCwgc2V0PTB4JTA0eFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UsIG1hc2ssIHNldCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKVxcbitcXG4rLyoqXFxuKyAqIGluZm9fc2hvdygpIC0gU2hvdyBQSFkgc3RhdHVzIGluZm9ybWF0aW9uXFxuKyAqIEBzZjogU2VxdWVuY2UgZmlsZSBzdHJ1Y3R1cmVcXG4rICogQGRhdGE6IFByaXZhdGUgZGF0YSAoc3RydWN0IGRhcDgyMTFyX3ByaXYgKilcXG4rICpcXG4rICogRGlzcGxheXMgUEhZIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cyByZWdpc3RlcnMgZm9yIGRlYnVnZ2luZy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cXHUwMDNlZGV2KTtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTik7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gdmFsO1xcbitcXG4rXFx0c2VxX3ByaW50ZihzZiwgXFxcIlBIWV9DT046IDB4JTA0eFxcXFxuXFxcIiwgdmFsKTtcXG4rXFx0c2VxX3ByaW50ZihzZiwgXFxcIiAgTERPIGVuYWJsZWQ6ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX0xET19FTiwgdmFsKSAgP1xcbitcXHRcXHQgICBcXFwieWVzXFxcIiA6IFxcXCJub1xcXCIpO1xcbitcXHRzZXFfcHJpbnRmKHNmLCBcXFwiICBSWCBkbHkgZW46ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX1JYX0RMWSwgdmFsKSA/XFxuK1xcdFxcdCAgIFxcXCJ5ZXNcXFwiIDogXFxcIm5vXFxcIik7XFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCIgIFJYIGNrbCBnYXRpbmc6ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX0dBVEVfUlhfQ0xLLCB2YWwpID9cXG4rXFx0XFx0ICAgXFxcInllc1xcXCIgOiBcXFwibm9cXFwiKTtcXG4rXFxuK1xcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUkdNSUlfQ09OKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB2YWw7XFxuK1xcbitcXHRzZXFfcHJpbnRmKHNmLCBcXFwiUkdNSUlfQ09OOiAweCUwNHhcXFxcblxcXCIsIHZhbCk7XFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCIgIFRYIGRlbGF5IGlkeDogJWx4XFxcXG5cXFwiLCBGSUVMRF9HRVQoREFQODIxMVJfUkdNSUlfVFhfREVMX01BU0ssIHZhbCkpO1xcbitcXHRzZXFfcHJpbnRmKHNmLCBcXFwiICBSWCBkZWxheSBpZHg6ICVseFxcXFxuXFxcIiwgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLLCB2YWwpKTtcXG4rXFx0c2VxX3ByaW50ZihzZiwgXFxcIiAgQ0xLIGludmVydDogJXNcXFxcblxcXCIsIEZJRUxEX0dFVChEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJULCB2YWwpID9cXG4rXFx0XFx0ICAgXFxcInllc1xcXCIgOiBcXFwibm9cXFwiKTtcXG4rXFxuK1xcdHZhbCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNU1IpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCJCTVNSOiAweCUwNHhcXFxcblxcXCIsIHZhbCk7XFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCIgIExpbms6ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoQk1TUl9MU1RBVFVTLCB2YWwpID9cXG4rXFx0XFx0ICAgXFxcInVwXFxcIiA6IFxcXCJkb3duXFxcIik7XFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCIgIEFOIGNvbXBsZXRlOiAlc1xcXFxuXFxcIiwgRklFTERfR0VUKEJNU1JfQU5FR0NPTVBMRVRFLCB2YWwpID9cXG4rXFx0XFx0ICAgXFxcInllc1xcXCIgOiBcXFwibm9cXFwiKTtcXG4rXFxuK1xcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFxuK1xcdGlmIChGSUVMRF9HRVQoREFQODIxMVJfUEtHX0dFTl9FTiwgdmFsKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgRklFTERfR0VUKERBUDgyMTFSX1BLR19DSEtfRU4sIHZhbCkpXFxuK1xcdFxcdHNlcV9wdXRzKHNmLCBcXFwiV0FSTklORzogUGFja2FnZSBHZW5lcmF0aW5nIGVuYWJsZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rREVGSU5FX1NIT1dfQVRUUklCVVRFKGluZm8pO1xcbitcXG4rLyoqXFxuKyAqIHBrZ19nZW5fc2hvdygpIC0gU2hvdyBwYWNrZXQgZ2VuZXJhdG9yIHN0YXR1c1xcbisgKiBAc2Y6IFNlcXVlbmNlIGZpbGUgc3RydWN0dXJlXFxuKyAqIEBkYXRhOiBQcml2YXRlIGRhdGEgKHN0cnVjdCBkYXA4MjExcl9wcml2ICopXFxuKyAqXFxuKyAqIERpc3BsYXlzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvcixcXG4rICogaW5jbHVkaW5nIENSQyBjb3JydXB0aW9uIGFuZCBsb29wYmFjayBzZXR0aW5ncy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgcGtnX2dlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cXHUwMDNlZGV2KTtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFxuK1xcdHNlcV9wdXRzKHNmLCBcXFwiUGFja2FnZSBHZW5lcmF0aW5nOiBcXFwiKTtcXG4rXFx0aWYgKEZJRUxEX0dFVChEQVA4MjExUl9QS0dfR0VOX0VOLCB2YWwpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBGSUVMRF9HRVQoREFQODIxMVJfUEtHX0NIS19FTiwgdmFsKSlcXG4rXFx0XFx0c2VxX3B1dHMoc2YsIFxcXCJlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzZXFfcHV0cyhzZiwgXFxcImRpc2FibGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCJDUkMgY29ycnVwdGlvbiBlbjogJXNcXFxcblxcXCIsIEZJRUxEX0dFVChEQVA4MjExUl9QS0dfQ09SX0NSQywgdmFsKSA/XFxuK1xcdFxcdCAgIFxcXCJlbmFibGVkXFxcIiA6IFxcXCJkaXNhYmxlZFxcXCIpO1xcbitcXG4rXFx0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gdmFsO1xcbitcXG4rXFx0c2VxX3ByaW50ZihzZiwgXFxcIkxvb3BiYWNrIGVuOiAlc1xcXFxuXFxcIiwgRklFTERfR0VUKEJNQ1JfTE9PUEJBQ0ssIHZhbCkgP1xcbitcXHRcXHQgICBcXFwiZW5hYmxlZFxcXCIgOiBcXFwiZGlzYWJsZWRcXFwiKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwa2dfZ2VuX3dyaXRlKCkgLSBFbmFibGUvZGlzYWJsZSBwYWNrZXQgZ2VuZXJhdG9yXFxuKyAqIEBmaWxlOiBGaWxlIHN0cnVjdHVyZVxcbisgKiBAdXNlcl9idWY6IFVzZXIgc3BhY2UgYnVmZmVyXFxuKyAqIEBjb3VudDogQnVmZmVyIHNpemVcXG4rICogQHBwb3M6IEZpbGUgcG9zaXRpb25cXG4rICpcXG4rICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvci5cXG4rICogQWxzbyBjb250cm9scyBsb29wYmFjayBhbmQgQ1JDIGNvcnJ1cHRpb24gdmlhIGRlYnVnZnMgZmxhZ3MuXFxuKyAqXFxuKyAqIE5PVEU6IFdlIGludGVudGlvbmFsbHkgZG8gbm90IHVzZSBnZW5waHlfbG9vcGJhY2soKSBoZXJlLlxcbisgKiBnZW5waHlfbG9vcGJhY2soKSBkb2VzIGEgZnVsbCBCTUNSIG92ZXJ3cml0ZSAobWFzayA9IH4wKSBhbmRcXG4rICogd2FpdHMgdXAgdG8gNTAwIG1zIGZvciBsaW5rIGluIGxvb3BiYWNrIG1vZGUuIFRoaXMgaXMgdG9vXFxuKyAqIGhlYXZ5IGZvciBhIGRpYWdub3N0aWMgcGFja2V0IGdlbmVyYXRvcjpcXG4rICpcXG4rICogLSBJdCBkZXN0cm95cyBhbGwgb3RoZXIgQk1DUiBzdGF0ZSAoc3BlZWQsIGR1cGxleCwgQU4gY29uZmlnKS5cXG4rICogLSBUaGUgNTAwIG1zIGxpbmsgcG9sbCBpcyB1bm5lY2Vzc2FyeTogd2UgYWxyZWFkeSBoYXZlIGEgbGlua1xcbisgKiAgIG9yIGFyZSBkZWxpYmVyYXRlbHkgc2V0dGluZyB1cCBhIHRlc3QgY29uZGl0aW9uLlxcbisgKiAtIFdlIHdhbnQgdG8gbWluaW1pemUgY2hhbmdlcyB0byBCTUNSIGR1cmluZyBkZWJ1Z2dpbmcuXFxuKyAqXFxuKyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIHNzaXplX3QgcGtnX2dlbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuK1xcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuK3tcXG4rXFx0c3RydWN0IHNlcV9maWxlICpzZiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cXHUwMDNlZGV2KTtcXG4rXFx0Ym9vbCBlbjtcXG4rXFx0dTE2IG1hc2ssIHNldCwgc2V0X2JtY3I7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3RydG9ib29sX2Zyb21fdXNlcih1c2VyX2J1ZiwgY291bnQsIFxcdTAwMjZlbik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoZW4pIHtcXG4rXFx0XFx0c2V0ID0gREFQODIxMVJfUEtHX0dFTl9FTiB8IERBUDgyMTFSX1BLR19DSEtfRU4gfCBEQVA4MjExUl9QS0dfUExfNUFBNTtcXG4rXFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VjcmNfY29yKVxcbitcXHRcXHRcXHRzZXQgfD0gREFQODIxMVJfUEtHX0NPUl9DUkM7XFxuK1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlbG9vcGJhY2spXFxuK1xcdFxcdFxcdHNldF9ibWNyID0gQk1DUl9MT09QQkFDSztcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZXRfYm1jciA9IEJNQ1JfQU5FTkFCTEU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNldCA9IERBUDgyMTFSX1BLR19HRU5fTU9ERSB8IERBUDgyMTFSX1BLR19HQVRFX0VOO1xcbitcXHRcXHRzZXRfYm1jciA9IEJNQ1JfQU5FTkFCTEU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9MT09QQkFDSyB8IEJNQ1JfQU5FTkFCTEUsIHNldF9ibWNyKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRtYXNrID0gREFQODIxMVJfUEtHX0dFTl9NQVNLIHwgREFQODIxMVJfUEtHX1BMX01BU0sgfCBEQVA4MjExUl9QS0dfQ09SX0NSQztcXG4rXFx0cmV0ID0gZGFwODIxMXJfbW9kaWZ5X2V4dChwaHlkZXYsIERBUDgyMTFSX1BLR0M1LCBtYXNrLCBzZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0ssIDApO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rREVGSU5FX1NIT1dfU1RPUkVfQVRUUklCVVRFKHBrZ19nZW4pO1xcbitcXG4rLyoqXFxuKyAqIGRhcDgyMTFyX2RlYnVnX2luaXQoKSAtIEluaXRpYWxpemUgZGVidWdmcyBlbnRyaWVzXFxuKyAqIEBwcml2OiBQcml2YXRlIGRyaXZlciBkYXRhXFxuKyAqXFxuKyAqIENyZWF0ZXMgZGVidWdmcyBkaXJlY3RvcnkgYW5kIGZpbGVzIGZvciBQSFkgZGVidWdnaW5nLlxcbisgKiAtIGluZm86IFBIWSBzdGF0dXMgaW5mb3JtYXRpb25cXG4rICogLSBwa2dfZ2VuOiBFbmFibGUvZGlzYWJsZSBnZW5lcmF0b3IgKDEvMClcXG4rICogLSBwa2dfZ2VuX2NyY19jb3I6IEVuYWJsZSBDUkMgY29ycnVwdGlvbiAoWS9OKVxcbisgKiAtIHBrZ19nZW5fbG9vcGJhY2s6IEVuYWJsZSBsb29wYmFjayAoWS9OKVxcbisgKlxcbisgKiBEZWJ1Z2ZzIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RFQlVHX0ZTIGlzIGVuYWJsZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KVxcbit7XFxuK1xcdHByaXYtXFx1MDAzZXJvb3RfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKHByaXYtXFx1MDAzZWRldiksIE5VTEwpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXJvb3RfZGlyKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiaW5mb1xcXCIsIDA0NDQsIHByaXYtXFx1MDAzZXJvb3RfZGlyLCBwcml2LFxcbitcXHRcXHRcXHQgICAgXFx1MDAyNmluZm9fZm9wcyk7XFxuK1xcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInBrZ19nZW5cXFwiLCAwNjQ0LCBwcml2LVxcdTAwM2Vyb290X2RpciwgcHJpdixcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZwa2dfZ2VuX2ZvcHMpO1xcbitcXHRkZWJ1Z2ZzX2NyZWF0ZV9ib29sKFxcXCJwa2dfZ2VuX2NyY19jb3JcXFwiLCAwNjQ0LCBwcml2LVxcdTAwM2Vyb290X2RpcixcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZwcml2LVxcdTAwM2VjcmNfY29yKTtcXG4rXFx0ZGVidWdmc19jcmVhdGVfYm9vbChcXFwicGtnX2dlbl9sb29wYmFja1xcXCIsIDA2NDQsIHByaXYtXFx1MDAzZXJvb3RfZGlyLFxcbitcXHRcXHRcXHQgICAgXFx1MDAyNnByaXYtXFx1MDAzZWxvb3BiYWNrKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRhcDgyMTFyX2RlYnVnX3JlbW92ZSgpIC0gUmVtb3ZlIGRlYnVnZnMgZW50cmllc1xcbisgKiBAcHJpdjogUHJpdmF0ZSBkcml2ZXIgZGF0YVxcbisgKlxcbisgKiBSZWN1cnNpdmVseSByZW1vdmVzIGFsbCBkZWJ1Z2ZzIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBjcmVhdGVkXFxuKyAqIGJ5IGRhcDgyMTFyX2RlYnVnX2luaXQoKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdilcXG4re1xcbitcXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocHJpdi1cXHUwMDNlcm9vdF9kaXIpO1xcbit9XFxuK1xcbisjZWxzZSAvKiAhQ09ORklHX0RFQlVHX0ZTICovXFxuK3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX2luaXQoc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYpIHt9XFxuK3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cXG4rI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqL1xcbitcXG4rLyoqXFxuKyAqIGRhcDgyMTFyX3Byb2JlKCkgLSBQSFkgcHJvYmUgY2FsbGJhY2tcXG4rICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogQ2FsbGVkIHdoZW4gdGhlIFBIWSBpcyBkaXNjb3ZlcmVkLiBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzXFxuKyAqIHByaXZhdGUgZHJpdmVyIGRhdGEgYW5kIGRlYnVnZnMgZW50cmllcy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgZGFwODIxMXJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXY7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwcml2LVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdHBoeWRldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcbitcXHRkYXA4MjExcl9kZWJ1Z19pbml0KHByaXYpO1xcbitcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIkRBUDgyMTFSIFBIWSBwcm9iZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXA4MjExcl9yZW1vdmUoKSAtIFBIWSByZW1vdmUgY2FsbGJhY2tcXG4rICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogQ2FsbGVkIHdoZW4gdGhlIFBIWSBpcyByZW1vdmVkLiBDbGVhbnMgdXAgcHJpdmF0ZSBkcml2ZXIgZGF0YVxcbisgKiBhbmQgZGVidWdmcyBlbnRyaWVzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZGFwODIxMXJfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0ZGFwODIxMXJfZGVidWdfcmVtb3ZlKHBoeWRldi1cXHUwMDNlcHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkYXA4MjExcl9kcml2ZXJbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoREFQODIxMVJfUEhZX0lEKSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJEQVA4MjExUiBHaWdhYml0IEV0aGVybmV0XFxcIixcXG4rXFx0XFx0LnByb2JlICAgICAgICAgID0gZGFwODIxMXJfcHJvYmUsXFxuK1xcdFxcdC5yZW1vdmVcXHRcXHQ9IGRhcDgyMTFyX3JlbW92ZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0PSBkYXA4MjExcl9jb25maWdfaW5pdCxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzXFx0PSBnZW5waHlfcmVhZF9zdGF0dXMsXFxuK1xcdFxcdC5zZXRfbG9vcGJhY2tcXHQ9IGdlbnBoeV9sb29wYmFjayxcXG4rXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSBnZW5waHlfY29uZmlnX2FuZWcsXFxuK1xcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4rXFx0fSxcXG4rfTtcXG4rbW9kdWxlX3BoeV9kcml2ZXIoZGFwODIxMXJfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiREFQODIxMVIgR2lnYWJpdCBFdGhlcm5ldCBQSFkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkFydGVtIFNoaW1rbyBcXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBkYXA4MjExcl90YltdID0ge1xcbitcXHR7IERBUDgyMTFSX1BIWV9JRCwgREFQODIxMVJfUEhZX0lEX01BU0sgfSxcXG4rXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgZGFwODIxMXJfdGIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMjo0OC4wNjcwMzcyMDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NjI2OTE0MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBUDgyMTFSX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhcDgyMTFyX3Byb2JlXCIsXG4gICAgXCJkYXA4MjExcl9jb25maWdfaW5pdFwiLFxuICAgIFwicGtnX2dlbl93cml0ZVwiLFxuICAgIFwiaW5mb19zaG93XCIsXG4gICAgXCJwa2dfZ2VuX3Nob3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKS4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIEV0aGVybmV0IGRldmljZSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgcmVzcG9uZHMgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBEQVA4MjExUiBQSFkgSUQuIE9uY2UgcHJvYmVkLCB0aGUgZHJpdmVyJ3MgYGNvbmZpZ19pbml0YCBhbmQgZGVidWdmcyBvcGVyYXRpb25zIChgaW5mb19zaG93YCwgYHBrZ19nZW5fc2hvd2AsIGBwa2dfZ2VuX3dyaXRlYCkgY2FuIGJlIGV4ZXJjaXNlZCBieSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzM0NmY3MTUwMGI2YTdiYjFiMDVhODNiODIyODE5ZjE0OTY2ZGFkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDE3OjIyOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RhcHUsZGFwODIxMXIueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yMDhhODJmNzc5ZDYxZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWxcbkBAIC0wLDAgKzEsNzggQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWVxuK1xuK21haW50YWluZXJzOlxuKyAgLSBBcnRlbSBTaGlta28gXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOiB8XG4rICBUaGUgREFQODIxMVIoSSkgaXMgYSBHaWdhYml0IEV0aGVybmV0IFBIWSB3aXRoIFJHTUlJIGludGVyZmFjZSxcbisgIHN1cHBvcnRpbmcgSUVFRSA4MDIuM2F6IEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXQsIElFRUUgMTU4OCBTeW5jRSxcbisgIGFuZCBhbiBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yIGZvciBkaWFnbm9zdGljcy5cbitcbisgIFNwZWNpZmljYXRpb25zOlxuKyAgICAtIDEwQkFTRS1UZSwgMTAwQkFTRS1UWCwgMTAwMEJBU0UtVFxuKyAgICAtIFJHTUlJIHdpdGggY29uZmlndXJhYmxlIFRYL1JYIGNsb2NrIGRlbGF5cyAoMTUwIHBzIHN0ZXBzLCAwLTIyNTAgcHMpXG4rICAgIC0gSUVFRSA4MDIuM2F6LTIwMTAgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldFxuKyAgICAtIElFRUUgMTU4OCBTeW5jRSBzdXBwb3J0XG4rICAgIC0gSW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvciBhbmQgY2hlY2tlciBmb3IgbGluayBkaWFnbm9zdGljc1xuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwMDguMDExYlxuK1xuKyAgcmVnOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgcngtaW50ZXJuYWwtZGVsYXktcHM6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFJHTUlJIFJYIGNsb2NrIGRlbGF5IGluIHBpY29zZWNvbmRzLiBUaGUgUEhZIHN1cHBvcnRzIDE1MCBwcyBzdGVwc1xuKyAgICAgIGZyb20gMCB0byAyMjUwIHBzLiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byAxOTUwIHBzLiBJZiB0aGVcbisgICAgICByZXF1ZXN0ZWQgdmFsdWUgZG9lcyBub3QgZXhhY3RseSBtYXRjaCBhIHN1cHBvcnRlZCBzdGVwLCB0aGUgZHJpdmVyXG4rICAgICAgc2VsZWN0cyB0aGUgbmVhcmVzdCBzdXBwb3J0ZWQgdmFsdWUgYW5kIGlzc3VlcyBhIHdhcm5pbmcuXG4rICAgIGVudW06IFswLCAxNTAsIDMwMCwgNDUwLCA2MDAsIDc1MCwgOTAwLCAxMDUwLCAxMjAwLCAxMzUwLCAxNTAwLFxuKyAgICAgICAgICAgMTY1MCwgMTgwMCwgMTk1MCwgMjEwMCwgMjI1MF1cbisgICAgZGVmYXVsdDogMTk1MFxuK1xuKyAgdHgtaW50ZXJuYWwtZGVsYXktcHM6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFJHTUlJIFRYIGNsb2NrIGRlbGF5IGluIHBpY29zZWNvbmRzLiBUaGUgUEhZIHN1cHBvcnRzIDE1MCBwcyBzdGVwc1xuKyAgICAgIGZyb20gMCB0byAyMjUwIHBzLiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byAxOTUwIHBzLiBJZiB0aGVcbisgICAgICByZXF1ZXN0ZWQgdmFsdWUgZG9lcyBub3QgZXhhY3RseSBtYXRjaCBhIHN1cHBvcnRlZCBzdGVwLCB0aGUgZHJpdmVyXG4rICAgICAgc2VsZWN0cyB0aGUgbmVhcmVzdCBzdXBwb3J0ZWQgdmFsdWUgYW5kIGlzc3VlcyBhIHdhcm5pbmcuXG4rICAgIGVudW06IFswLCAxNTAsIDMwMCwgNDUwLCA2MDAsIDc1MCwgOTAwLCAxMDUwLCAxMjAwLCAxMzUwLCAxNTAwLFxuKyAgICAgICAgICAgMTY1MCwgMTgwMCwgMTk1MCwgMjEwMCwgMjI1MF1cbisgICAgZGVmYXVsdDogMTk1MFxuK1xuKyAgdHgtaW52ZXJ0ZWQtY2xrOlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9mbGFnXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIElmIHByZXNlbnQsIHRoZSBSR01JSSBUWCBjbG9jayB0byB0aGUgTUFDIGlzIGludmVydGVkICgxODAgZGVncmVlXG4rICAgICAgcGhhc2Ugc2hpZnQgcmVsYXRpdmUgdG8gdGhlIGRhdGEgbGluZXMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljXG4rICAgICAgZXh0ZW5zaW9uIGZvciBib2FyZHMgd2hlcmUgUENCIHRyYWNlIGxlbmd0aCBvciBNQUMgcmVxdWlyZW1lbnRzXG4rICAgICAgbmVjZXNzaXRhdGUgY2xvY2sgaW52ZXJzaW9uLiBPbmx5IHVzZSB0aGlzIHByb3BlcnR5IGFmdGVyIGhhcmR3YXJlXG4rICAgICAgc2lnbmFsIGludGVncml0eSB2YWxpZGF0aW9uLlxuK1xuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbitleGFtcGxlczpcbisgIC0gfFxuKyAgICBtZGlvIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBoeUAxIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgcngtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxMDUwXHUwMDNlO1xuKyAgICAgICAgICAgIHR4LWludGVybmFsLWRlbGF5LXBzID0gXHUwMDNjMTE1MFx1MDAzZTtcbisgICAgICAgICAgICB0eC1pbnZlcnRlZC1jbGs7XG4rICAgICAgICB9O1xuKyAgICB9O1xuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbmluZGV4IDA5OWYyNWRjZWFiYmM3Li40NTc2ZjcwN2FjOTQ0NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTIzNyw2ICsyMzcsMTYgQEAgY29uZmlnIERBVklDT01fUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBkbTkxNjFlIGFuZCBkbTkxMzFcbiBcbitjb25maWcgREFQODIxMVJfUEhZXG4rXHR0cmlzdGF0ZSBcIkRBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWVwiXG4rXHRkZXBlbmRzIG9uIE9GXG4rXHRoZWxwXG4rXHQgIFN1cHBvcnQgZm9yIHRoZSBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkgR2lnYWJpdCBFdGhlcm5ldCBQSFkuXG4rXHQgIFRoaXMgUEhZIGlzIGRlc2lnbmVkIGZvciBlbnRlcnByaXNlIGFuZCBpbmR1c3RyaWFsIG5ldHdvcmtpbmdcbitcdCAgYXBwbGljYXRpb25zLCBzdXBwb3J0aW5nIDEwLzEwMC8xMDAwIE1icHMgb3BlcmF0aW9uLlxuK1x0ICBSR01JSSB3aXRoOiBjb25maWd1cmFibGUgVFgvUlggY2xvY2sgZGVsYXlzLCBvcHRpb25hbCBmbGFnIHRvIGVuYWJsZVxuK1x0ICAxODAtZGVncmVlIFRYIGNsb2NrIHBoYXNlIHNoaWZ0IGFuZCBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yLlxuK1xuIGNvbmZpZyBJQ1BMVVNfUEhZXG4gXHR0cmlzdGF0ZSBcIklDUGx1cyBQSFlzXCJcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IGRlNjYwYWU5NDk0NTNkLi5hZDM1NzMzZWI0YmI2MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5AQCAtNTMsNiArNTMsNyBAQCBvYmotJChDT05GSUdfQlJPQURDT01fUEhZKVx0Kz0gYnJvYWRjb20ub1xuIG9iai0kKENPTkZJR19DSUNBREFfUEhZKVx0Kz0gY2ljYWRhLm9cbiBvYmotJChDT05GSUdfQ09SVElOQV9QSFkpXHQrPSBjb3J0aW5hLm9cbiBvYmotJChDT05GSUdfREFWSUNPTV9QSFkpXHQrPSBkYXZpY29tLm9cbitvYmotJChDT05GSUdfREFQODIxMVJfUEhZKVx0Kz0gZGFwODIxMXIub1xuIG9iai0kKENPTkZJR19EUDgzNjQwX1BIWSlcdCs9IGRwODM2NDAub1xuIG9iai0kKENPTkZJR19EUDgzODIyX1BIWSlcdCs9IGRwODM4MjIub1xuIG9iai0kKENPTkZJR19EUDgzODQ4X1BIWSlcdCs9IGRwODM4NDgub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jIGIvZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmQ2OTViYzQ5NTNhMmJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jXG5AQCAtMCwwICsxLDU0NCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUExcbisvKlxuKyAqIERyaXZlciBmb3IgdGhlIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWS5cbisgKlxuKyAqIFNwZWNpZmljYXRpb25zOlxuKyAqICAgLSBJRUVFIDgwMi4zIDEwQkFTRS1UZSwgMTAwQkFTRS1UWCwgMTAwMEJBU0UtVFxuKyAqICAgLSBJRUVFIDgwMi4zYXotMjAxMCBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0XG4rICogICAtIElFRUUgMTU4OCBTeW5jRSBzdXBwb3J0XG4rICogICAtIFJHTUlJXG4rICogICAtIFBhY2thZ2UgR2VuZXJhdG9yIGZvciBkaWFnbm9zdGljc1xuKyAqXG4rICogQXV0aG9yOiBBcnRlbSBTaGlta28gXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21paS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuK1xuKyNkZWZpbmUgREFQODIxMVJfUEhZX0lEXHRcdFx0MHgwMDA4MDExQlxuKyNkZWZpbmUgREFQODIxMVJfUEhZX0lEX01BU0tcdFx0MHhGRkZGRkZGRlxuK1xuKyNkZWZpbmUgREFQODIxMVJfRVhUX0FERFx0XHQweDFFXG4rI2RlZmluZSBEQVA4MjExUl9FWFRfREFUQVx0XHQweDFGXG4rXG4rI2RlZmluZSBEQVA4MjExUl9QS0dDNVx0XHRcdDB4QTBcbisjZGVmaW5lIERBUDgyMTFSX1BLR19QTF9NQVNLXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIERBUDgyMTFSX1BLR19QTF81QUE1XHRcdEJJVCgxKVxuKyNkZWZpbmUgREFQODIxMVJfUEtHX0NPUl9DUkNcdFx0QklUKDIpXG4rI2RlZmluZSBEQVA4MjExUl9QS0dfR0VOX0VOXHRcdEJJVCgxMilcbisjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTU9ERVx0XHRCSVQoMTMpXG4rI2RlZmluZSBEQVA4MjExUl9QS0dfR0FURV9FTlx0XHRCSVQoMTQpXG4rI2RlZmluZSBEQVA4MjExUl9QS0dfQ0hLX0VOXHRcdEJJVCgxNSlcbisjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbitcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9DT05cdFx0MHhBMDAxXG4rI2RlZmluZSBEQVA4MjExUl9QSFlfTERPX0VOXHRcdEJJVCg2KVxuKyNkZWZpbmUgREFQODIxMVJfUEhZX1JYX0RMWVx0XHRCSVQoOClcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9HQVRFX1JYX0NMS1x0QklUKDkpXG4rI2RlZmluZSBEQVA4MjExUl9QSFlfU1dfUlNUXHRcdEJJVCgxNSlcbitcbisjZGVmaW5lIERBUDgyMTFSX1JHTUlJX0NPTlx0XHQweEEwMDNcbisjZGVmaW5lIERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLXHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTS1x0R0VOTUFTSygxMywgMTApXG4rI2RlZmluZSBEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJUXHRCSVQoMTQpXG4rXG4rLyogRGVmYXVsdCBSR01JSSBkZWxheSAoMS45NW5zID09IDEzICogMTUwKXBzKSAqL1xuKyNkZWZpbmUgREFQODIxMVJfREVGQVVMVF9ERUxBWV9QU1x0MTk1MFxuK1xuK3N0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcge1xuK1x0dTMyIHBzO1xuK1x0dTggc2VsO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcgZGVsYXlfY29uZmlnW10gPSB7XG4rXHR7ICAgMCwgMH0sXG4rXHR7IDE1MCwgMX0sXG4rXHR7IDMwMCwgMn0sXG4rXHR7IDQ1MCwgM30sXG4rXHR7IDYwMCwgNH0sXG4rXHR7IDc1MCwgNX0sXG4rXHR7IDkwMCwgNn0sXG4rXHR7MTA1MCwgN30sXG4rXHR7MTIwMCwgOH0sXG4rXHR7MTM1MCwgOX0sXG4rXHR7MTUwMCwgMTB9LFxuK1x0ezE2NTAsIDExfSxcbitcdHsxODAwLCAxMn0sXG4rXHR7MTk1MCwgMTN9LFxuK1x0ezIxMDAsIDE0fSxcbitcdHsyMjUwLCAxNX0sXG4rfTtcbitcbisjZGVmaW5lIERBUDgyMTFSX0RFTEFZX0NPVU5UXHRBUlJBWV9TSVpFKGRlbGF5X2NvbmZpZylcbitcbitzdHJ1Y3QgZGFwODIxMXJfcHJpdiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKVxuK1x0c3RydWN0IGRlbnRyeSAqcm9vdF9kaXI7XG4rXHRib29sIGNyY19jb3I7XG4rXHRib29sIGxvb3BiYWNrO1xuKyNlbmRpZlxuK307XG4rXG4rLyoqXG4rICogZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKCkgLSBDb252ZXJ0IHBpY29zZWNvbmRzIHRvIHJlZ2lzdGVyIHZhbHVlXG4rICogQHBzOiBEZWxheSBpbiBwaWNvc2Vjb25kcyAoMC0yMjUwKVxuKyAqXG4rICogQ29udmVydHMgYSBkZWxheSB2YWx1ZSBpbiBwaWNvc2Vjb25kcyB0byB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlciB2YWx1ZVxuKyAqIGZvciBSR01JSSBkZWxheSBjb25maWd1cmF0aW9uLiBUaGUgUEhZIHN1cHBvcnRzIDE1MHBzIHN0ZXBzIGZyb20gMCB0byAyMjUwcHMuXG4rICpcbisgKiBSZXR1cm46IFJlZ2lzdGVyIHZhbHVlICgwLTE1KVxuKyAqL1xuK3N0YXRpYyB1MTYgZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwcylcbit7XG4rXHRpbnQgaSwgYmVzdF9pZHggPSAwO1xuK1x0dTMyIGJlc3RfZGlmZiA9IFVJTlRfTUFYLCBkaWZmID0gMDtcbitcbitcdGlmICghcHMpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFQODIxMVJfREVMQVlfQ09VTlQ7IGkrKykge1xuK1x0XHRkaWZmID0gYWJzKHBzIC0gZGVsYXlfY29uZmlnW2ldLnBzKTtcbitcbitcdFx0aWYgKGRpZmYgXHUwMDNjIGJlc3RfZGlmZikge1xuK1x0XHRcdGJlc3RfZGlmZiA9IGRpZmY7XG4rXHRcdFx0YmVzdF9pZHggPSBpO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghZGlmZilcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmIChiZXN0X2RpZmYpXG4rXHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCJEZWxheSAldSBwcyBub3QgZm91bmQsIHVzaW5nIGNsb3Nlc3QgJXUgcHNcXG5cIiwgcHMsXG4rXHRcdFx0ICAgIGRlbGF5X2NvbmZpZ1tiZXN0X2lkeF0ucHMpO1xuK1xuK1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiRGVsYXkgcHMgaWR4OiAldVxcblwiLCBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbCk7XG4rXG4rXHRyZXR1cm4gZGVsYXlfY29uZmlnW2Jlc3RfaWR4XS5zZWw7XG4rfVxuK1xuKy8qKlxuKyAqIGRhcDgyMTFyX3JlYWRfZXh0KCkgLSBSZWFkIGV4dGVuZGVkIHJlZ2lzdGVyXG4rICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcbisgKiBAcmVnOiBFeHRlbmRlZCByZWdpc3RlciBhZGRyZXNzXG4rICpcbisgKiBSZWFkcyBhIFBIWSBleHRlbmRlZCByZWdpc3RlciB1c2luZyB0aGUgaW5kaXJlY3QgYWNjZXNzIG1ldGhvZC5cbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgTURJTyBidXMgbG9jay5cbisgKlxuKyAqIFJldHVybjogUmVnaXN0ZXIgdmFsdWUgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgZGFwODIxMXJfcmVhZF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZylcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgREFQODIxMVJfRVhUX0FERCwgcmVnKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIERBUDgyMTFSX0VYVF9EQVRBKTtcbitvdXQ6XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiBkYXA4MjExcl9tb2RpZnlfZXh0KCkgLSBNb2RpZnkgZXh0ZW5kZWQgcmVnaXN0ZXIgYml0c1xuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4rICogQHJlZzogRXh0ZW5kZWQgcmVnaXN0ZXIgYWRkcmVzc1xuKyAqIEBtYXNrOiBCaXQgbWFzayBvZiBiaXRzIHRvIGNsZWFyXG4rICogQHNldDogQml0IG1hc2sgb2YgYml0cyB0byBzZXRcbisgKlxuKyAqIE1vZGlmaWVzIGEgUEhZIGV4dGVuZGVkIHJlZ2lzdGVyIHVzaW5nIHRoZSBpbmRpcmVjdCBhY2Nlc3MgbWV0aG9kLlxuKyAqIE5ldyB2YWx1ZSA9IChvbGQgdmFsdWUgXHUwMDI2IH5tYXNrKSB8IHNldC5cbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgTURJTyBidXMgbG9jay5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCBkYXA4MjExcl9tb2RpZnlfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcsIHUxNiBtYXNrLCB1MTYgc2V0KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBEQVA4MjExUl9FWFRfQURELCByZWcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBEQVA4MjExUl9FWFRfREFUQSwgbWFzaywgc2V0KTtcbitvdXQ6XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoKSAtIEdldCBSR01JSSBkZWxheSBmcm9tIGRldmljZSB0cmVlXG4rICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcbisgKiBAcHJvcF9uYW1lOiBEZXZpY2UgdHJlZSBwcm9wZXJ0eSBuYW1lXG4rICpcbisgKiBSZWFkcyB0aGUgUkdNSUkgZGVsYXkgZnJvbSB0aGUgZGV2aWNlIHRyZWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3RcbisgKiBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGRlbGF5ICgxOTUwcHMpIGlzIHVzZWQuXG4rICpcbisgKiBSZXR1cm46IFJlZ2lzdGVyIHZhbHVlICgwLTE1KSBvciBkZWZhdWx0IGlmIHByb3BlcnR5IG5vdCBmb3VuZFxuKyAqL1xuK3N0YXRpYyB1MzIgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKnByb3BfbmFtZSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHRpbnQgcmV0O1xuK1x0dTMyIHBzID0gMDtcbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBwcm9wX25hbWUsIFx1MDAyNnBzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiVXNpbmcgZGVmYXVsdCBkZWxheSAoJXVwcylcXG5cIiwgREFQODIxMVJfREVGQVVMVF9ERUxBWV9QUyk7XG4rXHRcdHBzID0gREFQODIxMVJfREVGQVVMVF9ERUxBWV9QUztcbitcdH1cbitcbitcdHJldHVybiBkYXA4MjExcl9kZWxheV9wc190b19zZWwocGh5ZGV2LCBwcyk7XG4rfVxuK1xuKy8qKlxuKyAqIGRhcDgyMTFyX2NvbmZpZ19pbml0KCkgLSBJbml0aWFsaXplIFBIWVxuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4rICpcbisgKiBDb25maWd1cmVzIHRoZSBQSFkgZHVyaW5nIGluaXRpYWxpemF0aW9uOlxuKyAqIC0gUkdNSUkgZGVsYXlzIGJhc2VkIG9uIGludGVyZmFjZSBtb2RlXG4rICogLSBUWCBjbG9jayBpbnZlcnRpb25cbisgKiAtIFNvZnR3YXJlIHJlc2V0IHRvIGFwcGx5IHNldHRpbmdzXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgZGFwODIxMXJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeWRldl9ub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHR1MTYgbWFzayA9IDAsIHNldCA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c3dpdGNoIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKSB7XG4rXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOlxuK1x0XHRzZXQgPSBGSUVMRF9QUkVQKERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLLFxuK1x0XHRcdFx0IGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsIFwicngtaW50ZXJuYWwtZGVsYXktcHNcIikpO1xuK1x0XHRtYXNrID0gREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0s7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ6XG4rXHRcdHNldCA9IEZJRUxEX1BSRVAoREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0ssXG4rXHRcdFx0XHQgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHBoeWRldiwgXCJyeC1pbnRlcm5hbC1kZWxheS1wc1wiKSk7XG4rXHRcdG1hc2sgPSBEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSztcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEOlxuK1x0XHRzZXQgfD0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9UWF9ERUxfTUFTSyxcbitcdFx0XHRcdCAgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHBoeWRldiwgXCJ0eC1pbnRlcm5hbC1kZWxheS1wc1wiKSk7XG4rXHRcdG1hc2sgfD0gREFQODIxMVJfUkdNSUlfVFhfREVMX01BU0s7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiVW5zdXBwb3J0ZWQgaW50ZXJmYWNlOiAlZFxcblwiLFxuK1x0XHRcdCAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGh5ZGV2X25vZGUsIFwidHgtdXNlLWludmVydGVkLWNsa1wiKSlcbitcdFx0c2V0IHw9IERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQ7XG4rXG4rXHRtYXNrIHw9IERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQ7XG4rXG4rXHRyZXQgPSBkYXA4MjExcl9tb2RpZnlfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTiwgREFQODIxMVJfUEhZX1NXX1JTVCwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogV2FpdCBmb3IgcmVzZXQgc2VsZi1jbGVhciAqL1xuK1x0ZnNsZWVwKDIwMCk7XG4rXG4rXHRyZXQgPSBkYXA4MjExcl9tb2RpZnlfZXh0KHBoeWRldiwgREFQODIxMVJfUkdNSUlfQ09OLCBtYXNrLCBzZXQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBoeWRldl9kYmcocGh5ZGV2LCBcIlJHTUlJIGNvbmZpZ3VyZWQ6IGludGVyZmFjZT0lZCwgbWFzaz0weCUwNHgsIHNldD0weCUwNHhcXG5cIixcbitcdFx0ICAgcGh5ZGV2LVx1MDAzZWludGVyZmFjZSwgbWFzaywgc2V0KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfRlMpXG4rXG4rLyoqXG4rICogaW5mb19zaG93KCkgLSBTaG93IFBIWSBzdGF0dXMgaW5mb3JtYXRpb25cbisgKiBAc2Y6IFNlcXVlbmNlIGZpbGUgc3RydWN0dXJlXG4rICogQGRhdGE6IFByaXZhdGUgZGF0YSAoc3RydWN0IGRhcDgyMTFyX3ByaXYgKilcbisgKlxuKyAqIERpc3BsYXlzIFBIWSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIGZvciBkZWJ1Z2dpbmcuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cdTAwM2VkZXYpO1xuK1x0aW50IHZhbDtcbitcbitcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTik7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0c2VxX3ByaW50ZihzZiwgXCJQSFlfQ09OOiAweCUwNHhcXG5cIiwgdmFsKTtcbitcdHNlcV9wcmludGYoc2YsIFwiICBMRE8gZW5hYmxlZDogJXNcXG5cIiwgRklFTERfR0VUKERBUDgyMTFSX1BIWV9MRE9fRU4sIHZhbCkgID9cbitcdFx0ICAgXCJ5ZXNcIiA6IFwibm9cIik7XG4rXHRzZXFfcHJpbnRmKHNmLCBcIiAgUlggZGx5IGVuOiAlc1xcblwiLCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX1JYX0RMWSwgdmFsKSA/XG4rXHRcdCAgIFwieWVzXCIgOiBcIm5vXCIpO1xuK1x0c2VxX3ByaW50ZihzZiwgXCIgIFJYIGNrbCBnYXRpbmc6ICVzXFxuXCIsIEZJRUxEX0dFVChEQVA4MjExUl9QSFlfR0FURV9SWF9DTEssIHZhbCkgP1xuK1x0XHQgICBcInllc1wiIDogXCJub1wiKTtcbitcbitcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUkdNSUlfQ09OKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiB2YWw7XG4rXG4rXHRzZXFfcHJpbnRmKHNmLCBcIlJHTUlJX0NPTjogMHglMDR4XFxuXCIsIHZhbCk7XG4rXHRzZXFfcHJpbnRmKHNmLCBcIiAgVFggZGVsYXkgaWR4OiAlbHhcXG5cIiwgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLLCB2YWwpKTtcbitcdHNlcV9wcmludGYoc2YsIFwiICBSWCBkZWxheSBpZHg6ICVseFxcblwiLCBGSUVMRF9HRVQoREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0ssIHZhbCkpO1xuK1x0c2VxX3ByaW50ZihzZiwgXCIgIENMSyBpbnZlcnQ6ICVzXFxuXCIsIEZJRUxEX0dFVChEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJULCB2YWwpID9cbitcdFx0ICAgXCJ5ZXNcIiA6IFwibm9cIik7XG4rXG4rXHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTVNSKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiB2YWw7XG4rXG4rXHRzZXFfcHJpbnRmKHNmLCBcIkJNU1I6IDB4JTA0eFxcblwiLCB2YWwpO1xuK1x0c2VxX3ByaW50ZihzZiwgXCIgIExpbms6ICVzXFxuXCIsIEZJRUxEX0dFVChCTVNSX0xTVEFUVVMsIHZhbCkgP1xuK1x0XHQgICBcInVwXCIgOiBcImRvd25cIik7XG4rXHRzZXFfcHJpbnRmKHNmLCBcIiAgQU4gY29tcGxldGU6ICVzXFxuXCIsIEZJRUxEX0dFVChCTVNSX0FORUdDT01QTEVURSwgdmFsKSA/XG4rXHRcdCAgIFwieWVzXCIgOiBcIm5vXCIpO1xuK1xuK1x0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0aWYgKEZJRUxEX0dFVChEQVA4MjExUl9QS0dfR0VOX0VOLCB2YWwpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIEZJRUxEX0dFVChEQVA4MjExUl9QS0dfQ0hLX0VOLCB2YWwpKVxuK1x0XHRzZXFfcHV0cyhzZiwgXCJXQVJOSU5HOiBQYWNrYWdlIEdlbmVyYXRpbmcgZW5hYmxlZFxcblwiKTtcbitcbitcdHJldHVybiAwO1xuK31cbitERUZJTkVfU0hPV19BVFRSSUJVVEUoaW5mbyk7XG4rXG4rLyoqXG4rICogcGtnX2dlbl9zaG93KCkgLSBTaG93IHBhY2tldCBnZW5lcmF0b3Igc3RhdHVzXG4rICogQHNmOiBTZXF1ZW5jZSBmaWxlIHN0cnVjdHVyZVxuKyAqIEBkYXRhOiBQcml2YXRlIGRhdGEgKHN0cnVjdCBkYXA4MjExcl9wcml2ICopXG4rICpcbisgKiBEaXNwbGF5cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IsXG4rICogaW5jbHVkaW5nIENSQyBjb3JydXB0aW9uIGFuZCBsb29wYmFjayBzZXR0aW5ncy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCBwa2dfZ2VuX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdiA9IHNmLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVx1MDAzZWRldik7XG4rXHRpbnQgdmFsO1xuK1xuK1x0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0c2VxX3B1dHMoc2YsIFwiUGFja2FnZSBHZW5lcmF0aW5nOiBcIik7XG4rXHRpZiAoRklFTERfR0VUKERBUDgyMTFSX1BLR19HRU5fRU4sIHZhbCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgRklFTERfR0VUKERBUDgyMTFSX1BLR19DSEtfRU4sIHZhbCkpXG4rXHRcdHNlcV9wdXRzKHNmLCBcImVuYWJsZWRcXG5cIik7XG4rXHRlbHNlXG4rXHRcdHNlcV9wdXRzKHNmLCBcImRpc2FibGVkXFxuXCIpO1xuK1xuK1x0c2VxX3ByaW50ZihzZiwgXCJDUkMgY29ycnVwdGlvbiBlbjogJXNcXG5cIiwgRklFTERfR0VUKERBUDgyMTFSX1BLR19DT1JfQ1JDLCB2YWwpID9cbitcdFx0ICAgXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCIpO1xuK1xuK1x0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0c2VxX3ByaW50ZihzZiwgXCJMb29wYmFjayBlbjogJXNcXG5cIiwgRklFTERfR0VUKEJNQ1JfTE9PUEJBQ0ssIHZhbCkgP1xuK1x0XHQgICBcImVuYWJsZWRcIiA6IFwiZGlzYWJsZWRcIik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogcGtnX2dlbl93cml0ZSgpIC0gRW5hYmxlL2Rpc2FibGUgcGFja2V0IGdlbmVyYXRvclxuKyAqIEBmaWxlOiBGaWxlIHN0cnVjdHVyZVxuKyAqIEB1c2VyX2J1ZjogVXNlciBzcGFjZSBidWZmZXJcbisgKiBAY291bnQ6IEJ1ZmZlciBzaXplXG4rICogQHBwb3M6IEZpbGUgcG9zaXRpb25cbisgKlxuKyAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IuXG4rICogQWxzbyBjb250cm9scyBsb29wYmFjayBhbmQgQ1JDIGNvcnJ1cHRpb24gdmlhIGRlYnVnZnMgZmxhZ3MuXG4rICpcbisgKiBOT1RFOiBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCB1c2UgZ2VucGh5X2xvb3BiYWNrKCkgaGVyZS5cbisgKiBnZW5waHlfbG9vcGJhY2soKSBkb2VzIGEgZnVsbCBCTUNSIG92ZXJ3cml0ZSAobWFzayA9IH4wKSBhbmRcbisgKiB3YWl0cyB1cCB0byA1MDAgbXMgZm9yIGxpbmsgaW4gbG9vcGJhY2sgbW9kZS4gVGhpcyBpcyB0b29cbisgKiBoZWF2eSBmb3IgYSBkaWFnbm9zdGljIHBhY2tldCBnZW5lcmF0b3I6XG4rICpcbisgKiAtIEl0IGRlc3Ryb3lzIGFsbCBvdGhlciBCTUNSIHN0YXRlIChzcGVlZCwgZHVwbGV4LCBBTiBjb25maWcpLlxuKyAqIC0gVGhlIDUwMCBtcyBsaW5rIHBvbGwgaXMgdW5uZWNlc3Nhcnk6IHdlIGFscmVhZHkgaGF2ZSBhIGxpbmtcbisgKiAgIG9yIGFyZSBkZWxpYmVyYXRlbHkgc2V0dGluZyB1cCBhIHRlc3QgY29uZGl0aW9uLlxuKyAqIC0gV2Ugd2FudCB0byBtaW5pbWl6ZSBjaGFuZ2VzIHRvIEJNQ1IgZHVyaW5nIGRlYnVnZ2luZy5cbisgKlxuKyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IHBrZ19nZW5fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4rXHRcdFx0ICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXG4rXHRcdFx0ICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbit7XG4rXHRzdHJ1Y3Qgc2VxX2ZpbGUgKnNmID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdiA9IHNmLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVx1MDAzZWRldik7XG4rXHRib29sIGVuO1xuK1x0dTE2IG1hc2ssIHNldCwgc2V0X2JtY3I7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0ga3N0cnRvYm9vbF9mcm9tX3VzZXIodXNlcl9idWYsIGNvdW50LCBcdTAwMjZlbik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGVuKSB7XG4rXHRcdHNldCA9IERBUDgyMTFSX1BLR19HRU5fRU4gfCBEQVA4MjExUl9QS0dfQ0hLX0VOIHwgREFQODIxMVJfUEtHX1BMXzVBQTU7XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZWNyY19jb3IpXG4rXHRcdFx0c2V0IHw9IERBUDgyMTFSX1BLR19DT1JfQ1JDO1xuK1xuK1x0XHRpZiAocHJpdi1cdTAwM2Vsb29wYmFjaylcbitcdFx0XHRzZXRfYm1jciA9IEJNQ1JfTE9PUEJBQ0s7XG4rXHRcdGVsc2VcbitcdFx0XHRzZXRfYm1jciA9IEJNQ1JfQU5FTkFCTEU7XG4rXHR9IGVsc2Uge1xuK1x0XHRzZXQgPSBEQVA4MjExUl9QS0dfR0VOX01PREUgfCBEQVA4MjExUl9QS0dfR0FURV9FTjtcbitcdFx0c2V0X2JtY3IgPSBCTUNSX0FORU5BQkxFO1xuK1x0fVxuK1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLIHwgQk1DUl9BTkVOQUJMRSwgc2V0X2JtY3IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdG1hc2sgPSBEQVA4MjExUl9QS0dfR0VOX01BU0sgfCBEQVA4MjExUl9QS0dfUExfTUFTSyB8IERBUDgyMTFSX1BLR19DT1JfQ1JDO1xuK1x0cmV0ID0gZGFwODIxMXJfbW9kaWZ5X2V4dChwaHlkZXYsIERBUDgyMTFSX1BLR0M1LCBtYXNrLCBzZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0ssIDApO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIGNvdW50O1xuK31cbitERUZJTkVfU0hPV19TVE9SRV9BVFRSSUJVVEUocGtnX2dlbik7XG4rXG4rLyoqXG4rICogZGFwODIxMXJfZGVidWdfaW5pdCgpIC0gSW5pdGlhbGl6ZSBkZWJ1Z2ZzIGVudHJpZXNcbisgKiBAcHJpdjogUHJpdmF0ZSBkcml2ZXIgZGF0YVxuKyAqXG4rICogQ3JlYXRlcyBkZWJ1Z2ZzIGRpcmVjdG9yeSBhbmQgZmlsZXMgZm9yIFBIWSBkZWJ1Z2dpbmcuXG4rICogLSBpbmZvOiBQSFkgc3RhdHVzIGluZm9ybWF0aW9uXG4rICogLSBwa2dfZ2VuOiBFbmFibGUvZGlzYWJsZSBnZW5lcmF0b3IgKDEvMClcbisgKiAtIHBrZ19nZW5fY3JjX2NvcjogRW5hYmxlIENSQyBjb3JydXB0aW9uIChZL04pXG4rICogLSBwa2dfZ2VuX2xvb3BiYWNrOiBFbmFibGUgbG9vcGJhY2sgKFkvTilcbisgKlxuKyAqIERlYnVnZnMgaXMgb25seSBhdmFpbGFibGUgd2hlbiBDT05GSUdfREVCVUdfRlMgaXMgZW5hYmxlZC5cbisgKi9cbitzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KVxuK3tcbitcdHByaXYtXHUwMDNlcm9vdF9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUocHJpdi1cdTAwM2VkZXYpLCBOVUxMKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2Vyb290X2RpcikpXG4rXHRcdHJldHVybjtcbitcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJpbmZvXCIsIDA0NDQsIHByaXYtXHUwMDNlcm9vdF9kaXIsIHByaXYsXG4rXHRcdFx0ICAgIFx1MDAyNmluZm9fZm9wcyk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwicGtnX2dlblwiLCAwNjQ0LCBwcml2LVx1MDAzZXJvb3RfZGlyLCBwcml2LFxuK1x0XHRcdCAgICBcdTAwMjZwa2dfZ2VuX2ZvcHMpO1xuK1x0ZGVidWdmc19jcmVhdGVfYm9vbChcInBrZ19nZW5fY3JjX2NvclwiLCAwNjQ0LCBwcml2LVx1MDAzZXJvb3RfZGlyLFxuK1x0XHRcdCAgICBcdTAwMjZwcml2LVx1MDAzZWNyY19jb3IpO1xuK1x0ZGVidWdmc19jcmVhdGVfYm9vbChcInBrZ19nZW5fbG9vcGJhY2tcIiwgMDY0NCwgcHJpdi1cdTAwM2Vyb290X2RpcixcbitcdFx0XHQgICAgXHUwMDI2cHJpdi1cdTAwM2Vsb29wYmFjayk7XG4rfVxuK1xuKy8qKlxuKyAqIGRhcDgyMTFyX2RlYnVnX3JlbW92ZSgpIC0gUmVtb3ZlIGRlYnVnZnMgZW50cmllc1xuKyAqIEBwcml2OiBQcml2YXRlIGRyaXZlciBkYXRhXG4rICpcbisgKiBSZWN1cnNpdmVseSByZW1vdmVzIGFsbCBkZWJ1Z2ZzIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBjcmVhdGVkXG4rICogYnkgZGFwODIxMXJfZGVidWdfaW5pdCgpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdilcbit7XG4rXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocHJpdi1cdTAwM2Vyb290X2Rpcik7XG4rfVxuK1xuKyNlbHNlIC8qICFDT05GSUdfREVCVUdfRlMgKi9cbitzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KSB7fVxuK3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cbisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovXG4rXG4rLyoqXG4rICogZGFwODIxMXJfcHJvYmUoKSAtIFBIWSBwcm9iZSBjYWxsYmFja1xuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4rICpcbisgKiBDYWxsZWQgd2hlbiB0aGUgUEhZIGlzIGRpc2NvdmVyZWQuIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXNcbisgKiBwcml2YXRlIGRyaXZlciBkYXRhIGFuZCBkZWJ1Z2ZzIGVudHJpZXMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgZGFwODIxMXJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdjtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwcml2LVx1MDAzZWRldiA9IGRldjtcbitcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdGRhcDgyMTFyX2RlYnVnX2luaXQocHJpdik7XG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCJEQVA4MjExUiBQSFkgcHJvYmVkXFxuXCIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIGRhcDgyMTFyX3JlbW92ZSgpIC0gUEhZIHJlbW92ZSBjYWxsYmFja1xuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4rICpcbisgKiBDYWxsZWQgd2hlbiB0aGUgUEhZIGlzIHJlbW92ZWQuIENsZWFucyB1cCBwcml2YXRlIGRyaXZlciBkYXRhXG4rICogYW5kIGRlYnVnZnMgZW50cmllcy5cbisgKi9cbitzdGF0aWMgdm9pZCBkYXA4MjExcl9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRkYXA4MjExcl9kZWJ1Z19yZW1vdmUocGh5ZGV2LVx1MDAzZXByaXYpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZGFwODIxMXJfZHJpdmVyW10gPSB7XG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChEQVA4MjExUl9QSFlfSUQpLFxuK1x0XHQubmFtZVx0XHQ9IFwiREFQODIxMVIgR2lnYWJpdCBFdGhlcm5ldFwiLFxuK1x0XHQucHJvYmUgICAgICAgICAgPSBkYXA4MjExcl9wcm9iZSxcbitcdFx0LnJlbW92ZVx0XHQ9IGRhcDgyMTFyX3JlbW92ZSxcbitcdFx0LmNvbmZpZ19pbml0XHQ9IGRhcDgyMTFyX2NvbmZpZ19pbml0LFxuK1x0XHQucmVhZF9zdGF0dXNcdD0gZ2VucGh5X3JlYWRfc3RhdHVzLFxuK1x0XHQuc2V0X2xvb3BiYWNrXHQ9IGdlbnBoeV9sb29wYmFjayxcbitcdFx0LmNvbmZpZ19hbmVnXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcbitcdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuK1x0fSxcbit9O1xuK21vZHVsZV9waHlfZHJpdmVyKGRhcDgyMTFyX2RyaXZlcik7XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiREFQODIxMVIgR2lnYWJpdCBFdGhlcm5ldCBQSFkgZHJpdmVyXCIpO1xuK01PRFVMRV9BVVRIT1IoXCJBcnRlbSBTaGlta28gXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGRhcDgyMTFyX3RiW10gPSB7XG4rXHR7IERBUDgyMTFSX1BIWV9JRCwgREFQODIxMVJfUEhZX0lEX01BU0sgfSxcbitcdHsgLyogc2VudGluZWwgKi8gfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBkYXA4MjExcl90Yik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMjo0OC4wNjcwMzg3MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA3MDc4NjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUaG91Z2h0cyBvbiBQcm9iaW5nIHRoZSBOZXcgREFQODIxMVIgUEhZIERyaXZlciBpbiBhIEZ1enppbmcgQ29udGV4dCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG5ldyBQSFkgZHJpdmVyLCBgZGFwODIxMXIuY2AsIGZvciB0aGUgREFQVSBUZWxlY29tIERBUDgyMTFSKEkpIEdpZ2FiaXQgRXRoZXJuZXQgUEhZLiBJdCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGltcGxlbWVudHMgdGhlIHN0YW5kYXJkIHByb2JlLCByZW1vdmUsIGFuZCBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucywgYW5kIGV2ZW4gYWRkcyBkZWJ1Z2ZzIGVudHJpZXMgaWYgYENPTkZJR19ERUJVR19GU2AgaXMgZW5hYmxlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIHJlYWNoZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBjYW4gd2UgcmVhY2ggdGhpcyBkcml2ZXIgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50IGxpa2Ugc3l6a2FsbGVyP1xuXG5QSFkgZHJpdmVycyBhcmUgdHlwaWNhbGx5IHByb2JlZCBlaXRoZXIgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIHJlZ2lzdGVycyBhIFBIWSwgb3IgdGhyb3VnaCBhbiBNRElPIGJ1cyBzY2FuLiBJbiBzeXprYWxsZXIsIHdlIGNvdWxkIHBvdGVudGlhbGx5IGluamVjdCBNRElPIGRldmljZXMgZGlyZWN0bHksIG9yIG1heWJlIGV2ZW4gdXNlIGEgZHVtbXkgbmV0d29yayBkZXZpY2UgdGhhdCByZWdpc3RlcnMgYSBQSFkuIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgbmV0d29yayBmdXp6aW5nIGNhcGFiaWxpdGllcyBhbHJlYWR5LCBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgLCBidXQgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGlzIFBIWSwgd2UnZCBwcm9iYWJseSBiZSBsb29raW5nIGF0IGBpb2N0bChTSU9DU01JSVJFRylgIGNhbGxzLCBvciBwZXJoYXBzIGludGVyYWN0aW5nIHRocm91Z2ggbmV0bGluaywgYXNzdW1pbmcgYSBzdWl0YWJsZSBuZXRsaW5rIGludGVyZmFjZSBpcyBhdmFpbGFibGUuIE9yLCB0aGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggbWlnaHQgYmUgdG8gcHJvYmUgaXQgdmlhIHRoZSBNRElPIGJ1cyBpZiB3ZSBoYXZlIGEgbW9jayBNRElPIGJ1cy5cblxuTm93LCBzeXprYWxsZXIgaGFzIHByb3ZlbiBpdHNlbGYgY2FwYWJsZSB3aXRoIGB2a21zYCBmb3IgRFJNIGFuZCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBzbyBkb2VzIGl0IGhhdmUgYSB3YXkgdG8gcHJvYmUgYXJiaXRyYXJ5IFBIWSBkcml2ZXJzPyBDYW4gd2UgY3JlYXRlIGEgdmlydHVhbCBNRElPIGJ1cz8gT3IsIHdvdWxkIHVzaW5nIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgKGBkc2FgKSBiZSBhIHBhdGggdG93YXJkIHByb2JpbmcgdGhpcyBkcml2ZXI/IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZ1enogdGhlIGBtZGlvYCBidXMuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgKnRyaWdnZXIqIGBkYXA4MjExcl9wcm9iZWA/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIHRoZSBNRElPIGJ1cyBleHBvc2VzIGEgd2F5IHRvIGNyZWF0ZSBkZXZpY2VzIGZyb20gdXNlcnNwYWNlLCBvciB0byBzZWUgaWYgYW55IGV4aXN0aW5nIFBIWSBmdXp6ZXJzIGNhbiBiZSByZXB1cnBvc2VkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNlYXJjaCBmb3IgYG1kaW9gIGFuZCBgcGh5YCB0byBpZGVudGlmeSBhbnkgcmVsZXZhbnQgaW5zdGFudGlhdGlvbiBtZWNoYW5pc21zLlxuXG5UaGlua2luZyBhYm91dCBpdCwgc3l6a2FsbGVyICpjYW4qIGxvYWQgbW9kdWxlcy4gSWYgdGhlcmUncyBhIGRldmljZSB0cmVlIG92ZXJsYXksIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBpdCAqbWlnaHQqIHByb2JlIGl0IGF1dG9tYXRpY2FsbHkuIEhvd2V2ZXIsIHN5emthbGxlciBkb2Vzbid0IHVzdWFsbHkgaGFuZGxlIERUIG92ZXJsYXlzIHVubGVzcyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZCBmb3IgaXQsIHNvIHRoYXTigJlzIHByb2JhYmx5IG5vdCB0aGUgc3RhbmRhcmQgcGF0aC4gSSBzZWUgbm93IHRoYXQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYCBzZWVtcyB0byBiZSByZWxldmFudC5cblxuSG9sZCBvbiwgc3l6a2FsbGVyIGNhbiB1c2UgYGlvY3RsKFNJT0NTTUlJUkVHKWAgdG8gaW50ZXJhY3Qgd2l0aCBQSFlzLCBidXQgdGhhdCBhc3N1bWVzIHRoZSBQSFkgZGV2aWNlIGFscmVhZHkgKmV4aXN0cyouIFNvIHRoYXQgZ2V0cyB1cyBiYWNrIHRvOiBjYW4gd2UgY3JlYXRlIHRoaXMgUEhZIGRldmljZSBkeW5hbWljYWxseT8gSSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gdmVyaWZ5IHRoYXQgYGRhcDgyMTFyX3Byb2JlYCBjYW4gYmUgcmVhY2hlZC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgYSBzdWNjZXNzZnVsIGZ1enppbmcgY2FtcGFpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTM0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjI6NTguMTM3ODM2NDE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg4OTk1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFwODIxMXJfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9NDc4PXN0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ4MS0vKipcXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0ODI6ICogZGFwODIxMXJfcHJvYmUoKSAtIFBIWSBwcm9iZSBjYWxsYmFja1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ4My0gKiBAcGh5ZGV2OiBQSFkgZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDg5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjQ5MDpzdGF0aWMgaW50IGRhcDgyMTFyX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDkxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jPTUyMD1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZGFwODIxMXJfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MjMtXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJEQVA4MjExUiBHaWdhYml0IEV0aGVybmV0XFxcIixcXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1MjQ6XFx0XFx0LnByb2JlICAgICAgICAgID0gZGFwODIxMXJfcHJvYmUsXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNTI1LVxcdFxcdC5yZW1vdmVcXHRcXHQ9IGRhcDgyMTFyX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6MDIuNjI2NzQxNjQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3MzcwNTYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQcm9iaW5nIFBIWSBEcml2ZXJzIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIHdvbmRlcmluZyBpZiBzeXprYWxsZXIgY2FuIGFjdHVhbGx5IGdldCBhdCB0aG9zZSBQSFkgZHJpdmVycy4gSXQgc2VlbXMgbGlrZSB0aGUgdXN1YWwgd2F5cyBhIFBIWSBkcml2ZXIgaXMgbG9hZGVkIOKAkyBlaXRoZXIgdGhyb3VnaCBhbiBNRElPIGJ1cyBzY2FuIGFuZCBtYXRjaGluZyBJRCwgb3IgYnkgYSBEZXZpY2UgVHJlZSBub2RlIHNwZWNpZnlpbmcgdGhlIFBIWSDigJMgcHJvYmFibHkgd29uJ3Qgd29yayBpbiBhIFFFTVUtbGlrZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0ZWQgTURJTyBidXMgd2l0aCB0aGF0ICpleGFjdCogSUQsIG9yIHNvbWUgY2xldmVyIHNvZnR3YXJlIHJlZ2lzdHJhdGlvbiBtZXRob2QsIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBqdXN0IG5vdCBnb2luZyB0byBnZXQgY2FsbGVkLCByaWdodD8gSG1tLCBsZXQncyBzZWUuLi4gYXJlIHRoZXJlIGFueSBvcHRpb25zIGxpa2UgYGRzYV9sb29wYCwgYGZpeGVkLXBoeWAsIG9yIHRoYXQgYG1kaW8tbW9ja2AgdGhpbmc/IE1heWJlIHRoZXJlJ3Mgc29tZSBraW5kIG9mIG1vY2sgTURJTyBidXMgaW1wbGVtZW50YXRpb24gSSBjYW4gbGV2ZXJhZ2UuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUncyBhIGdvb2Qgd2F5IHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiBuZWVkZWQgdG8gZ2V0IHRoZXNlIGRyaXZlcnMgdG8gbG9hZC4gTGV0IG1lIGxvb2sgZm9yIGEgbW9jayBNRElPIGJ1cyBvciBzb21ldGhpbmcgc2ltaWxhciB0byBzZWUgd2hhdCdzIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NTgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6MDcuNzAwNDQ5NzI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzYyNzA2OTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKm1vY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE3OjIzOjEwLjI3NjczMzYzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODQ4NTg5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIFVzZXJzcGFjZSBQSFkgRGV2aWNlIFJlZ2lzdHJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcHJvYmUgd2hldGhlciBpdCdzIGFjdHVhbGx5IHBvc3NpYmxlIHRvIHJlZ2lzdGVyIGEgUEhZIGRldmljZSBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVHJhZGl0aW9uYWxseSwgUEhZIGRldmljZSBtYW5hZ2VtZW50IGhhcyBiZWVuIGZpcm1seSByb290ZWQgaW4gdGhlIGtlcm5lbCwgcHJpbWFyaWx5IGR1ZSB0byB0aGUgbmVlZCBmb3IgZGlyZWN0IGhhcmR3YXJlIGFjY2VzcywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgbWFuYWdpbmcgdGhlIGxvdy1sZXZlbCBjb21tdW5pY2F0aW9uIHByb3RvY29scyAoTURJTywgZXRjLikuIEhvd2V2ZXIsIHdpdGggdGhlIGV2b2x1dGlvbiBvZiBkcml2ZXJzIGFuZCBwb3RlbnRpYWwgZm9yIG1vcmUgYWJzdHJhY3RlZCBoYXJkd2FyZSBpbnRlcmZhY2VzLCBJJ20gY3VyaW91cyBpZiB0aGVyZSdzIGJlZW4gYW55IGFkdmFuY2VtZW50IGluIGFsbG93aW5nIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgdG8gcGFydGljaXBhdGUgaW4gdGhlIFBIWSBkZXZpY2UgbGlmZWN5Y2xlLiBNYXliZSB2aWEgYSB3ZWxsLWRlZmluZWQgQVBJIHRoYXQgcHJvdmlkZXMgc2FmZSBhbmQgY29udHJvbGxlZCBhY2Nlc3MgdG8gdGhlIG5lY2Vzc2FyeSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSdzIGEgbWVjaGFuaXNtLCBwZXJoYXBzIHRocm91Z2ggYSBjaGFyYWN0ZXIgZGV2aWNlLCBuZXRsaW5rIHNvY2tldCwgb3IgZXZlbiBhIG5ld2VyLCBtb3JlIHNvcGhpc3RpY2F0ZWQgaW50ZXJmYWNlIGxpa2UgVUlPIG9yIFZGSU8sIHRoYXQgd291bGQgZmFjaWxpdGF0ZSB0aGlzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBzZWN1cml0eSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudDsgaG93IHdvdWxkIHdlIGVuc3VyZSB0aGF0IGEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIGRvZXNuJ3QgaW5hZHZlcnRlbnRseSBpbnRlcmZlcmUgd2l0aCBvdGhlciBuZXR3b3JrIGludGVyZmFjZXMgb3IgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcz8gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHJlbGV2YW50IHN1YnN5c3RlbSBkcml2ZXJzLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb3IgZXhpc3RpbmcgbWVjaGFuaXNtcyB0aGF0IGNvdWxkIGJlIGV4dGVuZGVkIG9yIGFkYXB0ZWQgZm9yIHRoaXMgcHVycG9zZS4gSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBtaWdodCBpbnRlcmFjdCB3aXRoIGV4aXN0aW5nIG5ldHdvcmtpbmcgc3RhY2sgY29uZmlndXJhdGlvbnMsIGxpa2UgYm9uZGluZyBvciBicmlkZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMzQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMzoxNC43NjE1OTUxMjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NDQzMTgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9OTMxPXN0YXRpYyBpbnQgeGdiZV9waHlfZmluZF9waHlfZGV2aWNlKHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6OTc2OlxcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk3Ny1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5Nzg6XFx0XFx0bmV0ZGV2X2VycihwZGF0YS1cXHUwMDNlbmV0ZGV2LCBcXFwicGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc5LVxcdFxcdHBoeV9kZXZpY2VfZnJlZShwaHlkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYz03MTY9aG5zX21hY19yZWdpc3Rlcl9waHlkZXYoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBobnNfbWFjX2NiICptYWNfY2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0NC1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jOjc0NTpcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0Ni1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYz0xOTI5PXN0YXRpYyBpbnQgbmV0c2VjX3JlZ2lzdGVyX21kaW8oc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCB1MzIgcGh5X2FkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk4My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4NDpcXHRcXHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODUtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODgtXFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jOjE5ODk6XFx0XFx0XFx0XFx0XFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZXJyKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk5MC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9NDI9Zndub2RlX2ZpbmRfbWlpX3RpbWVzdGFtcGVyKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtNjktXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjcwOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy03MS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDMtXFx0ICovXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjEwNDpcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTA1LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTExNC19XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjExNTpFWFBPUlRfU1lNQk9MKGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTYtXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTQ5LVxcdFxcdC8qIEFsbCBkYXRhIGlzIG5vdyBzdG9yZWQgaW4gdGhlIHBoeSBzdHJ1Y3QsIHNvIHJlZ2lzdGVyIGl0ICovXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1MDpcXHRcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTUxLVxcdFxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1Ni1cXHR9IGVsc2UgaWYgKGlzX29mX25vZGUoY2hpbGQpKSB7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1NzpcXHRcXHRyYyA9IGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoYnVzLCBwaHksIGNoaWxkLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU4LVxcdFxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby14Z2VuZS5jPTI2Mz1zdHJ1Y3QgcGh5X2RldmljZSAqeGdlbmVfZW5ldF9waHlfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmMtMjcwLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby14Z2VuZS5jOjI3MTpcXHRpZiAocGh5X2RldmljZV9yZWdpc3RlcihwaHlfZGV2KSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8teGdlbmUuYy0yNzItXFx0XFx0cGh5X2RldmljZV9mcmVlKHBoeV9kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9MzI9c3RhdGljIGludCBvZl9nZXRfcGh5X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCB1MzIgKnBoeV9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM2LVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjM3OmludCBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzkte1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQwOlxcdHJldHVybiBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKG1kaW8sIHBoeSxcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00MS1cXHRcXHRcXHRcXHRcXHRcXHQgIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDMtfVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ0OkVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz0xMzE9c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2Mi1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTYzOlxcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQwOD1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00MzctXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDM4OlxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00MzktXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTk3LVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU5ODpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoYnVzLCBwaHksIGNoaWxkLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTktXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTAzPUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTA1LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwNjogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTA3LSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwOC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQxLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDI6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDgtICogVGhpcyBkb2Vzbid0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDk6ICogb2YgcGh5X2RldmljZV9yZWdpc3RlcigpLiBVc2UgcGh5X2RldmljZV9mcmVlKCkgdG8gZnJlZSB0aGUgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTUwLSAqIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yMDcwPXN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMDg1LVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMDg2OlxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjA4Ny1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIwODgtXFx0XFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIwODk6XFx0XFx0ZGV2X2VycihzZnAtXFx1MDAzZWRldiwgXFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIwOTAtXFx0XFx0XFx0RVJSX1BUUihlcnIpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfRldOT0RFX01ESU8pXFxuaW5jbHVkZS9saW51eC9md25vZGVfbWRpby5oOjEyOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaD0xNj1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmgtMTktI2Vsc2UgLyogQ09ORklHX0ZXTk9ERV9NRElPICovXFxuaW5jbHVkZS9saW51eC9md25vZGVfbWRpby5oOjIwOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0yMS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oPTQ5PWJvb2wgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucCk7XFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg6NTA6aW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC01MS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaD0xNDA9c3RhdGljIGlubGluZSBib29sIG9mX3BoeV9pc19maXhlZF9saW5rKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDQtXFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg6MTQ1OnN0YXRpYyBpbmxpbmUgaW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDYtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxNTk9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7XFxuaW5jbHVkZS9saW51eC9waHkuaDoyMTYwOmludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMjE2MS12b2lkIHBoeV9kZXZpY2VfZnJlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6MTYuODM2MDMxMTE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUwMTEwMTI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIEJ1cyBJbnZlc3RpZ2F0aW9uIGZvciBzeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBwb3RlbnRpYWxseSBsZXZlcmFnZSBzeXprYWxsZXIgdG8gcmVhY2ggdGhlIE1ESU8gYnVzLiBJIGtub3cgc3l6a2FsbGVyIGNhbiB1c2UgYGlvY3RsKFNJT0NTTUlJUkVHKWAgdG8gd3JpdGUgdG8gaXQsIHdoaWNoIGlzIGludHJpZ3VpbmcuIFRoZSBjYXRjaCwgb2YgY291cnNlLCBpcyB0aGF0IHRoZXJlIG5lZWRzIHRvICpiZSogYW4gTURJTyBidXMgcHJlc2VudC4gRG9lcyBzeXprYWxsZXIgYWxyZWFkeSBoYXZlIGEgd2F5IHRvIGVzdGFibGlzaCBvbmU/IEhtbSwgaXQgZG9lcyBoYXZlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBgc3l6X2luaXRfbmV0X3NvY2tldGAuIEFuZCwgaGV5LCB0aGVyZSdzIHNvbWUgZXZpZGVuY2Ugb2YgYG1kaW9gIGJ1cyBmdXp6aW5nIGluIHRoZSBjb2RlYmFzZSwgYnV0IG5vdGhpbmcgZXhwbGljaXQuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgY3JlYXRpbmcgYSBzY2VuYXJpbyB3aGVyZSBvbmUgZ2V0cyBjcmVhdGVkPyBJIGtub3cgYGRhcDgyMTFyX3Byb2JlYCBnZXRzIGNhbGxlZCBkdXJpbmcgYSBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbi4gTm93IHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICpmb3JjZSogYSBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmcm9tIHVzZXJzcGFjZT8gTm9wZSwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGlzbid0IGV4cG9zZWQuXG5cbk9rYXksIGJhY2sgdG8gdGhlIGRyYXdpbmcgYm9hcmQuIElzIHRoZXJlIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSB0aGF0ICptaWdodCogcmVnaXN0ZXIgYSBQSFk/IFRoaW5raW5nIGFib3V0IGBtYWNiYCwgYHhnYmVgLCBgaG5zYCwgYG5ldHNlY2AsIGFuZCBgZml4ZWRfcGh5YC4gQnV0LCB3YWl0LCBgZml4ZWRfcGh5YCBkZWZpbml0ZWx5IGNhbid0IGJlIHJlZ2lzdGVyZWQgZnJvbSB1c2Vyc3BhY2UuIFRoZW4gd2hhdCBhYm91dCBEU0E/IEkgcmVjYWxsIHRoYXQgRFNBIGNhbiBiZSBjb25maWd1cmVkIHZpYSBuZXRsaW5rIG9yIHN5c2ZzLCBidXQgdXBvbiBmdXJ0aGVyIHJlZmxlY3Rpb24sIGl0IGlzIGNvbmZpZ3VyZWQgdmlhIGRldmljZSB0cmVlLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2ssIHN5emthbGxlciBoYXMgYHN5el91c2JfY29ubmVjdGAuIENvdWxkIGEgVVNCIG5ldHdvcmsgYWRhcHRlciBnZXQgdXMgdGhlcmU/IEFyZSB0aGVyZSBhbnkgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIHRoYXQgdXNlIE1ESU8gYW5kIGNhbiBwcm9iZSBhcmJpdHJhcnkgUEhZcz8gWWVzISBJdCBhcHBlYXJzIHRoYXQgZHJpdmVycyBsaWtlIGBkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jYCwgYHNtc2M5NXh4LmNgLCBgYXNpeGAsIG9yIGBjZGNfZXRoZXJgIGNvdWxkIGJlIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgYW55IG9mIHRoZXNlIFVTQiBuZXR3b3JrIGRyaXZlcnMgcmVnaXN0ZXIgYW5kIHNjYW4gYW4gTURJTyBidXMuIFRoaXMgZmVlbHMgbGlrZSB0aGUgbW9zdCBwcm9taXNpbmcgYW5nbGUgYXQgdGhlIG1vbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MzQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6MjQuMzM3MTM0NDE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ2MTA1Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTI3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q9MzQ4PU1ESU9cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTAtICBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZSgpXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0OjM1MTogIGRldm1fbWRpb2J1c19yZWdpc3RlcigpXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0OjM1MjogIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcigpXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1My1cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0PTEyPWRldmljZSAodGhlIHNhbWUgb2JqZWN0cyB0aGF0IGFyZSByZWdpc3RlcmVkIHZpYVxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0OjEzOmBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KClgYCkuIE1BQy1zaWRlIGNvbm5lY3Rpb24gcHJvcGVydGllcyBzdWNoIGFzXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9tb3RvcmNvbW0teXQ4eHh4LXBoeS5yc3QtMTQtYGBwaHktaGFuZGxlYGAgYW5kIGBgcGh5LW1vZGVgYCBhcmUgZG9jdW1lbnRlZCBpbiBbYWNwaS1tZGlvLXBoeV1fLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0PTc9VGhlIFBIWXMgb24gYW4gTURJTyBidXMgW3BoeV0gYXJlIHByb2JlZCBhbmQgcmVnaXN0ZXJlZCB1c2luZ1xcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvcGh5LnJzdDo4OmZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeSgpLlxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvcGh5LnJzdC05LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q9NDA9cmVnaXN0ZXJlZCBhcyBhIGRpc3RpbmN0IGRldmljZS5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTU2LSAgIGRyaXZlciBuZWVkcywgc2V0dXAgdGhlIG1paV9idXMgc3RydWN0dXJlLCBhbmQgcmVnaXN0ZXIgd2l0aCB0aGUgUEFMIHVzaW5nXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q6NTc6ICAgbWRpb2J1c19yZWdpc3Rlci4gIFNpbWlsYXJseSwgdGhlcmUncyBhIHJlbW92ZSBmdW5jdGlvbiB0byB1bmRvIGFsbCBvZlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTU4LSAgIHRoYXQgKHVzZSBtZGlvYnVzX3VucmVnaXN0ZXIpLlxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYz0xMDk9c3RhdGljIGludCBlcDgyNDhlX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzMi1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jOjEzMzpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgb2ZkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzNC1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM9MjA3PXN0YXRpYyBpbnQgZ3Bpb19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQzLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jOjI0NDpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG5wKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYy0yNDUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jPTYwNz1zdGF0aWMgaW50IGJjbV9zZjJfbWRpb19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4My1cXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jOjY4NDpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXVzZXJfbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYy02ODUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jPTE4Nz1zdGF0aWMgaW50IGdzd2lwX21kaW8oc3RydWN0IGdzd2lwX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTMtXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM6MjE0OlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjE1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MzIxPXN0YXRpYyBpbnQga3N6OTQ3N19wY3NfY3JlYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDEtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MzQyOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYtXFx1MDAzZWRldiwgYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTIzMjE9aW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMzkyLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjIzOTM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5NC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jPTY4NT1zdGF0aWMgaW50IGxhbjkzN3hfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTUtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo3NTY6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yMzcxPW10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDA2LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyNDA3OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQwOC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz0zODM0PXN0YXRpYyBpbnQgbXY4OGU2eHh4X21kaW9fcmVnaXN0ZXIoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozODg4OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5Mi1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTQtXFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0xNDk9c3RhdGljIGludCBuZXRjX3BvcnRfY3JlYXRlX2VtZGlvX2J1cyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE3OS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoxODA6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0xODEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTk1Nz1zdGF0aWMgaW50IHZzYzk5NTlfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxMDE0OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTEwMTUtXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYz04Nzg9c3RhdGljIGludCB2c2M5OTUzX21kaW9fYnVzX2FsbG9jKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTAzLVxcdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0OlxcdHJjID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jLTkwNS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODEtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4My1cXHRvZl9ub2RlX3B1dChtbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ3PXFjYThrX21kaW9fcmVnaXN0ZXIoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODYtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTg3OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTg4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtOTktXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDMtXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0OlxcdHJldHVybiBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0NS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg9MzA3PXZvaWQgc2phMTEwNV9mcmFtZV9tZW1vcnlfcGFydGl0aW9uaW5nKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oOjMxMDppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMxMS12b2lkIHNqYTExMDVfbWRpb2J1c191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0zMDI2PXN0YXRpYyBpbnQgc2phMTEwNV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjMwNjg6XFx0cmMgPSBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MjU4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdHhfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzoyODg6XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDMtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0OlxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDUtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0zNjg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfcGNzX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zOTUtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6Mzk2OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5Ny1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTQzOT1zdGF0aWMgdm9pZCBzamExMTA1X21kaW9idXNfcGNzX3VucmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzo0NTk6aW50IHNqYTExMDVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz01OTU9eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTItXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjYxMzpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTQtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz03MjY9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDMtXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjc0NDpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDUtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jPTQ1OT1zdGF0aWMgaW50IGF4X21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00NzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM6NDc5OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXgtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ4MC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jPTEzMjE9c3RhdGljIGludCBvd2xfZW1hY19tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYzoxMzQ2OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXFx1MDAzZW1paSwgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jPTUwOT1zdGF0aWMgaW50IGFkaW4xMTEwX3JlZ2lzdGVyX21kaW9idXMoc3RydWN0IGFkaW4xMTEwX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM6NTMwOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUzMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYz0xMjkwPXN0YXRpYyBpbnQgZ3JldGhfbWRpb19pbml0KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jOjEzMDc6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihncmV0aC1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA4LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTM5MzE9c3RhdGljIGludCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYzo0MDI3OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI4LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYz0xMjE9c3RhdGljIGludCBhbHRlcmFfdHNlX21kaW9fY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jOjE1ODpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1OS1cXHRpZiAocmV0ICE9IDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9MTA2MT1zdGF0aWMgaW50IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM6MTIyMjpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF1cC1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIzLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9MzQyOD1zdGF0aWMgaW50IHhnYmVfcGh5X2luaXQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE3LVxcdHNucHJpbnRmKG1paS1cXHUwMDNlaWQsIHNpemVvZihtaWktXFx1MDAzZWlkKSwgXFxcIiVzXFxcIiwgZGV2X25hbWUocGRhdGEtXFx1MDAzZWRldikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcxODpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE5LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MjA6XFx0XFx0ZGV2X2VycihwZGF0YS1cXHUwMDNlZGV2LCBcXFwibWRpb2J1c19yZWdpc3RlciBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcyMS1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYz05OD1pbnQgeGdlX21kaW9fY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMTgtXFx0bWRpb19idXMtXFx1MDAzZXBoeV9tYXNrID0gMHgxO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM6MTE5OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTIwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTgzNz1pbnQgeGdlbmVfZW5ldF9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6ODg4OnN0YXRpYyBpbnQgeGdlbmVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWlpX2J1cyAqbWRpbylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTEzOlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTQtXFx0XFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMS1cXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkyMjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTkzOT1pbnQgeGdlbmVfZW5ldF9tZGlvX2NvbmZpZyhzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjk1ODpcXHRyZXQgPSB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLCBtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTktXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jPTEzMT1pbnQgYXJjX21kaW9fcHJvYmUoc3RydWN0IGFyY19lbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYzoxNzM6XFx0ZXJyb3IgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTc0LVxcdG9mX25vZGVfcHV0KG1kaW9fbm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYz05NjY9c3RhdGljIGludCBheDg4Nzk2Y19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYzoxMDExOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIGF4X2xvY2FsLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEyLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTY4Nz1zdGF0aWMgaW50IGFnNzF4eF9tZGlvX3Byb2JlKHN0cnVjdCBhZzcxeHggKmFnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjctXFx0bW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzo3Mjg6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyOS1cXHRvZl9ub2RlX3B1dChtbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI1OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjYwOlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI2MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYz0xNzEzPXN0YXRpYyBpbnQgYmNtX2VuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM6MTgzMDpcXHRcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgzMS1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYz0yMTE9c3RydWN0IG1paV9idXMgKmJjbWFfbWRpb19taWlfcmVnaXN0ZXIoc3RydWN0IGJnbWFjICpiZ21hYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYzoyMzY6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM3LVxcdG9mX25vZGVfcHV0KG5wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTE5Mz1pbnQgYmNtZ2VuZXRfbWlpX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIGluaXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzMtXFx0XFx0cGh5X25hbWUgPSBcXFwiZXh0ZXJuYWwgUnZNSUlcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjIzNDpcXHRcXHQvKiBvZl9tZGlvYnVzX3JlZ2lzdGVyIHRvb2sgY2FyZSBvZiByZWFkaW5nIHRoZSAnbWF4LXNwZWVkJ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzNS1cXHRcXHQgKiBQSFkgcHJvcGVydHkgZm9yIHVzLCBlZmZlY3RpdmVseSBsaW1pdGluZyB0aGUgUEhZIHN1cHBvcnRlZFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jPTIxNTc9c3RhdGljIGludCBzYm1hY19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsZGV2LCBsb25nIGxvbmcgYmFzZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI3LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMjI4OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoc2MtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI5LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE1MDU9c3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNTU4OlxcdGkgPSBtZGlvYnVzX3JlZ2lzdGVyKHRwLVxcdTAwM2VtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1OS1cXHRpZiAoaSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwOTc6c3RhdGljIGludCBtYWNiX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1hY2IgKmJwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNC1cXHRpZiAobWRpb19ucClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMDU6XFx0XFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMTk6XFx0XFx0XFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjAtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMjI6XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTExMjU9c3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE1OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExNTk6XFx0ZXJyID0gbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKGJwLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNjAtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM9MTEwNz1zdGF0aWMgaW50IGRtOTA1MV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBib2FyZF9pbmZvICpkYilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jOjExMjU6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgZGItXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTI0MjM9c3RhdGljIGludCB0c25lcF9tZGlvX2luaXQoc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6MjQ1NTpcXHRyZXR2YWwgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXFx1MDAzZW1kaW9idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM9MTAyND1zdGF0aWMgaW50IGV0aG9jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYzoxMjA4OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTczND1zdGF0aWMgaW50IGZ0Z21hYzEwMF9zZXR1cF9tZGlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYzoxNzcwOlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VkZXYsIHByaXYtXFx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc3MS1cXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jPTM2PXN0YXRpYyBpbnQgZW5ldGNfcGNpX21kaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYzo5MTpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZGV2LVxcdTAwM2VvZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTE2MD1zdGF0aWMgaW50IGVuZXRjX21kaW9fcHJvYmUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0xODYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjE4NzpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0xODgtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0yMDI9c3RhdGljIGludCBlbmV0Y19pbWRpb19jcmVhdGUoc3RydWN0IGVuZXRjX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0yMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjIzNzpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTIzOC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0zMDQyPXN0YXRpYyBpbnQgZmVjX2VuZXRfbWlpX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzE2MTpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGZlcC1cXHUwMDNlbWlpX2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jPTY1PXN0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jOjEwNjpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDctXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM9MTQ5PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYy0xNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoxNzY6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM9OTc9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYzoxNjc6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTQwOT1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6NDk0OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jPTM3MT1zdGF0aWMgaW50IHhnbWFjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI2LVxcdGlmIChpc19vZl9ub2RlKGZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjc6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHRvX29mX25vZGUoZndub2RlKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjgtXFx0ZWxzZSBpZiAoaXNfYWNwaV9ub2RlKGZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjk6XFx0XFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZndub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQzMC1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jPTI2Nj1pbnQgaGJnX21kaW9faW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI5MjpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYz0xMDk0PXN0YXRpYyBpbnQgaGl4NWhkMl9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYzoxMTg2OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0xMjM9aW50IGhjbGdlX21hY19tZGlvX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTQtXFx0bWRpb19idXMtXFx1MDAzZXBoeV9tYXNrID0gfigxVSBcXHUwMDNjXFx1MDAzYyBtYWMtXFx1MDAzZXBoeV9hZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jOjE1NTpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYz00OTU9c3RhdGljIGludCBobnNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU4NDpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01ODUtXFx0fSBlbHNlIGlmIChpc19hY3BpX25vZGUocGRldi1cXHUwMDNlZGV2LmZ3bm9kZSkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5Mi1cXHRcXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1OTM6XFx0XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTQtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYz0yNTYwPXN0YXRpYyBpbnQgZW1hY19kdF9tZGlvX3Byb2JlKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4NC1cXHRzbnByaW50ZihidXMtXFx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFxcXCIlc1xcXCIsIGRldi1cXHUwMDNlb2ZkZXYtXFx1MDAzZW5hbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYzoyNTg1OlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2ZGV2LVxcdTAwM2VvZmRldi1cXHUwMDNlZGV2LCBidXMsIG1paV9ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODYtXFx0aWYgKHJlcykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MTAyNj1pbnQgaXhnYmVfbWlpX2J1c19pbml0KHN0cnVjdCBpeGdiZV9odyAqaHcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDg4LVxcdGFkYXB0ZXItXFx1MDAzZW1paV9idXMgPSBidXM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MTA4OTpcXHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwOTAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYz0zODU9bHRxX2V0b3BfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwMi1cXHRcXHQgcHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlbmFtZSwgcHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM6NDAzOlxcdGlmIChtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1paV9idXMpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDQtXFx0XFx0ZXJyID0gLUVOWElPO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYz0yODM9c3RhdGljIGludCBvcmlvbl9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4MS1cXHQvKiBGb3IgdGhlIHBsYXRmb3JtcyBub3Qgc3VwcG9ydGluZyBEVC9BQ1BJIGZhbGwtYmFja1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6MzgyOlxcdCAqIHRvIG1kaW9idXNfcmVnaXN0ZXIgdmlhIG9mX21kaW9idXNfcmVnaXN0ZXIuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODMtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODQtXFx0aWYgKGlzX2FjcGlfbm9kZShwZGV2LVxcdTAwM2VkZXYuZndub2RlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NTpcXHRcXHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LVxcdTAwM2VkZXYuZndub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4Ni1cXHRlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODc6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4OC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM9MTM4Nz1zdGF0aWMgaW50IHB4YTE2OF9ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDQtXFx0cGVwLVxcdTAwM2VzbWlfYnVzLVxcdTAwM2VwaHlfbWFzayA9IDB4ZmZmZmZmZmY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM6MTUwNTpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHBlcC1cXHUwMDNlc21pX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtMTUwNi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz05OTg9c3RhdGljIGludCBtdGtfbWRpb19pbml0KHN0cnVjdCBtdGtfZXRoICpldGgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzctXFx0ZGV2X2RiZyhldGgtXFx1MDAzZWRldiwgXFxcIk1EQyBpcyBydW5uaW5nIG9uICVkIEh6XFxcXG5cXFwiLCBNRENfTUFYX0ZSRVEgLyBldGgtXFx1MDAzZW1kY19kaXZpZGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjEwMzg6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihldGgtXFx1MDAzZW1paV9idXMsIG1paV9ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0xMDM5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jPTE0MjI9c3RhdGljIGludCBtdGtfc3Rhcl9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM6MTQ0ODpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBwcml2LVxcdTAwM2VtaWksIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jPTI4Nz1pbnQgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBtbHhiZl9naWdlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYy0zMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYzozMzM6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzNC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM9MjUzPWludCBmYm5pY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYy0yNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM6MjczOlxcdGVyciA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihmYmQtXFx1MDAzZWRldiwgYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYy0yNzQtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYz0xMDM2PXN0YXRpYyBpbnQga3M4ODUxX3JlZ2lzdGVyX21kaW9idXMoc3RydWN0IGtzODg1MV9uZXQgKmtzLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDUzOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDU0LVxcdGlmIChyZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDU1OlxcdFxcdGdvdG8gZXJyX21kaW9idXNfcmVnaXN0ZXI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDU2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDYwLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMzoyNi4yODMyNTAyMjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxMjI3NjU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIE1ESU8gQnVzIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYSBmZXcgTURJTyBidXMtcmVsYXRlZCBmdW5jdGlvbnMg4oCTIGBmYm5pY19tZGlvYnVzX2NyZWF0ZWAsIGBtbHhiZl9naWdlX21kaW9fcHJvYmVgLCBgbXRrX3N0YXJfbWRpb19pbml0YCwgYW5kIHNvIG9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGNhbiB3ZSBidWlsZCBhbiBNRElPIGJ1cyBkcml2ZXIgZnJvbSB1c2VyIHNwYWNlPyBUaGlzIGlzIGEgcXVlc3Rpb24gSSBvZnRlbiBjb25zaWRlciB3aGVuIHJldmlld2luZyBkcml2ZXIgYXJjaGl0ZWN0dXJlcyBmb3IgZmxleGliaWxpdHkgYW5kIHBvdGVudGlhbCBvZmZsb2FkaW5nLlxuXG5UaGUgZGlyZWN0aW9uIEknbSB0YWtpbmcgaXMgZ3VpZGVkIGJ5IHRoZSBkZXNpcmUgdG8gaWRlbnRpZnkgYSBkcml2ZXIgdG8gbG9vayBpbnRvIHRvIHNhdGlzZnkgdGhhdCBjb25jZXJuLiBJIHJlY2FsbCBzZWVpbmcgYGRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmNgIHV0aWxpemUgYG1kaW9idXNfcmVnaXN0ZXJgLCB3aGljaCBpbXBsaWVzIGl0IGlzIGEgYnVzIGl0c2VsZiwgYW5kIG5vdCBhIGRldmljZS4gQmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4sIGl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIExldCdzIGRlbHZlIGludG8gYGxhbjc4eHguY2AgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGl0IGNhbiBvZmZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNDQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMzozMS40OTU1MjkxNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTA3MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA5MT1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb19pbml0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIxLVxcdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEyMjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlbWRpb2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIzLVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0MjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6MzEuNTUwNjQxNTcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzOTE4OTQ2NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGBkYXA4MjExcl9wcm9iZWAgVGhyb3VnaCBVU0IgRnV6emluZzogQSBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBhbmQgaXQgbG9va3MgbGlrZSBgc21zYzk1eHhgLCBgbGFuNzh4eGAsIGBheDg4MTcyYWAsIGFuZCBgYXNpeF9kZXZpY2VzYCBhbGwgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQncyBrZXkuIFdoZW4gdGhleSBkbywgYG1kaW9idXNfcmVnaXN0ZXJgIHNjYW5zIGl0LiBOb3csIGlmIHdlIGNhbiBlbXVsYXRlIGEgVVNCIGRldmljZSwgYW5kIGBzeXprYWxsZXJgICpjYW4qIGRvIHRoYXQgdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLCB3ZSBjYW4gZmVlZCBpdCBhcmJpdHJhcnkgcmVzcG9uc2VzIHRvIE1ESU8gcmVhZHMuXG5cbkhlcmUncyB0aGUgdHJpY2s6IElmIHRoZSBVU0IgZGV2aWNlIHJlc3BvbmRzIHRvIGFuIE1ESU8gcmVhZCBvbiBhZGRyZXNzIFggd2l0aCB0aGUgUEhZIElEIG9mIERBUDgyMTFSICh0aGF0J3MgYDB4MDAwODAxMUJgKSwgYG1kaW9idXNfc2NhbmAgd2lsbCBwaWNrIGl0IHVwLCBhbGxvY2F0ZSBhIGBwaHlfZGV2aWNlYCwgYW5kIHJlZ2lzdGVyIGl0LiBUaGVuLCB0aGUgZHJpdmVyIGNvcmUgd2lsbCBtYXRjaCB0aGF0IFBIWSBJRCBhbmQgcHJvYmUgdGhlIGBkYXA4MjExcl9kcml2ZXJgLiBUaGVyZWZvcmUsIGBkYXA4MjExcl9wcm9iZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB2aWEgVVNCIGZ1enppbmchXG5cbldhaXQsIHRob3VnaCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgREFQODIxMVJfUEhZYCBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBBaCwgdGhlIHBhdGNoICphZGRzKiBgY29uZmlnIERBUDgyMTFSX1BIWWAuIFRoYXQncyBpdCEgV2UgbmVlZCB0byBlbmFibGUgaXQsIHNvLCBgRW5hYmxlQ29uZmlnczogW1wiREFQODIxMVJfUEhZXCJdYC4gR290IGl0LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGRyaXZlciBjb2RlIGFuZCBzZWUgd2hhdCBmdW5jdGlvbnMgd2Ugc2hvdWxkIGZvY3VzIG9uLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB3ZSBoYXZlIGBkYXA4MjExcl9wcm9iZWAsIGBkYXA4MjExcl9yZW1vdmVgLCBgZGFwODIxMXJfY29uZmlnX2luaXRgLCBgaW5mb19zaG93YCwgYHBrZ19nZW5fc2hvd2AsIGFuZCBgcGtnX2dlbl93cml0ZWAuXG5cbldhaXQsIHRob3NlIGBpbmZvX3Nob3dgLCBgcGtnX2dlbl9zaG93YCwgYHBrZ19nZW5fd3JpdGVgIGZ1bmN0aW9ucyBhcmUgZGVidWdmcyBvcGVyYXRpb25zLiBBcmUgdGhvc2UgcmVhY2hhYmxlIGJ5IGBzeXprYWxsZXJgPyBZZXMsIHRoZXkgYXJlLiBgc3l6a2FsbGVyYCBjYW4gb3BlbiBhbmQgcmVhZC93cml0ZSBkZWJ1Z2ZzIGZpbGVzIGlmIGl0IGtub3dzIHRoZSBwYXRocy4gVGhlIHBhdGhzIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9cdTAwM2NkZXZfbmFtZVx1MDAzZS9pbmZvYCBvciBgL3N5cy9rZXJuZWwvZGVidWcvcGtnX2dlbmAuIFRoZSBgZGV2X25hbWVgIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIFBIWSBkZXZpY2UsIGxpa2UgYG1kaW8tYnVzOjAxYC4gVGhhdCdzIGdyZWF0LCBgc3l6a2FsbGVyYCAqY2FuKiBmdXp6IGRlYnVnZnMhXG5cbkxldCdzIGRpdmUgZGVlcGVyIGludG8gYGRhcDgyMTFyX2NvbmZpZ19pbml0YC4gSXQgcmVhZHMgcHJvcGVydGllcyBmcm9tIHRoZSBkZXZpY2UgdHJlZTogYHJ4LWludGVybmFsLWRlbGF5LXBzYCwgYHR4LWludGVybmFsLWRlbGF5LXBzYCwgYW5kIGB0eC11c2UtaW52ZXJ0ZWQtY2xrYC4gSGVyZSdzIHRoZSBjYXRjaDogc2luY2Ugd2UncmUgaW5zdGFudGlhdGluZyB0aGlzIHZpYSBVU0IgTURJTyBzY2FuLCB0aGVyZSdzIG5vIGRldmljZSB0cmVlIG5vZGUgZm9yIHRoZSBQSFkg4oCTIHVubGVzcyB3ZSB1c2UgRFQgb3ZlcmxheXMsIHdoaWNoIGBzeXprYWxsZXJgIGRvZXNuJ3QgdHlwaWNhbGx5IHRvdWNoLiBJZiB0aGVyZSdzIG5vIERUIG5vZGUsIGBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZWAgd2lsbCBiZSBOVUxMLiBUaHVzLCBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIHdpbGwgcmV0dXJuIGFuIGVycm9yLCBhbmQgaXQgd2lsbCBqdXN0IHVzZSB0aGUgZGVmYXVsdCBkZWxheSBgREFQODIxMVJfREVGQVVMVF9ERUxBWV9QU2AuIFRoZSBzYW1lIGFwcGxpZXMgZm9yIGBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2xgLCB3aGljaCByZXR1cm5zIGZhbHNlLiBUaGlzIG1lYW5zIGBkYXA4MjExcl9jb25maWdfaW5pdGAgd2lsbCBzdGlsbCBleGVjdXRlIGFuZCBjb25maWd1cmUgdGhlIFBIWSwgYnV0IHdpdGggZGVmYXVsdCB2YWx1ZXMuXG5cbk5vdyBsZXQncyBzZWUgd2hhdCB3ZSBjYW4gZG8gd2l0aCBgcGtnX2dlbl93cml0ZWAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxMTAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6NDUuNDY5NTkwNjA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDgwLCJFcnJvciI6ImFyZ3VtZW50IFwiRmlyc3RMaW5lXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50IiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogXCIzMzBcIixcbiAgXCJMaW5lQ291bnRcIjogXCIxMDBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJhcmd1bWVudCBcXFwiRmlyc3RMaW5lXFxcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnRcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6NDUuNDY5NjIyMjk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDA0NjExNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqVGhlIERlYnVnZ2luZyBEYW5jZTogQSBNb21lbnQgb2YgQ2xhcml0eSoqXG5cbk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgdGhhdCBlcnJvciBtZXNzYWdlIGFnYWluLCBhbmQgaXQgZmluYWxseSBjbGlja2VkLiBPZiBjb3Vyc2UhIEknbSBzdWNoIGEgZm9vbCBzb21ldGltZXMuIEkgd2FzIHNvIGZvY3VzZWQgb24gdGhlIGxvZ2ljIG9mIHRoZSBhbGdvcml0aG0gdGhhdCBJIGNvbXBsZXRlbHkgbWlzc2VkIHRoZSB0eXBlIG1pc21hdGNoLiBJIHBhc3NlZCBhIHN0cmluZywgYSBwZXJmZWN0bHkgdmFsaWQgc3RyaW5nIGF0IHRoYXQsIGFzIHRoZSBpbnB1dCBmb3IgYEZpcnN0TGluZWAuIEJ1dCBpdCBleHBlY3RzIGFuIGludGVnZXIsIG9idmlvdXNseS4gVGhlIGNvZGUncyBnb2luZyB0byBjaG9rZSBpZiBJIHRyeSB0byBmZWVkIGl0IHRoZSB3cm9uZyBkYXRhIHR5cGUuIFRoaXMgaXMgYmFzaWMsIGFsbW9zdCBlbWJhcnJhc3NpbmcuIEJ1dCBJJ20gZ2xhZCBJIGNhdWdodCBpdCBlYXJseS4gTm93IHRvIGZpeCB0aGF0IGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY1MiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6NDkuNDEwMDg1OTUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvZGFwODIxMXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMwOlxcdC8qKlxcbiAzMzE6XFx0ICogcGtnX2dlbl9zaG93KCkgLSBTaG93IHBhY2tldCBnZW5lcmF0b3Igc3RhdHVzXFxuIDMzMjpcXHQgKiBAc2Y6IFNlcXVlbmNlIGZpbGUgc3RydWN0dXJlXFxuIDMzMzpcXHQgKiBAZGF0YTogUHJpdmF0ZSBkYXRhIChzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqKVxcbiAzMzQ6XFx0ICpcXG4gMzM1OlxcdCAqIERpc3BsYXlzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvcixcXG4gMzM2OlxcdCAqIGluY2x1ZGluZyBDUkMgY29ycnVwdGlvbiBhbmQgbG9vcGJhY2sgc2V0dGluZ3MuXFxuIDMzNzpcXHQgKlxcbiAzMzg6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4gMzM5OlxcdCAqL1xcbiAzNDA6XFx0c3RhdGljIGludCBwa2dfZ2VuX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqZGF0YSlcXG4gMzQxOlxcdHtcXG4gMzQyOlxcdFxcdHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2ID0gc2YtXFx1MDAzZXByaXZhdGU7XFxuIDM0MzpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVxcdTAwM2VkZXYpO1xcbiAzNDQ6XFx0XFx0aW50IHZhbDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSk7XFxuIDM0NzpcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4gMzQ4OlxcdFxcdFxcdHJldHVybiB2YWw7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdHNlcV9wdXRzKHNmLCBcXFwiUGFja2FnZSBHZW5lcmF0aW5nOiBcXFwiKTtcXG4gMzUxOlxcdFxcdGlmIChGSUVMRF9HRVQoREFQODIxMVJfUEtHX0dFTl9FTiwgdmFsKSBcXHUwMDI2XFx1MDAyNlxcbiAzNTI6XFx0XFx0ICAgIEZJRUxEX0dFVChEQVA4MjExUl9QS0dfQ0hLX0VOLCB2YWwpKVxcbiAzNTM6XFx0XFx0XFx0c2VxX3B1dHMoc2YsIFxcXCJlbmFibGVkXFxcXG5cXFwiKTtcXG4gMzU0OlxcdFxcdGVsc2VcXG4gMzU1OlxcdFxcdFxcdHNlcV9wdXRzKHNmLCBcXFwiZGlzYWJsZWRcXFxcblxcXCIpO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRzZXFfcHJpbnRmKHNmLCBcXFwiQ1JDIGNvcnJ1cHRpb24gZW46ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoREFQODIxMVJfUEtHX0NPUl9DUkMsIHZhbCkgP1xcbiAzNTg6XFx0XFx0XFx0ICAgXFxcImVuYWJsZWRcXFwiIDogXFxcImRpc2FibGVkXFxcIik7XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdHZhbCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbiAzNjE6XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuIDM2MjpcXHRcXHRcXHRyZXR1cm4gdmFsO1xcbiAzNjM6XFx0XFxuIDM2NDpcXHRcXHRzZXFfcHJpbnRmKHNmLCBcXFwiTG9vcGJhY2sgZW46ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoQk1DUl9MT09QQkFDSywgdmFsKSA/XFxuIDM2NTpcXHRcXHRcXHQgICBcXFwiZW5hYmxlZFxcXCIgOiBcXFwiZGlzYWJsZWRcXFwiKTtcXG4gMzY2OlxcdFxcdHJldHVybiAwO1xcbiAzNjc6XFx0fVxcbiAzNjg6XFx0XFxuIDM2OTpcXHQvKipcXG4gMzcwOlxcdCAqIHBrZ19nZW5fd3JpdGUoKSAtIEVuYWJsZS9kaXNhYmxlIHBhY2tldCBnZW5lcmF0b3JcXG4gMzcxOlxcdCAqIEBmaWxlOiBGaWxlIHN0cnVjdHVyZVxcbiAzNzI6XFx0ICogQHVzZXJfYnVmOiBVc2VyIHNwYWNlIGJ1ZmZlclxcbiAzNzM6XFx0ICogQGNvdW50OiBCdWZmZXIgc2l6ZVxcbiAzNzQ6XFx0ICogQHBwb3M6IEZpbGUgcG9zaXRpb25cXG4gMzc1OlxcdCAqXFxuIDM3NjpcXHQgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yLlxcbiAzNzc6XFx0ICogQWxzbyBjb250cm9scyBsb29wYmFjayBhbmQgQ1JDIGNvcnJ1cHRpb24gdmlhIGRlYnVnZnMgZmxhZ3MuXFxuIDM3ODpcXHQgKlxcbiAzNzk6XFx0ICogTk9URTogV2UgaW50ZW50aW9uYWxseSBkbyBub3QgdXNlIGdlbnBoeV9sb29wYmFjaygpIGhlcmUuXFxuIDM4MDpcXHQgKiBnZW5waHlfbG9vcGJhY2soKSBkb2VzIGEgZnVsbCBCTUNSIG92ZXJ3cml0ZSAobWFzayA9IH4wKSBhbmRcXG4gMzgxOlxcdCAqIHdhaXRzIHVwIHRvIDUwMCBtcyBmb3IgbGluayBpbiBsb29wYmFjayBtb2RlLiBUaGlzIGlzIHRvb1xcbiAzODI6XFx0ICogaGVhdnkgZm9yIGEgZGlhZ25vc3RpYyBwYWNrZXQgZ2VuZXJhdG9yOlxcbiAzODM6XFx0ICpcXG4gMzg0OlxcdCAqIC0gSXQgZGVzdHJveXMgYWxsIG90aGVyIEJNQ1Igc3RhdGUgKHNwZWVkLCBkdXBsZXgsIEFOIGNvbmZpZykuXFxuIDM4NTpcXHQgKiAtIFRoZSA1MDAgbXMgbGluayBwb2xsIGlzIHVubmVjZXNzYXJ5OiB3ZSBhbHJlYWR5IGhhdmUgYSBsaW5rXFxuIDM4NjpcXHQgKiAgIG9yIGFyZSBkZWxpYmVyYXRlbHkgc2V0dGluZyB1cCBhIHRlc3QgY29uZGl0aW9uLlxcbiAzODc6XFx0ICogLSBXZSB3YW50IHRvIG1pbmltaXplIGNoYW5nZXMgdG8gQk1DUiBkdXJpbmcgZGVidWdnaW5nLlxcbiAzODg6XFx0ICpcXG4gMzg5OlxcdCAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbiAzOTA6XFx0ICovXFxuIDM5MTpcXHRzdGF0aWMgc3NpemVfdCBwa2dfZ2VuX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbiAzOTI6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuIDM5MzpcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiAzOTQ6XFx0e1xcbiAzOTU6XFx0XFx0c3RydWN0IHNlcV9maWxlICpzZiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gMzk2OlxcdFxcdHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2ID0gc2YtXFx1MDAzZXByaXZhdGU7XFxuIDM5NzpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVxcdTAwM2VkZXYpO1xcbiAzOTg6XFx0XFx0Ym9vbCBlbjtcXG4gMzk5OlxcdFxcdHUxNiBtYXNrLCBzZXQsIHNldF9ibWNyO1xcbiA0MDA6XFx0XFx0aW50IHJldDtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0cmV0ID0ga3N0cnRvYm9vbF9mcm9tX3VzZXIodXNlcl9idWYsIGNvdW50LCBcXHUwMDI2ZW4pO1xcbiA0MDM6XFx0XFx0aWYgKHJldClcXG4gNDA0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDQwNTpcXHRcXG4gNDA2OlxcdFxcdGlmIChlbikge1xcbiA0MDc6XFx0XFx0XFx0c2V0ID0gREFQODIxMVJfUEtHX0dFTl9FTiB8IERBUDgyMTFSX1BLR19DSEtfRU4gfCBEQVA4MjExUl9QS0dfUExfNUFBNTtcXG4gNDA4OlxcdFxcbiA0MDk6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNyY19jb3IpXFxuIDQxMDpcXHRcXHRcXHRcXHRzZXQgfD0gREFQODIxMVJfUEtHX0NPUl9DUkM7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2Vsb29wYmFjaylcXG4gNDEzOlxcdFxcdFxcdFxcdHNldF9ibWNyID0gQk1DUl9MT09QQkFDSztcXG4gNDE0OlxcdFxcdFxcdGVsc2VcXG4gNDE1OlxcdFxcdFxcdFxcdHNldF9ibWNyID0gQk1DUl9BTkVOQUJMRTtcXG4gNDE2OlxcdFxcdH0gZWxzZSB7XFxuIDQxNzpcXHRcXHRcXHRzZXQgPSBEQVA4MjExUl9QS0dfR0VOX01PREUgfCBEQVA4MjExUl9QS0dfR0FURV9FTjtcXG4gNDE4OlxcdFxcdFxcdHNldF9ibWNyID0gQk1DUl9BTkVOQUJMRTtcXG4gNDE5OlxcdFxcdH1cXG4gNDIwOlxcdFxcbiA0MjE6XFx0XFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLIHwgQk1DUl9BTkVOQUJMRSwgc2V0X2JtY3IpO1xcbiA0MjI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDQyMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MjQ6XFx0XFxuIDQyNTpcXHRcXHRtYXNrID0gREFQODIxMVJfUEtHX0dFTl9NQVNLIHwgREFQODIxMVJfUEtHX1BMX01BU0sgfCBEQVA4MjExUl9QS0dfQ09SX0NSQztcXG4gNDI2OlxcdFxcdHJldCA9IGRhcDgyMTFyX21vZGlmeV9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSwgbWFzaywgc2V0KTtcXG4gNDI3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDQyODpcXHRcXHRcXHRwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0ssIDApO1xcbiA0Mjk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6NDkuNDEwMjA2MjUzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Njk4MTYxMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFQODIxMVIgUEhZIERyaXZlciBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgREFQODIxMVIgUEhZIGRyaXZlciwga2VlcGluZyBpbiBtaW5kIHRoZSBjb250ZXh0IG9mIHVzaW5nIHN5emthbGxlci5cblxuRmlyc3QsIEkgc2VlIHRoZSBkcml2ZXIgZXhwb3NlcyBhIGZldyBgZGVidWdmc2AgZmlsZXM6IGBpbmZvYCAocmVhZC1vbmx5KSwgYHBrZ19nZW5gIChyZWFkLXdyaXRlKSwgYW5kIGEgY291cGxlIG9mIGJvb2xzOiBgcGtnX2dlbl9jcmNfY29yYCwgYHBrZ19nZW5fbG9vcGJhY2tgLiBUaGVzZSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBieSBzeXprYWxsZXIgd2hpY2ggaXMgdmVyeSBjb252ZW5pZW50LlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyBmaWd1cmluZyBvdXQgaG93IHRoZSBjb3JlIFBIWSBpbml0aWFsaXphdGlvbiBoYXBwZW5zLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaXMgYGRhcDgyMTFyX2NvbmZpZ19pbml0YC4gSXQncyBjYWxsZWQgYnkgYHBoeV9pbml0X2h3YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYHBoeV9hdHRhY2hfZGlyZWN0YC4gYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyB0cmlnZ2VyZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGF0dGFjaGVzIHRvIHRoZSBQSFkuIElmIEkgY2FuIGdldCBhIFVTQiBldGhlcm5ldCBkZXZpY2UgdG8gZW11bGF0ZSBhIFBIWSBjb25uZWN0aW9uLCBJIGNhbiB0cmlnZ2VyIGBkYXA4MjExcl9jb25maWdfaW5pdGAuIFRoYXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXRoLCBzbyBpdCdzIGRlZmluYXRlbHkgb24gdGhlIGxpc3QuXG5cbkFsb25nIHdpdGggdGhlIGluaXRpYWxpemF0aW9uLCB0aGUgYHBrZ19nZW5fd3JpdGVgIGFuZCBgaW5mb19zaG93YCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgYGRlYnVnZnNgLiBcblxuSSd2ZSBhbHNvIHNjYW5uZWQgdGhyb3VnaCB0aGUgY29kZSBmb3IgaGVscGVyIGZ1bmN0aW9ucywgdGhlcmUncyBgZGFwODIxMXJfcmVhZF9leHRgLCBgZGFwODIxMXJfbW9kaWZ5X2V4dGAsIGBkYXA4MjExcl9kZWxheV9wc190b19zZWxgLCBhbmQgYGRhcDgyMTFyX2dldF9yZ21paV9kZWxheWAuIFdoaWxlIGludGVyZXN0aW5nLCB0aGV5IGFyZW4ndCB0aGUgcHJpbWFyeSB0YXJnZXRzLlxuXG5TbywgdGhlIGZvY3VzIHBvaW50cyBhcmU6XG5cbiogICBgZGFwODIxMXJfY29uZmlnX2luaXRgXG4qICAgYHBrZ19nZW5fd3JpdGVgXG4qICAgYGluZm9fc2hvd2BcbiogICBgcGtnX2dlbl9zaG93YFxuXG5gaW5mb19zaG93YCBhbmQgYHBrZ19nZW5fc2hvd2AgYXBwZWFyIHRvIGJlIHNpbXBsZSByZWdpc3RlciByZWFkcyBhbmQgcHJpbnRzLiBOb3Qgc3VwZXIgY29tcGxleCwgYnV0IHBhcnQgb2YgdGhlIGRyaXZlcidzIG9wZXJhdGlvbi4gYHBrZ19nZW5fd3JpdGVgIGlzIGRlZmluaXRlbHkgbW9yZSBpbnRlcmVzdGluZywgaXQncyBtb2RpZnlpbmcgUEhZIHJlZ2lzdGVycy4gVGhlbiB0aGVyZSBpcyBgZGFwODIxMXJfY29uZmlnX2luaXRgLCB0aGUgUEhZIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uXG5cbkxldCdzIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19EQVA4MjExUl9QSFlgIGlzIHRoZSBwcmltYXJ5IG9uZSwgb2YgY291cnNlLiBXYWl0LCBgQ09ORklHX0RFQlVHX0ZTYCBpcyBuZWVkZWQgZm9yIHRoZSBkZWJ1Z2ZzIGZpbGVzLiBUaGFua2Z1bGx5IHN5emthbGxlciBoYXMgYENPTkZJR19ERUJVR19GU2AgZW5hYmxlZCwgc28gdGhhdCdzIHRha2VuIGNhcmUgb2YuXG5cbkEgZG91YmxlIGNoZWNrIG9mIHRoZSBLY29uZmlnIHJldmVhbHMgYSBkZXBlbmRlbmN5IG9uIGBPRmAgKE9wZW4gRmlybXdhcmUsIGFrYSBEZXZpY2UgVHJlZSkuIFRoYXQncyBhIGtleSBwb2ludC4gRG9lcyB0aGlzIG1lYW4gaXQncyBzdHJpY3RseSBhIERldmljZSBUcmVlLWJhc2VkIHByb2JlPyBObywgYnV0IHRoZSBjb2RlIGRvZXMgdXNlIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAgYW5kIGBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2xgLCB3aGljaCBoYXZlIHN0dWJzIHdoZW4gT0YgaXNuJ3QgZW5hYmxlZC4gU2luY2UgaXQgZGVwZW5kcyBvbiBPRiwgdGhleSB3aWxsIGJlIGJ1aWx0IG9ubHkgaWYgT0YgaXMgZW5hYmxlZC4gSSBrbm93IHN5emthbGxlciB0ZXN0cyBvbiB2YXJpb3VzIGFyY2hpdGVjdHVyZXMsIGluY2x1ZGluZyB4ODZcXF82NCBhbmQgYXJtNjQsIGFuZCBvZnRlbiBgQ09ORklHX09GYCBpcyBlbmFibGVkIChlc3BlY2lhbGx5IG9uIGFybTY0IGFuZCBzb21ldGltZXMgb24geDg2XFxfNjQgZm9yIHRlc3RpbmcpLlxuXG5XaGF0IGFib3V0IHRoZSBEZXZpY2UgVHJlZSBkZXBlbmRlbmN5IGluIG1vcmUgZGV0YWlsPyBTaW5jZSB0aGUgUEhZIGlzIHByb2JlZCB2aWEgVVNCIE1ESU8gc2NhbiwgdGhlcmUgd29uJ3QgYmUgYW4gYG9mX25vZGVgIGF0dGFjaGVkIHRvIGBwaHlkZXYtXHUwMDNlbWRpby5kZXZgLiBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAgZnVuY3Rpb25zIHdpbGwgcmV0dXJuIGAtRUlOVkFMYCBhbmQgdGhlIGRyaXZlciB3aWxsIHVzZSBkZWZhdWx0IHZhbHVlcy4gVGhpcyBpcyBmaW5lOyBpdCdzIGp1c3QgYSBkaWZmZXJlbnQgY29kZXBhdGguXG5cbkFueSBvdGhlciBjb25maWd1cmF0aW9ucz8gTm8gYENPTkZJR19ORVRXT1JLX1BIWV9USU1FU1RBTVBJTkdgIG9yIGBDT05GSUdfTUFDU0VDYC5cblxuVGltZSB0byByZXZpZXcgdGhlIGZvY3VzIHBvaW50cyBhZ2FpbiwgdGFraW5nIGludG8gYWNjb3VudCBob3cgdGhlIGRyaXZlciBpcyBhY3R1YWxseSB1c2VkOlxuXG4qICAgYGRhcDgyMTFyX2NvbmZpZ19pbml0YCAoUEhZIGluaXRpYWxpemF0aW9uKS5cbiogICBgcGtnX2dlbl93cml0ZWAgKGRlYnVnZnMgYWNjZXNzIGZvciByZWdpc3RlciB3cml0ZXMpLlxuKiAgIGBkYXA4MjExcl9wcm9iZWAgKGRldmljZSBwcm9iZSkuXG5cbkknbGwgaW5jbHVkZSB0aG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NDIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjQ6MDQuMTA4MzcwODdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTA2OTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljLiogZGFwODIxMXJfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jPTU1PXN0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNTktXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6NjA6c3RhdGljIGNvbnN0IHN0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcgZGVsYXlfY29uZmlnW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNjEtXFx0eyAgIDAsIDB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9ODE9c3RydWN0IGRhcDgyMTFyX3ByaXYge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtOTgtICovXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6OTk6c3RhdGljIHUxNiBkYXA4MjExcl9kZWxheV9wc190b19zZWwoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBzKVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTEwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0xMzctICovXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6MTM4OnN0YXRpYyBpbnQgZGFwODIxMXJfcmVhZF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZylcXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0xMzkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTY1LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjE2NjpzdGF0aWMgaW50IGRhcDgyMTFyX21vZGlmeV9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IG1hc2ssIHUxNiBzZXQpXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTY3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTE5MC0gKi9cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzoxOTE6c3RhdGljIHUzMiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTE5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0yMTYtICovXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6MjE3OnN0YXRpYyBpbnQgZGFwODIxMXJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0yMTgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9NDM0PURFRklORV9TSE9XX1NUT1JFX0FUVFJJQlVURShwa2dfZ2VuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ0Ny0gKi9cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0NDg6c3RhdGljIHZvaWQgZGFwODIxMXJfZGVidWdfaW5pdChzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00NDkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDcwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjQ3MTpzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19yZW1vdmUoc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ3Ni0jZWxzZSAvKiAhQ09ORklHX0RFQlVHX0ZTICovXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6NDc3OnN0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX2luaXQoc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYpIHt9XFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6NDc4OnN0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00NzktI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDg5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjQ5MDpzdGF0aWMgaW50IGRhcDgyMTFyX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDkxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTUxNC0gKi9cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1MTU6c3RhdGljIHZvaWQgZGFwODIxMXJfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNTE2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTUxOS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1MjA6c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRhcDgyMTFyX2RyaXZlcltdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTUyMS1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYz01Mzg9TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTUzOS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1NDA6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBkYXA4MjExcl90YltdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTU0MS1cXHR7IERBUDgyMTFSX1BIWV9JRCwgREFQODIxMVJfUEhZX0lEX01BU0sgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjQ6MDQuMzc3NDQ3MDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIxNjM2ODkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgREFQODIxMVIgUEhZIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSd2ZSBnb3QgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciwgdGhlIERBUDgyMTFSKEkpLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZnV6emluZyBhcHByb2FjaC4gTG9va2luZyBhdCB0aGUgZnVuY3Rpb25zLCBJJ20gdGhpbmtpbmcgSSdsbCBmb2N1cyBvbiBgZGFwODIxMXJfY29uZmlnX2luaXRgLCBgcGtnX2dlbl93cml0ZWAsIGBkYXA4MjExcl9wcm9iZWAsIGBpbmZvX3Nob3dgLCBhbmQgYHBrZ19nZW5fc2hvd2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgZGVidWcgaW50ZXJmYWNlcy5cblxuTm93LCBJIHNlZSB0aGF0IGBEQVA4MjExUl9QSFlgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBzbyB0aGF0J3MgYSBnbyBmb3IgYEVuYWJsZUNvbmZpZ3NgLiBUaGlzIGlzIGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5UaGUgYmlnZ2VyIHF1ZXN0aW9uIGlzLCAqc2hvdWxkKiBJIGZ1enogdGhpcz8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIG5ldyBQSFkgZHJpdmVyLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIFVTQiBNRElPIHNjYW5uaW5nIGFuZCB2aWEgZGVidWdmcyBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC4gVGhlIGRyaXZlciBoYXMgYGNvbmZpZ19pbml0YCB0byBzZXQgdXAgdGhlIGRyaXZlciBhbmQgaXQgaW1wbGVtZW50cyBkZWJ1Z2ZzIG9wZXJhdGlvbnMsIGFsbCBvZiB3aGljaCByZXByZXNlbnQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy5cblxuU28sIGxldCdzIHN1bW1hcml6ZSB0aGUgbG9naWMgYmVoaW5kIHRoZSBmdXp6aW5nIGFwcHJvYWNoOiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciB0aGUgREFQVSBUZWxlY29tIERBUDgyMTFSKEkpLiBJdCBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIEV0aGVybmV0IGRldmljZS4gT25jZSBwcm9iZWQsIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBhbmQgZGVidWdmcyBvcGVyYXRpb25zIGFyZSByZWFkeSB0byBiZSB1c2VkLiBUaGlzIG1ha2VzIGZvciBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9sczogYGRhcDgyMTFyX3Byb2JlYCwgYGRhcDgyMTFyX2NvbmZpZ19pbml0YCwgYHBrZ19nZW5fd3JpdGVgLCBgaW5mb19zaG93YCwgYW5kIGBwa2dfZ2VuX3Nob3dgLiBUaGUgYERBUDgyMTFSX1BIWWAgY29uZmlndXJhdGlvbiBpcyBuZWNlc3NhcnkgdG8gZ2V0IHRoaXMgZ29pbmcuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgcGxhbi4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgZ2V0IHRoaXMgcHJvY2VzcyBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjkxMiwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjQ6MTMuNTkzODE5MjU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTI3MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQVA4MjExUl9QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXA4MjExcl9wcm9iZVwiLFxuICAgIFwiZGFwODIxMXJfY29uZmlnX2luaXRcIixcbiAgICBcInBrZ19nZW5fd3JpdGVcIixcbiAgICBcImluZm9fc2hvd1wiLFxuICAgIFwicGtnX2dlbl9zaG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBFdGhlcm5ldCBkZXZpY2UgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgREFQODIxMVIgUEhZIElELiBPbmNlIHByb2JlZCwgdGhlIGRyaXZlcidzIGBjb25maWdfaW5pdGAgYW5kIGRlYnVnZnMgb3BlcmF0aW9ucyAoYGluZm9fc2hvd2AsIGBwa2dfZ2VuX3Nob3dgLCBgcGtnX2dlbl93cml0ZWApIGNhbiBiZSBleGVyY2lzZWQgYnkgdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBUDgyMTFSX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhcDgyMTFyX3Byb2JlXCIsXG4gICAgXCJkYXA4MjExcl9jb25maWdfaW5pdFwiLFxuICAgIFwicGtnX2dlbl93cml0ZVwiLFxuICAgIFwiaW5mb19zaG93XCIsXG4gICAgXCJwa2dfZ2VuX3Nob3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKS4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIEV0aGVybmV0IGRldmljZSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgcmVzcG9uZHMgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBEQVA4MjExUiBQSFkgSUQuIE9uY2UgcHJvYmVkLCB0aGUgZHJpdmVyJ3MgYGNvbmZpZ19pbml0YCBhbmQgZGVidWdmcyBvcGVyYXRpb25zIChgaW5mb19zaG93YCwgYHBrZ19nZW5fc2hvd2AsIGBwa2dfZ2VuX3dyaXRlYCkgY2FuIGJlIGV4ZXJjaXNlZCBieSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow94j7j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 17:06:37 +0000 UTC FinishedAt: 2026-07-13 17:24:15 +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": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAP8211R_PHY" ], "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": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAP8211R_PHY" ], "series_id": "d6250d5c-783d-426b-b32c-b714fbd04318" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dap8211r_probe", "dap8211r_config_init", "pkg_gen_write", "info_show", "pkg_gen_show" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBUDgyMTFSX1BIWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhcDgyMTFyX3Byb2JlJiMzNDssCiAgICAmIzM0O2RhcDgyMTFyX2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3BrZ19nZW5fd3JpdGUmIzM0OywKICAgICYjMzQ7aW5mb19zaG93JiMzNDssCiAgICAmIzM0O3BrZ19nZW5fc2hvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKS4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIEV0aGVybmV0IGRldmljZSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgcmVzcG9uZHMgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBEQVA4MjExUiBQSFkgSUQuIE9uY2UgcHJvYmVkLCB0aGUgZHJpdmVyJiMzOTtzIGBjb25maWdfaW5pdGAgYW5kIGRlYnVnZnMgb3BlcmF0aW9ucyAoYGluZm9fc2hvd2AsIGBwa2dfZ2VuX3Nob3dgLCBgcGtnX2dlbl93cml0ZWApIGNhbiBiZSBleGVyY2lzZWQgYnkgdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzM0NmY3MTUwMGI2YTdiYjFiMDVhODNiODIyODE5ZjE0OTY2ZGFkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDE3OjIyOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGFwdSxkYXA4MjExci55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjA4YTgyZjc3OWQ2MWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGFwdSxkYXA4MjExci55YW1sXG5AQCAtMCwwICYjNDM7MSw3OCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiYjNDM7JVlBTUwgMS4yXG4mIzQzOy0tLVxuJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWVxuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBBcnRlbSBTaGlta28gXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246IHxcbiYjNDM7ICBUaGUgREFQODIxMVIoSSkgaXMgYSBHaWdhYml0IEV0aGVybmV0IFBIWSB3aXRoIFJHTUlJIGludGVyZmFjZSxcbiYjNDM7ICBzdXBwb3J0aW5nIElFRUUgODAyLjNheiBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0LCBJRUVFIDE1ODggU3luY0UsXG4mIzQzOyAgYW5kIGFuIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IgZm9yIGRpYWdub3N0aWNzLlxuJiM0MztcbiYjNDM7ICBTcGVjaWZpY2F0aW9uczpcbiYjNDM7ICAgIC0gMTBCQVNFLVRlLCAxMDBCQVNFLVRYLCAxMDAwQkFTRS1UXG4mIzQzOyAgICAtIFJHTUlJIHdpdGggY29uZmlndXJhYmxlIFRYL1JYIGNsb2NrIGRlbGF5cyAoMTUwIHBzIHN0ZXBzLCAwLTIyNTAgcHMpXG4mIzQzOyAgICAtIElFRUUgODAyLjNhei0yMDEwIEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXRcbiYjNDM7ICAgIC0gSUVFRSAxNTg4IFN5bmNFIHN1cHBvcnRcbiYjNDM7ICAgIC0gSW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvciBhbmQgY2hlY2tlciBmb3IgbGluayBkaWFnbm9zdGljc1xuJiM0MztcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDA4LjAxMWJcbiYjNDM7XG4mIzQzOyAgcmVnOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgcngtaW50ZXJuYWwtZGVsYXktcHM6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgUkdNSUkgUlggY2xvY2sgZGVsYXkgaW4gcGljb3NlY29uZHMuIFRoZSBQSFkgc3VwcG9ydHMgMTUwIHBzIHN0ZXBzXG4mIzQzOyAgICAgIGZyb20gMCB0byAyMjUwIHBzLiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byAxOTUwIHBzLiBJZiB0aGVcbiYjNDM7ICAgICAgcmVxdWVzdGVkIHZhbHVlIGRvZXMgbm90IGV4YWN0bHkgbWF0Y2ggYSBzdXBwb3J0ZWQgc3RlcCwgdGhlIGRyaXZlclxuJiM0MzsgICAgICBzZWxlY3RzIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZSBhbmQgaXNzdWVzIGEgd2FybmluZy5cbiYjNDM7ICAgIGVudW06IFswLCAxNTAsIDMwMCwgNDUwLCA2MDAsIDc1MCwgOTAwLCAxMDUwLCAxMjAwLCAxMzUwLCAxNTAwLFxuJiM0MzsgICAgICAgICAgIDE2NTAsIDE4MDAsIDE5NTAsIDIxMDAsIDIyNTBdXG4mIzQzOyAgICBkZWZhdWx0OiAxOTUwXG4mIzQzO1xuJiM0MzsgIHR4LWludGVybmFsLWRlbGF5LXBzOlxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFJHTUlJIFRYIGNsb2NrIGRlbGF5IGluIHBpY29zZWNvbmRzLiBUaGUgUEhZIHN1cHBvcnRzIDE1MCBwcyBzdGVwc1xuJiM0MzsgICAgICBmcm9tIDAgdG8gMjI1MCBwcy4gSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gMTk1MCBwcy4gSWYgdGhlXG4mIzQzOyAgICAgIHJlcXVlc3RlZCB2YWx1ZSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIGEgc3VwcG9ydGVkIHN0ZXAsIHRoZSBkcml2ZXJcbiYjNDM7ICAgICAgc2VsZWN0cyB0aGUgbmVhcmVzdCBzdXBwb3J0ZWQgdmFsdWUgYW5kIGlzc3VlcyBhIHdhcm5pbmcuXG4mIzQzOyAgICBlbnVtOiBbMCwgMTUwLCAzMDAsIDQ1MCwgNjAwLCA3NTAsIDkwMCwgMTA1MCwgMTIwMCwgMTM1MCwgMTUwMCxcbiYjNDM7ICAgICAgICAgICAxNjUwLCAxODAwLCAxOTUwLCAyMTAwLCAyMjUwXVxuJiM0MzsgICAgZGVmYXVsdDogMTk1MFxuJiM0MztcbiYjNDM7ICB0eC1pbnZlcnRlZC1jbGs6XG4mIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9mbGFnXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgSWYgcHJlc2VudCwgdGhlIFJHTUlJIFRYIGNsb2NrIHRvIHRoZSBNQUMgaXMgaW52ZXJ0ZWQgKDE4MCBkZWdyZWVcbiYjNDM7ICAgICAgcGhhc2Ugc2hpZnQgcmVsYXRpdmUgdG8gdGhlIGRhdGEgbGluZXMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljXG4mIzQzOyAgICAgIGV4dGVuc2lvbiBmb3IgYm9hcmRzIHdoZXJlIFBDQiB0cmFjZSBsZW5ndGggb3IgTUFDIHJlcXVpcmVtZW50c1xuJiM0MzsgICAgICBuZWNlc3NpdGF0ZSBjbG9jayBpbnZlcnNpb24uIE9ubHkgdXNlIHRoaXMgcHJvcGVydHkgYWZ0ZXIgaGFyZHdhcmVcbiYjNDM7ICAgICAgc2lnbmFsIGludGVncml0eSB2YWxpZGF0aW9uLlxuJiM0MztcbiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1waHlAMSB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgcngtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxMDUwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB0eC1pbnRlcm5hbC1kZWxheS1wcyA9IFx1MDAzYzExNTBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHR4LWludmVydGVkLWNsaztcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCAwOTlmMjVkY2VhYmJjNy4uNDU3NmY3MDdhYzk0NDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbkBAIC0yMzcsNiAmIzQzOzIzNywxNiBAQCBjb25maWcgREFWSUNPTV9QSFlcbiBcdGhlbHBcbiBcdCAgQ3VycmVudGx5IHN1cHBvcnRzIGRtOTE2MWUgYW5kIGRtOTEzMVxuIFxuJiM0Mztjb25maWcgREFQODIxMVJfUEhZXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7REFQVSBUZWxlY29tIERBUDgyMTFSKEkpIEdpZ2FiaXQgRXRoZXJuZXQgUEhZXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBPRlxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFN1cHBvcnQgZm9yIHRoZSBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkgR2lnYWJpdCBFdGhlcm5ldCBQSFkuXG4mIzQzO1x0ICBUaGlzIFBIWSBpcyBkZXNpZ25lZCBmb3IgZW50ZXJwcmlzZSBhbmQgaW5kdXN0cmlhbCBuZXR3b3JraW5nXG4mIzQzO1x0ICBhcHBsaWNhdGlvbnMsIHN1cHBvcnRpbmcgMTAvMTAwLzEwMDAgTWJwcyBvcGVyYXRpb24uXG4mIzQzO1x0ICBSR01JSSB3aXRoOiBjb25maWd1cmFibGUgVFgvUlggY2xvY2sgZGVsYXlzLCBvcHRpb25hbCBmbGFnIHRvIGVuYWJsZVxuJiM0MztcdCAgMTgwLWRlZ3JlZSBUWCBjbG9jayBwaGFzZSBzaGlmdCBhbmQgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvci5cbiYjNDM7XG4gY29uZmlnIElDUExVU19QSFlcbiBcdHRyaXN0YXRlIFwmIzM0O0lDUGx1cyBQSFlzXCYjMzQ7XG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5pbmRleCBkZTY2MGFlOTQ5NDUzZC4uYWQzNTczM2ViNGJiNjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTUzLDYgJiM0Mzs1Myw3IEBAIG9iai0kKENPTkZJR19CUk9BRENPTV9QSFkpXHQmIzQzOz0gYnJvYWRjb20ub1xuIG9iai0kKENPTkZJR19DSUNBREFfUEhZKVx0JiM0Mzs9IGNpY2FkYS5vXG4gb2JqLSQoQ09ORklHX0NPUlRJTkFfUEhZKVx0JiM0Mzs9IGNvcnRpbmEub1xuIG9iai0kKENPTkZJR19EQVZJQ09NX1BIWSlcdCYjNDM7PSBkYXZpY29tLm9cbiYjNDM7b2JqLSQoQ09ORklHX0RBUDgyMTFSX1BIWSlcdCYjNDM7PSBkYXA4MjExci5vXG4gb2JqLSQoQ09ORklHX0RQODM2NDBfUEhZKVx0JiM0Mzs9IGRwODM2NDAub1xuIG9iai0kKENPTkZJR19EUDgzODIyX1BIWSlcdCYjNDM7PSBkcDgzODIyLm9cbiBvYmotJChDT05GSUdfRFA4Mzg0OF9QSFkpXHQmIzQzOz0gZHA4Mzg0OC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMgYi9kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZDY5NWJjNDk1M2EyYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmNcbkBAIC0wLDAgJiM0MzsxLDU0NCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMXG4mIzQzOy8qXG4mIzQzOyAqIERyaXZlciBmb3IgdGhlIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWS5cbiYjNDM7ICpcbiYjNDM7ICogU3BlY2lmaWNhdGlvbnM6XG4mIzQzOyAqICAgLSBJRUVFIDgwMi4zIDEwQkFTRS1UZSwgMTAwQkFTRS1UWCwgMTAwMEJBU0UtVFxuJiM0MzsgKiAgIC0gSUVFRSA4MDIuM2F6LTIwMTAgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldFxuJiM0MzsgKiAgIC0gSUVFRSAxNTg4IFN5bmNFIHN1cHBvcnRcbiYjNDM7ICogICAtIFJHTUlJXG4mIzQzOyAqICAgLSBQYWNrYWdlIEdlbmVyYXRvciBmb3IgZGlhZ25vc3RpY3NcbiYjNDM7ICpcbiYjNDM7ICogQXV0aG9yOiBBcnRlbSBTaGlta28gXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2wuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taWkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BIWV9JRFx0XHRcdDB4MDAwODAxMUJcbiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfSURfTUFTS1x0XHQweEZGRkZGRkZGXG4mIzQzO1xuJiM0MzsjZGVmaW5lIERBUDgyMTFSX0VYVF9BRERcdFx0MHgxRVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX0VYVF9EQVRBXHRcdDB4MUZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUEtHQzVcdFx0XHQweEEwXG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUEtHX1BMX01BU0tcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19QTF81QUE1XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19DT1JfQ1JDXHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fRU5cdFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTU9ERVx0XHRCSVQoMTMpXG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUEtHX0dBVEVfRU5cdFx0QklUKDE0KVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19DSEtfRU5cdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUEhZX0NPTlx0XHQweEEwMDFcbiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfTERPX0VOXHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BIWV9SWF9ETFlcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUEhZX0dBVEVfUlhfQ0xLXHRCSVQoOSlcbiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfU1dfUlNUXHRcdEJJVCgxNSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUkdNSUlfQ09OXHRcdDB4QTAwM1xuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLXHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0tcdEdFTk1BU0soMTMsIDEwKVxuJiM0MzsjZGVmaW5lIERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlRcdEJJVCgxNClcbiYjNDM7XG4mIzQzOy8qIERlZmF1bHQgUkdNSUkgZGVsYXkgKDEuOTVucyA9PSAxMyAqIDE1MClwcykgKi9cbiYjNDM7I2RlZmluZSBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTXHQxOTUwXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFwODIxMXJfZGVsYXlfY29uZmlnIHtcbiYjNDM7XHR1MzIgcHM7XG4mIzQzO1x0dTggc2VsO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcgZGVsYXlfY29uZmlnW10gPSB7XG4mIzQzO1x0eyAgIDAsIDB9LFxuJiM0MztcdHsgMTUwLCAxfSxcbiYjNDM7XHR7IDMwMCwgMn0sXG4mIzQzO1x0eyA0NTAsIDN9LFxuJiM0MztcdHsgNjAwLCA0fSxcbiYjNDM7XHR7IDc1MCwgNX0sXG4mIzQzO1x0eyA5MDAsIDZ9LFxuJiM0MztcdHsxMDUwLCA3fSxcbiYjNDM7XHR7MTIwMCwgOH0sXG4mIzQzO1x0ezEzNTAsIDl9LFxuJiM0MztcdHsxNTAwLCAxMH0sXG4mIzQzO1x0ezE2NTAsIDExfSxcbiYjNDM7XHR7MTgwMCwgMTJ9LFxuJiM0MztcdHsxOTUwLCAxM30sXG4mIzQzO1x0ezIxMDAsIDE0fSxcbiYjNDM7XHR7MjI1MCwgMTV9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBEQVA4MjExUl9ERUxBWV9DT1VOVFx0QVJSQVlfU0laRShkZWxheV9jb25maWcpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFwODIxMXJfcHJpdiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfRlMpXG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqcm9vdF9kaXI7XG4mIzQzO1x0Ym9vbCBjcmNfY29yO1xuJiM0MztcdGJvb2wgbG9vcGJhY2s7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRhcDgyMTFyX2RlbGF5X3BzX3RvX3NlbCgpIC0gQ29udmVydCBwaWNvc2Vjb25kcyB0byByZWdpc3RlciB2YWx1ZVxuJiM0MzsgKiBAcHM6IERlbGF5IGluIHBpY29zZWNvbmRzICgwLTIyNTApXG4mIzQzOyAqXG4mIzQzOyAqIENvbnZlcnRzIGEgZGVsYXkgdmFsdWUgaW4gcGljb3NlY29uZHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgdmFsdWVcbiYjNDM7ICogZm9yIFJHTUlJIGRlbGF5IGNvbmZpZ3VyYXRpb24uIFRoZSBQSFkgc3VwcG9ydHMgMTUwcHMgc3RlcHMgZnJvbSAwIHRvIDIyNTBwcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZWdpc3RlciB2YWx1ZSAoMC0xNSlcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1MTYgZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwcylcbiYjNDM7e1xuJiM0MztcdGludCBpLCBiZXN0X2lkeCA9IDA7XG4mIzQzO1x0dTMyIGJlc3RfZGlmZiA9IFVJTlRfTUFYLCBkaWZmID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQVA4MjExUl9ERUxBWV9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGRpZmYgPSBhYnMocHMgLSBkZWxheV9jb25maWdbaV0ucHMpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChkaWZmIFx1MDAzYyBiZXN0X2RpZmYpIHtcbiYjNDM7XHRcdFx0YmVzdF9kaWZmID0gZGlmZjtcbiYjNDM7XHRcdFx0YmVzdF9pZHggPSBpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghZGlmZilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoYmVzdF9kaWZmKVxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtEZWxheSAldSBwcyBub3QgZm91bmQsIHVzaW5nIGNsb3Nlc3QgJXUgcHNcXG5cJiMzNDssIHBzLFxuJiM0MztcdFx0XHQgICAgZGVsYXlfY29uZmlnW2Jlc3RfaWR4XS5wcyk7XG4mIzQzO1xuJiM0MztcdHBoeWRldl9kYmcocGh5ZGV2LCBcJiMzNDtEZWxheSBwcyBpZHg6ICV1XFxuXCYjMzQ7LCBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRhcDgyMTFyX3JlYWRfZXh0KCkgLSBSZWFkIGV4dGVuZGVkIHJlZ2lzdGVyXG4mIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqIEByZWc6IEV4dGVuZGVkIHJlZ2lzdGVyIGFkZHJlc3NcbiYjNDM7ICpcbiYjNDM7ICogUmVhZHMgYSBQSFkgZXh0ZW5kZWQgcmVnaXN0ZXIgdXNpbmcgdGhlIGluZGlyZWN0IGFjY2VzcyBtZXRob2QuXG4mIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBNRElPIGJ1cyBsb2NrLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFJlZ2lzdGVyIHZhbHVlIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZGFwODIxMXJfcmVhZF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZylcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBEQVA4MjExUl9FWFRfQURELCByZWcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIERBUDgyMTFSX0VYVF9EQVRBKTtcbiYjNDM7b3V0OlxuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZGFwODIxMXJfbW9kaWZ5X2V4dCgpIC0gTW9kaWZ5IGV4dGVuZGVkIHJlZ2lzdGVyIGJpdHNcbiYjNDM7ICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHJlZzogRXh0ZW5kZWQgcmVnaXN0ZXIgYWRkcmVzc1xuJiM0MzsgKiBAbWFzazogQml0IG1hc2sgb2YgYml0cyB0byBjbGVhclxuJiM0MzsgKiBAc2V0OiBCaXQgbWFzayBvZiBiaXRzIHRvIHNldFxuJiM0MzsgKlxuJiM0MzsgKiBNb2RpZmllcyBhIFBIWSBleHRlbmRlZCByZWdpc3RlciB1c2luZyB0aGUgaW5kaXJlY3QgYWNjZXNzIG1ldGhvZC5cbiYjNDM7ICogTmV3IHZhbHVlID0gKG9sZCB2YWx1ZSBcdTAwMjYgfm1hc2spIHwgc2V0LlxuJiM0MzsgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgTURJTyBidXMgbG9jay5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZGFwODIxMXJfbW9kaWZ5X2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnLCB1MTYgbWFzaywgdTE2IHNldClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBEQVA4MjExUl9FWFRfQURELCByZWcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgREFQODIxMVJfRVhUX0RBVEEsIG1hc2ssIHNldCk7XG4mIzQzO291dDpcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRhcDgyMTFyX2dldF9yZ21paV9kZWxheSgpIC0gR2V0IFJHTUlJIGRlbGF5IGZyb20gZGV2aWNlIHRyZWVcbiYjNDM7ICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHByb3BfbmFtZTogRGV2aWNlIHRyZWUgcHJvcGVydHkgbmFtZVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkcyB0aGUgUkdNSUkgZGVsYXkgZnJvbSB0aGUgZGV2aWNlIHRyZWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3RcbiYjNDM7ICogc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBkZWxheSAoMTk1MHBzKSBpcyB1c2VkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFJlZ2lzdGVyIHZhbHVlICgwLTE1KSBvciBkZWZhdWx0IGlmIHByb3BlcnR5IG5vdCBmb3VuZFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHUzMiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTMyIHBzID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIHByb3BfbmFtZSwgXHUwMDI2cHMpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHBoeWRldl9kYmcocGh5ZGV2LCBcJiMzNDtVc2luZyBkZWZhdWx0IGRlbGF5ICgldXBzKVxcblwmIzM0OywgREFQODIxMVJfREVGQVVMVF9ERUxBWV9QUyk7XG4mIzQzO1x0XHRwcyA9IERBUDgyMTFSX0RFRkFVTFRfREVMQVlfUFM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKHBoeWRldiwgcHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZGFwODIxMXJfY29uZmlnX2luaXQoKSAtIEluaXRpYWxpemUgUEhZXG4mIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIENvbmZpZ3VyZXMgdGhlIFBIWSBkdXJpbmcgaW5pdGlhbGl6YXRpb246XG4mIzQzOyAqIC0gUkdNSUkgZGVsYXlzIGJhc2VkIG9uIGludGVyZmFjZSBtb2RlXG4mIzQzOyAqIC0gVFggY2xvY2sgaW52ZXJ0aW9uXG4mIzQzOyAqIC0gU29mdHdhcmUgcmVzZXQgdG8gYXBwbHkgc2V0dGluZ3NcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZGFwODIxMXJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5ZGV2X25vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiYjNDM7XHR1MTYgbWFzayA9IDAsIHNldCA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKSB7XG4mIzQzO1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOlxuJiM0MztcdFx0c2V0ID0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSyxcbiYjNDM7XHRcdFx0XHQgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHBoeWRldiwgXCYjMzQ7cngtaW50ZXJuYWwtZGVsYXktcHNcJiMzNDspKTtcbiYjNDM7XHRcdG1hc2sgPSBEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEOlxuJiM0MztcdFx0c2V0ID0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSyxcbiYjNDM7XHRcdFx0XHQgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHBoeWRldiwgXCYjMzQ7cngtaW50ZXJuYWwtZGVsYXktcHNcJiMzNDspKTtcbiYjNDM7XHRcdG1hc2sgPSBEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSztcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6XG4mIzQzO1x0XHRzZXQgfD0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9UWF9ERUxfTUFTSyxcbiYjNDM7XHRcdFx0XHQgIGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsIFwmIzM0O3R4LWludGVybmFsLWRlbGF5LXBzXCYjMzQ7KSk7XG4mIzQzO1x0XHRtYXNrIHw9IERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBpbnRlcmZhY2U6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwaHlkZXZfbm9kZSwgXCYjMzQ7dHgtdXNlLWludmVydGVkLWNsa1wmIzM0OykpXG4mIzQzO1x0XHRzZXQgfD0gREFQODIxMVJfUkdNSUlfQ0xLX0lOVkVSVDtcbiYjNDM7XG4mIzQzO1x0bWFzayB8PSBEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkYXA4MjExcl9tb2RpZnlfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTiwgREFQODIxMVJfUEhZX1NXX1JTVCwgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIHJlc2V0IHNlbGYtY2xlYXIgKi9cbiYjNDM7XHRmc2xlZXAoMjAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGFwODIxMXJfbW9kaWZ5X2V4dChwaHlkZXYsIERBUDgyMTFSX1JHTUlJX0NPTiwgbWFzaywgc2V0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0O1JHTUlJIGNvbmZpZ3VyZWQ6IGludGVyZmFjZT0lZCwgbWFzaz0weCUwNHgsIHNldD0weCUwNHhcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBwaHlkZXYtXHUwMDNlaW50ZXJmYWNlLCBtYXNrLCBzZXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGluZm9fc2hvdygpIC0gU2hvdyBQSFkgc3RhdHVzIGluZm9ybWF0aW9uXG4mIzQzOyAqIEBzZjogU2VxdWVuY2UgZmlsZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGRhdGE6IFByaXZhdGUgZGF0YSAoc3RydWN0IGRhcDgyMTFyX3ByaXYgKilcbiYjNDM7ICpcbiYjNDM7ICogRGlzcGxheXMgUEhZIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cyByZWdpc3RlcnMgZm9yIGRlYnVnZ2luZy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdiA9IHNmLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cdTAwM2VkZXYpO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTik7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB2YWw7XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYoc2YsIFwmIzM0O1BIWV9DT046IDB4JTA0eFxcblwmIzM0OywgdmFsKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDsgIExETyBlbmFibGVkOiAlc1xcblwmIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1BIWV9MRE9fRU4sIHZhbCkgID9cbiYjNDM7XHRcdCAgIFwmIzM0O3llc1wmIzM0OyA6IFwmIzM0O25vXCYjMzQ7KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDsgIFJYIGRseSBlbjogJXNcXG5cJiMzNDssIEZJRUxEX0dFVChEQVA4MjExUl9QSFlfUlhfRExZLCB2YWwpID9cbiYjNDM7XHRcdCAgIFwmIzM0O3llc1wmIzM0OyA6IFwmIzM0O25vXCYjMzQ7KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDsgIFJYIGNrbCBnYXRpbmc6ICVzXFxuXCYjMzQ7LCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX0dBVEVfUlhfQ0xLLCB2YWwpID9cbiYjNDM7XHRcdCAgIFwmIzM0O3llc1wmIzM0OyA6IFwmIzM0O25vXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9SR01JSV9DT04pO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDtSR01JSV9DT046IDB4JTA0eFxcblwmIzM0OywgdmFsKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDsgIFRYIGRlbGF5IGlkeDogJWx4XFxuXCYjMzQ7LCBGSUVMRF9HRVQoREFQODIxMVJfUkdNSUlfVFhfREVMX01BU0ssIHZhbCkpO1xuJiM0MztcdHNlcV9wcmludGYoc2YsIFwmIzM0OyAgUlggZGVsYXkgaWR4OiAlbHhcXG5cJiMzNDssIEZJRUxEX0dFVChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSywgdmFsKSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzZiwgXCYjMzQ7ICBDTEsgaW52ZXJ0OiAlc1xcblwmIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQsIHZhbCkgP1xuJiM0MztcdFx0ICAgXCYjMzQ7eWVzXCYjMzQ7IDogXCYjMzQ7bm9cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTVNSKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihzZiwgXCYjMzQ7Qk1TUjogMHglMDR4XFxuXCYjMzQ7LCB2YWwpO1xuJiM0MztcdHNlcV9wcmludGYoc2YsIFwmIzM0OyAgTGluazogJXNcXG5cJiMzNDssIEZJRUxEX0dFVChCTVNSX0xTVEFUVVMsIHZhbCkgP1xuJiM0MztcdFx0ICAgXCYjMzQ7dXBcJiMzNDsgOiBcJiMzNDtkb3duXCYjMzQ7KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDsgIEFOIGNvbXBsZXRlOiAlc1xcblwmIzM0OywgRklFTERfR0VUKEJNU1JfQU5FR0NPTVBMRVRFLCB2YWwpID9cbiYjNDM7XHRcdCAgIFwmIzM0O3llc1wmIzM0OyA6IFwmIzM0O25vXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSk7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB2YWw7XG4mIzQzO1xuJiM0MztcdGlmIChGSUVMRF9HRVQoREFQODIxMVJfUEtHX0dFTl9FTiwgdmFsKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgRklFTERfR0VUKERBUDgyMTFSX1BLR19DSEtfRU4sIHZhbCkpXG4mIzQzO1x0XHRzZXFfcHV0cyhzZiwgXCYjMzQ7V0FSTklORzogUGFja2FnZSBHZW5lcmF0aW5nIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztERUZJTkVfU0hPV19BVFRSSUJVVEUoaW5mbyk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGtnX2dlbl9zaG93KCkgLSBTaG93IHBhY2tldCBnZW5lcmF0b3Igc3RhdHVzXG4mIzQzOyAqIEBzZjogU2VxdWVuY2UgZmlsZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGRhdGE6IFByaXZhdGUgZGF0YSAoc3RydWN0IGRhcDgyMTFyX3ByaXYgKilcbiYjNDM7ICpcbiYjNDM7ICogRGlzcGxheXMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yLFxuJiM0MzsgKiBpbmNsdWRpbmcgQ1JDIGNvcnJ1cHRpb24gYW5kIGxvb3BiYWNrIHNldHRpbmdzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBwa2dfZ2VuX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2ID0gc2YtXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVx1MDAzZWRldik7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSk7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB2YWw7XG4mIzQzO1xuJiM0MztcdHNlcV9wdXRzKHNmLCBcJiMzNDtQYWNrYWdlIEdlbmVyYXRpbmc6IFwmIzM0Oyk7XG4mIzQzO1x0aWYgKEZJRUxEX0dFVChEQVA4MjExUl9QS0dfR0VOX0VOLCB2YWwpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBGSUVMRF9HRVQoREFQODIxMVJfUEtHX0NIS19FTiwgdmFsKSlcbiYjNDM7XHRcdHNlcV9wdXRzKHNmLCBcJiMzNDtlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzZXFfcHV0cyhzZiwgXCYjMzQ7ZGlzYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDtDUkMgY29ycnVwdGlvbiBlbjogJXNcXG5cJiMzNDssIEZJRUxEX0dFVChEQVA4MjExUl9QS0dfQ09SX0NSQywgdmFsKSA/XG4mIzQzO1x0XHQgICBcJiMzNDtlbmFibGVkXCYjMzQ7IDogXCYjMzQ7ZGlzYWJsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihzZiwgXCYjMzQ7TG9vcGJhY2sgZW46ICVzXFxuXCYjMzQ7LCBGSUVMRF9HRVQoQk1DUl9MT09QQkFDSywgdmFsKSA/XG4mIzQzO1x0XHQgICBcJiMzNDtlbmFibGVkXCYjMzQ7IDogXCYjMzQ7ZGlzYWJsZWRcJiMzNDspO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGtnX2dlbl93cml0ZSgpIC0gRW5hYmxlL2Rpc2FibGUgcGFja2V0IGdlbmVyYXRvclxuJiM0MzsgKiBAZmlsZTogRmlsZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHVzZXJfYnVmOiBVc2VyIHNwYWNlIGJ1ZmZlclxuJiM0MzsgKiBAY291bnQ6IEJ1ZmZlciBzaXplXG4mIzQzOyAqIEBwcG9zOiBGaWxlIHBvc2l0aW9uXG4mIzQzOyAqXG4mIzQzOyAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IuXG4mIzQzOyAqIEFsc28gY29udHJvbHMgbG9vcGJhY2sgYW5kIENSQyBjb3JydXB0aW9uIHZpYSBkZWJ1Z2ZzIGZsYWdzLlxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOiBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCB1c2UgZ2VucGh5X2xvb3BiYWNrKCkgaGVyZS5cbiYjNDM7ICogZ2VucGh5X2xvb3BiYWNrKCkgZG9lcyBhIGZ1bGwgQk1DUiBvdmVyd3JpdGUgKG1hc2sgPSB+MCkgYW5kXG4mIzQzOyAqIHdhaXRzIHVwIHRvIDUwMCBtcyBmb3IgbGluayBpbiBsb29wYmFjayBtb2RlLiBUaGlzIGlzIHRvb1xuJiM0MzsgKiBoZWF2eSBmb3IgYSBkaWFnbm9zdGljIHBhY2tldCBnZW5lcmF0b3I6XG4mIzQzOyAqXG4mIzQzOyAqIC0gSXQgZGVzdHJveXMgYWxsIG90aGVyIEJNQ1Igc3RhdGUgKHNwZWVkLCBkdXBsZXgsIEFOIGNvbmZpZykuXG4mIzQzOyAqIC0gVGhlIDUwMCBtcyBsaW5rIHBvbGwgaXMgdW5uZWNlc3Nhcnk6IHdlIGFscmVhZHkgaGF2ZSBhIGxpbmtcbiYjNDM7ICogICBvciBhcmUgZGVsaWJlcmF0ZWx5IHNldHRpbmcgdXAgYSB0ZXN0IGNvbmRpdGlvbi5cbiYjNDM7ICogLSBXZSB3YW50IHRvIG1pbmltaXplIGNoYW5nZXMgdG8gQk1DUiBkdXJpbmcgZGVidWdnaW5nLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyB3cml0dGVuIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHBrZ19nZW5fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4mIzQzO1x0XHRcdCAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuJiM0MztcdFx0XHQgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNlcV9maWxlICpzZiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2ID0gc2YtXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVx1MDAzZWRldik7XG4mIzQzO1x0Ym9vbCBlbjtcbiYjNDM7XHR1MTYgbWFzaywgc2V0LCBzZXRfYm1jcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3RydG9ib29sX2Zyb21fdXNlcih1c2VyX2J1ZiwgY291bnQsIFx1MDAyNmVuKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuKSB7XG4mIzQzO1x0XHRzZXQgPSBEQVA4MjExUl9QS0dfR0VOX0VOIHwgREFQODIxMVJfUEtHX0NIS19FTiB8IERBUDgyMTFSX1BLR19QTF81QUE1O1xuJiM0MztcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWNyY19jb3IpXG4mIzQzO1x0XHRcdHNldCB8PSBEQVA4MjExUl9QS0dfQ09SX0NSQztcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2Vsb29wYmFjaylcbiYjNDM7XHRcdFx0c2V0X2JtY3IgPSBCTUNSX0xPT1BCQUNLO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzZXRfYm1jciA9IEJNQ1JfQU5FTkFCTEU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHNldCA9IERBUDgyMTFSX1BLR19HRU5fTU9ERSB8IERBUDgyMTFSX1BLR19HQVRFX0VOO1xuJiM0MztcdFx0c2V0X2JtY3IgPSBCTUNSX0FORU5BQkxFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLIHwgQk1DUl9BTkVOQUJMRSwgc2V0X2JtY3IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtYXNrID0gREFQODIxMVJfUEtHX0dFTl9NQVNLIHwgREFQODIxMVJfUEtHX1BMX01BU0sgfCBEQVA4MjExUl9QS0dfQ09SX0NSQztcbiYjNDM7XHRyZXQgPSBkYXA4MjExcl9tb2RpZnlfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUsIG1hc2ssIHNldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLLCAwKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7REVGSU5FX1NIT1dfU1RPUkVfQVRUUklCVVRFKHBrZ19nZW4pO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRhcDgyMTFyX2RlYnVnX2luaXQoKSAtIEluaXRpYWxpemUgZGVidWdmcyBlbnRyaWVzXG4mIzQzOyAqIEBwcml2OiBQcml2YXRlIGRyaXZlciBkYXRhXG4mIzQzOyAqXG4mIzQzOyAqIENyZWF0ZXMgZGVidWdmcyBkaXJlY3RvcnkgYW5kIGZpbGVzIGZvciBQSFkgZGVidWdnaW5nLlxuJiM0MzsgKiAtIGluZm86IFBIWSBzdGF0dXMgaW5mb3JtYXRpb25cbiYjNDM7ICogLSBwa2dfZ2VuOiBFbmFibGUvZGlzYWJsZSBnZW5lcmF0b3IgKDEvMClcbiYjNDM7ICogLSBwa2dfZ2VuX2NyY19jb3I6IEVuYWJsZSBDUkMgY29ycnVwdGlvbiAoWS9OKVxuJiM0MzsgKiAtIHBrZ19nZW5fbG9vcGJhY2s6IEVuYWJsZSBsb29wYmFjayAoWS9OKVxuJiM0MzsgKlxuJiM0MzsgKiBEZWJ1Z2ZzIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RFQlVHX0ZTIGlzIGVuYWJsZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cHJpdi1cdTAwM2Vyb290X2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZShwcml2LVx1MDAzZWRldiksIE5VTEwpO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2Vyb290X2RpcikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7aW5mb1wmIzM0OywgMDQ0NCwgcHJpdi1cdTAwM2Vyb290X2RpciwgcHJpdixcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNmluZm9fZm9wcyk7XG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtwa2dfZ2VuXCYjMzQ7LCAwNjQ0LCBwcml2LVx1MDAzZXJvb3RfZGlyLCBwcml2LFxuJiM0MztcdFx0XHQgICAgXHUwMDI2cGtnX2dlbl9mb3BzKTtcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV9ib29sKFwmIzM0O3BrZ19nZW5fY3JjX2NvclwmIzM0OywgMDY0NCwgcHJpdi1cdTAwM2Vyb290X2RpcixcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnByaXYtXHUwMDNlY3JjX2Nvcik7XG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfYm9vbChcJiMzNDtwa2dfZ2VuX2xvb3BiYWNrXCYjMzQ7LCAwNjQ0LCBwcml2LVx1MDAzZXJvb3RfZGlyLFxuJiM0MztcdFx0XHQgICAgXHUwMDI2cHJpdi1cdTAwM2Vsb29wYmFjayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkYXA4MjExcl9kZWJ1Z19yZW1vdmUoKSAtIFJlbW92ZSBkZWJ1Z2ZzIGVudHJpZXNcbiYjNDM7ICogQHByaXY6IFByaXZhdGUgZHJpdmVyIGRhdGFcbiYjNDM7ICpcbiYjNDM7ICogUmVjdXJzaXZlbHkgcmVtb3ZlcyBhbGwgZGVidWdmcyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgY3JlYXRlZFxuJiM0MzsgKiBieSBkYXA4MjExcl9kZWJ1Z19pbml0KCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19yZW1vdmUoc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocHJpdi1cdTAwM2Vyb290X2Rpcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbHNlIC8qICFDT05GSUdfREVCVUdfRlMgKi9cbiYjNDM7c3RhdGljIHZvaWQgZGFwODIxMXJfZGVidWdfaW5pdChzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cbiYjNDM7c3RhdGljIHZvaWQgZGFwODIxMXJfZGVidWdfcmVtb3ZlKHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KSB7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZGFwODIxMXJfcHJvYmUoKSAtIFBIWSBwcm9iZSBjYWxsYmFja1xuJiM0MzsgKiBAcGh5ZGV2OiBQSFkgZGV2aWNlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZWQgd2hlbiB0aGUgUEhZIGlzIGRpc2NvdmVyZWQuIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXNcbiYjNDM7ICogcHJpdmF0ZSBkcml2ZXIgZGF0YSBhbmQgZGVidWdmcyBlbnRyaWVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBkYXA4MjExcl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XG4mIzQzO1x0ZGFwODIxMXJfZGVidWdfaW5pdChwcml2KTtcbiYjNDM7XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7REFQODIxMVIgUEhZIHByb2JlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZGFwODIxMXJfcmVtb3ZlKCkgLSBQSFkgcmVtb3ZlIGNhbGxiYWNrXG4mIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIENhbGxlZCB3aGVuIHRoZSBQSFkgaXMgcmVtb3ZlZC4gQ2xlYW5zIHVwIHByaXZhdGUgZHJpdmVyIGRhdGFcbiYjNDM7ICogYW5kIGRlYnVnZnMgZW50cmllcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGRhcDgyMTFyX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0ZGFwODIxMXJfZGVidWdfcmVtb3ZlKHBoeWRldi1cdTAwM2Vwcml2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRhcDgyMTFyX2RyaXZlcltdID0ge1xuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChEQVA4MjExUl9QSFlfSUQpLFxuJiM0MztcdFx0Lm5hbWVcdFx0PSBcJiMzNDtEQVA4MjExUiBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdFx0LnByb2JlICAgICAgICAgID0gZGFwODIxMXJfcHJvYmUsXG4mIzQzO1x0XHQucmVtb3ZlXHRcdD0gZGFwODIxMXJfcmVtb3ZlLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHQ9IGRhcDgyMTFyX2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHQ9IGdlbnBoeV9yZWFkX3N0YXR1cyxcbiYjNDM7XHRcdC5zZXRfbG9vcGJhY2tcdD0gZ2VucGh5X2xvb3BiYWNrLFxuJiM0MztcdFx0LmNvbmZpZ19hbmVnXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIoZGFwODIxMXJfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtEQVA4MjExUiBHaWdhYml0IEV0aGVybmV0IFBIWSBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0FydGVtIFNoaW1rbyBcdTAwM2NhLnNoaW1rby5kZXZAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZGFwODIxMXJfdGJbXSA9IHtcbiYjNDM7XHR7IERBUDgyMTFSX1BIWV9JRCwgREFQODIxMVJfUEhZX0lEX01BU0sgfSxcbiYjNDM7XHR7IC8qIHNlbnRpbmVsICovIH1cbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBkYXA4MjExcl90Yik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFQODIxMVJfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFwODIxMXJfcHJvYmUmIzM0OywKICAgICYjMzQ7ZGFwODIxMXJfY29uZmlnX2luaXQmIzM0OywKICAgICYjMzQ7cGtnX2dlbl93cml0ZSYjMzQ7LAogICAgJiMzNDtpbmZvX3Nob3cmIzM0OywKICAgICYjMzQ7cGtnX2dlbl9zaG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgREFQVSBUZWxlY29tIERBUDgyMTFSKEkpLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgRXRoZXJuZXQgZGV2aWNlIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCByZXNwb25kcyB0byBNRElPIHJlYWRzIHdpdGggdGhlIERBUDgyMTFSIFBIWSBJRC4gT25jZSBwcm9iZWQsIHRoZSBkcml2ZXImIzM5O3MgYGNvbmZpZ19pbml0YCBhbmQgZGVidWdmcyBvcGVyYXRpb25zIChgaW5mb19zaG93YCwgYHBrZ19nZW5fc2hvd2AsIGBwa2dfZ2VuX3dyaXRlYCkgY2FuIGJlIGV4ZXJjaXNlZCBieSB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzNDZmNzE1MDBiNmE3YmIxYjA1YTgzYjgyMjgxOWYxNDk2NmRhZDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAxNzoyMjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGFwdSxkYXA4MjExci55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIwOGE4MmY3NzlkNjFlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwKQEAgLTAsMCAmIzQzOzEsNzggQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWQomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBBcnRlbSBTaGlta28gJmx0O2Euc2hpbWtvLmRldkBnbWFpbC5jb20mZ3Q7CiYjNDM7CiYjNDM7ZGVzY3JpcHRpb246IHwKJiM0MzsgIFRoZSBEQVA4MjExUihJKSBpcyBhIEdpZ2FiaXQgRXRoZXJuZXQgUEhZIHdpdGggUkdNSUkgaW50ZXJmYWNlLAomIzQzOyAgc3VwcG9ydGluZyBJRUVFIDgwMi4zYXogRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldCwgSUVFRSAxNTg4IFN5bmNFLAomIzQzOyAgYW5kIGFuIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IgZm9yIGRpYWdub3N0aWNzLgomIzQzOwomIzQzOyAgU3BlY2lmaWNhdGlvbnM6CiYjNDM7ICAgIC0gMTBCQVNFLVRlLCAxMDBCQVNFLVRYLCAxMDAwQkFTRS1UCiYjNDM7ICAgIC0gUkdNSUkgd2l0aCBjb25maWd1cmFibGUgVFgvUlggY2xvY2sgZGVsYXlzICgxNTAgcHMgc3RlcHMsIDAtMjI1MCBwcykKJiM0MzsgICAgLSBJRUVFIDgwMi4zYXotMjAxMCBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0CiYjNDM7ICAgIC0gSUVFRSAxNTg4IFN5bmNFIHN1cHBvcnQKJiM0MzsgICAgLSBJbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yIGFuZCBjaGVja2VyIGZvciBsaW5rIGRpYWdub3N0aWNzCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IGV0aGVybmV0LXBoeS55YW1sIwomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDAwOC4wMTFiCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICByeC1pbnRlcm5hbC1kZWxheS1wczoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUkdNSUkgUlggY2xvY2sgZGVsYXkgaW4gcGljb3NlY29uZHMuIFRoZSBQSFkgc3VwcG9ydHMgMTUwIHBzIHN0ZXBzCiYjNDM7ICAgICAgZnJvbSAwIHRvIDIyNTAgcHMuIElmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIDE5NTAgcHMuIElmIHRoZQomIzQzOyAgICAgIHJlcXVlc3RlZCB2YWx1ZSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIGEgc3VwcG9ydGVkIHN0ZXAsIHRoZSBkcml2ZXIKJiM0MzsgICAgICBzZWxlY3RzIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZSBhbmQgaXNzdWVzIGEgd2FybmluZy4KJiM0MzsgICAgZW51bTogWzAsIDE1MCwgMzAwLCA0NTAsIDYwMCwgNzUwLCA5MDAsIDEwNTAsIDEyMDAsIDEzNTAsIDE1MDAsCiYjNDM7ICAgICAgICAgICAxNjUwLCAxODAwLCAxOTUwLCAyMTAwLCAyMjUwXQomIzQzOyAgICBkZWZhdWx0OiAxOTUwCiYjNDM7CiYjNDM7ICB0eC1pbnRlcm5hbC1kZWxheS1wczoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUkdNSUkgVFggY2xvY2sgZGVsYXkgaW4gcGljb3NlY29uZHMuIFRoZSBQSFkgc3VwcG9ydHMgMTUwIHBzIHN0ZXBzCiYjNDM7ICAgICAgZnJvbSAwIHRvIDIyNTAgcHMuIElmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIDE5NTAgcHMuIElmIHRoZQomIzQzOyAgICAgIHJlcXVlc3RlZCB2YWx1ZSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIGEgc3VwcG9ydGVkIHN0ZXAsIHRoZSBkcml2ZXIKJiM0MzsgICAgICBzZWxlY3RzIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZSBhbmQgaXNzdWVzIGEgd2FybmluZy4KJiM0MzsgICAgZW51bTogWzAsIDE1MCwgMzAwLCA0NTAsIDYwMCwgNzUwLCA5MDAsIDEwNTAsIDEyMDAsIDEzNTAsIDE1MDAsCiYjNDM7ICAgICAgICAgICAxNjUwLCAxODAwLCAxOTUwLCAyMTAwLCAyMjUwXQomIzQzOyAgICBkZWZhdWx0OiAxOTUwCiYjNDM7CiYjNDM7ICB0eC1pbnZlcnRlZC1jbGs6CiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL2ZsYWcKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgSWYgcHJlc2VudCwgdGhlIFJHTUlJIFRYIGNsb2NrIHRvIHRoZSBNQUMgaXMgaW52ZXJ0ZWQgKDE4MCBkZWdyZWUKJiM0MzsgICAgICBwaGFzZSBzaGlmdCByZWxhdGl2ZSB0byB0aGUgZGF0YSBsaW5lcykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMKJiM0MzsgICAgICBleHRlbnNpb24gZm9yIGJvYXJkcyB3aGVyZSBQQ0IgdHJhY2UgbGVuZ3RoIG9yIE1BQyByZXF1aXJlbWVudHMKJiM0MzsgICAgICBuZWNlc3NpdGF0ZSBjbG9jayBpbnZlcnNpb24uIE9ubHkgdXNlIHRoaXMgcHJvcGVydHkgYWZ0ZXIgaGFyZHdhcmUKJiM0MzsgICAgICBzaWduYWwgaW50ZWdyaXR5IHZhbGlkYXRpb24uCiYjNDM7CiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO2V4YW1wbGVzOgomIzQzOyAgLSB8CiYjNDM7ICAgIG1kaW8gewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeUAxIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDtldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMiYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICByeC1pbnRlcm5hbC1kZWxheS1wcyA9ICZsdDsxMDUwJmd0OzsKJiM0MzsgICAgICAgICAgICB0eC1pbnRlcm5hbC1kZWxheS1wcyA9ICZsdDsxMTUwJmd0OzsKJiM0MzsgICAgICAgICAgICB0eC1pbnZlcnRlZC1jbGs7CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKaW5kZXggMDk5ZjI1ZGNlYWJiYzcuLjQ1NzZmNzA3YWM5NDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtMjM3LDYgJiM0MzsyMzcsMTYgQEAgY29uZmlnIERBVklDT01fUEhZCiAJaGVscAogCSAgQ3VycmVudGx5IHN1cHBvcnRzIGRtOTE2MWUgYW5kIGRtOTEzMQogCiYjNDM7Y29uZmlnIERBUDgyMTFSX1BIWQomIzQzOwl0cmlzdGF0ZSAmIzM0O0RBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWSYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gT0YKJiM0MzsJaGVscAomIzQzOwkgIFN1cHBvcnQgZm9yIHRoZSBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkgR2lnYWJpdCBFdGhlcm5ldCBQSFkuCiYjNDM7CSAgVGhpcyBQSFkgaXMgZGVzaWduZWQgZm9yIGVudGVycHJpc2UgYW5kIGluZHVzdHJpYWwgbmV0d29ya2luZwomIzQzOwkgIGFwcGxpY2F0aW9ucywgc3VwcG9ydGluZyAxMC8xMDAvMTAwMCBNYnBzIG9wZXJhdGlvbi4KJiM0MzsJICBSR01JSSB3aXRoOiBjb25maWd1cmFibGUgVFgvUlggY2xvY2sgZGVsYXlzLCBvcHRpb25hbCBmbGFnIHRvIGVuYWJsZQomIzQzOwkgIDE4MC1kZWdyZWUgVFggY2xvY2sgcGhhc2Ugc2hpZnQgYW5kIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IuCiYjNDM7CiBjb25maWcgSUNQTFVTX1BIWQogCXRyaXN0YXRlICYjMzQ7SUNQbHVzIFBIWXMmIzM0OwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQppbmRleCBkZTY2MGFlOTQ5NDUzZC4uYWQzNTczM2ViNGJiNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKQEAgLTUzLDYgJiM0Mzs1Myw3IEBAIG9iai0kKENPTkZJR19CUk9BRENPTV9QSFkpCSYjNDM7PSBicm9hZGNvbS5vCiBvYmotJChDT05GSUdfQ0lDQURBX1BIWSkJJiM0Mzs9IGNpY2FkYS5vCiBvYmotJChDT05GSUdfQ09SVElOQV9QSFkpCSYjNDM7PSBjb3J0aW5hLm8KIG9iai0kKENPTkZJR19EQVZJQ09NX1BIWSkJJiM0Mzs9IGRhdmljb20ubwomIzQzO29iai0kKENPTkZJR19EQVA4MjExUl9QSFkpCSYjNDM7PSBkYXA4MjExci5vCiBvYmotJChDT05GSUdfRFA4MzY0MF9QSFkpCSYjNDM7PSBkcDgzNjQwLm8KIG9iai0kKENPTkZJR19EUDgzODIyX1BIWSkJJiM0Mzs9IGRwODM4MjIubwogb2JqLSQoQ09ORklHX0RQODM4NDhfUEhZKQkmIzQzOz0gZHA4Mzg0OC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYyBiL2RyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZDY5NWJjNDk1M2EyYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jCkBAIC0wLDAgJiM0MzsxLDU0NCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwKJiM0MzsvKgomIzQzOyAqIERyaXZlciBmb3IgdGhlIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWS4KJiM0MzsgKgomIzQzOyAqIFNwZWNpZmljYXRpb25zOgomIzQzOyAqICAgLSBJRUVFIDgwMi4zIDEwQkFTRS1UZSwgMTAwQkFTRS1UWCwgMTAwMEJBU0UtVAomIzQzOyAqICAgLSBJRUVFIDgwMi4zYXotMjAxMCBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0CiYjNDM7ICogICAtIElFRUUgMTU4OCBTeW5jRSBzdXBwb3J0CiYjNDM7ICogICAtIFJHTUlJCiYjNDM7ICogICAtIFBhY2thZ2UgR2VuZXJhdG9yIGZvciBkaWFnbm9zdGljcwomIzQzOyAqCiYjNDM7ICogQXV0aG9yOiBBcnRlbSBTaGlta28gJmx0O2Euc2hpbWtvLmRldkBnbWFpbC5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXRodG9vbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfSUQJCQkweDAwMDgwMTFCCiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfSURfTUFTSwkJMHhGRkZGRkZGRgomIzQzOwomIzQzOyNkZWZpbmUgREFQODIxMVJfRVhUX0FERAkJMHgxRQomIzQzOyNkZWZpbmUgREFQODIxMVJfRVhUX0RBVEEJCTB4MUYKJiM0MzsKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR0M1CQkJMHhBMAomIzQzOyNkZWZpbmUgREFQODIxMVJfUEtHX1BMX01BU0sJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19QTF81QUE1CQlCSVQoMSkKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19DT1JfQ1JDCQlCSVQoMikKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fRU4JCUJJVCgxMikKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTU9ERQkJQklUKDEzKQomIzQzOyNkZWZpbmUgREFQODIxMVJfUEtHX0dBVEVfRU4JCUJJVCgxNCkKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19DSEtfRU4JCUJJVCgxNSkKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTUFTSwkJR0VOTUFTSygxNSwgMTIpCiYjNDM7CiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfQ09OCQkweEEwMDEKJiM0MzsjZGVmaW5lIERBUDgyMTFSX1BIWV9MRE9fRU4JCUJJVCg2KQomIzQzOyNkZWZpbmUgREFQODIxMVJfUEhZX1JYX0RMWQkJQklUKDgpCiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfR0FURV9SWF9DTEsJQklUKDkpCiYjNDM7I2RlZmluZSBEQVA4MjExUl9QSFlfU1dfUlNUCQlCSVQoMTUpCiYjNDM7CiYjNDM7I2RlZmluZSBEQVA4MjExUl9SR01JSV9DT04JCTB4QTAwMwomIzQzOyNkZWZpbmUgREFQODIxMVJfUkdNSUlfVFhfREVMX01BU0sJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0sJR0VOTUFTSygxMywgMTApCiYjNDM7I2RlZmluZSBEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJUCUJJVCgxNCkKJiM0MzsKJiM0MzsvKiBEZWZhdWx0IFJHTUlJIGRlbGF5ICgxLjk1bnMgPT0gMTMgKiAxNTApcHMpICovCiYjNDM7I2RlZmluZSBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTCTE5NTAKJiM0MzsKJiM0MztzdHJ1Y3QgZGFwODIxMXJfZGVsYXlfY29uZmlnIHsKJiM0MzsJdTMyIHBzOwomIzQzOwl1OCBzZWw7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRhcDgyMTFyX2RlbGF5X2NvbmZpZyBkZWxheV9jb25maWdbXSA9IHsKJiM0MzsJeyAgIDAsIDB9LAomIzQzOwl7IDE1MCwgMX0sCiYjNDM7CXsgMzAwLCAyfSwKJiM0MzsJeyA0NTAsIDN9LAomIzQzOwl7IDYwMCwgNH0sCiYjNDM7CXsgNzUwLCA1fSwKJiM0MzsJeyA5MDAsIDZ9LAomIzQzOwl7MTA1MCwgN30sCiYjNDM7CXsxMjAwLCA4fSwKJiM0MzsJezEzNTAsIDl9LAomIzQzOwl7MTUwMCwgMTB9LAomIzQzOwl7MTY1MCwgMTF9LAomIzQzOwl7MTgwMCwgMTJ9LAomIzQzOwl7MTk1MCwgMTN9LAomIzQzOwl7MjEwMCwgMTR9LAomIzQzOwl7MjI1MCwgMTV9LAomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBEQVA4MjExUl9ERUxBWV9DT1VOVAlBUlJBWV9TSVpFKGRlbGF5X2NvbmZpZykKJiM0MzsKJiM0MztzdHJ1Y3QgZGFwODIxMXJfcHJpdiB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfRlMpCiYjNDM7CXN0cnVjdCBkZW50cnkgKnJvb3RfZGlyOwomIzQzOwlib29sIGNyY19jb3I7CiYjNDM7CWJvb2wgbG9vcGJhY2s7CiYjNDM7I2VuZGlmCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkYXA4MjExcl9kZWxheV9wc190b19zZWwoKSAtIENvbnZlcnQgcGljb3NlY29uZHMgdG8gcmVnaXN0ZXIgdmFsdWUKJiM0MzsgKiBAcHM6IERlbGF5IGluIHBpY29zZWNvbmRzICgwLTIyNTApCiYjNDM7ICoKJiM0MzsgKiBDb252ZXJ0cyBhIGRlbGF5IHZhbHVlIGluIHBpY29zZWNvbmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIHZhbHVlCiYjNDM7ICogZm9yIFJHTUlJIGRlbGF5IGNvbmZpZ3VyYXRpb24uIFRoZSBQSFkgc3VwcG9ydHMgMTUwcHMgc3RlcHMgZnJvbSAwIHRvIDIyNTBwcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmVnaXN0ZXIgdmFsdWUgKDAtMTUpCiYjNDM7ICovCiYjNDM7c3RhdGljIHUxNiBkYXA4MjExcl9kZWxheV9wc190b19zZWwoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBzKQomIzQzO3sKJiM0MzsJaW50IGksIGJlc3RfaWR4ID0gMDsKJiM0MzsJdTMyIGJlc3RfZGlmZiA9IFVJTlRfTUFYLCBkaWZmID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwcykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgREFQODIxMVJfREVMQVlfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlkaWZmID0gYWJzKHBzIC0gZGVsYXlfY29uZmlnW2ldLnBzKTsKJiM0MzsKJiM0MzsJCWlmIChkaWZmICZsdDsgYmVzdF9kaWZmKSB7CiYjNDM7CQkJYmVzdF9kaWZmID0gZGlmZjsKJiM0MzsJCQliZXN0X2lkeCA9IGk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWRpZmYpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJlc3RfZGlmZikKJiM0MzsJCXBoeWRldl93YXJuKHBoeWRldiwgJiMzNDtEZWxheSAldSBwcyBub3QgZm91bmQsIHVzaW5nIGNsb3Nlc3QgJXUgcHNcbiYjMzQ7LCBwcywKJiM0MzsJCQkgICAgZGVsYXlfY29uZmlnW2Jlc3RfaWR4XS5wcyk7CiYjNDM7CiYjNDM7CXBoeWRldl9kYmcocGh5ZGV2LCAmIzM0O0RlbGF5IHBzIGlkeDogJXVcbiYjMzQ7LCBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbCk7CiYjNDM7CiYjNDM7CXJldHVybiBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGFwODIxMXJfcmVhZF9leHQoKSAtIFJlYWQgZXh0ZW5kZWQgcmVnaXN0ZXIKJiM0MzsgKiBAcGh5ZGV2OiBQSFkgZGV2aWNlIHN0cnVjdHVyZQomIzQzOyAqIEByZWc6IEV4dGVuZGVkIHJlZ2lzdGVyIGFkZHJlc3MKJiM0MzsgKgomIzQzOyAqIFJlYWRzIGEgUEhZIGV4dGVuZGVkIHJlZ2lzdGVyIHVzaW5nIHRoZSBpbmRpcmVjdCBhY2Nlc3MgbWV0aG9kLgomIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBNRElPIGJ1cyBsb2NrLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBSZWdpc3RlciB2YWx1ZSBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYXA4MjExcl9yZWFkX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBEQVA4MjExUl9FWFRfQURELCByZWcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgREFQODIxMVJfRVhUX0RBVEEpOwomIzQzO291dDoKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkYXA4MjExcl9tb2RpZnlfZXh0KCkgLSBNb2RpZnkgZXh0ZW5kZWQgcmVnaXN0ZXIgYml0cwomIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICogQHJlZzogRXh0ZW5kZWQgcmVnaXN0ZXIgYWRkcmVzcwomIzQzOyAqIEBtYXNrOiBCaXQgbWFzayBvZiBiaXRzIHRvIGNsZWFyCiYjNDM7ICogQHNldDogQml0IG1hc2sgb2YgYml0cyB0byBzZXQKJiM0MzsgKgomIzQzOyAqIE1vZGlmaWVzIGEgUEhZIGV4dGVuZGVkIHJlZ2lzdGVyIHVzaW5nIHRoZSBpbmRpcmVjdCBhY2Nlc3MgbWV0aG9kLgomIzQzOyAqIE5ldyB2YWx1ZSA9IChvbGQgdmFsdWUgJmFtcDsgfm1hc2spIHwgc2V0LgomIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBNRElPIGJ1cyBsb2NrLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGRhcDgyMTFyX21vZGlmeV9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IG1hc2ssIHUxNiBzZXQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIERBUDgyMTFSX0VYVF9BREQsIHJlZyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIERBUDgyMTFSX0VYVF9EQVRBLCBtYXNrLCBzZXQpOwomIzQzO291dDoKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoKSAtIEdldCBSR01JSSBkZWxheSBmcm9tIGRldmljZSB0cmVlCiYjNDM7ICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAcHJvcF9uYW1lOiBEZXZpY2UgdHJlZSBwcm9wZXJ0eSBuYW1lCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgUkdNSUkgZGVsYXkgZnJvbSB0aGUgZGV2aWNlIHRyZWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QKJiM0MzsgKiBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGRlbGF5ICgxOTUwcHMpIGlzIHVzZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJlZ2lzdGVyIHZhbHVlICgwLTE1KSBvciBkZWZhdWx0IGlmIHByb3BlcnR5IG5vdCBmb3VuZAomIzQzOyAqLwomIzQzO3N0YXRpYyB1MzIgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKnByb3BfbmFtZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGU7CiYjNDM7CWludCByZXQ7CiYjNDM7CXUzMiBwcyA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBwcm9wX25hbWUsICZhbXA7cHMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDtVc2luZyBkZWZhdWx0IGRlbGF5ICgldXBzKVxuJiMzNDssIERBUDgyMTFSX0RFRkFVTFRfREVMQVlfUFMpOwomIzQzOwkJcHMgPSBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBkYXA4MjExcl9kZWxheV9wc190b19zZWwocGh5ZGV2LCBwcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRhcDgyMTFyX2NvbmZpZ19pbml0KCkgLSBJbml0aWFsaXplIFBIWQomIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBDb25maWd1cmVzIHRoZSBQSFkgZHVyaW5nIGluaXRpYWxpemF0aW9uOgomIzQzOyAqIC0gUkdNSUkgZGVsYXlzIGJhc2VkIG9uIGludGVyZmFjZSBtb2RlCiYjNDM7ICogLSBUWCBjbG9jayBpbnZlcnRpb24KJiM0MzsgKiAtIFNvZnR3YXJlIHJlc2V0IHRvIGFwcGx5IHNldHRpbmdzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZGFwODIxMXJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5ZGV2X25vZGUgPSBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGU7CiYjNDM7CXUxNiBtYXNrID0gMCwgc2V0ID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChwaHlkZXYtJmd0O2ludGVyZmFjZSkgewomIzQzOwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSToKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOgomIzQzOwkJc2V0ID0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSywKJiM0MzsJCQkJIGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsICYjMzQ7cngtaW50ZXJuYWwtZGVsYXktcHMmIzM0OykpOwomIzQzOwkJbWFzayA9IERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEOgomIzQzOwkJc2V0ID0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSywKJiM0MzsJCQkJIGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsICYjMzQ7cngtaW50ZXJuYWwtZGVsYXktcHMmIzM0OykpOwomIzQzOwkJbWFzayA9IERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6CiYjNDM7CQlzZXQgfD0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9UWF9ERUxfTUFTSywKJiM0MzsJCQkJICBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkocGh5ZGV2LCAmIzM0O3R4LWludGVybmFsLWRlbGF5LXBzJiMzNDspKTsKJiM0MzsJCW1hc2sgfD0gREFQODIxMVJfUkdNSUlfVFhfREVMX01BU0s7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIGludGVyZmFjZTogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGh5ZGV2X25vZGUsICYjMzQ7dHgtdXNlLWludmVydGVkLWNsayYjMzQ7KSkKJiM0MzsJCXNldCB8PSBEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJUOwomIzQzOwomIzQzOwltYXNrIHw9IERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQ7CiYjNDM7CiYjNDM7CXJldCA9IGRhcDgyMTFyX21vZGlmeV9leHQocGh5ZGV2LCBEQVA4MjExUl9QSFlfQ09OLCBEQVA4MjExUl9QSFlfU1dfUlNULCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIHJlc2V0IHNlbGYtY2xlYXIgKi8KJiM0MzsJZnNsZWVwKDIwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGRhcDgyMTFyX21vZGlmeV9leHQocGh5ZGV2LCBEQVA4MjExUl9SR01JSV9DT04sIG1hc2ssIHNldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDtSR01JSSBjb25maWd1cmVkOiBpbnRlcmZhY2U9JWQsIG1hc2s9MHglMDR4LCBzZXQ9MHglMDR4XG4mIzM0OywKJiM0MzsJCSAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlLCBtYXNrLCBzZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGluZm9fc2hvdygpIC0gU2hvdyBQSFkgc3RhdHVzIGluZm9ybWF0aW9uCiYjNDM7ICogQHNmOiBTZXF1ZW5jZSBmaWxlIHN0cnVjdHVyZQomIzQzOyAqIEBkYXRhOiBQcml2YXRlIGRhdGEgKHN0cnVjdCBkYXA4MjExcl9wcml2ICopCiYjNDM7ICoKJiM0MzsgKiBEaXNwbGF5cyBQSFkgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzIHJlZ2lzdGVycyBmb3IgZGVidWdnaW5nLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGluZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi0mZ3Q7ZGV2KTsKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJdmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QSFlfQ09OKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwlzZXFfcHJpbnRmKHNmLCAmIzM0O1BIWV9DT046IDB4JTA0eFxuJiMzNDssIHZhbCk7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7ICBMRE8gZW5hYmxlZDogJXNcbiYjMzQ7LCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX0xET19FTiwgdmFsKSAgPwomIzQzOwkJICAgJiMzNDt5ZXMmIzM0OyA6ICYjMzQ7bm8mIzM0Oyk7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7ICBSWCBkbHkgZW46ICVzXG4mIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1BIWV9SWF9ETFksIHZhbCkgPwomIzQzOwkJICAgJiMzNDt5ZXMmIzM0OyA6ICYjMzQ7bm8mIzM0Oyk7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7ICBSWCBja2wgZ2F0aW5nOiAlc1xuJiMzNDssIEZJRUxEX0dFVChEQVA4MjExUl9QSFlfR0FURV9SWF9DTEssIHZhbCkgPwomIzQzOwkJICAgJiMzNDt5ZXMmIzM0OyA6ICYjMzQ7bm8mIzM0Oyk7CiYjNDM7CiYjNDM7CXZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUkdNSUlfQ09OKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwlzZXFfcHJpbnRmKHNmLCAmIzM0O1JHTUlJX0NPTjogMHglMDR4XG4mIzM0OywgdmFsKTsKJiM0MzsJc2VxX3ByaW50ZihzZiwgJiMzNDsgIFRYIGRlbGF5IGlkeDogJWx4XG4mIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLLCB2YWwpKTsKJiM0MzsJc2VxX3ByaW50ZihzZiwgJiMzNDsgIFJYIGRlbGF5IGlkeDogJWx4XG4mIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLLCB2YWwpKTsKJiM0MzsJc2VxX3ByaW50ZihzZiwgJiMzNDsgIENMSyBpbnZlcnQ6ICVzXG4mIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQsIHZhbCkgPwomIzQzOwkJICAgJiMzNDt5ZXMmIzM0OyA6ICYjMzQ7bm8mIzM0Oyk7CiYjNDM7CiYjNDM7CXZhbCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNU1IpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7Qk1TUjogMHglMDR4XG4mIzM0OywgdmFsKTsKJiM0MzsJc2VxX3ByaW50ZihzZiwgJiMzNDsgIExpbms6ICVzXG4mIzM0OywgRklFTERfR0VUKEJNU1JfTFNUQVRVUywgdmFsKSA/CiYjNDM7CQkgICAmIzM0O3VwJiMzNDsgOiAmIzM0O2Rvd24mIzM0Oyk7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7ICBBTiBjb21wbGV0ZTogJXNcbiYjMzQ7LCBGSUVMRF9HRVQoQk1TUl9BTkVHQ09NUExFVEUsIHZhbCkgPwomIzQzOwkJICAgJiMzNDt5ZXMmIzM0OyA6ICYjMzQ7bm8mIzM0Oyk7CiYjNDM7CiYjNDM7CXZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CiYjNDM7CWlmIChGSUVMRF9HRVQoREFQODIxMVJfUEtHX0dFTl9FTiwgdmFsKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBGSUVMRF9HRVQoREFQODIxMVJfUEtHX0NIS19FTiwgdmFsKSkKJiM0MzsJCXNlcV9wdXRzKHNmLCAmIzM0O1dBUk5JTkc6IFBhY2thZ2UgR2VuZXJhdGluZyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztERUZJTkVfU0hPV19BVFRSSUJVVEUoaW5mbyk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGtnX2dlbl9zaG93KCkgLSBTaG93IHBhY2tldCBnZW5lcmF0b3Igc3RhdHVzCiYjNDM7ICogQHNmOiBTZXF1ZW5jZSBmaWxlIHN0cnVjdHVyZQomIzQzOyAqIEBkYXRhOiBQcml2YXRlIGRhdGEgKHN0cnVjdCBkYXA4MjExcl9wcml2ICopCiYjNDM7ICoKJiM0MzsgKiBEaXNwbGF5cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IsCiYjNDM7ICogaW5jbHVkaW5nIENSQyBjb3JydXB0aW9uIGFuZCBsb29wYmFjayBzZXR0aW5ncy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBwa2dfZ2VuX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2ID0gc2YtJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0b19waHlfZGV2aWNlKHByaXYtJmd0O2Rldik7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CiYjNDM7CXNlcV9wdXRzKHNmLCAmIzM0O1BhY2thZ2UgR2VuZXJhdGluZzogJiMzNDspOwomIzQzOwlpZiAoRklFTERfR0VUKERBUDgyMTFSX1BLR19HRU5fRU4sIHZhbCkgJmFtcDsmYW1wOwomIzQzOwkgICAgRklFTERfR0VUKERBUDgyMTFSX1BLR19DSEtfRU4sIHZhbCkpCiYjNDM7CQlzZXFfcHV0cyhzZiwgJiMzNDtlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCXNlcV9wdXRzKHNmLCAmIzM0O2Rpc2FibGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYoc2YsICYjMzQ7Q1JDIGNvcnJ1cHRpb24gZW46ICVzXG4mIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1BLR19DT1JfQ1JDLCB2YWwpID8KJiM0MzsJCSAgICYjMzQ7ZW5hYmxlZCYjMzQ7IDogJiMzNDtkaXNhYmxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJdmFsID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmICh2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHZhbDsKJiM0MzsKJiM0MzsJc2VxX3ByaW50ZihzZiwgJiMzNDtMb29wYmFjayBlbjogJXNcbiYjMzQ7LCBGSUVMRF9HRVQoQk1DUl9MT09QQkFDSywgdmFsKSA/CiYjNDM7CQkgICAmIzM0O2VuYWJsZWQmIzM0OyA6ICYjMzQ7ZGlzYWJsZWQmIzM0Oyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwa2dfZ2VuX3dyaXRlKCkgLSBFbmFibGUvZGlzYWJsZSBwYWNrZXQgZ2VuZXJhdG9yCiYjNDM7ICogQGZpbGU6IEZpbGUgc3RydWN0dXJlCiYjNDM7ICogQHVzZXJfYnVmOiBVc2VyIHNwYWNlIGJ1ZmZlcgomIzQzOyAqIEBjb3VudDogQnVmZmVyIHNpemUKJiM0MzsgKiBAcHBvczogRmlsZSBwb3NpdGlvbgomIzQzOyAqCiYjNDM7ICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvci4KJiM0MzsgKiBBbHNvIGNvbnRyb2xzIGxvb3BiYWNrIGFuZCBDUkMgY29ycnVwdGlvbiB2aWEgZGVidWdmcyBmbGFncy4KJiM0MzsgKgomIzQzOyAqIE5PVEU6IFdlIGludGVudGlvbmFsbHkgZG8gbm90IHVzZSBnZW5waHlfbG9vcGJhY2soKSBoZXJlLgomIzQzOyAqIGdlbnBoeV9sb29wYmFjaygpIGRvZXMgYSBmdWxsIEJNQ1Igb3ZlcndyaXRlIChtYXNrID0gfjApIGFuZAomIzQzOyAqIHdhaXRzIHVwIHRvIDUwMCBtcyBmb3IgbGluayBpbiBsb29wYmFjayBtb2RlLiBUaGlzIGlzIHRvbwomIzQzOyAqIGhlYXZ5IGZvciBhIGRpYWdub3N0aWMgcGFja2V0IGdlbmVyYXRvcjoKJiM0MzsgKgomIzQzOyAqIC0gSXQgZGVzdHJveXMgYWxsIG90aGVyIEJNQ1Igc3RhdGUgKHNwZWVkLCBkdXBsZXgsIEFOIGNvbmZpZykuCiYjNDM7ICogLSBUaGUgNTAwIG1zIGxpbmsgcG9sbCBpcyB1bm5lY2Vzc2FyeTogd2UgYWxyZWFkeSBoYXZlIGEgbGluawomIzQzOyAqICAgb3IgYXJlIGRlbGliZXJhdGVseSBzZXR0aW5nIHVwIGEgdGVzdCBjb25kaXRpb24uCiYjNDM7ICogLSBXZSB3YW50IHRvIG1pbmltaXplIGNoYW5nZXMgdG8gQk1DUiBkdXJpbmcgZGVidWdnaW5nLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QgcGtnX2dlbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKJiM0MzsJCQkgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKJiM0MzsJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQomIzQzO3sKJiM0MzsJc3RydWN0IHNlcV9maWxlICpzZiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi0mZ3Q7ZGV2KTsKJiM0MzsJYm9vbCBlbjsKJiM0MzsJdTE2IG1hc2ssIHNldCwgc2V0X2JtY3I7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b2Jvb2xfZnJvbV91c2VyKHVzZXJfYnVmLCBjb3VudCwgJmFtcDtlbik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoZW4pIHsKJiM0MzsJCXNldCA9IERBUDgyMTFSX1BLR19HRU5fRU4gfCBEQVA4MjExUl9QS0dfQ0hLX0VOIHwgREFQODIxMVJfUEtHX1BMXzVBQTU7CiYjNDM7CiYjNDM7CQlpZiAocHJpdi0mZ3Q7Y3JjX2NvcikKJiM0MzsJCQlzZXQgfD0gREFQODIxMVJfUEtHX0NPUl9DUkM7CiYjNDM7CiYjNDM7CQlpZiAocHJpdi0mZ3Q7bG9vcGJhY2spCiYjNDM7CQkJc2V0X2JtY3IgPSBCTUNSX0xPT1BCQUNLOwomIzQzOwkJZWxzZQomIzQzOwkJCXNldF9ibWNyID0gQk1DUl9BTkVOQUJMRTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXNldCA9IERBUDgyMTFSX1BLR19HRU5fTU9ERSB8IERBUDgyMTFSX1BLR19HQVRFX0VOOwomIzQzOwkJc2V0X2JtY3IgPSBCTUNSX0FORU5BQkxFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9MT09QQkFDSyB8IEJNQ1JfQU5FTkFCTEUsIHNldF9ibWNyKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwltYXNrID0gREFQODIxMVJfUEtHX0dFTl9NQVNLIHwgREFQODIxMVJfUEtHX1BMX01BU0sgfCBEQVA4MjExUl9QS0dfQ09SX0NSQzsKJiM0MzsJcmV0ID0gZGFwODIxMXJfbW9kaWZ5X2V4dChwaHlkZXYsIERBUDgyMTFSX1BLR0M1LCBtYXNrLCBzZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLLCAwKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MztERUZJTkVfU0hPV19TVE9SRV9BVFRSSUJVVEUocGtnX2dlbik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGFwODIxMXJfZGVidWdfaW5pdCgpIC0gSW5pdGlhbGl6ZSBkZWJ1Z2ZzIGVudHJpZXMKJiM0MzsgKiBAcHJpdjogUHJpdmF0ZSBkcml2ZXIgZGF0YQomIzQzOyAqCiYjNDM7ICogQ3JlYXRlcyBkZWJ1Z2ZzIGRpcmVjdG9yeSBhbmQgZmlsZXMgZm9yIFBIWSBkZWJ1Z2dpbmcuCiYjNDM7ICogLSBpbmZvOiBQSFkgc3RhdHVzIGluZm9ybWF0aW9uCiYjNDM7ICogLSBwa2dfZ2VuOiBFbmFibGUvZGlzYWJsZSBnZW5lcmF0b3IgKDEvMCkKJiM0MzsgKiAtIHBrZ19nZW5fY3JjX2NvcjogRW5hYmxlIENSQyBjb3JydXB0aW9uIChZL04pCiYjNDM7ICogLSBwa2dfZ2VuX2xvb3BiYWNrOiBFbmFibGUgbG9vcGJhY2sgKFkvTikKJiM0MzsgKgomIzQzOyAqIERlYnVnZnMgaXMgb25seSBhdmFpbGFibGUgd2hlbiBDT05GSUdfREVCVUdfRlMgaXMgZW5hYmxlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcHJpdi0mZ3Q7cm9vdF9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUocHJpdi0mZ3Q7ZGV2KSwgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7cm9vdF9kaXIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7aW5mbyYjMzQ7LCAwNDQ0LCBwcml2LSZndDtyb290X2RpciwgcHJpdiwKJiM0MzsJCQkgICAgJmFtcDtpbmZvX2ZvcHMpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7cGtnX2dlbiYjMzQ7LCAwNjQ0LCBwcml2LSZndDtyb290X2RpciwgcHJpdiwKJiM0MzsJCQkgICAgJmFtcDtwa2dfZ2VuX2ZvcHMpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCYjMzQ7cGtnX2dlbl9jcmNfY29yJiMzNDssIDA2NDQsIHByaXYtJmd0O3Jvb3RfZGlyLAomIzQzOwkJCSAgICAmYW1wO3ByaXYtJmd0O2NyY19jb3IpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCYjMzQ7cGtnX2dlbl9sb29wYmFjayYjMzQ7LCAwNjQ0LCBwcml2LSZndDtyb290X2RpciwKJiM0MzsJCQkgICAgJmFtcDtwcml2LSZndDtsb29wYmFjayk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRhcDgyMTFyX2RlYnVnX3JlbW92ZSgpIC0gUmVtb3ZlIGRlYnVnZnMgZW50cmllcwomIzQzOyAqIEBwcml2OiBQcml2YXRlIGRyaXZlciBkYXRhCiYjNDM7ICoKJiM0MzsgKiBSZWN1cnNpdmVseSByZW1vdmVzIGFsbCBkZWJ1Z2ZzIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBjcmVhdGVkCiYjNDM7ICogYnkgZGFwODIxMXJfZGVidWdfaW5pdCgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShwcml2LSZndDtyb290X2Rpcik7CiYjNDM7fQomIzQzOwomIzQzOyNlbHNlIC8qICFDT05GSUdfREVCVUdfRlMgKi8KJiM0MztzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KSB7fQomIzQzO3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGFwODIxMXJfcHJvYmUoKSAtIFBIWSBwcm9iZSBjYWxsYmFjawomIzQzOyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBDYWxsZWQgd2hlbiB0aGUgUEhZIGlzIGRpc2NvdmVyZWQuIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMKJiM0MzsgKiBwcml2YXRlIGRyaXZlciBkYXRhIGFuZCBkZWJ1Z2ZzIGVudHJpZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZGFwODIxMXJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXY7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXByaXYtJmd0O2RldiA9IGRldjsKJiM0MzsJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsKJiM0MzsJZGFwODIxMXJfZGVidWdfaW5pdChwcml2KTsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7REFQODIxMVIgUEhZIHByb2JlZFxuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGFwODIxMXJfcmVtb3ZlKCkgLSBQSFkgcmVtb3ZlIGNhbGxiYWNrCiYjNDM7ICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmUKJiM0MzsgKgomIzQzOyAqIENhbGxlZCB3aGVuIHRoZSBQSFkgaXMgcmVtb3ZlZC4gQ2xlYW5zIHVwIHByaXZhdGUgZHJpdmVyIGRhdGEKJiM0MzsgKiBhbmQgZGVidWdmcyBlbnRyaWVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRhcDgyMTFyX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJZGFwODIxMXJfZGVidWdfcmVtb3ZlKHBoeWRldi0mZ3Q7cHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkYXA4MjExcl9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKERBUDgyMTFSX1BIWV9JRCksCiYjNDM7CQkubmFtZQkJPSAmIzM0O0RBUDgyMTFSIEdpZ2FiaXQgRXRoZXJuZXQmIzM0OywKJiM0MzsJCS5wcm9iZSAgICAgICAgICA9IGRhcDgyMTFyX3Byb2JlLAomIzQzOwkJLnJlbW92ZQkJPSBkYXA4MjExcl9yZW1vdmUsCiYjNDM7CQkuY29uZmlnX2luaXQJPSBkYXA4MjExcl9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKJiM0MzsJCS5zZXRfbG9vcGJhY2sJPSBnZW5waHlfbG9vcGJhY2ssCiYjNDM7CQkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCiYjNDM7CQkuc3VzcGVuZAk9IGdlbnBoeV9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAomIzQzOwl9LAomIzQzO307CiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIoZGFwODIxMXJfZHJpdmVyKTsKJiM0MzsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtEQVA4MjExUiBHaWdhYml0IEV0aGVybmV0IFBIWSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0FydGVtIFNoaW1rbyAmbHQ7YS5zaGlta28uZGV2QGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBkYXA4MjExcl90YltdID0gewomIzQzOwl7IERBUDgyMTFSX1BIWV9JRCwgREFQODIxMVJfUEhZX0lEX01BU0sgfSwKJiM0MzsJeyAvKiBzZW50aW5lbCAqLyB9CiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGRhcDgyMTFyX3RiKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMzQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVGhvdWdodHMgb24gUHJvYmluZyB0aGUgTmV3IERBUDgyMTFSIFBIWSBEcml2ZXIgaW4gYSBGdXp6aW5nIENvbnRleHQqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBQSFkgZHJpdmVyLCBgZGFwODIxMXIuY2AsIGZvciB0aGUgREFQVSBUZWxlY29tIERBUDgyMTFSKEkpIEdpZ2FiaXQgRXRoZXJuZXQgUEhZLiBJdCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGltcGxlbWVudHMgdGhlIHN0YW5kYXJkIHByb2JlLCByZW1vdmUsIGFuZCBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucywgYW5kIGV2ZW4gYWRkcyBkZWJ1Z2ZzIGVudHJpZXMgaWYgYENPTkZJR19ERUJVR19GU2AgaXMgZW5hYmxlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIHJlYWNoZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBjYW4gd2UgcmVhY2ggdGhpcyBkcml2ZXIgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50IGxpa2Ugc3l6a2FsbGVyPwoKUEhZIGRyaXZlcnMgYXJlIHR5cGljYWxseSBwcm9iZWQgZWl0aGVyIHdoZW4gYSBuZXR3b3JrIGRldmljZSByZWdpc3RlcnMgYSBQSFksIG9yIHRocm91Z2ggYW4gTURJTyBidXMgc2Nhbi4gSW4gc3l6a2FsbGVyLCB3ZSBjb3VsZCBwb3RlbnRpYWxseSBpbmplY3QgTURJTyBkZXZpY2VzIGRpcmVjdGx5LCBvciBtYXliZSBldmVuIHVzZSBhIGR1bW15IG5ldHdvcmsgZGV2aWNlIHRoYXQgcmVnaXN0ZXJzIGEgUEhZLiBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIG5ldHdvcmsgZnV6emluZyBjYXBhYmlsaXRpZXMgYWxyZWFkeSwgbGlrZSBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5YCwgYnV0IHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhpcyBQSFksIHdlJiMzOTtkIHByb2JhYmx5IGJlIGxvb2tpbmcgYXQgYGlvY3RsKFNJT0NTTUlJUkVHKWAgY2FsbHMsIG9yIHBlcmhhcHMgaW50ZXJhY3RpbmcgdGhyb3VnaCBuZXRsaW5rLCBhc3N1bWluZyBhIHN1aXRhYmxlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGF2YWlsYWJsZS4gT3IsIHRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBtaWdodCBiZSB0byBwcm9iZSBpdCB2aWEgdGhlIE1ESU8gYnVzIGlmIHdlIGhhdmUgYSBtb2NrIE1ESU8gYnVzLgoKTm93LCBzeXprYWxsZXIgaGFzIHByb3ZlbiBpdHNlbGYgY2FwYWJsZSB3aXRoIGB2a21zYCBmb3IgRFJNIGFuZCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBzbyBkb2VzIGl0IGhhdmUgYSB3YXkgdG8gcHJvYmUgYXJiaXRyYXJ5IFBIWSBkcml2ZXJzPyBDYW4gd2UgY3JlYXRlIGEgdmlydHVhbCBNRElPIGJ1cz8gT3IsIHdvdWxkIHVzaW5nIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgKGBkc2FgKSBiZSBhIHBhdGggdG93YXJkIHByb2JpbmcgdGhpcyBkcml2ZXI/IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZ1enogdGhlIGBtZGlvYCBidXMuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaG93IGRvIHdlICp0cmlnZ2VyKiBgZGFwODIxMXJfcHJvYmVgPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiB0aGUgTURJTyBidXMgZXhwb3NlcyBhIHdheSB0byBjcmVhdGUgZGV2aWNlcyBmcm9tIHVzZXJzcGFjZSwgb3IgdG8gc2VlIGlmIGFueSBleGlzdGluZyBQSFkgZnV6emVycyBjYW4gYmUgcmVwdXJwb3NlZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc2VhcmNoIGZvciBgbWRpb2AgYW5kIGBwaHlgIHRvIGlkZW50aWZ5IGFueSByZWxldmFudCBpbnN0YW50aWF0aW9uIG1lY2hhbmlzbXMuCgpUaGlua2luZyBhYm91dCBpdCwgc3l6a2FsbGVyICpjYW4qIGxvYWQgbW9kdWxlcy4gSWYgdGhlcmUmIzM5O3MgYSBkZXZpY2UgdHJlZSBvdmVybGF5LCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXQgKm1pZ2h0KiBwcm9iZSBpdCBhdXRvbWF0aWNhbGx5LiBIb3dldmVyLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgdXN1YWxseSBoYW5kbGUgRFQgb3ZlcmxheXMgdW5sZXNzIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGZvciBpdCwgc28gdGhhdOKAmXMgcHJvYmFibHkgbm90IHRoZSBzdGFuZGFyZCBwYXRoLiBJIHNlZSBub3cgdGhhdCBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgIHNlZW1zIHRvIGJlIHJlbGV2YW50LgoKSG9sZCBvbiwgc3l6a2FsbGVyIGNhbiB1c2UgYGlvY3RsKFNJT0NTTUlJUkVHKWAgdG8gaW50ZXJhY3Qgd2l0aCBQSFlzLCBidXQgdGhhdCBhc3N1bWVzIHRoZSBQSFkgZGV2aWNlIGFscmVhZHkgKmV4aXN0cyouIFNvIHRoYXQgZ2V0cyB1cyBiYWNrIHRvOiBjYW4gd2UgY3JlYXRlIHRoaXMgUEhZIGRldmljZSBkeW5hbWljYWxseT8gSSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gdmVyaWZ5IHRoYXQgYGRhcDgyMTFyX3Byb2JlYCBjYW4gYmUgcmVhY2hlZC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgYSBzdWNjZXNzZnVsIGZ1enppbmcgY2FtcGFpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFwODIxMXJfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9NDc4PXN0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00ODEtLyoqXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0ODI6ICogZGFwODIxMXJfcHJvYmUoKSAtIFBIWSBwcm9iZSBjYWxsYmFja1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDgzLSAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDg5LSAqL1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6NDkwOnN0YXRpYyBpbnQgZGFwODIxMXJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ5MS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9NTIwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkYXA4MjExcl9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MjMtXHRcdC5uYW1lXHRcdD0gXCYjMzQ7REFQODIxMVIgR2lnYWJpdCBFdGhlcm5ldFwmIzM0OyxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjUyNDpcdFx0LnByb2JlICAgICAgICAgID0gZGFwODIxMXJfcHJvYmUsXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MjUtXHRcdC5yZW1vdmVcdFx0PSBkYXA4MjExcl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NTgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUHJvYmluZyBQSFkgRHJpdmVycyB3aXRoIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHdvbmRlcmluZyBpZiBzeXprYWxsZXIgY2FuIGFjdHVhbGx5IGdldCBhdCB0aG9zZSBQSFkgZHJpdmVycy4gSXQgc2VlbXMgbGlrZSB0aGUgdXN1YWwgd2F5cyBhIFBIWSBkcml2ZXIgaXMgbG9hZGVkIOKAkyBlaXRoZXIgdGhyb3VnaCBhbiBNRElPIGJ1cyBzY2FuIGFuZCBtYXRjaGluZyBJRCwgb3IgYnkgYSBEZXZpY2UgVHJlZSBub2RlIHNwZWNpZnlpbmcgdGhlIFBIWSDigJMgcHJvYmFibHkgd29uJiMzOTt0IHdvcmsgaW4gYSBRRU1VLWxpa2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRlZCBNRElPIGJ1cyB3aXRoIHRoYXQgKmV4YWN0KiBJRCwgb3Igc29tZSBjbGV2ZXIgc29mdHdhcmUgcmVnaXN0cmF0aW9uIG1ldGhvZCwgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIGp1c3Qgbm90IGdvaW5nIHRvIGdldCBjYWxsZWQsIHJpZ2h0PyBIbW0sIGxldCYjMzk7cyBzZWUuLi4gYXJlIHRoZXJlIGFueSBvcHRpb25zIGxpa2UgYGRzYV9sb29wYCwgYGZpeGVkLXBoeWAsIG9yIHRoYXQgYG1kaW8tbW9ja2AgdGhpbmc/IE1heWJlIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBtb2NrIE1ESU8gYnVzIGltcGxlbWVudGF0aW9uIEkgY2FuIGxldmVyYWdlLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIHRoZXJlJiMzOTtzIGEgZ29vZCB3YXkgdG8gc2ltdWxhdGUgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uIG5lZWRlZCB0byBnZXQgdGhlc2UgZHJpdmVycyB0byBsb2FkLiBMZXQgbWUgbG9vayBmb3IgYSBtb2NrIE1ESU8gYnVzIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRvIHNlZSB3aGF0JiMzOTtzIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKm1vY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgVXNlcnNwYWNlIFBIWSBEZXZpY2UgUmVnaXN0cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHByb2JlIHdoZXRoZXIgaXQmIzM5O3MgYWN0dWFsbHkgcG9zc2libGUgdG8gcmVnaXN0ZXIgYSBQSFkgZGV2aWNlIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVHJhZGl0aW9uYWxseSwgUEhZIGRldmljZSBtYW5hZ2VtZW50IGhhcyBiZWVuIGZpcm1seSByb290ZWQgaW4gdGhlIGtlcm5lbCwgcHJpbWFyaWx5IGR1ZSB0byB0aGUgbmVlZCBmb3IgZGlyZWN0IGhhcmR3YXJlIGFjY2VzcywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgbWFuYWdpbmcgdGhlIGxvdy1sZXZlbCBjb21tdW5pY2F0aW9uIHByb3RvY29scyAoTURJTywgZXRjLikuIEhvd2V2ZXIsIHdpdGggdGhlIGV2b2x1dGlvbiBvZiBkcml2ZXJzIGFuZCBwb3RlbnRpYWwgZm9yIG1vcmUgYWJzdHJhY3RlZCBoYXJkd2FyZSBpbnRlcmZhY2VzLCBJJiMzOTttIGN1cmlvdXMgaWYgdGhlcmUmIzM5O3MgYmVlbiBhbnkgYWR2YW5jZW1lbnQgaW4gYWxsb3dpbmcgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgUEhZIGRldmljZSBsaWZlY3ljbGUuIE1heWJlIHZpYSBhIHdlbGwtZGVmaW5lZCBBUEkgdGhhdCBwcm92aWRlcyBzYWZlIGFuZCBjb250cm9sbGVkIGFjY2VzcyB0byB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhIG1lY2hhbmlzbSwgcGVyaGFwcyB0aHJvdWdoIGEgY2hhcmFjdGVyIGRldmljZSwgbmV0bGluayBzb2NrZXQsIG9yIGV2ZW4gYSBuZXdlciwgbW9yZSBzb3BoaXN0aWNhdGVkIGludGVyZmFjZSBsaWtlIFVJTyBvciBWRklPLCB0aGF0IHdvdWxkIGZhY2lsaXRhdGUgdGhpcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgc2VjdXJpdHkgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQ7IGhvdyB3b3VsZCB3ZSBlbnN1cmUgdGhhdCBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBkb2VzbiYjMzk7dCBpbmFkdmVydGVudGx5IGludGVyZmVyZSB3aXRoIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcyBvciBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzPyBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHJlbGV2YW50IHN1YnN5c3RlbSBkcml2ZXJzLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb3IgZXhpc3RpbmcgbWVjaGFuaXNtcyB0aGF0IGNvdWxkIGJlIGV4dGVuZGVkIG9yIGFkYXB0ZWQgZm9yIHRoaXMgcHVycG9zZS4gSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgbWlnaHQgaW50ZXJhY3Qgd2l0aCBleGlzdGluZyBuZXR3b3JraW5nIHN0YWNrIGNvbmZpZ3VyYXRpb25zLCBsaWtlIGJvbmRpbmcgb3IgYnJpZGdpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTkzMT1zdGF0aWMgaW50IHhnYmVfcGh5X2ZpbmRfcGh5X2RldmljZShzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05NzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk3NjpcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc3LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5Nzg6XHRcdG5ldGRldl9lcnIocGRhdGEtXHUwMDNlbmV0ZGV2LCBcJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk3OS1cdFx0cGh5X2RldmljZV9mcmVlKHBoeWRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYz03MTY9aG5zX21hY19yZWdpc3Rlcl9waHlkZXYoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBobnNfbWFjX2NiICptYWNfY2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYy03NDQtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmM6NzQ1Olx0cmMgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0Ni1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYz0xOTI5PXN0YXRpYyBpbnQgbmV0c2VjX3JlZ2lzdGVyX21kaW8oc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCB1MzIgcGh5X2FkZHIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4NDpcdFx0cmV0ID0gcGh5X2RldmljZV9yZWdpc3Rlcihwcml2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk4NS1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy0xOTg4LVx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4OTpcdFx0XHRcdFwmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXIgZXJyKCVkKVxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy0xOTkwLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTQyPWZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy02OS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo3MDppbnQgZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy03MS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDMtXHQgKi9cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMDQ6XHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDUtXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTE0LX1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTU6RVhQT1JUX1NZTUJPTChmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTYtXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9MTE3PWludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTQ5LVx0XHQvKiBBbGwgZGF0YSBpcyBub3cgc3RvcmVkIGluIHRoZSBwaHkgc3RydWN0LCBzbyByZWdpc3RlciBpdCAqL1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1MDpcdFx0cmMgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTUxLVx0XHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU2LVx0fSBlbHNlIGlmIChpc19vZl9ub2RlKGNoaWxkKSkge1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1NzpcdFx0cmMgPSBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKGJ1cywgcGh5LCBjaGlsZCwgYWRkcik7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU4LVx0XHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmM9MjYzPXN0cnVjdCBwaHlfZGV2aWNlICp4Z2VuZV9lbmV0X3BoeV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmMtMjcwLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmM6MjcxOlx0aWYgKHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5X2RldikpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8teGdlbmUuYy0yNzItXHRcdHBoeV9kZXZpY2VfZnJlZShwaHlfZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz0zMj1zdGF0aWMgaW50IG9mX2dldF9waHlfaWQoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIHUzMiAqcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM2LVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6Mzc6aW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM4LVx0XHRcdFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0zOS17XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo0MDpcdHJldHVybiBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKG1kaW8sIHBoeSxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxLVx0XHRcdFx0XHRcdCAgb2ZfZndub2RlX2hhbmRsZShjaGlsZCksXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDMtfVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDQ6RVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTEzMT1zdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2Mi1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNjM6XHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQwOD1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDM3LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDM4Olx0ZXJyID0gcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDM5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTU1MT1zdGF0aWMgdm9pZCB0amExMTAyX3AxX3JlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTctXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1OTg6XHRcdHJldCA9IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihidXMsIHBoeSwgY2hpbGQsIGFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTk5LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTAzPUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwNS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwNjogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDctICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQxLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0MjpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0OC0gKiBUaGlzIGRvZXNuJiMzOTt0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0OTogKiBvZiBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkuIFVzZSBwaHlfZGV2aWNlX2ZyZWUoKSB0byBmcmVlIHRoZSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE1MC0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIwNzA9c3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMDg1LVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIwODY6XHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjA4Ny1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMDg4LVx0XHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMDg5Olx0XHRkZXZfZXJyKHNmcC1cdTAwM2VkZXYsIFwmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjA5MC1cdFx0XHRFUlJfUFRSKGVycikpO1xuLS1cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfRldOT0RFX01ESU8pXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmg6MTI6aW50IGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmgtMTMtXHRcdFx0XHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbi0tXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmg9MTY9aW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuLS1cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xOS0jZWxzZSAvKiBDT05GSUdfRldOT0RFX01ESU8gKi9cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaDoyMDppbnQgZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0yMS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oPTQ5PWJvb2wgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucCk7XG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaDo1MDppbnQgb2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmgtNTEtXHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcik7XG4tLVxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg9MTQwPXN0YXRpYyBpbmxpbmUgYm9vbCBvZl9waHlfaXNfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oLTE0NC1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oOjE0NTpzdGF0aWMgaW5saW5lIGludCBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDYtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjE1OT1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KTtcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE2MDppbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcbmluY2x1ZGUvbGludXgvcGh5LmgtMjE2MS12b2lkIHBoeV9kZXZpY2VfZnJlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUzNAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNRElPIEJ1cyBJbnZlc3RpZ2F0aW9uIGZvciBzeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHBvdGVudGlhbGx5IGxldmVyYWdlIHN5emthbGxlciB0byByZWFjaCB0aGUgTURJTyBidXMuIEkga25vdyBzeXprYWxsZXIgY2FuIHVzZSBgaW9jdGwoU0lPQ1NNSUlSRUcpYCB0byB3cml0ZSB0byBpdCwgd2hpY2ggaXMgaW50cmlndWluZy4gVGhlIGNhdGNoLCBvZiBjb3Vyc2UsIGlzIHRoYXQgdGhlcmUgbmVlZHMgdG8gKmJlKiBhbiBNRElPIGJ1cyBwcmVzZW50LiBEb2VzIHN5emthbGxlciBhbHJlYWR5IGhhdmUgYSB3YXkgdG8gZXN0YWJsaXNoIG9uZT8gSG1tLCBpdCBkb2VzIGhhdmUgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAgYW5kIGBzeXpfaW5pdF9uZXRfc29ja2V0YC4gQW5kLCBoZXksIHRoZXJlJiMzOTtzIHNvbWUgZXZpZGVuY2Ugb2YgYG1kaW9gIGJ1cyBmdXp6aW5nIGluIHRoZSBjb2RlYmFzZSwgYnV0IG5vdGhpbmcgZXhwbGljaXQuCgpBbHJpZ2h0LCB3aGF0IGFib3V0IGNyZWF0aW5nIGEgc2NlbmFyaW8gd2hlcmUgb25lIGdldHMgY3JlYXRlZD8gSSBrbm93IGBkYXA4MjExcl9wcm9iZWAgZ2V0cyBjYWxsZWQgZHVyaW5nIGEgUEhZIGRldmljZSByZWdpc3RyYXRpb24uIE5vdyB0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSAqZm9yY2UqIGEgUEhZIGRldmljZSByZWdpc3RyYXRpb24gZnJvbSB1c2Vyc3BhY2U/IE5vcGUsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBpc24mIzM5O3QgZXhwb3NlZC4KCk9rYXksIGJhY2sgdG8gdGhlIGRyYXdpbmcgYm9hcmQuIElzIHRoZXJlIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSB0aGF0ICptaWdodCogcmVnaXN0ZXIgYSBQSFk/IFRoaW5raW5nIGFib3V0IGBtYWNiYCwgYHhnYmVgLCBgaG5zYCwgYG5ldHNlY2AsIGFuZCBgZml4ZWRfcGh5YC4gQnV0LCB3YWl0LCBgZml4ZWRfcGh5YCBkZWZpbml0ZWx5IGNhbiYjMzk7dCBiZSByZWdpc3RlcmVkIGZyb20gdXNlcnNwYWNlLiBUaGVuIHdoYXQgYWJvdXQgRFNBPyBJIHJlY2FsbCB0aGF0IERTQSBjYW4gYmUgY29uZmlndXJlZCB2aWEgbmV0bGluayBvciBzeXNmcywgYnV0IHVwb24gZnVydGhlciByZWZsZWN0aW9uLCBpdCBpcyBjb25maWd1cmVkIHZpYSBkZXZpY2UgdHJlZS4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2ssIHN5emthbGxlciBoYXMgYHN5el91c2JfY29ubmVjdGAuIENvdWxkIGEgVVNCIG5ldHdvcmsgYWRhcHRlciBnZXQgdXMgdGhlcmU/IEFyZSB0aGVyZSBhbnkgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIHRoYXQgdXNlIE1ESU8gYW5kIGNhbiBwcm9iZSBhcmJpdHJhcnkgUEhZcz8gWWVzISBJdCBhcHBlYXJzIHRoYXQgZHJpdmVycyBsaWtlIGBkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jYCwgYHNtc2M5NXh4LmNgLCBgYXNpeGAsIG9yIGBjZGNfZXRoZXJgIGNvdWxkIGJlIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlIGlmIGFueSBvZiB0aGVzZSBVU0IgbmV0d29yayBkcml2ZXJzIHJlZ2lzdGVyIGFuZCBzY2FuIGFuIE1ESU8gYnVzLiBUaGlzIGZlZWxzIGxpa2UgdGhlIG1vc3QgcHJvbWlzaW5nIGFuZ2xlIGF0IHRoZSBtb21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMjcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdD0zNDg9TURJT1xuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTAtICBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZSgpXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q6MzUxOiAgZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKClcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTI6ICBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoKVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1My1cbi0tXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdD0xMj1kZXZpY2UgKHRoZSBzYW1lIG9iamVjdHMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB2aWFcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0OjEzOmBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KClgYCkuIE1BQy1zaWRlIGNvbm5lY3Rpb24gcHJvcGVydGllcyBzdWNoIGFzXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdC0xNC1gYHBoeS1oYW5kbGVgYCBhbmQgYGBwaHktbW9kZWBgIGFyZSBkb2N1bWVudGVkIGluIFthY3BpLW1kaW8tcGh5XV8uXG4tLVxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0PTc9VGhlIFBIWXMgb24gYW4gTURJTyBidXMgW3BoeV0gYXJlIHByb2JlZCBhbmQgcmVnaXN0ZXJlZCB1c2luZ1xuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0Ojg6Zndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KCkuXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3QtOS1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD00MD1yZWdpc3RlcmVkIGFzIGEgZGlzdGluY3QgZGV2aWNlLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTU2LSAgIGRyaXZlciBuZWVkcywgc2V0dXAgdGhlIG1paV9idXMgc3RydWN0dXJlLCBhbmQgcmVnaXN0ZXIgd2l0aCB0aGUgUEFMIHVzaW5nXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo1NzogICBtZGlvYnVzX3JlZ2lzdGVyLiAgU2ltaWxhcmx5LCB0aGVyZSYjMzk7cyBhIHJlbW92ZSBmdW5jdGlvbiB0byB1bmRvIGFsbCBvZlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTgtICAgdGhhdCAodXNlIG1kaW9idXNfdW5yZWdpc3RlcikuXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYz0xMDk9c3RhdGljIGludCBlcDgyNDhlX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzItXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jOjEzMzpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzNC1cdGlmIChyZXQpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM9MjA3PXN0YXRpYyBpbnQgZ3Bpb19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jOjI0NDpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4My1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0Olx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9MTg3PXN0YXRpYyBpbnQgZ3N3aXBfbWRpbyhzdHJ1Y3QgZ3N3aXBfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTMtXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzoyMTQ6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0MjpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yMzIxPWludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTItXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMzkzOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz02ODU9c3RhdGljIGludCBsYW45Mzd4X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1NS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6NzU2Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjM3MT1tdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0MDYtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjQwNzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDA4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM4MzQ9c3RhdGljIGludCBtdjg4ZTZ4eHhfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM4ODg6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTItXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjk0LVx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MTQ5PXN0YXRpYyBpbnQgbmV0Y19wb3J0X2NyZWF0ZV9lbWRpb19idXMoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTc5LVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6MTgwOlx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE4MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9OTU3PXN0YXRpYyBpbnQgdnNjOTk1OV9tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTAxNDpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxNS1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM9ODc4PXN0YXRpYyBpbnQgdnNjOTk1M19tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDMtXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0Olx0cmMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDUtXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODMtXHRvZl9ub2RlX3B1dChtbnApO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTk0Nz1xY2E4a19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4Ni1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk4NzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTk5LVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQzLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0Olx0cmV0dXJuIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDUtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0zMDc9dm9pZCBzamExMTA1X2ZyYW1lX21lbW9yeV9wYXJ0aXRpb25pbmcoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg6MzEwOmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMTEtdm9pZCBzamExMTA1X21kaW9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTMwMjY9c3RhdGljIGludCBzamExMTA1X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MzA2ODpcdHJjID0gc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0yNTg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90eF9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjI4ODpcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQzLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0Olx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQ1LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5NS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM5NjpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk3LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9NDM5PXN0YXRpYyB2b2lkIHNqYTExMDVfbWRpb2J1c19wY3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQ1OTppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ2MC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTU5NT15dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTItXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NjEzOlx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTQtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz03MjY9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNzQzLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjc0NDpcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNzQ1LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYz00NTk9c3RhdGljIGludCBheF9taWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jOjQ3OTpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXgtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00ODAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYz0xMzIxPXN0YXRpYyBpbnQgb3dsX2VtYWNfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM6MTM0NjpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM9NTA5PXN0YXRpYyBpbnQgYWRpbjExMTBfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3QgYWRpbjExMTBfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYzo1MzA6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUzMS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYz0xMjkwPXN0YXRpYyBpbnQgZ3JldGhfbWRpb19pbml0KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jOjEzMDc6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGdyZXRoLVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTM5MzE9c3RhdGljIGludCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYzo0MDI3Olx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI4LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jPTEyMT1zdGF0aWMgaW50IGFsdGVyYV90c2VfbWRpb19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6MTU4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1OS1cdGlmIChyZXQgIT0gMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9MTA2MT1zdGF0aWMgaW50IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM6MTIyMjpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXVwLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9MzQyOD1zdGF0aWMgaW50IHhnYmVfcGh5X2luaXQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxNy1cdHNucHJpbnRmKG1paS1cdTAwM2VpZCwgc2l6ZW9mKG1paS1cdTAwM2VpZCksIFwmIzM0OyVzXCYjMzQ7LCBkZXZfbmFtZShwZGF0YS1cdTAwM2VkZXYpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcxODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxOS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcyMDpcdFx0ZGV2X2VycihwZGF0YS1cdTAwM2VkZXYsIFwmIzM0O21kaW9idXNfcmVnaXN0ZXIgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcyMS1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jPTk4PWludCB4Z2VfbWRpb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMTgtXHRtZGlvX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4MTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM6MTE5Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTEyMC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz04Mzc9aW50IHhnZW5lX2VuZXRfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjg4ODpzdGF0aWMgaW50IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODktXHRcdFx0XHQgIHN0cnVjdCBtaWlfYnVzICptZGlvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTEyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MTM6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxNC1cdFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjEtXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTIyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTkzOT1pbnQgeGdlbmVfZW5ldF9tZGlvX2NvbmZpZyhzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjk1ODpcdHJldCA9IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIocGRhdGEsIG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYz0xMzE9aW50IGFyY19tZGlvX3Byb2JlKHN0cnVjdCBhcmNfZW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM6MTczOlx0ZXJyb3IgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbWRpb19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzQtXHRvZl9ub2RlX3B1dChtZGlvX25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jPTk2Nj1zdGF0aWMgaW50IGF4ODg3OTZjX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jOjEwMTE6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpLVx1MDAzZWRldiwgYXhfbG9jYWwtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEyLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM9Njg3PXN0YXRpYyBpbnQgYWc3MXh4X21kaW9fcHJvYmUoc3RydWN0IGFnNzF4eCAqYWcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjctXHRtbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjcyODpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyOS1cdG9mX25vZGVfcHV0KG1ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjYwOlx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNjEtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9MTcxMz1zdGF0aWMgaW50IGJjbV9lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjE4MzA6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MzEtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYz0yMTE9c3RydWN0IG1paV9idXMgKmJjbWFfbWRpb19taWlfcmVnaXN0ZXIoc3RydWN0IGJnbWFjICpiZ21hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYzoyMzY6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNy1cdG9mX25vZGVfcHV0KG5wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz0xOTM9aW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBpbml0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzMy1cdFx0cGh5X25hbWUgPSBcJiMzNDtleHRlcm5hbCBSdk1JSVwmIzM0OztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjIzNDpcdFx0Lyogb2ZfbWRpb2J1c19yZWdpc3RlciB0b29rIGNhcmUgb2YgcmVhZGluZyB0aGUgJiMzOTttYXgtc3BlZWQmIzM5O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjM1LVx0XHQgKiBQSFkgcHJvcGVydHkgZm9yIHVzLCBlZmZlY3RpdmVseSBsaW1pdGluZyB0aGUgUEhZIHN1cHBvcnRlZFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYz0yMTU3PXN0YXRpYyBpbnQgc2JtYWNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldiwgbG9uZyBsb25nIGJhc2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjctXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMjI4Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihzYy1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE1MDU9c3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNTU4Olx0aSA9IG1kaW9idXNfcmVnaXN0ZXIodHAtXHUwMDNlbWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1OS1cdGlmIChpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwOTc6c3RhdGljIGludCBtYWNiX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1hY2IgKmJwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNC1cdGlmIChtZGlvX25wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTA1Olx0XHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMTk6XHRcdFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIwLVx0XHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMjI6XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTI1PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTU5Olx0ZXJyID0gbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKGJwLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE2MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYz0xMTA3PXN0YXRpYyBpbnQgZG05MDUxX21kaW9fcmVnaXN0ZXIoc3RydWN0IGJvYXJkX2luZm8gKmRiKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM6MTEyNTpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZzcGktXHUwMDNlZGV2LCBkYi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTI0MjM9c3RhdGljIGludCB0c25lcF9tZGlvX2luaXQoc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6MjQ1NTpcdHJldHZhbCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cdTAwM2VtZGlvYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jPTEwMjQ9c3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM6MTIwODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwOS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3MzQ9c3RhdGljIGludCBmdGdtYWMxMDBfc2V0dXBfbWRpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc3MDpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgcHJpdi1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc3MS1cdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jPTM2PXN0YXRpYyBpbnQgZW5ldGNfcGNpX21kaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYzo5MTpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBkZXYtXHUwMDNlb2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTE2MD1zdGF0aWMgaW50IGVuZXRjX21kaW9fcHJvYmUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMTg2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjE4NzpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMTg4LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MjAyPXN0YXRpYyBpbnQgZW5ldGNfaW1kaW9fY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTIzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzoyMzc6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjM4LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTMwNDI9c3RhdGljIGludCBmZWNfZW5ldF9taWlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMTYxOlx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihmZXAtXHUwMDNlbWlpX2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM9NjU9c3RhdGljIGludCBtcGM1Mnh4X2ZlY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM6MTA2Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDctXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM9MTQ5PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoxNzY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM9OTc9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYzoxNjc6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTQwOT1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6NDk0Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTUtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYz0zNzE9c3RhdGljIGludCB4Z21hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjYtXHRpZiAoaXNfb2Zfbm9kZShmd25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjc6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCB0b19vZl9ub2RlKGZ3bm9kZSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjgtXHRlbHNlIGlmIChpc19hY3BpX25vZGUoZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI5Olx0XHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBmd25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MzAtXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyOTI6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jPTEwOTQ9c3RhdGljIGludCBoaXg1aGQyX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jOjExODY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0xMjM9aW50IGhjbGdlX21hY19tZGlvX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU0LVx0bWRpb19idXMtXHUwMDNlcGh5X21hc2sgPSB+KDFVIFx1MDAzY1x1MDAzYyBtYWMtXHUwMDNlcGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYzoxNTU6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU2LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jPTQ5NT1zdGF0aWMgaW50IGhuc19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTg0Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTg1LVx0fSBlbHNlIGlmIChpc19hY3BpX25vZGUocGRldi1cdTAwM2VkZXYuZndub2RlKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5Mi1cdFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1OTM6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTQtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYz0yNTYwPXN0YXRpYyBpbnQgZW1hY19kdF9tZGlvX3Byb2JlKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODQtXHRzbnByaW50ZihidXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7JXNcJiMzNDssIGRldi1cdTAwM2VvZmRldi1cdTAwM2VuYW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYzoyNTg1Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNmRldi1cdTAwM2VvZmRldi1cdTAwM2VkZXYsIGJ1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg2LVx0aWYgKHJlcykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTEwMjY9aW50IGl4Z2JlX21paV9idXNfaW5pdChzdHJ1Y3QgaXhnYmVfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwODgtXHRhZGFwdGVyLVx1MDAzZW1paV9idXMgPSBidXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoxMDg5Olx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwOTAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM9Mzg1PWx0cV9ldG9wX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDAyLVx0XHQgcHJpdi1cdTAwM2VwZGV2LVx1MDAzZW5hbWUsIHByaXYtXHUwMDNlcGRldi1cdTAwM2VpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjQwMzpcdGlmIChtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWlpX2J1cykpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDA0LVx0XHRlcnIgPSAtRU5YSU87XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYz0yODM9c3RhdGljIGludCBvcmlvbl9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODEtXHQvKiBGb3IgdGhlIHBsYXRmb3JtcyBub3Qgc3VwcG9ydGluZyBEVC9BQ1BJIGZhbGwtYmFja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODI6XHQgKiB0byBtZGlvYnVzX3JlZ2lzdGVyIHZpYSBvZl9tZGlvYnVzX3JlZ2lzdGVyLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODMtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg0LVx0aWYgKGlzX2FjcGlfbm9kZShwZGV2LVx1MDAzZWRldi5md25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODU6XHRcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4Ni1cdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg3Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4OC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYz0xMzg3PXN0YXRpYyBpbnQgcHhhMTY4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDQtXHRwZXAtXHUwMDNlc21pX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4ZmZmZmZmZmY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYzoxNTA1Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihwZXAtXHUwMDNlc21pX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA2LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTk5OD1zdGF0aWMgaW50IG10a19tZGlvX2luaXQoc3RydWN0IG10a19ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzctXHRkZXZfZGJnKGV0aC1cdTAwM2VkZXYsIFwmIzM0O01EQyBpcyBydW5uaW5nIG9uICVkIEh6XFxuXCYjMzQ7LCBNRENfTUFYX0ZSRVEgLyBldGgtXHUwMDNlbWRjX2RpdmlkZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzoxMDM4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihldGgtXHUwMDNlbWlpX2J1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMTAzOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM9MTQyMj1zdGF0aWMgaW50IG10a19zdGFyX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzoxNDQ4Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cdTAwM2VtaWksIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jPTI4Nz1pbnQgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBtbHhiZl9naWdlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmMtMzMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYzozMzM6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM9MjUzPWludCBmYm5pY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmMtMjcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM6MjczOlx0ZXJyID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGZiZC1cdTAwM2VkZXYsIGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYy0yNzQtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYz0xMDM2PXN0YXRpYyBpbnQga3M4ODUxX3JlZ2lzdGVyX21kaW9idXMoc3RydWN0IGtzODg1MV9uZXQgKmtzLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDUzOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA1NC1cdGlmIChyZXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jOjEwNTU6XHRcdGdvdG8gZXJyX21kaW9idXNfcmVnaXN0ZXI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDYwLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjQ0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBNRElPIEJ1cyBEcml2ZXIgTGFuZHNjYXBlKioKCk9rYXksIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IGEgZmV3IE1ESU8gYnVzLXJlbGF0ZWQgZnVuY3Rpb25zIOKAkyBgZmJuaWNfbWRpb2J1c19jcmVhdGVgLCBgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlYCwgYG10a19zdGFyX21kaW9faW5pdGAsIGFuZCBzbyBvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBjYW4gd2UgYnVpbGQgYW4gTURJTyBidXMgZHJpdmVyIGZyb20gdXNlciBzcGFjZT8gVGhpcyBpcyBhIHF1ZXN0aW9uIEkgb2Z0ZW4gY29uc2lkZXIgd2hlbiByZXZpZXdpbmcgZHJpdmVyIGFyY2hpdGVjdHVyZXMgZm9yIGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWwgb2ZmbG9hZGluZy4KClRoZSBkaXJlY3Rpb24gSSYjMzk7bSB0YWtpbmcgaXMgZ3VpZGVkIGJ5IHRoZSBkZXNpcmUgdG8gaWRlbnRpZnkgYSBkcml2ZXIgdG8gbG9vayBpbnRvIHRvIHNhdGlzZnkgdGhhdCBjb25jZXJuLiBJIHJlY2FsbCBzZWVpbmcgYGRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmNgIHV0aWxpemUgYG1kaW9idXNfcmVnaXN0ZXJgLCB3aGljaCBpbXBsaWVzIGl0IGlzIGEgYnVzIGl0c2VsZiwgYW5kIG5vdCBhIGRldmljZS4gQmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCBpdCYjMzk7cyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIGRlbHZlIGludG8gYGxhbjc4eHguY2AgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGl0IGNhbiBvZmZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY2OT1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY4NzpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02ODgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9NjE9c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc5LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6ODA6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy04MS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwOTE9c3RhdGljIGludCBsYW43OHh4X21kaW9faW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjEtXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O21kaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIyOlx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlbWRpb2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjMtXHRvZl9ub2RlX3B1dChub2RlKTtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihwZGF0YS1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDMtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTEwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGBkYXA4MjExcl9wcm9iZWAgVGhyb3VnaCBVU0IgRnV6emluZzogQSBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGFuZCBpdCBsb29rcyBsaWtlIGBzbXNjOTV4eGAsIGBsYW43OHh4YCwgYGF4ODgxNzJhYCwgYW5kIGBhc2l4X2RldmljZXNgIGFsbCByZWdpc3RlciBhbiBNRElPIGJ1cy4gVGhhdCYjMzk7cyBrZXkuIFdoZW4gdGhleSBkbywgYG1kaW9idXNfcmVnaXN0ZXJgIHNjYW5zIGl0LiBOb3csIGlmIHdlIGNhbiBlbXVsYXRlIGEgVVNCIGRldmljZSwgYW5kIGBzeXprYWxsZXJgICpjYW4qIGRvIHRoYXQgdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLCB3ZSBjYW4gZmVlZCBpdCBhcmJpdHJhcnkgcmVzcG9uc2VzIHRvIE1ESU8gcmVhZHMuCgpIZXJlJiMzOTtzIHRoZSB0cmljazogSWYgdGhlIFVTQiBkZXZpY2UgcmVzcG9uZHMgdG8gYW4gTURJTyByZWFkIG9uIGFkZHJlc3MgWCB3aXRoIHRoZSBQSFkgSUQgb2YgREFQODIxMVIgKHRoYXQmIzM5O3MgYDB4MDAwODAxMUJgKSwgYG1kaW9idXNfc2NhbmAgd2lsbCBwaWNrIGl0IHVwLCBhbGxvY2F0ZSBhIGBwaHlfZGV2aWNlYCwgYW5kIHJlZ2lzdGVyIGl0LiBUaGVuLCB0aGUgZHJpdmVyIGNvcmUgd2lsbCBtYXRjaCB0aGF0IFBIWSBJRCBhbmQgcHJvYmUgdGhlIGBkYXA4MjExcl9kcml2ZXJgLiBUaGVyZWZvcmUsIGBkYXA4MjExcl9wcm9iZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB2aWEgVVNCIGZ1enppbmchCgpXYWl0LCB0aG91Z2gsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYERBUDgyMTFSX1BIWWAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gQWgsIHRoZSBwYXRjaCAqYWRkcyogYGNvbmZpZyBEQVA4MjExUl9QSFlgLiBUaGF0JiMzOTtzIGl0ISBXZSBuZWVkIHRvIGVuYWJsZSBpdCwgc28sIGBFbmFibGVDb25maWdzOiBbJiMzNDtEQVA4MjExUl9QSFkmIzM0O11gLiBHb3QgaXQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkcml2ZXIgY29kZSBhbmQgc2VlIHdoYXQgZnVuY3Rpb25zIHdlIHNob3VsZCBmb2N1cyBvbi4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgd2UgaGF2ZSBgZGFwODIxMXJfcHJvYmVgLCBgZGFwODIxMXJfcmVtb3ZlYCwgYGRhcDgyMTFyX2NvbmZpZ19pbml0YCwgYGluZm9fc2hvd2AsIGBwa2dfZ2VuX3Nob3dgLCBhbmQgYHBrZ19nZW5fd3JpdGVgLgoKV2FpdCwgdGhvc2UgYGluZm9fc2hvd2AsIGBwa2dfZ2VuX3Nob3dgLCBgcGtnX2dlbl93cml0ZWAgZnVuY3Rpb25zIGFyZSBkZWJ1Z2ZzIG9wZXJhdGlvbnMuIEFyZSB0aG9zZSByZWFjaGFibGUgYnkgYHN5emthbGxlcmA/IFllcywgdGhleSBhcmUuIGBzeXprYWxsZXJgIGNhbiBvcGVuIGFuZCByZWFkL3dyaXRlIGRlYnVnZnMgZmlsZXMgaWYgaXQga25vd3MgdGhlIHBhdGhzLiBUaGUgcGF0aHMgd291bGQgYmUgc29tZXRoaW5nIGxpa2UgYC9zeXMva2VybmVsL2RlYnVnLyZsdDtkZXZfbmFtZSZndDsvaW5mb2Agb3IgYC9zeXMva2VybmVsL2RlYnVnL3BrZ19nZW5gLiBUaGUgYGRldl9uYW1lYCB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBQSFkgZGV2aWNlLCBsaWtlIGBtZGlvLWJ1czowMWAuIFRoYXQmIzM5O3MgZ3JlYXQsIGBzeXprYWxsZXJgICpjYW4qIGZ1enogZGVidWdmcyEKCkxldCYjMzk7cyBkaXZlIGRlZXBlciBpbnRvIGBkYXA4MjExcl9jb25maWdfaW5pdGAuIEl0IHJlYWRzIHByb3BlcnRpZXMgZnJvbSB0aGUgZGV2aWNlIHRyZWU6IGByeC1pbnRlcm5hbC1kZWxheS1wc2AsIGB0eC1pbnRlcm5hbC1kZWxheS1wc2AsIGFuZCBgdHgtdXNlLWludmVydGVkLWNsa2AuIEhlcmUmIzM5O3MgdGhlIGNhdGNoOiBzaW5jZSB3ZSYjMzk7cmUgaW5zdGFudGlhdGluZyB0aGlzIHZpYSBVU0IgTURJTyBzY2FuLCB0aGVyZSYjMzk7cyBubyBkZXZpY2UgdHJlZSBub2RlIGZvciB0aGUgUEhZIOKAkyB1bmxlc3Mgd2UgdXNlIERUIG92ZXJsYXlzLCB3aGljaCBgc3l6a2FsbGVyYCBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgdG91Y2guIElmIHRoZXJlJiMzOTtzIG5vIERUIG5vZGUsIGBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGVgIHdpbGwgYmUgTlVMTC4gVGh1cywgYG9mX3Byb3BlcnR5X3JlYWRfdTMyYCB3aWxsIHJldHVybiBhbiBlcnJvciwgYW5kIGl0IHdpbGwganVzdCB1c2UgdGhlIGRlZmF1bHQgZGVsYXkgYERBUDgyMTFSX0RFRkFVTFRfREVMQVlfUFNgLiBUaGUgc2FtZSBhcHBsaWVzIGZvciBgb2ZfcHJvcGVydHlfcmVhZF9ib29sYCwgd2hpY2ggcmV0dXJucyBmYWxzZS4gVGhpcyBtZWFucyBgZGFwODIxMXJfY29uZmlnX2luaXRgIHdpbGwgc3RpbGwgZXhlY3V0ZSBhbmQgY29uZmlndXJlIHRoZSBQSFksIGJ1dCB3aXRoIGRlZmF1bHQgdmFsdWVzLgoKTm93IGxldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZG8gd2l0aCBgcGtnX2dlbl93cml0ZWAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5hcmd1bWVudCAmIzM0O0ZpcnN0TGluZSYjMzQ7IGhhcyB3cm9uZyB0eXBlOiBnb3Qgc3RyaW5nLCB3YW50IGludDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6ICYjMzQ7MzMwJiMzNDssCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogJiMzNDsxMDAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDthcmd1bWVudCBcJiMzNDtGaXJzdExpbmVcJiMzNDsgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTY1MgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqVGhlIERlYnVnZ2luZyBEYW5jZTogQSBNb21lbnQgb2YgQ2xhcml0eSoqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IHRoYXQgZXJyb3IgbWVzc2FnZSBhZ2FpbiwgYW5kIGl0IGZpbmFsbHkgY2xpY2tlZC4gT2YgY291cnNlISBJJiMzOTttIHN1Y2ggYSBmb29sIHNvbWV0aW1lcy4gSSB3YXMgc28gZm9jdXNlZCBvbiB0aGUgbG9naWMgb2YgdGhlIGFsZ29yaXRobSB0aGF0IEkgY29tcGxldGVseSBtaXNzZWQgdGhlIHR5cGUgbWlzbWF0Y2guIEkgcGFzc2VkIGEgc3RyaW5nLCBhIHBlcmZlY3RseSB2YWxpZCBzdHJpbmcgYXQgdGhhdCwgYXMgdGhlIGlucHV0IGZvciBgRmlyc3RMaW5lYC4gQnV0IGl0IGV4cGVjdHMgYW4gaW50ZWdlciwgb2J2aW91c2x5LiBUaGUgY29kZSYjMzk7cyBnb2luZyB0byBjaG9rZSBpZiBJIHRyeSB0byBmZWVkIGl0IHRoZSB3cm9uZyBkYXRhIHR5cGUuIFRoaXMgaXMgYmFzaWMsIGFsbW9zdCBlbWJhcnJhc3NpbmcuIEJ1dCBJJiMzOTttIGdsYWQgSSBjYXVnaHQgaXQgZWFybHkuIE5vdyB0byBmaXggdGhhdCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdC8qKlxuIDMzMTpcdCAqIHBrZ19nZW5fc2hvdygpIC0gU2hvdyBwYWNrZXQgZ2VuZXJhdG9yIHN0YXR1c1xuIDMzMjpcdCAqIEBzZjogU2VxdWVuY2UgZmlsZSBzdHJ1Y3R1cmVcbiAzMzM6XHQgKiBAZGF0YTogUHJpdmF0ZSBkYXRhIChzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqKVxuIDMzNDpcdCAqXG4gMzM1Olx0ICogRGlzcGxheXMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yLFxuIDMzNjpcdCAqIGluY2x1ZGluZyBDUkMgY29ycnVwdGlvbiBhbmQgbG9vcGJhY2sgc2V0dGluZ3MuXG4gMzM3Olx0ICpcbiAzMzg6XHQgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuIDMzOTpcdCAqL1xuIDM0MDpcdHN0YXRpYyBpbnQgcGtnX2dlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKmRhdGEpXG4gMzQxOlx0e1xuIDM0MjpcdFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cdTAwM2Vwcml2YXRlO1xuIDM0MzpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cdTAwM2VkZXYpO1xuIDM0NDpcdFx0aW50IHZhbDtcbiAzNDU6XHRcbiAzNDY6XHRcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUpO1xuIDM0NzpcdFx0aWYgKHZhbCBcdTAwM2MgMClcbiAzNDg6XHRcdFx0cmV0dXJuIHZhbDtcbiAzNDk6XHRcbiAzNTA6XHRcdHNlcV9wdXRzKHNmLCBcJiMzNDtQYWNrYWdlIEdlbmVyYXRpbmc6IFwmIzM0Oyk7XG4gMzUxOlx0XHRpZiAoRklFTERfR0VUKERBUDgyMTFSX1BLR19HRU5fRU4sIHZhbCkgXHUwMDI2XHUwMDI2XG4gMzUyOlx0XHQgICAgRklFTERfR0VUKERBUDgyMTFSX1BLR19DSEtfRU4sIHZhbCkpXG4gMzUzOlx0XHRcdHNlcV9wdXRzKHNmLCBcJiMzNDtlbmFibGVkXFxuXCYjMzQ7KTtcbiAzNTQ6XHRcdGVsc2VcbiAzNTU6XHRcdFx0c2VxX3B1dHMoc2YsIFwmIzM0O2Rpc2FibGVkXFxuXCYjMzQ7KTtcbiAzNTY6XHRcbiAzNTc6XHRcdHNlcV9wcmludGYoc2YsIFwmIzM0O0NSQyBjb3JydXB0aW9uIGVuOiAlc1xcblwmIzM0OywgRklFTERfR0VUKERBUDgyMTFSX1BLR19DT1JfQ1JDLCB2YWwpID9cbiAzNTg6XHRcdFx0ICAgXCYjMzQ7ZW5hYmxlZFwmIzM0OyA6IFwmIzM0O2Rpc2FibGVkXCYjMzQ7KTtcbiAzNTk6XHRcbiAzNjA6XHRcdHZhbCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuIDM2MTpcdFx0aWYgKHZhbCBcdTAwM2MgMClcbiAzNjI6XHRcdFx0cmV0dXJuIHZhbDtcbiAzNjM6XHRcbiAzNjQ6XHRcdHNlcV9wcmludGYoc2YsIFwmIzM0O0xvb3BiYWNrIGVuOiAlc1xcblwmIzM0OywgRklFTERfR0VUKEJNQ1JfTE9PUEJBQ0ssIHZhbCkgP1xuIDM2NTpcdFx0XHQgICBcJiMzNDtlbmFibGVkXCYjMzQ7IDogXCYjMzQ7ZGlzYWJsZWRcJiMzNDspO1xuIDM2NjpcdFx0cmV0dXJuIDA7XG4gMzY3Olx0fVxuIDM2ODpcdFxuIDM2OTpcdC8qKlxuIDM3MDpcdCAqIHBrZ19nZW5fd3JpdGUoKSAtIEVuYWJsZS9kaXNhYmxlIHBhY2tldCBnZW5lcmF0b3JcbiAzNzE6XHQgKiBAZmlsZTogRmlsZSBzdHJ1Y3R1cmVcbiAzNzI6XHQgKiBAdXNlcl9idWY6IFVzZXIgc3BhY2UgYnVmZmVyXG4gMzczOlx0ICogQGNvdW50OiBCdWZmZXIgc2l6ZVxuIDM3NDpcdCAqIEBwcG9zOiBGaWxlIHBvc2l0aW9uXG4gMzc1Olx0ICpcbiAzNzY6XHQgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yLlxuIDM3NzpcdCAqIEFsc28gY29udHJvbHMgbG9vcGJhY2sgYW5kIENSQyBjb3JydXB0aW9uIHZpYSBkZWJ1Z2ZzIGZsYWdzLlxuIDM3ODpcdCAqXG4gMzc5Olx0ICogTk9URTogV2UgaW50ZW50aW9uYWxseSBkbyBub3QgdXNlIGdlbnBoeV9sb29wYmFjaygpIGhlcmUuXG4gMzgwOlx0ICogZ2VucGh5X2xvb3BiYWNrKCkgZG9lcyBhIGZ1bGwgQk1DUiBvdmVyd3JpdGUgKG1hc2sgPSB+MCkgYW5kXG4gMzgxOlx0ICogd2FpdHMgdXAgdG8gNTAwIG1zIGZvciBsaW5rIGluIGxvb3BiYWNrIG1vZGUuIFRoaXMgaXMgdG9vXG4gMzgyOlx0ICogaGVhdnkgZm9yIGEgZGlhZ25vc3RpYyBwYWNrZXQgZ2VuZXJhdG9yOlxuIDM4MzpcdCAqXG4gMzg0Olx0ICogLSBJdCBkZXN0cm95cyBhbGwgb3RoZXIgQk1DUiBzdGF0ZSAoc3BlZWQsIGR1cGxleCwgQU4gY29uZmlnKS5cbiAzODU6XHQgKiAtIFRoZSA1MDAgbXMgbGluayBwb2xsIGlzIHVubmVjZXNzYXJ5OiB3ZSBhbHJlYWR5IGhhdmUgYSBsaW5rXG4gMzg2Olx0ICogICBvciBhcmUgZGVsaWJlcmF0ZWx5IHNldHRpbmcgdXAgYSB0ZXN0IGNvbmRpdGlvbi5cbiAzODc6XHQgKiAtIFdlIHdhbnQgdG8gbWluaW1pemUgY2hhbmdlcyB0byBCTUNSIGR1cmluZyBkZWJ1Z2dpbmcuXG4gMzg4Olx0ICpcbiAzODk6XHQgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyB3cml0dGVuIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiAzOTA6XHQgKi9cbiAzOTE6XHRzdGF0aWMgc3NpemVfdCBwa2dfZ2VuX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIDM5MjpcdFx0XHRcdCAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuIDM5MzpcdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gMzk0Olx0e1xuIDM5NTpcdFx0c3RydWN0IHNlcV9maWxlICpzZiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDM5NjpcdFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cdTAwM2Vwcml2YXRlO1xuIDM5NzpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cdTAwM2VkZXYpO1xuIDM5ODpcdFx0Ym9vbCBlbjtcbiAzOTk6XHRcdHUxNiBtYXNrLCBzZXQsIHNldF9ibWNyO1xuIDQwMDpcdFx0aW50IHJldDtcbiA0MDE6XHRcbiA0MDI6XHRcdHJldCA9IGtzdHJ0b2Jvb2xfZnJvbV91c2VyKHVzZXJfYnVmLCBjb3VudCwgXHUwMDI2ZW4pO1xuIDQwMzpcdFx0aWYgKHJldClcbiA0MDQ6XHRcdFx0cmV0dXJuIHJldDtcbiA0MDU6XHRcbiA0MDY6XHRcdGlmIChlbikge1xuIDQwNzpcdFx0XHRzZXQgPSBEQVA4MjExUl9QS0dfR0VOX0VOIHwgREFQODIxMVJfUEtHX0NIS19FTiB8IERBUDgyMTFSX1BLR19QTF81QUE1O1xuIDQwODpcdFxuIDQwOTpcdFx0XHRpZiAocHJpdi1cdTAwM2VjcmNfY29yKVxuIDQxMDpcdFx0XHRcdHNldCB8PSBEQVA4MjExUl9QS0dfQ09SX0NSQztcbiA0MTE6XHRcbiA0MTI6XHRcdFx0aWYgKHByaXYtXHUwMDNlbG9vcGJhY2spXG4gNDEzOlx0XHRcdFx0c2V0X2JtY3IgPSBCTUNSX0xPT1BCQUNLO1xuIDQxNDpcdFx0XHRlbHNlXG4gNDE1Olx0XHRcdFx0c2V0X2JtY3IgPSBCTUNSX0FORU5BQkxFO1xuIDQxNjpcdFx0fSBlbHNlIHtcbiA0MTc6XHRcdFx0c2V0ID0gREFQODIxMVJfUEtHX0dFTl9NT0RFIHwgREFQODIxMVJfUEtHX0dBVEVfRU47XG4gNDE4Olx0XHRcdHNldF9ibWNyID0gQk1DUl9BTkVOQUJMRTtcbiA0MTk6XHRcdH1cbiA0MjA6XHRcbiA0MjE6XHRcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9MT09QQkFDSyB8IEJNQ1JfQU5FTkFCTEUsIHNldF9ibWNyKTtcbiA0MjI6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNDIzOlx0XHRcdHJldHVybiByZXQ7XG4gNDI0Olx0XG4gNDI1Olx0XHRtYXNrID0gREFQODIxMVJfUEtHX0dFTl9NQVNLIHwgREFQODIxMVJfUEtHX1BMX01BU0sgfCBEQVA4MjExUl9QS0dfQ09SX0NSQztcbiA0MjY6XHRcdHJldCA9IGRhcDgyMTFyX21vZGlmeV9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSwgbWFzaywgc2V0KTtcbiA0Mjc6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiA0Mjg6XHRcdFx0cGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLLCAwKTtcbiA0Mjk6XHRcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NDIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMDA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFQODIxMVIgUEhZIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIHRoZSBEQVA4MjExUiBQSFkgZHJpdmVyLCBrZWVwaW5nIGluIG1pbmQgdGhlIGNvbnRleHQgb2YgdXNpbmcgc3l6a2FsbGVyLgoKRmlyc3QsIEkgc2VlIHRoZSBkcml2ZXIgZXhwb3NlcyBhIGZldyBgZGVidWdmc2AgZmlsZXM6IGBpbmZvYCAocmVhZC1vbmx5KSwgYHBrZ19nZW5gIChyZWFkLXdyaXRlKSwgYW5kIGEgY291cGxlIG9mIGJvb2xzOiBgcGtnX2dlbl9jcmNfY29yYCwgYHBrZ19nZW5fbG9vcGJhY2tgLiBUaGVzZSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBieSBzeXprYWxsZXIgd2hpY2ggaXMgdmVyeSBjb252ZW5pZW50LgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgZmlndXJpbmcgb3V0IGhvdyB0aGUgY29yZSBQSFkgaW5pdGlhbGl6YXRpb24gaGFwcGVucy4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGlzIGBkYXA4MjExcl9jb25maWdfaW5pdGAuIEl0JiMzOTtzIGNhbGxlZCBieSBgcGh5X2luaXRfaHdgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgcGh5X2F0dGFjaF9kaXJlY3RgLiBgcGh5X2F0dGFjaF9kaXJlY3RgIGlzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgYXR0YWNoZXMgdG8gdGhlIFBIWS4gSWYgSSBjYW4gZ2V0IGEgVVNCIGV0aGVybmV0IGRldmljZSB0byBlbXVsYXRlIGEgUEhZIGNvbm5lY3Rpb24sIEkgY2FuIHRyaWdnZXIgYGRhcDgyMTFyX2NvbmZpZ19pbml0YC4gVGhhdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHBhdGgsIHNvIGl0JiMzOTtzIGRlZmluYXRlbHkgb24gdGhlIGxpc3QuCgpBbG9uZyB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiwgdGhlIGBwa2dfZ2VuX3dyaXRlYCBhbmQgYGluZm9fc2hvd2AgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIGBkZWJ1Z2ZzYC4gCgpJJiMzOTt2ZSBhbHNvIHNjYW5uZWQgdGhyb3VnaCB0aGUgY29kZSBmb3IgaGVscGVyIGZ1bmN0aW9ucywgdGhlcmUmIzM5O3MgYGRhcDgyMTFyX3JlYWRfZXh0YCwgYGRhcDgyMTFyX21vZGlmeV9leHRgLCBgZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsYCwgYW5kIGBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXlgLiBXaGlsZSBpbnRlcmVzdGluZywgdGhleSBhcmVuJiMzOTt0IHRoZSBwcmltYXJ5IHRhcmdldHMuCgpTbywgdGhlIGZvY3VzIHBvaW50cyBhcmU6CgoqICAgYGRhcDgyMTFyX2NvbmZpZ19pbml0YAoqICAgYHBrZ19nZW5fd3JpdGVgCiogICBgaW5mb19zaG93YAoqICAgYHBrZ19nZW5fc2hvd2AKCmBpbmZvX3Nob3dgIGFuZCBgcGtnX2dlbl9zaG93YCBhcHBlYXIgdG8gYmUgc2ltcGxlIHJlZ2lzdGVyIHJlYWRzIGFuZCBwcmludHMuIE5vdCBzdXBlciBjb21wbGV4LCBidXQgcGFydCBvZiB0aGUgZHJpdmVyJiMzOTtzIG9wZXJhdGlvbi4gYHBrZ19nZW5fd3JpdGVgIGlzIGRlZmluaXRlbHkgbW9yZSBpbnRlcmVzdGluZywgaXQmIzM5O3MgbW9kaWZ5aW5nIFBIWSByZWdpc3RlcnMuIFRoZW4gdGhlcmUgaXMgYGRhcDgyMTFyX2NvbmZpZ19pbml0YCwgdGhlIFBIWSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19EQVA4MjExUl9QSFlgIGlzIHRoZSBwcmltYXJ5IG9uZSwgb2YgY291cnNlLiBXYWl0LCBgQ09ORklHX0RFQlVHX0ZTYCBpcyBuZWVkZWQgZm9yIHRoZSBkZWJ1Z2ZzIGZpbGVzLiBUaGFua2Z1bGx5IHN5emthbGxlciBoYXMgYENPTkZJR19ERUJVR19GU2AgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyB0YWtlbiBjYXJlIG9mLgoKQSBkb3VibGUgY2hlY2sgb2YgdGhlIEtjb25maWcgcmV2ZWFscyBhIGRlcGVuZGVuY3kgb24gYE9GYCAoT3BlbiBGaXJtd2FyZSwgYWthIERldmljZSBUcmVlKS4gVGhhdCYjMzk7cyBhIGtleSBwb2ludC4gRG9lcyB0aGlzIG1lYW4gaXQmIzM5O3Mgc3RyaWN0bHkgYSBEZXZpY2UgVHJlZS1iYXNlZCBwcm9iZT8gTm8sIGJ1dCB0aGUgY29kZSBkb2VzIHVzZSBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIGFuZCBgb2ZfcHJvcGVydHlfcmVhZF9ib29sYCwgd2hpY2ggaGF2ZSBzdHVicyB3aGVuIE9GIGlzbiYjMzk7dCBlbmFibGVkLiBTaW5jZSBpdCBkZXBlbmRzIG9uIE9GLCB0aGV5IHdpbGwgYmUgYnVpbHQgb25seSBpZiBPRiBpcyBlbmFibGVkLiBJIGtub3cgc3l6a2FsbGVyIHRlc3RzIG9uIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcywgaW5jbHVkaW5nIHg4NlxfNjQgYW5kIGFybTY0LCBhbmQgb2Z0ZW4gYENPTkZJR19PRmAgaXMgZW5hYmxlZCAoZXNwZWNpYWxseSBvbiBhcm02NCBhbmQgc29tZXRpbWVzIG9uIHg4NlxfNjQgZm9yIHRlc3RpbmcpLgoKV2hhdCBhYm91dCB0aGUgRGV2aWNlIFRyZWUgZGVwZW5kZW5jeSBpbiBtb3JlIGRldGFpbD8gU2luY2UgdGhlIFBIWSBpcyBwcm9iZWQgdmlhIFVTQiBNRElPIHNjYW4sIHRoZXJlIHdvbiYjMzk7dCBiZSBhbiBgb2Zfbm9kZWAgYXR0YWNoZWQgdG8gYHBoeWRldi0mZ3Q7bWRpby5kZXZgLiBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAgZnVuY3Rpb25zIHdpbGwgcmV0dXJuIGAtRUlOVkFMYCBhbmQgdGhlIGRyaXZlciB3aWxsIHVzZSBkZWZhdWx0IHZhbHVlcy4gVGhpcyBpcyBmaW5lOyBpdCYjMzk7cyBqdXN0IGEgZGlmZmVyZW50IGNvZGVwYXRoLgoKQW55IG90aGVyIGNvbmZpZ3VyYXRpb25zPyBObyBgQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElOR2Agb3IgYENPTkZJR19NQUNTRUNgLgoKVGltZSB0byByZXZpZXcgdGhlIGZvY3VzIHBvaW50cyBhZ2FpbiwgdGFraW5nIGludG8gYWNjb3VudCBob3cgdGhlIGRyaXZlciBpcyBhY3R1YWxseSB1c2VkOgoKKiAgIGBkYXA4MjExcl9jb25maWdfaW5pdGAgKFBIWSBpbml0aWFsaXphdGlvbikuCiogICBgcGtnX2dlbl93cml0ZWAgKGRlYnVnZnMgYWNjZXNzIGZvciByZWdpc3RlciB3cml0ZXMpLgoqICAgYGRhcDgyMTFyX3Byb2JlYCAoZGV2aWNlIHByb2JlKS4KCkkmIzM5O2xsIGluY2x1ZGUgdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBkYXA4MjExcl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYz01NT1zdHJ1Y3QgZGFwODIxMXJfZGVsYXlfY29uZmlnIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01OS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjYwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGFwODIxMXJfZGVsYXlfY29uZmlnIGRlbGF5X2NvbmZpZ1tdID0ge1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNjEtXHR7ICAgMCwgMH0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9ODE9c3RydWN0IGRhcDgyMTFyX3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTk4LSAqL1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6OTk6c3RhdGljIHUxNiBkYXA4MjExcl9kZWxheV9wc190b19zZWwoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBzKVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTAwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0xMzctICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzoxMzg6c3RhdGljIGludCBkYXA4MjExcl9yZWFkX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnKVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTM5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0xNjUtICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzoxNjY6c3RhdGljIGludCBkYXA4MjExcl9tb2RpZnlfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcsIHUxNiBtYXNrLCB1MTYgc2V0KVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTY3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0xOTAtICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzoxOTE6c3RhdGljIHUzMiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTkyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0yMTYtICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzoyMTc6c3RhdGljIGludCBkYXA4MjExcl9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMjE4LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYz00MzQ9REVGSU5FX1NIT1dfU1RPUkVfQVRUUklCVVRFKHBrZ19nZW4pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ0Ny0gKi9cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjQ0ODpzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDQ5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00NzAtICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0NzE6c3RhdGljIHZvaWQgZGFwODIxMXJfZGVidWdfcmVtb3ZlKHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDcyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00NzYtI2Vsc2UgLyogIUNPTkZJR19ERUJVR19GUyAqL1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6NDc3OnN0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX2luaXQoc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYpIHt9XG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0Nzg6c3RhdGljIHZvaWQgZGFwODIxMXJfZGVidWdfcmVtb3ZlKHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KSB7fVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDc5LSNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi9cbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00ODktICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0OTA6c3RhdGljIGludCBkYXA4MjExcl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDkxLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MTQtICovXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1MTU6c3RhdGljIHZvaWQgZGFwODIxMXJfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MTYte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTUxOS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjUyMDpzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZGFwODIxMXJfZHJpdmVyW10gPSB7XG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MjEtXHR7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9NTM4PU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MzktXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1NDA6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBkYXA4MjExcl90YltdID0ge1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNTQxLVx0eyBEQVA4MjExUl9QSFlfSUQsIERBUDgyMTFSX1BIWV9JRF9NQVNLIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTEyCgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDUwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgREFQODIxMVIgUEhZIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBnb3QgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciwgdGhlIERBUDgyMTFSKEkpLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZnV6emluZyBhcHByb2FjaC4gTG9va2luZyBhdCB0aGUgZnVuY3Rpb25zLCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGZvY3VzIG9uIGBkYXA4MjExcl9jb25maWdfaW5pdGAsIGBwa2dfZ2VuX3dyaXRlYCwgYGRhcDgyMTFyX3Byb2JlYCwgYGluZm9fc2hvd2AsIGFuZCBgcGtnX2dlbl9zaG93YC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBkZWJ1ZyBpbnRlcmZhY2VzLgoKTm93LCBJIHNlZSB0aGF0IGBEQVA4MjExUl9QSFlgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBzbyB0aGF0JiMzOTtzIGEgZ28gZm9yIGBFbmFibGVDb25maWdzYC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZS4KClRoZSBiaWdnZXIgcXVlc3Rpb24gaXMsICpzaG91bGQqIEkgZnV6eiB0aGlzPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgbmV3IFBIWSBkcml2ZXIsIGFuZCB0aGUgZmFjdCB0aGF0IGl0IGNhbiBiZSByZWFjaGVkIHRocm91Z2ggVVNCIE1ESU8gc2Nhbm5pbmcgYW5kIHZpYSBkZWJ1Z2ZzIG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0LiBUaGUgZHJpdmVyIGhhcyBgY29uZmlnX2luaXRgIHRvIHNldCB1cCB0aGUgZHJpdmVyIGFuZCBpdCBpbXBsZW1lbnRzIGRlYnVnZnMgb3BlcmF0aW9ucywgYWxsIG9mIHdoaWNoIHJlcHJlc2VudCBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLgoKU28sIGxldCYjMzk7cyBzdW1tYXJpemUgdGhlIGxvZ2ljIGJlaGluZCB0aGUgZnV6emluZyBhcHByb2FjaDogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgdGhlIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKS4gSXQgY2FuIGJlIHByb2JlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBFdGhlcm5ldCBkZXZpY2UuIE9uY2UgcHJvYmVkLCB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIGFuZCBkZWJ1Z2ZzIG9wZXJhdGlvbnMgYXJlIHJlYWR5IHRvIGJlIHVzZWQuIFRoaXMgbWFrZXMgZm9yIGEgcGVyZmVjdCB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9sczogYGRhcDgyMTFyX3Byb2JlYCwgYGRhcDgyMTFyX2NvbmZpZ19pbml0YCwgYHBrZ19nZW5fd3JpdGVgLCBgaW5mb19zaG93YCwgYW5kIGBwa2dfZ2VuX3Nob3dgLiBUaGUgYERBUDgyMTFSX1BIWWAgY29uZmlndXJhdGlvbiBpcyBuZWNlc3NhcnkgdG8gZ2V0IHRoaXMgZ29pbmcuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBwbGFuLiBUaW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBnZXQgdGhpcyBwcm9jZXNzIHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQVA4MjExUl9QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXA4MjExcl9wcm9iZSYjMzQ7LAogICAgJiMzNDtkYXA4MjExcl9jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDtwa2dfZ2VuX3dyaXRlJiMzNDssCiAgICAmIzM0O2luZm9fc2hvdyYjMzQ7LAogICAgJiMzNDtwa2dfZ2VuX3Nob3cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBFdGhlcm5ldCBkZXZpY2UgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgREFQODIxMVIgUEhZIElELiBPbmNlIHByb2JlZCwgdGhlIGRyaXZlciYjMzk7cyBgY29uZmlnX2luaXRgIGFuZCBkZWJ1Z2ZzIG9wZXJhdGlvbnMgKGBpbmZvX3Nob3dgLCBgcGtnX2dlbl9zaG93YCwgYHBrZ19nZW5fd3JpdGVgKSBjYW4gYmUgZXhlcmNpc2VkIGJ5IHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFQODIxMVJfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFwODIxMXJfcHJvYmUmIzM0OywKICAgICYjMzQ7ZGFwODIxMXJfY29uZmlnX2luaXQmIzM0OywKICAgICYjMzQ7cGtnX2dlbl93cml0ZSYjMzQ7LAogICAgJiMzNDtpbmZvX3Nob3cmIzM0OywKICAgICYjMzQ7cGtnX2dlbl9zaG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgREFQVSBUZWxlY29tIERBUDgyMTFSKEkpLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgRXRoZXJuZXQgZGV2aWNlIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCByZXNwb25kcyB0byBNRElPIHJlYWRzIHdpdGggdGhlIERBUDgyMTFSIFBIWSBJRC4gT25jZSBwcm9iZWQsIHRoZSBkcml2ZXImIzM5O3MgYGNvbmZpZ19pbml0YCBhbmQgZGVidWdmcyBvcGVyYXRpb25zIChgaW5mb19zaG93YCwgYHBrZ19nZW5fc2hvd2AsIGBwa2dfZ2VuX3dyaXRlYCkgY2FuIGJlIGV4ZXJjaXNlZCBieSB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMjo0Ny41MzA2NzY4NzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjE2MzI4Mjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQVA4MjExUl9QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXA4MjExcl9wcm9iZVwiLFxuICAgIFwiZGFwODIxMXJfY29uZmlnX2luaXRcIixcbiAgICBcInBrZ19nZW5fd3JpdGVcIixcbiAgICBcImluZm9fc2hvd1wiLFxuICAgIFwicGtnX2dlbl9zaG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBFdGhlcm5ldCBkZXZpY2UgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgREFQODIxMVIgUEhZIElELiBPbmNlIHByb2JlZCwgdGhlIGRyaXZlcidzIGBjb25maWdfaW5pdGAgYW5kIGRlYnVnZnMgb3BlcmF0aW9ucyAoYGluZm9fc2hvd2AsIGBwa2dfZ2VuX3Nob3dgLCBgcGtnX2dlbl93cml0ZWApIGNhbiBiZSBleGVyY2lzZWQgYnkgdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMjo0Ny41MzA2OTgwNDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTYxODk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzNDZmNzE1MDBiNmE3YmIxYjA1YTgzYjgyMjgxOWYxNDk2NmRhZDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTc6MjI6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RhcHUsZGFwODIxMXIueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIwOGE4MmY3NzlkNjFlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGFwdSxkYXA4MjExci55YW1sXFxuQEAgLTAsMCArMSw3OCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcXG4rJVlBTUwgMS4yXFxuKy0tLVxcbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWVxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBBcnRlbSBTaGlta28gXFx1MDAzY2Euc2hpbWtvLmRldkBnbWFpbC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjogfFxcbisgIFRoZSBEQVA4MjExUihJKSBpcyBhIEdpZ2FiaXQgRXRoZXJuZXQgUEhZIHdpdGggUkdNSUkgaW50ZXJmYWNlLFxcbisgIHN1cHBvcnRpbmcgSUVFRSA4MDIuM2F6IEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXQsIElFRUUgMTU4OCBTeW5jRSxcXG4rICBhbmQgYW4gaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvciBmb3IgZGlhZ25vc3RpY3MuXFxuK1xcbisgIFNwZWNpZmljYXRpb25zOlxcbisgICAgLSAxMEJBU0UtVGUsIDEwMEJBU0UtVFgsIDEwMDBCQVNFLVRcXG4rICAgIC0gUkdNSUkgd2l0aCBjb25maWd1cmFibGUgVFgvUlggY2xvY2sgZGVsYXlzICgxNTAgcHMgc3RlcHMsIDAtMjI1MCBwcylcXG4rICAgIC0gSUVFRSA4MDIuM2F6LTIwMTAgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldFxcbisgICAgLSBJRUVFIDE1ODggU3luY0Ugc3VwcG9ydFxcbisgICAgLSBJbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yIGFuZCBjaGVja2VyIGZvciBsaW5rIGRpYWdub3N0aWNzXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwMDguMDExYlxcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICByeC1pbnRlcm5hbC1kZWxheS1wczpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBSR01JSSBSWCBjbG9jayBkZWxheSBpbiBwaWNvc2Vjb25kcy4gVGhlIFBIWSBzdXBwb3J0cyAxNTAgcHMgc3RlcHNcXG4rICAgICAgZnJvbSAwIHRvIDIyNTAgcHMuIElmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIDE5NTAgcHMuIElmIHRoZVxcbisgICAgICByZXF1ZXN0ZWQgdmFsdWUgZG9lcyBub3QgZXhhY3RseSBtYXRjaCBhIHN1cHBvcnRlZCBzdGVwLCB0aGUgZHJpdmVyXFxuKyAgICAgIHNlbGVjdHMgdGhlIG5lYXJlc3Qgc3VwcG9ydGVkIHZhbHVlIGFuZCBpc3N1ZXMgYSB3YXJuaW5nLlxcbisgICAgZW51bTogWzAsIDE1MCwgMzAwLCA0NTAsIDYwMCwgNzUwLCA5MDAsIDEwNTAsIDEyMDAsIDEzNTAsIDE1MDAsXFxuKyAgICAgICAgICAgMTY1MCwgMTgwMCwgMTk1MCwgMjEwMCwgMjI1MF1cXG4rICAgIGRlZmF1bHQ6IDE5NTBcXG4rXFxuKyAgdHgtaW50ZXJuYWwtZGVsYXktcHM6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgUkdNSUkgVFggY2xvY2sgZGVsYXkgaW4gcGljb3NlY29uZHMuIFRoZSBQSFkgc3VwcG9ydHMgMTUwIHBzIHN0ZXBzXFxuKyAgICAgIGZyb20gMCB0byAyMjUwIHBzLiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byAxOTUwIHBzLiBJZiB0aGVcXG4rICAgICAgcmVxdWVzdGVkIHZhbHVlIGRvZXMgbm90IGV4YWN0bHkgbWF0Y2ggYSBzdXBwb3J0ZWQgc3RlcCwgdGhlIGRyaXZlclxcbisgICAgICBzZWxlY3RzIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZSBhbmQgaXNzdWVzIGEgd2FybmluZy5cXG4rICAgIGVudW06IFswLCAxNTAsIDMwMCwgNDUwLCA2MDAsIDc1MCwgOTAwLCAxMDUwLCAxMjAwLCAxMzUwLCAxNTAwLFxcbisgICAgICAgICAgIDE2NTAsIDE4MDAsIDE5NTAsIDIxMDAsIDIyNTBdXFxuKyAgICBkZWZhdWx0OiAxOTUwXFxuK1xcbisgIHR4LWludmVydGVkLWNsazpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL2ZsYWdcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBJZiBwcmVzZW50LCB0aGUgUkdNSUkgVFggY2xvY2sgdG8gdGhlIE1BQyBpcyBpbnZlcnRlZCAoMTgwIGRlZ3JlZVxcbisgICAgICBwaGFzZSBzaGlmdCByZWxhdGl2ZSB0byB0aGUgZGF0YSBsaW5lcykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWNcXG4rICAgICAgZXh0ZW5zaW9uIGZvciBib2FyZHMgd2hlcmUgUENCIHRyYWNlIGxlbmd0aCBvciBNQUMgcmVxdWlyZW1lbnRzXFxuKyAgICAgIG5lY2Vzc2l0YXRlIGNsb2NrIGludmVyc2lvbi4gT25seSB1c2UgdGhpcyBwcm9wZXJ0eSBhZnRlciBoYXJkd2FyZVxcbisgICAgICBzaWduYWwgaW50ZWdyaXR5IHZhbGlkYXRpb24uXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHlAMSB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjJcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgIHJ4LWludGVybmFsLWRlbGF5LXBzID0gXFx1MDAzYzEwNTBcXHUwMDNlO1xcbisgICAgICAgICAgICB0eC1pbnRlcm5hbC1kZWxheS1wcyA9IFxcdTAwM2MxMTUwXFx1MDAzZTtcXG4rICAgICAgICAgICAgdHgtaW52ZXJ0ZWQtY2xrO1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuaW5kZXggMDk5ZjI1ZGNlYWJiYzcuLjQ1NzZmNzA3YWM5NDQ1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5AQCAtMjM3LDYgKzIzNywxNiBAQCBjb25maWcgREFWSUNPTV9QSFlcXG4gXFx0aGVscFxcbiBcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBkbTkxNjFlIGFuZCBkbTkxMzFcXG4gXFxuK2NvbmZpZyBEQVA4MjExUl9QSFlcXG4rXFx0dHJpc3RhdGUgXFxcIkRBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWVxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBPRlxcbitcXHRoZWxwXFxuK1xcdCAgU3VwcG9ydCBmb3IgdGhlIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWS5cXG4rXFx0ICBUaGlzIFBIWSBpcyBkZXNpZ25lZCBmb3IgZW50ZXJwcmlzZSBhbmQgaW5kdXN0cmlhbCBuZXR3b3JraW5nXFxuK1xcdCAgYXBwbGljYXRpb25zLCBzdXBwb3J0aW5nIDEwLzEwMC8xMDAwIE1icHMgb3BlcmF0aW9uLlxcbitcXHQgIFJHTUlJIHdpdGg6IGNvbmZpZ3VyYWJsZSBUWC9SWCBjbG9jayBkZWxheXMsIG9wdGlvbmFsIGZsYWcgdG8gZW5hYmxlXFxuK1xcdCAgMTgwLWRlZ3JlZSBUWCBjbG9jayBwaGFzZSBzaGlmdCBhbmQgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvci5cXG4rXFxuIGNvbmZpZyBJQ1BMVVNfUEhZXFxuIFxcdHRyaXN0YXRlIFxcXCJJQ1BsdXMgUEhZc1xcXCJcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcXG5pbmRleCBkZTY2MGFlOTQ5NDUzZC4uYWQzNTczM2ViNGJiNjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuQEAgLTUzLDYgKzUzLDcgQEAgb2JqLSQoQ09ORklHX0JST0FEQ09NX1BIWSlcXHQrPSBicm9hZGNvbS5vXFxuIG9iai0kKENPTkZJR19DSUNBREFfUEhZKVxcdCs9IGNpY2FkYS5vXFxuIG9iai0kKENPTkZJR19DT1JUSU5BX1BIWSlcXHQrPSBjb3J0aW5hLm9cXG4gb2JqLSQoQ09ORklHX0RBVklDT01fUEhZKVxcdCs9IGRhdmljb20ub1xcbitvYmotJChDT05GSUdfREFQODIxMVJfUEhZKVxcdCs9IGRhcDgyMTFyLm9cXG4gb2JqLSQoQ09ORklHX0RQODM2NDBfUEhZKVxcdCs9IGRwODM2NDAub1xcbiBvYmotJChDT05GSUdfRFA4MzgyMl9QSFkpXFx0Kz0gZHA4MzgyMi5vXFxuIG9iai0kKENPTkZJR19EUDgzODQ4X1BIWSlcXHQrPSBkcDgzODQ4Lm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMgYi9kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJkNjk1YmM0OTUzYTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jXFxuQEAgLTAsMCArMSw1NDQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTFxcbisvKlxcbisgKiBEcml2ZXIgZm9yIHRoZSBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkgR2lnYWJpdCBFdGhlcm5ldCBQSFkuXFxuKyAqXFxuKyAqIFNwZWNpZmljYXRpb25zOlxcbisgKiAgIC0gSUVFRSA4MDIuMyAxMEJBU0UtVGUsIDEwMEJBU0UtVFgsIDEwMDBCQVNFLVRcXG4rICogICAtIElFRUUgODAyLjNhei0yMDEwIEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXRcXG4rICogICAtIElFRUUgMTU4OCBTeW5jRSBzdXBwb3J0XFxuKyAqICAgLSBSR01JSVxcbisgKiAgIC0gUGFja2FnZSBHZW5lcmF0b3IgZm9yIGRpYWdub3N0aWNzXFxuKyAqXFxuKyAqIEF1dGhvcjogQXJ0ZW0gU2hpbWtvIFxcdTAwM2NhLnNoaW1rby5kZXZAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9JRFxcdFxcdFxcdDB4MDAwODAxMUJcXG4rI2RlZmluZSBEQVA4MjExUl9QSFlfSURfTUFTS1xcdFxcdDB4RkZGRkZGRkZcXG4rXFxuKyNkZWZpbmUgREFQODIxMVJfRVhUX0FERFxcdFxcdDB4MUVcXG4rI2RlZmluZSBEQVA4MjExUl9FWFRfREFUQVxcdFxcdDB4MUZcXG4rXFxuKyNkZWZpbmUgREFQODIxMVJfUEtHQzVcXHRcXHRcXHQweEEwXFxuKyNkZWZpbmUgREFQODIxMVJfUEtHX1BMX01BU0tcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgREFQODIxMVJfUEtHX1BMXzVBQTVcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSBEQVA4MjExUl9QS0dfQ09SX0NSQ1xcdFxcdEJJVCgyKVxcbisjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fRU5cXHRcXHRCSVQoMTIpXFxuKyNkZWZpbmUgREFQODIxMVJfUEtHX0dFTl9NT0RFXFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIERBUDgyMTFSX1BLR19HQVRFX0VOXFx0XFx0QklUKDE0KVxcbisjZGVmaW5lIERBUDgyMTFSX1BLR19DSEtfRU5cXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgREFQODIxMVJfUEtHX0dFTl9NQVNLXFx0XFx0R0VOTUFTSygxNSwgMTIpXFxuK1xcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9DT05cXHRcXHQweEEwMDFcXG4rI2RlZmluZSBEQVA4MjExUl9QSFlfTERPX0VOXFx0XFx0QklUKDYpXFxuKyNkZWZpbmUgREFQODIxMVJfUEhZX1JYX0RMWVxcdFxcdEJJVCg4KVxcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9HQVRFX1JYX0NMS1xcdEJJVCg5KVxcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9TV19SU1RcXHRcXHRCSVQoMTUpXFxuK1xcbisjZGVmaW5lIERBUDgyMTFSX1JHTUlJX0NPTlxcdFxcdDB4QTAwM1xcbisjZGVmaW5lIERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLXFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLXFx0R0VOTUFTSygxMywgMTApXFxuKyNkZWZpbmUgREFQODIxMVJfUkdNSUlfQ0xLX0lOVkVSVFxcdEJJVCgxNClcXG4rXFxuKy8qIERlZmF1bHQgUkdNSUkgZGVsYXkgKDEuOTVucyA9PSAxMyAqIDE1MClwcykgKi9cXG4rI2RlZmluZSBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTXFx0MTk1MFxcbitcXG4rc3RydWN0IGRhcDgyMTFyX2RlbGF5X2NvbmZpZyB7XFxuK1xcdHUzMiBwcztcXG4rXFx0dTggc2VsO1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcgZGVsYXlfY29uZmlnW10gPSB7XFxuK1xcdHsgICAwLCAwfSxcXG4rXFx0eyAxNTAsIDF9LFxcbitcXHR7IDMwMCwgMn0sXFxuK1xcdHsgNDUwLCAzfSxcXG4rXFx0eyA2MDAsIDR9LFxcbitcXHR7IDc1MCwgNX0sXFxuK1xcdHsgOTAwLCA2fSxcXG4rXFx0ezEwNTAsIDd9LFxcbitcXHR7MTIwMCwgOH0sXFxuK1xcdHsxMzUwLCA5fSxcXG4rXFx0ezE1MDAsIDEwfSxcXG4rXFx0ezE2NTAsIDExfSxcXG4rXFx0ezE4MDAsIDEyfSxcXG4rXFx0ezE5NTAsIDEzfSxcXG4rXFx0ezIxMDAsIDE0fSxcXG4rXFx0ezIyNTAsIDE1fSxcXG4rfTtcXG4rXFxuKyNkZWZpbmUgREFQODIxMVJfREVMQVlfQ09VTlRcXHRBUlJBWV9TSVpFKGRlbGF5X2NvbmZpZylcXG4rXFxuK3N0cnVjdCBkYXA4MjExcl9wcml2IHtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfRlMpXFxuK1xcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGlyO1xcbitcXHRib29sIGNyY19jb3I7XFxuK1xcdGJvb2wgbG9vcGJhY2s7XFxuKyNlbmRpZlxcbit9O1xcbitcXG4rLyoqXFxuKyAqIGRhcDgyMTFyX2RlbGF5X3BzX3RvX3NlbCgpIC0gQ29udmVydCBwaWNvc2Vjb25kcyB0byByZWdpc3RlciB2YWx1ZVxcbisgKiBAcHM6IERlbGF5IGluIHBpY29zZWNvbmRzICgwLTIyNTApXFxuKyAqXFxuKyAqIENvbnZlcnRzIGEgZGVsYXkgdmFsdWUgaW4gcGljb3NlY29uZHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgdmFsdWVcXG4rICogZm9yIFJHTUlJIGRlbGF5IGNvbmZpZ3VyYXRpb24uIFRoZSBQSFkgc3VwcG9ydHMgMTUwcHMgc3RlcHMgZnJvbSAwIHRvIDIyNTBwcy5cXG4rICpcXG4rICogUmV0dXJuOiBSZWdpc3RlciB2YWx1ZSAoMC0xNSlcXG4rICovXFxuK3N0YXRpYyB1MTYgZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwcylcXG4re1xcbitcXHRpbnQgaSwgYmVzdF9pZHggPSAwO1xcbitcXHR1MzIgYmVzdF9kaWZmID0gVUlOVF9NQVgsIGRpZmYgPSAwO1xcbitcXG4rXFx0aWYgKCFwcylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgREFQODIxMVJfREVMQVlfQ09VTlQ7IGkrKykge1xcbitcXHRcXHRkaWZmID0gYWJzKHBzIC0gZGVsYXlfY29uZmlnW2ldLnBzKTtcXG4rXFxuK1xcdFxcdGlmIChkaWZmIFxcdTAwM2MgYmVzdF9kaWZmKSB7XFxuK1xcdFxcdFxcdGJlc3RfZGlmZiA9IGRpZmY7XFxuK1xcdFxcdFxcdGJlc3RfaWR4ID0gaTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFkaWZmKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGJlc3RfZGlmZilcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiRGVsYXkgJXUgcHMgbm90IGZvdW5kLCB1c2luZyBjbG9zZXN0ICV1IHBzXFxcXG5cXFwiLCBwcyxcXG4rXFx0XFx0XFx0ICAgIGRlbGF5X2NvbmZpZ1tiZXN0X2lkeF0ucHMpO1xcbitcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCJEZWxheSBwcyBpZHg6ICV1XFxcXG5cXFwiLCBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbCk7XFxuK1xcbitcXHRyZXR1cm4gZGVsYXlfY29uZmlnW2Jlc3RfaWR4XS5zZWw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXA4MjExcl9yZWFkX2V4dCgpIC0gUmVhZCBleHRlbmRlZCByZWdpc3RlclxcbisgKiBAcGh5ZGV2OiBQSFkgZGV2aWNlIHN0cnVjdHVyZVxcbisgKiBAcmVnOiBFeHRlbmRlZCByZWdpc3RlciBhZGRyZXNzXFxuKyAqXFxuKyAqIFJlYWRzIGEgUEhZIGV4dGVuZGVkIHJlZ2lzdGVyIHVzaW5nIHRoZSBpbmRpcmVjdCBhY2Nlc3MgbWV0aG9kLlxcbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgTURJTyBidXMgbG9jay5cXG4rICpcXG4rICogUmV0dXJuOiBSZWdpc3RlciB2YWx1ZSBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IGRhcDgyMTFyX3JlYWRfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgREFQODIxMVJfRVhUX0FERCwgcmVnKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIERBUDgyMTFSX0VYVF9EQVRBKTtcXG4rb3V0OlxcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXA4MjExcl9tb2RpZnlfZXh0KCkgLSBNb2RpZnkgZXh0ZW5kZWQgcmVnaXN0ZXIgYml0c1xcbisgKiBAcGh5ZGV2OiBQSFkgZGV2aWNlIHN0cnVjdHVyZVxcbisgKiBAcmVnOiBFeHRlbmRlZCByZWdpc3RlciBhZGRyZXNzXFxuKyAqIEBtYXNrOiBCaXQgbWFzayBvZiBiaXRzIHRvIGNsZWFyXFxuKyAqIEBzZXQ6IEJpdCBtYXNrIG9mIGJpdHMgdG8gc2V0XFxuKyAqXFxuKyAqIE1vZGlmaWVzIGEgUEhZIGV4dGVuZGVkIHJlZ2lzdGVyIHVzaW5nIHRoZSBpbmRpcmVjdCBhY2Nlc3MgbWV0aG9kLlxcbisgKiBOZXcgdmFsdWUgPSAob2xkIHZhbHVlIFxcdTAwMjYgfm1hc2spIHwgc2V0LlxcbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgTURJTyBidXMgbG9jay5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgZGFwODIxMXJfbW9kaWZ5X2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnLCB1MTYgbWFzaywgdTE2IHNldClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBEQVA4MjExUl9FWFRfQURELCByZWcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBEQVA4MjExUl9FWFRfREFUQSwgbWFzaywgc2V0KTtcXG4rb3V0OlxcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoKSAtIEdldCBSR01JSSBkZWxheSBmcm9tIGRldmljZSB0cmVlXFxuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXFxuKyAqIEBwcm9wX25hbWU6IERldmljZSB0cmVlIHByb3BlcnR5IG5hbWVcXG4rICpcXG4rICogUmVhZHMgdGhlIFJHTUlJIGRlbGF5IGZyb20gdGhlIGRldmljZSB0cmVlLiBJZiB0aGUgcHJvcGVydHkgaXMgbm90XFxuKyAqIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgZGVsYXkgKDE5NTBwcykgaXMgdXNlZC5cXG4rICpcXG4rICogUmV0dXJuOiBSZWdpc3RlciB2YWx1ZSAoMC0xNSkgb3IgZGVmYXVsdCBpZiBwcm9wZXJ0eSBub3QgZm91bmRcXG4rICovXFxuK3N0YXRpYyB1MzIgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKnByb3BfbmFtZSlcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbitcXHRpbnQgcmV0O1xcbitcXHR1MzIgcHMgPSAwO1xcbitcXG4rXFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIHByb3BfbmFtZSwgXFx1MDAyNnBzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIlVzaW5nIGRlZmF1bHQgZGVsYXkgKCV1cHMpXFxcXG5cXFwiLCBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTKTtcXG4rXFx0XFx0cHMgPSBEQVA4MjExUl9ERUZBVUxUX0RFTEFZX1BTO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKHBoeWRldiwgcHMpO1xcbit9XFxuK1xcbisvKipcXG4rICogZGFwODIxMXJfY29uZmlnX2luaXQoKSAtIEluaXRpYWxpemUgUEhZXFxuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXFxuKyAqXFxuKyAqIENvbmZpZ3VyZXMgdGhlIFBIWSBkdXJpbmcgaW5pdGlhbGl6YXRpb246XFxuKyAqIC0gUkdNSUkgZGVsYXlzIGJhc2VkIG9uIGludGVyZmFjZSBtb2RlXFxuKyAqIC0gVFggY2xvY2sgaW52ZXJ0aW9uXFxuKyAqIC0gU29mdHdhcmUgcmVzZXQgdG8gYXBwbHkgc2V0dGluZ3NcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgZGFwODIxMXJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeWRldl9ub2RlID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbitcXHR1MTYgbWFzayA9IDAsIHNldCA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzd2l0Y2ggKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlKSB7XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfUlhJRDpcXG4rXFx0XFx0c2V0ID0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSyxcXG4rXFx0XFx0XFx0XFx0IGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsIFxcXCJyeC1pbnRlcm5hbC1kZWxheS1wc1xcXCIpKTtcXG4rXFx0XFx0bWFzayA9IERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ6XFxuK1xcdFxcdHNldCA9IEZJRUxEX1BSRVAoREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0ssXFxuK1xcdFxcdFxcdFxcdCBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkocGh5ZGV2LCBcXFwicngtaW50ZXJuYWwtZGVsYXktcHNcXFwiKSk7XFxuK1xcdFxcdG1hc2sgPSBEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSztcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6XFxuK1xcdFxcdHNldCB8PSBGSUVMRF9QUkVQKERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLLFxcbitcXHRcXHRcXHRcXHQgIGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsIFxcXCJ0eC1pbnRlcm5hbC1kZWxheS1wc1xcXCIpKTtcXG4rXFx0XFx0bWFzayB8PSBEQVA4MjExUl9SR01JSV9UWF9ERUxfTUFTSztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgaW50ZXJmYWNlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwaHlkZXZfbm9kZSwgXFxcInR4LXVzZS1pbnZlcnRlZC1jbGtcXFwiKSlcXG4rXFx0XFx0c2V0IHw9IERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQ7XFxuK1xcbitcXHRtYXNrIHw9IERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQ7XFxuK1xcbitcXHRyZXQgPSBkYXA4MjExcl9tb2RpZnlfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTiwgREFQODIxMVJfUEhZX1NXX1JTVCwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBXYWl0IGZvciByZXNldCBzZWxmLWNsZWFyICovXFxuK1xcdGZzbGVlcCgyMDApO1xcbitcXG4rXFx0cmV0ID0gZGFwODIxMXJfbW9kaWZ5X2V4dChwaHlkZXYsIERBUDgyMTFSX1JHTUlJX0NPTiwgbWFzaywgc2V0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBoeWRldl9kYmcocGh5ZGV2LCBcXFwiUkdNSUkgY29uZmlndXJlZDogaW50ZXJmYWNlPSVkLCBtYXNrPTB4JTA0eCwgc2V0PTB4JTA0eFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UsIG1hc2ssIHNldCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKVxcbitcXG4rLyoqXFxuKyAqIGluZm9fc2hvdygpIC0gU2hvdyBQSFkgc3RhdHVzIGluZm9ybWF0aW9uXFxuKyAqIEBzZjogU2VxdWVuY2UgZmlsZSBzdHJ1Y3R1cmVcXG4rICogQGRhdGE6IFByaXZhdGUgZGF0YSAoc3RydWN0IGRhcDgyMTFyX3ByaXYgKilcXG4rICpcXG4rICogRGlzcGxheXMgUEhZIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cyByZWdpc3RlcnMgZm9yIGRlYnVnZ2luZy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cXHUwMDNlZGV2KTtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTik7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gdmFsO1xcbitcXG4rXFx0c2VxX3ByaW50ZihzZiwgXFxcIlBIWV9DT046IDB4JTA0eFxcXFxuXFxcIiwgdmFsKTtcXG4rXFx0c2VxX3ByaW50ZihzZiwgXFxcIiAgTERPIGVuYWJsZWQ6ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX0xET19FTiwgdmFsKSAgP1xcbitcXHRcXHQgICBcXFwieWVzXFxcIiA6IFxcXCJub1xcXCIpO1xcbitcXHRzZXFfcHJpbnRmKHNmLCBcXFwiICBSWCBkbHkgZW46ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX1JYX0RMWSwgdmFsKSA/XFxuK1xcdFxcdCAgIFxcXCJ5ZXNcXFwiIDogXFxcIm5vXFxcIik7XFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCIgIFJYIGNrbCBnYXRpbmc6ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX0dBVEVfUlhfQ0xLLCB2YWwpID9cXG4rXFx0XFx0ICAgXFxcInllc1xcXCIgOiBcXFwibm9cXFwiKTtcXG4rXFxuK1xcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUkdNSUlfQ09OKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB2YWw7XFxuK1xcbitcXHRzZXFfcHJpbnRmKHNmLCBcXFwiUkdNSUlfQ09OOiAweCUwNHhcXFxcblxcXCIsIHZhbCk7XFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCIgIFRYIGRlbGF5IGlkeDogJWx4XFxcXG5cXFwiLCBGSUVMRF9HRVQoREFQODIxMVJfUkdNSUlfVFhfREVMX01BU0ssIHZhbCkpO1xcbitcXHRzZXFfcHJpbnRmKHNmLCBcXFwiICBSWCBkZWxheSBpZHg6ICVseFxcXFxuXFxcIiwgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLLCB2YWwpKTtcXG4rXFx0c2VxX3ByaW50ZihzZiwgXFxcIiAgQ0xLIGludmVydDogJXNcXFxcblxcXCIsIEZJRUxEX0dFVChEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJULCB2YWwpID9cXG4rXFx0XFx0ICAgXFxcInllc1xcXCIgOiBcXFwibm9cXFwiKTtcXG4rXFxuK1xcdHZhbCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNU1IpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCJCTVNSOiAweCUwNHhcXFxcblxcXCIsIHZhbCk7XFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCIgIExpbms6ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoQk1TUl9MU1RBVFVTLCB2YWwpID9cXG4rXFx0XFx0ICAgXFxcInVwXFxcIiA6IFxcXCJkb3duXFxcIik7XFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCIgIEFOIGNvbXBsZXRlOiAlc1xcXFxuXFxcIiwgRklFTERfR0VUKEJNU1JfQU5FR0NPTVBMRVRFLCB2YWwpID9cXG4rXFx0XFx0ICAgXFxcInllc1xcXCIgOiBcXFwibm9cXFwiKTtcXG4rXFxuK1xcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFxuK1xcdGlmIChGSUVMRF9HRVQoREFQODIxMVJfUEtHX0dFTl9FTiwgdmFsKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgRklFTERfR0VUKERBUDgyMTFSX1BLR19DSEtfRU4sIHZhbCkpXFxuK1xcdFxcdHNlcV9wdXRzKHNmLCBcXFwiV0FSTklORzogUGFja2FnZSBHZW5lcmF0aW5nIGVuYWJsZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rREVGSU5FX1NIT1dfQVRUUklCVVRFKGluZm8pO1xcbitcXG4rLyoqXFxuKyAqIHBrZ19nZW5fc2hvdygpIC0gU2hvdyBwYWNrZXQgZ2VuZXJhdG9yIHN0YXR1c1xcbisgKiBAc2Y6IFNlcXVlbmNlIGZpbGUgc3RydWN0dXJlXFxuKyAqIEBkYXRhOiBQcml2YXRlIGRhdGEgKHN0cnVjdCBkYXA4MjExcl9wcml2ICopXFxuKyAqXFxuKyAqIERpc3BsYXlzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvcixcXG4rICogaW5jbHVkaW5nIENSQyBjb3JydXB0aW9uIGFuZCBsb29wYmFjayBzZXR0aW5ncy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgcGtnX2dlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cXHUwMDNlZGV2KTtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEtHQzUpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFxuK1xcdHNlcV9wdXRzKHNmLCBcXFwiUGFja2FnZSBHZW5lcmF0aW5nOiBcXFwiKTtcXG4rXFx0aWYgKEZJRUxEX0dFVChEQVA4MjExUl9QS0dfR0VOX0VOLCB2YWwpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBGSUVMRF9HRVQoREFQODIxMVJfUEtHX0NIS19FTiwgdmFsKSlcXG4rXFx0XFx0c2VxX3B1dHMoc2YsIFxcXCJlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzZXFfcHV0cyhzZiwgXFxcImRpc2FibGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHNlcV9wcmludGYoc2YsIFxcXCJDUkMgY29ycnVwdGlvbiBlbjogJXNcXFxcblxcXCIsIEZJRUxEX0dFVChEQVA4MjExUl9QS0dfQ09SX0NSQywgdmFsKSA/XFxuK1xcdFxcdCAgIFxcXCJlbmFibGVkXFxcIiA6IFxcXCJkaXNhYmxlZFxcXCIpO1xcbitcXG4rXFx0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gdmFsO1xcbitcXG4rXFx0c2VxX3ByaW50ZihzZiwgXFxcIkxvb3BiYWNrIGVuOiAlc1xcXFxuXFxcIiwgRklFTERfR0VUKEJNQ1JfTE9PUEJBQ0ssIHZhbCkgP1xcbitcXHRcXHQgICBcXFwiZW5hYmxlZFxcXCIgOiBcXFwiZGlzYWJsZWRcXFwiKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwa2dfZ2VuX3dyaXRlKCkgLSBFbmFibGUvZGlzYWJsZSBwYWNrZXQgZ2VuZXJhdG9yXFxuKyAqIEBmaWxlOiBGaWxlIHN0cnVjdHVyZVxcbisgKiBAdXNlcl9idWY6IFVzZXIgc3BhY2UgYnVmZmVyXFxuKyAqIEBjb3VudDogQnVmZmVyIHNpemVcXG4rICogQHBwb3M6IEZpbGUgcG9zaXRpb25cXG4rICpcXG4rICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvci5cXG4rICogQWxzbyBjb250cm9scyBsb29wYmFjayBhbmQgQ1JDIGNvcnJ1cHRpb24gdmlhIGRlYnVnZnMgZmxhZ3MuXFxuKyAqXFxuKyAqIE5PVEU6IFdlIGludGVudGlvbmFsbHkgZG8gbm90IHVzZSBnZW5waHlfbG9vcGJhY2soKSBoZXJlLlxcbisgKiBnZW5waHlfbG9vcGJhY2soKSBkb2VzIGEgZnVsbCBCTUNSIG92ZXJ3cml0ZSAobWFzayA9IH4wKSBhbmRcXG4rICogd2FpdHMgdXAgdG8gNTAwIG1zIGZvciBsaW5rIGluIGxvb3BiYWNrIG1vZGUuIFRoaXMgaXMgdG9vXFxuKyAqIGhlYXZ5IGZvciBhIGRpYWdub3N0aWMgcGFja2V0IGdlbmVyYXRvcjpcXG4rICpcXG4rICogLSBJdCBkZXN0cm95cyBhbGwgb3RoZXIgQk1DUiBzdGF0ZSAoc3BlZWQsIGR1cGxleCwgQU4gY29uZmlnKS5cXG4rICogLSBUaGUgNTAwIG1zIGxpbmsgcG9sbCBpcyB1bm5lY2Vzc2FyeTogd2UgYWxyZWFkeSBoYXZlIGEgbGlua1xcbisgKiAgIG9yIGFyZSBkZWxpYmVyYXRlbHkgc2V0dGluZyB1cCBhIHRlc3QgY29uZGl0aW9uLlxcbisgKiAtIFdlIHdhbnQgdG8gbWluaW1pemUgY2hhbmdlcyB0byBCTUNSIGR1cmluZyBkZWJ1Z2dpbmcuXFxuKyAqXFxuKyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIHNzaXplX3QgcGtnX2dlbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuK1xcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuK3tcXG4rXFx0c3RydWN0IHNlcV9maWxlICpzZiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cXHUwMDNlZGV2KTtcXG4rXFx0Ym9vbCBlbjtcXG4rXFx0dTE2IG1hc2ssIHNldCwgc2V0X2JtY3I7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3RydG9ib29sX2Zyb21fdXNlcih1c2VyX2J1ZiwgY291bnQsIFxcdTAwMjZlbik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoZW4pIHtcXG4rXFx0XFx0c2V0ID0gREFQODIxMVJfUEtHX0dFTl9FTiB8IERBUDgyMTFSX1BLR19DSEtfRU4gfCBEQVA4MjExUl9QS0dfUExfNUFBNTtcXG4rXFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VjcmNfY29yKVxcbitcXHRcXHRcXHRzZXQgfD0gREFQODIxMVJfUEtHX0NPUl9DUkM7XFxuK1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlbG9vcGJhY2spXFxuK1xcdFxcdFxcdHNldF9ibWNyID0gQk1DUl9MT09QQkFDSztcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZXRfYm1jciA9IEJNQ1JfQU5FTkFCTEU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNldCA9IERBUDgyMTFSX1BLR19HRU5fTU9ERSB8IERBUDgyMTFSX1BLR19HQVRFX0VOO1xcbitcXHRcXHRzZXRfYm1jciA9IEJNQ1JfQU5FTkFCTEU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9MT09QQkFDSyB8IEJNQ1JfQU5FTkFCTEUsIHNldF9ibWNyKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRtYXNrID0gREFQODIxMVJfUEtHX0dFTl9NQVNLIHwgREFQODIxMVJfUEtHX1BMX01BU0sgfCBEQVA4MjExUl9QS0dfQ09SX0NSQztcXG4rXFx0cmV0ID0gZGFwODIxMXJfbW9kaWZ5X2V4dChwaHlkZXYsIERBUDgyMTFSX1BLR0M1LCBtYXNrLCBzZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0ssIDApO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rREVGSU5FX1NIT1dfU1RPUkVfQVRUUklCVVRFKHBrZ19nZW4pO1xcbitcXG4rLyoqXFxuKyAqIGRhcDgyMTFyX2RlYnVnX2luaXQoKSAtIEluaXRpYWxpemUgZGVidWdmcyBlbnRyaWVzXFxuKyAqIEBwcml2OiBQcml2YXRlIGRyaXZlciBkYXRhXFxuKyAqXFxuKyAqIENyZWF0ZXMgZGVidWdmcyBkaXJlY3RvcnkgYW5kIGZpbGVzIGZvciBQSFkgZGVidWdnaW5nLlxcbisgKiAtIGluZm86IFBIWSBzdGF0dXMgaW5mb3JtYXRpb25cXG4rICogLSBwa2dfZ2VuOiBFbmFibGUvZGlzYWJsZSBnZW5lcmF0b3IgKDEvMClcXG4rICogLSBwa2dfZ2VuX2NyY19jb3I6IEVuYWJsZSBDUkMgY29ycnVwdGlvbiAoWS9OKVxcbisgKiAtIHBrZ19nZW5fbG9vcGJhY2s6IEVuYWJsZSBsb29wYmFjayAoWS9OKVxcbisgKlxcbisgKiBEZWJ1Z2ZzIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RFQlVHX0ZTIGlzIGVuYWJsZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KVxcbit7XFxuK1xcdHByaXYtXFx1MDAzZXJvb3RfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKHByaXYtXFx1MDAzZWRldiksIE5VTEwpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXJvb3RfZGlyKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiaW5mb1xcXCIsIDA0NDQsIHByaXYtXFx1MDAzZXJvb3RfZGlyLCBwcml2LFxcbitcXHRcXHRcXHQgICAgXFx1MDAyNmluZm9fZm9wcyk7XFxuK1xcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInBrZ19nZW5cXFwiLCAwNjQ0LCBwcml2LVxcdTAwM2Vyb290X2RpciwgcHJpdixcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZwa2dfZ2VuX2ZvcHMpO1xcbitcXHRkZWJ1Z2ZzX2NyZWF0ZV9ib29sKFxcXCJwa2dfZ2VuX2NyY19jb3JcXFwiLCAwNjQ0LCBwcml2LVxcdTAwM2Vyb290X2RpcixcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZwcml2LVxcdTAwM2VjcmNfY29yKTtcXG4rXFx0ZGVidWdmc19jcmVhdGVfYm9vbChcXFwicGtnX2dlbl9sb29wYmFja1xcXCIsIDA2NDQsIHByaXYtXFx1MDAzZXJvb3RfZGlyLFxcbitcXHRcXHRcXHQgICAgXFx1MDAyNnByaXYtXFx1MDAzZWxvb3BiYWNrKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRhcDgyMTFyX2RlYnVnX3JlbW92ZSgpIC0gUmVtb3ZlIGRlYnVnZnMgZW50cmllc1xcbisgKiBAcHJpdjogUHJpdmF0ZSBkcml2ZXIgZGF0YVxcbisgKlxcbisgKiBSZWN1cnNpdmVseSByZW1vdmVzIGFsbCBkZWJ1Z2ZzIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBjcmVhdGVkXFxuKyAqIGJ5IGRhcDgyMTFyX2RlYnVnX2luaXQoKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdilcXG4re1xcbitcXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocHJpdi1cXHUwMDNlcm9vdF9kaXIpO1xcbit9XFxuK1xcbisjZWxzZSAvKiAhQ09ORklHX0RFQlVHX0ZTICovXFxuK3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX2luaXQoc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYpIHt9XFxuK3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cXG4rI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqL1xcbitcXG4rLyoqXFxuKyAqIGRhcDgyMTFyX3Byb2JlKCkgLSBQSFkgcHJvYmUgY2FsbGJhY2tcXG4rICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogQ2FsbGVkIHdoZW4gdGhlIFBIWSBpcyBkaXNjb3ZlcmVkLiBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzXFxuKyAqIHByaXZhdGUgZHJpdmVyIGRhdGEgYW5kIGRlYnVnZnMgZW50cmllcy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgZGFwODIxMXJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXY7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwcml2LVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdHBoeWRldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcbitcXHRkYXA4MjExcl9kZWJ1Z19pbml0KHByaXYpO1xcbitcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIkRBUDgyMTFSIFBIWSBwcm9iZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXA4MjExcl9yZW1vdmUoKSAtIFBIWSByZW1vdmUgY2FsbGJhY2tcXG4rICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogQ2FsbGVkIHdoZW4gdGhlIFBIWSBpcyByZW1vdmVkLiBDbGVhbnMgdXAgcHJpdmF0ZSBkcml2ZXIgZGF0YVxcbisgKiBhbmQgZGVidWdmcyBlbnRyaWVzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZGFwODIxMXJfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0ZGFwODIxMXJfZGVidWdfcmVtb3ZlKHBoeWRldi1cXHUwMDNlcHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkYXA4MjExcl9kcml2ZXJbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoREFQODIxMVJfUEhZX0lEKSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJEQVA4MjExUiBHaWdhYml0IEV0aGVybmV0XFxcIixcXG4rXFx0XFx0LnByb2JlICAgICAgICAgID0gZGFwODIxMXJfcHJvYmUsXFxuK1xcdFxcdC5yZW1vdmVcXHRcXHQ9IGRhcDgyMTFyX3JlbW92ZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0PSBkYXA4MjExcl9jb25maWdfaW5pdCxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzXFx0PSBnZW5waHlfcmVhZF9zdGF0dXMsXFxuK1xcdFxcdC5zZXRfbG9vcGJhY2tcXHQ9IGdlbnBoeV9sb29wYmFjayxcXG4rXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSBnZW5waHlfY29uZmlnX2FuZWcsXFxuK1xcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4rXFx0fSxcXG4rfTtcXG4rbW9kdWxlX3BoeV9kcml2ZXIoZGFwODIxMXJfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiREFQODIxMVIgR2lnYWJpdCBFdGhlcm5ldCBQSFkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkFydGVtIFNoaW1rbyBcXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBkYXA4MjExcl90YltdID0ge1xcbitcXHR7IERBUDgyMTFSX1BIWV9JRCwgREFQODIxMVJfUEhZX0lEX01BU0sgfSxcXG4rXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgZGFwODIxMXJfdGIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMjo0OC4wNjcwMzcyMDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NjI2OTE0MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBUDgyMTFSX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhcDgyMTFyX3Byb2JlXCIsXG4gICAgXCJkYXA4MjExcl9jb25maWdfaW5pdFwiLFxuICAgIFwicGtnX2dlbl93cml0ZVwiLFxuICAgIFwiaW5mb19zaG93XCIsXG4gICAgXCJwa2dfZ2VuX3Nob3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKS4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIEV0aGVybmV0IGRldmljZSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgcmVzcG9uZHMgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBEQVA4MjExUiBQSFkgSUQuIE9uY2UgcHJvYmVkLCB0aGUgZHJpdmVyJ3MgYGNvbmZpZ19pbml0YCBhbmQgZGVidWdmcyBvcGVyYXRpb25zIChgaW5mb19zaG93YCwgYHBrZ19nZW5fc2hvd2AsIGBwa2dfZ2VuX3dyaXRlYCkgY2FuIGJlIGV4ZXJjaXNlZCBieSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzM0NmY3MTUwMGI2YTdiYjFiMDVhODNiODIyODE5ZjE0OTY2ZGFkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDE3OjIyOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RhcHUsZGFwODIxMXIueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yMDhhODJmNzc5ZDYxZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWxcbkBAIC0wLDAgKzEsNzggQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kYXB1LGRhcDgyMTFyLnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWVxuK1xuK21haW50YWluZXJzOlxuKyAgLSBBcnRlbSBTaGlta28gXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOiB8XG4rICBUaGUgREFQODIxMVIoSSkgaXMgYSBHaWdhYml0IEV0aGVybmV0IFBIWSB3aXRoIFJHTUlJIGludGVyZmFjZSxcbisgIHN1cHBvcnRpbmcgSUVFRSA4MDIuM2F6IEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXQsIElFRUUgMTU4OCBTeW5jRSxcbisgIGFuZCBhbiBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yIGZvciBkaWFnbm9zdGljcy5cbitcbisgIFNwZWNpZmljYXRpb25zOlxuKyAgICAtIDEwQkFTRS1UZSwgMTAwQkFTRS1UWCwgMTAwMEJBU0UtVFxuKyAgICAtIFJHTUlJIHdpdGggY29uZmlndXJhYmxlIFRYL1JYIGNsb2NrIGRlbGF5cyAoMTUwIHBzIHN0ZXBzLCAwLTIyNTAgcHMpXG4rICAgIC0gSUVFRSA4MDIuM2F6LTIwMTAgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldFxuKyAgICAtIElFRUUgMTU4OCBTeW5jRSBzdXBwb3J0XG4rICAgIC0gSW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvciBhbmQgY2hlY2tlciBmb3IgbGluayBkaWFnbm9zdGljc1xuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwMDguMDExYlxuK1xuKyAgcmVnOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgcngtaW50ZXJuYWwtZGVsYXktcHM6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFJHTUlJIFJYIGNsb2NrIGRlbGF5IGluIHBpY29zZWNvbmRzLiBUaGUgUEhZIHN1cHBvcnRzIDE1MCBwcyBzdGVwc1xuKyAgICAgIGZyb20gMCB0byAyMjUwIHBzLiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byAxOTUwIHBzLiBJZiB0aGVcbisgICAgICByZXF1ZXN0ZWQgdmFsdWUgZG9lcyBub3QgZXhhY3RseSBtYXRjaCBhIHN1cHBvcnRlZCBzdGVwLCB0aGUgZHJpdmVyXG4rICAgICAgc2VsZWN0cyB0aGUgbmVhcmVzdCBzdXBwb3J0ZWQgdmFsdWUgYW5kIGlzc3VlcyBhIHdhcm5pbmcuXG4rICAgIGVudW06IFswLCAxNTAsIDMwMCwgNDUwLCA2MDAsIDc1MCwgOTAwLCAxMDUwLCAxMjAwLCAxMzUwLCAxNTAwLFxuKyAgICAgICAgICAgMTY1MCwgMTgwMCwgMTk1MCwgMjEwMCwgMjI1MF1cbisgICAgZGVmYXVsdDogMTk1MFxuK1xuKyAgdHgtaW50ZXJuYWwtZGVsYXktcHM6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFJHTUlJIFRYIGNsb2NrIGRlbGF5IGluIHBpY29zZWNvbmRzLiBUaGUgUEhZIHN1cHBvcnRzIDE1MCBwcyBzdGVwc1xuKyAgICAgIGZyb20gMCB0byAyMjUwIHBzLiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byAxOTUwIHBzLiBJZiB0aGVcbisgICAgICByZXF1ZXN0ZWQgdmFsdWUgZG9lcyBub3QgZXhhY3RseSBtYXRjaCBhIHN1cHBvcnRlZCBzdGVwLCB0aGUgZHJpdmVyXG4rICAgICAgc2VsZWN0cyB0aGUgbmVhcmVzdCBzdXBwb3J0ZWQgdmFsdWUgYW5kIGlzc3VlcyBhIHdhcm5pbmcuXG4rICAgIGVudW06IFswLCAxNTAsIDMwMCwgNDUwLCA2MDAsIDc1MCwgOTAwLCAxMDUwLCAxMjAwLCAxMzUwLCAxNTAwLFxuKyAgICAgICAgICAgMTY1MCwgMTgwMCwgMTk1MCwgMjEwMCwgMjI1MF1cbisgICAgZGVmYXVsdDogMTk1MFxuK1xuKyAgdHgtaW52ZXJ0ZWQtY2xrOlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9mbGFnXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIElmIHByZXNlbnQsIHRoZSBSR01JSSBUWCBjbG9jayB0byB0aGUgTUFDIGlzIGludmVydGVkICgxODAgZGVncmVlXG4rICAgICAgcGhhc2Ugc2hpZnQgcmVsYXRpdmUgdG8gdGhlIGRhdGEgbGluZXMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljXG4rICAgICAgZXh0ZW5zaW9uIGZvciBib2FyZHMgd2hlcmUgUENCIHRyYWNlIGxlbmd0aCBvciBNQUMgcmVxdWlyZW1lbnRzXG4rICAgICAgbmVjZXNzaXRhdGUgY2xvY2sgaW52ZXJzaW9uLiBPbmx5IHVzZSB0aGlzIHByb3BlcnR5IGFmdGVyIGhhcmR3YXJlXG4rICAgICAgc2lnbmFsIGludGVncml0eSB2YWxpZGF0aW9uLlxuK1xuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbitleGFtcGxlczpcbisgIC0gfFxuKyAgICBtZGlvIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBoeUAxIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgcngtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxMDUwXHUwMDNlO1xuKyAgICAgICAgICAgIHR4LWludGVybmFsLWRlbGF5LXBzID0gXHUwMDNjMTE1MFx1MDAzZTtcbisgICAgICAgICAgICB0eC1pbnZlcnRlZC1jbGs7XG4rICAgICAgICB9O1xuKyAgICB9O1xuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbmluZGV4IDA5OWYyNWRjZWFiYmM3Li40NTc2ZjcwN2FjOTQ0NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTIzNyw2ICsyMzcsMTYgQEAgY29uZmlnIERBVklDT01fUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBkbTkxNjFlIGFuZCBkbTkxMzFcbiBcbitjb25maWcgREFQODIxMVJfUEhZXG4rXHR0cmlzdGF0ZSBcIkRBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWVwiXG4rXHRkZXBlbmRzIG9uIE9GXG4rXHRoZWxwXG4rXHQgIFN1cHBvcnQgZm9yIHRoZSBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkgR2lnYWJpdCBFdGhlcm5ldCBQSFkuXG4rXHQgIFRoaXMgUEhZIGlzIGRlc2lnbmVkIGZvciBlbnRlcnByaXNlIGFuZCBpbmR1c3RyaWFsIG5ldHdvcmtpbmdcbitcdCAgYXBwbGljYXRpb25zLCBzdXBwb3J0aW5nIDEwLzEwMC8xMDAwIE1icHMgb3BlcmF0aW9uLlxuK1x0ICBSR01JSSB3aXRoOiBjb25maWd1cmFibGUgVFgvUlggY2xvY2sgZGVsYXlzLCBvcHRpb25hbCBmbGFnIHRvIGVuYWJsZVxuK1x0ICAxODAtZGVncmVlIFRYIGNsb2NrIHBoYXNlIHNoaWZ0IGFuZCBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yLlxuK1xuIGNvbmZpZyBJQ1BMVVNfUEhZXG4gXHR0cmlzdGF0ZSBcIklDUGx1cyBQSFlzXCJcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IGRlNjYwYWU5NDk0NTNkLi5hZDM1NzMzZWI0YmI2MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5AQCAtNTMsNiArNTMsNyBAQCBvYmotJChDT05GSUdfQlJPQURDT01fUEhZKVx0Kz0gYnJvYWRjb20ub1xuIG9iai0kKENPTkZJR19DSUNBREFfUEhZKVx0Kz0gY2ljYWRhLm9cbiBvYmotJChDT05GSUdfQ09SVElOQV9QSFkpXHQrPSBjb3J0aW5hLm9cbiBvYmotJChDT05GSUdfREFWSUNPTV9QSFkpXHQrPSBkYXZpY29tLm9cbitvYmotJChDT05GSUdfREFQODIxMVJfUEhZKVx0Kz0gZGFwODIxMXIub1xuIG9iai0kKENPTkZJR19EUDgzNjQwX1BIWSlcdCs9IGRwODM2NDAub1xuIG9iai0kKENPTkZJR19EUDgzODIyX1BIWSlcdCs9IGRwODM4MjIub1xuIG9iai0kKENPTkZJR19EUDgzODQ4X1BIWSlcdCs9IGRwODM4NDgub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jIGIvZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmQ2OTViYzQ5NTNhMmJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jXG5AQCAtMCwwICsxLDU0NCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUExcbisvKlxuKyAqIERyaXZlciBmb3IgdGhlIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKSBHaWdhYml0IEV0aGVybmV0IFBIWS5cbisgKlxuKyAqIFNwZWNpZmljYXRpb25zOlxuKyAqICAgLSBJRUVFIDgwMi4zIDEwQkFTRS1UZSwgMTAwQkFTRS1UWCwgMTAwMEJBU0UtVFxuKyAqICAgLSBJRUVFIDgwMi4zYXotMjAxMCBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0XG4rICogICAtIElFRUUgMTU4OCBTeW5jRSBzdXBwb3J0XG4rICogICAtIFJHTUlJXG4rICogICAtIFBhY2thZ2UgR2VuZXJhdG9yIGZvciBkaWFnbm9zdGljc1xuKyAqXG4rICogQXV0aG9yOiBBcnRlbSBTaGlta28gXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21paS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuK1xuKyNkZWZpbmUgREFQODIxMVJfUEhZX0lEXHRcdFx0MHgwMDA4MDExQlxuKyNkZWZpbmUgREFQODIxMVJfUEhZX0lEX01BU0tcdFx0MHhGRkZGRkZGRlxuK1xuKyNkZWZpbmUgREFQODIxMVJfRVhUX0FERFx0XHQweDFFXG4rI2RlZmluZSBEQVA4MjExUl9FWFRfREFUQVx0XHQweDFGXG4rXG4rI2RlZmluZSBEQVA4MjExUl9QS0dDNVx0XHRcdDB4QTBcbisjZGVmaW5lIERBUDgyMTFSX1BLR19QTF9NQVNLXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIERBUDgyMTFSX1BLR19QTF81QUE1XHRcdEJJVCgxKVxuKyNkZWZpbmUgREFQODIxMVJfUEtHX0NPUl9DUkNcdFx0QklUKDIpXG4rI2RlZmluZSBEQVA4MjExUl9QS0dfR0VOX0VOXHRcdEJJVCgxMilcbisjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTU9ERVx0XHRCSVQoMTMpXG4rI2RlZmluZSBEQVA4MjExUl9QS0dfR0FURV9FTlx0XHRCSVQoMTQpXG4rI2RlZmluZSBEQVA4MjExUl9QS0dfQ0hLX0VOXHRcdEJJVCgxNSlcbisjZGVmaW5lIERBUDgyMTFSX1BLR19HRU5fTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbitcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9DT05cdFx0MHhBMDAxXG4rI2RlZmluZSBEQVA4MjExUl9QSFlfTERPX0VOXHRcdEJJVCg2KVxuKyNkZWZpbmUgREFQODIxMVJfUEhZX1JYX0RMWVx0XHRCSVQoOClcbisjZGVmaW5lIERBUDgyMTFSX1BIWV9HQVRFX1JYX0NMS1x0QklUKDkpXG4rI2RlZmluZSBEQVA4MjExUl9QSFlfU1dfUlNUXHRcdEJJVCgxNSlcbitcbisjZGVmaW5lIERBUDgyMTFSX1JHTUlJX0NPTlx0XHQweEEwMDNcbisjZGVmaW5lIERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLXHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTS1x0R0VOTUFTSygxMywgMTApXG4rI2RlZmluZSBEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJUXHRCSVQoMTQpXG4rXG4rLyogRGVmYXVsdCBSR01JSSBkZWxheSAoMS45NW5zID09IDEzICogMTUwKXBzKSAqL1xuKyNkZWZpbmUgREFQODIxMVJfREVGQVVMVF9ERUxBWV9QU1x0MTk1MFxuK1xuK3N0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcge1xuK1x0dTMyIHBzO1xuK1x0dTggc2VsO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcgZGVsYXlfY29uZmlnW10gPSB7XG4rXHR7ICAgMCwgMH0sXG4rXHR7IDE1MCwgMX0sXG4rXHR7IDMwMCwgMn0sXG4rXHR7IDQ1MCwgM30sXG4rXHR7IDYwMCwgNH0sXG4rXHR7IDc1MCwgNX0sXG4rXHR7IDkwMCwgNn0sXG4rXHR7MTA1MCwgN30sXG4rXHR7MTIwMCwgOH0sXG4rXHR7MTM1MCwgOX0sXG4rXHR7MTUwMCwgMTB9LFxuK1x0ezE2NTAsIDExfSxcbitcdHsxODAwLCAxMn0sXG4rXHR7MTk1MCwgMTN9LFxuK1x0ezIxMDAsIDE0fSxcbitcdHsyMjUwLCAxNX0sXG4rfTtcbitcbisjZGVmaW5lIERBUDgyMTFSX0RFTEFZX0NPVU5UXHRBUlJBWV9TSVpFKGRlbGF5X2NvbmZpZylcbitcbitzdHJ1Y3QgZGFwODIxMXJfcHJpdiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0ZTKVxuK1x0c3RydWN0IGRlbnRyeSAqcm9vdF9kaXI7XG4rXHRib29sIGNyY19jb3I7XG4rXHRib29sIGxvb3BiYWNrO1xuKyNlbmRpZlxuK307XG4rXG4rLyoqXG4rICogZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKCkgLSBDb252ZXJ0IHBpY29zZWNvbmRzIHRvIHJlZ2lzdGVyIHZhbHVlXG4rICogQHBzOiBEZWxheSBpbiBwaWNvc2Vjb25kcyAoMC0yMjUwKVxuKyAqXG4rICogQ29udmVydHMgYSBkZWxheSB2YWx1ZSBpbiBwaWNvc2Vjb25kcyB0byB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlciB2YWx1ZVxuKyAqIGZvciBSR01JSSBkZWxheSBjb25maWd1cmF0aW9uLiBUaGUgUEhZIHN1cHBvcnRzIDE1MHBzIHN0ZXBzIGZyb20gMCB0byAyMjUwcHMuXG4rICpcbisgKiBSZXR1cm46IFJlZ2lzdGVyIHZhbHVlICgwLTE1KVxuKyAqL1xuK3N0YXRpYyB1MTYgZGFwODIxMXJfZGVsYXlfcHNfdG9fc2VsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwcylcbit7XG4rXHRpbnQgaSwgYmVzdF9pZHggPSAwO1xuK1x0dTMyIGJlc3RfZGlmZiA9IFVJTlRfTUFYLCBkaWZmID0gMDtcbitcbitcdGlmICghcHMpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFQODIxMVJfREVMQVlfQ09VTlQ7IGkrKykge1xuK1x0XHRkaWZmID0gYWJzKHBzIC0gZGVsYXlfY29uZmlnW2ldLnBzKTtcbitcbitcdFx0aWYgKGRpZmYgXHUwMDNjIGJlc3RfZGlmZikge1xuK1x0XHRcdGJlc3RfZGlmZiA9IGRpZmY7XG4rXHRcdFx0YmVzdF9pZHggPSBpO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghZGlmZilcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmIChiZXN0X2RpZmYpXG4rXHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCJEZWxheSAldSBwcyBub3QgZm91bmQsIHVzaW5nIGNsb3Nlc3QgJXUgcHNcXG5cIiwgcHMsXG4rXHRcdFx0ICAgIGRlbGF5X2NvbmZpZ1tiZXN0X2lkeF0ucHMpO1xuK1xuK1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiRGVsYXkgcHMgaWR4OiAldVxcblwiLCBkZWxheV9jb25maWdbYmVzdF9pZHhdLnNlbCk7XG4rXG4rXHRyZXR1cm4gZGVsYXlfY29uZmlnW2Jlc3RfaWR4XS5zZWw7XG4rfVxuK1xuKy8qKlxuKyAqIGRhcDgyMTFyX3JlYWRfZXh0KCkgLSBSZWFkIGV4dGVuZGVkIHJlZ2lzdGVyXG4rICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcbisgKiBAcmVnOiBFeHRlbmRlZCByZWdpc3RlciBhZGRyZXNzXG4rICpcbisgKiBSZWFkcyBhIFBIWSBleHRlbmRlZCByZWdpc3RlciB1c2luZyB0aGUgaW5kaXJlY3QgYWNjZXNzIG1ldGhvZC5cbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgTURJTyBidXMgbG9jay5cbisgKlxuKyAqIFJldHVybjogUmVnaXN0ZXIgdmFsdWUgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgZGFwODIxMXJfcmVhZF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZylcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgREFQODIxMVJfRVhUX0FERCwgcmVnKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIERBUDgyMTFSX0VYVF9EQVRBKTtcbitvdXQ6XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiBkYXA4MjExcl9tb2RpZnlfZXh0KCkgLSBNb2RpZnkgZXh0ZW5kZWQgcmVnaXN0ZXIgYml0c1xuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4rICogQHJlZzogRXh0ZW5kZWQgcmVnaXN0ZXIgYWRkcmVzc1xuKyAqIEBtYXNrOiBCaXQgbWFzayBvZiBiaXRzIHRvIGNsZWFyXG4rICogQHNldDogQml0IG1hc2sgb2YgYml0cyB0byBzZXRcbisgKlxuKyAqIE1vZGlmaWVzIGEgUEhZIGV4dGVuZGVkIHJlZ2lzdGVyIHVzaW5nIHRoZSBpbmRpcmVjdCBhY2Nlc3MgbWV0aG9kLlxuKyAqIE5ldyB2YWx1ZSA9IChvbGQgdmFsdWUgXHUwMDI2IH5tYXNrKSB8IHNldC5cbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgTURJTyBidXMgbG9jay5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCBkYXA4MjExcl9tb2RpZnlfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcsIHUxNiBtYXNrLCB1MTYgc2V0KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBEQVA4MjExUl9FWFRfQURELCByZWcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBEQVA4MjExUl9FWFRfREFUQSwgbWFzaywgc2V0KTtcbitvdXQ6XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoKSAtIEdldCBSR01JSSBkZWxheSBmcm9tIGRldmljZSB0cmVlXG4rICogQHBoeWRldjogUEhZIGRldmljZSBzdHJ1Y3R1cmVcbisgKiBAcHJvcF9uYW1lOiBEZXZpY2UgdHJlZSBwcm9wZXJ0eSBuYW1lXG4rICpcbisgKiBSZWFkcyB0aGUgUkdNSUkgZGVsYXkgZnJvbSB0aGUgZGV2aWNlIHRyZWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3RcbisgKiBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGRlbGF5ICgxOTUwcHMpIGlzIHVzZWQuXG4rICpcbisgKiBSZXR1cm46IFJlZ2lzdGVyIHZhbHVlICgwLTE1KSBvciBkZWZhdWx0IGlmIHByb3BlcnR5IG5vdCBmb3VuZFxuKyAqL1xuK3N0YXRpYyB1MzIgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKnByb3BfbmFtZSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHRpbnQgcmV0O1xuK1x0dTMyIHBzID0gMDtcbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBwcm9wX25hbWUsIFx1MDAyNnBzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiVXNpbmcgZGVmYXVsdCBkZWxheSAoJXVwcylcXG5cIiwgREFQODIxMVJfREVGQVVMVF9ERUxBWV9QUyk7XG4rXHRcdHBzID0gREFQODIxMVJfREVGQVVMVF9ERUxBWV9QUztcbitcdH1cbitcbitcdHJldHVybiBkYXA4MjExcl9kZWxheV9wc190b19zZWwocGh5ZGV2LCBwcyk7XG4rfVxuK1xuKy8qKlxuKyAqIGRhcDgyMTFyX2NvbmZpZ19pbml0KCkgLSBJbml0aWFsaXplIFBIWVxuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4rICpcbisgKiBDb25maWd1cmVzIHRoZSBQSFkgZHVyaW5nIGluaXRpYWxpemF0aW9uOlxuKyAqIC0gUkdNSUkgZGVsYXlzIGJhc2VkIG9uIGludGVyZmFjZSBtb2RlXG4rICogLSBUWCBjbG9jayBpbnZlcnRpb25cbisgKiAtIFNvZnR3YXJlIHJlc2V0IHRvIGFwcGx5IHNldHRpbmdzXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgZGFwODIxMXJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeWRldl9ub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHR1MTYgbWFzayA9IDAsIHNldCA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c3dpdGNoIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKSB7XG4rXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOlxuK1x0XHRzZXQgPSBGSUVMRF9QUkVQKERBUDgyMTFSX1JHTUlJX1JYX0RFTF9NQVNLLFxuK1x0XHRcdFx0IGRhcDgyMTFyX2dldF9yZ21paV9kZWxheShwaHlkZXYsIFwicngtaW50ZXJuYWwtZGVsYXktcHNcIikpO1xuK1x0XHRtYXNrID0gREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0s7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ6XG4rXHRcdHNldCA9IEZJRUxEX1BSRVAoREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0ssXG4rXHRcdFx0XHQgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHBoeWRldiwgXCJyeC1pbnRlcm5hbC1kZWxheS1wc1wiKSk7XG4rXHRcdG1hc2sgPSBEQVA4MjExUl9SR01JSV9SWF9ERUxfTUFTSztcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEOlxuK1x0XHRzZXQgfD0gRklFTERfUFJFUChEQVA4MjExUl9SR01JSV9UWF9ERUxfTUFTSyxcbitcdFx0XHRcdCAgZGFwODIxMXJfZ2V0X3JnbWlpX2RlbGF5KHBoeWRldiwgXCJ0eC1pbnRlcm5hbC1kZWxheS1wc1wiKSk7XG4rXHRcdG1hc2sgfD0gREFQODIxMVJfUkdNSUlfVFhfREVMX01BU0s7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiVW5zdXBwb3J0ZWQgaW50ZXJmYWNlOiAlZFxcblwiLFxuK1x0XHRcdCAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGh5ZGV2X25vZGUsIFwidHgtdXNlLWludmVydGVkLWNsa1wiKSlcbitcdFx0c2V0IHw9IERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQ7XG4rXG4rXHRtYXNrIHw9IERBUDgyMTFSX1JHTUlJX0NMS19JTlZFUlQ7XG4rXG4rXHRyZXQgPSBkYXA4MjExcl9tb2RpZnlfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTiwgREFQODIxMVJfUEhZX1NXX1JTVCwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogV2FpdCBmb3IgcmVzZXQgc2VsZi1jbGVhciAqL1xuK1x0ZnNsZWVwKDIwMCk7XG4rXG4rXHRyZXQgPSBkYXA4MjExcl9tb2RpZnlfZXh0KHBoeWRldiwgREFQODIxMVJfUkdNSUlfQ09OLCBtYXNrLCBzZXQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBoeWRldl9kYmcocGh5ZGV2LCBcIlJHTUlJIGNvbmZpZ3VyZWQ6IGludGVyZmFjZT0lZCwgbWFzaz0weCUwNHgsIHNldD0weCUwNHhcXG5cIixcbitcdFx0ICAgcGh5ZGV2LVx1MDAzZWludGVyZmFjZSwgbWFzaywgc2V0KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfRlMpXG4rXG4rLyoqXG4rICogaW5mb19zaG93KCkgLSBTaG93IFBIWSBzdGF0dXMgaW5mb3JtYXRpb25cbisgKiBAc2Y6IFNlcXVlbmNlIGZpbGUgc3RydWN0dXJlXG4rICogQGRhdGE6IFByaXZhdGUgZGF0YSAoc3RydWN0IGRhcDgyMTFyX3ByaXYgKilcbisgKlxuKyAqIERpc3BsYXlzIFBIWSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIGZvciBkZWJ1Z2dpbmcuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYgPSBzZi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UocHJpdi1cdTAwM2VkZXYpO1xuK1x0aW50IHZhbDtcbitcbitcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUEhZX0NPTik7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0c2VxX3ByaW50ZihzZiwgXCJQSFlfQ09OOiAweCUwNHhcXG5cIiwgdmFsKTtcbitcdHNlcV9wcmludGYoc2YsIFwiICBMRE8gZW5hYmxlZDogJXNcXG5cIiwgRklFTERfR0VUKERBUDgyMTFSX1BIWV9MRE9fRU4sIHZhbCkgID9cbitcdFx0ICAgXCJ5ZXNcIiA6IFwibm9cIik7XG4rXHRzZXFfcHJpbnRmKHNmLCBcIiAgUlggZGx5IGVuOiAlc1xcblwiLCBGSUVMRF9HRVQoREFQODIxMVJfUEhZX1JYX0RMWSwgdmFsKSA/XG4rXHRcdCAgIFwieWVzXCIgOiBcIm5vXCIpO1xuK1x0c2VxX3ByaW50ZihzZiwgXCIgIFJYIGNrbCBnYXRpbmc6ICVzXFxuXCIsIEZJRUxEX0dFVChEQVA4MjExUl9QSFlfR0FURV9SWF9DTEssIHZhbCkgP1xuK1x0XHQgICBcInllc1wiIDogXCJub1wiKTtcbitcbitcdHZhbCA9IGRhcDgyMTFyX3JlYWRfZXh0KHBoeWRldiwgREFQODIxMVJfUkdNSUlfQ09OKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiB2YWw7XG4rXG4rXHRzZXFfcHJpbnRmKHNmLCBcIlJHTUlJX0NPTjogMHglMDR4XFxuXCIsIHZhbCk7XG4rXHRzZXFfcHJpbnRmKHNmLCBcIiAgVFggZGVsYXkgaWR4OiAlbHhcXG5cIiwgRklFTERfR0VUKERBUDgyMTFSX1JHTUlJX1RYX0RFTF9NQVNLLCB2YWwpKTtcbitcdHNlcV9wcmludGYoc2YsIFwiICBSWCBkZWxheSBpZHg6ICVseFxcblwiLCBGSUVMRF9HRVQoREFQODIxMVJfUkdNSUlfUlhfREVMX01BU0ssIHZhbCkpO1xuK1x0c2VxX3ByaW50ZihzZiwgXCIgIENMSyBpbnZlcnQ6ICVzXFxuXCIsIEZJRUxEX0dFVChEQVA4MjExUl9SR01JSV9DTEtfSU5WRVJULCB2YWwpID9cbitcdFx0ICAgXCJ5ZXNcIiA6IFwibm9cIik7XG4rXG4rXHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTVNSKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiB2YWw7XG4rXG4rXHRzZXFfcHJpbnRmKHNmLCBcIkJNU1I6IDB4JTA0eFxcblwiLCB2YWwpO1xuK1x0c2VxX3ByaW50ZihzZiwgXCIgIExpbms6ICVzXFxuXCIsIEZJRUxEX0dFVChCTVNSX0xTVEFUVVMsIHZhbCkgP1xuK1x0XHQgICBcInVwXCIgOiBcImRvd25cIik7XG4rXHRzZXFfcHJpbnRmKHNmLCBcIiAgQU4gY29tcGxldGU6ICVzXFxuXCIsIEZJRUxEX0dFVChCTVNSX0FORUdDT01QTEVURSwgdmFsKSA/XG4rXHRcdCAgIFwieWVzXCIgOiBcIm5vXCIpO1xuK1xuK1x0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0aWYgKEZJRUxEX0dFVChEQVA4MjExUl9QS0dfR0VOX0VOLCB2YWwpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIEZJRUxEX0dFVChEQVA4MjExUl9QS0dfQ0hLX0VOLCB2YWwpKVxuK1x0XHRzZXFfcHV0cyhzZiwgXCJXQVJOSU5HOiBQYWNrYWdlIEdlbmVyYXRpbmcgZW5hYmxlZFxcblwiKTtcbitcbitcdHJldHVybiAwO1xuK31cbitERUZJTkVfU0hPV19BVFRSSUJVVEUoaW5mbyk7XG4rXG4rLyoqXG4rICogcGtnX2dlbl9zaG93KCkgLSBTaG93IHBhY2tldCBnZW5lcmF0b3Igc3RhdHVzXG4rICogQHNmOiBTZXF1ZW5jZSBmaWxlIHN0cnVjdHVyZVxuKyAqIEBkYXRhOiBQcml2YXRlIGRhdGEgKHN0cnVjdCBkYXA4MjExcl9wcml2ICopXG4rICpcbisgKiBEaXNwbGF5cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IsXG4rICogaW5jbHVkaW5nIENSQyBjb3JydXB0aW9uIGFuZCBsb29wYmFjayBzZXR0aW5ncy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCBwa2dfZ2VuX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdiA9IHNmLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVx1MDAzZWRldik7XG4rXHRpbnQgdmFsO1xuK1xuK1x0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0c2VxX3B1dHMoc2YsIFwiUGFja2FnZSBHZW5lcmF0aW5nOiBcIik7XG4rXHRpZiAoRklFTERfR0VUKERBUDgyMTFSX1BLR19HRU5fRU4sIHZhbCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgRklFTERfR0VUKERBUDgyMTFSX1BLR19DSEtfRU4sIHZhbCkpXG4rXHRcdHNlcV9wdXRzKHNmLCBcImVuYWJsZWRcXG5cIik7XG4rXHRlbHNlXG4rXHRcdHNlcV9wdXRzKHNmLCBcImRpc2FibGVkXFxuXCIpO1xuK1xuK1x0c2VxX3ByaW50ZihzZiwgXCJDUkMgY29ycnVwdGlvbiBlbjogJXNcXG5cIiwgRklFTERfR0VUKERBUDgyMTFSX1BLR19DT1JfQ1JDLCB2YWwpID9cbitcdFx0ICAgXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCIpO1xuK1xuK1x0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0c2VxX3ByaW50ZihzZiwgXCJMb29wYmFjayBlbjogJXNcXG5cIiwgRklFTERfR0VUKEJNQ1JfTE9PUEJBQ0ssIHZhbCkgP1xuK1x0XHQgICBcImVuYWJsZWRcIiA6IFwiZGlzYWJsZWRcIik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogcGtnX2dlbl93cml0ZSgpIC0gRW5hYmxlL2Rpc2FibGUgcGFja2V0IGdlbmVyYXRvclxuKyAqIEBmaWxlOiBGaWxlIHN0cnVjdHVyZVxuKyAqIEB1c2VyX2J1ZjogVXNlciBzcGFjZSBidWZmZXJcbisgKiBAY291bnQ6IEJ1ZmZlciBzaXplXG4rICogQHBwb3M6IEZpbGUgcG9zaXRpb25cbisgKlxuKyAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGludGVybmFsIHBhY2tldCBnZW5lcmF0b3IuXG4rICogQWxzbyBjb250cm9scyBsb29wYmFjayBhbmQgQ1JDIGNvcnJ1cHRpb24gdmlhIGRlYnVnZnMgZmxhZ3MuXG4rICpcbisgKiBOT1RFOiBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCB1c2UgZ2VucGh5X2xvb3BiYWNrKCkgaGVyZS5cbisgKiBnZW5waHlfbG9vcGJhY2soKSBkb2VzIGEgZnVsbCBCTUNSIG92ZXJ3cml0ZSAobWFzayA9IH4wKSBhbmRcbisgKiB3YWl0cyB1cCB0byA1MDAgbXMgZm9yIGxpbmsgaW4gbG9vcGJhY2sgbW9kZS4gVGhpcyBpcyB0b29cbisgKiBoZWF2eSBmb3IgYSBkaWFnbm9zdGljIHBhY2tldCBnZW5lcmF0b3I6XG4rICpcbisgKiAtIEl0IGRlc3Ryb3lzIGFsbCBvdGhlciBCTUNSIHN0YXRlIChzcGVlZCwgZHVwbGV4LCBBTiBjb25maWcpLlxuKyAqIC0gVGhlIDUwMCBtcyBsaW5rIHBvbGwgaXMgdW5uZWNlc3Nhcnk6IHdlIGFscmVhZHkgaGF2ZSBhIGxpbmtcbisgKiAgIG9yIGFyZSBkZWxpYmVyYXRlbHkgc2V0dGluZyB1cCBhIHRlc3QgY29uZGl0aW9uLlxuKyAqIC0gV2Ugd2FudCB0byBtaW5pbWl6ZSBjaGFuZ2VzIHRvIEJNQ1IgZHVyaW5nIGRlYnVnZ2luZy5cbisgKlxuKyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IHBrZ19nZW5fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4rXHRcdFx0ICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXG4rXHRcdFx0ICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbit7XG4rXHRzdHJ1Y3Qgc2VxX2ZpbGUgKnNmID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdiA9IHNmLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVx1MDAzZWRldik7XG4rXHRib29sIGVuO1xuK1x0dTE2IG1hc2ssIHNldCwgc2V0X2JtY3I7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0ga3N0cnRvYm9vbF9mcm9tX3VzZXIodXNlcl9idWYsIGNvdW50LCBcdTAwMjZlbik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGVuKSB7XG4rXHRcdHNldCA9IERBUDgyMTFSX1BLR19HRU5fRU4gfCBEQVA4MjExUl9QS0dfQ0hLX0VOIHwgREFQODIxMVJfUEtHX1BMXzVBQTU7XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZWNyY19jb3IpXG4rXHRcdFx0c2V0IHw9IERBUDgyMTFSX1BLR19DT1JfQ1JDO1xuK1xuK1x0XHRpZiAocHJpdi1cdTAwM2Vsb29wYmFjaylcbitcdFx0XHRzZXRfYm1jciA9IEJNQ1JfTE9PUEJBQ0s7XG4rXHRcdGVsc2VcbitcdFx0XHRzZXRfYm1jciA9IEJNQ1JfQU5FTkFCTEU7XG4rXHR9IGVsc2Uge1xuK1x0XHRzZXQgPSBEQVA4MjExUl9QS0dfR0VOX01PREUgfCBEQVA4MjExUl9QS0dfR0FURV9FTjtcbitcdFx0c2V0X2JtY3IgPSBCTUNSX0FORU5BQkxFO1xuK1x0fVxuK1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLIHwgQk1DUl9BTkVOQUJMRSwgc2V0X2JtY3IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdG1hc2sgPSBEQVA4MjExUl9QS0dfR0VOX01BU0sgfCBEQVA4MjExUl9QS0dfUExfTUFTSyB8IERBUDgyMTFSX1BLR19DT1JfQ1JDO1xuK1x0cmV0ID0gZGFwODIxMXJfbW9kaWZ5X2V4dChwaHlkZXYsIERBUDgyMTFSX1BLR0M1LCBtYXNrLCBzZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0ssIDApO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIGNvdW50O1xuK31cbitERUZJTkVfU0hPV19TVE9SRV9BVFRSSUJVVEUocGtnX2dlbik7XG4rXG4rLyoqXG4rICogZGFwODIxMXJfZGVidWdfaW5pdCgpIC0gSW5pdGlhbGl6ZSBkZWJ1Z2ZzIGVudHJpZXNcbisgKiBAcHJpdjogUHJpdmF0ZSBkcml2ZXIgZGF0YVxuKyAqXG4rICogQ3JlYXRlcyBkZWJ1Z2ZzIGRpcmVjdG9yeSBhbmQgZmlsZXMgZm9yIFBIWSBkZWJ1Z2dpbmcuXG4rICogLSBpbmZvOiBQSFkgc3RhdHVzIGluZm9ybWF0aW9uXG4rICogLSBwa2dfZ2VuOiBFbmFibGUvZGlzYWJsZSBnZW5lcmF0b3IgKDEvMClcbisgKiAtIHBrZ19nZW5fY3JjX2NvcjogRW5hYmxlIENSQyBjb3JydXB0aW9uIChZL04pXG4rICogLSBwa2dfZ2VuX2xvb3BiYWNrOiBFbmFibGUgbG9vcGJhY2sgKFkvTilcbisgKlxuKyAqIERlYnVnZnMgaXMgb25seSBhdmFpbGFibGUgd2hlbiBDT05GSUdfREVCVUdfRlMgaXMgZW5hYmxlZC5cbisgKi9cbitzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KVxuK3tcbitcdHByaXYtXHUwMDNlcm9vdF9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUocHJpdi1cdTAwM2VkZXYpLCBOVUxMKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2Vyb290X2RpcikpXG4rXHRcdHJldHVybjtcbitcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJpbmZvXCIsIDA0NDQsIHByaXYtXHUwMDNlcm9vdF9kaXIsIHByaXYsXG4rXHRcdFx0ICAgIFx1MDAyNmluZm9fZm9wcyk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwicGtnX2dlblwiLCAwNjQ0LCBwcml2LVx1MDAzZXJvb3RfZGlyLCBwcml2LFxuK1x0XHRcdCAgICBcdTAwMjZwa2dfZ2VuX2ZvcHMpO1xuK1x0ZGVidWdmc19jcmVhdGVfYm9vbChcInBrZ19nZW5fY3JjX2NvclwiLCAwNjQ0LCBwcml2LVx1MDAzZXJvb3RfZGlyLFxuK1x0XHRcdCAgICBcdTAwMjZwcml2LVx1MDAzZWNyY19jb3IpO1xuK1x0ZGVidWdmc19jcmVhdGVfYm9vbChcInBrZ19nZW5fbG9vcGJhY2tcIiwgMDY0NCwgcHJpdi1cdTAwM2Vyb290X2RpcixcbitcdFx0XHQgICAgXHUwMDI2cHJpdi1cdTAwM2Vsb29wYmFjayk7XG4rfVxuK1xuKy8qKlxuKyAqIGRhcDgyMTFyX2RlYnVnX3JlbW92ZSgpIC0gUmVtb3ZlIGRlYnVnZnMgZW50cmllc1xuKyAqIEBwcml2OiBQcml2YXRlIGRyaXZlciBkYXRhXG4rICpcbisgKiBSZWN1cnNpdmVseSByZW1vdmVzIGFsbCBkZWJ1Z2ZzIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBjcmVhdGVkXG4rICogYnkgZGFwODIxMXJfZGVidWdfaW5pdCgpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdilcbit7XG4rXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocHJpdi1cdTAwM2Vyb290X2Rpcik7XG4rfVxuK1xuKyNlbHNlIC8qICFDT05GSUdfREVCVUdfRlMgKi9cbitzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19pbml0KHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2KSB7fVxuK3N0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cbisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovXG4rXG4rLyoqXG4rICogZGFwODIxMXJfcHJvYmUoKSAtIFBIWSBwcm9iZSBjYWxsYmFja1xuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4rICpcbisgKiBDYWxsZWQgd2hlbiB0aGUgUEhZIGlzIGRpc2NvdmVyZWQuIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXNcbisgKiBwcml2YXRlIGRyaXZlciBkYXRhIGFuZCBkZWJ1Z2ZzIGVudHJpZXMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgZGFwODIxMXJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdjtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwcml2LVx1MDAzZWRldiA9IGRldjtcbitcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdGRhcDgyMTFyX2RlYnVnX2luaXQocHJpdik7XG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCJEQVA4MjExUiBQSFkgcHJvYmVkXFxuXCIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIGRhcDgyMTFyX3JlbW92ZSgpIC0gUEhZIHJlbW92ZSBjYWxsYmFja1xuKyAqIEBwaHlkZXY6IFBIWSBkZXZpY2Ugc3RydWN0dXJlXG4rICpcbisgKiBDYWxsZWQgd2hlbiB0aGUgUEhZIGlzIHJlbW92ZWQuIENsZWFucyB1cCBwcml2YXRlIGRyaXZlciBkYXRhXG4rICogYW5kIGRlYnVnZnMgZW50cmllcy5cbisgKi9cbitzdGF0aWMgdm9pZCBkYXA4MjExcl9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRkYXA4MjExcl9kZWJ1Z19yZW1vdmUocGh5ZGV2LVx1MDAzZXByaXYpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZGFwODIxMXJfZHJpdmVyW10gPSB7XG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChEQVA4MjExUl9QSFlfSUQpLFxuK1x0XHQubmFtZVx0XHQ9IFwiREFQODIxMVIgR2lnYWJpdCBFdGhlcm5ldFwiLFxuK1x0XHQucHJvYmUgICAgICAgICAgPSBkYXA4MjExcl9wcm9iZSxcbitcdFx0LnJlbW92ZVx0XHQ9IGRhcDgyMTFyX3JlbW92ZSxcbitcdFx0LmNvbmZpZ19pbml0XHQ9IGRhcDgyMTFyX2NvbmZpZ19pbml0LFxuK1x0XHQucmVhZF9zdGF0dXNcdD0gZ2VucGh5X3JlYWRfc3RhdHVzLFxuK1x0XHQuc2V0X2xvb3BiYWNrXHQ9IGdlbnBoeV9sb29wYmFjayxcbitcdFx0LmNvbmZpZ19hbmVnXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcbitcdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuK1x0fSxcbit9O1xuK21vZHVsZV9waHlfZHJpdmVyKGRhcDgyMTFyX2RyaXZlcik7XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiREFQODIxMVIgR2lnYWJpdCBFdGhlcm5ldCBQSFkgZHJpdmVyXCIpO1xuK01PRFVMRV9BVVRIT1IoXCJBcnRlbSBTaGlta28gXHUwMDNjYS5zaGlta28uZGV2QGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGRhcDgyMTFyX3RiW10gPSB7XG4rXHR7IERBUDgyMTFSX1BIWV9JRCwgREFQODIxMVJfUEhZX0lEX01BU0sgfSxcbitcdHsgLyogc2VudGluZWwgKi8gfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBkYXA4MjExcl90Yik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMjo0OC4wNjcwMzg3MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA3MDc4NjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUaG91Z2h0cyBvbiBQcm9iaW5nIHRoZSBOZXcgREFQODIxMVIgUEhZIERyaXZlciBpbiBhIEZ1enppbmcgQ29udGV4dCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG5ldyBQSFkgZHJpdmVyLCBgZGFwODIxMXIuY2AsIGZvciB0aGUgREFQVSBUZWxlY29tIERBUDgyMTFSKEkpIEdpZ2FiaXQgRXRoZXJuZXQgUEhZLiBJdCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGltcGxlbWVudHMgdGhlIHN0YW5kYXJkIHByb2JlLCByZW1vdmUsIGFuZCBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucywgYW5kIGV2ZW4gYWRkcyBkZWJ1Z2ZzIGVudHJpZXMgaWYgYENPTkZJR19ERUJVR19GU2AgaXMgZW5hYmxlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIHJlYWNoZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBjYW4gd2UgcmVhY2ggdGhpcyBkcml2ZXIgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50IGxpa2Ugc3l6a2FsbGVyP1xuXG5QSFkgZHJpdmVycyBhcmUgdHlwaWNhbGx5IHByb2JlZCBlaXRoZXIgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIHJlZ2lzdGVycyBhIFBIWSwgb3IgdGhyb3VnaCBhbiBNRElPIGJ1cyBzY2FuLiBJbiBzeXprYWxsZXIsIHdlIGNvdWxkIHBvdGVudGlhbGx5IGluamVjdCBNRElPIGRldmljZXMgZGlyZWN0bHksIG9yIG1heWJlIGV2ZW4gdXNlIGEgZHVtbXkgbmV0d29yayBkZXZpY2UgdGhhdCByZWdpc3RlcnMgYSBQSFkuIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgbmV0d29yayBmdXp6aW5nIGNhcGFiaWxpdGllcyBhbHJlYWR5LCBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgLCBidXQgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGlzIFBIWSwgd2UnZCBwcm9iYWJseSBiZSBsb29raW5nIGF0IGBpb2N0bChTSU9DU01JSVJFRylgIGNhbGxzLCBvciBwZXJoYXBzIGludGVyYWN0aW5nIHRocm91Z2ggbmV0bGluaywgYXNzdW1pbmcgYSBzdWl0YWJsZSBuZXRsaW5rIGludGVyZmFjZSBpcyBhdmFpbGFibGUuIE9yLCB0aGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggbWlnaHQgYmUgdG8gcHJvYmUgaXQgdmlhIHRoZSBNRElPIGJ1cyBpZiB3ZSBoYXZlIGEgbW9jayBNRElPIGJ1cy5cblxuTm93LCBzeXprYWxsZXIgaGFzIHByb3ZlbiBpdHNlbGYgY2FwYWJsZSB3aXRoIGB2a21zYCBmb3IgRFJNIGFuZCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBzbyBkb2VzIGl0IGhhdmUgYSB3YXkgdG8gcHJvYmUgYXJiaXRyYXJ5IFBIWSBkcml2ZXJzPyBDYW4gd2UgY3JlYXRlIGEgdmlydHVhbCBNRElPIGJ1cz8gT3IsIHdvdWxkIHVzaW5nIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgKGBkc2FgKSBiZSBhIHBhdGggdG93YXJkIHByb2JpbmcgdGhpcyBkcml2ZXI/IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZ1enogdGhlIGBtZGlvYCBidXMuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgKnRyaWdnZXIqIGBkYXA4MjExcl9wcm9iZWA/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIHRoZSBNRElPIGJ1cyBleHBvc2VzIGEgd2F5IHRvIGNyZWF0ZSBkZXZpY2VzIGZyb20gdXNlcnNwYWNlLCBvciB0byBzZWUgaWYgYW55IGV4aXN0aW5nIFBIWSBmdXp6ZXJzIGNhbiBiZSByZXB1cnBvc2VkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNlYXJjaCBmb3IgYG1kaW9gIGFuZCBgcGh5YCB0byBpZGVudGlmeSBhbnkgcmVsZXZhbnQgaW5zdGFudGlhdGlvbiBtZWNoYW5pc21zLlxuXG5UaGlua2luZyBhYm91dCBpdCwgc3l6a2FsbGVyICpjYW4qIGxvYWQgbW9kdWxlcy4gSWYgdGhlcmUncyBhIGRldmljZSB0cmVlIG92ZXJsYXksIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBpdCAqbWlnaHQqIHByb2JlIGl0IGF1dG9tYXRpY2FsbHkuIEhvd2V2ZXIsIHN5emthbGxlciBkb2Vzbid0IHVzdWFsbHkgaGFuZGxlIERUIG92ZXJsYXlzIHVubGVzcyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZCBmb3IgaXQsIHNvIHRoYXTigJlzIHByb2JhYmx5IG5vdCB0aGUgc3RhbmRhcmQgcGF0aC4gSSBzZWUgbm93IHRoYXQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYCBzZWVtcyB0byBiZSByZWxldmFudC5cblxuSG9sZCBvbiwgc3l6a2FsbGVyIGNhbiB1c2UgYGlvY3RsKFNJT0NTTUlJUkVHKWAgdG8gaW50ZXJhY3Qgd2l0aCBQSFlzLCBidXQgdGhhdCBhc3N1bWVzIHRoZSBQSFkgZGV2aWNlIGFscmVhZHkgKmV4aXN0cyouIFNvIHRoYXQgZ2V0cyB1cyBiYWNrIHRvOiBjYW4gd2UgY3JlYXRlIHRoaXMgUEhZIGRldmljZSBkeW5hbWljYWxseT8gSSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gdmVyaWZ5IHRoYXQgYGRhcDgyMTFyX3Byb2JlYCBjYW4gYmUgcmVhY2hlZC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgYSBzdWNjZXNzZnVsIGZ1enppbmcgY2FtcGFpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTM0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjI6NTguMTM3ODM2NDE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg4OTk1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFwODIxMXJfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9NDc4PXN0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ4MS0vKipcXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0ODI6ICogZGFwODIxMXJfcHJvYmUoKSAtIFBIWSBwcm9iZSBjYWxsYmFja1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ4My0gKiBAcGh5ZGV2OiBQSFkgZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDg5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjQ5MDpzdGF0aWMgaW50IGRhcDgyMTFyX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDkxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jPTUyMD1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZGFwODIxMXJfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy01MjMtXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJEQVA4MjExUiBHaWdhYml0IEV0aGVybmV0XFxcIixcXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1MjQ6XFx0XFx0LnByb2JlICAgICAgICAgID0gZGFwODIxMXJfcHJvYmUsXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNTI1LVxcdFxcdC5yZW1vdmVcXHRcXHQ9IGRhcDgyMTFyX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6MDIuNjI2NzQxNjQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3MzcwNTYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQcm9iaW5nIFBIWSBEcml2ZXJzIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIHdvbmRlcmluZyBpZiBzeXprYWxsZXIgY2FuIGFjdHVhbGx5IGdldCBhdCB0aG9zZSBQSFkgZHJpdmVycy4gSXQgc2VlbXMgbGlrZSB0aGUgdXN1YWwgd2F5cyBhIFBIWSBkcml2ZXIgaXMgbG9hZGVkIOKAkyBlaXRoZXIgdGhyb3VnaCBhbiBNRElPIGJ1cyBzY2FuIGFuZCBtYXRjaGluZyBJRCwgb3IgYnkgYSBEZXZpY2UgVHJlZSBub2RlIHNwZWNpZnlpbmcgdGhlIFBIWSDigJMgcHJvYmFibHkgd29uJ3Qgd29yayBpbiBhIFFFTVUtbGlrZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0ZWQgTURJTyBidXMgd2l0aCB0aGF0ICpleGFjdCogSUQsIG9yIHNvbWUgY2xldmVyIHNvZnR3YXJlIHJlZ2lzdHJhdGlvbiBtZXRob2QsIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBqdXN0IG5vdCBnb2luZyB0byBnZXQgY2FsbGVkLCByaWdodD8gSG1tLCBsZXQncyBzZWUuLi4gYXJlIHRoZXJlIGFueSBvcHRpb25zIGxpa2UgYGRzYV9sb29wYCwgYGZpeGVkLXBoeWAsIG9yIHRoYXQgYG1kaW8tbW9ja2AgdGhpbmc/IE1heWJlIHRoZXJlJ3Mgc29tZSBraW5kIG9mIG1vY2sgTURJTyBidXMgaW1wbGVtZW50YXRpb24gSSBjYW4gbGV2ZXJhZ2UuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUncyBhIGdvb2Qgd2F5IHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiBuZWVkZWQgdG8gZ2V0IHRoZXNlIGRyaXZlcnMgdG8gbG9hZC4gTGV0IG1lIGxvb2sgZm9yIGEgbW9jayBNRElPIGJ1cyBvciBzb21ldGhpbmcgc2ltaWxhciB0byBzZWUgd2hhdCdzIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NTgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6MDcuNzAwNDQ5NzI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzYyNzA2OTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKm1vY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE3OjIzOjEwLjI3NjczMzYzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODQ4NTg5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIFVzZXJzcGFjZSBQSFkgRGV2aWNlIFJlZ2lzdHJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcHJvYmUgd2hldGhlciBpdCdzIGFjdHVhbGx5IHBvc3NpYmxlIHRvIHJlZ2lzdGVyIGEgUEhZIGRldmljZSBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVHJhZGl0aW9uYWxseSwgUEhZIGRldmljZSBtYW5hZ2VtZW50IGhhcyBiZWVuIGZpcm1seSByb290ZWQgaW4gdGhlIGtlcm5lbCwgcHJpbWFyaWx5IGR1ZSB0byB0aGUgbmVlZCBmb3IgZGlyZWN0IGhhcmR3YXJlIGFjY2VzcywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgbWFuYWdpbmcgdGhlIGxvdy1sZXZlbCBjb21tdW5pY2F0aW9uIHByb3RvY29scyAoTURJTywgZXRjLikuIEhvd2V2ZXIsIHdpdGggdGhlIGV2b2x1dGlvbiBvZiBkcml2ZXJzIGFuZCBwb3RlbnRpYWwgZm9yIG1vcmUgYWJzdHJhY3RlZCBoYXJkd2FyZSBpbnRlcmZhY2VzLCBJJ20gY3VyaW91cyBpZiB0aGVyZSdzIGJlZW4gYW55IGFkdmFuY2VtZW50IGluIGFsbG93aW5nIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgdG8gcGFydGljaXBhdGUgaW4gdGhlIFBIWSBkZXZpY2UgbGlmZWN5Y2xlLiBNYXliZSB2aWEgYSB3ZWxsLWRlZmluZWQgQVBJIHRoYXQgcHJvdmlkZXMgc2FmZSBhbmQgY29udHJvbGxlZCBhY2Nlc3MgdG8gdGhlIG5lY2Vzc2FyeSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSdzIGEgbWVjaGFuaXNtLCBwZXJoYXBzIHRocm91Z2ggYSBjaGFyYWN0ZXIgZGV2aWNlLCBuZXRsaW5rIHNvY2tldCwgb3IgZXZlbiBhIG5ld2VyLCBtb3JlIHNvcGhpc3RpY2F0ZWQgaW50ZXJmYWNlIGxpa2UgVUlPIG9yIFZGSU8sIHRoYXQgd291bGQgZmFjaWxpdGF0ZSB0aGlzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBzZWN1cml0eSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudDsgaG93IHdvdWxkIHdlIGVuc3VyZSB0aGF0IGEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIGRvZXNuJ3QgaW5hZHZlcnRlbnRseSBpbnRlcmZlcmUgd2l0aCBvdGhlciBuZXR3b3JrIGludGVyZmFjZXMgb3IgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcz8gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHJlbGV2YW50IHN1YnN5c3RlbSBkcml2ZXJzLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb3IgZXhpc3RpbmcgbWVjaGFuaXNtcyB0aGF0IGNvdWxkIGJlIGV4dGVuZGVkIG9yIGFkYXB0ZWQgZm9yIHRoaXMgcHVycG9zZS4gSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBtaWdodCBpbnRlcmFjdCB3aXRoIGV4aXN0aW5nIG5ldHdvcmtpbmcgc3RhY2sgY29uZmlndXJhdGlvbnMsIGxpa2UgYm9uZGluZyBvciBicmlkZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMzQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMzoxNC43NjE1OTUxMjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NDQzMTgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9OTMxPXN0YXRpYyBpbnQgeGdiZV9waHlfZmluZF9waHlfZGV2aWNlKHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6OTc2OlxcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk3Ny1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5Nzg6XFx0XFx0bmV0ZGV2X2VycihwZGF0YS1cXHUwMDNlbmV0ZGV2LCBcXFwicGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc5LVxcdFxcdHBoeV9kZXZpY2VfZnJlZShwaHlkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYz03MTY9aG5zX21hY19yZWdpc3Rlcl9waHlkZXYoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBobnNfbWFjX2NiICptYWNfY2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0NC1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jOjc0NTpcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0Ni1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYz0xOTI5PXN0YXRpYyBpbnQgbmV0c2VjX3JlZ2lzdGVyX21kaW8oc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCB1MzIgcGh5X2FkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk4My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4NDpcXHRcXHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODUtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODgtXFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jOjE5ODk6XFx0XFx0XFx0XFx0XFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZXJyKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk5MC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9NDI9Zndub2RlX2ZpbmRfbWlpX3RpbWVzdGFtcGVyKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtNjktXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjcwOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy03MS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDMtXFx0ICovXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjEwNDpcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTA1LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTExNC19XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjExNTpFWFBPUlRfU1lNQk9MKGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTYtXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTQ5LVxcdFxcdC8qIEFsbCBkYXRhIGlzIG5vdyBzdG9yZWQgaW4gdGhlIHBoeSBzdHJ1Y3QsIHNvIHJlZ2lzdGVyIGl0ICovXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1MDpcXHRcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTUxLVxcdFxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1Ni1cXHR9IGVsc2UgaWYgKGlzX29mX25vZGUoY2hpbGQpKSB7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1NzpcXHRcXHRyYyA9IGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoYnVzLCBwaHksIGNoaWxkLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU4LVxcdFxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby14Z2VuZS5jPTI2Mz1zdHJ1Y3QgcGh5X2RldmljZSAqeGdlbmVfZW5ldF9waHlfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmMtMjcwLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby14Z2VuZS5jOjI3MTpcXHRpZiAocGh5X2RldmljZV9yZWdpc3RlcihwaHlfZGV2KSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8teGdlbmUuYy0yNzItXFx0XFx0cGh5X2RldmljZV9mcmVlKHBoeV9kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9MzI9c3RhdGljIGludCBvZl9nZXRfcGh5X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCB1MzIgKnBoeV9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM2LVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjM3OmludCBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzkte1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQwOlxcdHJldHVybiBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKG1kaW8sIHBoeSxcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00MS1cXHRcXHRcXHRcXHRcXHRcXHQgIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDMtfVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ0OkVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz0xMzE9c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2Mi1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTYzOlxcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQwOD1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00MzctXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDM4OlxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00MzktXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTk3LVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU5ODpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoYnVzLCBwaHksIGNoaWxkLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTktXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTAzPUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTA1LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwNjogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTA3LSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwOC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQxLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDI6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDgtICogVGhpcyBkb2Vzbid0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDk6ICogb2YgcGh5X2RldmljZV9yZWdpc3RlcigpLiBVc2UgcGh5X2RldmljZV9mcmVlKCkgdG8gZnJlZSB0aGUgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTUwLSAqIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yMDcwPXN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMDg1LVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMDg2OlxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjA4Ny1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIwODgtXFx0XFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIwODk6XFx0XFx0ZGV2X2VycihzZnAtXFx1MDAzZWRldiwgXFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIwOTAtXFx0XFx0XFx0RVJSX1BUUihlcnIpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfRldOT0RFX01ESU8pXFxuaW5jbHVkZS9saW51eC9md25vZGVfbWRpby5oOjEyOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaD0xNj1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmgtMTktI2Vsc2UgLyogQ09ORklHX0ZXTk9ERV9NRElPICovXFxuaW5jbHVkZS9saW51eC9md25vZGVfbWRpby5oOjIwOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0yMS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oPTQ5PWJvb2wgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucCk7XFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg6NTA6aW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC01MS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaD0xNDA9c3RhdGljIGlubGluZSBib29sIG9mX3BoeV9pc19maXhlZF9saW5rKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDQtXFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg6MTQ1OnN0YXRpYyBpbmxpbmUgaW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDYtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxNTk9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7XFxuaW5jbHVkZS9saW51eC9waHkuaDoyMTYwOmludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMjE2MS12b2lkIHBoeV9kZXZpY2VfZnJlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6MTYuODM2MDMxMTE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUwMTEwMTI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIEJ1cyBJbnZlc3RpZ2F0aW9uIGZvciBzeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBwb3RlbnRpYWxseSBsZXZlcmFnZSBzeXprYWxsZXIgdG8gcmVhY2ggdGhlIE1ESU8gYnVzLiBJIGtub3cgc3l6a2FsbGVyIGNhbiB1c2UgYGlvY3RsKFNJT0NTTUlJUkVHKWAgdG8gd3JpdGUgdG8gaXQsIHdoaWNoIGlzIGludHJpZ3VpbmcuIFRoZSBjYXRjaCwgb2YgY291cnNlLCBpcyB0aGF0IHRoZXJlIG5lZWRzIHRvICpiZSogYW4gTURJTyBidXMgcHJlc2VudC4gRG9lcyBzeXprYWxsZXIgYWxyZWFkeSBoYXZlIGEgd2F5IHRvIGVzdGFibGlzaCBvbmU/IEhtbSwgaXQgZG9lcyBoYXZlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBgc3l6X2luaXRfbmV0X3NvY2tldGAuIEFuZCwgaGV5LCB0aGVyZSdzIHNvbWUgZXZpZGVuY2Ugb2YgYG1kaW9gIGJ1cyBmdXp6aW5nIGluIHRoZSBjb2RlYmFzZSwgYnV0IG5vdGhpbmcgZXhwbGljaXQuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgY3JlYXRpbmcgYSBzY2VuYXJpbyB3aGVyZSBvbmUgZ2V0cyBjcmVhdGVkPyBJIGtub3cgYGRhcDgyMTFyX3Byb2JlYCBnZXRzIGNhbGxlZCBkdXJpbmcgYSBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbi4gTm93IHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICpmb3JjZSogYSBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmcm9tIHVzZXJzcGFjZT8gTm9wZSwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGlzbid0IGV4cG9zZWQuXG5cbk9rYXksIGJhY2sgdG8gdGhlIGRyYXdpbmcgYm9hcmQuIElzIHRoZXJlIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSB0aGF0ICptaWdodCogcmVnaXN0ZXIgYSBQSFk/IFRoaW5raW5nIGFib3V0IGBtYWNiYCwgYHhnYmVgLCBgaG5zYCwgYG5ldHNlY2AsIGFuZCBgZml4ZWRfcGh5YC4gQnV0LCB3YWl0LCBgZml4ZWRfcGh5YCBkZWZpbml0ZWx5IGNhbid0IGJlIHJlZ2lzdGVyZWQgZnJvbSB1c2Vyc3BhY2UuIFRoZW4gd2hhdCBhYm91dCBEU0E/IEkgcmVjYWxsIHRoYXQgRFNBIGNhbiBiZSBjb25maWd1cmVkIHZpYSBuZXRsaW5rIG9yIHN5c2ZzLCBidXQgdXBvbiBmdXJ0aGVyIHJlZmxlY3Rpb24sIGl0IGlzIGNvbmZpZ3VyZWQgdmlhIGRldmljZSB0cmVlLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2ssIHN5emthbGxlciBoYXMgYHN5el91c2JfY29ubmVjdGAuIENvdWxkIGEgVVNCIG5ldHdvcmsgYWRhcHRlciBnZXQgdXMgdGhlcmU/IEFyZSB0aGVyZSBhbnkgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIHRoYXQgdXNlIE1ESU8gYW5kIGNhbiBwcm9iZSBhcmJpdHJhcnkgUEhZcz8gWWVzISBJdCBhcHBlYXJzIHRoYXQgZHJpdmVycyBsaWtlIGBkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jYCwgYHNtc2M5NXh4LmNgLCBgYXNpeGAsIG9yIGBjZGNfZXRoZXJgIGNvdWxkIGJlIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgYW55IG9mIHRoZXNlIFVTQiBuZXR3b3JrIGRyaXZlcnMgcmVnaXN0ZXIgYW5kIHNjYW4gYW4gTURJTyBidXMuIFRoaXMgZmVlbHMgbGlrZSB0aGUgbW9zdCBwcm9taXNpbmcgYW5nbGUgYXQgdGhlIG1vbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MzQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6MjQuMzM3MTM0NDE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ2MTA1Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTI3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q9MzQ4PU1ESU9cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTAtICBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZSgpXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0OjM1MTogIGRldm1fbWRpb2J1c19yZWdpc3RlcigpXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0OjM1MjogIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcigpXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1My1cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0PTEyPWRldmljZSAodGhlIHNhbWUgb2JqZWN0cyB0aGF0IGFyZSByZWdpc3RlcmVkIHZpYVxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0OjEzOmBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KClgYCkuIE1BQy1zaWRlIGNvbm5lY3Rpb24gcHJvcGVydGllcyBzdWNoIGFzXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9tb3RvcmNvbW0teXQ4eHh4LXBoeS5yc3QtMTQtYGBwaHktaGFuZGxlYGAgYW5kIGBgcGh5LW1vZGVgYCBhcmUgZG9jdW1lbnRlZCBpbiBbYWNwaS1tZGlvLXBoeV1fLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0PTc9VGhlIFBIWXMgb24gYW4gTURJTyBidXMgW3BoeV0gYXJlIHByb2JlZCBhbmQgcmVnaXN0ZXJlZCB1c2luZ1xcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvcGh5LnJzdDo4OmZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeSgpLlxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvcGh5LnJzdC05LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q9NDA9cmVnaXN0ZXJlZCBhcyBhIGRpc3RpbmN0IGRldmljZS5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTU2LSAgIGRyaXZlciBuZWVkcywgc2V0dXAgdGhlIG1paV9idXMgc3RydWN0dXJlLCBhbmQgcmVnaXN0ZXIgd2l0aCB0aGUgUEFMIHVzaW5nXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q6NTc6ICAgbWRpb2J1c19yZWdpc3Rlci4gIFNpbWlsYXJseSwgdGhlcmUncyBhIHJlbW92ZSBmdW5jdGlvbiB0byB1bmRvIGFsbCBvZlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTU4LSAgIHRoYXQgKHVzZSBtZGlvYnVzX3VucmVnaXN0ZXIpLlxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYz0xMDk9c3RhdGljIGludCBlcDgyNDhlX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzMi1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jOjEzMzpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgb2ZkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzNC1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM9MjA3PXN0YXRpYyBpbnQgZ3Bpb19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQzLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jOjI0NDpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG5wKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYy0yNDUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jPTYwNz1zdGF0aWMgaW50IGJjbV9zZjJfbWRpb19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4My1cXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jOjY4NDpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXVzZXJfbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYy02ODUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jPTE4Nz1zdGF0aWMgaW50IGdzd2lwX21kaW8oc3RydWN0IGdzd2lwX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTMtXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM6MjE0OlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjE1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MzIxPXN0YXRpYyBpbnQga3N6OTQ3N19wY3NfY3JlYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDEtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MzQyOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYtXFx1MDAzZWRldiwgYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTIzMjE9aW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMzkyLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjIzOTM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5NC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jPTY4NT1zdGF0aWMgaW50IGxhbjkzN3hfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTUtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo3NTY6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yMzcxPW10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDA2LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyNDA3OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQwOC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz0zODM0PXN0YXRpYyBpbnQgbXY4OGU2eHh4X21kaW9fcmVnaXN0ZXIoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozODg4OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5Mi1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTQtXFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0xNDk9c3RhdGljIGludCBuZXRjX3BvcnRfY3JlYXRlX2VtZGlvX2J1cyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE3OS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoxODA6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0xODEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTk1Nz1zdGF0aWMgaW50IHZzYzk5NTlfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxMDE0OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTEwMTUtXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYz04Nzg9c3RhdGljIGludCB2c2M5OTUzX21kaW9fYnVzX2FsbG9jKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTAzLVxcdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0OlxcdHJjID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jLTkwNS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODEtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4My1cXHRvZl9ub2RlX3B1dChtbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ3PXFjYThrX21kaW9fcmVnaXN0ZXIoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODYtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTg3OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTg4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtOTktXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDMtXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0OlxcdHJldHVybiBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0NS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg9MzA3PXZvaWQgc2phMTEwNV9mcmFtZV9tZW1vcnlfcGFydGl0aW9uaW5nKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oOjMxMDppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMxMS12b2lkIHNqYTExMDVfbWRpb2J1c191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0zMDI2PXN0YXRpYyBpbnQgc2phMTEwNV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjMwNjg6XFx0cmMgPSBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MjU4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdHhfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzoyODg6XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDMtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0OlxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDUtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0zNjg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfcGNzX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zOTUtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6Mzk2OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5Ny1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTQzOT1zdGF0aWMgdm9pZCBzamExMTA1X21kaW9idXNfcGNzX3VucmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzo0NTk6aW50IHNqYTExMDVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz01OTU9eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTItXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjYxMzpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTQtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz03MjY9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDMtXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjc0NDpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDUtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jPTQ1OT1zdGF0aWMgaW50IGF4X21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00NzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM6NDc5OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXgtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ4MC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jPTEzMjE9c3RhdGljIGludCBvd2xfZW1hY19tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYzoxMzQ2OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXFx1MDAzZW1paSwgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jPTUwOT1zdGF0aWMgaW50IGFkaW4xMTEwX3JlZ2lzdGVyX21kaW9idXMoc3RydWN0IGFkaW4xMTEwX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM6NTMwOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUzMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYz0xMjkwPXN0YXRpYyBpbnQgZ3JldGhfbWRpb19pbml0KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jOjEzMDc6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihncmV0aC1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA4LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTM5MzE9c3RhdGljIGludCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYzo0MDI3OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI4LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYz0xMjE9c3RhdGljIGludCBhbHRlcmFfdHNlX21kaW9fY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jOjE1ODpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1OS1cXHRpZiAocmV0ICE9IDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9MTA2MT1zdGF0aWMgaW50IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM6MTIyMjpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF1cC1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIzLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9MzQyOD1zdGF0aWMgaW50IHhnYmVfcGh5X2luaXQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE3LVxcdHNucHJpbnRmKG1paS1cXHUwMDNlaWQsIHNpemVvZihtaWktXFx1MDAzZWlkKSwgXFxcIiVzXFxcIiwgZGV2X25hbWUocGRhdGEtXFx1MDAzZWRldikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcxODpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE5LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MjA6XFx0XFx0ZGV2X2VycihwZGF0YS1cXHUwMDNlZGV2LCBcXFwibWRpb2J1c19yZWdpc3RlciBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcyMS1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYz05OD1pbnQgeGdlX21kaW9fY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMTgtXFx0bWRpb19idXMtXFx1MDAzZXBoeV9tYXNrID0gMHgxO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM6MTE5OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTIwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTgzNz1pbnQgeGdlbmVfZW5ldF9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6ODg4OnN0YXRpYyBpbnQgeGdlbmVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWlpX2J1cyAqbWRpbylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTEzOlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTQtXFx0XFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMS1cXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkyMjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTkzOT1pbnQgeGdlbmVfZW5ldF9tZGlvX2NvbmZpZyhzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjk1ODpcXHRyZXQgPSB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLCBtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTktXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jPTEzMT1pbnQgYXJjX21kaW9fcHJvYmUoc3RydWN0IGFyY19lbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYzoxNzM6XFx0ZXJyb3IgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTc0LVxcdG9mX25vZGVfcHV0KG1kaW9fbm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYz05NjY9c3RhdGljIGludCBheDg4Nzk2Y19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYzoxMDExOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIGF4X2xvY2FsLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEyLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTY4Nz1zdGF0aWMgaW50IGFnNzF4eF9tZGlvX3Byb2JlKHN0cnVjdCBhZzcxeHggKmFnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjctXFx0bW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzo3Mjg6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyOS1cXHRvZl9ub2RlX3B1dChtbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI1OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjYwOlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI2MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYz0xNzEzPXN0YXRpYyBpbnQgYmNtX2VuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM6MTgzMDpcXHRcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgzMS1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYz0yMTE9c3RydWN0IG1paV9idXMgKmJjbWFfbWRpb19taWlfcmVnaXN0ZXIoc3RydWN0IGJnbWFjICpiZ21hYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYzoyMzY6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM3LVxcdG9mX25vZGVfcHV0KG5wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTE5Mz1pbnQgYmNtZ2VuZXRfbWlpX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIGluaXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzMtXFx0XFx0cGh5X25hbWUgPSBcXFwiZXh0ZXJuYWwgUnZNSUlcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjIzNDpcXHRcXHQvKiBvZl9tZGlvYnVzX3JlZ2lzdGVyIHRvb2sgY2FyZSBvZiByZWFkaW5nIHRoZSAnbWF4LXNwZWVkJ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzNS1cXHRcXHQgKiBQSFkgcHJvcGVydHkgZm9yIHVzLCBlZmZlY3RpdmVseSBsaW1pdGluZyB0aGUgUEhZIHN1cHBvcnRlZFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jPTIxNTc9c3RhdGljIGludCBzYm1hY19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsZGV2LCBsb25nIGxvbmcgYmFzZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI3LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMjI4OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoc2MtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI5LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE1MDU9c3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNTU4OlxcdGkgPSBtZGlvYnVzX3JlZ2lzdGVyKHRwLVxcdTAwM2VtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1OS1cXHRpZiAoaSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwOTc6c3RhdGljIGludCBtYWNiX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1hY2IgKmJwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNC1cXHRpZiAobWRpb19ucClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMDU6XFx0XFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMTk6XFx0XFx0XFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjAtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMjI6XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTExMjU9c3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE1OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExNTk6XFx0ZXJyID0gbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKGJwLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNjAtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM9MTEwNz1zdGF0aWMgaW50IGRtOTA1MV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBib2FyZF9pbmZvICpkYilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jOjExMjU6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgZGItXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTI0MjM9c3RhdGljIGludCB0c25lcF9tZGlvX2luaXQoc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6MjQ1NTpcXHRyZXR2YWwgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXFx1MDAzZW1kaW9idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM9MTAyND1zdGF0aWMgaW50IGV0aG9jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYzoxMjA4OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTczND1zdGF0aWMgaW50IGZ0Z21hYzEwMF9zZXR1cF9tZGlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYzoxNzcwOlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VkZXYsIHByaXYtXFx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc3MS1cXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jPTM2PXN0YXRpYyBpbnQgZW5ldGNfcGNpX21kaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYzo5MTpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZGV2LVxcdTAwM2VvZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTE2MD1zdGF0aWMgaW50IGVuZXRjX21kaW9fcHJvYmUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0xODYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjE4NzpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0xODgtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0yMDI9c3RhdGljIGludCBlbmV0Y19pbWRpb19jcmVhdGUoc3RydWN0IGVuZXRjX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0yMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjIzNzpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTIzOC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0zMDQyPXN0YXRpYyBpbnQgZmVjX2VuZXRfbWlpX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzE2MTpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGZlcC1cXHUwMDNlbWlpX2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jPTY1PXN0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jOjEwNjpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDctXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM9MTQ5PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYy0xNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoxNzY6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM9OTc9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYzoxNjc6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTQwOT1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6NDk0OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jPTM3MT1zdGF0aWMgaW50IHhnbWFjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI2LVxcdGlmIChpc19vZl9ub2RlKGZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjc6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHRvX29mX25vZGUoZndub2RlKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjgtXFx0ZWxzZSBpZiAoaXNfYWNwaV9ub2RlKGZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjk6XFx0XFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZndub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQzMC1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jPTI2Nj1pbnQgaGJnX21kaW9faW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI5MjpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYz0xMDk0PXN0YXRpYyBpbnQgaGl4NWhkMl9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYzoxMTg2OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0xMjM9aW50IGhjbGdlX21hY19tZGlvX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTQtXFx0bWRpb19idXMtXFx1MDAzZXBoeV9tYXNrID0gfigxVSBcXHUwMDNjXFx1MDAzYyBtYWMtXFx1MDAzZXBoeV9hZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jOjE1NTpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYz00OTU9c3RhdGljIGludCBobnNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU4NDpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01ODUtXFx0fSBlbHNlIGlmIChpc19hY3BpX25vZGUocGRldi1cXHUwMDNlZGV2LmZ3bm9kZSkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5Mi1cXHRcXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1OTM6XFx0XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTQtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYz0yNTYwPXN0YXRpYyBpbnQgZW1hY19kdF9tZGlvX3Byb2JlKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4NC1cXHRzbnByaW50ZihidXMtXFx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFxcXCIlc1xcXCIsIGRldi1cXHUwMDNlb2ZkZXYtXFx1MDAzZW5hbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYzoyNTg1OlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2ZGV2LVxcdTAwM2VvZmRldi1cXHUwMDNlZGV2LCBidXMsIG1paV9ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODYtXFx0aWYgKHJlcykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MTAyNj1pbnQgaXhnYmVfbWlpX2J1c19pbml0KHN0cnVjdCBpeGdiZV9odyAqaHcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDg4LVxcdGFkYXB0ZXItXFx1MDAzZW1paV9idXMgPSBidXM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MTA4OTpcXHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwOTAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYz0zODU9bHRxX2V0b3BfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwMi1cXHRcXHQgcHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlbmFtZSwgcHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM6NDAzOlxcdGlmIChtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1paV9idXMpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDQtXFx0XFx0ZXJyID0gLUVOWElPO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYz0yODM9c3RhdGljIGludCBvcmlvbl9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4MS1cXHQvKiBGb3IgdGhlIHBsYXRmb3JtcyBub3Qgc3VwcG9ydGluZyBEVC9BQ1BJIGZhbGwtYmFja1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6MzgyOlxcdCAqIHRvIG1kaW9idXNfcmVnaXN0ZXIgdmlhIG9mX21kaW9idXNfcmVnaXN0ZXIuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODMtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODQtXFx0aWYgKGlzX2FjcGlfbm9kZShwZGV2LVxcdTAwM2VkZXYuZndub2RlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NTpcXHRcXHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LVxcdTAwM2VkZXYuZndub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4Ni1cXHRlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODc6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4OC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM9MTM4Nz1zdGF0aWMgaW50IHB4YTE2OF9ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDQtXFx0cGVwLVxcdTAwM2VzbWlfYnVzLVxcdTAwM2VwaHlfbWFzayA9IDB4ZmZmZmZmZmY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM6MTUwNTpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHBlcC1cXHUwMDNlc21pX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtMTUwNi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz05OTg9c3RhdGljIGludCBtdGtfbWRpb19pbml0KHN0cnVjdCBtdGtfZXRoICpldGgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzctXFx0ZGV2X2RiZyhldGgtXFx1MDAzZWRldiwgXFxcIk1EQyBpcyBydW5uaW5nIG9uICVkIEh6XFxcXG5cXFwiLCBNRENfTUFYX0ZSRVEgLyBldGgtXFx1MDAzZW1kY19kaXZpZGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjEwMzg6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihldGgtXFx1MDAzZW1paV9idXMsIG1paV9ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0xMDM5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jPTE0MjI9c3RhdGljIGludCBtdGtfc3Rhcl9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM6MTQ0ODpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBwcml2LVxcdTAwM2VtaWksIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jPTI4Nz1pbnQgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBtbHhiZl9naWdlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYy0zMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYzozMzM6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzNC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM9MjUzPWludCBmYm5pY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYy0yNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM6MjczOlxcdGVyciA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihmYmQtXFx1MDAzZWRldiwgYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYy0yNzQtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYz0xMDM2PXN0YXRpYyBpbnQga3M4ODUxX3JlZ2lzdGVyX21kaW9idXMoc3RydWN0IGtzODg1MV9uZXQgKmtzLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDUzOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDU0LVxcdGlmIChyZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDU1OlxcdFxcdGdvdG8gZXJyX21kaW9idXNfcmVnaXN0ZXI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDU2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDYwLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMzoyNi4yODMyNTAyMjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxMjI3NjU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIE1ESU8gQnVzIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYSBmZXcgTURJTyBidXMtcmVsYXRlZCBmdW5jdGlvbnMg4oCTIGBmYm5pY19tZGlvYnVzX2NyZWF0ZWAsIGBtbHhiZl9naWdlX21kaW9fcHJvYmVgLCBgbXRrX3N0YXJfbWRpb19pbml0YCwgYW5kIHNvIG9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGNhbiB3ZSBidWlsZCBhbiBNRElPIGJ1cyBkcml2ZXIgZnJvbSB1c2VyIHNwYWNlPyBUaGlzIGlzIGEgcXVlc3Rpb24gSSBvZnRlbiBjb25zaWRlciB3aGVuIHJldmlld2luZyBkcml2ZXIgYXJjaGl0ZWN0dXJlcyBmb3IgZmxleGliaWxpdHkgYW5kIHBvdGVudGlhbCBvZmZsb2FkaW5nLlxuXG5UaGUgZGlyZWN0aW9uIEknbSB0YWtpbmcgaXMgZ3VpZGVkIGJ5IHRoZSBkZXNpcmUgdG8gaWRlbnRpZnkgYSBkcml2ZXIgdG8gbG9vayBpbnRvIHRvIHNhdGlzZnkgdGhhdCBjb25jZXJuLiBJIHJlY2FsbCBzZWVpbmcgYGRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmNgIHV0aWxpemUgYG1kaW9idXNfcmVnaXN0ZXJgLCB3aGljaCBpbXBsaWVzIGl0IGlzIGEgYnVzIGl0c2VsZiwgYW5kIG5vdCBhIGRldmljZS4gQmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4sIGl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIExldCdzIGRlbHZlIGludG8gYGxhbjc4eHguY2AgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGl0IGNhbiBvZmZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNDQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNzoyMzozMS40OTU1MjkxNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTA3MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA5MT1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb19pbml0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIxLVxcdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEyMjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlbWRpb2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIzLVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0MjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6MzEuNTUwNjQxNTcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzOTE4OTQ2NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGBkYXA4MjExcl9wcm9iZWAgVGhyb3VnaCBVU0IgRnV6emluZzogQSBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBhbmQgaXQgbG9va3MgbGlrZSBgc21zYzk1eHhgLCBgbGFuNzh4eGAsIGBheDg4MTcyYWAsIGFuZCBgYXNpeF9kZXZpY2VzYCBhbGwgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQncyBrZXkuIFdoZW4gdGhleSBkbywgYG1kaW9idXNfcmVnaXN0ZXJgIHNjYW5zIGl0LiBOb3csIGlmIHdlIGNhbiBlbXVsYXRlIGEgVVNCIGRldmljZSwgYW5kIGBzeXprYWxsZXJgICpjYW4qIGRvIHRoYXQgdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLCB3ZSBjYW4gZmVlZCBpdCBhcmJpdHJhcnkgcmVzcG9uc2VzIHRvIE1ESU8gcmVhZHMuXG5cbkhlcmUncyB0aGUgdHJpY2s6IElmIHRoZSBVU0IgZGV2aWNlIHJlc3BvbmRzIHRvIGFuIE1ESU8gcmVhZCBvbiBhZGRyZXNzIFggd2l0aCB0aGUgUEhZIElEIG9mIERBUDgyMTFSICh0aGF0J3MgYDB4MDAwODAxMUJgKSwgYG1kaW9idXNfc2NhbmAgd2lsbCBwaWNrIGl0IHVwLCBhbGxvY2F0ZSBhIGBwaHlfZGV2aWNlYCwgYW5kIHJlZ2lzdGVyIGl0LiBUaGVuLCB0aGUgZHJpdmVyIGNvcmUgd2lsbCBtYXRjaCB0aGF0IFBIWSBJRCBhbmQgcHJvYmUgdGhlIGBkYXA4MjExcl9kcml2ZXJgLiBUaGVyZWZvcmUsIGBkYXA4MjExcl9wcm9iZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB2aWEgVVNCIGZ1enppbmchXG5cbldhaXQsIHRob3VnaCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgREFQODIxMVJfUEhZYCBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBBaCwgdGhlIHBhdGNoICphZGRzKiBgY29uZmlnIERBUDgyMTFSX1BIWWAuIFRoYXQncyBpdCEgV2UgbmVlZCB0byBlbmFibGUgaXQsIHNvLCBgRW5hYmxlQ29uZmlnczogW1wiREFQODIxMVJfUEhZXCJdYC4gR290IGl0LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGRyaXZlciBjb2RlIGFuZCBzZWUgd2hhdCBmdW5jdGlvbnMgd2Ugc2hvdWxkIGZvY3VzIG9uLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB3ZSBoYXZlIGBkYXA4MjExcl9wcm9iZWAsIGBkYXA4MjExcl9yZW1vdmVgLCBgZGFwODIxMXJfY29uZmlnX2luaXRgLCBgaW5mb19zaG93YCwgYHBrZ19nZW5fc2hvd2AsIGFuZCBgcGtnX2dlbl93cml0ZWAuXG5cbldhaXQsIHRob3NlIGBpbmZvX3Nob3dgLCBgcGtnX2dlbl9zaG93YCwgYHBrZ19nZW5fd3JpdGVgIGZ1bmN0aW9ucyBhcmUgZGVidWdmcyBvcGVyYXRpb25zLiBBcmUgdGhvc2UgcmVhY2hhYmxlIGJ5IGBzeXprYWxsZXJgPyBZZXMsIHRoZXkgYXJlLiBgc3l6a2FsbGVyYCBjYW4gb3BlbiBhbmQgcmVhZC93cml0ZSBkZWJ1Z2ZzIGZpbGVzIGlmIGl0IGtub3dzIHRoZSBwYXRocy4gVGhlIHBhdGhzIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9cdTAwM2NkZXZfbmFtZVx1MDAzZS9pbmZvYCBvciBgL3N5cy9rZXJuZWwvZGVidWcvcGtnX2dlbmAuIFRoZSBgZGV2X25hbWVgIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIFBIWSBkZXZpY2UsIGxpa2UgYG1kaW8tYnVzOjAxYC4gVGhhdCdzIGdyZWF0LCBgc3l6a2FsbGVyYCAqY2FuKiBmdXp6IGRlYnVnZnMhXG5cbkxldCdzIGRpdmUgZGVlcGVyIGludG8gYGRhcDgyMTFyX2NvbmZpZ19pbml0YC4gSXQgcmVhZHMgcHJvcGVydGllcyBmcm9tIHRoZSBkZXZpY2UgdHJlZTogYHJ4LWludGVybmFsLWRlbGF5LXBzYCwgYHR4LWludGVybmFsLWRlbGF5LXBzYCwgYW5kIGB0eC11c2UtaW52ZXJ0ZWQtY2xrYC4gSGVyZSdzIHRoZSBjYXRjaDogc2luY2Ugd2UncmUgaW5zdGFudGlhdGluZyB0aGlzIHZpYSBVU0IgTURJTyBzY2FuLCB0aGVyZSdzIG5vIGRldmljZSB0cmVlIG5vZGUgZm9yIHRoZSBQSFkg4oCTIHVubGVzcyB3ZSB1c2UgRFQgb3ZlcmxheXMsIHdoaWNoIGBzeXprYWxsZXJgIGRvZXNuJ3QgdHlwaWNhbGx5IHRvdWNoLiBJZiB0aGVyZSdzIG5vIERUIG5vZGUsIGBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZWAgd2lsbCBiZSBOVUxMLiBUaHVzLCBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIHdpbGwgcmV0dXJuIGFuIGVycm9yLCBhbmQgaXQgd2lsbCBqdXN0IHVzZSB0aGUgZGVmYXVsdCBkZWxheSBgREFQODIxMVJfREVGQVVMVF9ERUxBWV9QU2AuIFRoZSBzYW1lIGFwcGxpZXMgZm9yIGBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2xgLCB3aGljaCByZXR1cm5zIGZhbHNlLiBUaGlzIG1lYW5zIGBkYXA4MjExcl9jb25maWdfaW5pdGAgd2lsbCBzdGlsbCBleGVjdXRlIGFuZCBjb25maWd1cmUgdGhlIFBIWSwgYnV0IHdpdGggZGVmYXVsdCB2YWx1ZXMuXG5cbk5vdyBsZXQncyBzZWUgd2hhdCB3ZSBjYW4gZG8gd2l0aCBgcGtnX2dlbl93cml0ZWAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxMTAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6NDUuNDY5NTkwNjA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDgwLCJFcnJvciI6ImFyZ3VtZW50IFwiRmlyc3RMaW5lXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50IiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogXCIzMzBcIixcbiAgXCJMaW5lQ291bnRcIjogXCIxMDBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJhcmd1bWVudCBcXFwiRmlyc3RMaW5lXFxcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnRcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6NDUuNDY5NjIyMjk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDA0NjExNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqVGhlIERlYnVnZ2luZyBEYW5jZTogQSBNb21lbnQgb2YgQ2xhcml0eSoqXG5cbk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgdGhhdCBlcnJvciBtZXNzYWdlIGFnYWluLCBhbmQgaXQgZmluYWxseSBjbGlja2VkLiBPZiBjb3Vyc2UhIEknbSBzdWNoIGEgZm9vbCBzb21ldGltZXMuIEkgd2FzIHNvIGZvY3VzZWQgb24gdGhlIGxvZ2ljIG9mIHRoZSBhbGdvcml0aG0gdGhhdCBJIGNvbXBsZXRlbHkgbWlzc2VkIHRoZSB0eXBlIG1pc21hdGNoLiBJIHBhc3NlZCBhIHN0cmluZywgYSBwZXJmZWN0bHkgdmFsaWQgc3RyaW5nIGF0IHRoYXQsIGFzIHRoZSBpbnB1dCBmb3IgYEZpcnN0TGluZWAuIEJ1dCBpdCBleHBlY3RzIGFuIGludGVnZXIsIG9idmlvdXNseS4gVGhlIGNvZGUncyBnb2luZyB0byBjaG9rZSBpZiBJIHRyeSB0byBmZWVkIGl0IHRoZSB3cm9uZyBkYXRhIHR5cGUuIFRoaXMgaXMgYmFzaWMsIGFsbW9zdCBlbWJhcnJhc3NpbmcuIEJ1dCBJJ20gZ2xhZCBJIGNhdWdodCBpdCBlYXJseS4gTm93IHRvIGZpeCB0aGF0IGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY1MiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6NDkuNDEwMDg1OTUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvZGFwODIxMXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMwOlxcdC8qKlxcbiAzMzE6XFx0ICogcGtnX2dlbl9zaG93KCkgLSBTaG93IHBhY2tldCBnZW5lcmF0b3Igc3RhdHVzXFxuIDMzMjpcXHQgKiBAc2Y6IFNlcXVlbmNlIGZpbGUgc3RydWN0dXJlXFxuIDMzMzpcXHQgKiBAZGF0YTogUHJpdmF0ZSBkYXRhIChzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqKVxcbiAzMzQ6XFx0ICpcXG4gMzM1OlxcdCAqIERpc3BsYXlzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaW50ZXJuYWwgcGFja2V0IGdlbmVyYXRvcixcXG4gMzM2OlxcdCAqIGluY2x1ZGluZyBDUkMgY29ycnVwdGlvbiBhbmQgbG9vcGJhY2sgc2V0dGluZ3MuXFxuIDMzNzpcXHQgKlxcbiAzMzg6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4gMzM5OlxcdCAqL1xcbiAzNDA6XFx0c3RhdGljIGludCBwa2dfZ2VuX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqZGF0YSlcXG4gMzQxOlxcdHtcXG4gMzQyOlxcdFxcdHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2ID0gc2YtXFx1MDAzZXByaXZhdGU7XFxuIDM0MzpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVxcdTAwM2VkZXYpO1xcbiAzNDQ6XFx0XFx0aW50IHZhbDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0dmFsID0gZGFwODIxMXJfcmVhZF9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSk7XFxuIDM0NzpcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4gMzQ4OlxcdFxcdFxcdHJldHVybiB2YWw7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdHNlcV9wdXRzKHNmLCBcXFwiUGFja2FnZSBHZW5lcmF0aW5nOiBcXFwiKTtcXG4gMzUxOlxcdFxcdGlmIChGSUVMRF9HRVQoREFQODIxMVJfUEtHX0dFTl9FTiwgdmFsKSBcXHUwMDI2XFx1MDAyNlxcbiAzNTI6XFx0XFx0ICAgIEZJRUxEX0dFVChEQVA4MjExUl9QS0dfQ0hLX0VOLCB2YWwpKVxcbiAzNTM6XFx0XFx0XFx0c2VxX3B1dHMoc2YsIFxcXCJlbmFibGVkXFxcXG5cXFwiKTtcXG4gMzU0OlxcdFxcdGVsc2VcXG4gMzU1OlxcdFxcdFxcdHNlcV9wdXRzKHNmLCBcXFwiZGlzYWJsZWRcXFxcblxcXCIpO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRzZXFfcHJpbnRmKHNmLCBcXFwiQ1JDIGNvcnJ1cHRpb24gZW46ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoREFQODIxMVJfUEtHX0NPUl9DUkMsIHZhbCkgP1xcbiAzNTg6XFx0XFx0XFx0ICAgXFxcImVuYWJsZWRcXFwiIDogXFxcImRpc2FibGVkXFxcIik7XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdHZhbCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbiAzNjE6XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuIDM2MjpcXHRcXHRcXHRyZXR1cm4gdmFsO1xcbiAzNjM6XFx0XFxuIDM2NDpcXHRcXHRzZXFfcHJpbnRmKHNmLCBcXFwiTG9vcGJhY2sgZW46ICVzXFxcXG5cXFwiLCBGSUVMRF9HRVQoQk1DUl9MT09QQkFDSywgdmFsKSA/XFxuIDM2NTpcXHRcXHRcXHQgICBcXFwiZW5hYmxlZFxcXCIgOiBcXFwiZGlzYWJsZWRcXFwiKTtcXG4gMzY2OlxcdFxcdHJldHVybiAwO1xcbiAzNjc6XFx0fVxcbiAzNjg6XFx0XFxuIDM2OTpcXHQvKipcXG4gMzcwOlxcdCAqIHBrZ19nZW5fd3JpdGUoKSAtIEVuYWJsZS9kaXNhYmxlIHBhY2tldCBnZW5lcmF0b3JcXG4gMzcxOlxcdCAqIEBmaWxlOiBGaWxlIHN0cnVjdHVyZVxcbiAzNzI6XFx0ICogQHVzZXJfYnVmOiBVc2VyIHNwYWNlIGJ1ZmZlclxcbiAzNzM6XFx0ICogQGNvdW50OiBCdWZmZXIgc2l6ZVxcbiAzNzQ6XFx0ICogQHBwb3M6IEZpbGUgcG9zaXRpb25cXG4gMzc1OlxcdCAqXFxuIDM3NjpcXHQgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBpbnRlcm5hbCBwYWNrZXQgZ2VuZXJhdG9yLlxcbiAzNzc6XFx0ICogQWxzbyBjb250cm9scyBsb29wYmFjayBhbmQgQ1JDIGNvcnJ1cHRpb24gdmlhIGRlYnVnZnMgZmxhZ3MuXFxuIDM3ODpcXHQgKlxcbiAzNzk6XFx0ICogTk9URTogV2UgaW50ZW50aW9uYWxseSBkbyBub3QgdXNlIGdlbnBoeV9sb29wYmFjaygpIGhlcmUuXFxuIDM4MDpcXHQgKiBnZW5waHlfbG9vcGJhY2soKSBkb2VzIGEgZnVsbCBCTUNSIG92ZXJ3cml0ZSAobWFzayA9IH4wKSBhbmRcXG4gMzgxOlxcdCAqIHdhaXRzIHVwIHRvIDUwMCBtcyBmb3IgbGluayBpbiBsb29wYmFjayBtb2RlLiBUaGlzIGlzIHRvb1xcbiAzODI6XFx0ICogaGVhdnkgZm9yIGEgZGlhZ25vc3RpYyBwYWNrZXQgZ2VuZXJhdG9yOlxcbiAzODM6XFx0ICpcXG4gMzg0OlxcdCAqIC0gSXQgZGVzdHJveXMgYWxsIG90aGVyIEJNQ1Igc3RhdGUgKHNwZWVkLCBkdXBsZXgsIEFOIGNvbmZpZykuXFxuIDM4NTpcXHQgKiAtIFRoZSA1MDAgbXMgbGluayBwb2xsIGlzIHVubmVjZXNzYXJ5OiB3ZSBhbHJlYWR5IGhhdmUgYSBsaW5rXFxuIDM4NjpcXHQgKiAgIG9yIGFyZSBkZWxpYmVyYXRlbHkgc2V0dGluZyB1cCBhIHRlc3QgY29uZGl0aW9uLlxcbiAzODc6XFx0ICogLSBXZSB3YW50IHRvIG1pbmltaXplIGNoYW5nZXMgdG8gQk1DUiBkdXJpbmcgZGVidWdnaW5nLlxcbiAzODg6XFx0ICpcXG4gMzg5OlxcdCAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbiAzOTA6XFx0ICovXFxuIDM5MTpcXHRzdGF0aWMgc3NpemVfdCBwa2dfZ2VuX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbiAzOTI6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuIDM5MzpcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiAzOTQ6XFx0e1xcbiAzOTU6XFx0XFx0c3RydWN0IHNlcV9maWxlICpzZiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gMzk2OlxcdFxcdHN0cnVjdCBkYXA4MjExcl9wcml2ICpwcml2ID0gc2YtXFx1MDAzZXByaXZhdGU7XFxuIDM5NzpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShwcml2LVxcdTAwM2VkZXYpO1xcbiAzOTg6XFx0XFx0Ym9vbCBlbjtcXG4gMzk5OlxcdFxcdHUxNiBtYXNrLCBzZXQsIHNldF9ibWNyO1xcbiA0MDA6XFx0XFx0aW50IHJldDtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0cmV0ID0ga3N0cnRvYm9vbF9mcm9tX3VzZXIodXNlcl9idWYsIGNvdW50LCBcXHUwMDI2ZW4pO1xcbiA0MDM6XFx0XFx0aWYgKHJldClcXG4gNDA0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDQwNTpcXHRcXG4gNDA2OlxcdFxcdGlmIChlbikge1xcbiA0MDc6XFx0XFx0XFx0c2V0ID0gREFQODIxMVJfUEtHX0dFTl9FTiB8IERBUDgyMTFSX1BLR19DSEtfRU4gfCBEQVA4MjExUl9QS0dfUExfNUFBNTtcXG4gNDA4OlxcdFxcbiA0MDk6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNyY19jb3IpXFxuIDQxMDpcXHRcXHRcXHRcXHRzZXQgfD0gREFQODIxMVJfUEtHX0NPUl9DUkM7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2Vsb29wYmFjaylcXG4gNDEzOlxcdFxcdFxcdFxcdHNldF9ibWNyID0gQk1DUl9MT09QQkFDSztcXG4gNDE0OlxcdFxcdFxcdGVsc2VcXG4gNDE1OlxcdFxcdFxcdFxcdHNldF9ibWNyID0gQk1DUl9BTkVOQUJMRTtcXG4gNDE2OlxcdFxcdH0gZWxzZSB7XFxuIDQxNzpcXHRcXHRcXHRzZXQgPSBEQVA4MjExUl9QS0dfR0VOX01PREUgfCBEQVA4MjExUl9QS0dfR0FURV9FTjtcXG4gNDE4OlxcdFxcdFxcdHNldF9ibWNyID0gQk1DUl9BTkVOQUJMRTtcXG4gNDE5OlxcdFxcdH1cXG4gNDIwOlxcdFxcbiA0MjE6XFx0XFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLIHwgQk1DUl9BTkVOQUJMRSwgc2V0X2JtY3IpO1xcbiA0MjI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDQyMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MjQ6XFx0XFxuIDQyNTpcXHRcXHRtYXNrID0gREFQODIxMVJfUEtHX0dFTl9NQVNLIHwgREFQODIxMVJfUEtHX1BMX01BU0sgfCBEQVA4MjExUl9QS0dfQ09SX0NSQztcXG4gNDI2OlxcdFxcdHJldCA9IGRhcDgyMTFyX21vZGlmeV9leHQocGh5ZGV2LCBEQVA4MjExUl9QS0dDNSwgbWFzaywgc2V0KTtcXG4gNDI3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDQyODpcXHRcXHRcXHRwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0ssIDApO1xcbiA0Mjk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjM6NDkuNDEwMjA2MjUzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Njk4MTYxMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFQODIxMVIgUEhZIERyaXZlciBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgREFQODIxMVIgUEhZIGRyaXZlciwga2VlcGluZyBpbiBtaW5kIHRoZSBjb250ZXh0IG9mIHVzaW5nIHN5emthbGxlci5cblxuRmlyc3QsIEkgc2VlIHRoZSBkcml2ZXIgZXhwb3NlcyBhIGZldyBgZGVidWdmc2AgZmlsZXM6IGBpbmZvYCAocmVhZC1vbmx5KSwgYHBrZ19nZW5gIChyZWFkLXdyaXRlKSwgYW5kIGEgY291cGxlIG9mIGJvb2xzOiBgcGtnX2dlbl9jcmNfY29yYCwgYHBrZ19nZW5fbG9vcGJhY2tgLiBUaGVzZSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBieSBzeXprYWxsZXIgd2hpY2ggaXMgdmVyeSBjb252ZW5pZW50LlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyBmaWd1cmluZyBvdXQgaG93IHRoZSBjb3JlIFBIWSBpbml0aWFsaXphdGlvbiBoYXBwZW5zLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaXMgYGRhcDgyMTFyX2NvbmZpZ19pbml0YC4gSXQncyBjYWxsZWQgYnkgYHBoeV9pbml0X2h3YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYHBoeV9hdHRhY2hfZGlyZWN0YC4gYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyB0cmlnZ2VyZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGF0dGFjaGVzIHRvIHRoZSBQSFkuIElmIEkgY2FuIGdldCBhIFVTQiBldGhlcm5ldCBkZXZpY2UgdG8gZW11bGF0ZSBhIFBIWSBjb25uZWN0aW9uLCBJIGNhbiB0cmlnZ2VyIGBkYXA4MjExcl9jb25maWdfaW5pdGAuIFRoYXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXRoLCBzbyBpdCdzIGRlZmluYXRlbHkgb24gdGhlIGxpc3QuXG5cbkFsb25nIHdpdGggdGhlIGluaXRpYWxpemF0aW9uLCB0aGUgYHBrZ19nZW5fd3JpdGVgIGFuZCBgaW5mb19zaG93YCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgYGRlYnVnZnNgLiBcblxuSSd2ZSBhbHNvIHNjYW5uZWQgdGhyb3VnaCB0aGUgY29kZSBmb3IgaGVscGVyIGZ1bmN0aW9ucywgdGhlcmUncyBgZGFwODIxMXJfcmVhZF9leHRgLCBgZGFwODIxMXJfbW9kaWZ5X2V4dGAsIGBkYXA4MjExcl9kZWxheV9wc190b19zZWxgLCBhbmQgYGRhcDgyMTFyX2dldF9yZ21paV9kZWxheWAuIFdoaWxlIGludGVyZXN0aW5nLCB0aGV5IGFyZW4ndCB0aGUgcHJpbWFyeSB0YXJnZXRzLlxuXG5TbywgdGhlIGZvY3VzIHBvaW50cyBhcmU6XG5cbiogICBgZGFwODIxMXJfY29uZmlnX2luaXRgXG4qICAgYHBrZ19nZW5fd3JpdGVgXG4qICAgYGluZm9fc2hvd2BcbiogICBgcGtnX2dlbl9zaG93YFxuXG5gaW5mb19zaG93YCBhbmQgYHBrZ19nZW5fc2hvd2AgYXBwZWFyIHRvIGJlIHNpbXBsZSByZWdpc3RlciByZWFkcyBhbmQgcHJpbnRzLiBOb3Qgc3VwZXIgY29tcGxleCwgYnV0IHBhcnQgb2YgdGhlIGRyaXZlcidzIG9wZXJhdGlvbi4gYHBrZ19nZW5fd3JpdGVgIGlzIGRlZmluaXRlbHkgbW9yZSBpbnRlcmVzdGluZywgaXQncyBtb2RpZnlpbmcgUEhZIHJlZ2lzdGVycy4gVGhlbiB0aGVyZSBpcyBgZGFwODIxMXJfY29uZmlnX2luaXRgLCB0aGUgUEhZIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uXG5cbkxldCdzIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19EQVA4MjExUl9QSFlgIGlzIHRoZSBwcmltYXJ5IG9uZSwgb2YgY291cnNlLiBXYWl0LCBgQ09ORklHX0RFQlVHX0ZTYCBpcyBuZWVkZWQgZm9yIHRoZSBkZWJ1Z2ZzIGZpbGVzLiBUaGFua2Z1bGx5IHN5emthbGxlciBoYXMgYENPTkZJR19ERUJVR19GU2AgZW5hYmxlZCwgc28gdGhhdCdzIHRha2VuIGNhcmUgb2YuXG5cbkEgZG91YmxlIGNoZWNrIG9mIHRoZSBLY29uZmlnIHJldmVhbHMgYSBkZXBlbmRlbmN5IG9uIGBPRmAgKE9wZW4gRmlybXdhcmUsIGFrYSBEZXZpY2UgVHJlZSkuIFRoYXQncyBhIGtleSBwb2ludC4gRG9lcyB0aGlzIG1lYW4gaXQncyBzdHJpY3RseSBhIERldmljZSBUcmVlLWJhc2VkIHByb2JlPyBObywgYnV0IHRoZSBjb2RlIGRvZXMgdXNlIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAgYW5kIGBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2xgLCB3aGljaCBoYXZlIHN0dWJzIHdoZW4gT0YgaXNuJ3QgZW5hYmxlZC4gU2luY2UgaXQgZGVwZW5kcyBvbiBPRiwgdGhleSB3aWxsIGJlIGJ1aWx0IG9ubHkgaWYgT0YgaXMgZW5hYmxlZC4gSSBrbm93IHN5emthbGxlciB0ZXN0cyBvbiB2YXJpb3VzIGFyY2hpdGVjdHVyZXMsIGluY2x1ZGluZyB4ODZcXF82NCBhbmQgYXJtNjQsIGFuZCBvZnRlbiBgQ09ORklHX09GYCBpcyBlbmFibGVkIChlc3BlY2lhbGx5IG9uIGFybTY0IGFuZCBzb21ldGltZXMgb24geDg2XFxfNjQgZm9yIHRlc3RpbmcpLlxuXG5XaGF0IGFib3V0IHRoZSBEZXZpY2UgVHJlZSBkZXBlbmRlbmN5IGluIG1vcmUgZGV0YWlsPyBTaW5jZSB0aGUgUEhZIGlzIHByb2JlZCB2aWEgVVNCIE1ESU8gc2NhbiwgdGhlcmUgd29uJ3QgYmUgYW4gYG9mX25vZGVgIGF0dGFjaGVkIHRvIGBwaHlkZXYtXHUwMDNlbWRpby5kZXZgLiBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAgZnVuY3Rpb25zIHdpbGwgcmV0dXJuIGAtRUlOVkFMYCBhbmQgdGhlIGRyaXZlciB3aWxsIHVzZSBkZWZhdWx0IHZhbHVlcy4gVGhpcyBpcyBmaW5lOyBpdCdzIGp1c3QgYSBkaWZmZXJlbnQgY29kZXBhdGguXG5cbkFueSBvdGhlciBjb25maWd1cmF0aW9ucz8gTm8gYENPTkZJR19ORVRXT1JLX1BIWV9USU1FU1RBTVBJTkdgIG9yIGBDT05GSUdfTUFDU0VDYC5cblxuVGltZSB0byByZXZpZXcgdGhlIGZvY3VzIHBvaW50cyBhZ2FpbiwgdGFraW5nIGludG8gYWNjb3VudCBob3cgdGhlIGRyaXZlciBpcyBhY3R1YWxseSB1c2VkOlxuXG4qICAgYGRhcDgyMTFyX2NvbmZpZ19pbml0YCAoUEhZIGluaXRpYWxpemF0aW9uKS5cbiogICBgcGtnX2dlbl93cml0ZWAgKGRlYnVnZnMgYWNjZXNzIGZvciByZWdpc3RlciB3cml0ZXMpLlxuKiAgIGBkYXA4MjExcl9wcm9iZWAgKGRldmljZSBwcm9iZSkuXG5cbkknbGwgaW5jbHVkZSB0aG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NDIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjQ6MDQuMTA4MzcwODdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTA2OTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljLiogZGFwODIxMXJfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jPTU1PXN0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNTktXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6NjA6c3RhdGljIGNvbnN0IHN0cnVjdCBkYXA4MjExcl9kZWxheV9jb25maWcgZGVsYXlfY29uZmlnW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNjEtXFx0eyAgIDAsIDB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9ODE9c3RydWN0IGRhcDgyMTFyX3ByaXYge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtOTgtICovXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6OTk6c3RhdGljIHUxNiBkYXA4MjExcl9kZWxheV9wc190b19zZWwoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBzKVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTEwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0xMzctICovXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6MTM4OnN0YXRpYyBpbnQgZGFwODIxMXJfcmVhZF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZylcXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0xMzkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTY1LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjE2NjpzdGF0aWMgaW50IGRhcDgyMTFyX21vZGlmeV9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IG1hc2ssIHUxNiBzZXQpXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMTY3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTE5MC0gKi9cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzoxOTE6c3RhdGljIHUzMiBkYXA4MjExcl9nZXRfcmdtaWlfZGVsYXkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTE5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0yMTYtICovXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6MjE3OnN0YXRpYyBpbnQgZGFwODIxMXJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0yMTgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM9NDM0PURFRklORV9TSE9XX1NUT1JFX0FUVFJJQlVURShwa2dfZ2VuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ0Ny0gKi9cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo0NDg6c3RhdGljIHZvaWQgZGFwODIxMXJfZGVidWdfaW5pdChzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00NDkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDcwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjQ3MTpzdGF0aWMgdm9pZCBkYXA4MjExcl9kZWJ1Z19yZW1vdmUoc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTQ3Ni0jZWxzZSAvKiAhQ09ORklHX0RFQlVHX0ZTICovXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6NDc3OnN0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX2luaXQoc3RydWN0IGRhcDgyMTFyX3ByaXYgKnByaXYpIHt9XFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6NDc4OnN0YXRpYyB2b2lkIGRhcDgyMTFyX2RlYnVnX3JlbW92ZShzdHJ1Y3QgZGFwODIxMXJfcHJpdiAqcHJpdikge31cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy00NzktI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDg5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jOjQ5MDpzdGF0aWMgaW50IGRhcDgyMTFyX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNDkxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTUxNC0gKi9cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1MTU6c3RhdGljIHZvaWQgZGFwODIxMXJfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtNTE2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTUxOS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1MjA6c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRhcDgyMTFyX2RyaXZlcltdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTUyMS1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYz01Mzg9TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTUzOS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYzo1NDA6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBkYXA4MjExcl90YltdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTU0MS1cXHR7IERBUDgyMTFSX1BIWV9JRCwgREFQODIxMVJfUEhZX0lEX01BU0sgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjQ6MDQuMzc3NDQ3MDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIxNjM2ODkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgREFQODIxMVIgUEhZIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSd2ZSBnb3QgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciwgdGhlIERBUDgyMTFSKEkpLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZnV6emluZyBhcHByb2FjaC4gTG9va2luZyBhdCB0aGUgZnVuY3Rpb25zLCBJJ20gdGhpbmtpbmcgSSdsbCBmb2N1cyBvbiBgZGFwODIxMXJfY29uZmlnX2luaXRgLCBgcGtnX2dlbl93cml0ZWAsIGBkYXA4MjExcl9wcm9iZWAsIGBpbmZvX3Nob3dgLCBhbmQgYHBrZ19nZW5fc2hvd2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgZGVidWcgaW50ZXJmYWNlcy5cblxuTm93LCBJIHNlZSB0aGF0IGBEQVA4MjExUl9QSFlgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBzbyB0aGF0J3MgYSBnbyBmb3IgYEVuYWJsZUNvbmZpZ3NgLiBUaGlzIGlzIGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5UaGUgYmlnZ2VyIHF1ZXN0aW9uIGlzLCAqc2hvdWxkKiBJIGZ1enogdGhpcz8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIG5ldyBQSFkgZHJpdmVyLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIFVTQiBNRElPIHNjYW5uaW5nIGFuZCB2aWEgZGVidWdmcyBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC4gVGhlIGRyaXZlciBoYXMgYGNvbmZpZ19pbml0YCB0byBzZXQgdXAgdGhlIGRyaXZlciBhbmQgaXQgaW1wbGVtZW50cyBkZWJ1Z2ZzIG9wZXJhdGlvbnMsIGFsbCBvZiB3aGljaCByZXByZXNlbnQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy5cblxuU28sIGxldCdzIHN1bW1hcml6ZSB0aGUgbG9naWMgYmVoaW5kIHRoZSBmdXp6aW5nIGFwcHJvYWNoOiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciB0aGUgREFQVSBUZWxlY29tIERBUDgyMTFSKEkpLiBJdCBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIEV0aGVybmV0IGRldmljZS4gT25jZSBwcm9iZWQsIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBhbmQgZGVidWdmcyBvcGVyYXRpb25zIGFyZSByZWFkeSB0byBiZSB1c2VkLiBUaGlzIG1ha2VzIGZvciBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9sczogYGRhcDgyMTFyX3Byb2JlYCwgYGRhcDgyMTFyX2NvbmZpZ19pbml0YCwgYHBrZ19nZW5fd3JpdGVgLCBgaW5mb19zaG93YCwgYW5kIGBwa2dfZ2VuX3Nob3dgLiBUaGUgYERBUDgyMTFSX1BIWWAgY29uZmlndXJhdGlvbiBpcyBuZWNlc3NhcnkgdG8gZ2V0IHRoaXMgZ29pbmcuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgcGxhbi4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgZ2V0IHRoaXMgcHJvY2VzcyBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjkxMiwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTc6MjQ6MTMuNTkzODE5MjU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTI3MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQVA4MjExUl9QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXA4MjExcl9wcm9iZVwiLFxuICAgIFwiZGFwODIxMXJfY29uZmlnX2luaXRcIixcbiAgICBcInBrZ19nZW5fd3JpdGVcIixcbiAgICBcImluZm9fc2hvd1wiLFxuICAgIFwicGtnX2dlbl9zaG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBEQVBVIFRlbGVjb20gREFQODIxMVIoSSkuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBFdGhlcm5ldCBkZXZpY2UgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgREFQODIxMVIgUEhZIElELiBPbmNlIHByb2JlZCwgdGhlIGRyaXZlcidzIGBjb25maWdfaW5pdGAgYW5kIGRlYnVnZnMgb3BlcmF0aW9ucyAoYGluZm9fc2hvd2AsIGBwa2dfZ2VuX3Nob3dgLCBgcGtnX2dlbl93cml0ZWApIGNhbiBiZSBleGVyY2lzZWQgYnkgdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBUDgyMTFSX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhcDgyMTFyX3Byb2JlXCIsXG4gICAgXCJkYXA4MjExcl9jb25maWdfaW5pdFwiLFxuICAgIFwicGtnX2dlbl93cml0ZVwiLFxuICAgIFwiaW5mb19zaG93XCIsXG4gICAgXCJwa2dfZ2VuX3Nob3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIERBUFUgVGVsZWNvbSBEQVA4MjExUihJKS4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIEV0aGVybmV0IGRldmljZSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgcmVzcG9uZHMgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBEQVA4MjExUiBQSFkgSUQuIE9uY2UgcHJvYmVkLCB0aGUgZHJpdmVyJ3MgYGNvbmZpZ19pbml0YCBhbmQgZGVidWdmcyBvcGVyYXRpb25zIChgaW5mb19zaG93YCwgYHBrZ19nZW5fc2hvd2AsIGBwa2dfZ2VuX3dyaXRlYCkgY2FuIGJlIGV4ZXJjaXNlZCBieSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow94j7j[1] Phase: Succeeded StartedAt: 2026-07-13 17:26:08 +0000 UTC FinishedAt: 2026-07-13 17:26:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 17:26:08 +0000 UTC FinishedAt: 2026-07-13 17:26:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2] Phase: Succeeded StartedAt: 2026-07-13 17:26:08 +0000 UTC FinishedAt: 2026-07-13 19:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 17:26:08 +0000 UTC FinishedAt: 2026-07-13 19:41:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 17:26:08 +0000 UTC FinishedAt: 2026-07-13 17:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 17:26:08 +0000 UTC FinishedAt: 2026-07-13 17:26:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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-workflow94j7j/series-workflow94j7j-convert-artifact-3352555897/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 17:26:18 +0000 UTC FinishedAt: 2026-07-13 18:03:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 17:26:18 +0000 UTC FinishedAt: 2026-07-13 18:03:58 +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:*3280c4f5-a056-401e-a2b4-a52eb20268b7,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-workflow94j7j/series-workflow94j7j-convert-artifact-3352555897/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": "eb9cea9b-2a78-4763-b082-6d1a316baa8b", "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-workflow94j7j/series-workflow94j7j-build-action-1710000791/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 17:26:18 +0000 UTC FinishedAt: 2026-07-13 18:03:48 +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:*3280c4f5-a056-401e-a2b4-a52eb20268b7,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-workflow94j7j/series-workflow94j7j-convert-artifact-3352555897/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": "eb9cea9b-2a78-4763-b082-6d1a316baa8b", "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-workflow94j7j/series-workflow94j7j-build-action-1710000791/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:03:58 +0000 UTC FinishedAt: 2026-07-13 18:03:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:03:58 +0000 UTC FinishedAt: 2026-07-13 18:03:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:03:58 +0000 UTC FinishedAt: 2026-07-13 18:04:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:03:58 +0000 UTC FinishedAt: 2026-07-13 18:04:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-workflow94j7j/series-workflow94j7j-convert-artifact-4165875788/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:04:08 +0000 UTC FinishedAt: 2026-07-13 18:06:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:04:08 +0000 UTC FinishedAt: 2026-07-13 18:06:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eb9cea9b-2a78-4763-b082-6d1a316baa8b,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-workflow94j7j/series-workflow94j7j-build-action-1710000791/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-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:06:18 +0000 UTC FinishedAt: 2026-07-13 18:06:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:06:18 +0000 UTC FinishedAt: 2026-07-13 18:06:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:06:18 +0000 UTC FinishedAt: 2026-07-13 18:40:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:06:18 +0000 UTC FinishedAt: 2026-07-13 18:40:40 +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:*3280c4f5-a056-401e-a2b4-a52eb20268b7,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-workflow94j7j/series-workflow94j7j-convert-artifact-4165875788/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": "0a1c3d2f-0cdb-4146-8b31-8fba4c1f4157", "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-workflow94j7j/series-workflow94j7j-build-action-3668477544/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:06:18 +0000 UTC FinishedAt: 2026-07-13 18:40:30 +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:*3280c4f5-a056-401e-a2b4-a52eb20268b7,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-workflow94j7j/series-workflow94j7j-convert-artifact-4165875788/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": "0a1c3d2f-0cdb-4146-8b31-8fba4c1f4157", "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-workflow94j7j/series-workflow94j7j-build-action-3668477544/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:40:40 +0000 UTC FinishedAt: 2026-07-13 18:40:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:40:40 +0000 UTC FinishedAt: 2026-07-13 18:40:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:40:40 +0000 UTC FinishedAt: 2026-07-13 18:42:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:40:40 +0000 UTC FinishedAt: 2026-07-13 18:42:46 +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:*0a1c3d2f-0cdb-4146-8b31-8fba4c1f4157,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-workflow94j7j/series-workflow94j7j-build-action-3668477544/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-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:42:56 +0000 UTC FinishedAt: 2026-07-13 19:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:42:56 +0000 UTC FinishedAt: 2026-07-13 19:41:33 +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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"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:*eb9cea9b-2a78-4763-b082-6d1a316baa8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0a1c3d2f-0cdb-4146-8b31-8fba4c1f4157,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-workflow94j7j/series-workflow94j7j-build-action-1710000791/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-workflow94j7j/series-workflow94j7j-build-action-3668477544/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:42:56 +0000 UTC FinishedAt: 2026-07-13 18:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:42:56 +0000 UTC FinishedAt: 2026-07-13 18:43:05 +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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"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-workflow94j7j/series-workflow94j7j-convert-artifact-4218523573/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:42:56 +0000 UTC FinishedAt: 2026-07-13 18:42:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:42:56 +0000 UTC FinishedAt: 2026-07-13 18:42:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:42:56 +0000 UTC FinishedAt: 2026-07-13 18:42:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:43:17 +0000 UTC FinishedAt: 2026-07-13 19:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94j7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"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":["dap8211r_probe","dap8211r_config_init","pkg_gen_write","info_show","pkg_gen_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAP8211R_PHY"],"series_id":"d6250d5c-783d-426b-b32c-b714fbd04318","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-07-13 18:43:17 +0000 UTC FinishedAt: 2026-07-13 19:41:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eb9cea9b-2a78-4763-b082-6d1a316baa8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0a1c3d2f-0cdb-4146-8b31-8fba4c1f4157,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-workflow94j7j/series-workflow94j7j-build-action-1710000791/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-workflow94j7j/series-workflow94j7j-build-action-3668477544/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-workflow94j7j/series-workflow94j7j-convert-artifact-4218523573/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,}