Name: series-workflowd4f6b Phase: Succeeded StartedAt: 2026-07-13 19:07:38 +0000 UTC FinishedAt: 2026-07-13 22:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[0] Phase: Succeeded StartedAt: 2026-07-13 19:07:38 +0000 UTC FinishedAt: 2026-07-13 19:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 19:07:38 +0000 UTC FinishedAt: 2026-07-13 19:31:37 +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": "8522d806d84e2c3816c275ae6dd79e124c1b3dac", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_ZTE", "DINGHAI", "DINGHAI_PF" ], "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": "8522d806d84e2c3816c275ae6dd79e124c1b3dac", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_ZTE", "DINGHAI", "DINGHAI_PF" ], "series_id": "c7b29c60-315f-46f4-bb7d-ec3c87abc520" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dh_pf_probe", "dh_pf_remove", "dh_pf_pci_init", "dh_pf_pci_close" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfWlRFJiMzNDssCiAgICAmIzM0O0RJTkdIQUkmIzM0OywKICAgICYjMzQ7RElOR0hBSV9QRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RoX3BmX3Byb2JlJiMzNDssCiAgICAmIzM0O2RoX3BmX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtkaF9wZl9wY2lfaW5pdCYjMzQ7LAogICAgJiMzNDtkaF9wZl9wY2lfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIFBDSSBwcm9iZSBmdW5jdGlvbiB3aGljaCBpbml0aWFsaXplcyB0aGUgZGV2aWNlLCBtYXBzIFBDSSBtZW1vcnksIGFuZCByZWdpc3RlcnMgYSBkZXZsaW5rIGluc3RhbmNlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIGZ1enplZCB1c2luZyB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjlkYmE3MWEzYWFlMzUzYzU0NjQ0YjBmZjRlNGU4MmNlZWQ1NmZmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDE5OjMwOjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDJmYjFjNzVhZmQxNjM4Li43MzY5MmIwOWJmN2JhYiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTI5NDQwLDYgJiM0MzsyOTQ0MCwxMiBAQCBTOlx0TWFpbnRhaW5lZFxuIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Rpd2FpL3NvdW5kLmdpdFxuIEY6XHRzb3VuZC9oZGEvY29kZWNzL3NlbmFyeXRlY2guY1xuIFxuJiM0MztaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVJcbiYjNDM7TTpcdEp1bnlhbmcgSGFuIFx1MDAzY2hhbi5qdW55YW5nQHp0ZS5jb20uY25cdTAwM2VcbiYjNDM7TDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9cbiYjNDM7XG4gVEhFIFJFU1RcbiBNOlx0TGludXMgVG9ydmFsZHMgXHUwMDNjdG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbiBMOlx0bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXG5pbmRleCBiOGY3MGUyYTE3NjNhZC4uYzJiNjk5NmIwY2ZlMWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXG5AQCAtMTg4LDUgJiM0MzsxODgsNiBAQCBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCYjMzQ7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXCYjMzQ7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXCYjMzQ7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS9LY29uZmlnXCYjMzQ7XG4mIzQzO3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1wmIzM0O1xuIFxuIGVuZGlmICMgRVRIRVJORVRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG5pbmRleCA1NzM0NGZlYzZjZTA0Ny4uYTM0YmNiZDRkZjRlOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbkBAIC0xMDQsMyAmIzQzOzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgJiM0Mzs9IHhpcmNvbS9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgJiM0Mzs9IHN5bm9wc3lzL1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPKSAmIzQzOz0gcGVuc2FuZG8vXG4gb2JqLSQoQ09ORklHX09BX1RDNikgJiM0Mzs9IG9hX3RjNi5vXG4mIzQzO29iai0kKENPTkZJR19ORVRfVkVORE9SX1pURSkgJiM0Mzs9IHp0ZS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2EyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMjAgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBaVEUgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiYjNDM7I1xuJiM0MztcbiYjNDM7Y29uZmlnIE5FVF9WRU5ET1JfWlRFXG4mIzQzOyAgICBib29sIFwmIzM0O1pURSBkZXZpY2VzXCYjMzQ7XG4mIzQzOyAgICBkZWZhdWx0IHlcbiYjNDM7ICAgIGhlbHBcbiYjNDM7ICAgICAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4mIzQzOyAgICAgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuJiM0MzsgICAgICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXG4mIzQzOyAgICAgIHRoZSBxdWVzdGlvbnMgYWJvdXQgWnRlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkXG4mIzQzOyAgICAgIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4mIzQzO1xuJiM0MztpZiBORVRfVkVORE9SX1pURVxuJiM0MztcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcJiMzNDtcbiYjNDM7XG4mIzQzO2VuZGlmICMgTkVUX1ZFTkRPUl9aVEVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uY2Q5OTI5YjYxNTU5YzZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNiBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIE1ha2VmaWxlIGZvciB0aGUgWlRFIGRldmljZSBkcml2ZXJzXG4mIzQzOyNcbiYjNDM7XG4mIzQzO29iai0kKENPTkZJR19ESU5HSEFJKSAmIzQzOz0gZGluZ2hhaS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xMjFiZTNiZjc3MDdmZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMzQgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvblxuJiM0MzsjXG4mIzQzO1xuJiM0Mztjb25maWcgRElOR0hBSVxuJiM0MzsgICAgYm9vbCBcJiMzNDtaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjNDM7ICAgIGRlcGVuZHMgb24gUENJXG4mIzQzOyAgICBzZWxlY3QgTkVUX0RFVkxJTktcbiYjNDM7ICAgIGhlbHBcbiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy5cbiYjNDM7XG4mIzQzOyAgICAgIERpbmdIYWkgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIEV0aGVybmV0IGNvbnRyb2xsZXIgdGhhdCBzdXBwb3J0c1xuJiM0MzsgICAgICBtdWx0aXBsZSBmZWF0dXJlcyBpbmNsdWRpbmcgaGFyZHdhcmUgb2ZmbG9hZGluZywgU1ItSU9WLCBhbmRcbiYjNDM7ICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLlxuJiM0MztcbiYjNDM7ICAgICAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gc2VsZWN0IHNwZWNpZmljIGRyaXZlciB2YXJpYW50cyBiZWxvdy5cbiYjNDM7XG4mIzQzOyAgICAgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzQzO1xuJiM0MztpZiBESU5HSEFJXG4mIzQzO1xuJiM0Mztjb25maWcgRElOR0hBSV9QRlxuJiM0MzsgICAgdHJpc3RhdGUgXCYjMzQ7WlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXJcJiMzNDtcbiYjNDM7ICAgIGhlbHBcbiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgUENJIEV4cHJlc3MgRXRoZXJuZXRcbiYjNDM7ICAgICAgYWRhcHRlcnMgKFBGKS5cbiYjNDM7XG4mIzQzOyAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiYjNDM7ICAgICAgd2lsbCBiZSBuYW1lZCBkaW5naGFpMTBlLlxuJiM0MztcbiYjNDM7ICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjNDM7XG4mIzQzO2VuZGlmICMgRElOR0hBSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjU1YThkZTUxOGJlYjNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSwxMCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIE1ha2VmaWxlIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcbiYjNDM7I1xuJiM0MztcbiYjNDM7Y2NmbGFncy15ICYjNDM7PSAtSSQoc3JjKVxuJiM0MztcbiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUlfUEYpICYjNDM7PSBkaW5naGFpMTBlLm9cbiYjNDM7ZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cbiYjNDM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTA2N2M3M2ZlZDMzY2Ncbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbkBAIC0wLDAgJiM0MzsxLDcxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnNcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fREhfUVVFVUVfSF9fXG4mIzQzOyNkZWZpbmUgX19ESF9RVUVVRV9IX19cbiYjNDM7XG4mIzQzOy8qIFZlY3RvciB2YWx1ZSB1c2VkIHRvIGRpc2FibGUgTVNJIGZvciBxdWV1ZSAqL1xuJiM0MzsjZGVmaW5lIFpYREhfTVNJX05PX1ZFQ1RPUiAgICAgIDB4ZmZcbiYjNDM7XG4mIzQzOy8qIFN0YXR1cyBieXRlIGZvciBndWVzdCB0byByZXBvcnQgcHJvZ3Jlc3MsIGFuZCBzeW5jaHJvbml6ZSBmZWF0dXJlcyAqL1xuJiM0MzsvKiBXZSBoYXZlIHNlZW4gZGV2aWNlIGFuZCBwcm9jZXNzZWQgZ2VuZXJpYyBmaWVsZHMgKi9cbiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX0FDS05PV0xFREdFIDFcbiYjNDM7LyogV2UgaGF2ZSBmb3VuZCBhIGRyaXZlciBmb3IgdGhlIGRldmljZS4gKi9cbiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX0RSSVZFUiAgICAgIDJcbiYjNDM7LyogRHJpdmVyIGhhcyB1c2VkIGl0cyBwYXJ0cyBvZiB0aGUgY29uZmlnLCBhbmQgaXMgaGFwcHkgKi9cbiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX0RSSVZFUl9PSyAgIDRcbiYjNDM7LyogRHJpdmVyIGhhcyBmaW5pc2hlZCBjb25maWd1cmluZyBmZWF0dXJlcyAqL1xuJiM0MzsjZGVmaW5lIFpYREhfQ09ORklHX1NfRkVBVFVSRVNfT0sgOFxuJiM0MzsvKiBEZXZpY2UgZW50ZXJlZCBpbnZhbGlkIHN0YXRlLCBkcml2ZXIgbXVzdCByZXNldCBpdCAqL1xuJiM0MzsjZGVmaW5lIFpYREhfQ09ORklHX1NfTkVFRFNfUkVTRVQgMHg0MFxuJiM0MzsvKiBXZSYjMzk7dmUgZ2l2ZW4gdXAgb24gdGhpcyBkZXZpY2UgKi9cbiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX0ZBSUxFRCAgICAgIDB4ODBcbiYjNDM7XG4mIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi9cbiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCB7XG4mIzQzO1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuJiM0MztcdF9fdTggY2FwX25leHQ7XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi9cbiYjNDM7XHRfX3U4IGNhcF9sZW47XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBjYXBhYmlsaXR5IGxlbmd0aCAqL1xuJiM0MztcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbiYjNDM7XHRfX3U4IGJhcjtcdFx0LyogV2hlcmUgdG8gZmluZCBpdC4gKi9cbiYjNDM7XHRfX3U4IGlkO1x0XHQvKiBNdWx0aXBsZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZSAqL1xuJiM0MztcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4mIzQzO1x0X19sZTMyIG9mZnNldDtcdFx0LyogT2Zmc2V0IHdpdGhpbiBiYXIuICovXG4mIzQzO1x0X19sZTMyIGxlbmd0aDtcdFx0LyogTGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUsIGluIGJ5dGVzLiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogRmllbGRzIGluIFpYREhfUEZfUENJX0NBUF9DT01NT05fQ0ZHOiAqL1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4mIzQzO1x0LyogQWJvdXQgdGhlIHdob2xlIGRldmljZS4gKi9cbiYjNDM7XHRfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbnVtX3F1ZXVlcztcdFx0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X191OCBkZXZpY2Vfc3RhdHVzO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcbiYjNDM7XHQvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX3NpemU7XHRcdC8qIHJlYWQtd3JpdGUsIHBvd2VyIG9mIDIuICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX21zaXhfdmVjdG9yO1x0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfbm90aWZ5X29mZjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV9kZXNjX2xvO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfbG87XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV91c2VkX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCBjYXA7XG4mIzQzO1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTlmZDQ3MmE4NmZkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5AQCAtMCwwICYjNDM7MSw2NDIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9wZi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2RoX3F1ZXVlLmhcJiMzNDtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZGhfcGZfZGV2bGlua19vcHMgPSB7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkaF9wZl9wY2lfdGFibGVbXSA9IHtcbiYjNDM7XHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfUEZfREVWSUNFX0lEKSB9LFxuJiM0MztcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGhfcGZfcGNpX3RhYmxlKTtcbiYjNDM7XG4mIzQzO3ZvaWQgKmRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYpXG4mIzQzO1x0XHRkaF9kZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1x0cmV0dXJuIHByaXY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZShkaF9kZXYtXHUwMDNlcHJpdik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZGhfcGZfcGNpX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBjaV9zZXRfZHJ2ZGF0YShkZXYtXHUwMDNlcGRldiwgZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi1cdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSyg2NCkpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LVx1MDAzZWRldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7ZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIGVycl9wY2k7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKGRldi1cdTAwM2VwZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgcGNpX3NlbGVjdF9iYXJzKGRldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtkaC1wZlwmIzM0Oyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zIGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2k7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY2lfc2V0X21hc3RlcihkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0cmV0ID0gcGNpX3NhdmVfc3RhdGUoZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGNpX3NhdmVfc3RhdGUgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKGRldi1cdTAwM2VwZGV2LCAwKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdID1cbiYjNDM7XHRcdGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi1cdTAwM2VwZGV2LCAwKSxcbiYjNDM7XHRcdFx0cGNpX3Jlc291cmNlX2xlbihkZXYtXHUwMDNlcGRldiwgMCkpO1xuJiM0MztcdGlmICghcGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2RoIHBmIHBjaSBpb3JlbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3BjaV9zYXZlX3N0YXRlOlxuJiM0MztcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LVx1MDAzZXBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoZGV2LVx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XG4mIzQzO2Vycl9wY2k6XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKGRldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlvdW5tYXAocGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pO1xuJiM0MztcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LVx1MDAzZXBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoZGV2LVx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKGRldi1cdTAwM2VwZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXG4mIzQzO1x0XHRcdFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycylcbiYjNDM7e1xuJiM0MztcdGludCBwb3M7XG4mIzQzO1x0dTggdHlwZTtcbiYjNDM7XHR1OCBiYXI7XG4mIzQzO1xuJiM0MztcdGZvciAocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOyBwb3MgXHUwMDNlIDA7XG4mIzQzO1x0ICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLCBQQ0lfQ0FQX0lEX1ZORFIpKSB7XG4mIzQzO1x0XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgcG9zICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0Y2ZnX3R5cGUpLCBcdTAwMjZ0eXBlKTtcbiYjNDM7XHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXHUwMDI2YmFyKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBpZ25vcmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi9cbiYjNDM7XHRcdGlmIChiYXIgXHUwMDNlIFpYREhfUEZfTUFYX0JBUl9WQUwpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eXBlID09IGNmZ190eXBlKSB7XG4mIzQzO1x0XHRcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcdTAwMjYgaW9yZXNvdXJjZV90eXBlcykge1xuJiM0MztcdFx0XHRcdCpiYXJzIHw9ICgxIFx1MDAzY1x1MDAzYyBiYXIpO1xuJiM0MztcdFx0XHRcdHJldHVybiBwb3M7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIGludCBvZmYsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgc3RhcnQsIHUzMiBzaXplLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdHZvaWQgX19pb21lbSAqcDtcbiYjNDM7XHR1MzIgb2Zmc2V0O1xuJiM0MztcdHUzMiBsZW5ndGg7XG4mIzQzO1x0dTggYmFyO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuJiM0MztcdFx0XHQgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcdTAwMjZiYXIpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuJiM0MztcdFx0XHQgICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbiYjNDM7XHRcdFx0XHRcdFx0b2Zmc2V0KSwgXHUwMDI2b2Zmc2V0KTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4mIzQzO1x0XHRcdFx0XHRcdGxlbmd0aCksIFx1MDAyNmxlbmd0aCk7XG4mIzQzO1xuJiM0MztcdGlmIChiYXJfb2ZmKVxuJiM0MztcdFx0KmJhcl9vZmYgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChsZW5ndGggXHUwMDNjPSBzdGFydCkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFx1MDAzZSV1IGV4cGVjdGVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bGVuZ3RoLCBzdGFydCk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChsZW5ndGggLSBzdGFydCBcdTAwM2MgbWlubGVuKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlPSV6dSBleHBlY3RlZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGxlbmd0aCwgbWlubGVuKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVuZ3RoIC09IHN0YXJ0O1xuJiM0MztcdGlmIChzdGFydCAmIzQzOyBvZmZzZXQgXHUwMDNjIG9mZnNldCkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDttYXAgd3JhcC1hcm91bmQgJXUmIzQzOyV1XFxuXCYjMzQ7LCBzdGFydCwgb2Zmc2V0KTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBzdGFydDtcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAyNiAoYWxpZ24gLSAxKSkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtvZmZzZXQgJXUgbm90IGFsaWduZWQgdG8gJXVcXG5cJiMzNDssIG9mZnNldCwgYWxpZ24pO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGVuZ3RoIFx1MDAzZSBzaXplKVxuJiM0MztcdFx0bGVuZ3RoID0gc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxlbilcbiYjNDM7XHRcdCpsZW4gPSBsZW5ndGg7XG4mIzQzO1xuJiM0MztcdGlmIChtaW5sZW4gJiM0Mzsgb2Zmc2V0IFx1MDAzYyBtaW5sZW4gfHxcbiYjNDM7XHQgICAgbWlubGVuICYjNDM7IG9mZnNldCBcdTAwM2UgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFwmIzM0O21hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bWlubGVuLCBvZmZzZXQsIGJhcixcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cCA9IHBjaV9pb21hcF9yYW5nZShwZGV2LCBiYXIsIG9mZnNldCwgbGVuZ3RoKTtcbiYjNDM7XHRpZiAoIXApIHtcbiYjNDM7XHRcdGRldl9lcnIoZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7dW5hYmxlIHRvIG1hcCBjdXN0b20gcXVldWUgJXVAJXUgb24gYmFyICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRsZW5ndGgsIG9mZnNldCwgYmFyKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHBhKSB7XG4mIzQzO1x0XHQqcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSAmIzQzOyBvZmZzZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdGludCBjb21tb247XG4mIzQzO1xuJiM0MztcdC8qIGNoZWNrIGZvciBhIGNvbW1vbiBjb25maWc6IGlmIG5vdCwgdXNlIGxlZ2FjeSBtb2RlIChiYXIgMCkuICovXG4mIzQzO1x0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxuJiM0MztcdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXG4mIzQzO1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4mIzQzO1x0aWYgKCFjb21tb24pIHtcbiYjNDM7XHRcdGRldl9lcnIoZGhfZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0XCYjMzQ7bWlzc2luZyBjYXBhYmlsaXRpZXMsIGxlYXZpbmcgZm9yIGxlZ2FjeSBkcml2ZXJcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZl9kZXYtXHUwMDNlY29tbW9uID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eShkaF9kZXYsIGNvbW1vbixcbiYjNDM7XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbiYjNDM7XHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsXG4mIzQzO1x0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXG4mIzQzO1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICghcGZfZGV2LVx1MDAzZWNvbW1vbikge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwZl9kZXYtXHUwMDNlY29tbW9uIGlzIG51bGxcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdHUzMiBub3RpZnlfbGVuZ3RoO1xuJiM0MztcdHUzMiBub3RpZnlfb2Zmc2V0O1xuJiM0MztcdGludCBub3RpZnk7XG4mIzQzO1xuJiM0MztcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xuJiM0MztcdG5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcdGlmICghbm90aWZ5KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O21pc3Npbmcgbm90aWZ5IGNmZyBjYXBhYmlsaXR5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4mIzQzO1x0XHRcdCAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbiYjNDM7XHRcdFx0XHRub3RpZnlfb2ZmX211bHRpcGxpZXIpLFxuJiM0MztcdFx0XHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcik7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4mIzQzO1x0XHRcdCAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbiYjNDM7XHRcdFx0XHRjYXAubGVuZ3RoKSwgXHUwMDI2bm90aWZ5X2xlbmd0aCk7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4mIzQzO1x0XHRcdCAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbiYjNDM7XHRcdFx0XHRjYXAub2Zmc2V0KSwgXHUwMDI2bm90aWZ5X29mZnNldCk7XG4mIzQzO1xuJiM0MztcdC8qIFdlIGRvbiYjMzk7dCBrbm93IGhvdyBtYW55IFZRcyB3ZSYjMzk7bGwgbWFwLCBhaGVhZCBvZiB0aGUgdGltZS5cbiYjNDM7XHQgKiBJZiBub3RpZnkgbGVuZ3RoIGlzIHNtYWxsLCBtYXAgaXQgYWxsIG5vdy4gT3RoZXJ3aXNlLFxuJiM0MztcdCAqIG1hcCBlYWNoIFZRIGluZGl2aWR1YWxseSBsYXRlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobm90aWZ5X2xlbmd0aCAmIzQzOyAobm90aWZ5X29mZnNldCAlIFBBR0VfU0laRSkgXHUwMDNjPSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBub3RpZnksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBaWERIX1BGX01BUF9NSU5MRU4yLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBaWERIX1BGX0FMSUdOMiwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgbm90aWZ5X2xlbmd0aCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9sZW4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vub3RpZnlfcGEsIE5VTEwpO1xuJiM0MztcdFx0aWYgKCFwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UgaXMgbnVsbFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwZl9kZXYtXHUwMDNlbm90aWZ5X21hcF9jYXAgPSBub3RpZnk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdGludCBkZXZpY2U7XG4mIzQzO1xuJiM0MztcdC8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkgbWFuZGF0b3J5IGZvclxuJiM0MztcdCAqIGRldmljZXMgdGhhdCBoYXZlIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGRldmljZSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfREVWSUNFX0NGRyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcbiYjNDM7XHQvKiB3ZSBkb24mIzM5O3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLFxuJiM0MztcdCAqIGJ1dCBQQUdFX1NJWkUgaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgYWxsIGV4aXN0aW5nIGRldmljZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRldmljZSkge1xuJiM0MztcdFx0cGZfZGV2LVx1MDAzZWRldmljZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBkZXZpY2UsIDAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsIFBBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2VkZXZpY2VfbGVuLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZWRldl9jZmdfYmFyX29mZik7XG4mIzQzO1x0XHRpZiAoIXBmX2Rldi1cdTAwM2VkZXZpY2UpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwZl9kZXYtXHUwMDNlZGV2aWNlIGlzIG51bGxcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBmX2Rldi1cdTAwM2VkZXZpY2UpXG4mIzQzO1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuJiM0MztcdFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKTtcbiYjNDM7XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfbWFwX25vdGlmeTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2RldmljZV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfbWFwX2RldmljZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX21hcF9kZXZpY2U6XG4mIzQzO1x0aWYgKHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSlcbiYjNDM7XHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSk7XG4mIzQzO2Vycl9tYXBfbm90aWZ5OlxuJiM0MztcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vjb21tb24pO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3UxNiB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxuJiM0MztcdFx0XHRcdCB1MTYgcGh5X2luZGV4LCB1MTYgaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZXBhY2tlZF9zdGF0dXMpXG4mIzQzO1x0XHRpb3dyaXRlMTYocGh5X2luZGV4LCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZXF1ZXVlX3NlbGVjdCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0aW93cml0ZTE2KGluZGV4LCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZXF1ZXVlX3NlbGVjdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb3JlYWQxNihcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZXF1ZXVlX25vdGlmeV9vZmYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX3ZxX25vdGlmeShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldixcbiYjNDM7XHRcdFx0XHQgICAgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4LFxuJiM0MztcdFx0XHRcdCAgICAgcmVzb3VyY2Vfc2l6ZV90ICpwYSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0dTE2IG9mZjtcbiYjNDM7XG4mIzQzO1x0b2ZmID0genhkaF9wZl9nZXRfcXVldWVfbm90aWZ5X29mZihkaF9kZXYsIHBoeV9pbmRleCwgaW5kZXgpO1xuJiM0MztcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKSB7XG4mIzQzO1x0XHQvKiBvZmZzZXQgc2hvdWxkIG5vdCB3cmFwICovXG4mIzQzO1x0XHRpZiAoKHU2NClvZmYgKlxuJiM0MztcdFx0XHRwZl9kZXYtXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyICYjNDM7IDIgXHUwMDNlIHBmX2Rldi1cdTAwM2Vub3RpZnlfbGVuKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZGhfZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0XHRcJiMzNDtiYWQgbm90aWZpY2F0aW9uIG9mZnNldCAldSAoeCAldSkgZm9yIHF1ZXVlICV1IFx1MDAzZSAlenVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0b2ZmLCBwZl9kZXYtXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyLCBwaHlfaW5kZXgsXG4mIzQzO1x0XHRcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9sZW4pO1xuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocGEpXG4mIzQzO1x0XHRcdCpwYSA9IHBmX2Rldi1cdTAwM2Vub3RpZnlfcGEgJiM0Mzsgb2ZmICogcGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlICYjNDM7IG9mZiAqIHBmX2Rldi1cdTAwM2Vub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldHVybiB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KGRoX2RldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9tYXBfY2FwLCAyLCAyLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgb2ZmICogcGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIDIsIE5VTEwsIHBhLCBOVUxMKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl91bm1hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHZvaWQgX19pb21lbSAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuJiM0MztcdFx0cGNpX2lvdW5tYXAoZGhfZGV2LVx1MDAzZXBkZXYsIHByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHp4ZGhfcGZfc2V0X3N0YXR1cyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoc3RhdHVzLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9zdGF0dXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1OCB6eGRoX3BmX2dldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9yZWFkOChcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9zdGF0dXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1OCB6eGRoX3BmX2dldF9jZmdfZ2VuKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1OCBjb25maWdfZ2VuZXJhdGlvbjtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnX2dlbmVyYXRpb24gPSBpb3JlYWQ4KFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlY29uZmlnX2dlbmVyYXRpb24pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY29uZmlnX2dlbmVyYXRpb247XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl9nZXRfdmZfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjLCBpbnQgdmZfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHUzMiBERVZfTUFDX0w7XG4mIzQzO1x0dTE2IERFVl9NQUNfSDtcbiYjNDM7XG4mIzQzO1x0ZXRoX3plcm9fYWRkcihtYWMpO1xuJiM0MztcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZXBmX3NyaW92X2NhcF9iYXNlKSB7XG4mIzQzO1x0XHRERVZfTUFDX0wgPSBpb3JlYWQzMihwZl9kZXYtXHUwMDNlcGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MztcbiYjNDM7XHRcdFx0XHQgICAgIChwZl9kZXYtXHUwMDNlc3Jpb3ZfYmFyX3NpemUpICogdmZfaWQgJiM0MztcbiYjNDM7XHRcdFx0XHQgICAgIHBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpO1xuJiM0MztcdFx0bWFjWzBdID0gREVWX01BQ19MIFx1MDAyNiAweGZmO1xuJiM0MztcdFx0bWFjWzFdID0gKERFVl9NQUNfTCBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0XHRtYWNbMl0gPSAoREVWX01BQ19MIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0XHRtYWNbM10gPSAoREVWX01BQ19MIFx1MDAzZVx1MDAzZSAyNCkgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0XHRERVZfTUFDX0ggPSBpb3JlYWQxNihwZl9kZXYtXHUwMDNlcGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MztcbiYjNDM7XHRcdFx0XHQgICAgICAocGZfZGV2LVx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICYjNDM7XG4mIzQzO1x0XHRcdFx0ICAgICAgcGZfZGV2LVx1MDAzZWRldl9jZmdfYmFyX29mZiAmIzQzO1xuJiM0MztcdFx0XHRcdCAgICAgIFpYREhfREVWX01BQ19ISUdIX09GRlNFVCk7XG4mIzQzO1x0XHRtYWNbNF0gPSBERVZfTUFDX0ggXHUwMDI2IDB4ZmY7XG4mIzQzO1x0XHRtYWNbNV0gPSAoREVWX01BQ19IIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl9zZXRfdmZfbWFjX3JlZyhzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldixcbiYjNDM7XHRcdFx0ICAgIHU4ICptYWMsIGludCB2Zl9pZClcbiYjNDM7e1xuJiM0MztcdHUzMiBERVZfTUFDX0w7XG4mIzQzO1x0dTE2IERFVl9NQUNfSDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBmX2Rldi1cdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSkge1xuJiM0MztcdFx0REVWX01BQ19MID0gbWFjWzBdIHwgKG1hY1sxXSBcdTAwM2NcdTAwM2MgOCkgfFxuJiM0MztcdFx0XHRcdFx0KG1hY1syXSBcdTAwM2NcdTAwM2MgMTYpIHwgKG1hY1szXSBcdTAwM2NcdTAwM2MgMjQpO1xuJiM0MztcdFx0REVWX01BQ19IID0gbWFjWzRdIHwgKG1hY1s1XSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0XHRpb3dyaXRlMzIoREVWX01BQ19MLCAocGZfZGV2LVx1MDAzZXBmX3NyaW92X2NhcF9iYXNlICYjNDM7XG4mIzQzO1x0XHRcdCAgKHBmX2Rldi1cdTAwM2Vzcmlvdl9iYXJfc2l6ZSkgKiB2Zl9pZCAmIzQzO1xuJiM0MztcdFx0XHQgIHBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpKTtcbiYjNDM7XHRcdGlvd3JpdGUxNihERVZfTUFDX0gsIChwZl9kZXYtXHUwMDNlcGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MztcbiYjNDM7XHRcdFx0ICAocGZfZGV2LVx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICYjNDM7XG4mIzQzO1x0XHRcdCAgcGZfZGV2LVx1MDAzZWRldl9jZmdfYmFyX29mZiAmIzQzO1xuJiM0MztcdFx0XHQgIFpYREhfREVWX01BQ19ISUdIX09GRlNFVCkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX3BmX3NldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdHp4ZGhfcGZfc2V0X3ZmX21hY19yZWcocGZfZGV2LCBtYWMsIHZmX2lkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX3NldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHUzMiBERVZfTUFDX0w7XG4mIzQzO1x0dTE2IERFVl9NQUNfSDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRERVZfTUFDX0wgPSBtYWNbMF0gfCAobWFjWzFdIFx1MDAzY1x1MDAzYyA4KSB8IChtYWNbMl0gXHUwMDNjXHUwMDNjIDE2KSB8IChtYWNbM10gXHUwMDNjXHUwMDNjIDI0KTtcbiYjNDM7XHRERVZfTUFDX0ggPSBtYWNbNF0gfCAobWFjWzVdIFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7XHRpb3dyaXRlMzIoREVWX01BQ19MLCBwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpb3dyaXRlMTYoREVWX01BQ19ILCBwZl9kZXYtXHUwMDNlZGV2aWNlICYjNDM7IFpYREhfREVWX01BQ19ISUdIX09GRlNFVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9nZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1MzIgREVWX01BQ19MO1xuJiM0MztcdHUxNiBERVZfTUFDX0g7XG4mIzQzO1xuJiM0MztcdGlmICghcGZfZGV2LVx1MDAzZWRldmljZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0REVWX01BQ19MID0gaW9yZWFkMzIocGZfZGV2LVx1MDAzZWRldmljZSk7XG4mIzQzO1x0bWFjWzBdID0gREVWX01BQ19MIFx1MDAyNiAweGZmO1xuJiM0MztcdG1hY1sxXSA9IChERVZfTUFDX0wgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmO1xuJiM0MztcdG1hY1syXSA9IChERVZfTUFDX0wgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZjtcbiYjNDM7XHRtYWNbM10gPSAoREVWX01BQ19MIFx1MDAzZVx1MDAzZSAyNCkgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0REVWX01BQ19IID0gaW9yZWFkMTYocGZfZGV2LVx1MDAzZWRldmljZSAmIzQzOyBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVQpO1xuJiM0MztcdG1hY1s0XSA9IERFVl9NQUNfSCBcdTAwMjYgMHhmZjtcbiYjNDM7XHRtYWNbNV0gPSAoREVWX01BQ19IIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dTY0IHp4ZGhfcGZfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1NjQgZGV2aWNlX2ZlYXR1cmU7XG4mIzQzO1xuJiM0MztcdGlvd3JpdGUzMigwLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9mZWF0dXJlX3NlbGVjdCk7XG4mIzQzO1x0ZGV2aWNlX2ZlYXR1cmUgPSBpb3JlYWQzMihcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9mZWF0dXJlKTtcbiYjNDM7XHRpb3dyaXRlMzIoMSwgXHUwMDI2cGZfZGV2LVx1MDAzZWNvbW1vbi1cdTAwM2VkZXZpY2VfZmVhdHVyZV9zZWxlY3QpO1xuJiM0MztcdGRldmljZV9mZWF0dXJlIHw9ICgodTY0KWlvcmVhZDMyKFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlZGV2aWNlX2ZlYXR1cmUpXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAzY1x1MDAzYyAzMik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZpY2VfZmVhdHVyZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTY0IGZlYXR1cmVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKDAsIFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlZ3Vlc3RfZmVhdHVyZV9zZWxlY3QpO1xuJiM0MztcdGlvd3JpdGUzMigodTMyKWZlYXR1cmVzLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWd1ZXN0X2ZlYXR1cmUpO1xuJiM0MztcdGlvd3JpdGUzMigxLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWd1ZXN0X2ZlYXR1cmVfc2VsZWN0KTtcbiYjNDM7XHRpb3dyaXRlMzIoZmVhdHVyZXMgXHUwMDNlXHUwMDNlIDMyLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWd1ZXN0X2ZlYXR1cmUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldjtcbiYjNDM7XHRzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rID0gZGV2bGlua19hbGxvYyhcdTAwMjZkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCBkaF9jb3JlX2RldiksXG4mIzQzO1x0XHRcdFx0XHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICghZGV2bGluaykge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkaF9kZXYgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XG4mIzQzO1x0ZGhfZGV2LVx1MDAzZWRldmljZSA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdGRoX2Rldi1cdTAwM2VwZGV2ID0gcGRldjtcbiYjNDM7XHRkaF9kZXYtXHUwMDNlZGV2bGluayA9IGRldmxpbms7XG4mIzQzO1xuJiM0MztcdHBmX2RldiA9IGRoX2NvcmVfYWxsb2NfcHJpdihkaF9kZXYsIHNpemVvZigqcGZfZGV2KSk7XG4mIzQzO1x0aWYgKCFwZl9kZXYpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2RoX3BmX2RldiBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyX3BmX2RldjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmX2Rldi1cdTAwM2ViYXJfY2hhbl92YWxpZCA9IGZhbHNlO1xuJiM0MztcdHBmX2Rldi1cdTAwM2V2ZXBhID0gZmFsc2U7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZkaF9kZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuJiM0MztcbiYjNDM7XHRkaF9kZXYtXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGhfcGZfcGNpX2luaXQoZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtkaF9wZl9wY2lfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9jZmdfaW5pdDpcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnBmX2Rldi1cdTAwM2VpcnFfbG9jayk7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkaF9kZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0ZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTtcbiYjNDM7ZXJyX3BmX2RldjpcbiYjNDM7XHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoZGhfZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4mIzQzO1x0ZGhfcGZfcGNpX2Nsb3NlKGRoX2Rldik7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGhfZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdGRoX2NvcmVfZnJlZV9wcml2KGRoX2Rldik7XG4mIzQzO1x0ZGV2bGlua19mcmVlKGRldmxpbmspO1xuJiM0MztcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXG4mIzQzO1x0XHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZGhfcGZfZHJpdmVyID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7ZGluZ2hhaTEwZVwmIzM0OyxcbiYjNDM7XHQuaWRfdGFibGUgPSBkaF9wZl9wY2lfdGFibGUsXG4mIzQzO1x0LnByb2JlID0gZGhfcGZfcHJvYmUsXG4mIzQzO1x0LnJlbW92ZSA9IGRoX3BmX3JlbW92ZSxcbiYjNDM7XHQuc2h1dGRvd24gPSBkaF9wZl9zaHV0ZG93bixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO21vZHVsZV9wY2lfZHJpdmVyKGRoX3BmX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWRhYTc5YTZkNmYyYWJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbkBAIC0wLDAgJiM0MzsxLDExOCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBGIGhlYWRlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19aWERIX0VOX1BGX0hfX1xuJiM0MzsjZGVmaW5lIF9fWlhESF9FTl9QRl9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcdDB4MWNmMlxuJiM0MzsjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXHQweDgwNDBcbiYjNDM7I2RlZmluZSBaWERIX1ZGX0RFVklDRV9JRFx0MHg4MDQxXG4mIzQzO1xuJiM0MzsvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHXHQxXG4mIzQzOy8qIE5vdGlmaWNhdGlvbnMgKi9cbiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1x0MlxuJiM0MzsvKiBJU1IgYWNjZXNzICovXG4mIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0lTUl9DRkdcdFx0M1xuJiM0MzsvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHXHQ0XG4mIzQzOy8qIFBDSSBjb25maWd1cmF0aW9uIGFjY2VzcyAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHXHRcdDVcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFx0XHQweDVcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdONFx0XHRcdDRcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdOMlx0XHRcdDJcbiYjNDM7I2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUXHQ0XG4mIzQzO1xuJiM0MztlbnVtIGRoX2NvcmVkZXZfdHlwZSB7XG4mIzQzO1x0REhfQ09SRURFVl9QRixcbiYjNDM7XHRESF9DT1JFREVWX1ZGLFxuJiM0MztcdERIX0NPUkVERVZfU0YsXG4mIzQzO1x0REhfQ09SRURFVl9NUEZcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBkZXZsaW5rO1xuJiM0MztcbiYjNDM7c3RydWN0IGRoX2NvcmVfZGV2IHtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4mIzQzO1x0ZW51bSBkaF9jb3JlZGV2X3R5cGUgY29yZWRldl90eXBlO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuJiM0MztcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBQcm90ZWN0cyBkZXZpY2UgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdHZvaWQgKnByaXY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9kZXZpY2Uge1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNvbW1vbjtcbiYjNDM7XHQvKiBEZXZpY2Utc3BlY2lmaWMgZGF0YSAobm9uLWxlZ2FjeSBtb2RlKSAgKi9cbiYjNDM7XHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXG4mIzQzO1x0dm9pZCBfX2lvbWVtICpkZXZpY2U7XG4mIzQzO1x0dm9pZCBfX2lvbWVtICpub3RpZnlfYmFzZTtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xuJiM0MztcdC8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqL1xuJiM0MztcdHJlc291cmNlX3NpemVfdCBub3RpZnlfcGE7XG4mIzQzO1x0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cbiYjNDM7XHRzaXplX3Qgbm90aWZ5X2xlbjtcbiYjNDM7XHRzaXplX3QgZGV2aWNlX2xlbjtcbiYjNDM7XHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xuJiM0MztcdHMzMiBub3RpZnlfbWFwX2NhcDtcbiYjNDM7XHR1MzIgbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyO1xuJiM0MztcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXG4mIzQzO1x0czMyIG1vZGVybl9iYXJzO1xuJiM0MztcdHZvaWQgX19pb21lbSAqcGNpX2lvcmVtYXBfYWRkcls2XTtcbiYjNDM7XHR1NjQgc3Jpb3ZfYmFyX3NpemU7XG4mIzQzO1x0dTMyIGRldl9jZmdfYmFyX29mZjtcbiYjNDM7XHRib29sIHBhY2tlZF9zdGF0dXM7XG4mIzQzO1x0Ym9vbCBiYXJfY2hhbl92YWxpZDtcbiYjNDM7XHRib29sIHZlcGE7XG4mIzQzO1x0c3RydWN0IG11dGV4IGlycV9sb2NrOyAvKiBQcm90ZWN0cyBJUlEgb3BlcmF0aW9ucyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBHRVRfQ09SRURFVl9UWVBFKHBkZXYpIFxcXG4mIzQzO1x0KChwZGV2KS1cdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcbiYjNDM7XG4mIzQzO3ZvaWQgKmRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgc2l6ZV90IHNpemUpO1xuJiM0Mzt2b2lkIGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7dm9pZCBkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IGRoX2NvcmVfZGV2ICpkZXYpO1xuJiM0MztpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbiYjNDM7XHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTtcbiYjNDM7dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCBpbnQgb2ZmLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyICpiYXJfb2ZmKTtcbiYjNDM7aW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7dTE2IHp4ZGhfcGZfZ2V0X3F1ZXVlX25vdGlmeV9vZmYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXG4mIzQzO1x0XHRcdFx0IHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCk7XG4mIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfdnFfbm90aWZ5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4LFxuJiM0MztcdFx0XHRcdCAgICAgcmVzb3VyY2Vfc2l6ZV90ICpwYSk7XG4mIzQzO3ZvaWQgenhkaF9wZl91bm1hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHZvaWQgX19pb21lbSAqcHJpdik7XG4mIzQzO3ZvaWQgenhkaF9wZl9zZXRfc3RhdHVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCBzdGF0dXMpO1xuJiM0Mzt1OCB6eGRoX3BmX2dldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuJiM0Mzt1OCB6eGRoX3BmX2dldF9jZmdfZ2VuKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX2dldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZCk7XG4mIzQzO3ZvaWQgenhkaF9wZl9zZXRfdmZfbWFjX3JlZyhzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldixcbiYjNDM7XHRcdFx0ICAgIHU4ICptYWMsIGludCB2Zl9pZCk7XG4mIzQzO3ZvaWQgenhkaF9wZl9zZXRfdmZfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjLCBpbnQgdmZfaWQpO1xuJiM0Mzt2b2lkIHp4ZGhfc2V0X21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYyk7XG4mIzQzO3ZvaWQgenhkaF9nZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKTtcbiYjNDM7dTY0IHp4ZGhfcGZfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTY0IGZlYXR1cmVzKTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9aVEUmIzM0OywKICAgICYjMzQ7RElOR0hBSSYjMzQ7LAogICAgJiMzNDtESU5HSEFJX1BGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGhfcGZfcHJvYmUmIzM0OywKICAgICYjMzQ7ZGhfcGZfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2RoX3BmX3BjaV9pbml0JiMzNDssCiAgICAmIzM0O2RoX3BmX3BjaV9jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGEgUENJIHByb2JlIGZ1bmN0aW9uIHdoaWNoIGluaXRpYWxpemVzIHRoZSBkZXZpY2UsIG1hcHMgUENJIG1lbW9yeSwgYW5kIHJlZ2lzdGVycyBhIGRldmxpbmsgaW5zdGFuY2UuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI5ZGJhNzFhM2FhZTM1M2M1NDY0NGIwZmY0ZTRlODJjZWVkNTZmZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAxOTozMDozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMmZiMWM3NWFmZDE2MzguLjczNjkyYjA5YmY3YmFiIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMjk0NDAsNiAmIzQzOzI5NDQwLDEyIEBAIFM6CU1haW50YWluZWQKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGl3YWkvc291bmQuZ2l0CiBGOglzb3VuZC9oZGEvY29kZWNzL3NlbmFyeXRlY2guYwogCiYjNDM7WlRFIERJTkdIQUkgRVRIRVJORVQgRFJJVkVSCiYjNDM7TToJSnVueWFuZyBIYW4gJmx0O2hhbi5qdW55YW5nQHp0ZS5jb20uY24mZ3Q7CiYjNDM7TDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwomIzQzO1M6CU1haW50YWluZWQKJiM0MztGOglkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvCiYjNDM7CiBUSEUgUkVTVAogTToJTGludXMgVG9ydmFsZHMgJmx0O3RvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnJmd0OwogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKaW5kZXggYjhmNzBlMmExNzYzYWQuLmMyYjY5OTZiMGNmZTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKQEAgLTE4OCw1ICYjNDM7MTg4LDYgQEAgc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS9LY29uZmlnJiMzNDsKJiM0Mztzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyYjMzQ7CiAKIGVuZGlmICMgRVRIRVJORVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKaW5kZXggNTczNDRmZWM2Y2UwNDcuLmEzNGJjYmQ0ZGY0ZTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQpAQCAtMTA0LDMgJiM0MzsxMDQsNCBAQCBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT00pICYjNDM7PSB4aXJjb20vCiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgJiM0Mzs9IHN5bm9wc3lzLwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICYjNDM7PSBwZW5zYW5kby8KIG9iai0kKENPTkZJR19PQV9UQzYpICYjNDM7PSBvYV90YzYubwomIzQzO29iai0kKENPTkZJR19ORVRfVkVORE9SX1pURSkgJiM0Mzs9IHp0ZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2EyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMjAgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBaVEUgZHJpdmVyIGNvbmZpZ3VyYXRpb24KJiM0MzsjCiYjNDM7CiYjNDM7Y29uZmlnIE5FVF9WRU5ET1JfWlRFCiYjNDM7ICAgIGJvb2wgJiMzNDtaVEUgZGV2aWNlcyYjMzQ7CiYjNDM7ICAgIGRlZmF1bHQgeQomIzQzOyAgICBoZWxwCiYjNDM7ICAgICAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuCiYjNDM7ICAgICAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlCiYjNDM7ICAgICAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbAomIzQzOyAgICAgIHRoZSBxdWVzdGlvbnMgYWJvdXQgWnRlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkCiYjNDM7ICAgICAgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy4KJiM0MzsKJiM0MztpZiBORVRfVkVORE9SX1pURQomIzQzOwomIzQzO3NvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcmIzM0OwomIzQzOwomIzQzO2VuZGlmICMgTkVUX1ZFTkRPUl9aVEUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uY2Q5OTI5YjYxNTU5YzYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNiBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIE1ha2VmaWxlIGZvciB0aGUgWlRFIGRldmljZSBkcml2ZXJzCiYjNDM7IwomIzQzOwomIzQzO29iai0kKENPTkZJR19ESU5HSEFJKSAmIzQzOz0gZGluZ2hhaS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xMjFiZTNiZjc3MDdmZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMzQgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvbgomIzQzOyMKJiM0MzsKJiM0Mztjb25maWcgRElOR0hBSQomIzQzOyAgICBib29sICYjMzQ7WlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyJiMzNDsKJiM0MzsgICAgZGVwZW5kcyBvbiBQQ0kKJiM0MzsgICAgc2VsZWN0IE5FVF9ERVZMSU5LCiYjNDM7ICAgIGhlbHAKJiM0MzsgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLgomIzQzOwomIzQzOyAgICAgIERpbmdIYWkgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIEV0aGVybmV0IGNvbnRyb2xsZXIgdGhhdCBzdXBwb3J0cwomIzQzOyAgICAgIG11bHRpcGxlIGZlYXR1cmVzIGluY2x1ZGluZyBoYXJkd2FyZSBvZmZsb2FkaW5nLCBTUi1JT1YsIGFuZAomIzQzOyAgICAgIGFkdmFuY2VkIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcy4KJiM0MzsKJiM0MzsgICAgICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgZHJpdmVyIHZhcmlhbnRzIGJlbG93LgomIzQzOwomIzQzOyAgICAgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiYjNDM7aWYgRElOR0hBSQomIzQzOwomIzQzO2NvbmZpZyBESU5HSEFJX1BGCiYjNDM7ICAgIHRyaXN0YXRlICYjMzQ7WlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXImIzM0OwomIzQzOyAgICBoZWxwCiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgUENJIEV4cHJlc3MgRXRoZXJuZXQKJiM0MzsgICAgICBhZGFwdGVycyAoUEYpLgomIzQzOwomIzQzOyAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKJiM0MzsgICAgICB3aWxsIGJlIG5hbWVkIGRpbmdoYWkxMGUuCiYjNDM7CiYjNDM7ICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KJiM0MzsKJiM0MztlbmRpZiAjIERJTkdIQUkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY1NWE4ZGU1MThiZWIzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsMTAgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBNYWtlZmlsZSBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyCiYjNDM7IwomIzQzOwomIzQzO2NjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYykKJiM0MzsKJiM0MztvYmotJChDT05GSUdfRElOR0hBSV9QRikgJiM0Mzs9IGRpbmdoYWkxMGUubwomIzQzO2RpbmdoYWkxMGUteSA6PSBlbl9wZi5vCiYjNDM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNTA2N2M3M2ZlZDMzY2MKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oCkBAIC0wLDAgJiM0MzsxLDcxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnMKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19ESF9RVUVVRV9IX18KJiM0MzsjZGVmaW5lIF9fREhfUVVFVUVfSF9fCiYjNDM7CiYjNDM7LyogVmVjdG9yIHZhbHVlIHVzZWQgdG8gZGlzYWJsZSBNU0kgZm9yIHF1ZXVlICovCiYjNDM7I2RlZmluZSBaWERIX01TSV9OT19WRUNUT1IgICAgICAweGZmCiYjNDM7CiYjNDM7LyogU3RhdHVzIGJ5dGUgZm9yIGd1ZXN0IHRvIHJlcG9ydCBwcm9ncmVzcywgYW5kIHN5bmNocm9uaXplIGZlYXR1cmVzICovCiYjNDM7LyogV2UgaGF2ZSBzZWVuIGRldmljZSBhbmQgcHJvY2Vzc2VkIGdlbmVyaWMgZmllbGRzICovCiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX0FDS05PV0xFREdFIDEKJiM0MzsvKiBXZSBoYXZlIGZvdW5kIGEgZHJpdmVyIGZvciB0aGUgZGV2aWNlLiAqLwomIzQzOyNkZWZpbmUgWlhESF9DT05GSUdfU19EUklWRVIgICAgICAyCiYjNDM7LyogRHJpdmVyIGhhcyB1c2VkIGl0cyBwYXJ0cyBvZiB0aGUgY29uZmlnLCBhbmQgaXMgaGFwcHkgKi8KJiM0MzsjZGVmaW5lIFpYREhfQ09ORklHX1NfRFJJVkVSX09LICAgNAomIzQzOy8qIERyaXZlciBoYXMgZmluaXNoZWQgY29uZmlndXJpbmcgZmVhdHVyZXMgKi8KJiM0MzsjZGVmaW5lIFpYREhfQ09ORklHX1NfRkVBVFVSRVNfT0sgOAomIzQzOy8qIERldmljZSBlbnRlcmVkIGludmFsaWQgc3RhdGUsIGRyaXZlciBtdXN0IHJlc2V0IGl0ICovCiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX05FRURTX1JFU0VUIDB4NDAKJiM0MzsvKiBXZSYjMzk7dmUgZ2l2ZW4gdXAgb24gdGhpcyBkZXZpY2UgKi8KJiM0MzsjZGVmaW5lIFpYREhfQ09ORklHX1NfRkFJTEVEICAgICAgMHg4MAomIzQzOwomIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi8KJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwIHsKJiM0MzsJX191OCBjYXBfdm5kcjsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi8KJiM0MzsJX191OCBjYXBfbmV4dDsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi8KJiM0MzsJX191OCBjYXBfbGVuOwkJLyogR2VuZXJpYyBQQ0kgZmllbGQ6IGNhcGFiaWxpdHkgbGVuZ3RoICovCiYjNDM7CV9fdTggY2ZnX3R5cGU7CQkvKiBJZGVudGlmaWVzIHRoZSBzdHJ1Y3R1cmUuICovCiYjNDM7CV9fdTggYmFyOwkJLyogV2hlcmUgdG8gZmluZCBpdC4gKi8KJiM0MzsJX191OCBpZDsJCS8qIE11bHRpcGxlIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlICovCiYjNDM7CV9fdTggcGFkZGluZ1syXTsJCS8qIFBhZCB0byBmdWxsIGR3b3JkLiAqLwomIzQzOwlfX2xlMzIgb2Zmc2V0OwkJLyogT2Zmc2V0IHdpdGhpbiBiYXIuICovCiYjNDM7CV9fbGUzMiBsZW5ndGg7CQkvKiBMZW5ndGggb2YgdGhlIHN0cnVjdHVyZSwgaW4gYnl0ZXMuICovCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBGaWVsZHMgaW4gWlhESF9QRl9QQ0lfQ0FQX0NPTU1PTl9DRkc6ICovCiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgewomIzQzOwkvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqLwomIzQzOwlfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBkZXZpY2VfZmVhdHVyZTsJLyogcmVhZC1vbmx5ICovCiYjNDM7CV9fbGUzMiBndWVzdF9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgZ3Vlc3RfZmVhdHVyZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IG1zaXhfY29uZmlnOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMTYgbnVtX3F1ZXVlczsJCS8qIHJlYWQtb25seSAqLwomIzQzOwlfX3U4IGRldmljZV9zdGF0dXM7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fdTggY29uZmlnX2dlbmVyYXRpb247CS8qIHJlYWQtb25seSAqLwomIzQzOwomIzQzOwkvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NlbGVjdDsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NpemU7CQkvKiByZWFkLXdyaXRlLCBwb3dlciBvZiAyLiAqLwomIzQzOwlfX2xlMTYgcXVldWVfbXNpeF92ZWN0b3I7CS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX2VuYWJsZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX25vdGlmeV9vZmY7CS8qIHJlYWQtb25seSAqLwomIzQzOwlfX2xlMzIgcXVldWVfZGVzY19sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2Rlc2NfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBxdWV1ZV9hdmFpbF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2F2YWlsX2hpOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgcXVldWVfdXNlZF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX3VzZWRfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwOwomIzQzOwlfX2xlMzIgbm90aWZ5X29mZl9tdWx0aXBsaWVyOyAvKiBNdWx0aXBsaWVyIGZvciBxdWV1ZV9ub3RpZnlfb2ZmLiAqLwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fREhfUVVFVUVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZjg1OWZkNDcyYTg2ZmQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jCkBAIC0wLDAgJiM0MzsxLDY0MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlcgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2RldmxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcHBpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VuX3BmLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZGhfcXVldWUuaCYjMzQ7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0p1bnlhbmcgSGFuICZsdDtoYW4uanVueWFuZ0B6dGUuY29tLmNuJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZGhfcGZfZGV2bGlua19vcHMgPSB7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGhfcGZfcGNpX3RhYmxlW10gPSB7CiYjNDM7CXsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9QRl9ERVZJQ0VfSUQpIH0sCiYjNDM7CXsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRoX3BmX3BjaV90YWJsZSk7CiYjNDM7CiYjNDM7dm9pZCAqZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwomIzQzOwomIzQzOwlpZiAocHJpdikKJiM0MzsJCWRoX2Rldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CXJldHVybiBwcml2OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KQomIzQzO3sKJiM0MzsJa2ZyZWUoZGhfZGV2LSZndDtwcml2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkaF9wZl9wY2lfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwY2lfc2V0X2RydmRhdGEoZGV2LSZndDtwZGV2LCBkZXYpOwomIzQzOwomIzQzOwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYtJmd0O3BkZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi0mZ3Q7ZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYtJmd0O2RldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldmljZSwgJiMzNDtkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50IGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJCWdvdG8gZXJyX3BjaTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKGRldi0mZ3Q7cGRldiwKJiM0MzsJCQkJCSAgIHBjaV9zZWxlY3RfYmFycyhkZXYtJmd0O3BkZXYsIElPUkVTT1VSQ0VfTUVNKSwKJiM0MzsJCQkJCSAgICYjMzQ7ZGgtcGYmIzM0Oyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LSZndDtkZXZpY2UsICYjMzQ7cGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX3BjaTsKJiM0MzsJfQomIzQzOwomIzQzOwlwY2lfc2V0X21hc3RlcihkZXYtJmd0O3BkZXYpOwomIzQzOwlyZXQgPSBwY2lfc2F2ZV9zdGF0ZShkZXYtJmd0O3BkZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BjaV9zYXZlX3N0YXRlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKGRldi0mZ3Q7cGRldiwgMCkgJmFtcDsgSU9SRVNPVVJDRV9NRU0pKSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldmljZSwgJiMzNDtCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdID0KJiM0MzsJCWlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0mZ3Q7cGRldiwgMCksCiYjNDM7CQkJcGNpX3Jlc291cmNlX2xlbihkZXYtJmd0O3BkZXYsIDApKTsKJiM0MzsJaWYgKCFwZl9kZXYtJmd0O3BjaV9pb3JlbWFwX2FkZHJbMF0pIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2aWNlLCAmIzM0O2RoIHBmIHBjaSBpb3JlbWFwIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3BjaV9zYXZlX3N0YXRlOgomIzQzOwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKGRldi0mZ3Q7cGRldiwKJiM0MzsJCQkJICAgICBwY2lfc2VsZWN0X2JhcnMoZGV2LSZndDtwZGV2LCBJT1JFU09VUkNFX01FTSkpOwomIzQzO2Vycl9wY2k6CiYjNDM7CXBjaV9kaXNhYmxlX2RldmljZShkZXYtJmd0O3BkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlpb3VubWFwKHBmX2Rldi0mZ3Q7cGNpX2lvcmVtYXBfYWRkclswXSk7CiYjNDM7CXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LSZndDtwZGV2LAomIzQzOwkJCQkgICAgIHBjaV9zZWxlY3RfYmFycyhkZXYtJmd0O3BkZXYsIElPUkVTT1VSQ0VfTUVNKSk7CiYjNDM7CXBjaV9kaXNhYmxlX2RldmljZShkZXYtJmd0O3BkZXYpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSwKJiM0MzsJCQkJdTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycykKJiM0Mzt7CiYjNDM7CWludCBwb3M7CiYjNDM7CXU4IHR5cGU7CiYjNDM7CXU4IGJhcjsKJiM0MzsKJiM0MzsJZm9yIChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7IHBvcyAmZ3Q7IDA7CiYjNDM7CSAgICAgcG9zID0gcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHBkZXYsIHBvcywgUENJX0NBUF9JRF9WTkRSKSkgewomIzQzOwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwKJiM0MzsJCQkJICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwKJiM0MzsJCQkJCQkJY2ZnX3R5cGUpLCAmYW1wO3R5cGUpOwomIzQzOwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwKJiM0MzsJCQkJICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgJmFtcDtiYXIpOwomIzQzOwomIzQzOwkJLyogaWdub3JlIHN0cnVjdHVyZXMgd2l0aCByZXNlcnZlZCBCQVIgdmFsdWVzICovCiYjNDM7CQlpZiAoYmFyICZndDsgWlhESF9QRl9NQVhfQkFSX1ZBTCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmICh0eXBlID09IGNmZ190eXBlKSB7CiYjNDM7CQkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpICZhbXA7IGlvcmVzb3VyY2VfdHlwZXMpIHsKJiM0MzsJCQkJKmJhcnMgfD0gKDEgJmx0OyZsdDsgYmFyKTsKJiM0MzsJCQkJcmV0dXJuIHBvczsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgaW50IG9mZiwKJiM0MzsJCQkJICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sCiYjNDM7CQkJCSAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSwKJiM0MzsJCQkJICAgICB1MzIgKmJhcl9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi0mZ3Q7cGRldjsKJiM0MzsJdm9pZCBfX2lvbWVtICpwOwomIzQzOwl1MzIgb2Zmc2V0OwomIzQzOwl1MzIgbGVuZ3RoOwomIzQzOwl1OCBiYXI7CiYjNDM7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsCiYjNDM7CQkJICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgJmFtcDtiYXIpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKJiM0MzsJCQkgICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwKJiM0MzsJCQkJCQlvZmZzZXQpLCAmYW1wO29mZnNldCk7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLAomIzQzOwkJCQkJCWxlbmd0aCksICZhbXA7bGVuZ3RoKTsKJiM0MzsKJiM0MzsJaWYgKGJhcl9vZmYpCiYjNDM7CQkqYmFyX29mZiA9IG9mZnNldDsKJiM0MzsKJiM0MzsJaWYgKGxlbmd0aCAmbHQ7PSBzdGFydCkgewomIzQzOwkJZGV2X2VycihkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKCZndDsldSBleHBlY3RlZClcbiYjMzQ7LAomIzQzOwkJCWxlbmd0aCwgc3RhcnQpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGxlbmd0aCAtIHN0YXJ0ICZsdDsgbWlubGVuKSB7CiYjNDM7CQlkZXZfZXJyKGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoJmd0Oz0lenUgZXhwZWN0ZWQpXG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIG1pbmxlbik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW5ndGggLT0gc3RhcnQ7CiYjNDM7CWlmIChzdGFydCAmIzQzOyBvZmZzZXQgJmx0OyBvZmZzZXQpIHsKJiM0MzsJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7bWFwIHdyYXAtYXJvdW5kICV1JiM0MzsldVxuJiMzNDssIHN0YXJ0LCBvZmZzZXQpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2Zmc2V0ICYjNDM7PSBzdGFydDsKJiM0MzsJaWYgKG9mZnNldCAmYW1wOyAoYWxpZ24gLSAxKSkgewomIzQzOwkJZGV2X2VycihkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtvZmZzZXQgJXUgbm90IGFsaWduZWQgdG8gJXVcbiYjMzQ7LCBvZmZzZXQsIGFsaWduKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChsZW5ndGggJmd0OyBzaXplKQomIzQzOwkJbGVuZ3RoID0gc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKGxlbikKJiM0MzsJCSpsZW4gPSBsZW5ndGg7CiYjNDM7CiYjNDM7CWlmIChtaW5sZW4gJiM0Mzsgb2Zmc2V0ICZsdDsgbWlubGVuIHx8CiYjNDM7CSAgICBtaW5sZW4gJiM0Mzsgb2Zmc2V0ICZndDsgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKSB7CiYjNDM7CQlkZXZfZXJyKGRoX2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7bWFwIGN1c3RvbSBxdWV1ZSAlenVAJXUgb3V0IG9mIHJhbmdlIG9uIGJhciAldSBsZW5ndGggJWx1XG4mIzM0OywKJiM0MzsJCQltaW5sZW4sIG9mZnNldCwgYmFyLAomIzQzOwkJCSh1bnNpZ25lZCBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlwID0gcGNpX2lvbWFwX3JhbmdlKHBkZXYsIGJhciwgb2Zmc2V0LCBsZW5ndGgpOwomIzQzOwlpZiAoIXApIHsKJiM0MzsJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7dW5hYmxlIHRvIG1hcCBjdXN0b20gcXVldWUgJXVAJXUgb24gYmFyICV1XG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIG9mZnNldCwgYmFyKTsKJiM0MzsJfSBlbHNlIGlmIChwYSkgewomIzQzOwkJKnBhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhcikgJiM0Mzsgb2Zmc2V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CWludCBjb21tb247CiYjNDM7CiYjNDM7CS8qIGNoZWNrIGZvciBhIGNvbW1vbiBjb25maWc6IGlmIG5vdCwgdXNlIGxlZ2FjeSBtb2RlIChiYXIgMCkuICovCiYjNDM7CWNvbW1vbiA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfQ09NTU9OX0NGRywKJiM0MzsJCQkJCSAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLAomIzQzOwkJCQkJICAgICAmYW1wO3BmX2Rldi0mZ3Q7bW9kZXJuX2JhcnMpOwomIzQzOwlpZiAoIWNvbW1vbikgewomIzQzOwkJZGV2X2VycihkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O21pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlwZl9kZXYtJmd0O2NvbW1vbiA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBjb21tb24sCiYjNDM7CQkJCQkJc2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSwKJiM0MzsJCQkJCQlaWERIX1BGX0FMSUdONCwgMCwKJiM0MzsJCQkJCQlzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLAomIzQzOwkJCQkJCU5VTEwsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIXBmX2Rldi0mZ3Q7Y29tbW9uKSB7CiYjNDM7CQlkZXZfZXJyKGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BmX2Rldi0mZ3Q7Y29tbW9uIGlzIG51bGxcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CXUzMiBub3RpZnlfbGVuZ3RoOwomIzQzOwl1MzIgbm90aWZ5X29mZnNldDsKJiM0MzsJaW50IG5vdGlmeTsKJiM0MzsKJiM0MzsJLyogSWYgY29tbW9uIGlzIHRoZXJlLCB0aGVzZSBzaG91bGQgYmUgdG9vLi4uICovCiYjNDM7CW5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRywKJiM0MzsJCQkJCSAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLAomIzQzOwkJCQkJICAgICAmYW1wO3BmX2Rldi0mZ3Q7bW9kZXJuX2JhcnMpOwomIzQzOwlpZiAoIW5vdGlmeSkgewomIzQzOwkJZGV2X2VycihkaF9kZXYtJmd0O2RldmljZSwgJiMzNDttaXNzaW5nIG5vdGlmeSBjZmcgY2FwYWJpbGl0eVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCiYjNDM7CQkJICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLAomIzQzOwkJCQlub3RpZnlfb2ZmX211bHRpcGxpZXIpLAomIzQzOwkJJmFtcDtwZl9kZXYtJmd0O25vdGlmeV9vZmZzZXRfbXVsdGlwbGllcik7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCwKJiM0MzsJCQkJY2FwLmxlbmd0aCksICZhbXA7bm90aWZ5X2xlbmd0aCk7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCwKJiM0MzsJCQkJY2FwLm9mZnNldCksICZhbXA7bm90aWZ5X29mZnNldCk7CiYjNDM7CiYjNDM7CS8qIFdlIGRvbiYjMzk7dCBrbm93IGhvdyBtYW55IFZRcyB3ZSYjMzk7bGwgbWFwLCBhaGVhZCBvZiB0aGUgdGltZS4KJiM0MzsJICogSWYgbm90aWZ5IGxlbmd0aCBpcyBzbWFsbCwgbWFwIGl0IGFsbCBub3cuIE90aGVyd2lzZSwKJiM0MzsJICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKG5vdGlmeV9sZW5ndGggJiM0MzsgKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpICZsdDs9IFBBR0VfU0laRSkgewomIzQzOwkJcGZfZGV2LSZndDtub3RpZnlfYmFzZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBub3RpZnksCiYjNDM7CQkJCQkJCSAgICAgWlhESF9QRl9NQVBfTUlOTEVOMiwKJiM0MzsJCQkJCQkJICAgIFpYREhfUEZfQUxJR04yLCAwLAomIzQzOwkJCQkJCQkgICAgbm90aWZ5X2xlbmd0aCwKJiM0MzsJCQkJCQkJICAgICZhbXA7cGZfZGV2LSZndDtub3RpZnlfbGVuLAomIzQzOwkJCQkJCQkgICAgJmFtcDtwZl9kZXYtJmd0O25vdGlmeV9wYSwgTlVMTCk7CiYjNDM7CQlpZiAoIXBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpIHsKJiM0MzsJCQlkZXZfZXJyKGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UgaXMgbnVsbFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJcGZfZGV2LSZndDtub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LSZndDtwZGV2OwomIzQzOwlpbnQgZGV2aWNlOwomIzQzOwomIzQzOwkvKiBEZXZpY2UgY2FwYWJpbGl0eSBpcyBvbmx5IG1hbmRhdG9yeSBmb3IKJiM0MzsJICogZGV2aWNlcyB0aGF0IGhhdmUgZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCiYjNDM7CSAqLwomIzQzOwlkZXZpY2UgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcsCiYjNDM7CQkJCQkgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSwKJiM0MzsJCQkJCSAgICAgJmFtcDtwZl9kZXYtJmd0O21vZGVybl9iYXJzKTsKJiM0MzsKJiM0MzsJLyogd2UgZG9uJiMzOTt0IGtub3cgaG93IG11Y2ggd2Ugc2hvdWxkIG1hcCwKJiM0MzsJICogYnV0IFBBR0VfU0laRSBpcyBtb3JlIHRoYW4gZW5vdWdoIGZvciBhbGwgZXhpc3RpbmcgZGV2aWNlcy4KJiM0MzsJICovCiYjNDM7CWlmIChkZXZpY2UpIHsKJiM0MzsJCXBmX2Rldi0mZ3Q7ZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eShkaF9kZXYsIGRldmljZSwgMCwKJiM0MzsJCQkJCQkJWlhESF9QRl9BTElHTjQsIDAsIFBBR0VfU0laRSwKJiM0MzsJCQkJCQkgICAgICAgJmFtcDtwZl9kZXYtJmd0O2RldmljZV9sZW4sIE5VTEwsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7cGZfZGV2LSZndDtkZXZfY2ZnX2Jhcl9vZmYpOwomIzQzOwkJaWYgKCFwZl9kZXYtJmd0O2RldmljZSkgewomIzQzOwkJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGZfZGV2LSZndDtkZXZpY2UgaXMgbnVsbFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CiYjNDM7CWlmIChwZl9kZXYtJmd0O2RldmljZSkKJiM0MzsJCXBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi0mZ3Q7ZGV2aWNlKTsKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpCiYjNDM7CQlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O25vdGlmeV9iYXNlKTsKJiM0MzsJcGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LSZndDtjb21tb24pOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7enhkaF9wZl9jb21tb25fY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7enhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9tYXBfbm90aWZ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7enhkaF9wZl9kZXZpY2VfY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9tYXBfZGV2aWNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9tYXBfZGV2aWNlOgomIzQzOwlpZiAocGZfZGV2LSZndDtub3RpZnlfYmFzZSkKJiM0MzsJCXBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpOwomIzQzO2Vycl9tYXBfbm90aWZ5OgomIzQzOwlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O2NvbW1vbik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3UxNiB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LAomIzQzOwkJCQkgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChwZl9kZXYtJmd0O3BhY2tlZF9zdGF0dXMpCiYjNDM7CQlpb3dyaXRlMTYocGh5X2luZGV4LCAmYW1wO3BmX2Rldi0mZ3Q7Y29tbW9uLSZndDtxdWV1ZV9zZWxlY3QpOwomIzQzOwllbHNlCiYjNDM7CQlpb3dyaXRlMTYoaW5kZXgsICZhbXA7cGZfZGV2LSZndDtjb21tb24tJmd0O3F1ZXVlX3NlbGVjdCk7CiYjNDM7CiYjNDM7CXJldHVybiBpb3JlYWQxNigmYW1wO3BmX2Rldi0mZ3Q7Y29tbW9uLSZndDtxdWV1ZV9ub3RpZnlfb2ZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsCiYjNDM7CQkJCSAgICB1MTYgcGh5X2luZGV4LCB1MTYgaW5kZXgsCiYjNDM7CQkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90ICpwYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwl1MTYgb2ZmOwomIzQzOwomIzQzOwlvZmYgPSB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKGRoX2RldiwgcGh5X2luZGV4LCBpbmRleCk7CiYjNDM7CiYjNDM7CWlmIChwZl9kZXYtJmd0O25vdGlmeV9iYXNlKSB7CiYjNDM7CQkvKiBvZmZzZXQgc2hvdWxkIG5vdCB3cmFwICovCiYjNDM7CQlpZiAoKHU2NClvZmYgKgomIzQzOwkJCXBmX2Rldi0mZ3Q7bm90aWZ5X29mZnNldF9tdWx0aXBsaWVyICYjNDM7IDIgJmd0OyBwZl9kZXYtJmd0O25vdGlmeV9sZW4pIHsKJiM0MzsJCQlkZXZfZXJyKGRoX2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCQkmIzM0O2JhZCBub3RpZmljYXRpb24gb2Zmc2V0ICV1ICh4ICV1KSBmb3IgcXVldWUgJXUgJmd0OyAlenVcbiYjMzQ7LAomIzQzOwkJCQlvZmYsIHBmX2Rldi0mZ3Q7bm90aWZ5X29mZnNldF9tdWx0aXBsaWVyLCBwaHlfaW5kZXgsCiYjNDM7CQkJCXBmX2Rldi0mZ3Q7bm90aWZ5X2xlbik7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocGEpCiYjNDM7CQkJKnBhID0gcGZfZGV2LSZndDtub3RpZnlfcGEgJiM0Mzsgb2ZmICogcGZfZGV2LSZndDtub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7CiYjNDM7CiYjNDM7CQlyZXR1cm4gcGZfZGV2LSZndDtub3RpZnlfYmFzZSAmIzQzOyBvZmYgKiBwZl9kZXYtJmd0O25vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KGRoX2RldiwgcGZfZGV2LSZndDtub3RpZnlfbWFwX2NhcCwgMiwgMiwKJiM0MzsJCQkJCSAgICAgIG9mZiAqIHBmX2Rldi0mZ3Q7bm90aWZ5X29mZnNldF9tdWx0aXBsaWVyLAomIzQzOwkJCQkJICAgICAgMiwgTlVMTCwgcGEsIE5VTEwpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9wZl91bm1hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHZvaWQgX19pb21lbSAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoIXBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpCiYjNDM7CQlwY2lfaW91bm1hcChkaF9kZXYtJmd0O3BkZXYsIHByaXYpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfc2V0X3N0YXR1cyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggc3RhdHVzKQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlvd3JpdGU4KHN0YXR1cywgJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7ZGV2aWNlX3N0YXR1cyk7CiYjNDM7fQomIzQzOwomIzQzO3U4IHp4ZGhfcGZfZ2V0X3N0YXR1cyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlyZXR1cm4gaW9yZWFkOCgmYW1wO3BmX2Rldi0mZ3Q7Y29tbW9uLSZndDtkZXZpY2Vfc3RhdHVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dTggenhkaF9wZl9nZXRfY2ZnX2dlbihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwl1OCBjb25maWdfZ2VuZXJhdGlvbjsKJiM0MzsKJiM0MzsJY29uZmlnX2dlbmVyYXRpb24gPSBpb3JlYWQ4KCZhbXA7cGZfZGV2LSZndDtjb21tb24tJmd0O2NvbmZpZ19nZW5lcmF0aW9uKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvbmZpZ19nZW5lcmF0aW9uOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfZ2V0X3ZmX21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYywgaW50IHZmX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXUzMiBERVZfTUFDX0w7CiYjNDM7CXUxNiBERVZfTUFDX0g7CiYjNDM7CiYjNDM7CWV0aF96ZXJvX2FkZHIobWFjKTsKJiM0MzsKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7cGZfc3Jpb3ZfY2FwX2Jhc2UpIHsKJiM0MzsJCURFVl9NQUNfTCA9IGlvcmVhZDMyKHBmX2Rldi0mZ3Q7cGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MzsKJiM0MzsJCQkJICAgICAocGZfZGV2LSZndDtzcmlvdl9iYXJfc2l6ZSkgKiB2Zl9pZCAmIzQzOwomIzQzOwkJCQkgICAgIHBmX2Rldi0mZ3Q7ZGV2X2NmZ19iYXJfb2ZmKTsKJiM0MzsJCW1hY1swXSA9IERFVl9NQUNfTCAmYW1wOyAweGZmOwomIzQzOwkJbWFjWzFdID0gKERFVl9NQUNfTCAmZ3Q7Jmd0OyA4KSAmYW1wOyAweGZmOwomIzQzOwkJbWFjWzJdID0gKERFVl9NQUNfTCAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZjsKJiM0MzsJCW1hY1szXSA9IChERVZfTUFDX0wgJmd0OyZndDsgMjQpICZhbXA7IDB4ZmY7CiYjNDM7CQlERVZfTUFDX0ggPSBpb3JlYWQxNihwZl9kZXYtJmd0O3BmX3NyaW92X2NhcF9iYXNlICYjNDM7CiYjNDM7CQkJCSAgICAgIChwZl9kZXYtJmd0O3NyaW92X2Jhcl9zaXplKSAqIHZmX2lkICYjNDM7CiYjNDM7CQkJCSAgICAgIHBmX2Rldi0mZ3Q7ZGV2X2NmZ19iYXJfb2ZmICYjNDM7CiYjNDM7CQkJCSAgICAgIFpYREhfREVWX01BQ19ISUdIX09GRlNFVCk7CiYjNDM7CQltYWNbNF0gPSBERVZfTUFDX0ggJmFtcDsgMHhmZjsKJiM0MzsJCW1hY1s1XSA9IChERVZfTUFDX0ggJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfc2V0X3ZmX21hY19yZWcoc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYsCiYjNDM7CQkJICAgIHU4ICptYWMsIGludCB2Zl9pZCkKJiM0Mzt7CiYjNDM7CXUzMiBERVZfTUFDX0w7CiYjNDM7CXUxNiBERVZfTUFDX0g7CiYjNDM7CiYjNDM7CWlmIChwZl9kZXYtJmd0O3BmX3NyaW92X2NhcF9iYXNlKSB7CiYjNDM7CQlERVZfTUFDX0wgPSBtYWNbMF0gfCAobWFjWzFdICZsdDsmbHQ7IDgpIHwKJiM0MzsJCQkJCShtYWNbMl0gJmx0OyZsdDsgMTYpIHwgKG1hY1szXSAmbHQ7Jmx0OyAyNCk7CiYjNDM7CQlERVZfTUFDX0ggPSBtYWNbNF0gfCAobWFjWzVdICZsdDsmbHQ7IDgpOwomIzQzOwkJaW93cml0ZTMyKERFVl9NQUNfTCwgKHBmX2Rldi0mZ3Q7cGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MzsKJiM0MzsJCQkgIChwZl9kZXYtJmd0O3NyaW92X2Jhcl9zaXplKSAqIHZmX2lkICYjNDM7CiYjNDM7CQkJICBwZl9kZXYtJmd0O2Rldl9jZmdfYmFyX29mZikpOwomIzQzOwkJaW93cml0ZTE2KERFVl9NQUNfSCwgKHBmX2Rldi0mZ3Q7cGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MzsKJiM0MzsJCQkgIChwZl9kZXYtJmd0O3NyaW92X2Jhcl9zaXplKSAqIHZmX2lkICYjNDM7CiYjNDM7CQkJICBwZl9kZXYtJmd0O2Rldl9jZmdfYmFyX29mZiAmIzQzOwomIzQzOwkJCSAgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB6eGRoX3BmX3NldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwl6eGRoX3BmX3NldF92Zl9tYWNfcmVnKHBmX2RldiwgbWFjLCB2Zl9pZCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9zZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXUzMiBERVZfTUFDX0w7CiYjNDM7CXUxNiBERVZfTUFDX0g7CiYjNDM7CiYjNDM7CWlmICghcGZfZGV2LSZndDtkZXZpY2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CURFVl9NQUNfTCA9IG1hY1swXSB8IChtYWNbMV0gJmx0OyZsdDsgOCkgfCAobWFjWzJdICZsdDsmbHQ7IDE2KSB8IChtYWNbM10gJmx0OyZsdDsgMjQpOwomIzQzOwlERVZfTUFDX0ggPSBtYWNbNF0gfCAobWFjWzVdICZsdDsmbHQ7IDgpOwomIzQzOwlpb3dyaXRlMzIoREVWX01BQ19MLCBwZl9kZXYtJmd0O2RldmljZSk7CiYjNDM7CWlvd3JpdGUxNihERVZfTUFDX0gsIHBmX2Rldi0mZ3Q7ZGV2aWNlICYjNDM7IFpYREhfREVWX01BQ19ISUdIX09GRlNFVCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9nZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXUzMiBERVZfTUFDX0w7CiYjNDM7CXUxNiBERVZfTUFDX0g7CiYjNDM7CiYjNDM7CWlmICghcGZfZGV2LSZndDtkZXZpY2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CURFVl9NQUNfTCA9IGlvcmVhZDMyKHBmX2Rldi0mZ3Q7ZGV2aWNlKTsKJiM0MzsJbWFjWzBdID0gREVWX01BQ19MICZhbXA7IDB4ZmY7CiYjNDM7CW1hY1sxXSA9IChERVZfTUFDX0wgJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsJbWFjWzJdID0gKERFVl9NQUNfTCAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZjsKJiM0MzsJbWFjWzNdID0gKERFVl9NQUNfTCAmZ3Q7Jmd0OyAyNCkgJmFtcDsgMHhmZjsKJiM0MzsJREVWX01BQ19IID0gaW9yZWFkMTYocGZfZGV2LSZndDtkZXZpY2UgJiM0MzsgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKTsKJiM0MzsJbWFjWzRdID0gREVWX01BQ19IICZhbXA7IDB4ZmY7CiYjNDM7CW1hY1s1XSA9IChERVZfTUFDX0ggJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0Mzt9CiYjNDM7CiYjNDM7dTY0IHp4ZGhfcGZfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXU2NCBkZXZpY2VfZmVhdHVyZTsKJiM0MzsKJiM0MzsJaW93cml0ZTMyKDAsICZhbXA7cGZfZGV2LSZndDtjb21tb24tJmd0O2RldmljZV9mZWF0dXJlX3NlbGVjdCk7CiYjNDM7CWRldmljZV9mZWF0dXJlID0gaW9yZWFkMzIoJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7ZGV2aWNlX2ZlYXR1cmUpOwomIzQzOwlpb3dyaXRlMzIoMSwgJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7ZGV2aWNlX2ZlYXR1cmVfc2VsZWN0KTsKJiM0MzsJZGV2aWNlX2ZlYXR1cmUgfD0gKCh1NjQpaW9yZWFkMzIoJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7ZGV2aWNlX2ZlYXR1cmUpCiYjNDM7CQkJCQkJJmx0OyZsdDsgMzIpOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2aWNlX2ZlYXR1cmU7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU2NCBmZWF0dXJlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlpb3dyaXRlMzIoMCwgJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7Z3Vlc3RfZmVhdHVyZV9zZWxlY3QpOwomIzQzOwlpb3dyaXRlMzIoKHUzMilmZWF0dXJlcywgJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7Z3Vlc3RfZmVhdHVyZSk7CiYjNDM7CWlvd3JpdGUzMigxLCAmYW1wO3BmX2Rldi0mZ3Q7Y29tbW9uLSZndDtndWVzdF9mZWF0dXJlX3NlbGVjdCk7CiYjNDM7CWlvd3JpdGUzMihmZWF0dXJlcyAmZ3Q7Jmd0OyAzMiwgJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7Z3Vlc3RfZmVhdHVyZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2OwomIzQzOwlzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldjsKJiM0MzsJc3RydWN0IGRldmxpbmsgKmRldmxpbms7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKCZhbXA7ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgZGhfY29yZV9kZXYpLAomIzQzOwkJCQkmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CWlmICghZGV2bGluaykgewomIzQzOwkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtkaF9wZiBkZXZsaW5rIGFsbG9jIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspOwomIzQzOwlkaF9kZXYtJmd0O2RldmljZSA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwomIzQzOwlkaF9kZXYtJmd0O3BkZXYgPSBwZGV2OwomIzQzOwlkaF9kZXYtJmd0O2RldmxpbmsgPSBkZXZsaW5rOwomIzQzOwomIzQzOwlwZl9kZXYgPSBkaF9jb3JlX2FsbG9jX3ByaXYoZGhfZGV2LCBzaXplb2YoKnBmX2RldikpOwomIzQzOwlpZiAoIXBmX2RldikgewomIzQzOwkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfcGZfZGV2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmX2Rldi0mZ3Q7YmFyX2NoYW5fdmFsaWQgPSBmYWxzZTsKJiM0MzsJcGZfZGV2LSZndDt2ZXBhID0gZmFsc2U7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtkaF9kZXYtJmd0O2xvY2spOwomIzQzOwltdXRleF9pbml0KCZhbXA7cGZfZGV2LSZndDtpcnFfbG9jayk7CiYjNDM7CiYjNDM7CWRoX2Rldi0mZ3Q7Y29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTsKJiM0MzsKJiM0MzsJcmV0ID0gZGhfcGZfcGNpX2luaXQoZGhfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtkaF9wZl9wY2lfaW5pdCBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2NmZ19pbml0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9jZmdfaW5pdDoKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3BmX2Rldi0mZ3Q7aXJxX2xvY2spOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7ZGhfZGV2LSZndDtsb2NrKTsKJiM0MzsJZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTsKJiM0MztlcnJfcGZfZGV2OgomIzQzOwlkZXZsaW5rX2ZyZWUoZGV2bGluayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkaF9kZXYpOwomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspOwomIzQzOwlkaF9wZl9wY2lfY2xvc2UoZGhfZGV2KTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3BmX2Rldi0mZ3Q7aXJxX2xvY2spOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7ZGhfZGV2LSZndDtsb2NrKTsKJiM0MzsJZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTsKJiM0MzsJZGV2bGlua19mcmVlKGRldmxpbmspOwomIzQzOwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRoX3BmX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKQomIzQzOwkJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwomIzQzOwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkaF9wZl9kcml2ZXIgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtkaW5naGFpMTBlJiMzNDssCiYjNDM7CS5pZF90YWJsZSA9IGRoX3BmX3BjaV90YWJsZSwKJiM0MzsJLnByb2JlID0gZGhfcGZfcHJvYmUsCiYjNDM7CS5yZW1vdmUgPSBkaF9wZl9yZW1vdmUsCiYjNDM7CS5zaHV0ZG93biA9IGRoX3BmX3NodXRkb3duLAomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BjaV9kcml2ZXIoZGhfcGZfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZGFhNzlhNmQ2ZjJhYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgKQEAgLTAsMCAmIzQzOzEsMTE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUEYgaGVhZGVyCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fWlhESF9FTl9QRl9IX18KJiM0MzsjZGVmaW5lIF9fWlhESF9FTl9QRl9IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBaWERIX1BGX1ZFTkRPUl9JRAkweDFjZjIKJiM0MzsjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lECTB4ODA0MAomIzQzOyNkZWZpbmUgWlhESF9WRl9ERVZJQ0VfSUQJMHg4MDQxCiYjNDM7CiYjNDM7LyogQ29tbW9uIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHCTEKJiM0MzsvKiBOb3RpZmljYXRpb25zICovCiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGRwkyCiYjNDM7LyogSVNSIGFjY2VzcyAqLwomIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0lTUl9DRkcJCTMKJiM0MzsvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqLwomIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcJNAomIzQzOy8qIFBDSSBjb25maWd1cmF0aW9uIGFjY2VzcyAqLwomIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX1BDSV9DRkcJCTUKJiM0MzsKJiM0MzsjZGVmaW5lIFpYREhfUEZfTUFYX0JBUl9WQUwJCTB4NQomIzQzOyNkZWZpbmUgWlhESF9QRl9BTElHTjQJCQk0CiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdOMgkJCTIKJiM0MzsjZGVmaW5lIFpYREhfUEZfTUFQX01JTkxFTjIJCTIKJiM0MzsKJiM0MzsjZGVmaW5lIFpYREhfREVWX01BQ19ISUdIX09GRlNFVAk0CiYjNDM7CiYjNDM7ZW51bSBkaF9jb3JlZGV2X3R5cGUgewomIzQzOwlESF9DT1JFREVWX1BGLAomIzQzOwlESF9DT1JFREVWX1ZGLAomIzQzOwlESF9DT1JFREVWX1NGLAomIzQzOwlESF9DT1JFREVWX01QRgomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGRldmxpbms7CiYjNDM7CiYjNDM7c3RydWN0IGRoX2NvcmVfZGV2IHsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2aWNlOwomIzQzOwllbnVtIGRoX2NvcmVkZXZfdHlwZSBjb3JlZGV2X3R5cGU7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2OwomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGV2bGluazsKJiM0MzsJc3RydWN0IG11dGV4IGxvY2s7IC8qIFByb3RlY3RzIGRldmljZSBjb25maWd1cmF0aW9uICovCiYjNDM7CXZvaWQgKnByaXY7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjb21tb247CiYjNDM7CS8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqLwomIzQzOwkvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovCiYjNDM7CXZvaWQgX19pb21lbSAqZGV2aWNlOwomIzQzOwl2b2lkIF9faW9tZW0gKm5vdGlmeV9iYXNlOwomIzQzOwl2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlOwomIzQzOwkvKiBQaHlzaWNhbCBiYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKi8KJiM0MzsJcmVzb3VyY2Vfc2l6ZV90IG5vdGlmeV9wYTsKJiM0MzsJLyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi8KJiM0MzsJc2l6ZV90IG5vdGlmeV9sZW47CiYjNDM7CXNpemVfdCBkZXZpY2VfbGVuOwomIzQzOwkvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqLwomIzQzOwlzMzIgbm90aWZ5X21hcF9jYXA7CiYjNDM7CXUzMiBub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7CiYjNDM7CS8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovCiYjNDM7CXMzMiBtb2Rlcm5fYmFyczsKJiM0MzsJdm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdOwomIzQzOwl1NjQgc3Jpb3ZfYmFyX3NpemU7CiYjNDM7CXUzMiBkZXZfY2ZnX2Jhcl9vZmY7CiYjNDM7CWJvb2wgcGFja2VkX3N0YXR1czsKJiM0MzsJYm9vbCBiYXJfY2hhbl92YWxpZDsKJiM0MzsJYm9vbCB2ZXBhOwomIzQzOwlzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7IC8qIFByb3RlY3RzIElSUSBvcGVyYXRpb25zICovCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEdFVF9DT1JFREVWX1RZUEUocGRldikgXAomIzQzOwkoKHBkZXYpLSZndDtkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRikKJiM0MzsKJiM0Mzt2b2lkICpkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHNpemVfdCBzaXplKTsKJiM0Mzt2b2lkIGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTsKJiM0Mzt2b2lkIGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldik7CiYjNDM7aW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsCiYjNDM7CQkJCXUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpOwomIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgaW50IG9mZiwKJiM0MzsJCQkJICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sCiYjNDM7CQkJCSAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSwKJiM0MzsJCQkJICAgICB1MzIgKmJhcl9vZmYpOwomIzQzO2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTsKJiM0MztpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpOwomIzQzO3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTsKJiM0Mzt1MTYgenhkaF9wZl9nZXRfcXVldWVfbm90aWZ5X29mZihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwKJiM0MzsJCQkJIHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCk7CiYjNDM7dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsCiYjNDM7CQkJCSAgICAgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4LAomIzQzOwkJCQkgICAgIHJlc291cmNlX3NpemVfdCAqcGEpOwomIzQzO3ZvaWQgenhkaF9wZl91bm1hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHZvaWQgX19pb21lbSAqcHJpdik7CiYjNDM7dm9pZCB6eGRoX3BmX3NldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4IHN0YXR1cyk7CiYjNDM7dTggenhkaF9wZl9nZXRfc3RhdHVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTsKJiM0Mzt1OCB6eGRoX3BmX2dldF9jZmdfZ2VuKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTsKJiM0Mzt2b2lkIHp4ZGhfcGZfZ2V0X3ZmX21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYywgaW50IHZmX2lkKTsKJiM0Mzt2b2lkIHp4ZGhfcGZfc2V0X3ZmX21hY19yZWcoc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYsCiYjNDM7CQkJICAgIHU4ICptYWMsIGludCB2Zl9pZCk7CiYjNDM7dm9pZCB6eGRoX3BmX3NldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZCk7CiYjNDM7dm9pZCB6eGRoX3NldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpOwomIzQzO3ZvaWQgenhkaF9nZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKTsKJiM0Mzt1NjQgenhkaF9wZl9nZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpOwomIzQzO3ZvaWQgenhkaF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU2NCBmZWF0dXJlcyk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNDEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYWRkaW5nIGEgbmV3IEV0aGVybmV0IGRyaXZlciBmb3IgWlRFIERpbmdIYWkgZGV2aWNlcy4gVGhlIHN0cnVjdHVyZSBpcyBwcmV0dHkgc3RhbmRhcmQ6IGBNQUlOVEFJTkVSU2AgdXBkYXRlLCBgS2NvbmZpZ2AgYW5kIGBNYWtlZmlsZWAgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBkaXJlY3Rvcmllcy4gU3BlY2lmaWNhbGx5LCB0aGlzIGRyaXZlciBzZWVtcyB0byBiZSB0YXJnZXRpbmcgUENJLWJhc2VkIFpURSBEaW5nSGFpIGhhcmR3YXJlLgoKRnJvbSB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhpcyBkcml2ZXIgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBQQ0kgZHJpdmVyIGBkaF9wZl9kcml2ZXJgLCB3aXRoIGBkaF9wZl9wcm9iZWAgc2VydmluZyBhcyB0aGUga2V5IGluaXRpYWxpemF0aW9uIHBvaW50LiBJbml0aWFsbHksIEkgdGhvdWdodCBpdCB3YXMgbWlzc2luZyB0aGUgY3J1Y2lhbCBgbmV0X2RldmljZWAgcmVnaXN0cmF0aW9uLCBidXQgdGhlbiBJIHNlZSB0aGUgcGF0Y2ggZG9lcyByZWdpc3RlciBhIGBkZXZsaW5rYCBpbnN0YW5jZSB1c2luZyBgZGV2bGlua19yZWdpc3RlcihkZXZsaW5rKWAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBwb3NpdGl2ZSBzaWduLCBhcyB0aGlzIGV4cG9zZXMgZnVuY3Rpb25hbGl0eSB0byB1c2Vyc3BhY2UuCgpEaWdnaW5nIGRlZXBlciwgdGhlIGRyaXZlciBpbXBsZW1lbnRzIGBkaF9wZl9wcm9iZWAsIGBkaF9wZl9yZW1vdmVgLCBhbmQgYGRoX3BmX3NodXRkb3duYC4gSSBub3RpY2VkIHNvbWUgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0YCwgYHp4ZGhfcGZfc2V0X3ZmX21hY2AsIGV0Yy4sIGFyZSBkZWZpbmVkLiBIb3dldmVyLCBhIHF1aWNrIHNjYW4gb2YgYGVuX3BmLmNgIHJldmVhbGVkIHRoYXQgdGhleSBhcmVuJiMzOTt0IGNhbGxlZCBhbnl3aGVyZSBpbiB0aGUgZHJpdmVyIGl0c2VsZiwgd2hpY2ggaXMgYSBiaXQgcHV6emxpbmcuIE1heWJlIHRoZXkmIzM5O3JlIHBhcnQgb2YgYSBmdXR1cmUgaW1wbGVtZW50YXRpb24gb3IgYXJlIG1lYW50IHRvIGJlIGNhbGxlZCBleHRlcm5hbGx5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhleSBhcmUgdHJ1bHkgdW51c2VkLCBsaWtlbHkgZGVhZCBjb2RlLCBvciBzb21laG93IGNhbGxlZCBlbHNld2hlcmUgKG1heWJlIGEgZGlmZmVyZW50IHBhdGNoPykuCgpMb29raW5nIHNwZWNpZmljYWxseSBhdCB3aGF0IGBkaF9wZl9wcm9iZWAgZG9lcywgSSBzZWUgaXQgY2FsbHMgYGRldmxpbmtfYWxsb2NgLCBgZGhfY29yZV9hbGxvY19wcml2YCwgYGRoX3BmX3BjaV9pbml0YCwgYW5kIHRoZW4gcmVnaXN0ZXJzIHRoZSBgZGV2bGlua2AuIFRoaXMgaXMgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhIGZ1bmN0aW9uYWwgZHJpdmVyLgoKVG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRocm91Z2ggdGhlIGNvZGUgdG8gdmVyaWZ5IHRoYXQgdGhvc2Ugb3RoZXIgZnVuY3Rpb25zIGFyZSBub3QgYWN0dWFsbHkgdXNlZCwgZW5zdXJpbmcgdGhhdCB0aGV5IHRydWx5IGFyZW4mIzM5O3QgcmVmZXJlbmNlZCBieSBhbnkgb3RoZXIgY29kZS4gSSYjMzk7bGwgcnVuIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgaXQgZmluZHMgb24gYHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6eGRoX3BmX21vZGVybl9jZmdfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jPTMyOD12b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0MDppbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM0MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaD05OD12b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo5OTppbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC0xMDAtdTE2IHp4ZGhfcGZfZ2V0X3F1ZXVlX25vdGlmeV9vZmYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MTgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBhIE5ldyBQQ0kgRHJpdmVyKioKCk9rYXksIHNvIHRoaXMgY29kZSBpcyBjdXJyZW50bHkgZG9ybWFudCwgZXNzZW50aWFsbHkgZGVhZCwgYnV0IGBkaF9wZl9wcm9iZWAgaXMgc3RpbGwgYWNjZXNzaWJsZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNob3VsZCBJIGV2ZW4gYm90aGVyIHdpdGggZnV6emluZyB0aGlzPyBZZXMsIGFic29sdXRlbHkuIEl0JiMzOTtzIGEgYnJhbmQgbmV3IFBDSSBkcml2ZXIsIGFuZCBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBmdXp6aW5nIFBDSSBkcml2ZXJzIHVzaW5nIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24g4oCTIGEgZ3JlYXQgb3Bwb3J0dW5pdHkuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3Mgc2VlLCBiYXNlZCBvbiB0aGUgbm90ZXMsIEkgbmVlZCBgTkVUX1ZFTkRPUl9aVEVgLCBgRElOR0hBSWAsIGFuZCBgRElOR0hBSV9QRmAuCgpSaWdodCwgdGltZSB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ2AuIE9rYXksIGBESU5HSEFJYCBkZXBlbmRzIG9uIGBQQ0lgLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQW5kIGBESU5HSEFJX1BGYCBpcyBhIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSBvciBidWlsdC1pbiwgb3IgZXZlbiBkaXNhYmxlZC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBESU5HSEFJYCBhbmQgYERJTkdIQUlfUEZgIGFyZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgdGhlIGRyaXZlciBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRElOR0hBSSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnOjY6Y29uZmlnIERJTkdIQUlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctNy0gICAgYm9vbCBcJiMzNDtaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnPTIxPWlmIERJTkdIQUlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnOjIzOmNvbmZpZyBESU5HSEFJX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTI0LSAgICB0cmlzdGF0ZSBcJiMzNDtaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTkyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFpURSBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBaVEUgRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIGJ5IGV4YW1pbmluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHRoZSBwbGFjZSB3aGVyZSB0aGUgaW5jbHVzaW9uIG9mIHRoZSBaVEUgRXRoZXJuZXQgZHJpdmVyIGlzIGRlZmluZWQsIGFsb25nIHdpdGggYWxsIGl0cyBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0byBmaW5kIGBjb25maWdgIG9wdGlvbnMsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMgdG8gbWFuYWdlIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugd2hldGhlciBpdCBzdXBwb3J0cyBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbnMsIGRpZmZlcmVudCBFdGhlcm5ldCBQSFkgdHlwZXMsIHBvd2VyIG1hbmFnZW1lbnQgZmVhdHVyZXMsIG9yIGFueSBvdGhlciBkcml2ZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWUuIEJhc2VkIG9uIHRoZSBLY29uZmlnIGZpbGUsIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIGl0IG1pZ2h0IGFwcGx5IGluIGEgc3BlY2lmaWMgdXNlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9WRU5ET1JfWlRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZzo2OmNvbmZpZyBORVRfVkVORE9SX1pURVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWctNy0gICAgYm9vbCBcJiMzNDtaVEUgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjk5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWlRFIERpbmdoYWkgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCB0aGUga2V5IGlzIGVuYWJsaW5nIHRoZXNlIG1vZHVsZXM6IGBORVRfVkVORE9SX1pURWAsIGBESU5HSEFJYCwgYW5kIGBESU5HSEFJX1BGYC4gUmlnaHQsIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHN5bWJvbHMsIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMuIEkgc2VlIHRoZSBmb2N1cyBpcyBvbiBgZGhfcGZfcHJvYmVgLCBgZGhfcGZfcmVtb3ZlYCwgYGRoX3BmX3BjaV9pbml0YCwgYW5kIGBkaF9wZl9wY2lfY2xvc2VgLiBBaCwgYGRoX3BmX3Byb2JlYCByaW5ncyBhIGJlbGwsIHRoYXQgbG9va3MgbGlrZSBhIFBDSSBwcm9iZSBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbnRleHQuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFjY2Vzc2libGUgZnVuY3Rpb25zIGluIHRoaXMgcGF0aC4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IGBkZXZsaW5rX29wc2AsIGl0JiMzOTtzIGVtcHR5OiBgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkaF9wZl9kZXZsaW5rX29wcyA9IHt9O2AgT2theSwgc28gbm8gZGV2bGluayBjYWxsYmFja3MgYXJlIGRlZmluZWQgaGVyZS4gVGhhdCBoZWxwcyBuYXJyb3cgdGhpbmdzIGRvd24gY29uc2lkZXJhYmx5LgoKU28sIHRvIHJlaXRlcmF0ZSwgdGhlIG9ubHkgcmVhY2hhYmxlIGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgYGRoX3BmX3Byb2JlYCwgYGRoX3BmX3JlbW92ZWAsIGBkaF9wZl9zaHV0ZG93bmAsIGBkaF9wZl9wY2lfaW5pdGAsIGFuZCBgZGhfcGZfcGNpX2Nsb3NlYC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwsIHNvIEkmIzM5O2xsIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBleGFjdGx5IHdoYXQgYGRoX3BmX3Byb2JlYCBkb2VzIHRvIGNvbmZpcm0gaXQmIzM5O3MgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGl0IHNlZW1zLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTYwOlx0c3RhdGljIGludCBkaF9wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIDU2MTpcdHtcbiA1NjI6XHRcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2O1xuIDU2MzpcdFx0c3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXY7XG4gNTY0Olx0XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbiA1NjU6XHRcdGludCByZXQ7XG4gNTY2Olx0XG4gNTY3Olx0XHRkZXZsaW5rID0gZGV2bGlua19hbGxvYyhcdTAwMjZkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCBkaF9jb3JlX2RldiksXG4gNTY4Olx0XHRcdFx0XHRcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gNTY5Olx0XHRpZiAoIWRldmxpbmspIHtcbiA1NzA6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuIDU3MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA1NzI6XHRcdH1cbiA1NzM6XHRcbiA1NzQ6XHRcdGRoX2RldiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcbiA1NzU6XHRcdGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiA1NzY6XHRcdGRoX2Rldi1cdTAwM2VwZGV2ID0gcGRldjtcbiA1Nzc6XHRcdGRoX2Rldi1cdTAwM2VkZXZsaW5rID0gZGV2bGluaztcbiA1Nzg6XHRcbiA1Nzk6XHRcdHBmX2RldiA9IGRoX2NvcmVfYWxsb2NfcHJpdihkaF9kZXYsIHNpemVvZigqcGZfZGV2KSk7XG4gNTgwOlx0XHRpZiAoIXBmX2Rldikge1xuIDU4MTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxuXCYjMzQ7KTtcbiA1ODI6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA1ODM6XHRcdFx0Z290byBlcnJfcGZfZGV2O1xuIDU4NDpcdFx0fVxuIDU4NTpcdFxuIDU4NjpcdFx0cGZfZGV2LVx1MDAzZWJhcl9jaGFuX3ZhbGlkID0gZmFsc2U7XG4gNTg3Olx0XHRwZl9kZXYtXHUwMDNldmVwYSA9IGZhbHNlO1xuIDU4ODpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkaF9kZXYtXHUwMDNlbG9jayk7XG4gNTg5Olx0XHRtdXRleF9pbml0KFx1MDAyNnBmX2Rldi1cdTAwM2VpcnFfbG9jayk7XG4gNTkwOlx0XG4gNTkxOlx0XHRkaF9kZXYtXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcbiA1OTI6XHRcbiA1OTM6XHRcdHJldCA9IGRoX3BmX3BjaV9pbml0KGRoX2Rldik7XG4gNTk0Olx0XHRpZiAocmV0KSB7XG4gNTk1Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2RoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4gNTk2Olx0XHRcdGdvdG8gZXJyX2NmZ19pbml0O1xuIDU5NzpcdFx0fVxuIDU5ODpcdFxuIDU5OTpcdFx0ZGV2bGlua19yZWdpc3RlcihkZXZsaW5rKTtcbiA2MDA6XHRcbiA2MDE6XHRcdHJldHVybiAwO1xuIDYwMjpcdFxuIDYwMzpcdGVycl9jZmdfaW5pdDpcbiA2MDQ6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbiA2MDU6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGhfZGV2LVx1MDAzZWxvY2spO1xuIDYwNjpcdFx0ZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTtcbiA2MDc6XHRlcnJfcGZfZGV2OlxuIDYwODpcdFx0ZGV2bGlua19mcmVlKGRldmxpbmspO1xuIDYwOTpcdFx0cmV0dXJuIHJldDtcbiA2MTA6XHR9XG4gNjExOlx0XG4gNjEyOlx0c3RhdGljIHZvaWQgZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIDYxMzpcdHtcbiA2MTQ6XHRcdHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuIDYxNTpcdFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoZGhfZGV2KTtcbiA2MTY6XHRcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4gNjE3Olx0XG4gNjE4Olx0XHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4gNjE5Olx0XHRkaF9wZl9wY2lfY2xvc2UoZGhfZGV2KTtcbiA2MjA6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbiA2MjE6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGhfZGV2LVx1MDAzZWxvY2spO1xuIDYyMjpcdFx0ZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTtcbiA2MjM6XHRcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbiA2MjQ6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbiA2MjU6XHR9XG4gNjI2Olx0XG4gNjI3Olx0c3RhdGljIHZvaWQgZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gNjI4Olx0e1xuIDYyOTpcdFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKVxuIDYzMDpcdFx0XHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XG4gNjMxOlx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gNjMyOlx0fVxuIDYzMzpcdFxuIDYzNDpcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkaF9wZl9kcml2ZXIgPSB7XG4gNjM1Olx0XHQubmFtZSA9IFwmIzM0O2RpbmdoYWkxMGVcJiMzNDssXG4gNjM2Olx0XHQuaWRfdGFibGUgPSBkaF9wZl9wY2lfdGFibGUsXG4gNjM3Olx0XHQucHJvYmUgPSBkaF9wZl9wcm9iZSxcbiA2Mzg6XHRcdC5yZW1vdmUgPSBkaF9wZl9yZW1vdmUsXG4gNjM5Olx0XHQuc2h1dGRvd24gPSBkaF9wZl9zaHV0ZG93bixcbiA2NDA6XHR9O1xuIDY0MTpcdFxuIDY0MjpcdG1vZHVsZV9wY2lfZHJpdmVyKGRoX3BmX2RyaXZlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTY0CgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldDogWlRFIERpbmdIYWkgRXRoZXJuZXQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBQQ0kgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUsIGdvb2QsIGEgbmV3IHRhcmdldCEgSXQgaW1wbGVtZW50cyB0aGUgdXN1YWwgUENJIGRyaXZlciBsaWZlY3ljbGUgZnVuY3Rpb25zIOKAkyBgcHJvYmVgLCBgcmVtb3ZlYCwgYW5kIGBzaHV0ZG93bmAg4oCTIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuCgpJJiMzOTttIG5vdGljaW5nIHRoYXQgdGhlIHBhdGNoIGFsc28gZGVmaW5lcyBzb21lIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGB6eGRoX3BmX21vZGVybl9jZmdfaW5pdGAgYW5kIGB6eGRoX3BmX3NldF92Zl9tYWNgLCBidXQgdGhlc2UgZG9uJiMzOTt0IHNlZW0gdG8gYmUgY3VycmVudGx5IHV0aWxpemVkIHdpdGhpbiB0aGUgYHByb2JlYCByb3V0aW5lLiBJbnRlcmVzdGluZ+KApiBwb3RlbnRpYWxseSBhIGZ1dHVyZSBleHBhbnNpb24gb3IgcGVyaGFwcyBzb21lIHVudXNlZCBjb2RlIHBhdGhzLiBXb3J0aCBrZWVwaW5nIGFuIGV5ZSBvbiwgYnV0IGZvciB0aGUgaW5pdGlhbCBmdXp6aW5nLCBteSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLgoKU2luY2UgdGhlIGBwcm9iZWAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHZpYSB0aGUgUENJIHN1YnN5c3RlbSwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMgb24gYGRoX3BmX3Byb2JlYCwgYGRoX3BmX3JlbW92ZWAsIGBkaF9wZl9wY2lfaW5pdGAsIGFuZCBgZGhfcGZfcGNpX2Nsb3NlYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBleGl0IHBvaW50cyBmb3IgdGhlIGRyaXZlciwgYW5kIGZ1enppbmcgdGhlc2UgY291bGQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcyBpbiBob3cgaXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJhdGlvbiwgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJJiMzOTtsbCBuZWVkIHRvIGVuc3VyZSB0aGUgZm9sbG93aW5nIGFyZSBlbmFibGVkOiBgTkVUX1ZFTkRPUl9aVEVgLCBgRElOR0hBSWAsIGFuZCBgRElOR0hBSV9QRmAuIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhlIGRyaXZlciBpcyBwcm9wZXJseSBjb21waWxlZCBhbmQgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGFjY2Vzc2VkLCBlbmFibGluZyBteSBmdXp6aW5nLgoKUmlnaHQsIEkmIzM5O20gY29uZmlkZW50IEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSB0YXJnZXQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBmdXp6aW5nIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9aVEUmIzM0OywKICAgICYjMzQ7RElOR0hBSSYjMzQ7LAogICAgJiMzNDtESU5HSEFJX1BGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGhfcGZfcHJvYmUmIzM0OywKICAgICYjMzQ7ZGhfcGZfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2RoX3BmX3BjaV9pbml0JiMzNDssCiAgICAmIzM0O2RoX3BmX3BjaV9jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGEgUENJIHByb2JlIGZ1bmN0aW9uIHdoaWNoIGluaXRpYWxpemVzIHRoZSBkZXZpY2UsIG1hcHMgUENJIG1lbW9yeSwgYW5kIHJlZ2lzdGVycyBhIGRldmxpbmsgaW5zdGFuY2UuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfWlRFJiMzNDssCiAgICAmIzM0O0RJTkdIQUkmIzM0OywKICAgICYjMzQ7RElOR0hBSV9QRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RoX3BmX3Byb2JlJiMzNDssCiAgICAmIzM0O2RoX3BmX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtkaF9wZl9wY2lfaW5pdCYjMzQ7LAogICAgJiMzNDtkaF9wZl9wY2lfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIFBDSSBwcm9iZSBmdW5jdGlvbiB3aGljaCBpbml0aWFsaXplcyB0aGUgZGV2aWNlLCBtYXBzIFBDSSBtZW1vcnksIGFuZCByZWdpc3RlcnMgYSBkZXZsaW5rIGluc3RhbmNlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIGZ1enplZCB1c2luZyB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzA6MzcuMzQ4NzUxMjYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc0NzYzNjA2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9aVEVcIixcbiAgICBcIkRJTkdIQUlcIixcbiAgICBcIkRJTkdIQUlfUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaF9wZl9wcm9iZVwiLFxuICAgIFwiZGhfcGZfcmVtb3ZlXCIsXG4gICAgXCJkaF9wZl9wY2lfaW5pdFwiLFxuICAgIFwiZGhfcGZfcGNpX2Nsb3NlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIFBDSSBwcm9iZSBmdW5jdGlvbiB3aGljaCBpbml0aWFsaXplcyB0aGUgZGV2aWNlLCBtYXBzIFBDSSBtZW1vcnksIGFuZCByZWdpc3RlcnMgYSBkZXZsaW5rIGluc3RhbmNlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIGZ1enplZCB1c2luZyB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxOTozMDozNy4zNDg3NTYzMzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjY2NTA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI5ZGJhNzFhM2FhZTM1M2M1NDY0NGIwZmY0ZTRlODJjZWVkNTZmZmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTk6MzA6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDJmYjFjNzVhZmQxNjM4Li43MzY5MmIwOWJmN2JhYiAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTI5NDQwLDYgKzI5NDQwLDEyIEBAIFM6XFx0TWFpbnRhaW5lZFxcbiBUOlxcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGl3YWkvc291bmQuZ2l0XFxuIEY6XFx0c291bmQvaGRhL2NvZGVjcy9zZW5hcnl0ZWNoLmNcXG4gXFxuK1pURSBESU5HSEFJIEVUSEVSTkVUIERSSVZFUlxcbitNOlxcdEp1bnlhbmcgSGFuIFxcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXFx1MDAzZVxcbitMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG4rUzpcXHRNYWludGFpbmVkXFxuK0Y6XFx0ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL1xcbitcXG4gVEhFIFJFU1RcXG4gTTpcXHRMaW51cyBUb3J2YWxkcyBcXHUwMDNjdG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmdcXHUwMDNlXFxuIEw6XFx0bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZ1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xcbmluZGV4IGI4ZjcwZTJhMTc2M2FkLi5jMmI2OTk2YjBjZmUxYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xcbkBAIC0xODgsNSArMTg4LDYgQEAgc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcXFwiXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcXFwiXFxuIFxcbiBlbmRpZiAjIEVUSEVSTkVUXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcXG5pbmRleCA1NzM0NGZlYzZjZTA0Ny4uYTM0YmNiZDRkZjRlOTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxcbkBAIC0xMDQsMyArMTA0LDQgQEAgb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWElSQ09NKSArPSB4aXJjb20vXFxuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1NZTk9QU1lTKSArPSBzeW5vcHN5cy9cXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICs9IHBlbnNhbmRvL1xcbiBvYmotJChDT05GSUdfT0FfVEM2KSArPSBvYV90YzYub1xcbitvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9aVEUpICs9IHp0ZS9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2EyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXFxuQEAgLTAsMCArMSwyMCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI1xcbisjIFpURSBkcml2ZXIgY29uZmlndXJhdGlvblxcbisjXFxuK1xcbitjb25maWcgTkVUX1ZFTkRPUl9aVEVcXG4rICAgIGJvb2wgXFxcIlpURSBkZXZpY2VzXFxcIlxcbisgICAgZGVmYXVsdCB5XFxuKyAgICBoZWxwXFxuKyAgICAgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxcbisgICAgICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbisgICAgICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuKyAgICAgIHRoZSBxdWVzdGlvbnMgYWJvdXQgWnRlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkXFxuKyAgICAgIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuK1xcbitpZiBORVRfVkVORE9SX1pURVxcbitcXG4rc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXFxcIlxcbitcXG4rZW5kaWYgIyBORVRfVkVORE9SX1pURVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZDk5MjliNjE1NTljNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBNYWtlZmlsZSBmb3IgdGhlIFpURSBkZXZpY2UgZHJpdmVyc1xcbisjXFxuK1xcbitvYmotJChDT05GSUdfRElOR0hBSSkgKz0gZGluZ2hhaS9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xMjFiZTNiZjc3MDdmZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXFxuQEAgLTAsMCArMSwzNCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI1xcbisjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uXFxuKyNcXG4rXFxuK2NvbmZpZyBESU5HSEFJXFxuKyAgICBib29sIFxcXCJaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuKyAgICBkZXBlbmRzIG9uIFBDSVxcbisgICAgc2VsZWN0IE5FVF9ERVZMSU5LXFxuKyAgICBoZWxwXFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuXFxuK1xcbisgICAgICBEaW5nSGFpIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBFdGhlcm5ldCBjb250cm9sbGVyIHRoYXQgc3VwcG9ydHNcXG4rICAgICAgbXVsdGlwbGUgZmVhdHVyZXMgaW5jbHVkaW5nIGhhcmR3YXJlIG9mZmxvYWRpbmcsIFNSLUlPViwgYW5kXFxuKyAgICAgIGFkdmFuY2VkIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcy5cXG4rXFxuKyAgICAgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgY2FuIHNlbGVjdCBzcGVjaWZpYyBkcml2ZXIgdmFyaWFudHMgYmVsb3cuXFxuK1xcbisgICAgICBJZiB1bnN1cmUsIHNheSBOLlxcbitcXG4raWYgRElOR0hBSVxcbitcXG4rY29uZmlnIERJTkdIQUlfUEZcXG4rICAgIHRyaXN0YXRlIFxcXCJaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclxcXCJcXG4rICAgIGhlbHBcXG4rICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgUENJIEV4cHJlc3MgRXRoZXJuZXRcXG4rICAgICAgYWRhcHRlcnMgKFBGKS5cXG4rXFxuKyAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4rICAgICAgd2lsbCBiZSBuYW1lZCBkaW5naGFpMTBlLlxcbitcXG4rICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuK2VuZGlmICMgRElOR0hBSVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjU1YThkZTUxOGJlYjNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDEwIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjXFxuKyMgTWFrZWZpbGUgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcbisjXFxuK1xcbitjY2ZsYWdzLXkgKz0gLUkkKHNyYylcXG4rXFxuK29iai0kKENPTkZJR19ESU5HSEFJX1BGKSArPSBkaW5naGFpMTBlLm9cXG4rZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cXG4rXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTA2N2M3M2ZlZDMzY2NcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaFxcbkBAIC0wLDAgKzEsNzEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQQ0kgY2FwYWJpbGl0eSBkZWZpbml0aW9uc1xcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX19ESF9RVUVVRV9IX19cXG4rI2RlZmluZSBfX0RIX1FVRVVFX0hfX1xcbitcXG4rLyogVmVjdG9yIHZhbHVlIHVzZWQgdG8gZGlzYWJsZSBNU0kgZm9yIHF1ZXVlICovXFxuKyNkZWZpbmUgWlhESF9NU0lfTk9fVkVDVE9SICAgICAgMHhmZlxcbitcXG4rLyogU3RhdHVzIGJ5dGUgZm9yIGd1ZXN0IHRvIHJlcG9ydCBwcm9ncmVzcywgYW5kIHN5bmNocm9uaXplIGZlYXR1cmVzICovXFxuKy8qIFdlIGhhdmUgc2VlbiBkZXZpY2UgYW5kIHByb2Nlc3NlZCBnZW5lcmljIGZpZWxkcyAqL1xcbisjZGVmaW5lIFpYREhfQ09ORklHX1NfQUNLTk9XTEVER0UgMVxcbisvKiBXZSBoYXZlIGZvdW5kIGEgZHJpdmVyIGZvciB0aGUgZGV2aWNlLiAqL1xcbisjZGVmaW5lIFpYREhfQ09ORklHX1NfRFJJVkVSICAgICAgMlxcbisvKiBEcml2ZXIgaGFzIHVzZWQgaXRzIHBhcnRzIG9mIHRoZSBjb25maWcsIGFuZCBpcyBoYXBweSAqL1xcbisjZGVmaW5lIFpYREhfQ09ORklHX1NfRFJJVkVSX09LICAgNFxcbisvKiBEcml2ZXIgaGFzIGZpbmlzaGVkIGNvbmZpZ3VyaW5nIGZlYXR1cmVzICovXFxuKyNkZWZpbmUgWlhESF9DT05GSUdfU19GRUFUVVJFU19PSyA4XFxuKy8qIERldmljZSBlbnRlcmVkIGludmFsaWQgc3RhdGUsIGRyaXZlciBtdXN0IHJlc2V0IGl0ICovXFxuKyNkZWZpbmUgWlhESF9DT05GSUdfU19ORUVEU19SRVNFVCAweDQwXFxuKy8qIFdlJ3ZlIGdpdmVuIHVwIG9uIHRoaXMgZGV2aWNlICovXFxuKyNkZWZpbmUgWlhESF9DT05GSUdfU19GQUlMRUQgICAgICAweDgwXFxuK1xcbisvKiBUaGlzIGlzIHRoZSBQQ0kgY2FwYWJpbGl0eSBoZWFkZXI6ICovXFxuK3N0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xcbitcXHRfX3U4IGNhcF92bmRyO1xcdFxcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi9cXG4rXFx0X191OCBjYXBfbmV4dDtcXHRcXHQvKiBHZW5lcmljIFBDSSBmaWVsZDogbmV4dCBwdHIuICovXFxuK1xcdF9fdTggY2FwX2xlbjtcXHRcXHQvKiBHZW5lcmljIFBDSSBmaWVsZDogY2FwYWJpbGl0eSBsZW5ndGggKi9cXG4rXFx0X191OCBjZmdfdHlwZTtcXHRcXHQvKiBJZGVudGlmaWVzIHRoZSBzdHJ1Y3R1cmUuICovXFxuK1xcdF9fdTggYmFyO1xcdFxcdC8qIFdoZXJlIHRvIGZpbmQgaXQuICovXFxuK1xcdF9fdTggaWQ7XFx0XFx0LyogTXVsdGlwbGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGUgKi9cXG4rXFx0X191OCBwYWRkaW5nWzJdO1xcdFxcdC8qIFBhZCB0byBmdWxsIGR3b3JkLiAqL1xcbitcXHRfX2xlMzIgb2Zmc2V0O1xcdFxcdC8qIE9mZnNldCB3aXRoaW4gYmFyLiAqL1xcbitcXHRfX2xlMzIgbGVuZ3RoO1xcdFxcdC8qIExlbmd0aCBvZiB0aGUgc3RydWN0dXJlLCBpbiBieXRlcy4gKi9cXG4rfTtcXG4rXFxuKy8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cXG4rc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcge1xcbitcXHQvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqL1xcbitcXHRfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBkZXZpY2VfZmVhdHVyZTtcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFx0X19sZTMyIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBndWVzdF9mZWF0dXJlO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IG1zaXhfY29uZmlnO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IG51bV9xdWV1ZXM7XFx0XFx0LyogcmVhZC1vbmx5ICovXFxuK1xcdF9fdTggZGV2aWNlX3N0YXR1cztcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fdTggY29uZmlnX2dlbmVyYXRpb247XFx0LyogcmVhZC1vbmx5ICovXFxuK1xcbitcXHQvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi9cXG4rXFx0X19sZTE2IHF1ZXVlX3NlbGVjdDtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9zaXplO1xcdFxcdC8qIHJlYWQtd3JpdGUsIHBvd2VyIG9mIDIuICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9tc2l4X3ZlY3RvcjtcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMTYgcXVldWVfbm90aWZ5X29mZjtcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX2Rlc2NfbG87XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMzIgcXVldWVfZGVzY19oaTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV9hdmFpbF9sbztcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV9hdmFpbF9oaTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV91c2VkX2xvO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX3VzZWRfaGk7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbit9O1xcbitcXG4rc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAge1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwIGNhcDtcXG4rXFx0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTlmZDQ3MmE4NmZkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcXG5AQCAtMCwwICsxLDY0MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiZW5fcGYuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImRoX3F1ZXVlLmhcXFwiXFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKdW55YW5nIEhhbiBcXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZGhfcGZfZGV2bGlua19vcHMgPSB7fTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkaF9wZl9wY2lfdGFibGVbXSA9IHtcXG4rXFx0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcXG4rXFx0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1ZGX0RFVklDRV9JRCkgfSxcXG4rXFx0eyB9XFxuK307XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGhfcGZfcGNpX3RhYmxlKTtcXG4rXFxuK3ZvaWQgKmRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0dm9pZCAqcHJpdiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcbitcXHRpZiAocHJpdilcXG4rXFx0XFx0ZGhfZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4rXFx0cmV0dXJuIHByaXY7XFxuK31cXG4rXFxuK3ZvaWQgZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXFxuK3tcXG4rXFx0a2ZyZWUoZGhfZGV2LVxcdTAwM2Vwcml2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkaF9wZl9wY2lfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBjaV9zZXRfZHJ2ZGF0YShkZXYtXFx1MDAzZXBkZXYsIGRldik7XFxuK1xcbitcXHRyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi1cXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi1cXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soMzIpKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2aWNlLCBcXFwiZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRcXHRnb3RvIGVycl9wY2k7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhkZXYtXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHBjaV9zZWxlY3RfYmFycyhkZXYtXFx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcImRoLXBmXFxcIik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldmljZSwgXFxcInBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfcGNpO1xcbitcXHR9XFxuK1xcbitcXHRwY2lfc2V0X21hc3RlcihkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRyZXQgPSBwY2lfc2F2ZV9zdGF0ZShkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKGRldi1cXHUwMDNlcGRldiwgMCkgXFx1MDAyNiBJT1JFU09VUkNFX01FTSkpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldmljZSwgXFxcIkJBUiAwIGlzIG5vdCBhbiBNTUlPIHJlc291cmNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XFxuK1xcdH1cXG4rXFxuK1xcdHBmX2Rldi1cXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSA9XFxuK1xcdFxcdGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi1cXHUwMDNlcGRldiwgMCksXFxuK1xcdFxcdFxcdHBjaV9yZXNvdXJjZV9sZW4oZGV2LVxcdTAwM2VwZGV2LCAwKSk7XFxuK1xcdGlmICghcGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcGNpX3NhdmVfc3RhdGU6XFxuK1xcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LVxcdTAwM2VwZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHBjaV9zZWxlY3RfYmFycyhkZXYtXFx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XFxuK2Vycl9wY2k6XFxuK1xcdHBjaV9kaXNhYmxlX2RldmljZShkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbit2b2lkIGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlvdW5tYXAocGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKTtcXG4rXFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhkZXYtXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGNpX3NlbGVjdF9iYXJzKGRldi1cXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcXG4rXFx0cGNpX2Rpc2FibGVfZGV2aWNlKGRldi1cXHUwMDNlcGRldik7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxcbitcXHRcXHRcXHRcXHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKVxcbit7XFxuK1xcdGludCBwb3M7XFxuK1xcdHU4IHR5cGU7XFxuK1xcdHU4IGJhcjtcXG4rXFxuK1xcdGZvciAocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOyBwb3MgXFx1MDAzZSAwO1xcbitcXHQgICAgIHBvcyA9IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eShwZGV2LCBwb3MsIFBDSV9DQVBfSURfVk5EUikpIHtcXG4rXFx0XFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRjZmdfdHlwZSksIFxcdTAwMjZ0eXBlKTtcXG4rXFx0XFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcXHUwMDI2YmFyKTtcXG4rXFxuK1xcdFxcdC8qIGlnbm9yZSBzdHJ1Y3R1cmVzIHdpdGggcmVzZXJ2ZWQgQkFSIHZhbHVlcyAqL1xcbitcXHRcXHRpZiAoYmFyIFxcdTAwM2UgWlhESF9QRl9NQVhfQkFSX1ZBTClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAodHlwZSA9PSBjZmdfdHlwZSkge1xcbitcXHRcXHRcXHRpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcXHUwMDI2IGlvcmVzb3VyY2VfdHlwZXMpIHtcXG4rXFx0XFx0XFx0XFx0KmJhcnMgfD0gKDEgXFx1MDAzY1xcdTAwM2MgYmFyKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHBvcztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIGludCBvZmYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyICpiYXJfb2ZmKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHR2b2lkIF9faW9tZW0gKnA7XFxuK1xcdHUzMiBvZmZzZXQ7XFxuK1xcdHUzMiBsZW5ndGg7XFxuK1xcdHU4IGJhcjtcXG4rXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXFx1MDAyNmJhcik7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbitcXHRcXHRcXHQgICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRvZmZzZXQpLCBcXHUwMDI2b2Zmc2V0KTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGxlbmd0aCksIFxcdTAwMjZsZW5ndGgpO1xcbitcXG4rXFx0aWYgKGJhcl9vZmYpXFxuK1xcdFxcdCpiYXJfb2ZmID0gb2Zmc2V0O1xcbitcXG4rXFx0aWYgKGxlbmd0aCBcXHUwMDNjPSBzdGFydCkge1xcbitcXHRcXHRkZXZfZXJyKGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiYmFkIGNhcGFiaWxpdHkgbGVuICV1IChcXHUwMDNlJXUgZXhwZWN0ZWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRsZW5ndGgsIHN0YXJ0KTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChsZW5ndGggLSBzdGFydCBcXHUwMDNjIG1pbmxlbikge1xcbitcXHRcXHRkZXZfZXJyKGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiYmFkIGNhcGFiaWxpdHkgbGVuICV1IChcXHUwMDNlPSV6dSBleHBlY3RlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGxlbmd0aCwgbWlubGVuKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGxlbmd0aCAtPSBzdGFydDtcXG4rXFx0aWYgKHN0YXJ0ICsgb2Zmc2V0IFxcdTAwM2Mgb2Zmc2V0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJtYXAgd3JhcC1hcm91bmQgJXUrJXVcXFxcblxcXCIsIHN0YXJ0LCBvZmZzZXQpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0b2Zmc2V0ICs9IHN0YXJ0O1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwMjYgKGFsaWduIC0gMSkpIHtcXG4rXFx0XFx0ZGV2X2VycihkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIm9mZnNldCAldSBub3QgYWxpZ25lZCB0byAldVxcXFxuXFxcIiwgb2Zmc2V0LCBhbGlnbik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobGVuZ3RoIFxcdTAwM2Ugc2l6ZSlcXG4rXFx0XFx0bGVuZ3RoID0gc2l6ZTtcXG4rXFxuK1xcdGlmIChsZW4pXFxuK1xcdFxcdCpsZW4gPSBsZW5ndGg7XFxuK1xcbitcXHRpZiAobWlubGVuICsgb2Zmc2V0IFxcdTAwM2MgbWlubGVuIHx8XFxuK1xcdCAgICBtaW5sZW4gKyBvZmZzZXQgXFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcXG4rXFx0XFx0ZGV2X2VycihkaF9kZXYtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcIm1hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bWlubGVuLCBvZmZzZXQsIGJhcixcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHAgPSBwY2lfaW9tYXBfcmFuZ2UocGRldiwgYmFyLCBvZmZzZXQsIGxlbmd0aCk7XFxuK1xcdGlmICghcCkge1xcbitcXHRcXHRkZXZfZXJyKGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwidW5hYmxlIHRvIG1hcCBjdXN0b20gcXVldWUgJXVAJXUgb24gYmFyICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRsZW5ndGgsIG9mZnNldCwgYmFyKTtcXG4rXFx0fSBlbHNlIGlmIChwYSkge1xcbitcXHRcXHQqcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSArIG9mZnNldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHA7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXFx1MDAzZXBkZXY7XFxuK1xcdGludCBjb21tb247XFxuK1xcbitcXHQvKiBjaGVjayBmb3IgYSBjb21tb24gY29uZmlnOiBpZiBub3QsIHVzZSBsZWdhY3kgbW9kZSAoYmFyIDApLiAqL1xcbitcXHRjb21tb24gPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZW1vZGVybl9iYXJzKTtcXG4rXFx0aWYgKCFjb21tb24pIHtcXG4rXFx0XFx0ZGV2X2VycihkaF9kZXYtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcIm1pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFxuK1xcdHBmX2Rldi1cXHUwMDNlY29tbW9uID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eShkaF9kZXYsIGNvbW1vbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0WlhESF9QRl9BTElHTjQsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdE5VTEwsIE5VTEwsIE5VTEwpO1xcbitcXHRpZiAoIXBmX2Rldi1cXHUwMDNlY29tbW9uKSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwZl9kZXYtXFx1MDAzZWNvbW1vbiBpcyBudWxsXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHR1MzIgbm90aWZ5X2xlbmd0aDtcXG4rXFx0dTMyIG5vdGlmeV9vZmZzZXQ7XFxuK1xcdGludCBub3RpZnk7XFxuK1xcbitcXHQvKiBJZiBjb21tb24gaXMgdGhlcmUsIHRoZXNlIHNob3VsZCBiZSB0b28uLi4gKi9cXG4rXFx0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vtb2Rlcm5fYmFycyk7XFxuK1xcdGlmICghbm90aWZ5KSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJtaXNzaW5nIG5vdGlmeSBjZmcgY2FwYWJpbGl0eVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcXG4rXFx0XFx0XFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXFxuK1xcdFxcdFxcdFxcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXFxuK1xcdFxcdFxcdTAwMjZwZl9kZXYtXFx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcik7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbitcXHRcXHRcXHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcXG4rXFx0XFx0XFx0XFx0Y2FwLmxlbmd0aCksIFxcdTAwMjZub3RpZnlfbGVuZ3RoKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxcbitcXHRcXHRcXHRcXHRjYXAub2Zmc2V0KSwgXFx1MDAyNm5vdGlmeV9vZmZzZXQpO1xcbitcXG4rXFx0LyogV2UgZG9uJ3Qga25vdyBob3cgbWFueSBWUXMgd2UnbGwgbWFwLCBhaGVhZCBvZiB0aGUgdGltZS5cXG4rXFx0ICogSWYgbm90aWZ5IGxlbmd0aCBpcyBzbWFsbCwgbWFwIGl0IGFsbCBub3cuIE90aGVyd2lzZSxcXG4rXFx0ICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5vdGlmeV9sZW5ndGggKyAobm90aWZ5X29mZnNldCAlIFBBR0VfU0laRSkgXFx1MDAzYz0gUEFHRV9TSVpFKSB7XFxuK1xcdFxcdHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KGRoX2Rldiwgbm90aWZ5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFpYREhfUEZfTUFQX01JTkxFTjIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBaWERIX1BGX0FMSUdOMiwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5vdGlmeV9sZW5ndGgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vub3RpZnlfbGVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlbm90aWZ5X3BhLCBOVUxMKTtcXG4rXFx0XFx0aWYgKCFwZl9kZXYtXFx1MDAzZW5vdGlmeV9iYXNlKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwZl9kZXYtXFx1MDAzZW5vdGlmeV9iYXNlIGlzIG51bGxcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwZl9kZXYtXFx1MDAzZW5vdGlmeV9tYXBfY2FwID0gbm90aWZ5O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cXHUwMDNlcGRldjtcXG4rXFx0aW50IGRldmljZTtcXG4rXFxuK1xcdC8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkgbWFuZGF0b3J5IGZvclxcbitcXHQgKiBkZXZpY2VzIHRoYXQgaGF2ZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cXG4rXFx0ICovXFxuK1xcdGRldmljZSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfREVWSUNFX0NGRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlbW9kZXJuX2JhcnMpO1xcbitcXG4rXFx0Lyogd2UgZG9uJ3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLFxcbitcXHQgKiBidXQgUEFHRV9TSVpFIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGFsbCBleGlzdGluZyBkZXZpY2VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGRldmljZSkge1xcbitcXHRcXHRwZl9kZXYtXFx1MDAzZWRldmljZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBkZXZpY2UsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2VkZXZpY2VfbGVuLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlZGV2X2NmZ19iYXJfb2ZmKTtcXG4rXFx0XFx0aWYgKCFwZl9kZXYtXFx1MDAzZWRldmljZSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2VkZXZpY2UgaXMgbnVsbFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXFx1MDAzZXBkZXY7XFxuK1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2VkZXZpY2UpXFxuK1xcdFxcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlZGV2aWNlKTtcXG4rXFx0aWYgKHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpXFxuK1xcdFxcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpO1xcbitcXHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXFx1MDAzZWNvbW1vbik7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXFx1MDAzZXBkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9tYXBfbm90aWZ5O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX2RldmljZV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9tYXBfZGV2aWNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9tYXBfZGV2aWNlOlxcbitcXHRpZiAocGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSk7XFxuK2Vycl9tYXBfbm90aWZ5OlxcbitcXHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXFx1MDAzZWNvbW1vbik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3UxNiB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxcbitcXHRcXHRcXHRcXHQgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKHBmX2Rldi1cXHUwMDNlcGFja2VkX3N0YXR1cylcXG4rXFx0XFx0aW93cml0ZTE2KHBoeV9pbmRleCwgXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VxdWV1ZV9zZWxlY3QpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGlvd3JpdGUxNihpbmRleCwgXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VxdWV1ZV9zZWxlY3QpO1xcbitcXG4rXFx0cmV0dXJuIGlvcmVhZDE2KFxcdTAwMjZwZl9kZXYtXFx1MDAzZWNvbW1vbi1cXHUwMDNlcXVldWVfbm90aWZ5X29mZik7XFxuK31cXG4rXFxuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfdnFfbm90aWZ5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4LFxcbitcXHRcXHRcXHRcXHQgICAgIHJlc291cmNlX3NpemVfdCAqcGEpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcdHUxNiBvZmY7XFxuK1xcbitcXHRvZmYgPSB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKGRoX2RldiwgcGh5X2luZGV4LCBpbmRleCk7XFxuK1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSkge1xcbitcXHRcXHQvKiBvZmZzZXQgc2hvdWxkIG5vdCB3cmFwICovXFxuK1xcdFxcdGlmICgodTY0KW9mZiAqXFxuK1xcdFxcdFxcdHBmX2Rldi1cXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyICsgMiBcXHUwMDNlIHBmX2Rldi1cXHUwMDNlbm90aWZ5X2xlbikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGRoX2Rldi1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXFwiYmFkIG5vdGlmaWNhdGlvbiBvZmZzZXQgJXUgKHggJXUpIGZvciBxdWV1ZSAldSBcXHUwMDNlICV6dVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0b2ZmLCBwZl9kZXYtXFx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllciwgcGh5X2luZGV4LFxcbitcXHRcXHRcXHRcXHRwZl9kZXYtXFx1MDAzZW5vdGlmeV9sZW4pO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHBhKVxcbitcXHRcXHRcXHQqcGEgPSBwZl9kZXYtXFx1MDAzZW5vdGlmeV9wYSArIG9mZiAqIHBmX2Rldi1cXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyO1xcbitcXG4rXFx0XFx0cmV0dXJuIHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UgKyBvZmYgKiBwZl9kZXYtXFx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0dXJuIHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBwZl9kZXYtXFx1MDAzZW5vdGlmeV9tYXBfY2FwLCAyLCAyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBvZmYgKiBwZl9kZXYtXFx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgMiwgTlVMTCwgcGEsIE5VTEwpO1xcbitcXHR9XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl91bm1hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHZvaWQgX19pb21lbSAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmICghcGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAoZGhfZGV2LVxcdTAwM2VwZGV2LCBwcml2KTtcXG4rfVxcbitcXG4rdm9pZCB6eGRoX3BmX3NldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4IHN0YXR1cylcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlvd3JpdGU4KHN0YXR1cywgXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VkZXZpY2Vfc3RhdHVzKTtcXG4rfVxcbitcXG4rdTggenhkaF9wZl9nZXRfc3RhdHVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0cmV0dXJuIGlvcmVhZDgoXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VkZXZpY2Vfc3RhdHVzKTtcXG4rfVxcbitcXG4rdTggenhkaF9wZl9nZXRfY2ZnX2dlbihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dTggY29uZmlnX2dlbmVyYXRpb247XFxuK1xcbitcXHRjb25maWdfZ2VuZXJhdGlvbiA9IGlvcmVhZDgoXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2Vjb25maWdfZ2VuZXJhdGlvbik7XFxuK1xcbitcXHRyZXR1cm4gY29uZmlnX2dlbmVyYXRpb247XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9nZXRfdmZfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjLCBpbnQgdmZfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcdHUzMiBERVZfTUFDX0w7XFxuK1xcdHUxNiBERVZfTUFDX0g7XFxuK1xcbitcXHRldGhfemVyb19hZGRyKG1hYyk7XFxuK1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSkge1xcbitcXHRcXHRERVZfTUFDX0wgPSBpb3JlYWQzMihwZl9kZXYtXFx1MDAzZXBmX3NyaW92X2NhcF9iYXNlICtcXG4rXFx0XFx0XFx0XFx0ICAgICAocGZfZGV2LVxcdTAwM2Vzcmlvdl9iYXJfc2l6ZSkgKiB2Zl9pZCArXFxuK1xcdFxcdFxcdFxcdCAgICAgcGZfZGV2LVxcdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpO1xcbitcXHRcXHRtYWNbMF0gPSBERVZfTUFDX0wgXFx1MDAyNiAweGZmO1xcbitcXHRcXHRtYWNbMV0gPSAoREVWX01BQ19MIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhmZjtcXG4rXFx0XFx0bWFjWzJdID0gKERFVl9NQUNfTCBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweGZmO1xcbitcXHRcXHRtYWNbM10gPSAoREVWX01BQ19MIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IDB4ZmY7XFxuK1xcdFxcdERFVl9NQUNfSCA9IGlvcmVhZDE2KHBmX2Rldi1cXHUwMDNlcGZfc3Jpb3ZfY2FwX2Jhc2UgK1xcbitcXHRcXHRcXHRcXHQgICAgICAocGZfZGV2LVxcdTAwM2Vzcmlvdl9iYXJfc2l6ZSkgKiB2Zl9pZCArXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBmX2Rldi1cXHUwMDNlZGV2X2NmZ19iYXJfb2ZmICtcXG4rXFx0XFx0XFx0XFx0ICAgICAgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKTtcXG4rXFx0XFx0bWFjWzRdID0gREVWX01BQ19IIFxcdTAwMjYgMHhmZjtcXG4rXFx0XFx0bWFjWzVdID0gKERFVl9NQUNfSCBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4ZmY7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZCB6eGRoX3BmX3NldF92Zl9tYWNfcmVnKHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2LFxcbitcXHRcXHRcXHQgICAgdTggKm1hYywgaW50IHZmX2lkKVxcbit7XFxuK1xcdHUzMiBERVZfTUFDX0w7XFxuK1xcdHUxNiBERVZfTUFDX0g7XFxuK1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSkge1xcbitcXHRcXHRERVZfTUFDX0wgPSBtYWNbMF0gfCAobWFjWzFdIFxcdTAwM2NcXHUwMDNjIDgpIHxcXG4rXFx0XFx0XFx0XFx0XFx0KG1hY1syXSBcXHUwMDNjXFx1MDAzYyAxNikgfCAobWFjWzNdIFxcdTAwM2NcXHUwMDNjIDI0KTtcXG4rXFx0XFx0REVWX01BQ19IID0gbWFjWzRdIHwgKG1hY1s1XSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0aW93cml0ZTMyKERFVl9NQUNfTCwgKHBmX2Rldi1cXHUwMDNlcGZfc3Jpb3ZfY2FwX2Jhc2UgK1xcbitcXHRcXHRcXHQgIChwZl9kZXYtXFx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICtcXG4rXFx0XFx0XFx0ICBwZl9kZXYtXFx1MDAzZWRldl9jZmdfYmFyX29mZikpO1xcbitcXHRcXHRpb3dyaXRlMTYoREVWX01BQ19ILCAocGZfZGV2LVxcdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSArXFxuK1xcdFxcdFxcdCAgKHBmX2Rldi1cXHUwMDNlc3Jpb3ZfYmFyX3NpemUpICogdmZfaWQgK1xcbitcXHRcXHRcXHQgIHBmX2Rldi1cXHUwMDNlZGV2X2NmZ19iYXJfb2ZmICtcXG4rXFx0XFx0XFx0ICBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVQpKTtcXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIHp4ZGhfcGZfc2V0X3ZmX21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYywgaW50IHZmX2lkKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0enhkaF9wZl9zZXRfdmZfbWFjX3JlZyhwZl9kZXYsIG1hYywgdmZfaWQpO1xcbit9XFxuK1xcbit2b2lkIHp4ZGhfc2V0X21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYylcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dTMyIERFVl9NQUNfTDtcXG4rXFx0dTE2IERFVl9NQUNfSDtcXG4rXFxuK1xcdGlmICghcGZfZGV2LVxcdTAwM2VkZXZpY2UpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdERFVl9NQUNfTCA9IG1hY1swXSB8IChtYWNbMV0gXFx1MDAzY1xcdTAwM2MgOCkgfCAobWFjWzJdIFxcdTAwM2NcXHUwMDNjIDE2KSB8IChtYWNbM10gXFx1MDAzY1xcdTAwM2MgMjQpO1xcbitcXHRERVZfTUFDX0ggPSBtYWNbNF0gfCAobWFjWzVdIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRpb3dyaXRlMzIoREVWX01BQ19MLCBwZl9kZXYtXFx1MDAzZWRldmljZSk7XFxuK1xcdGlvd3JpdGUxNihERVZfTUFDX0gsIHBmX2Rldi1cXHUwMDNlZGV2aWNlICsgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKTtcXG4rfVxcbitcXG4rdm9pZCB6eGRoX2dldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcdHUzMiBERVZfTUFDX0w7XFxuK1xcdHUxNiBERVZfTUFDX0g7XFxuK1xcbitcXHRpZiAoIXBmX2Rldi1cXHUwMDNlZGV2aWNlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRERVZfTUFDX0wgPSBpb3JlYWQzMihwZl9kZXYtXFx1MDAzZWRldmljZSk7XFxuK1xcdG1hY1swXSA9IERFVl9NQUNfTCBcXHUwMDI2IDB4ZmY7XFxuK1xcdG1hY1sxXSA9IChERVZfTUFDX0wgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweGZmO1xcbitcXHRtYWNbMl0gPSAoREVWX01BQ19MIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4ZmY7XFxuK1xcdG1hY1szXSA9IChERVZfTUFDX0wgXFx1MDAzZVxcdTAwM2UgMjQpIFxcdTAwMjYgMHhmZjtcXG4rXFx0REVWX01BQ19IID0gaW9yZWFkMTYocGZfZGV2LVxcdTAwM2VkZXZpY2UgKyBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVQpO1xcbitcXHRtYWNbNF0gPSBERVZfTUFDX0ggXFx1MDAyNiAweGZmO1xcbitcXHRtYWNbNV0gPSAoREVWX01BQ19IIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhmZjtcXG4rfVxcbitcXG4rdTY0IHp4ZGhfcGZfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHR1NjQgZGV2aWNlX2ZlYXR1cmU7XFxuK1xcbitcXHRpb3dyaXRlMzIoMCwgXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VkZXZpY2VfZmVhdHVyZV9zZWxlY3QpO1xcbitcXHRkZXZpY2VfZmVhdHVyZSA9IGlvcmVhZDMyKFxcdTAwMjZwZl9kZXYtXFx1MDAzZWNvbW1vbi1cXHUwMDNlZGV2aWNlX2ZlYXR1cmUpO1xcbitcXHRpb3dyaXRlMzIoMSwgXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VkZXZpY2VfZmVhdHVyZV9zZWxlY3QpO1xcbitcXHRkZXZpY2VfZmVhdHVyZSB8PSAoKHU2NClpb3JlYWQzMihcXHUwMDI2cGZfZGV2LVxcdTAwM2Vjb21tb24tXFx1MDAzZWRldmljZV9mZWF0dXJlKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDNjXFx1MDAzYyAzMik7XFxuK1xcbitcXHRyZXR1cm4gZGV2aWNlX2ZlYXR1cmU7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU2NCBmZWF0dXJlcylcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlvd3JpdGUzMigwLCBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vjb21tb24tXFx1MDAzZWd1ZXN0X2ZlYXR1cmVfc2VsZWN0KTtcXG4rXFx0aW93cml0ZTMyKCh1MzIpZmVhdHVyZXMsIFxcdTAwMjZwZl9kZXYtXFx1MDAzZWNvbW1vbi1cXHUwMDNlZ3Vlc3RfZmVhdHVyZSk7XFxuK1xcdGlvd3JpdGUzMigxLCBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vjb21tb24tXFx1MDAzZWd1ZXN0X2ZlYXR1cmVfc2VsZWN0KTtcXG4rXFx0aW93cml0ZTMyKGZlYXR1cmVzIFxcdTAwM2VcXHUwMDNlIDMyLCBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vjb21tb24tXFx1MDAzZWd1ZXN0X2ZlYXR1cmUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXY7XFxuK1xcdHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFxcdTAwMjZkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCBkaF9jb3JlX2RldiksXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoIWRldmxpbmspIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspO1xcbitcXHRkaF9kZXYtXFx1MDAzZWRldmljZSA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdGRoX2Rldi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuK1xcdGRoX2Rldi1cXHUwMDNlZGV2bGluayA9IGRldmxpbms7XFxuK1xcbitcXHRwZl9kZXYgPSBkaF9jb3JlX2FsbG9jX3ByaXYoZGhfZGV2LCBzaXplb2YoKnBmX2RldikpO1xcbitcXHRpZiAoIXBmX2Rldikge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfcGZfZGV2O1xcbitcXHR9XFxuK1xcbitcXHRwZl9kZXYtXFx1MDAzZWJhcl9jaGFuX3ZhbGlkID0gZmFsc2U7XFxuK1xcdHBmX2Rldi1cXHUwMDNldmVwYSA9IGZhbHNlO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZkaF9kZXYtXFx1MDAzZWxvY2spO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwZl9kZXYtXFx1MDAzZWlycV9sb2NrKTtcXG4rXFxuK1xcdGRoX2Rldi1cXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcXG4rXFxuK1xcdHJldCA9IGRoX3BmX3BjaV9pbml0KGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZGhfcGZfcGNpX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfY2ZnX2luaXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9jZmdfaW5pdDpcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmRoX2Rldi1cXHUwMDNlbG9jayk7XFxuK1xcdGRoX2NvcmVfZnJlZV9wcml2KGRoX2Rldik7XFxuK2Vycl9wZl9kZXY6XFxuK1xcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkaF9kZXYpO1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcXG4rXFx0ZGhfcGZfcGNpX2Nsb3NlKGRoX2Rldik7XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBmX2Rldi1cXHUwMDNlaXJxX2xvY2spO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkaF9kZXYtXFx1MDAzZWxvY2spO1xcbitcXHRkaF9jb3JlX2ZyZWVfcHJpdihkaF9kZXYpO1xcbitcXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XFxuK1xcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKVxcbitcXHRcXHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XFxuK1xcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRoX3BmX2RyaXZlciA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwiZGluZ2hhaTEwZVxcXCIsXFxuK1xcdC5pZF90YWJsZSA9IGRoX3BmX3BjaV90YWJsZSxcXG4rXFx0LnByb2JlID0gZGhfcGZfcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSBkaF9wZl9yZW1vdmUsXFxuK1xcdC5zaHV0ZG93biA9IGRoX3BmX3NodXRkb3duLFxcbit9O1xcbitcXG4rbW9kdWxlX3BjaV9kcml2ZXIoZGhfcGZfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZGFhNzlhNmQ2ZjJhYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXFxuQEAgLTAsMCArMSwxMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQRiBoZWFkZXJcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9fWlhESF9FTl9QRl9IX19cXG4rI2RlZmluZSBfX1pYREhfRU5fUEZfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBaWERIX1BGX1ZFTkRPUl9JRFxcdDB4MWNmMlxcbisjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXFx0MHg4MDQwXFxuKyNkZWZpbmUgWlhESF9WRl9ERVZJQ0VfSURcXHQweDgwNDFcXG4rXFxuKy8qIENvbW1vbiBjb25maWd1cmF0aW9uICovXFxuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkdcXHQxXFxuKy8qIE5vdGlmaWNhdGlvbnMgKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1xcdDJcXG4rLyogSVNSIGFjY2VzcyAqL1xcbisjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHXFx0XFx0M1xcbisvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xcbisjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHXFx0NFxcbisvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfUENJX0NGR1xcdFxcdDVcXG4rXFxuKyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFxcdFxcdDB4NVxcbisjZGVmaW5lIFpYREhfUEZfQUxJR040XFx0XFx0XFx0NFxcbisjZGVmaW5lIFpYREhfUEZfQUxJR04yXFx0XFx0XFx0MlxcbisjZGVmaW5lIFpYREhfUEZfTUFQX01JTkxFTjJcXHRcXHQyXFxuK1xcbisjZGVmaW5lIFpYREhfREVWX01BQ19ISUdIX09GRlNFVFxcdDRcXG4rXFxuK2VudW0gZGhfY29yZWRldl90eXBlIHtcXG4rXFx0REhfQ09SRURFVl9QRixcXG4rXFx0REhfQ09SRURFVl9WRixcXG4rXFx0REhfQ09SRURFVl9TRixcXG4rXFx0REhfQ09SRURFVl9NUEZcXG4rfTtcXG4rXFxuK3N0cnVjdCBkZXZsaW5rO1xcbitcXG4rc3RydWN0IGRoX2NvcmVfZGV2IHtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xcbitcXHRlbnVtIGRoX2NvcmVkZXZfdHlwZSBjb3JlZGV2X3R5cGU7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIFByb3RlY3RzIGRldmljZSBjb25maWd1cmF0aW9uICovXFxuK1xcdHZvaWQgKnByaXY7XFxuK307XFxuK1xcbitzdHJ1Y3QgenhkaF9wZl9kZXZpY2Uge1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjb21tb247XFxuK1xcdC8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqL1xcbitcXHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXFxuK1xcdHZvaWQgX19pb21lbSAqZGV2aWNlO1xcbitcXHR2b2lkIF9faW9tZW0gKm5vdGlmeV9iYXNlO1xcbitcXHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xcbitcXHQvKiBQaHlzaWNhbCBiYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKi9cXG4rXFx0cmVzb3VyY2Vfc2l6ZV90IG5vdGlmeV9wYTtcXG4rXFx0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cXG4rXFx0c2l6ZV90IG5vdGlmeV9sZW47XFxuK1xcdHNpemVfdCBkZXZpY2VfbGVuO1xcbitcXHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xcbitcXHRzMzIgbm90aWZ5X21hcF9jYXA7XFxuK1xcdHUzMiBub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7XFxuK1xcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXFxuK1xcdHMzMiBtb2Rlcm5fYmFycztcXG4rXFx0dm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdO1xcbitcXHR1NjQgc3Jpb3ZfYmFyX3NpemU7XFxuK1xcdHUzMiBkZXZfY2ZnX2Jhcl9vZmY7XFxuK1xcdGJvb2wgcGFja2VkX3N0YXR1cztcXG4rXFx0Ym9vbCBiYXJfY2hhbl92YWxpZDtcXG4rXFx0Ym9vbCB2ZXBhO1xcbitcXHRzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7IC8qIFByb3RlY3RzIElSUSBvcGVyYXRpb25zICovXFxuK307XFxuK1xcbisjZGVmaW5lIEdFVF9DT1JFREVWX1RZUEUocGRldikgXFxcXFxcbitcXHQoKHBkZXYpLVxcdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcXG4rXFxuK3ZvaWQgKmRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgc2l6ZV90IHNpemUpO1xcbit2b2lkIGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcXG4rdm9pZCBkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IGRoX2NvcmVfZGV2ICpkZXYpO1xcbitpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcXG4rXFx0XFx0XFx0XFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycyk7XFxuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgaW50IG9mZixcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSxcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgKmJhcl9vZmYpO1xcbitpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbit2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbit1MTYgenhkaF9wZl9nZXRfcXVldWVfbm90aWZ5X29mZihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldixcXG4rXFx0XFx0XFx0XFx0IHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCk7XFxuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfdnFfbm90aWZ5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCxcXG4rXFx0XFx0XFx0XFx0ICAgICByZXNvdXJjZV9zaXplX3QgKnBhKTtcXG4rdm9pZCB6eGRoX3BmX3VubWFwX3ZxX25vdGlmeShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgdm9pZCBfX2lvbWVtICpwcml2KTtcXG4rdm9pZCB6eGRoX3BmX3NldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4IHN0YXR1cyk7XFxuK3U4IHp4ZGhfcGZfZ2V0X3N0YXR1cyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7XFxuK3U4IHp4ZGhfcGZfZ2V0X2NmZ19nZW4oc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbit2b2lkIHp4ZGhfcGZfZ2V0X3ZmX21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYywgaW50IHZmX2lkKTtcXG4rdm9pZCB6eGRoX3BmX3NldF92Zl9tYWNfcmVnKHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2LFxcbitcXHRcXHRcXHQgICAgdTggKm1hYywgaW50IHZmX2lkKTtcXG4rdm9pZCB6eGRoX3BmX3NldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZCk7XFxuK3ZvaWQgenhkaF9zZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKTtcXG4rdm9pZCB6eGRoX2dldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpO1xcbit1NjQgenhkaF9wZl9nZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbit2b2lkIHp4ZGhfcGZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1NjQgZmVhdHVyZXMpO1xcbitcXG4rI2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzA6MzcuODUyMTMwMzc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk3Mjk3MjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX1pURVwiLFxuICAgIFwiRElOR0hBSVwiLFxuICAgIFwiRElOR0hBSV9QRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRoX3BmX3Byb2JlXCIsXG4gICAgXCJkaF9wZl9yZW1vdmVcIixcbiAgICBcImRoX3BmX3BjaV9pbml0XCIsXG4gICAgXCJkaF9wZl9wY2lfY2xvc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGEgUENJIHByb2JlIGZ1bmN0aW9uIHdoaWNoIGluaXRpYWxpemVzIHRoZSBkZXZpY2UsIG1hcHMgUENJIG1lbW9yeSwgYW5kIHJlZ2lzdGVycyBhIGRldmxpbmsgaW5zdGFuY2UuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjlkYmE3MWEzYWFlMzUzYzU0NjQ0YjBmZjRlNGU4MmNlZWQ1NmZmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDE5OjMwOjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMmZiMWM3NWFmZDE2MzguLjczNjkyYjA5YmY3YmFiIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMjk0NDAsNiArMjk0NDAsMTIgQEAgUzpcdE1haW50YWluZWRcbiBUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXdhaS9zb3VuZC5naXRcbiBGOlx0c291bmQvaGRhL2NvZGVjcy9zZW5hcnl0ZWNoLmNcbiBcbitaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVJcbitNOlx0SnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVxuK0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL1xuK1xuIFRIRSBSRVNUXG4gTTpcdExpbnVzIFRvcnZhbGRzIFx1MDAzY3RvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnXHUwMDNlXG4gTDpcdGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuaW5kZXggYjhmNzBlMmExNzYzYWQuLmMyYjY5OTZiMGNmZTFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuQEAgLTE4OCw1ICsxODgsNiBAQCBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcIlxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXCJcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcIlxuK3NvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXCJcbiBcbiBlbmRpZiAjIEVUSEVSTkVUXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuaW5kZXggNTczNDRmZWM2Y2UwNDcuLmEzNGJjYmQ0ZGY0ZTkyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG5AQCAtMTA0LDMgKzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgKz0geGlyY29tL1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1NZTk9QU1lTKSArPSBzeW5vcHN5cy9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9QRU5TQU5ETykgKz0gcGVuc2FuZG8vXG4gb2JqLSQoQ09ORklHX09BX1RDNikgKz0gb2FfdGM2Lm9cbitvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9aVEUpICs9IHp0ZS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2EyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xuQEAgLTAsMCArMSwyMCBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIFpURSBkcml2ZXIgY29uZmlndXJhdGlvblxuKyNcbitcbitjb25maWcgTkVUX1ZFTkRPUl9aVEVcbisgICAgYm9vbCBcIlpURSBkZXZpY2VzXCJcbisgICAgZGVmYXVsdCB5XG4rICAgIGhlbHBcbisgICAgICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbisgICAgICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuKyAgICAgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbisgICAgICB0aGUgcXVlc3Rpb25zIGFib3V0IFp0ZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZFxuKyAgICAgIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4rXG4raWYgTkVUX1ZFTkRPUl9aVEVcbitcbitzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXCJcbitcbitlbmRpZiAjIE5FVF9WRU5ET1JfWlRFXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNkOTkyOWI2MTU1OWM2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcbkBAIC0wLDAgKzEsNiBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIE1ha2VmaWxlIGZvciB0aGUgWlRFIGRldmljZSBkcml2ZXJzXG4rI1xuK1xuK29iai0kKENPTkZJR19ESU5HSEFJKSArPSBkaW5naGFpL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjEyMWJlM2JmNzcwN2ZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5AQCAtMCwwICsxLDM0IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI1xuKyMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbisjXG4rXG4rY29uZmlnIERJTkdIQUlcbisgICAgYm9vbCBcIlpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclwiXG4rICAgIGRlcGVuZHMgb24gUENJXG4rICAgIHNlbGVjdCBORVRfREVWTElOS1xuKyAgICBoZWxwXG4rICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy5cbitcbisgICAgICBEaW5nSGFpIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBFdGhlcm5ldCBjb250cm9sbGVyIHRoYXQgc3VwcG9ydHNcbisgICAgICBtdWx0aXBsZSBmZWF0dXJlcyBpbmNsdWRpbmcgaGFyZHdhcmUgb2ZmbG9hZGluZywgU1ItSU9WLCBhbmRcbisgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuXG4rXG4rICAgICAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gc2VsZWN0IHNwZWNpZmljIGRyaXZlciB2YXJpYW50cyBiZWxvdy5cbitcbisgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuK2lmIERJTkdIQUlcbitcbitjb25maWcgRElOR0hBSV9QRlxuKyAgICB0cmlzdGF0ZSBcIlpURSBEaW5nSGFpIFBGIChQaHlzaWNhbCBGdW5jdGlvbikgZHJpdmVyXCJcbisgICAgaGVscFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIFBDSSBFeHByZXNzIEV0aGVybmV0XG4rICAgICAgYWRhcHRlcnMgKFBGKS5cbitcbisgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4rICAgICAgd2lsbCBiZSBuYW1lZCBkaW5naGFpMTBlLlxuK1xuKyAgICAgIElmIHVuc3VyZSwgc2F5IE4uXG4rXG4rZW5kaWYgIyBESU5HSEFJXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mNTVhOGRlNTE4YmViM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbkBAIC0wLDAgKzEsMTAgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjXG4rIyBNYWtlZmlsZSBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXG4rI1xuK1xuK2NjZmxhZ3MteSArPSAtSSQoc3JjKVxuK1xuK29iai0kKENPTkZJR19ESU5HSEFJX1BGKSArPSBkaW5naGFpMTBlLm9cbitkaW5naGFpMTBlLXkgOj0gZW5fcGYub1xuK1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjUwNjdjNzNmZWQzM2NjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXG5AQCAtMCwwICsxLDcxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnNcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuKyAqL1xuK1xuKyNpZm5kZWYgX19ESF9RVUVVRV9IX19cbisjZGVmaW5lIF9fREhfUVVFVUVfSF9fXG4rXG4rLyogVmVjdG9yIHZhbHVlIHVzZWQgdG8gZGlzYWJsZSBNU0kgZm9yIHF1ZXVlICovXG4rI2RlZmluZSBaWERIX01TSV9OT19WRUNUT1IgICAgICAweGZmXG4rXG4rLyogU3RhdHVzIGJ5dGUgZm9yIGd1ZXN0IHRvIHJlcG9ydCBwcm9ncmVzcywgYW5kIHN5bmNocm9uaXplIGZlYXR1cmVzICovXG4rLyogV2UgaGF2ZSBzZWVuIGRldmljZSBhbmQgcHJvY2Vzc2VkIGdlbmVyaWMgZmllbGRzICovXG4rI2RlZmluZSBaWERIX0NPTkZJR19TX0FDS05PV0xFREdFIDFcbisvKiBXZSBoYXZlIGZvdW5kIGEgZHJpdmVyIGZvciB0aGUgZGV2aWNlLiAqL1xuKyNkZWZpbmUgWlhESF9DT05GSUdfU19EUklWRVIgICAgICAyXG4rLyogRHJpdmVyIGhhcyB1c2VkIGl0cyBwYXJ0cyBvZiB0aGUgY29uZmlnLCBhbmQgaXMgaGFwcHkgKi9cbisjZGVmaW5lIFpYREhfQ09ORklHX1NfRFJJVkVSX09LICAgNFxuKy8qIERyaXZlciBoYXMgZmluaXNoZWQgY29uZmlndXJpbmcgZmVhdHVyZXMgKi9cbisjZGVmaW5lIFpYREhfQ09ORklHX1NfRkVBVFVSRVNfT0sgOFxuKy8qIERldmljZSBlbnRlcmVkIGludmFsaWQgc3RhdGUsIGRyaXZlciBtdXN0IHJlc2V0IGl0ICovXG4rI2RlZmluZSBaWERIX0NPTkZJR19TX05FRURTX1JFU0VUIDB4NDBcbisvKiBXZSd2ZSBnaXZlbiB1cCBvbiB0aGlzIGRldmljZSAqL1xuKyNkZWZpbmUgWlhESF9DT05GSUdfU19GQUlMRUQgICAgICAweDgwXG4rXG4rLyogVGhpcyBpcyB0aGUgUENJIGNhcGFiaWxpdHkgaGVhZGVyOiAqL1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xuK1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuK1x0X191OCBjYXBfbmV4dDtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IG5leHQgcHRyLiAqL1xuK1x0X191OCBjYXBfbGVuO1x0XHQvKiBHZW5lcmljIFBDSSBmaWVsZDogY2FwYWJpbGl0eSBsZW5ndGggKi9cbitcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbitcdF9fdTggYmFyO1x0XHQvKiBXaGVyZSB0byBmaW5kIGl0LiAqL1xuK1x0X191OCBpZDtcdFx0LyogTXVsdGlwbGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGUgKi9cbitcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4rXHRfX2xlMzIgb2Zmc2V0O1x0XHQvKiBPZmZzZXQgd2l0aGluIGJhci4gKi9cbitcdF9fbGUzMiBsZW5ndGg7XHRcdC8qIExlbmd0aCBvZiB0aGUgc3RydWN0dXJlLCBpbiBieXRlcy4gKi9cbit9O1xuK1xuKy8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cbitzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4rXHQvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgZ3Vlc3RfZmVhdHVyZV9zZWxlY3Q7IC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBndWVzdF9mZWF0dXJlO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBudW1fcXVldWVzO1x0XHQvKiByZWFkLW9ubHkgKi9cbitcdF9fdTggZGV2aWNlX3N0YXR1cztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuK1xuK1x0LyogQWJvdXQgYSBzcGVjaWZpYyB2aXJ0cXVldWUuICovXG4rXHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgcXVldWVfc2l6ZTtcdFx0LyogcmVhZC13cml0ZSwgcG93ZXIgb2YgMi4gKi9cbitcdF9fbGUxNiBxdWV1ZV9tc2l4X3ZlY3RvcjtcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9ub3RpZnlfb2ZmO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgcXVldWVfZGVzY19sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBxdWV1ZV9hdmFpbF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2F2YWlsX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX3VzZWRfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbit9O1xuK1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwIHtcbitcdHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwO1xuK1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbit9O1xuK1xuKyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTlmZDQ3MmE4NmZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5AQCAtMCwwICsxLDY0MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFwiZW5fcGYuaFwiXG4rI2luY2x1ZGUgXCJkaF9xdWV1ZS5oXCJcbitcbitNT0RVTEVfQVVUSE9SKFwiSnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZGhfcGZfZGV2bGlua19vcHMgPSB7fTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGhfcGZfcGNpX3RhYmxlW10gPSB7XG4rXHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfUEZfREVWSUNFX0lEKSB9LFxuK1x0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1ZGX0RFVklDRV9JRCkgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRoX3BmX3BjaV90YWJsZSk7XG4rXG4rdm9pZCAqZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCBzaXplX3Qgc2l6ZSlcbit7XG4rXHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbitcbitcdGlmIChwcml2KVxuK1x0XHRkaF9kZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXHRyZXR1cm4gcHJpdjtcbit9XG4rXG4rdm9pZCBkaF9jb3JlX2ZyZWVfcHJpdihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldilcbit7XG4rXHRrZnJlZShkaF9kZXYtXHUwMDNlcHJpdik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZGhfcGZfcGNpX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRwY2lfc2V0X2RydmRhdGEoZGV2LVx1MDAzZXBkZXYsIGRldik7XG4rXG4rXHRyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYtXHUwMDNlcGRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldmljZSwgXCJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi1cdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSyg2NCkpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi1cdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSygzMikpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2aWNlLCBcImRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRcdGdvdG8gZXJyX3BjaTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0ID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhkZXYtXHUwMDNlcGRldixcbitcdFx0XHRcdFx0ICAgcGNpX3NlbGVjdF9iYXJzKGRldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXG4rXHRcdFx0XHRcdCAgIFwiZGgtcGZcIik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldmljZSwgXCJwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zIGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfcGNpO1xuK1x0fVxuK1xuK1x0cGNpX3NldF9tYXN0ZXIoZGV2LVx1MDAzZXBkZXYpO1xuK1x0cmV0ID0gcGNpX3NhdmVfc3RhdGUoZGV2LVx1MDAzZXBkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXZpY2UsIFwicGNpX3NhdmVfc3RhdGUgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbitcdH1cbitcbitcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhkZXYtXHUwMDNlcGRldiwgMCkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXZpY2UsIFwiQkFSIDAgaXMgbm90IGFuIE1NSU8gcmVzb3VyY2VcXG5cIik7XG4rXHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuK1x0fVxuK1xuK1x0cGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gPVxuK1x0XHRpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtXHUwMDNlcGRldiwgMCksXG4rXHRcdFx0cGNpX3Jlc291cmNlX2xlbihkZXYtXHUwMDNlcGRldiwgMCkpO1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSkge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXZpY2UsIFwiZGggcGYgcGNpIGlvcmVtYXAgZmFpbGVkXFxuXCIpO1xuK1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9wY2lfc2F2ZV9zdGF0ZTpcbitcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LVx1MDAzZXBkZXYsXG4rXHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyhkZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcbitlcnJfcGNpOlxuK1x0cGNpX2Rpc2FibGVfZGV2aWNlKGRldi1cdTAwM2VwZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3ZvaWQgZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCBkaF9jb3JlX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGV2LVx1MDAzZXByaXY7XG4rXG4rXHRpb3VubWFwKHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKTtcbitcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LVx1MDAzZXBkZXYsXG4rXHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyhkZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcbitcdHBjaV9kaXNhYmxlX2RldmljZShkZXYtXHUwMDNlcGRldik7XG4rfVxuK1xuK2ludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxuK1x0XHRcdFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycylcbit7XG4rXHRpbnQgcG9zO1xuK1x0dTggdHlwZTtcbitcdHU4IGJhcjtcbitcbitcdGZvciAocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOyBwb3MgXHUwMDNlIDA7XG4rXHQgICAgIHBvcyA9IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eShwZGV2LCBwb3MsIFBDSV9DQVBfSURfVk5EUikpIHtcbitcdFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcbitcdFx0XHRcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbitcdFx0XHRcdFx0XHRcdGNmZ190eXBlKSwgXHUwMDI2dHlwZSk7XG4rXHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4rXHRcdFx0XHQgICAgIHBvcyArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFx1MDAyNmJhcik7XG4rXG4rXHRcdC8qIGlnbm9yZSBzdHJ1Y3R1cmVzIHdpdGggcmVzZXJ2ZWQgQkFSIHZhbHVlcyAqL1xuK1x0XHRpZiAoYmFyIFx1MDAzZSBaWERIX1BGX01BWF9CQVJfVkFMKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAodHlwZSA9PSBjZmdfdHlwZSkge1xuK1x0XHRcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpIFx1MDAyNiBpb3Jlc291cmNlX3R5cGVzKSB7XG4rXHRcdFx0XHQqYmFycyB8PSAoMSBcdTAwM2NcdTAwM2MgYmFyKTtcbitcdFx0XHRcdHJldHVybiBwb3M7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCBpbnQgb2ZmLFxuK1x0XHRcdFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXG4rXHRcdFx0XHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXG4rXHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuK1x0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXHUwMDNlcGRldjtcbitcdHZvaWQgX19pb21lbSAqcDtcbitcdHUzMiBvZmZzZXQ7XG4rXHR1MzIgbGVuZ3RoO1xuK1x0dTggYmFyO1xuK1xuK1x0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcbitcdFx0XHQgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFx1MDAyNmJhcik7XG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbitcdFx0XHQgICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxuK1x0XHRcdFx0XHRcdG9mZnNldCksIFx1MDAyNm9mZnNldCk7XG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbitcdFx0XHQgICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxuK1x0XHRcdFx0XHRcdGxlbmd0aCksIFx1MDAyNmxlbmd0aCk7XG4rXG4rXHRpZiAoYmFyX29mZilcbitcdFx0KmJhcl9vZmYgPSBvZmZzZXQ7XG4rXG4rXHRpZiAobGVuZ3RoIFx1MDAzYz0gc3RhcnQpIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcImJhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlJXUgZXhwZWN0ZWQpXFxuXCIsXG4rXHRcdFx0bGVuZ3RoLCBzdGFydCk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0aWYgKGxlbmd0aCAtIHN0YXJ0IFx1MDAzYyBtaW5sZW4pIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcImJhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlPSV6dSBleHBlY3RlZClcXG5cIixcbitcdFx0XHRsZW5ndGgsIG1pbmxlbik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0bGVuZ3RoIC09IHN0YXJ0O1xuK1x0aWYgKHN0YXJ0ICsgb2Zmc2V0IFx1MDAzYyBvZmZzZXQpIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcIm1hcCB3cmFwLWFyb3VuZCAldSsldVxcblwiLCBzdGFydCwgb2Zmc2V0KTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRvZmZzZXQgKz0gc3RhcnQ7XG4rXHRpZiAob2Zmc2V0IFx1MDAyNiAoYWxpZ24gLSAxKSkge1xuK1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwib2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XFxuXCIsIG9mZnNldCwgYWxpZ24pO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdGlmIChsZW5ndGggXHUwMDNlIHNpemUpXG4rXHRcdGxlbmd0aCA9IHNpemU7XG4rXG4rXHRpZiAobGVuKVxuK1x0XHQqbGVuID0gbGVuZ3RoO1xuK1xuK1x0aWYgKG1pbmxlbiArIG9mZnNldCBcdTAwM2MgbWlubGVuIHx8XG4rXHQgICAgbWlubGVuICsgb2Zmc2V0IFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwibWFwIGN1c3RvbSBxdWV1ZSAlenVAJXUgb3V0IG9mIHJhbmdlIG9uIGJhciAldSBsZW5ndGggJWx1XFxuXCIsXG4rXHRcdFx0bWlubGVuLCBvZmZzZXQsIGJhcixcbitcdFx0XHQodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHAgPSBwY2lfaW9tYXBfcmFuZ2UocGRldiwgYmFyLCBvZmZzZXQsIGxlbmd0aCk7XG4rXHRpZiAoIXApIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInVuYWJsZSB0byBtYXAgY3VzdG9tIHF1ZXVlICV1QCV1IG9uIGJhciAldVxcblwiLFxuK1x0XHRcdGxlbmd0aCwgb2Zmc2V0LCBiYXIpO1xuK1x0fSBlbHNlIGlmIChwYSkge1xuK1x0XHQqcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSArIG9mZnNldDtcbitcdH1cbitcbitcdHJldHVybiBwO1xuK31cbitcbitpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHRpbnQgY29tbW9uO1xuK1xuK1x0LyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi9cbitcdGNvbW1vbiA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfQ09NTU9OX0NGRyxcbitcdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXG4rXHRcdFx0XHRcdCAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW1vZGVybl9iYXJzKTtcbitcdGlmICghY29tbW9uKSB7XG4rXHRcdGRldl9lcnIoZGhfZGV2LVx1MDAzZWRldmljZSxcbitcdFx0XHRcIm1pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHBmX2Rldi1cdTAwM2Vjb21tb24gPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KGRoX2RldiwgY29tbW9uLFxuK1x0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXG4rXHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsXG4rXHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbitcdFx0XHRcdFx0XHROVUxMLCBOVUxMLCBOVUxMKTtcbitcdGlmICghcGZfZGV2LVx1MDAzZWNvbW1vbikge1xuK1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwicGZfZGV2LVx1MDAzZWNvbW1vbiBpcyBudWxsXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHR1MzIgbm90aWZ5X2xlbmd0aDtcbitcdHUzMiBub3RpZnlfb2Zmc2V0O1xuK1x0aW50IG5vdGlmeTtcbitcbitcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xuK1x0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxuK1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcbitcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuK1x0aWYgKCFub3RpZnkpIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcIm1pc3Npbmcgbm90aWZ5IGNmZyBjYXBhYmlsaXR5XFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuK1x0XHRcdFx0bm90aWZ5X29mZl9tdWx0aXBsaWVyKSxcbitcdFx0XHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcik7XG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbitcdFx0XHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbitcdFx0XHRcdGNhcC5sZW5ndGgpLCBcdTAwMjZub3RpZnlfbGVuZ3RoKTtcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuK1x0XHRcdFx0Y2FwLm9mZnNldCksIFx1MDAyNm5vdGlmeV9vZmZzZXQpO1xuK1xuK1x0LyogV2UgZG9uJ3Qga25vdyBob3cgbWFueSBWUXMgd2UnbGwgbWFwLCBhaGVhZCBvZiB0aGUgdGltZS5cbitcdCAqIElmIG5vdGlmeSBsZW5ndGggaXMgc21hbGwsIG1hcCBpdCBhbGwgbm93LiBPdGhlcndpc2UsXG4rXHQgKiBtYXAgZWFjaCBWUSBpbmRpdmlkdWFsbHkgbGF0ZXIuXG4rXHQgKi9cbitcdGlmIChub3RpZnlfbGVuZ3RoICsgKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG4rXHRcdHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBub3RpZnksXG4rXHRcdFx0XHRcdFx0XHQgICAgIFpYREhfUEZfTUFQX01JTkxFTjIsXG4rXHRcdFx0XHRcdFx0XHQgICAgWlhESF9QRl9BTElHTjIsIDAsXG4rXHRcdFx0XHRcdFx0XHQgICAgbm90aWZ5X2xlbmd0aCxcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X2xlbixcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X3BhLCBOVUxMKTtcbitcdFx0aWYgKCFwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpIHtcbitcdFx0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwicGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlIGlzIG51bGxcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHBmX2Rldi1cdTAwM2Vub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHRpbnQgZGV2aWNlO1xuK1xuK1x0LyogRGV2aWNlIGNhcGFiaWxpdHkgaXMgb25seSBtYW5kYXRvcnkgZm9yXG4rXHQgKiBkZXZpY2VzIHRoYXQgaGF2ZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cbitcdCAqL1xuK1x0ZGV2aWNlID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHLFxuK1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcbitcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuK1xuK1x0Lyogd2UgZG9uJ3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLFxuK1x0ICogYnV0IFBBR0VfU0laRSBpcyBtb3JlIHRoYW4gZW5vdWdoIGZvciBhbGwgZXhpc3RpbmcgZGV2aWNlcy5cbitcdCAqL1xuK1x0aWYgKGRldmljZSkge1xuK1x0XHRwZl9kZXYtXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eShkaF9kZXYsIGRldmljZSwgMCxcbitcdFx0XHRcdFx0XHRcdFpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsXG4rXHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2VkZXZpY2VfbGVuLCBOVUxMLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlZGV2X2NmZ19iYXJfb2ZmKTtcbitcdFx0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKSB7XG4rXHRcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBmX2Rldi1cdTAwM2VkZXZpY2UgaXMgbnVsbFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXHUwMDNlcGRldjtcbitcbitcdGlmIChwZl9kZXYtXHUwMDNlZGV2aWNlKVxuK1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbitcdGlmIChwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpXG4rXHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSk7XG4rXHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbit9XG4rXG4raW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwienhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9tYXBfbm90aWZ5O1xuK1x0fVxuK1xuK1x0cmV0ID0genhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoZGhfZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfbWFwX2RldmljZTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9tYXBfZGV2aWNlOlxuK1x0aWYgKHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSlcbitcdFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKTtcbitlcnJfbWFwX25vdGlmeTpcbitcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vjb21tb24pO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rdTE2IHp4ZGhfcGZfZ2V0X3F1ZXVlX25vdGlmeV9vZmYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXG4rXHRcdFx0XHQgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXG4rXHRpZiAocGZfZGV2LVx1MDAzZXBhY2tlZF9zdGF0dXMpXG4rXHRcdGlvd3JpdGUxNihwaHlfaW5kZXgsIFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlcXVldWVfc2VsZWN0KTtcbitcdGVsc2VcbitcdFx0aW93cml0ZTE2KGluZGV4LCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZXF1ZXVlX3NlbGVjdCk7XG4rXG4rXHRyZXR1cm4gaW9yZWFkMTYoXHUwMDI2cGZfZGV2LVx1MDAzZWNvbW1vbi1cdTAwM2VxdWV1ZV9ub3RpZnlfb2ZmKTtcbit9XG4rXG4rdm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXG4rXHRcdFx0XHQgICAgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4LFxuK1x0XHRcdFx0ICAgICByZXNvdXJjZV9zaXplX3QgKnBhKVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXHR1MTYgb2ZmO1xuK1xuK1x0b2ZmID0genhkaF9wZl9nZXRfcXVldWVfbm90aWZ5X29mZihkaF9kZXYsIHBoeV9pbmRleCwgaW5kZXgpO1xuK1xuK1x0aWYgKHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSkge1xuK1x0XHQvKiBvZmZzZXQgc2hvdWxkIG5vdCB3cmFwICovXG4rXHRcdGlmICgodTY0KW9mZiAqXG4rXHRcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllciArIDIgXHUwMDNlIHBmX2Rldi1cdTAwM2Vub3RpZnlfbGVuKSB7XG4rXHRcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFx0XCJiYWQgbm90aWZpY2F0aW9uIG9mZnNldCAldSAoeCAldSkgZm9yIHF1ZXVlICV1IFx1MDAzZSAlenVcXG5cIixcbitcdFx0XHRcdG9mZiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllciwgcGh5X2luZGV4LFxuK1x0XHRcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9sZW4pO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChwYSlcbitcdFx0XHQqcGEgPSBwZl9kZXYtXHUwMDNlbm90aWZ5X3BhICsgb2ZmICogcGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcbitcbitcdFx0cmV0dXJuIHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSArIG9mZiAqIHBmX2Rldi1cdTAwM2Vub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXR1cm4genhkaF9wZl9tYXBfY2FwYWJpbGl0eShkaF9kZXYsIHBmX2Rldi1cdTAwM2Vub3RpZnlfbWFwX2NhcCwgMiwgMixcbitcdFx0XHRcdFx0ICAgICAgb2ZmICogcGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcixcbitcdFx0XHRcdFx0ICAgICAgMiwgTlVMTCwgcGEsIE5VTEwpO1xuK1x0fVxuK31cbitcbit2b2lkIHp4ZGhfcGZfdW5tYXBfdnFfbm90aWZ5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB2b2lkIF9faW9tZW0gKnByaXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmICghcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuK1x0XHRwY2lfaW91bm1hcChkaF9kZXYtXHUwMDNlcGRldiwgcHJpdik7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9zZXRfc3RhdHVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCBzdGF0dXMpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcbitcdGlvd3JpdGU4KHN0YXR1cywgXHUwMDI2cGZfZGV2LVx1MDAzZWNvbW1vbi1cdTAwM2VkZXZpY2Vfc3RhdHVzKTtcbit9XG4rXG4rdTggenhkaF9wZl9nZXRfc3RhdHVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXG4rXHRyZXR1cm4gaW9yZWFkOChcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9zdGF0dXMpO1xuK31cbitcbit1OCB6eGRoX3BmX2dldF9jZmdfZ2VuKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXHR1OCBjb25maWdfZ2VuZXJhdGlvbjtcbitcbitcdGNvbmZpZ19nZW5lcmF0aW9uID0gaW9yZWFkOChcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWNvbmZpZ19nZW5lcmF0aW9uKTtcbitcbitcdHJldHVybiBjb25maWdfZ2VuZXJhdGlvbjtcbit9XG4rXG4rdm9pZCB6eGRoX3BmX2dldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZClcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuK1x0dTMyIERFVl9NQUNfTDtcbitcdHUxNiBERVZfTUFDX0g7XG4rXG4rXHRldGhfemVyb19hZGRyKG1hYyk7XG4rXG4rXHRpZiAocGZfZGV2LVx1MDAzZXBmX3NyaW92X2NhcF9iYXNlKSB7XG4rXHRcdERFVl9NQUNfTCA9IGlvcmVhZDMyKHBmX2Rldi1cdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSArXG4rXHRcdFx0XHQgICAgIChwZl9kZXYtXHUwMDNlc3Jpb3ZfYmFyX3NpemUpICogdmZfaWQgK1xuK1x0XHRcdFx0ICAgICBwZl9kZXYtXHUwMDNlZGV2X2NmZ19iYXJfb2ZmKTtcbitcdFx0bWFjWzBdID0gREVWX01BQ19MIFx1MDAyNiAweGZmO1xuK1x0XHRtYWNbMV0gPSAoREVWX01BQ19MIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbitcdFx0bWFjWzJdID0gKERFVl9NQUNfTCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmO1xuK1x0XHRtYWNbM10gPSAoREVWX01BQ19MIFx1MDAzZVx1MDAzZSAyNCkgXHUwMDI2IDB4ZmY7XG4rXHRcdERFVl9NQUNfSCA9IGlvcmVhZDE2KHBmX2Rldi1cdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSArXG4rXHRcdFx0XHQgICAgICAocGZfZGV2LVx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICtcbitcdFx0XHRcdCAgICAgIHBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYgK1xuK1x0XHRcdFx0ICAgICAgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKTtcbitcdFx0bWFjWzRdID0gREVWX01BQ19IIFx1MDAyNiAweGZmO1xuK1x0XHRtYWNbNV0gPSAoREVWX01BQ19IIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbitcdH1cbit9XG4rXG4rdm9pZCB6eGRoX3BmX3NldF92Zl9tYWNfcmVnKHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2LFxuK1x0XHRcdCAgICB1OCAqbWFjLCBpbnQgdmZfaWQpXG4re1xuK1x0dTMyIERFVl9NQUNfTDtcbitcdHUxNiBERVZfTUFDX0g7XG4rXG4rXHRpZiAocGZfZGV2LVx1MDAzZXBmX3NyaW92X2NhcF9iYXNlKSB7XG4rXHRcdERFVl9NQUNfTCA9IG1hY1swXSB8IChtYWNbMV0gXHUwMDNjXHUwMDNjIDgpIHxcbitcdFx0XHRcdFx0KG1hY1syXSBcdTAwM2NcdTAwM2MgMTYpIHwgKG1hY1szXSBcdTAwM2NcdTAwM2MgMjQpO1xuK1x0XHRERVZfTUFDX0ggPSBtYWNbNF0gfCAobWFjWzVdIFx1MDAzY1x1MDAzYyA4KTtcbitcdFx0aW93cml0ZTMyKERFVl9NQUNfTCwgKHBmX2Rldi1cdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSArXG4rXHRcdFx0ICAocGZfZGV2LVx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICtcbitcdFx0XHQgIHBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpKTtcbitcdFx0aW93cml0ZTE2KERFVl9NQUNfSCwgKHBmX2Rldi1cdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSArXG4rXHRcdFx0ICAocGZfZGV2LVx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICtcbitcdFx0XHQgIHBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYgK1xuK1x0XHRcdCAgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKSk7XG4rXHR9XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9zZXRfdmZfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjLCBpbnQgdmZfaWQpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcbitcdHp4ZGhfcGZfc2V0X3ZmX21hY19yZWcocGZfZGV2LCBtYWMsIHZmX2lkKTtcbit9XG4rXG4rdm9pZCB6eGRoX3NldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHUzMiBERVZfTUFDX0w7XG4rXHR1MTYgREVWX01BQ19IO1xuK1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRERVZfTUFDX0wgPSBtYWNbMF0gfCAobWFjWzFdIFx1MDAzY1x1MDAzYyA4KSB8IChtYWNbMl0gXHUwMDNjXHUwMDNjIDE2KSB8IChtYWNbM10gXHUwMDNjXHUwMDNjIDI0KTtcbitcdERFVl9NQUNfSCA9IG1hY1s0XSB8IChtYWNbNV0gXHUwMDNjXHUwMDNjIDgpO1xuK1x0aW93cml0ZTMyKERFVl9NQUNfTCwgcGZfZGV2LVx1MDAzZWRldmljZSk7XG4rXHRpb3dyaXRlMTYoREVWX01BQ19ILCBwZl9kZXYtXHUwMDNlZGV2aWNlICsgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKTtcbit9XG4rXG4rdm9pZCB6eGRoX2dldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHUzMiBERVZfTUFDX0w7XG4rXHR1MTYgREVWX01BQ19IO1xuK1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRERVZfTUFDX0wgPSBpb3JlYWQzMihwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbitcdG1hY1swXSA9IERFVl9NQUNfTCBcdTAwMjYgMHhmZjtcbitcdG1hY1sxXSA9IChERVZfTUFDX0wgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmO1xuK1x0bWFjWzJdID0gKERFVl9NQUNfTCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmO1xuK1x0bWFjWzNdID0gKERFVl9NQUNfTCBcdTAwM2VcdTAwM2UgMjQpIFx1MDAyNiAweGZmO1xuK1x0REVWX01BQ19IID0gaW9yZWFkMTYocGZfZGV2LVx1MDAzZWRldmljZSArIFpYREhfREVWX01BQ19ISUdIX09GRlNFVCk7XG4rXHRtYWNbNF0gPSBERVZfTUFDX0ggXHUwMDI2IDB4ZmY7XG4rXHRtYWNbNV0gPSAoREVWX01BQ19IIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbit9XG4rXG4rdTY0IHp4ZGhfcGZfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXHR1NjQgZGV2aWNlX2ZlYXR1cmU7XG4rXG4rXHRpb3dyaXRlMzIoMCwgXHUwMDI2cGZfZGV2LVx1MDAzZWNvbW1vbi1cdTAwM2VkZXZpY2VfZmVhdHVyZV9zZWxlY3QpO1xuK1x0ZGV2aWNlX2ZlYXR1cmUgPSBpb3JlYWQzMihcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9mZWF0dXJlKTtcbitcdGlvd3JpdGUzMigxLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9mZWF0dXJlX3NlbGVjdCk7XG4rXHRkZXZpY2VfZmVhdHVyZSB8PSAoKHU2NClpb3JlYWQzMihcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9mZWF0dXJlKVxuK1x0XHRcdFx0XHRcdFx1MDAzY1x1MDAzYyAzMik7XG4rXG4rXHRyZXR1cm4gZGV2aWNlX2ZlYXR1cmU7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU2NCBmZWF0dXJlcylcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0aW93cml0ZTMyKDAsIFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlZ3Vlc3RfZmVhdHVyZV9zZWxlY3QpO1xuK1x0aW93cml0ZTMyKCh1MzIpZmVhdHVyZXMsIFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlZ3Vlc3RfZmVhdHVyZSk7XG4rXHRpb3dyaXRlMzIoMSwgXHUwMDI2cGZfZGV2LVx1MDAzZWNvbW1vbi1cdTAwM2VndWVzdF9mZWF0dXJlX3NlbGVjdCk7XG4rXHRpb3dyaXRlMzIoZmVhdHVyZXMgXHUwMDNlXHUwMDNlIDMyLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWd1ZXN0X2ZlYXR1cmUpO1xuK31cbitcbitzdGF0aWMgaW50IGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXY7XG4rXHRzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldjtcbitcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuK1x0aW50IHJldDtcbitcbitcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFx1MDAyNmRoX3BmX2Rldmxpbmtfb3BzLCBzaXplb2Yoc3RydWN0IGRoX2NvcmVfZGV2KSxcbitcdFx0XHRcdFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdGlmICghZGV2bGluaykge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcImRoX3BmIGRldmxpbmsgYWxsb2MgZmFpbGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdGRoX2RldiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcbitcdGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdGRoX2Rldi1cdTAwM2VwZGV2ID0gcGRldjtcbitcdGRoX2Rldi1cdTAwM2VkZXZsaW5rID0gZGV2bGluaztcbitcbitcdHBmX2RldiA9IGRoX2NvcmVfYWxsb2NfcHJpdihkaF9kZXYsIHNpemVvZigqcGZfZGV2KSk7XG4rXHRpZiAoIXBmX2Rldikge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcImRoX3BmX2RldiBhbGxvYyBmYWlsZWRcXG5cIik7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZXJyX3BmX2RldjtcbitcdH1cbitcbitcdHBmX2Rldi1cdTAwM2ViYXJfY2hhbl92YWxpZCA9IGZhbHNlO1xuK1x0cGZfZGV2LVx1MDAzZXZlcGEgPSBmYWxzZTtcbitcdG11dGV4X2luaXQoXHUwMDI2ZGhfZGV2LVx1MDAzZWxvY2spO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuK1xuK1x0ZGhfZGV2LVx1MDAzZWNvcmVkZXZfdHlwZSA9IEdFVF9DT1JFREVWX1RZUEUocGRldik7XG4rXG4rXHRyZXQgPSBkaF9wZl9wY2lfaW5pdChkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcImRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4rXHR9XG4rXG4rXHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2NmZ19pbml0OlxuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkaF9kZXYtXHUwMDNlbG9jayk7XG4rXHRkaF9jb3JlX2ZyZWVfcHJpdihkaF9kZXYpO1xuK2Vycl9wZl9kZXY6XG4rXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBkaF9wZl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkaF9kZXYpO1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcbitcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcbitcdGRoX3BmX3BjaV9jbG9zZShkaF9kZXYpO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkaF9kZXYtXHUwMDNlbG9jayk7XG4rXHRkaF9jb3JlX2ZyZWVfcHJpdihkaF9kZXYpO1xuK1x0ZGV2bGlua19mcmVlKGRldmxpbmspO1xuK1x0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBkaF9wZl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXG4rXHRcdHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTtcbitcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRoX3BmX2RyaXZlciA9IHtcbitcdC5uYW1lID0gXCJkaW5naGFpMTBlXCIsXG4rXHQuaWRfdGFibGUgPSBkaF9wZl9wY2lfdGFibGUsXG4rXHQucHJvYmUgPSBkaF9wZl9wcm9iZSxcbitcdC5yZW1vdmUgPSBkaF9wZl9yZW1vdmUsXG4rXHQuc2h1dGRvd24gPSBkaF9wZl9zaHV0ZG93bixcbit9O1xuK1xuK21vZHVsZV9wY2lfZHJpdmVyKGRoX3BmX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWRhYTc5YTZkNmYyYWJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbkBAIC0wLDAgKzEsMTE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUEYgaGVhZGVyXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbisgKi9cbitcbisjaWZuZGVmIF9fWlhESF9FTl9QRl9IX19cbisjZGVmaW5lIF9fWlhESF9FTl9QRl9IX19cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbitcbisjZGVmaW5lIFpYREhfUEZfVkVORE9SX0lEXHQweDFjZjJcbisjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXHQweDgwNDBcbisjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lEXHQweDgwNDFcbitcbisvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkdcdDFcbisvKiBOb3RpZmljYXRpb25zICovXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1x0MlxuKy8qIElTUiBhY2Nlc3MgKi9cbisjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHXHRcdDNcbisvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkdcdDRcbisvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi9cbisjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHXHRcdDVcbitcbisjZGVmaW5lIFpYREhfUEZfTUFYX0JBUl9WQUxcdFx0MHg1XG4rI2RlZmluZSBaWERIX1BGX0FMSUdONFx0XHRcdDRcbisjZGVmaW5lIFpYREhfUEZfQUxJR04yXHRcdFx0MlxuKyNkZWZpbmUgWlhESF9QRl9NQVBfTUlOTEVOMlx0XHQyXG4rXG4rI2RlZmluZSBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVRcdDRcbitcbitlbnVtIGRoX2NvcmVkZXZfdHlwZSB7XG4rXHRESF9DT1JFREVWX1BGLFxuK1x0REhfQ09SRURFVl9WRixcbitcdERIX0NPUkVERVZfU0YsXG4rXHRESF9DT1JFREVWX01QRlxuK307XG4rXG4rc3RydWN0IGRldmxpbms7XG4rXG4rc3RydWN0IGRoX2NvcmVfZGV2IHtcbitcdHN0cnVjdCBkZXZpY2UgKmRldmljZTtcbitcdGVudW0gZGhfY29yZWRldl90eXBlIGNvcmVkZXZfdHlwZTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuK1x0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4rXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogUHJvdGVjdHMgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi9cbitcdHZvaWQgKnByaXY7XG4rfTtcbitcbitzdHJ1Y3QgenhkaF9wZl9kZXZpY2Uge1xuK1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uO1xuK1x0LyogRGV2aWNlLXNwZWNpZmljIGRhdGEgKG5vbi1sZWdhY3kgbW9kZSkgICovXG4rXHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXG4rXHR2b2lkIF9faW9tZW0gKmRldmljZTtcbitcdHZvaWQgX19pb21lbSAqbm90aWZ5X2Jhc2U7XG4rXHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xuK1x0LyogUGh5c2ljYWwgYmFzZSBvZiB2cSBub3RpZmljYXRpb25zICovXG4rXHRyZXNvdXJjZV9zaXplX3Qgbm90aWZ5X3BhO1xuK1x0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cbitcdHNpemVfdCBub3RpZnlfbGVuO1xuK1x0c2l6ZV90IGRldmljZV9sZW47XG4rXHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xuK1x0czMyIG5vdGlmeV9tYXBfY2FwO1xuK1x0dTMyIG5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcbitcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXG4rXHRzMzIgbW9kZXJuX2JhcnM7XG4rXHR2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07XG4rXHR1NjQgc3Jpb3ZfYmFyX3NpemU7XG4rXHR1MzIgZGV2X2NmZ19iYXJfb2ZmO1xuK1x0Ym9vbCBwYWNrZWRfc3RhdHVzO1xuK1x0Ym9vbCBiYXJfY2hhbl92YWxpZDtcbitcdGJvb2wgdmVwYTtcbitcdHN0cnVjdCBtdXRleCBpcnFfbG9jazsgLyogUHJvdGVjdHMgSVJRIG9wZXJhdGlvbnMgKi9cbit9O1xuK1xuKyNkZWZpbmUgR0VUX0NPUkVERVZfVFlQRShwZGV2KSBcXFxuK1x0KChwZGV2KS1cdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcbitcbit2b2lkICpkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHNpemVfdCBzaXplKTtcbit2b2lkIGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbit2b2lkIGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldik7XG4raW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXG4rXHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTtcbit2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIGludCBvZmYsXG4rXHRcdFx0XHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcbitcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbitcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXG4rXHRcdFx0XHQgICAgIHUzMiAqYmFyX29mZik7XG4raW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuK2ludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7XG4rdm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbitpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuK3UxNiB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxuK1x0XHRcdFx0IHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCk7XG4rdm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXG4rXHRcdFx0XHQgICAgIHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCxcbitcdFx0XHRcdCAgICAgcmVzb3VyY2Vfc2l6ZV90ICpwYSk7XG4rdm9pZCB6eGRoX3BmX3VubWFwX3ZxX25vdGlmeShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgdm9pZCBfX2lvbWVtICpwcml2KTtcbit2b2lkIHp4ZGhfcGZfc2V0X3N0YXR1cyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggc3RhdHVzKTtcbit1OCB6eGRoX3BmX2dldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuK3U4IHp4ZGhfcGZfZ2V0X2NmZ19nZW4oc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuK3ZvaWQgenhkaF9wZl9nZXRfdmZfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjLCBpbnQgdmZfaWQpO1xuK3ZvaWQgenhkaF9wZl9zZXRfdmZfbWFjX3JlZyhzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldixcbitcdFx0XHQgICAgdTggKm1hYywgaW50IHZmX2lkKTtcbit2b2lkIHp4ZGhfcGZfc2V0X3ZmX21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYywgaW50IHZmX2lkKTtcbit2b2lkIHp4ZGhfc2V0X21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYyk7XG4rdm9pZCB6eGRoX2dldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpO1xuK3U2NCB6eGRoX3BmX2dldF9mZWF0dXJlcyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7XG4rdm9pZCB6eGRoX3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTY0IGZlYXR1cmVzKTtcbitcbisjZW5kaWYgLyogX19aWERIX0VOX1BGX0hfXyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzA6MzcuODUyMTMxOTM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY5ODgyMjUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpURSBEaW5nSGFpIEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYWRkaW5nIGEgbmV3IEV0aGVybmV0IGRyaXZlciBmb3IgWlRFIERpbmdIYWkgZGV2aWNlcy4gVGhlIHN0cnVjdHVyZSBpcyBwcmV0dHkgc3RhbmRhcmQ6IGBNQUlOVEFJTkVSU2AgdXBkYXRlLCBgS2NvbmZpZ2AgYW5kIGBNYWtlZmlsZWAgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBkaXJlY3Rvcmllcy4gU3BlY2lmaWNhbGx5LCB0aGlzIGRyaXZlciBzZWVtcyB0byBiZSB0YXJnZXRpbmcgUENJLWJhc2VkIFpURSBEaW5nSGFpIGhhcmR3YXJlLlxuXG5Gcm9tIHRoZSBjb2RlLCBpdCdzIGNsZWFyIHRoaXMgZHJpdmVyIGlzIGNlbnRlcmVkIGFyb3VuZCB0aGUgUENJIGRyaXZlciBgZGhfcGZfZHJpdmVyYCwgd2l0aCBgZGhfcGZfcHJvYmVgIHNlcnZpbmcgYXMgdGhlIGtleSBpbml0aWFsaXphdGlvbiBwb2ludC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgaXQgd2FzIG1pc3NpbmcgdGhlIGNydWNpYWwgYG5ldF9kZXZpY2VgIHJlZ2lzdHJhdGlvbiwgYnV0IHRoZW4gSSBzZWUgdGhlIHBhdGNoIGRvZXMgcmVnaXN0ZXIgYSBgZGV2bGlua2AgaW5zdGFuY2UgdXNpbmcgYGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluaylgLCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgcG9zaXRpdmUgc2lnbiwgYXMgdGhpcyBleHBvc2VzIGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlLlxuXG5EaWdnaW5nIGRlZXBlciwgdGhlIGRyaXZlciBpbXBsZW1lbnRzIGBkaF9wZl9wcm9iZWAsIGBkaF9wZl9yZW1vdmVgLCBhbmQgYGRoX3BmX3NodXRkb3duYC4gSSBub3RpY2VkIHNvbWUgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0YCwgYHp4ZGhfcGZfc2V0X3ZmX21hY2AsIGV0Yy4sIGFyZSBkZWZpbmVkLiBIb3dldmVyLCBhIHF1aWNrIHNjYW4gb2YgYGVuX3BmLmNgIHJldmVhbGVkIHRoYXQgdGhleSBhcmVuJ3QgY2FsbGVkIGFueXdoZXJlIGluIHRoZSBkcml2ZXIgaXRzZWxmLCB3aGljaCBpcyBhIGJpdCBwdXp6bGluZy4gTWF5YmUgdGhleSdyZSBwYXJ0IG9mIGEgZnV0dXJlIGltcGxlbWVudGF0aW9uIG9yIGFyZSBtZWFudCB0byBiZSBjYWxsZWQgZXh0ZXJuYWxseS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhleSBhcmUgdHJ1bHkgdW51c2VkLCBsaWtlbHkgZGVhZCBjb2RlLCBvciBzb21laG93IGNhbGxlZCBlbHNld2hlcmUgKG1heWJlIGEgZGlmZmVyZW50IHBhdGNoPykuXG5cbkxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IHdoYXQgYGRoX3BmX3Byb2JlYCBkb2VzLCBJIHNlZSBpdCBjYWxscyBgZGV2bGlua19hbGxvY2AsIGBkaF9jb3JlX2FsbG9jX3ByaXZgLCBgZGhfcGZfcGNpX2luaXRgLCBhbmQgdGhlbiByZWdpc3RlcnMgdGhlIGBkZXZsaW5rYC4gVGhpcyBpcyBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGEgZnVuY3Rpb25hbCBkcml2ZXIuXG5cblRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRocm91Z2ggdGhlIGNvZGUgdG8gdmVyaWZ5IHRoYXQgdGhvc2Ugb3RoZXIgZnVuY3Rpb25zIGFyZSBub3QgYWN0dWFsbHkgdXNlZCwgZW5zdXJpbmcgdGhhdCB0aGV5IHRydWx5IGFyZW4ndCByZWZlcmVuY2VkIGJ5IGFueSBvdGhlciBjb2RlLiBJJ2xsIHJ1biBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IGl0IGZpbmRzIG9uIGB6eGRoX3BmX21vZGVybl9jZmdfaW5pdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTQxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzA6NDYuNTUwOTU3MzY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NzMwMjMwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienhkaF9wZl9tb2Rlcm5fY2ZnX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYz0zMjg9dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNDA6aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg9OTg9dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjk5OmludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC0xMDAtdTE2IHp4ZGhfcGZfZ2V0X3F1ZXVlX25vdGlmeV9vZmYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjMwOjUwLjIyMzk4NTk1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjE1NzIxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBhIE5ldyBQQ0kgRHJpdmVyKipcblxuT2theSwgc28gdGhpcyBjb2RlIGlzIGN1cnJlbnRseSBkb3JtYW50LCBlc3NlbnRpYWxseSBkZWFkLCBidXQgYGRoX3BmX3Byb2JlYCBpcyBzdGlsbCBhY2Nlc3NpYmxlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU2hvdWxkIEkgZXZlbiBib3RoZXIgd2l0aCBmdXp6aW5nIHRoaXM/IFllcywgYWJzb2x1dGVseS4gSXQncyBhIGJyYW5kIG5ldyBQQ0kgZHJpdmVyLCBhbmQgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgZnV6emluZyBQQ0kgZHJpdmVycyB1c2luZyB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uIOKAkyBhIGdyZWF0IG9wcG9ydHVuaXR5LiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlLCBiYXNlZCBvbiB0aGUgbm90ZXMsIEkgbmVlZCBgTkVUX1ZFTkRPUl9aVEVgLCBgRElOR0hBSWAsIGFuZCBgRElOR0hBSV9QRmAuXG5cblJpZ2h0LCB0aW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnYC4gT2theSwgYERJTkdIQUlgIGRlcGVuZHMgb24gYFBDSWAsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEFuZCBgRElOR0hBSV9QRmAgaXMgYSB0cmlzdGF0ZSwgbWVhbmluZyBpdCBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUgb3IgYnVpbHQtaW4sIG9yIGV2ZW4gZGlzYWJsZWQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgRElOR0hBSWAgYW5kIGBESU5HSEFJX1BGYCBhcmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHRoZSBkcml2ZXIgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDE4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjMwOjU1LjY4NTU2MDA4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYwMTY4NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESU5HSEFJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnOjY6Y29uZmlnIERJTkdIQUlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTctICAgIGJvb2wgXFxcIlpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc9MjE9aWYgRElOR0hBSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzoyMzpjb25maWcgRElOR0hBSV9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMjQtICAgIHRyaXN0YXRlIFxcXCJaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzA6NTcuODQ1NzMzOTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk4OTAxNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgWlRFIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBaVEUgRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIGJ5IGV4YW1pbmluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHRoZSBwbGFjZSB3aGVyZSB0aGUgaW5jbHVzaW9uIG9mIHRoZSBaVEUgRXRoZXJuZXQgZHJpdmVyIGlzIGRlZmluZWQsIGFsb25nIHdpdGggYWxsIGl0cyBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0byBmaW5kIGBjb25maWdgIG9wdGlvbnMsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMgdG8gbWFuYWdlIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB3aGV0aGVyIGl0IHN1cHBvcnRzIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9ucywgZGlmZmVyZW50IEV0aGVybmV0IFBIWSB0eXBlcywgcG93ZXIgbWFuYWdlbWVudCBmZWF0dXJlcywgb3IgYW55IG90aGVyIGRyaXZlci1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgYnVpbGQgdGltZS4gQmFzZWQgb24gdGhlIEtjb25maWcgZmlsZSwgSSdsbCBhc3Nlc3Mgd2hldGhlciBpdCBtaWdodCBhcHBseSBpbiBhIHNwZWNpZmljIHVzZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk5MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjMxOjAxLjE0NDYzNzY3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4NTMzMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfVkVORE9SX1pURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnOjY6Y29uZmlnIE5FVF9WRU5ET1JfWlRFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWctNy0gICAgYm9vbCBcXFwiWlRFIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjMxOjAzLjQwMzE3NTk0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDI4MDYzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaVEUgRGluZ2hhaSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCB0aGUga2V5IGlzIGVuYWJsaW5nIHRoZXNlIG1vZHVsZXM6IGBORVRfVkVORE9SX1pURWAsIGBESU5HSEFJYCwgYW5kIGBESU5HSEFJX1BGYC4gUmlnaHQsIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHN5bWJvbHMsIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMuIEkgc2VlIHRoZSBmb2N1cyBpcyBvbiBgZGhfcGZfcHJvYmVgLCBgZGhfcGZfcmVtb3ZlYCwgYGRoX3BmX3BjaV9pbml0YCwgYW5kIGBkaF9wZl9wY2lfY2xvc2VgLiBBaCwgYGRoX3BmX3Byb2JlYCByaW5ncyBhIGJlbGwsIHRoYXQgbG9va3MgbGlrZSBhIFBDSSBwcm9iZSBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYWNjZXNzaWJsZSBmdW5jdGlvbnMgaW4gdGhpcyBwYXRoLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCBgZGV2bGlua19vcHNgLCBpdCdzIGVtcHR5OiBgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkaF9wZl9kZXZsaW5rX29wcyA9IHt9O2AgT2theSwgc28gbm8gZGV2bGluayBjYWxsYmFja3MgYXJlIGRlZmluZWQgaGVyZS4gVGhhdCBoZWxwcyBuYXJyb3cgdGhpbmdzIGRvd24gY29uc2lkZXJhYmx5LlxuXG5TbywgdG8gcmVpdGVyYXRlLCB0aGUgb25seSByZWFjaGFibGUgZnVuY3Rpb25zIGFwcGVhciB0byBiZSBgZGhfcGZfcHJvYmVgLCBgZGhfcGZfcmVtb3ZlYCwgYGRoX3BmX3NodXRkb3duYCwgYGRoX3BmX3BjaV9pbml0YCwgYW5kIGBkaF9wZl9wY2lfY2xvc2VgLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLCBzbyBJJ2xsIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBleGFjdGx5IHdoYXQgYGRoX3BmX3Byb2JlYCBkb2VzIHRvIGNvbmZpcm0gaXQncyBhcyBzdHJhaWdodGZvcndhcmQgYXMgaXQgc2VlbXMuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI5OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxOTozMTowOC42MDU5ODQ5MDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTYwOlxcdHN0YXRpYyBpbnQgZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gNTYxOlxcdHtcXG4gNTYyOlxcdFxcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2O1xcbiA1NjM6XFx0XFx0c3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXY7XFxuIDU2NDpcXHRcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4gNTY1OlxcdFxcdGludCByZXQ7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFxcdTAwMjZkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCBkaF9jb3JlX2RldiksXFxuIDU2ODpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gNTY5OlxcdFxcdGlmICghZGV2bGluaykge1xcbiA1NzA6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXFxcblxcXCIpO1xcbiA1NzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDU3MjpcXHRcXHR9XFxuIDU3MzpcXHRcXG4gNTc0OlxcdFxcdGRoX2RldiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcXG4gNTc1OlxcdFxcdGRoX2Rldi1cXHUwMDNlZGV2aWNlID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gNTc2OlxcdFxcdGRoX2Rldi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuIDU3NzpcXHRcXHRkaF9kZXYtXFx1MDAzZWRldmxpbmsgPSBkZXZsaW5rO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRwZl9kZXYgPSBkaF9jb3JlX2FsbG9jX3ByaXYoZGhfZGV2LCBzaXplb2YoKnBmX2RldikpO1xcbiA1ODA6XFx0XFx0aWYgKCFwZl9kZXYpIHtcXG4gNTgxOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImRoX3BmX2RldiBhbGxvYyBmYWlsZWRcXFxcblxcXCIpO1xcbiA1ODI6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNTgzOlxcdFxcdFxcdGdvdG8gZXJyX3BmX2RldjtcXG4gNTg0OlxcdFxcdH1cXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0cGZfZGV2LVxcdTAwM2ViYXJfY2hhbl92YWxpZCA9IGZhbHNlO1xcbiA1ODc6XFx0XFx0cGZfZGV2LVxcdTAwM2V2ZXBhID0gZmFsc2U7XFxuIDU4ODpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkaF9kZXYtXFx1MDAzZWxvY2spO1xcbiA1ODk6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuIDU5MDpcXHRcXG4gNTkxOlxcdFxcdGRoX2Rldi1cXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcXG4gNTkyOlxcdFxcbiA1OTM6XFx0XFx0cmV0ID0gZGhfcGZfcGNpX2luaXQoZGhfZGV2KTtcXG4gNTk0OlxcdFxcdGlmIChyZXQpIHtcXG4gNTk1OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuIDU5NjpcXHRcXHRcXHRnb3RvIGVycl9jZmdfaW5pdDtcXG4gNTk3OlxcdFxcdH1cXG4gNTk4OlxcdFxcbiA1OTk6XFx0XFx0ZGV2bGlua19yZWdpc3RlcihkZXZsaW5rKTtcXG4gNjAwOlxcdFxcbiA2MDE6XFx0XFx0cmV0dXJuIDA7XFxuIDYwMjpcXHRcXG4gNjAzOlxcdGVycl9jZmdfaW5pdDpcXG4gNjA0OlxcdFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBmX2Rldi1cXHUwMDNlaXJxX2xvY2spO1xcbiA2MDU6XFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2ZGhfZGV2LVxcdTAwM2Vsb2NrKTtcXG4gNjA2OlxcdFxcdGRoX2NvcmVfZnJlZV9wcml2KGRoX2Rldik7XFxuIDYwNzpcXHRlcnJfcGZfZGV2OlxcbiA2MDg6XFx0XFx0ZGV2bGlua19mcmVlKGRldmxpbmspO1xcbiA2MDk6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjEwOlxcdH1cXG4gNjExOlxcdFxcbiA2MTI6XFx0c3RhdGljIHZvaWQgZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiA2MTM6XFx0e1xcbiA2MTQ6XFx0XFx0c3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuIDYxNTpcXHRcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkaF9kZXYpO1xcbiA2MTY6XFx0XFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXFx1MDAzZXByaXY7XFxuIDYxNzpcXHRcXG4gNjE4OlxcdFxcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcXG4gNjE5OlxcdFxcdGRoX3BmX3BjaV9jbG9zZShkaF9kZXYpO1xcbiA2MjA6XFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuIDYyMTpcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkaF9kZXYtXFx1MDAzZWxvY2spO1xcbiA2MjI6XFx0XFx0ZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTtcXG4gNjIzOlxcdFxcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcXG4gNjI0OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcXG4gNjI1OlxcdH1cXG4gNjI2OlxcdFxcbiA2Mjc6XFx0c3RhdGljIHZvaWQgZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIDYyODpcXHR7XFxuIDYyOTpcXHRcXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXFxuIDYzMDpcXHRcXHRcXHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XFxuIDYzMTpcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIDYzMjpcXHR9XFxuIDYzMzpcXHRcXG4gNjM0OlxcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkaF9wZl9kcml2ZXIgPSB7XFxuIDYzNTpcXHRcXHQubmFtZSA9IFxcXCJkaW5naGFpMTBlXFxcIixcXG4gNjM2OlxcdFxcdC5pZF90YWJsZSA9IGRoX3BmX3BjaV90YWJsZSxcXG4gNjM3OlxcdFxcdC5wcm9iZSA9IGRoX3BmX3Byb2JlLFxcbiA2Mzg6XFx0XFx0LnJlbW92ZSA9IGRoX3BmX3JlbW92ZSxcXG4gNjM5OlxcdFxcdC5zaHV0ZG93biA9IGRoX3BmX3NodXRkb3duLFxcbiA2NDA6XFx0fTtcXG4gNjQxOlxcdFxcbiA2NDI6XFx0bW9kdWxlX3BjaV9kcml2ZXIoZGhfcGZfZHJpdmVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzE6MDguNjA2MDczNDUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzk3MzQyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQ6IFpURSBEaW5nSGFpIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaW50cm9kdWNpbmcgYSBuZXcgUENJIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlLCBnb29kLCBhIG5ldyB0YXJnZXQhIEl0IGltcGxlbWVudHMgdGhlIHVzdWFsIFBDSSBkcml2ZXIgbGlmZWN5Y2xlIGZ1bmN0aW9ucyDigJMgYHByb2JlYCwgYHJlbW92ZWAsIGFuZCBgc2h1dGRvd25gIOKAkyB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuXG5cbkknbSBub3RpY2luZyB0aGF0IHRoZSBwYXRjaCBhbHNvIGRlZmluZXMgc29tZSBvdGhlciBmdW5jdGlvbnMgbGlrZSBgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXRgIGFuZCBgenhkaF9wZl9zZXRfdmZfbWFjYCwgYnV0IHRoZXNlIGRvbid0IHNlZW0gdG8gYmUgY3VycmVudGx5IHV0aWxpemVkIHdpdGhpbiB0aGUgYHByb2JlYCByb3V0aW5lLiBJbnRlcmVzdGluZ+KApiBwb3RlbnRpYWxseSBhIGZ1dHVyZSBleHBhbnNpb24gb3IgcGVyaGFwcyBzb21lIHVudXNlZCBjb2RlIHBhdGhzLiBXb3J0aCBrZWVwaW5nIGFuIGV5ZSBvbiwgYnV0IGZvciB0aGUgaW5pdGlhbCBmdXp6aW5nLCBteSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLlxuXG5TaW5jZSB0aGUgYHByb2JlYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtLCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMgb24gYGRoX3BmX3Byb2JlYCwgYGRoX3BmX3JlbW92ZWAsIGBkaF9wZl9wY2lfaW5pdGAsIGFuZCBgZGhfcGZfcGNpX2Nsb3NlYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBleGl0IHBvaW50cyBmb3IgdGhlIGRyaXZlciwgYW5kIGZ1enppbmcgdGhlc2UgY291bGQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcyBpbiBob3cgaXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJhdGlvbiwgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuRnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUsIEknbGwgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBhcmUgZW5hYmxlZDogYE5FVF9WRU5ET1JfWlRFYCwgYERJTkdIQUlgLCBhbmQgYERJTkdIQUlfUEZgLiBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoZSBkcml2ZXIgaXMgcHJvcGVybHkgY29tcGlsZWQgYW5kIGluaXRpYWxpemVkIHdoZW4gdGhlIGRldmljZSBpcyBhY2Nlc3NlZCwgZW5hYmxpbmcgbXkgZnV6emluZy5cblxuUmlnaHQsIEknbSBjb25maWRlbnQgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gdGhlIHRhcmdldC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNjQsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzE6MTQuNzQ1ODEwMzYxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyODc3NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfWlRFXCIsXG4gICAgXCJESU5HSEFJXCIsXG4gICAgXCJESU5HSEFJX1BGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGhfcGZfcHJvYmVcIixcbiAgICBcImRoX3BmX3JlbW92ZVwiLFxuICAgIFwiZGhfcGZfcGNpX2luaXRcIixcbiAgICBcImRoX3BmX3BjaV9jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUENJIGRyaXZlciBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy4gVGhlIGRyaXZlciByZWdpc3RlcnMgYSBQQ0kgcHJvYmUgZnVuY3Rpb24gd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGRldmljZSwgbWFwcyBQQ0kgbWVtb3J5LCBhbmQgcmVnaXN0ZXJzIGEgZGV2bGluayBpbnN0YW5jZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSBzdWJzeXN0ZW0gYW5kIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX1pURVwiLFxuICAgIFwiRElOR0hBSVwiLFxuICAgIFwiRElOR0hBSV9QRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRoX3BmX3Byb2JlXCIsXG4gICAgXCJkaF9wZl9yZW1vdmVcIixcbiAgICBcImRoX3BmX3BjaV9pbml0XCIsXG4gICAgXCJkaF9wZl9wY2lfY2xvc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGEgUENJIHByb2JlIGZ1bmN0aW9uIHdoaWNoIGluaXRpYWxpemVzIHRoZSBkZXZpY2UsIG1hcHMgUENJIG1lbW9yeSwgYW5kIHJlZ2lzdGVycyBhIGRldmxpbmsgaW5zdGFuY2UuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowd4f6b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 19:07:38 +0000 UTC FinishedAt: 2026-07-13 19:31:16 +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": "8522d806d84e2c3816c275ae6dd79e124c1b3dac", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_ZTE", "DINGHAI", "DINGHAI_PF" ], "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": "8522d806d84e2c3816c275ae6dd79e124c1b3dac", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_ZTE", "DINGHAI", "DINGHAI_PF" ], "series_id": "c7b29c60-315f-46f4-bb7d-ec3c87abc520" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dh_pf_probe", "dh_pf_remove", "dh_pf_pci_init", "dh_pf_pci_close" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfWlRFJiMzNDssCiAgICAmIzM0O0RJTkdIQUkmIzM0OywKICAgICYjMzQ7RElOR0hBSV9QRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RoX3BmX3Byb2JlJiMzNDssCiAgICAmIzM0O2RoX3BmX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtkaF9wZl9wY2lfaW5pdCYjMzQ7LAogICAgJiMzNDtkaF9wZl9wY2lfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIFBDSSBwcm9iZSBmdW5jdGlvbiB3aGljaCBpbml0aWFsaXplcyB0aGUgZGV2aWNlLCBtYXBzIFBDSSBtZW1vcnksIGFuZCByZWdpc3RlcnMgYSBkZXZsaW5rIGluc3RhbmNlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIGZ1enplZCB1c2luZyB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjlkYmE3MWEzYWFlMzUzYzU0NjQ0YjBmZjRlNGU4MmNlZWQ1NmZmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDE5OjMwOjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDJmYjFjNzVhZmQxNjM4Li43MzY5MmIwOWJmN2JhYiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTI5NDQwLDYgJiM0MzsyOTQ0MCwxMiBAQCBTOlx0TWFpbnRhaW5lZFxuIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Rpd2FpL3NvdW5kLmdpdFxuIEY6XHRzb3VuZC9oZGEvY29kZWNzL3NlbmFyeXRlY2guY1xuIFxuJiM0MztaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVJcbiYjNDM7TTpcdEp1bnlhbmcgSGFuIFx1MDAzY2hhbi5qdW55YW5nQHp0ZS5jb20uY25cdTAwM2VcbiYjNDM7TDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9cbiYjNDM7XG4gVEhFIFJFU1RcbiBNOlx0TGludXMgVG9ydmFsZHMgXHUwMDNjdG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbiBMOlx0bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXG5pbmRleCBiOGY3MGUyYTE3NjNhZC4uYzJiNjk5NmIwY2ZlMWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXG5AQCAtMTg4LDUgJiM0MzsxODgsNiBAQCBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCYjMzQ7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXCYjMzQ7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXCYjMzQ7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS9LY29uZmlnXCYjMzQ7XG4mIzQzO3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1wmIzM0O1xuIFxuIGVuZGlmICMgRVRIRVJORVRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG5pbmRleCA1NzM0NGZlYzZjZTA0Ny4uYTM0YmNiZDRkZjRlOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbkBAIC0xMDQsMyAmIzQzOzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgJiM0Mzs9IHhpcmNvbS9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgJiM0Mzs9IHN5bm9wc3lzL1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPKSAmIzQzOz0gcGVuc2FuZG8vXG4gb2JqLSQoQ09ORklHX09BX1RDNikgJiM0Mzs9IG9hX3RjNi5vXG4mIzQzO29iai0kKENPTkZJR19ORVRfVkVORE9SX1pURSkgJiM0Mzs9IHp0ZS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2EyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMjAgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBaVEUgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiYjNDM7I1xuJiM0MztcbiYjNDM7Y29uZmlnIE5FVF9WRU5ET1JfWlRFXG4mIzQzOyAgICBib29sIFwmIzM0O1pURSBkZXZpY2VzXCYjMzQ7XG4mIzQzOyAgICBkZWZhdWx0IHlcbiYjNDM7ICAgIGhlbHBcbiYjNDM7ICAgICAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4mIzQzOyAgICAgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuJiM0MzsgICAgICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXG4mIzQzOyAgICAgIHRoZSBxdWVzdGlvbnMgYWJvdXQgWnRlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkXG4mIzQzOyAgICAgIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4mIzQzO1xuJiM0MztpZiBORVRfVkVORE9SX1pURVxuJiM0MztcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcJiMzNDtcbiYjNDM7XG4mIzQzO2VuZGlmICMgTkVUX1ZFTkRPUl9aVEVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uY2Q5OTI5YjYxNTU5YzZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNiBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIE1ha2VmaWxlIGZvciB0aGUgWlRFIGRldmljZSBkcml2ZXJzXG4mIzQzOyNcbiYjNDM7XG4mIzQzO29iai0kKENPTkZJR19ESU5HSEFJKSAmIzQzOz0gZGluZ2hhaS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xMjFiZTNiZjc3MDdmZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMzQgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvblxuJiM0MzsjXG4mIzQzO1xuJiM0Mztjb25maWcgRElOR0hBSVxuJiM0MzsgICAgYm9vbCBcJiMzNDtaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjNDM7ICAgIGRlcGVuZHMgb24gUENJXG4mIzQzOyAgICBzZWxlY3QgTkVUX0RFVkxJTktcbiYjNDM7ICAgIGhlbHBcbiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy5cbiYjNDM7XG4mIzQzOyAgICAgIERpbmdIYWkgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIEV0aGVybmV0IGNvbnRyb2xsZXIgdGhhdCBzdXBwb3J0c1xuJiM0MzsgICAgICBtdWx0aXBsZSBmZWF0dXJlcyBpbmNsdWRpbmcgaGFyZHdhcmUgb2ZmbG9hZGluZywgU1ItSU9WLCBhbmRcbiYjNDM7ICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLlxuJiM0MztcbiYjNDM7ICAgICAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gc2VsZWN0IHNwZWNpZmljIGRyaXZlciB2YXJpYW50cyBiZWxvdy5cbiYjNDM7XG4mIzQzOyAgICAgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzQzO1xuJiM0MztpZiBESU5HSEFJXG4mIzQzO1xuJiM0Mztjb25maWcgRElOR0hBSV9QRlxuJiM0MzsgICAgdHJpc3RhdGUgXCYjMzQ7WlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXJcJiMzNDtcbiYjNDM7ICAgIGhlbHBcbiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgUENJIEV4cHJlc3MgRXRoZXJuZXRcbiYjNDM7ICAgICAgYWRhcHRlcnMgKFBGKS5cbiYjNDM7XG4mIzQzOyAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiYjNDM7ICAgICAgd2lsbCBiZSBuYW1lZCBkaW5naGFpMTBlLlxuJiM0MztcbiYjNDM7ICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjNDM7XG4mIzQzO2VuZGlmICMgRElOR0hBSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjU1YThkZTUxOGJlYjNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSwxMCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIE1ha2VmaWxlIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcbiYjNDM7I1xuJiM0MztcbiYjNDM7Y2NmbGFncy15ICYjNDM7PSAtSSQoc3JjKVxuJiM0MztcbiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUlfUEYpICYjNDM7PSBkaW5naGFpMTBlLm9cbiYjNDM7ZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cbiYjNDM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTA2N2M3M2ZlZDMzY2Ncbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbkBAIC0wLDAgJiM0MzsxLDcxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnNcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fREhfUVVFVUVfSF9fXG4mIzQzOyNkZWZpbmUgX19ESF9RVUVVRV9IX19cbiYjNDM7XG4mIzQzOy8qIFZlY3RvciB2YWx1ZSB1c2VkIHRvIGRpc2FibGUgTVNJIGZvciBxdWV1ZSAqL1xuJiM0MzsjZGVmaW5lIFpYREhfTVNJX05PX1ZFQ1RPUiAgICAgIDB4ZmZcbiYjNDM7XG4mIzQzOy8qIFN0YXR1cyBieXRlIGZvciBndWVzdCB0byByZXBvcnQgcHJvZ3Jlc3MsIGFuZCBzeW5jaHJvbml6ZSBmZWF0dXJlcyAqL1xuJiM0MzsvKiBXZSBoYXZlIHNlZW4gZGV2aWNlIGFuZCBwcm9jZXNzZWQgZ2VuZXJpYyBmaWVsZHMgKi9cbiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX0FDS05PV0xFREdFIDFcbiYjNDM7LyogV2UgaGF2ZSBmb3VuZCBhIGRyaXZlciBmb3IgdGhlIGRldmljZS4gKi9cbiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX0RSSVZFUiAgICAgIDJcbiYjNDM7LyogRHJpdmVyIGhhcyB1c2VkIGl0cyBwYXJ0cyBvZiB0aGUgY29uZmlnLCBhbmQgaXMgaGFwcHkgKi9cbiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX0RSSVZFUl9PSyAgIDRcbiYjNDM7LyogRHJpdmVyIGhhcyBmaW5pc2hlZCBjb25maWd1cmluZyBmZWF0dXJlcyAqL1xuJiM0MzsjZGVmaW5lIFpYREhfQ09ORklHX1NfRkVBVFVSRVNfT0sgOFxuJiM0MzsvKiBEZXZpY2UgZW50ZXJlZCBpbnZhbGlkIHN0YXRlLCBkcml2ZXIgbXVzdCByZXNldCBpdCAqL1xuJiM0MzsjZGVmaW5lIFpYREhfQ09ORklHX1NfTkVFRFNfUkVTRVQgMHg0MFxuJiM0MzsvKiBXZSYjMzk7dmUgZ2l2ZW4gdXAgb24gdGhpcyBkZXZpY2UgKi9cbiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX0ZBSUxFRCAgICAgIDB4ODBcbiYjNDM7XG4mIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi9cbiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCB7XG4mIzQzO1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuJiM0MztcdF9fdTggY2FwX25leHQ7XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi9cbiYjNDM7XHRfX3U4IGNhcF9sZW47XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBjYXBhYmlsaXR5IGxlbmd0aCAqL1xuJiM0MztcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbiYjNDM7XHRfX3U4IGJhcjtcdFx0LyogV2hlcmUgdG8gZmluZCBpdC4gKi9cbiYjNDM7XHRfX3U4IGlkO1x0XHQvKiBNdWx0aXBsZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZSAqL1xuJiM0MztcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4mIzQzO1x0X19sZTMyIG9mZnNldDtcdFx0LyogT2Zmc2V0IHdpdGhpbiBiYXIuICovXG4mIzQzO1x0X19sZTMyIGxlbmd0aDtcdFx0LyogTGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUsIGluIGJ5dGVzLiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogRmllbGRzIGluIFpYREhfUEZfUENJX0NBUF9DT01NT05fQ0ZHOiAqL1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4mIzQzO1x0LyogQWJvdXQgdGhlIHdob2xlIGRldmljZS4gKi9cbiYjNDM7XHRfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbnVtX3F1ZXVlcztcdFx0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X191OCBkZXZpY2Vfc3RhdHVzO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcbiYjNDM7XHQvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX3NpemU7XHRcdC8qIHJlYWQtd3JpdGUsIHBvd2VyIG9mIDIuICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX21zaXhfdmVjdG9yO1x0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfbm90aWZ5X29mZjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV9kZXNjX2xvO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfbG87XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV91c2VkX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCBjYXA7XG4mIzQzO1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTlmZDQ3MmE4NmZkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5AQCAtMCwwICYjNDM7MSw2NDIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9wZi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2RoX3F1ZXVlLmhcJiMzNDtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZGhfcGZfZGV2bGlua19vcHMgPSB7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkaF9wZl9wY2lfdGFibGVbXSA9IHtcbiYjNDM7XHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfUEZfREVWSUNFX0lEKSB9LFxuJiM0MztcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGhfcGZfcGNpX3RhYmxlKTtcbiYjNDM7XG4mIzQzO3ZvaWQgKmRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYpXG4mIzQzO1x0XHRkaF9kZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1x0cmV0dXJuIHByaXY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZShkaF9kZXYtXHUwMDNlcHJpdik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZGhfcGZfcGNpX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBjaV9zZXRfZHJ2ZGF0YShkZXYtXHUwMDNlcGRldiwgZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi1cdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSyg2NCkpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LVx1MDAzZWRldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7ZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIGVycl9wY2k7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKGRldi1cdTAwM2VwZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgcGNpX3NlbGVjdF9iYXJzKGRldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtkaC1wZlwmIzM0Oyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zIGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2k7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY2lfc2V0X21hc3RlcihkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0cmV0ID0gcGNpX3NhdmVfc3RhdGUoZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGNpX3NhdmVfc3RhdGUgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKGRldi1cdTAwM2VwZGV2LCAwKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdID1cbiYjNDM7XHRcdGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi1cdTAwM2VwZGV2LCAwKSxcbiYjNDM7XHRcdFx0cGNpX3Jlc291cmNlX2xlbihkZXYtXHUwMDNlcGRldiwgMCkpO1xuJiM0MztcdGlmICghcGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2RoIHBmIHBjaSBpb3JlbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3BjaV9zYXZlX3N0YXRlOlxuJiM0MztcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LVx1MDAzZXBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoZGV2LVx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XG4mIzQzO2Vycl9wY2k6XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKGRldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlvdW5tYXAocGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pO1xuJiM0MztcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LVx1MDAzZXBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoZGV2LVx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKGRldi1cdTAwM2VwZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXG4mIzQzO1x0XHRcdFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycylcbiYjNDM7e1xuJiM0MztcdGludCBwb3M7XG4mIzQzO1x0dTggdHlwZTtcbiYjNDM7XHR1OCBiYXI7XG4mIzQzO1xuJiM0MztcdGZvciAocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOyBwb3MgXHUwMDNlIDA7XG4mIzQzO1x0ICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLCBQQ0lfQ0FQX0lEX1ZORFIpKSB7XG4mIzQzO1x0XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgcG9zICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0Y2ZnX3R5cGUpLCBcdTAwMjZ0eXBlKTtcbiYjNDM7XHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXHUwMDI2YmFyKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBpZ25vcmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi9cbiYjNDM7XHRcdGlmIChiYXIgXHUwMDNlIFpYREhfUEZfTUFYX0JBUl9WQUwpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eXBlID09IGNmZ190eXBlKSB7XG4mIzQzO1x0XHRcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcdTAwMjYgaW9yZXNvdXJjZV90eXBlcykge1xuJiM0MztcdFx0XHRcdCpiYXJzIHw9ICgxIFx1MDAzY1x1MDAzYyBiYXIpO1xuJiM0MztcdFx0XHRcdHJldHVybiBwb3M7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIGludCBvZmYsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgc3RhcnQsIHUzMiBzaXplLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdHZvaWQgX19pb21lbSAqcDtcbiYjNDM7XHR1MzIgb2Zmc2V0O1xuJiM0MztcdHUzMiBsZW5ndGg7XG4mIzQzO1x0dTggYmFyO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuJiM0MztcdFx0XHQgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcdTAwMjZiYXIpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuJiM0MztcdFx0XHQgICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbiYjNDM7XHRcdFx0XHRcdFx0b2Zmc2V0KSwgXHUwMDI2b2Zmc2V0KTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4mIzQzO1x0XHRcdFx0XHRcdGxlbmd0aCksIFx1MDAyNmxlbmd0aCk7XG4mIzQzO1xuJiM0MztcdGlmIChiYXJfb2ZmKVxuJiM0MztcdFx0KmJhcl9vZmYgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChsZW5ndGggXHUwMDNjPSBzdGFydCkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFx1MDAzZSV1IGV4cGVjdGVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bGVuZ3RoLCBzdGFydCk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChsZW5ndGggLSBzdGFydCBcdTAwM2MgbWlubGVuKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlPSV6dSBleHBlY3RlZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGxlbmd0aCwgbWlubGVuKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVuZ3RoIC09IHN0YXJ0O1xuJiM0MztcdGlmIChzdGFydCAmIzQzOyBvZmZzZXQgXHUwMDNjIG9mZnNldCkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDttYXAgd3JhcC1hcm91bmQgJXUmIzQzOyV1XFxuXCYjMzQ7LCBzdGFydCwgb2Zmc2V0KTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBzdGFydDtcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAyNiAoYWxpZ24gLSAxKSkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtvZmZzZXQgJXUgbm90IGFsaWduZWQgdG8gJXVcXG5cJiMzNDssIG9mZnNldCwgYWxpZ24pO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGVuZ3RoIFx1MDAzZSBzaXplKVxuJiM0MztcdFx0bGVuZ3RoID0gc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxlbilcbiYjNDM7XHRcdCpsZW4gPSBsZW5ndGg7XG4mIzQzO1xuJiM0MztcdGlmIChtaW5sZW4gJiM0Mzsgb2Zmc2V0IFx1MDAzYyBtaW5sZW4gfHxcbiYjNDM7XHQgICAgbWlubGVuICYjNDM7IG9mZnNldCBcdTAwM2UgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFwmIzM0O21hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bWlubGVuLCBvZmZzZXQsIGJhcixcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cCA9IHBjaV9pb21hcF9yYW5nZShwZGV2LCBiYXIsIG9mZnNldCwgbGVuZ3RoKTtcbiYjNDM7XHRpZiAoIXApIHtcbiYjNDM7XHRcdGRldl9lcnIoZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7dW5hYmxlIHRvIG1hcCBjdXN0b20gcXVldWUgJXVAJXUgb24gYmFyICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRsZW5ndGgsIG9mZnNldCwgYmFyKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHBhKSB7XG4mIzQzO1x0XHQqcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSAmIzQzOyBvZmZzZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdGludCBjb21tb247XG4mIzQzO1xuJiM0MztcdC8qIGNoZWNrIGZvciBhIGNvbW1vbiBjb25maWc6IGlmIG5vdCwgdXNlIGxlZ2FjeSBtb2RlIChiYXIgMCkuICovXG4mIzQzO1x0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxuJiM0MztcdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXG4mIzQzO1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4mIzQzO1x0aWYgKCFjb21tb24pIHtcbiYjNDM7XHRcdGRldl9lcnIoZGhfZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0XCYjMzQ7bWlzc2luZyBjYXBhYmlsaXRpZXMsIGxlYXZpbmcgZm9yIGxlZ2FjeSBkcml2ZXJcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZl9kZXYtXHUwMDNlY29tbW9uID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eShkaF9kZXYsIGNvbW1vbixcbiYjNDM7XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbiYjNDM7XHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsXG4mIzQzO1x0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXG4mIzQzO1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICghcGZfZGV2LVx1MDAzZWNvbW1vbikge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwZl9kZXYtXHUwMDNlY29tbW9uIGlzIG51bGxcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdHUzMiBub3RpZnlfbGVuZ3RoO1xuJiM0MztcdHUzMiBub3RpZnlfb2Zmc2V0O1xuJiM0MztcdGludCBub3RpZnk7XG4mIzQzO1xuJiM0MztcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xuJiM0MztcdG5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcdGlmICghbm90aWZ5KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O21pc3Npbmcgbm90aWZ5IGNmZyBjYXBhYmlsaXR5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4mIzQzO1x0XHRcdCAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbiYjNDM7XHRcdFx0XHRub3RpZnlfb2ZmX211bHRpcGxpZXIpLFxuJiM0MztcdFx0XHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcik7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4mIzQzO1x0XHRcdCAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbiYjNDM7XHRcdFx0XHRjYXAubGVuZ3RoKSwgXHUwMDI2bm90aWZ5X2xlbmd0aCk7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4mIzQzO1x0XHRcdCAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbiYjNDM7XHRcdFx0XHRjYXAub2Zmc2V0KSwgXHUwMDI2bm90aWZ5X29mZnNldCk7XG4mIzQzO1xuJiM0MztcdC8qIFdlIGRvbiYjMzk7dCBrbm93IGhvdyBtYW55IFZRcyB3ZSYjMzk7bGwgbWFwLCBhaGVhZCBvZiB0aGUgdGltZS5cbiYjNDM7XHQgKiBJZiBub3RpZnkgbGVuZ3RoIGlzIHNtYWxsLCBtYXAgaXQgYWxsIG5vdy4gT3RoZXJ3aXNlLFxuJiM0MztcdCAqIG1hcCBlYWNoIFZRIGluZGl2aWR1YWxseSBsYXRlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobm90aWZ5X2xlbmd0aCAmIzQzOyAobm90aWZ5X29mZnNldCAlIFBBR0VfU0laRSkgXHUwMDNjPSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBub3RpZnksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBaWERIX1BGX01BUF9NSU5MRU4yLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBaWERIX1BGX0FMSUdOMiwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgbm90aWZ5X2xlbmd0aCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9sZW4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vub3RpZnlfcGEsIE5VTEwpO1xuJiM0MztcdFx0aWYgKCFwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UgaXMgbnVsbFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwZl9kZXYtXHUwMDNlbm90aWZ5X21hcF9jYXAgPSBub3RpZnk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdGludCBkZXZpY2U7XG4mIzQzO1xuJiM0MztcdC8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkgbWFuZGF0b3J5IGZvclxuJiM0MztcdCAqIGRldmljZXMgdGhhdCBoYXZlIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGRldmljZSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfREVWSUNFX0NGRyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcbiYjNDM7XHQvKiB3ZSBkb24mIzM5O3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLFxuJiM0MztcdCAqIGJ1dCBQQUdFX1NJWkUgaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgYWxsIGV4aXN0aW5nIGRldmljZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRldmljZSkge1xuJiM0MztcdFx0cGZfZGV2LVx1MDAzZWRldmljZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBkZXZpY2UsIDAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsIFBBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2VkZXZpY2VfbGVuLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZWRldl9jZmdfYmFyX29mZik7XG4mIzQzO1x0XHRpZiAoIXBmX2Rldi1cdTAwM2VkZXZpY2UpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwZl9kZXYtXHUwMDNlZGV2aWNlIGlzIG51bGxcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBmX2Rldi1cdTAwM2VkZXZpY2UpXG4mIzQzO1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuJiM0MztcdFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKTtcbiYjNDM7XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfbWFwX25vdGlmeTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2RldmljZV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfbWFwX2RldmljZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX21hcF9kZXZpY2U6XG4mIzQzO1x0aWYgKHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSlcbiYjNDM7XHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSk7XG4mIzQzO2Vycl9tYXBfbm90aWZ5OlxuJiM0MztcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vjb21tb24pO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3UxNiB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxuJiM0MztcdFx0XHRcdCB1MTYgcGh5X2luZGV4LCB1MTYgaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZXBhY2tlZF9zdGF0dXMpXG4mIzQzO1x0XHRpb3dyaXRlMTYocGh5X2luZGV4LCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZXF1ZXVlX3NlbGVjdCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0aW93cml0ZTE2KGluZGV4LCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZXF1ZXVlX3NlbGVjdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb3JlYWQxNihcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZXF1ZXVlX25vdGlmeV9vZmYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX3ZxX25vdGlmeShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldixcbiYjNDM7XHRcdFx0XHQgICAgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4LFxuJiM0MztcdFx0XHRcdCAgICAgcmVzb3VyY2Vfc2l6ZV90ICpwYSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0dTE2IG9mZjtcbiYjNDM7XG4mIzQzO1x0b2ZmID0genhkaF9wZl9nZXRfcXVldWVfbm90aWZ5X29mZihkaF9kZXYsIHBoeV9pbmRleCwgaW5kZXgpO1xuJiM0MztcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKSB7XG4mIzQzO1x0XHQvKiBvZmZzZXQgc2hvdWxkIG5vdCB3cmFwICovXG4mIzQzO1x0XHRpZiAoKHU2NClvZmYgKlxuJiM0MztcdFx0XHRwZl9kZXYtXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyICYjNDM7IDIgXHUwMDNlIHBmX2Rldi1cdTAwM2Vub3RpZnlfbGVuKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZGhfZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0XHRcJiMzNDtiYWQgbm90aWZpY2F0aW9uIG9mZnNldCAldSAoeCAldSkgZm9yIHF1ZXVlICV1IFx1MDAzZSAlenVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0b2ZmLCBwZl9kZXYtXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyLCBwaHlfaW5kZXgsXG4mIzQzO1x0XHRcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9sZW4pO1xuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocGEpXG4mIzQzO1x0XHRcdCpwYSA9IHBmX2Rldi1cdTAwM2Vub3RpZnlfcGEgJiM0Mzsgb2ZmICogcGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlICYjNDM7IG9mZiAqIHBmX2Rldi1cdTAwM2Vub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldHVybiB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KGRoX2RldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9tYXBfY2FwLCAyLCAyLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgb2ZmICogcGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIDIsIE5VTEwsIHBhLCBOVUxMKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl91bm1hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHZvaWQgX19pb21lbSAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuJiM0MztcdFx0cGNpX2lvdW5tYXAoZGhfZGV2LVx1MDAzZXBkZXYsIHByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHp4ZGhfcGZfc2V0X3N0YXR1cyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoc3RhdHVzLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9zdGF0dXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1OCB6eGRoX3BmX2dldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9yZWFkOChcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9zdGF0dXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1OCB6eGRoX3BmX2dldF9jZmdfZ2VuKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1OCBjb25maWdfZ2VuZXJhdGlvbjtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnX2dlbmVyYXRpb24gPSBpb3JlYWQ4KFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlY29uZmlnX2dlbmVyYXRpb24pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY29uZmlnX2dlbmVyYXRpb247XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl9nZXRfdmZfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjLCBpbnQgdmZfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHUzMiBERVZfTUFDX0w7XG4mIzQzO1x0dTE2IERFVl9NQUNfSDtcbiYjNDM7XG4mIzQzO1x0ZXRoX3plcm9fYWRkcihtYWMpO1xuJiM0MztcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZXBmX3NyaW92X2NhcF9iYXNlKSB7XG4mIzQzO1x0XHRERVZfTUFDX0wgPSBpb3JlYWQzMihwZl9kZXYtXHUwMDNlcGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MztcbiYjNDM7XHRcdFx0XHQgICAgIChwZl9kZXYtXHUwMDNlc3Jpb3ZfYmFyX3NpemUpICogdmZfaWQgJiM0MztcbiYjNDM7XHRcdFx0XHQgICAgIHBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpO1xuJiM0MztcdFx0bWFjWzBdID0gREVWX01BQ19MIFx1MDAyNiAweGZmO1xuJiM0MztcdFx0bWFjWzFdID0gKERFVl9NQUNfTCBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0XHRtYWNbMl0gPSAoREVWX01BQ19MIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0XHRtYWNbM10gPSAoREVWX01BQ19MIFx1MDAzZVx1MDAzZSAyNCkgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0XHRERVZfTUFDX0ggPSBpb3JlYWQxNihwZl9kZXYtXHUwMDNlcGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MztcbiYjNDM7XHRcdFx0XHQgICAgICAocGZfZGV2LVx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICYjNDM7XG4mIzQzO1x0XHRcdFx0ICAgICAgcGZfZGV2LVx1MDAzZWRldl9jZmdfYmFyX29mZiAmIzQzO1xuJiM0MztcdFx0XHRcdCAgICAgIFpYREhfREVWX01BQ19ISUdIX09GRlNFVCk7XG4mIzQzO1x0XHRtYWNbNF0gPSBERVZfTUFDX0ggXHUwMDI2IDB4ZmY7XG4mIzQzO1x0XHRtYWNbNV0gPSAoREVWX01BQ19IIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl9zZXRfdmZfbWFjX3JlZyhzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldixcbiYjNDM7XHRcdFx0ICAgIHU4ICptYWMsIGludCB2Zl9pZClcbiYjNDM7e1xuJiM0MztcdHUzMiBERVZfTUFDX0w7XG4mIzQzO1x0dTE2IERFVl9NQUNfSDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBmX2Rldi1cdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSkge1xuJiM0MztcdFx0REVWX01BQ19MID0gbWFjWzBdIHwgKG1hY1sxXSBcdTAwM2NcdTAwM2MgOCkgfFxuJiM0MztcdFx0XHRcdFx0KG1hY1syXSBcdTAwM2NcdTAwM2MgMTYpIHwgKG1hY1szXSBcdTAwM2NcdTAwM2MgMjQpO1xuJiM0MztcdFx0REVWX01BQ19IID0gbWFjWzRdIHwgKG1hY1s1XSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0XHRpb3dyaXRlMzIoREVWX01BQ19MLCAocGZfZGV2LVx1MDAzZXBmX3NyaW92X2NhcF9iYXNlICYjNDM7XG4mIzQzO1x0XHRcdCAgKHBmX2Rldi1cdTAwM2Vzcmlvdl9iYXJfc2l6ZSkgKiB2Zl9pZCAmIzQzO1xuJiM0MztcdFx0XHQgIHBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpKTtcbiYjNDM7XHRcdGlvd3JpdGUxNihERVZfTUFDX0gsIChwZl9kZXYtXHUwMDNlcGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MztcbiYjNDM7XHRcdFx0ICAocGZfZGV2LVx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICYjNDM7XG4mIzQzO1x0XHRcdCAgcGZfZGV2LVx1MDAzZWRldl9jZmdfYmFyX29mZiAmIzQzO1xuJiM0MztcdFx0XHQgIFpYREhfREVWX01BQ19ISUdIX09GRlNFVCkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX3BmX3NldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdHp4ZGhfcGZfc2V0X3ZmX21hY19yZWcocGZfZGV2LCBtYWMsIHZmX2lkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX3NldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHUzMiBERVZfTUFDX0w7XG4mIzQzO1x0dTE2IERFVl9NQUNfSDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRERVZfTUFDX0wgPSBtYWNbMF0gfCAobWFjWzFdIFx1MDAzY1x1MDAzYyA4KSB8IChtYWNbMl0gXHUwMDNjXHUwMDNjIDE2KSB8IChtYWNbM10gXHUwMDNjXHUwMDNjIDI0KTtcbiYjNDM7XHRERVZfTUFDX0ggPSBtYWNbNF0gfCAobWFjWzVdIFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7XHRpb3dyaXRlMzIoREVWX01BQ19MLCBwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpb3dyaXRlMTYoREVWX01BQ19ILCBwZl9kZXYtXHUwMDNlZGV2aWNlICYjNDM7IFpYREhfREVWX01BQ19ISUdIX09GRlNFVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9nZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1MzIgREVWX01BQ19MO1xuJiM0MztcdHUxNiBERVZfTUFDX0g7XG4mIzQzO1xuJiM0MztcdGlmICghcGZfZGV2LVx1MDAzZWRldmljZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0REVWX01BQ19MID0gaW9yZWFkMzIocGZfZGV2LVx1MDAzZWRldmljZSk7XG4mIzQzO1x0bWFjWzBdID0gREVWX01BQ19MIFx1MDAyNiAweGZmO1xuJiM0MztcdG1hY1sxXSA9IChERVZfTUFDX0wgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmO1xuJiM0MztcdG1hY1syXSA9IChERVZfTUFDX0wgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZjtcbiYjNDM7XHRtYWNbM10gPSAoREVWX01BQ19MIFx1MDAzZVx1MDAzZSAyNCkgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0REVWX01BQ19IID0gaW9yZWFkMTYocGZfZGV2LVx1MDAzZWRldmljZSAmIzQzOyBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVQpO1xuJiM0MztcdG1hY1s0XSA9IERFVl9NQUNfSCBcdTAwMjYgMHhmZjtcbiYjNDM7XHRtYWNbNV0gPSAoREVWX01BQ19IIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dTY0IHp4ZGhfcGZfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1NjQgZGV2aWNlX2ZlYXR1cmU7XG4mIzQzO1xuJiM0MztcdGlvd3JpdGUzMigwLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9mZWF0dXJlX3NlbGVjdCk7XG4mIzQzO1x0ZGV2aWNlX2ZlYXR1cmUgPSBpb3JlYWQzMihcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9mZWF0dXJlKTtcbiYjNDM7XHRpb3dyaXRlMzIoMSwgXHUwMDI2cGZfZGV2LVx1MDAzZWNvbW1vbi1cdTAwM2VkZXZpY2VfZmVhdHVyZV9zZWxlY3QpO1xuJiM0MztcdGRldmljZV9mZWF0dXJlIHw9ICgodTY0KWlvcmVhZDMyKFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlZGV2aWNlX2ZlYXR1cmUpXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAzY1x1MDAzYyAzMik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZpY2VfZmVhdHVyZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTY0IGZlYXR1cmVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKDAsIFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlZ3Vlc3RfZmVhdHVyZV9zZWxlY3QpO1xuJiM0MztcdGlvd3JpdGUzMigodTMyKWZlYXR1cmVzLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWd1ZXN0X2ZlYXR1cmUpO1xuJiM0MztcdGlvd3JpdGUzMigxLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWd1ZXN0X2ZlYXR1cmVfc2VsZWN0KTtcbiYjNDM7XHRpb3dyaXRlMzIoZmVhdHVyZXMgXHUwMDNlXHUwMDNlIDMyLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWd1ZXN0X2ZlYXR1cmUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldjtcbiYjNDM7XHRzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rID0gZGV2bGlua19hbGxvYyhcdTAwMjZkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCBkaF9jb3JlX2RldiksXG4mIzQzO1x0XHRcdFx0XHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICghZGV2bGluaykge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkaF9kZXYgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XG4mIzQzO1x0ZGhfZGV2LVx1MDAzZWRldmljZSA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdGRoX2Rldi1cdTAwM2VwZGV2ID0gcGRldjtcbiYjNDM7XHRkaF9kZXYtXHUwMDNlZGV2bGluayA9IGRldmxpbms7XG4mIzQzO1xuJiM0MztcdHBmX2RldiA9IGRoX2NvcmVfYWxsb2NfcHJpdihkaF9kZXYsIHNpemVvZigqcGZfZGV2KSk7XG4mIzQzO1x0aWYgKCFwZl9kZXYpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2RoX3BmX2RldiBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyX3BmX2RldjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmX2Rldi1cdTAwM2ViYXJfY2hhbl92YWxpZCA9IGZhbHNlO1xuJiM0MztcdHBmX2Rldi1cdTAwM2V2ZXBhID0gZmFsc2U7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZkaF9kZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuJiM0MztcbiYjNDM7XHRkaF9kZXYtXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGhfcGZfcGNpX2luaXQoZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtkaF9wZl9wY2lfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9jZmdfaW5pdDpcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnBmX2Rldi1cdTAwM2VpcnFfbG9jayk7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkaF9kZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0ZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTtcbiYjNDM7ZXJyX3BmX2RldjpcbiYjNDM7XHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoZGhfZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4mIzQzO1x0ZGhfcGZfcGNpX2Nsb3NlKGRoX2Rldik7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGhfZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdGRoX2NvcmVfZnJlZV9wcml2KGRoX2Rldik7XG4mIzQzO1x0ZGV2bGlua19mcmVlKGRldmxpbmspO1xuJiM0MztcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXG4mIzQzO1x0XHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZGhfcGZfZHJpdmVyID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7ZGluZ2hhaTEwZVwmIzM0OyxcbiYjNDM7XHQuaWRfdGFibGUgPSBkaF9wZl9wY2lfdGFibGUsXG4mIzQzO1x0LnByb2JlID0gZGhfcGZfcHJvYmUsXG4mIzQzO1x0LnJlbW92ZSA9IGRoX3BmX3JlbW92ZSxcbiYjNDM7XHQuc2h1dGRvd24gPSBkaF9wZl9zaHV0ZG93bixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO21vZHVsZV9wY2lfZHJpdmVyKGRoX3BmX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWRhYTc5YTZkNmYyYWJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbkBAIC0wLDAgJiM0MzsxLDExOCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBGIGhlYWRlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19aWERIX0VOX1BGX0hfX1xuJiM0MzsjZGVmaW5lIF9fWlhESF9FTl9QRl9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcdDB4MWNmMlxuJiM0MzsjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXHQweDgwNDBcbiYjNDM7I2RlZmluZSBaWERIX1ZGX0RFVklDRV9JRFx0MHg4MDQxXG4mIzQzO1xuJiM0MzsvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHXHQxXG4mIzQzOy8qIE5vdGlmaWNhdGlvbnMgKi9cbiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1x0MlxuJiM0MzsvKiBJU1IgYWNjZXNzICovXG4mIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0lTUl9DRkdcdFx0M1xuJiM0MzsvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHXHQ0XG4mIzQzOy8qIFBDSSBjb25maWd1cmF0aW9uIGFjY2VzcyAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHXHRcdDVcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFx0XHQweDVcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdONFx0XHRcdDRcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdOMlx0XHRcdDJcbiYjNDM7I2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUXHQ0XG4mIzQzO1xuJiM0MztlbnVtIGRoX2NvcmVkZXZfdHlwZSB7XG4mIzQzO1x0REhfQ09SRURFVl9QRixcbiYjNDM7XHRESF9DT1JFREVWX1ZGLFxuJiM0MztcdERIX0NPUkVERVZfU0YsXG4mIzQzO1x0REhfQ09SRURFVl9NUEZcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBkZXZsaW5rO1xuJiM0MztcbiYjNDM7c3RydWN0IGRoX2NvcmVfZGV2IHtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4mIzQzO1x0ZW51bSBkaF9jb3JlZGV2X3R5cGUgY29yZWRldl90eXBlO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuJiM0MztcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBQcm90ZWN0cyBkZXZpY2UgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdHZvaWQgKnByaXY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9kZXZpY2Uge1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNvbW1vbjtcbiYjNDM7XHQvKiBEZXZpY2Utc3BlY2lmaWMgZGF0YSAobm9uLWxlZ2FjeSBtb2RlKSAgKi9cbiYjNDM7XHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXG4mIzQzO1x0dm9pZCBfX2lvbWVtICpkZXZpY2U7XG4mIzQzO1x0dm9pZCBfX2lvbWVtICpub3RpZnlfYmFzZTtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xuJiM0MztcdC8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqL1xuJiM0MztcdHJlc291cmNlX3NpemVfdCBub3RpZnlfcGE7XG4mIzQzO1x0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cbiYjNDM7XHRzaXplX3Qgbm90aWZ5X2xlbjtcbiYjNDM7XHRzaXplX3QgZGV2aWNlX2xlbjtcbiYjNDM7XHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xuJiM0MztcdHMzMiBub3RpZnlfbWFwX2NhcDtcbiYjNDM7XHR1MzIgbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyO1xuJiM0MztcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXG4mIzQzO1x0czMyIG1vZGVybl9iYXJzO1xuJiM0MztcdHZvaWQgX19pb21lbSAqcGNpX2lvcmVtYXBfYWRkcls2XTtcbiYjNDM7XHR1NjQgc3Jpb3ZfYmFyX3NpemU7XG4mIzQzO1x0dTMyIGRldl9jZmdfYmFyX29mZjtcbiYjNDM7XHRib29sIHBhY2tlZF9zdGF0dXM7XG4mIzQzO1x0Ym9vbCBiYXJfY2hhbl92YWxpZDtcbiYjNDM7XHRib29sIHZlcGE7XG4mIzQzO1x0c3RydWN0IG11dGV4IGlycV9sb2NrOyAvKiBQcm90ZWN0cyBJUlEgb3BlcmF0aW9ucyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBHRVRfQ09SRURFVl9UWVBFKHBkZXYpIFxcXG4mIzQzO1x0KChwZGV2KS1cdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcbiYjNDM7XG4mIzQzO3ZvaWQgKmRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgc2l6ZV90IHNpemUpO1xuJiM0Mzt2b2lkIGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7dm9pZCBkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IGRoX2NvcmVfZGV2ICpkZXYpO1xuJiM0MztpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbiYjNDM7XHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTtcbiYjNDM7dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCBpbnQgb2ZmLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyICpiYXJfb2ZmKTtcbiYjNDM7aW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7dTE2IHp4ZGhfcGZfZ2V0X3F1ZXVlX25vdGlmeV9vZmYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXG4mIzQzO1x0XHRcdFx0IHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCk7XG4mIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfdnFfbm90aWZ5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4LFxuJiM0MztcdFx0XHRcdCAgICAgcmVzb3VyY2Vfc2l6ZV90ICpwYSk7XG4mIzQzO3ZvaWQgenhkaF9wZl91bm1hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHZvaWQgX19pb21lbSAqcHJpdik7XG4mIzQzO3ZvaWQgenhkaF9wZl9zZXRfc3RhdHVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCBzdGF0dXMpO1xuJiM0Mzt1OCB6eGRoX3BmX2dldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuJiM0Mzt1OCB6eGRoX3BmX2dldF9jZmdfZ2VuKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX2dldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZCk7XG4mIzQzO3ZvaWQgenhkaF9wZl9zZXRfdmZfbWFjX3JlZyhzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldixcbiYjNDM7XHRcdFx0ICAgIHU4ICptYWMsIGludCB2Zl9pZCk7XG4mIzQzO3ZvaWQgenhkaF9wZl9zZXRfdmZfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjLCBpbnQgdmZfaWQpO1xuJiM0Mzt2b2lkIHp4ZGhfc2V0X21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYyk7XG4mIzQzO3ZvaWQgenhkaF9nZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKTtcbiYjNDM7dTY0IHp4ZGhfcGZfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTY0IGZlYXR1cmVzKTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9aVEUmIzM0OywKICAgICYjMzQ7RElOR0hBSSYjMzQ7LAogICAgJiMzNDtESU5HSEFJX1BGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGhfcGZfcHJvYmUmIzM0OywKICAgICYjMzQ7ZGhfcGZfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2RoX3BmX3BjaV9pbml0JiMzNDssCiAgICAmIzM0O2RoX3BmX3BjaV9jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGEgUENJIHByb2JlIGZ1bmN0aW9uIHdoaWNoIGluaXRpYWxpemVzIHRoZSBkZXZpY2UsIG1hcHMgUENJIG1lbW9yeSwgYW5kIHJlZ2lzdGVycyBhIGRldmxpbmsgaW5zdGFuY2UuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI5ZGJhNzFhM2FhZTM1M2M1NDY0NGIwZmY0ZTRlODJjZWVkNTZmZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAxOTozMDozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMmZiMWM3NWFmZDE2MzguLjczNjkyYjA5YmY3YmFiIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMjk0NDAsNiAmIzQzOzI5NDQwLDEyIEBAIFM6CU1haW50YWluZWQKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGl3YWkvc291bmQuZ2l0CiBGOglzb3VuZC9oZGEvY29kZWNzL3NlbmFyeXRlY2guYwogCiYjNDM7WlRFIERJTkdIQUkgRVRIRVJORVQgRFJJVkVSCiYjNDM7TToJSnVueWFuZyBIYW4gJmx0O2hhbi5qdW55YW5nQHp0ZS5jb20uY24mZ3Q7CiYjNDM7TDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwomIzQzO1M6CU1haW50YWluZWQKJiM0MztGOglkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvCiYjNDM7CiBUSEUgUkVTVAogTToJTGludXMgVG9ydmFsZHMgJmx0O3RvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnJmd0OwogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKaW5kZXggYjhmNzBlMmExNzYzYWQuLmMyYjY5OTZiMGNmZTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKQEAgLTE4OCw1ICYjNDM7MTg4LDYgQEAgc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS9LY29uZmlnJiMzNDsKJiM0Mztzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyYjMzQ7CiAKIGVuZGlmICMgRVRIRVJORVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKaW5kZXggNTczNDRmZWM2Y2UwNDcuLmEzNGJjYmQ0ZGY0ZTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQpAQCAtMTA0LDMgJiM0MzsxMDQsNCBAQCBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT00pICYjNDM7PSB4aXJjb20vCiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgJiM0Mzs9IHN5bm9wc3lzLwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICYjNDM7PSBwZW5zYW5kby8KIG9iai0kKENPTkZJR19PQV9UQzYpICYjNDM7PSBvYV90YzYubwomIzQzO29iai0kKENPTkZJR19ORVRfVkVORE9SX1pURSkgJiM0Mzs9IHp0ZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2EyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMjAgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBaVEUgZHJpdmVyIGNvbmZpZ3VyYXRpb24KJiM0MzsjCiYjNDM7CiYjNDM7Y29uZmlnIE5FVF9WRU5ET1JfWlRFCiYjNDM7ICAgIGJvb2wgJiMzNDtaVEUgZGV2aWNlcyYjMzQ7CiYjNDM7ICAgIGRlZmF1bHQgeQomIzQzOyAgICBoZWxwCiYjNDM7ICAgICAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuCiYjNDM7ICAgICAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlCiYjNDM7ICAgICAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbAomIzQzOyAgICAgIHRoZSBxdWVzdGlvbnMgYWJvdXQgWnRlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkCiYjNDM7ICAgICAgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy4KJiM0MzsKJiM0MztpZiBORVRfVkVORE9SX1pURQomIzQzOwomIzQzO3NvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcmIzM0OwomIzQzOwomIzQzO2VuZGlmICMgTkVUX1ZFTkRPUl9aVEUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uY2Q5OTI5YjYxNTU5YzYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNiBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIE1ha2VmaWxlIGZvciB0aGUgWlRFIGRldmljZSBkcml2ZXJzCiYjNDM7IwomIzQzOwomIzQzO29iai0kKENPTkZJR19ESU5HSEFJKSAmIzQzOz0gZGluZ2hhaS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xMjFiZTNiZjc3MDdmZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMzQgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvbgomIzQzOyMKJiM0MzsKJiM0Mztjb25maWcgRElOR0hBSQomIzQzOyAgICBib29sICYjMzQ7WlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyJiMzNDsKJiM0MzsgICAgZGVwZW5kcyBvbiBQQ0kKJiM0MzsgICAgc2VsZWN0IE5FVF9ERVZMSU5LCiYjNDM7ICAgIGhlbHAKJiM0MzsgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLgomIzQzOwomIzQzOyAgICAgIERpbmdIYWkgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIEV0aGVybmV0IGNvbnRyb2xsZXIgdGhhdCBzdXBwb3J0cwomIzQzOyAgICAgIG11bHRpcGxlIGZlYXR1cmVzIGluY2x1ZGluZyBoYXJkd2FyZSBvZmZsb2FkaW5nLCBTUi1JT1YsIGFuZAomIzQzOyAgICAgIGFkdmFuY2VkIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcy4KJiM0MzsKJiM0MzsgICAgICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgZHJpdmVyIHZhcmlhbnRzIGJlbG93LgomIzQzOwomIzQzOyAgICAgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiYjNDM7aWYgRElOR0hBSQomIzQzOwomIzQzO2NvbmZpZyBESU5HSEFJX1BGCiYjNDM7ICAgIHRyaXN0YXRlICYjMzQ7WlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXImIzM0OwomIzQzOyAgICBoZWxwCiYjNDM7ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgUENJIEV4cHJlc3MgRXRoZXJuZXQKJiM0MzsgICAgICBhZGFwdGVycyAoUEYpLgomIzQzOwomIzQzOyAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKJiM0MzsgICAgICB3aWxsIGJlIG5hbWVkIGRpbmdoYWkxMGUuCiYjNDM7CiYjNDM7ICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KJiM0MzsKJiM0MztlbmRpZiAjIERJTkdIQUkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY1NWE4ZGU1MThiZWIzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsMTAgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBNYWtlZmlsZSBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyCiYjNDM7IwomIzQzOwomIzQzO2NjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYykKJiM0MzsKJiM0MztvYmotJChDT05GSUdfRElOR0hBSV9QRikgJiM0Mzs9IGRpbmdoYWkxMGUubwomIzQzO2RpbmdoYWkxMGUteSA6PSBlbl9wZi5vCiYjNDM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNTA2N2M3M2ZlZDMzY2MKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oCkBAIC0wLDAgJiM0MzsxLDcxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnMKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19ESF9RVUVVRV9IX18KJiM0MzsjZGVmaW5lIF9fREhfUVVFVUVfSF9fCiYjNDM7CiYjNDM7LyogVmVjdG9yIHZhbHVlIHVzZWQgdG8gZGlzYWJsZSBNU0kgZm9yIHF1ZXVlICovCiYjNDM7I2RlZmluZSBaWERIX01TSV9OT19WRUNUT1IgICAgICAweGZmCiYjNDM7CiYjNDM7LyogU3RhdHVzIGJ5dGUgZm9yIGd1ZXN0IHRvIHJlcG9ydCBwcm9ncmVzcywgYW5kIHN5bmNocm9uaXplIGZlYXR1cmVzICovCiYjNDM7LyogV2UgaGF2ZSBzZWVuIGRldmljZSBhbmQgcHJvY2Vzc2VkIGdlbmVyaWMgZmllbGRzICovCiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX0FDS05PV0xFREdFIDEKJiM0MzsvKiBXZSBoYXZlIGZvdW5kIGEgZHJpdmVyIGZvciB0aGUgZGV2aWNlLiAqLwomIzQzOyNkZWZpbmUgWlhESF9DT05GSUdfU19EUklWRVIgICAgICAyCiYjNDM7LyogRHJpdmVyIGhhcyB1c2VkIGl0cyBwYXJ0cyBvZiB0aGUgY29uZmlnLCBhbmQgaXMgaGFwcHkgKi8KJiM0MzsjZGVmaW5lIFpYREhfQ09ORklHX1NfRFJJVkVSX09LICAgNAomIzQzOy8qIERyaXZlciBoYXMgZmluaXNoZWQgY29uZmlndXJpbmcgZmVhdHVyZXMgKi8KJiM0MzsjZGVmaW5lIFpYREhfQ09ORklHX1NfRkVBVFVSRVNfT0sgOAomIzQzOy8qIERldmljZSBlbnRlcmVkIGludmFsaWQgc3RhdGUsIGRyaXZlciBtdXN0IHJlc2V0IGl0ICovCiYjNDM7I2RlZmluZSBaWERIX0NPTkZJR19TX05FRURTX1JFU0VUIDB4NDAKJiM0MzsvKiBXZSYjMzk7dmUgZ2l2ZW4gdXAgb24gdGhpcyBkZXZpY2UgKi8KJiM0MzsjZGVmaW5lIFpYREhfQ09ORklHX1NfRkFJTEVEICAgICAgMHg4MAomIzQzOwomIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi8KJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwIHsKJiM0MzsJX191OCBjYXBfdm5kcjsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi8KJiM0MzsJX191OCBjYXBfbmV4dDsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi8KJiM0MzsJX191OCBjYXBfbGVuOwkJLyogR2VuZXJpYyBQQ0kgZmllbGQ6IGNhcGFiaWxpdHkgbGVuZ3RoICovCiYjNDM7CV9fdTggY2ZnX3R5cGU7CQkvKiBJZGVudGlmaWVzIHRoZSBzdHJ1Y3R1cmUuICovCiYjNDM7CV9fdTggYmFyOwkJLyogV2hlcmUgdG8gZmluZCBpdC4gKi8KJiM0MzsJX191OCBpZDsJCS8qIE11bHRpcGxlIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlICovCiYjNDM7CV9fdTggcGFkZGluZ1syXTsJCS8qIFBhZCB0byBmdWxsIGR3b3JkLiAqLwomIzQzOwlfX2xlMzIgb2Zmc2V0OwkJLyogT2Zmc2V0IHdpdGhpbiBiYXIuICovCiYjNDM7CV9fbGUzMiBsZW5ndGg7CQkvKiBMZW5ndGggb2YgdGhlIHN0cnVjdHVyZSwgaW4gYnl0ZXMuICovCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBGaWVsZHMgaW4gWlhESF9QRl9QQ0lfQ0FQX0NPTU1PTl9DRkc6ICovCiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgewomIzQzOwkvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqLwomIzQzOwlfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBkZXZpY2VfZmVhdHVyZTsJLyogcmVhZC1vbmx5ICovCiYjNDM7CV9fbGUzMiBndWVzdF9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgZ3Vlc3RfZmVhdHVyZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IG1zaXhfY29uZmlnOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMTYgbnVtX3F1ZXVlczsJCS8qIHJlYWQtb25seSAqLwomIzQzOwlfX3U4IGRldmljZV9zdGF0dXM7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fdTggY29uZmlnX2dlbmVyYXRpb247CS8qIHJlYWQtb25seSAqLwomIzQzOwomIzQzOwkvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NlbGVjdDsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NpemU7CQkvKiByZWFkLXdyaXRlLCBwb3dlciBvZiAyLiAqLwomIzQzOwlfX2xlMTYgcXVldWVfbXNpeF92ZWN0b3I7CS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX2VuYWJsZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX25vdGlmeV9vZmY7CS8qIHJlYWQtb25seSAqLwomIzQzOwlfX2xlMzIgcXVldWVfZGVzY19sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2Rlc2NfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBxdWV1ZV9hdmFpbF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2F2YWlsX2hpOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgcXVldWVfdXNlZF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX3VzZWRfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwOwomIzQzOwlfX2xlMzIgbm90aWZ5X29mZl9tdWx0aXBsaWVyOyAvKiBNdWx0aXBsaWVyIGZvciBxdWV1ZV9ub3RpZnlfb2ZmLiAqLwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fREhfUVVFVUVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZjg1OWZkNDcyYTg2ZmQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jCkBAIC0wLDAgJiM0MzsxLDY0MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlcgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2RldmxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcHBpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VuX3BmLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZGhfcXVldWUuaCYjMzQ7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0p1bnlhbmcgSGFuICZsdDtoYW4uanVueWFuZ0B6dGUuY29tLmNuJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZGhfcGZfZGV2bGlua19vcHMgPSB7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGhfcGZfcGNpX3RhYmxlW10gPSB7CiYjNDM7CXsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9QRl9ERVZJQ0VfSUQpIH0sCiYjNDM7CXsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRoX3BmX3BjaV90YWJsZSk7CiYjNDM7CiYjNDM7dm9pZCAqZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwomIzQzOwomIzQzOwlpZiAocHJpdikKJiM0MzsJCWRoX2Rldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CXJldHVybiBwcml2OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KQomIzQzO3sKJiM0MzsJa2ZyZWUoZGhfZGV2LSZndDtwcml2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkaF9wZl9wY2lfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwY2lfc2V0X2RydmRhdGEoZGV2LSZndDtwZGV2LCBkZXYpOwomIzQzOwomIzQzOwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYtJmd0O3BkZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi0mZ3Q7ZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYtJmd0O2RldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldmljZSwgJiMzNDtkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50IGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJCWdvdG8gZXJyX3BjaTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKGRldi0mZ3Q7cGRldiwKJiM0MzsJCQkJCSAgIHBjaV9zZWxlY3RfYmFycyhkZXYtJmd0O3BkZXYsIElPUkVTT1VSQ0VfTUVNKSwKJiM0MzsJCQkJCSAgICYjMzQ7ZGgtcGYmIzM0Oyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LSZndDtkZXZpY2UsICYjMzQ7cGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX3BjaTsKJiM0MzsJfQomIzQzOwomIzQzOwlwY2lfc2V0X21hc3RlcihkZXYtJmd0O3BkZXYpOwomIzQzOwlyZXQgPSBwY2lfc2F2ZV9zdGF0ZShkZXYtJmd0O3BkZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BjaV9zYXZlX3N0YXRlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKGRldi0mZ3Q7cGRldiwgMCkgJmFtcDsgSU9SRVNPVVJDRV9NRU0pKSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldmljZSwgJiMzNDtCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdID0KJiM0MzsJCWlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0mZ3Q7cGRldiwgMCksCiYjNDM7CQkJcGNpX3Jlc291cmNlX2xlbihkZXYtJmd0O3BkZXYsIDApKTsKJiM0MzsJaWYgKCFwZl9kZXYtJmd0O3BjaV9pb3JlbWFwX2FkZHJbMF0pIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2aWNlLCAmIzM0O2RoIHBmIHBjaSBpb3JlbWFwIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3BjaV9zYXZlX3N0YXRlOgomIzQzOwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKGRldi0mZ3Q7cGRldiwKJiM0MzsJCQkJICAgICBwY2lfc2VsZWN0X2JhcnMoZGV2LSZndDtwZGV2LCBJT1JFU09VUkNFX01FTSkpOwomIzQzO2Vycl9wY2k6CiYjNDM7CXBjaV9kaXNhYmxlX2RldmljZShkZXYtJmd0O3BkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlpb3VubWFwKHBmX2Rldi0mZ3Q7cGNpX2lvcmVtYXBfYWRkclswXSk7CiYjNDM7CXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LSZndDtwZGV2LAomIzQzOwkJCQkgICAgIHBjaV9zZWxlY3RfYmFycyhkZXYtJmd0O3BkZXYsIElPUkVTT1VSQ0VfTUVNKSk7CiYjNDM7CXBjaV9kaXNhYmxlX2RldmljZShkZXYtJmd0O3BkZXYpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSwKJiM0MzsJCQkJdTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycykKJiM0Mzt7CiYjNDM7CWludCBwb3M7CiYjNDM7CXU4IHR5cGU7CiYjNDM7CXU4IGJhcjsKJiM0MzsKJiM0MzsJZm9yIChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7IHBvcyAmZ3Q7IDA7CiYjNDM7CSAgICAgcG9zID0gcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHBkZXYsIHBvcywgUENJX0NBUF9JRF9WTkRSKSkgewomIzQzOwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwKJiM0MzsJCQkJICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwKJiM0MzsJCQkJCQkJY2ZnX3R5cGUpLCAmYW1wO3R5cGUpOwomIzQzOwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwKJiM0MzsJCQkJICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgJmFtcDtiYXIpOwomIzQzOwomIzQzOwkJLyogaWdub3JlIHN0cnVjdHVyZXMgd2l0aCByZXNlcnZlZCBCQVIgdmFsdWVzICovCiYjNDM7CQlpZiAoYmFyICZndDsgWlhESF9QRl9NQVhfQkFSX1ZBTCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmICh0eXBlID09IGNmZ190eXBlKSB7CiYjNDM7CQkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpICZhbXA7IGlvcmVzb3VyY2VfdHlwZXMpIHsKJiM0MzsJCQkJKmJhcnMgfD0gKDEgJmx0OyZsdDsgYmFyKTsKJiM0MzsJCQkJcmV0dXJuIHBvczsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgaW50IG9mZiwKJiM0MzsJCQkJICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sCiYjNDM7CQkJCSAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSwKJiM0MzsJCQkJICAgICB1MzIgKmJhcl9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi0mZ3Q7cGRldjsKJiM0MzsJdm9pZCBfX2lvbWVtICpwOwomIzQzOwl1MzIgb2Zmc2V0OwomIzQzOwl1MzIgbGVuZ3RoOwomIzQzOwl1OCBiYXI7CiYjNDM7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsCiYjNDM7CQkJICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgJmFtcDtiYXIpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKJiM0MzsJCQkgICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwKJiM0MzsJCQkJCQlvZmZzZXQpLCAmYW1wO29mZnNldCk7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLAomIzQzOwkJCQkJCWxlbmd0aCksICZhbXA7bGVuZ3RoKTsKJiM0MzsKJiM0MzsJaWYgKGJhcl9vZmYpCiYjNDM7CQkqYmFyX29mZiA9IG9mZnNldDsKJiM0MzsKJiM0MzsJaWYgKGxlbmd0aCAmbHQ7PSBzdGFydCkgewomIzQzOwkJZGV2X2VycihkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKCZndDsldSBleHBlY3RlZClcbiYjMzQ7LAomIzQzOwkJCWxlbmd0aCwgc3RhcnQpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGxlbmd0aCAtIHN0YXJ0ICZsdDsgbWlubGVuKSB7CiYjNDM7CQlkZXZfZXJyKGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoJmd0Oz0lenUgZXhwZWN0ZWQpXG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIG1pbmxlbik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW5ndGggLT0gc3RhcnQ7CiYjNDM7CWlmIChzdGFydCAmIzQzOyBvZmZzZXQgJmx0OyBvZmZzZXQpIHsKJiM0MzsJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7bWFwIHdyYXAtYXJvdW5kICV1JiM0MzsldVxuJiMzNDssIHN0YXJ0LCBvZmZzZXQpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2Zmc2V0ICYjNDM7PSBzdGFydDsKJiM0MzsJaWYgKG9mZnNldCAmYW1wOyAoYWxpZ24gLSAxKSkgewomIzQzOwkJZGV2X2VycihkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtvZmZzZXQgJXUgbm90IGFsaWduZWQgdG8gJXVcbiYjMzQ7LCBvZmZzZXQsIGFsaWduKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChsZW5ndGggJmd0OyBzaXplKQomIzQzOwkJbGVuZ3RoID0gc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKGxlbikKJiM0MzsJCSpsZW4gPSBsZW5ndGg7CiYjNDM7CiYjNDM7CWlmIChtaW5sZW4gJiM0Mzsgb2Zmc2V0ICZsdDsgbWlubGVuIHx8CiYjNDM7CSAgICBtaW5sZW4gJiM0Mzsgb2Zmc2V0ICZndDsgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKSB7CiYjNDM7CQlkZXZfZXJyKGRoX2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7bWFwIGN1c3RvbSBxdWV1ZSAlenVAJXUgb3V0IG9mIHJhbmdlIG9uIGJhciAldSBsZW5ndGggJWx1XG4mIzM0OywKJiM0MzsJCQltaW5sZW4sIG9mZnNldCwgYmFyLAomIzQzOwkJCSh1bnNpZ25lZCBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlwID0gcGNpX2lvbWFwX3JhbmdlKHBkZXYsIGJhciwgb2Zmc2V0LCBsZW5ndGgpOwomIzQzOwlpZiAoIXApIHsKJiM0MzsJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7dW5hYmxlIHRvIG1hcCBjdXN0b20gcXVldWUgJXVAJXUgb24gYmFyICV1XG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIG9mZnNldCwgYmFyKTsKJiM0MzsJfSBlbHNlIGlmIChwYSkgewomIzQzOwkJKnBhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhcikgJiM0Mzsgb2Zmc2V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CWludCBjb21tb247CiYjNDM7CiYjNDM7CS8qIGNoZWNrIGZvciBhIGNvbW1vbiBjb25maWc6IGlmIG5vdCwgdXNlIGxlZ2FjeSBtb2RlIChiYXIgMCkuICovCiYjNDM7CWNvbW1vbiA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfQ09NTU9OX0NGRywKJiM0MzsJCQkJCSAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLAomIzQzOwkJCQkJICAgICAmYW1wO3BmX2Rldi0mZ3Q7bW9kZXJuX2JhcnMpOwomIzQzOwlpZiAoIWNvbW1vbikgewomIzQzOwkJZGV2X2VycihkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O21pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlwZl9kZXYtJmd0O2NvbW1vbiA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBjb21tb24sCiYjNDM7CQkJCQkJc2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSwKJiM0MzsJCQkJCQlaWERIX1BGX0FMSUdONCwgMCwKJiM0MzsJCQkJCQlzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLAomIzQzOwkJCQkJCU5VTEwsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIXBmX2Rldi0mZ3Q7Y29tbW9uKSB7CiYjNDM7CQlkZXZfZXJyKGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BmX2Rldi0mZ3Q7Y29tbW9uIGlzIG51bGxcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CXUzMiBub3RpZnlfbGVuZ3RoOwomIzQzOwl1MzIgbm90aWZ5X29mZnNldDsKJiM0MzsJaW50IG5vdGlmeTsKJiM0MzsKJiM0MzsJLyogSWYgY29tbW9uIGlzIHRoZXJlLCB0aGVzZSBzaG91bGQgYmUgdG9vLi4uICovCiYjNDM7CW5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRywKJiM0MzsJCQkJCSAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLAomIzQzOwkJCQkJICAgICAmYW1wO3BmX2Rldi0mZ3Q7bW9kZXJuX2JhcnMpOwomIzQzOwlpZiAoIW5vdGlmeSkgewomIzQzOwkJZGV2X2VycihkaF9kZXYtJmd0O2RldmljZSwgJiMzNDttaXNzaW5nIG5vdGlmeSBjZmcgY2FwYWJpbGl0eVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCiYjNDM7CQkJICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLAomIzQzOwkJCQlub3RpZnlfb2ZmX211bHRpcGxpZXIpLAomIzQzOwkJJmFtcDtwZl9kZXYtJmd0O25vdGlmeV9vZmZzZXRfbXVsdGlwbGllcik7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCwKJiM0MzsJCQkJY2FwLmxlbmd0aCksICZhbXA7bm90aWZ5X2xlbmd0aCk7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCwKJiM0MzsJCQkJY2FwLm9mZnNldCksICZhbXA7bm90aWZ5X29mZnNldCk7CiYjNDM7CiYjNDM7CS8qIFdlIGRvbiYjMzk7dCBrbm93IGhvdyBtYW55IFZRcyB3ZSYjMzk7bGwgbWFwLCBhaGVhZCBvZiB0aGUgdGltZS4KJiM0MzsJICogSWYgbm90aWZ5IGxlbmd0aCBpcyBzbWFsbCwgbWFwIGl0IGFsbCBub3cuIE90aGVyd2lzZSwKJiM0MzsJICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKG5vdGlmeV9sZW5ndGggJiM0MzsgKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpICZsdDs9IFBBR0VfU0laRSkgewomIzQzOwkJcGZfZGV2LSZndDtub3RpZnlfYmFzZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBub3RpZnksCiYjNDM7CQkJCQkJCSAgICAgWlhESF9QRl9NQVBfTUlOTEVOMiwKJiM0MzsJCQkJCQkJICAgIFpYREhfUEZfQUxJR04yLCAwLAomIzQzOwkJCQkJCQkgICAgbm90aWZ5X2xlbmd0aCwKJiM0MzsJCQkJCQkJICAgICZhbXA7cGZfZGV2LSZndDtub3RpZnlfbGVuLAomIzQzOwkJCQkJCQkgICAgJmFtcDtwZl9kZXYtJmd0O25vdGlmeV9wYSwgTlVMTCk7CiYjNDM7CQlpZiAoIXBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpIHsKJiM0MzsJCQlkZXZfZXJyKGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UgaXMgbnVsbFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJcGZfZGV2LSZndDtub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LSZndDtwZGV2OwomIzQzOwlpbnQgZGV2aWNlOwomIzQzOwomIzQzOwkvKiBEZXZpY2UgY2FwYWJpbGl0eSBpcyBvbmx5IG1hbmRhdG9yeSBmb3IKJiM0MzsJICogZGV2aWNlcyB0aGF0IGhhdmUgZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCiYjNDM7CSAqLwomIzQzOwlkZXZpY2UgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcsCiYjNDM7CQkJCQkgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSwKJiM0MzsJCQkJCSAgICAgJmFtcDtwZl9kZXYtJmd0O21vZGVybl9iYXJzKTsKJiM0MzsKJiM0MzsJLyogd2UgZG9uJiMzOTt0IGtub3cgaG93IG11Y2ggd2Ugc2hvdWxkIG1hcCwKJiM0MzsJICogYnV0IFBBR0VfU0laRSBpcyBtb3JlIHRoYW4gZW5vdWdoIGZvciBhbGwgZXhpc3RpbmcgZGV2aWNlcy4KJiM0MzsJICovCiYjNDM7CWlmIChkZXZpY2UpIHsKJiM0MzsJCXBmX2Rldi0mZ3Q7ZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eShkaF9kZXYsIGRldmljZSwgMCwKJiM0MzsJCQkJCQkJWlhESF9QRl9BTElHTjQsIDAsIFBBR0VfU0laRSwKJiM0MzsJCQkJCQkgICAgICAgJmFtcDtwZl9kZXYtJmd0O2RldmljZV9sZW4sIE5VTEwsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7cGZfZGV2LSZndDtkZXZfY2ZnX2Jhcl9vZmYpOwomIzQzOwkJaWYgKCFwZl9kZXYtJmd0O2RldmljZSkgewomIzQzOwkJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGZfZGV2LSZndDtkZXZpY2UgaXMgbnVsbFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CiYjNDM7CWlmIChwZl9kZXYtJmd0O2RldmljZSkKJiM0MzsJCXBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi0mZ3Q7ZGV2aWNlKTsKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpCiYjNDM7CQlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O25vdGlmeV9iYXNlKTsKJiM0MzsJcGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LSZndDtjb21tb24pOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7enhkaF9wZl9jb21tb25fY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7enhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9tYXBfbm90aWZ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7enhkaF9wZl9kZXZpY2VfY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9tYXBfZGV2aWNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9tYXBfZGV2aWNlOgomIzQzOwlpZiAocGZfZGV2LSZndDtub3RpZnlfYmFzZSkKJiM0MzsJCXBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpOwomIzQzO2Vycl9tYXBfbm90aWZ5OgomIzQzOwlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O2NvbW1vbik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3UxNiB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LAomIzQzOwkJCQkgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChwZl9kZXYtJmd0O3BhY2tlZF9zdGF0dXMpCiYjNDM7CQlpb3dyaXRlMTYocGh5X2luZGV4LCAmYW1wO3BmX2Rldi0mZ3Q7Y29tbW9uLSZndDtxdWV1ZV9zZWxlY3QpOwomIzQzOwllbHNlCiYjNDM7CQlpb3dyaXRlMTYoaW5kZXgsICZhbXA7cGZfZGV2LSZndDtjb21tb24tJmd0O3F1ZXVlX3NlbGVjdCk7CiYjNDM7CiYjNDM7CXJldHVybiBpb3JlYWQxNigmYW1wO3BmX2Rldi0mZ3Q7Y29tbW9uLSZndDtxdWV1ZV9ub3RpZnlfb2ZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsCiYjNDM7CQkJCSAgICB1MTYgcGh5X2luZGV4LCB1MTYgaW5kZXgsCiYjNDM7CQkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90ICpwYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwl1MTYgb2ZmOwomIzQzOwomIzQzOwlvZmYgPSB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKGRoX2RldiwgcGh5X2luZGV4LCBpbmRleCk7CiYjNDM7CiYjNDM7CWlmIChwZl9kZXYtJmd0O25vdGlmeV9iYXNlKSB7CiYjNDM7CQkvKiBvZmZzZXQgc2hvdWxkIG5vdCB3cmFwICovCiYjNDM7CQlpZiAoKHU2NClvZmYgKgomIzQzOwkJCXBmX2Rldi0mZ3Q7bm90aWZ5X29mZnNldF9tdWx0aXBsaWVyICYjNDM7IDIgJmd0OyBwZl9kZXYtJmd0O25vdGlmeV9sZW4pIHsKJiM0MzsJCQlkZXZfZXJyKGRoX2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCQkmIzM0O2JhZCBub3RpZmljYXRpb24gb2Zmc2V0ICV1ICh4ICV1KSBmb3IgcXVldWUgJXUgJmd0OyAlenVcbiYjMzQ7LAomIzQzOwkJCQlvZmYsIHBmX2Rldi0mZ3Q7bm90aWZ5X29mZnNldF9tdWx0aXBsaWVyLCBwaHlfaW5kZXgsCiYjNDM7CQkJCXBmX2Rldi0mZ3Q7bm90aWZ5X2xlbik7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocGEpCiYjNDM7CQkJKnBhID0gcGZfZGV2LSZndDtub3RpZnlfcGEgJiM0Mzsgb2ZmICogcGZfZGV2LSZndDtub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7CiYjNDM7CiYjNDM7CQlyZXR1cm4gcGZfZGV2LSZndDtub3RpZnlfYmFzZSAmIzQzOyBvZmYgKiBwZl9kZXYtJmd0O25vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KGRoX2RldiwgcGZfZGV2LSZndDtub3RpZnlfbWFwX2NhcCwgMiwgMiwKJiM0MzsJCQkJCSAgICAgIG9mZiAqIHBmX2Rldi0mZ3Q7bm90aWZ5X29mZnNldF9tdWx0aXBsaWVyLAomIzQzOwkJCQkJICAgICAgMiwgTlVMTCwgcGEsIE5VTEwpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9wZl91bm1hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHZvaWQgX19pb21lbSAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoIXBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpCiYjNDM7CQlwY2lfaW91bm1hcChkaF9kZXYtJmd0O3BkZXYsIHByaXYpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfc2V0X3N0YXR1cyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggc3RhdHVzKQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlvd3JpdGU4KHN0YXR1cywgJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7ZGV2aWNlX3N0YXR1cyk7CiYjNDM7fQomIzQzOwomIzQzO3U4IHp4ZGhfcGZfZ2V0X3N0YXR1cyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlyZXR1cm4gaW9yZWFkOCgmYW1wO3BmX2Rldi0mZ3Q7Y29tbW9uLSZndDtkZXZpY2Vfc3RhdHVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dTggenhkaF9wZl9nZXRfY2ZnX2dlbihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwl1OCBjb25maWdfZ2VuZXJhdGlvbjsKJiM0MzsKJiM0MzsJY29uZmlnX2dlbmVyYXRpb24gPSBpb3JlYWQ4KCZhbXA7cGZfZGV2LSZndDtjb21tb24tJmd0O2NvbmZpZ19nZW5lcmF0aW9uKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvbmZpZ19nZW5lcmF0aW9uOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfZ2V0X3ZmX21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYywgaW50IHZmX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXUzMiBERVZfTUFDX0w7CiYjNDM7CXUxNiBERVZfTUFDX0g7CiYjNDM7CiYjNDM7CWV0aF96ZXJvX2FkZHIobWFjKTsKJiM0MzsKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7cGZfc3Jpb3ZfY2FwX2Jhc2UpIHsKJiM0MzsJCURFVl9NQUNfTCA9IGlvcmVhZDMyKHBmX2Rldi0mZ3Q7cGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MzsKJiM0MzsJCQkJICAgICAocGZfZGV2LSZndDtzcmlvdl9iYXJfc2l6ZSkgKiB2Zl9pZCAmIzQzOwomIzQzOwkJCQkgICAgIHBmX2Rldi0mZ3Q7ZGV2X2NmZ19iYXJfb2ZmKTsKJiM0MzsJCW1hY1swXSA9IERFVl9NQUNfTCAmYW1wOyAweGZmOwomIzQzOwkJbWFjWzFdID0gKERFVl9NQUNfTCAmZ3Q7Jmd0OyA4KSAmYW1wOyAweGZmOwomIzQzOwkJbWFjWzJdID0gKERFVl9NQUNfTCAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZjsKJiM0MzsJCW1hY1szXSA9IChERVZfTUFDX0wgJmd0OyZndDsgMjQpICZhbXA7IDB4ZmY7CiYjNDM7CQlERVZfTUFDX0ggPSBpb3JlYWQxNihwZl9kZXYtJmd0O3BmX3NyaW92X2NhcF9iYXNlICYjNDM7CiYjNDM7CQkJCSAgICAgIChwZl9kZXYtJmd0O3NyaW92X2Jhcl9zaXplKSAqIHZmX2lkICYjNDM7CiYjNDM7CQkJCSAgICAgIHBmX2Rldi0mZ3Q7ZGV2X2NmZ19iYXJfb2ZmICYjNDM7CiYjNDM7CQkJCSAgICAgIFpYREhfREVWX01BQ19ISUdIX09GRlNFVCk7CiYjNDM7CQltYWNbNF0gPSBERVZfTUFDX0ggJmFtcDsgMHhmZjsKJiM0MzsJCW1hY1s1XSA9IChERVZfTUFDX0ggJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfc2V0X3ZmX21hY19yZWcoc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYsCiYjNDM7CQkJICAgIHU4ICptYWMsIGludCB2Zl9pZCkKJiM0Mzt7CiYjNDM7CXUzMiBERVZfTUFDX0w7CiYjNDM7CXUxNiBERVZfTUFDX0g7CiYjNDM7CiYjNDM7CWlmIChwZl9kZXYtJmd0O3BmX3NyaW92X2NhcF9iYXNlKSB7CiYjNDM7CQlERVZfTUFDX0wgPSBtYWNbMF0gfCAobWFjWzFdICZsdDsmbHQ7IDgpIHwKJiM0MzsJCQkJCShtYWNbMl0gJmx0OyZsdDsgMTYpIHwgKG1hY1szXSAmbHQ7Jmx0OyAyNCk7CiYjNDM7CQlERVZfTUFDX0ggPSBtYWNbNF0gfCAobWFjWzVdICZsdDsmbHQ7IDgpOwomIzQzOwkJaW93cml0ZTMyKERFVl9NQUNfTCwgKHBmX2Rldi0mZ3Q7cGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MzsKJiM0MzsJCQkgIChwZl9kZXYtJmd0O3NyaW92X2Jhcl9zaXplKSAqIHZmX2lkICYjNDM7CiYjNDM7CQkJICBwZl9kZXYtJmd0O2Rldl9jZmdfYmFyX29mZikpOwomIzQzOwkJaW93cml0ZTE2KERFVl9NQUNfSCwgKHBmX2Rldi0mZ3Q7cGZfc3Jpb3ZfY2FwX2Jhc2UgJiM0MzsKJiM0MzsJCQkgIChwZl9kZXYtJmd0O3NyaW92X2Jhcl9zaXplKSAqIHZmX2lkICYjNDM7CiYjNDM7CQkJICBwZl9kZXYtJmd0O2Rldl9jZmdfYmFyX29mZiAmIzQzOwomIzQzOwkJCSAgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB6eGRoX3BmX3NldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwl6eGRoX3BmX3NldF92Zl9tYWNfcmVnKHBmX2RldiwgbWFjLCB2Zl9pZCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9zZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXUzMiBERVZfTUFDX0w7CiYjNDM7CXUxNiBERVZfTUFDX0g7CiYjNDM7CiYjNDM7CWlmICghcGZfZGV2LSZndDtkZXZpY2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CURFVl9NQUNfTCA9IG1hY1swXSB8IChtYWNbMV0gJmx0OyZsdDsgOCkgfCAobWFjWzJdICZsdDsmbHQ7IDE2KSB8IChtYWNbM10gJmx0OyZsdDsgMjQpOwomIzQzOwlERVZfTUFDX0ggPSBtYWNbNF0gfCAobWFjWzVdICZsdDsmbHQ7IDgpOwomIzQzOwlpb3dyaXRlMzIoREVWX01BQ19MLCBwZl9kZXYtJmd0O2RldmljZSk7CiYjNDM7CWlvd3JpdGUxNihERVZfTUFDX0gsIHBmX2Rldi0mZ3Q7ZGV2aWNlICYjNDM7IFpYREhfREVWX01BQ19ISUdIX09GRlNFVCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9nZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXUzMiBERVZfTUFDX0w7CiYjNDM7CXUxNiBERVZfTUFDX0g7CiYjNDM7CiYjNDM7CWlmICghcGZfZGV2LSZndDtkZXZpY2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CURFVl9NQUNfTCA9IGlvcmVhZDMyKHBmX2Rldi0mZ3Q7ZGV2aWNlKTsKJiM0MzsJbWFjWzBdID0gREVWX01BQ19MICZhbXA7IDB4ZmY7CiYjNDM7CW1hY1sxXSA9IChERVZfTUFDX0wgJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsJbWFjWzJdID0gKERFVl9NQUNfTCAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZjsKJiM0MzsJbWFjWzNdID0gKERFVl9NQUNfTCAmZ3Q7Jmd0OyAyNCkgJmFtcDsgMHhmZjsKJiM0MzsJREVWX01BQ19IID0gaW9yZWFkMTYocGZfZGV2LSZndDtkZXZpY2UgJiM0MzsgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKTsKJiM0MzsJbWFjWzRdID0gREVWX01BQ19IICZhbXA7IDB4ZmY7CiYjNDM7CW1hY1s1XSA9IChERVZfTUFDX0ggJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0Mzt9CiYjNDM7CiYjNDM7dTY0IHp4ZGhfcGZfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXU2NCBkZXZpY2VfZmVhdHVyZTsKJiM0MzsKJiM0MzsJaW93cml0ZTMyKDAsICZhbXA7cGZfZGV2LSZndDtjb21tb24tJmd0O2RldmljZV9mZWF0dXJlX3NlbGVjdCk7CiYjNDM7CWRldmljZV9mZWF0dXJlID0gaW9yZWFkMzIoJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7ZGV2aWNlX2ZlYXR1cmUpOwomIzQzOwlpb3dyaXRlMzIoMSwgJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7ZGV2aWNlX2ZlYXR1cmVfc2VsZWN0KTsKJiM0MzsJZGV2aWNlX2ZlYXR1cmUgfD0gKCh1NjQpaW9yZWFkMzIoJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7ZGV2aWNlX2ZlYXR1cmUpCiYjNDM7CQkJCQkJJmx0OyZsdDsgMzIpOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2aWNlX2ZlYXR1cmU7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU2NCBmZWF0dXJlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlpb3dyaXRlMzIoMCwgJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7Z3Vlc3RfZmVhdHVyZV9zZWxlY3QpOwomIzQzOwlpb3dyaXRlMzIoKHUzMilmZWF0dXJlcywgJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7Z3Vlc3RfZmVhdHVyZSk7CiYjNDM7CWlvd3JpdGUzMigxLCAmYW1wO3BmX2Rldi0mZ3Q7Y29tbW9uLSZndDtndWVzdF9mZWF0dXJlX3NlbGVjdCk7CiYjNDM7CWlvd3JpdGUzMihmZWF0dXJlcyAmZ3Q7Jmd0OyAzMiwgJmFtcDtwZl9kZXYtJmd0O2NvbW1vbi0mZ3Q7Z3Vlc3RfZmVhdHVyZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2OwomIzQzOwlzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldjsKJiM0MzsJc3RydWN0IGRldmxpbmsgKmRldmxpbms7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKCZhbXA7ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgZGhfY29yZV9kZXYpLAomIzQzOwkJCQkmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CWlmICghZGV2bGluaykgewomIzQzOwkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtkaF9wZiBkZXZsaW5rIGFsbG9jIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspOwomIzQzOwlkaF9kZXYtJmd0O2RldmljZSA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwomIzQzOwlkaF9kZXYtJmd0O3BkZXYgPSBwZGV2OwomIzQzOwlkaF9kZXYtJmd0O2RldmxpbmsgPSBkZXZsaW5rOwomIzQzOwomIzQzOwlwZl9kZXYgPSBkaF9jb3JlX2FsbG9jX3ByaXYoZGhfZGV2LCBzaXplb2YoKnBmX2RldikpOwomIzQzOwlpZiAoIXBmX2RldikgewomIzQzOwkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfcGZfZGV2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmX2Rldi0mZ3Q7YmFyX2NoYW5fdmFsaWQgPSBmYWxzZTsKJiM0MzsJcGZfZGV2LSZndDt2ZXBhID0gZmFsc2U7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtkaF9kZXYtJmd0O2xvY2spOwomIzQzOwltdXRleF9pbml0KCZhbXA7cGZfZGV2LSZndDtpcnFfbG9jayk7CiYjNDM7CiYjNDM7CWRoX2Rldi0mZ3Q7Y29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTsKJiM0MzsKJiM0MzsJcmV0ID0gZGhfcGZfcGNpX2luaXQoZGhfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtkaF9wZl9wY2lfaW5pdCBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2NmZ19pbml0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9jZmdfaW5pdDoKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3BmX2Rldi0mZ3Q7aXJxX2xvY2spOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7ZGhfZGV2LSZndDtsb2NrKTsKJiM0MzsJZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTsKJiM0MztlcnJfcGZfZGV2OgomIzQzOwlkZXZsaW5rX2ZyZWUoZGV2bGluayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkaF9kZXYpOwomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspOwomIzQzOwlkaF9wZl9wY2lfY2xvc2UoZGhfZGV2KTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3BmX2Rldi0mZ3Q7aXJxX2xvY2spOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7ZGhfZGV2LSZndDtsb2NrKTsKJiM0MzsJZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTsKJiM0MzsJZGV2bGlua19mcmVlKGRldmxpbmspOwomIzQzOwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRoX3BmX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKQomIzQzOwkJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwomIzQzOwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkaF9wZl9kcml2ZXIgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtkaW5naGFpMTBlJiMzNDssCiYjNDM7CS5pZF90YWJsZSA9IGRoX3BmX3BjaV90YWJsZSwKJiM0MzsJLnByb2JlID0gZGhfcGZfcHJvYmUsCiYjNDM7CS5yZW1vdmUgPSBkaF9wZl9yZW1vdmUsCiYjNDM7CS5zaHV0ZG93biA9IGRoX3BmX3NodXRkb3duLAomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BjaV9kcml2ZXIoZGhfcGZfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZGFhNzlhNmQ2ZjJhYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgKQEAgLTAsMCAmIzQzOzEsMTE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUEYgaGVhZGVyCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fWlhESF9FTl9QRl9IX18KJiM0MzsjZGVmaW5lIF9fWlhESF9FTl9QRl9IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBaWERIX1BGX1ZFTkRPUl9JRAkweDFjZjIKJiM0MzsjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lECTB4ODA0MAomIzQzOyNkZWZpbmUgWlhESF9WRl9ERVZJQ0VfSUQJMHg4MDQxCiYjNDM7CiYjNDM7LyogQ29tbW9uIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHCTEKJiM0MzsvKiBOb3RpZmljYXRpb25zICovCiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGRwkyCiYjNDM7LyogSVNSIGFjY2VzcyAqLwomIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0lTUl9DRkcJCTMKJiM0MzsvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqLwomIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcJNAomIzQzOy8qIFBDSSBjb25maWd1cmF0aW9uIGFjY2VzcyAqLwomIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX1BDSV9DRkcJCTUKJiM0MzsKJiM0MzsjZGVmaW5lIFpYREhfUEZfTUFYX0JBUl9WQUwJCTB4NQomIzQzOyNkZWZpbmUgWlhESF9QRl9BTElHTjQJCQk0CiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdOMgkJCTIKJiM0MzsjZGVmaW5lIFpYREhfUEZfTUFQX01JTkxFTjIJCTIKJiM0MzsKJiM0MzsjZGVmaW5lIFpYREhfREVWX01BQ19ISUdIX09GRlNFVAk0CiYjNDM7CiYjNDM7ZW51bSBkaF9jb3JlZGV2X3R5cGUgewomIzQzOwlESF9DT1JFREVWX1BGLAomIzQzOwlESF9DT1JFREVWX1ZGLAomIzQzOwlESF9DT1JFREVWX1NGLAomIzQzOwlESF9DT1JFREVWX01QRgomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGRldmxpbms7CiYjNDM7CiYjNDM7c3RydWN0IGRoX2NvcmVfZGV2IHsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2aWNlOwomIzQzOwllbnVtIGRoX2NvcmVkZXZfdHlwZSBjb3JlZGV2X3R5cGU7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2OwomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGV2bGluazsKJiM0MzsJc3RydWN0IG11dGV4IGxvY2s7IC8qIFByb3RlY3RzIGRldmljZSBjb25maWd1cmF0aW9uICovCiYjNDM7CXZvaWQgKnByaXY7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjb21tb247CiYjNDM7CS8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqLwomIzQzOwkvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovCiYjNDM7CXZvaWQgX19pb21lbSAqZGV2aWNlOwomIzQzOwl2b2lkIF9faW9tZW0gKm5vdGlmeV9iYXNlOwomIzQzOwl2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlOwomIzQzOwkvKiBQaHlzaWNhbCBiYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKi8KJiM0MzsJcmVzb3VyY2Vfc2l6ZV90IG5vdGlmeV9wYTsKJiM0MzsJLyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi8KJiM0MzsJc2l6ZV90IG5vdGlmeV9sZW47CiYjNDM7CXNpemVfdCBkZXZpY2VfbGVuOwomIzQzOwkvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqLwomIzQzOwlzMzIgbm90aWZ5X21hcF9jYXA7CiYjNDM7CXUzMiBub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7CiYjNDM7CS8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovCiYjNDM7CXMzMiBtb2Rlcm5fYmFyczsKJiM0MzsJdm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdOwomIzQzOwl1NjQgc3Jpb3ZfYmFyX3NpemU7CiYjNDM7CXUzMiBkZXZfY2ZnX2Jhcl9vZmY7CiYjNDM7CWJvb2wgcGFja2VkX3N0YXR1czsKJiM0MzsJYm9vbCBiYXJfY2hhbl92YWxpZDsKJiM0MzsJYm9vbCB2ZXBhOwomIzQzOwlzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7IC8qIFByb3RlY3RzIElSUSBvcGVyYXRpb25zICovCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEdFVF9DT1JFREVWX1RZUEUocGRldikgXAomIzQzOwkoKHBkZXYpLSZndDtkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRikKJiM0MzsKJiM0Mzt2b2lkICpkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHNpemVfdCBzaXplKTsKJiM0Mzt2b2lkIGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTsKJiM0Mzt2b2lkIGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldik7CiYjNDM7aW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsCiYjNDM7CQkJCXUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpOwomIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgaW50IG9mZiwKJiM0MzsJCQkJICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sCiYjNDM7CQkJCSAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSwKJiM0MzsJCQkJICAgICB1MzIgKmJhcl9vZmYpOwomIzQzO2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTsKJiM0MztpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpOwomIzQzO3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTsKJiM0Mzt1MTYgenhkaF9wZl9nZXRfcXVldWVfbm90aWZ5X29mZihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwKJiM0MzsJCQkJIHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCk7CiYjNDM7dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsCiYjNDM7CQkJCSAgICAgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4LAomIzQzOwkJCQkgICAgIHJlc291cmNlX3NpemVfdCAqcGEpOwomIzQzO3ZvaWQgenhkaF9wZl91bm1hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHZvaWQgX19pb21lbSAqcHJpdik7CiYjNDM7dm9pZCB6eGRoX3BmX3NldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4IHN0YXR1cyk7CiYjNDM7dTggenhkaF9wZl9nZXRfc3RhdHVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTsKJiM0Mzt1OCB6eGRoX3BmX2dldF9jZmdfZ2VuKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTsKJiM0Mzt2b2lkIHp4ZGhfcGZfZ2V0X3ZmX21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYywgaW50IHZmX2lkKTsKJiM0Mzt2b2lkIHp4ZGhfcGZfc2V0X3ZmX21hY19yZWcoc3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYsCiYjNDM7CQkJICAgIHU4ICptYWMsIGludCB2Zl9pZCk7CiYjNDM7dm9pZCB6eGRoX3BmX3NldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZCk7CiYjNDM7dm9pZCB6eGRoX3NldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpOwomIzQzO3ZvaWQgenhkaF9nZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKTsKJiM0Mzt1NjQgenhkaF9wZl9nZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpOwomIzQzO3ZvaWQgenhkaF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU2NCBmZWF0dXJlcyk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNDEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYWRkaW5nIGEgbmV3IEV0aGVybmV0IGRyaXZlciBmb3IgWlRFIERpbmdIYWkgZGV2aWNlcy4gVGhlIHN0cnVjdHVyZSBpcyBwcmV0dHkgc3RhbmRhcmQ6IGBNQUlOVEFJTkVSU2AgdXBkYXRlLCBgS2NvbmZpZ2AgYW5kIGBNYWtlZmlsZWAgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBkaXJlY3Rvcmllcy4gU3BlY2lmaWNhbGx5LCB0aGlzIGRyaXZlciBzZWVtcyB0byBiZSB0YXJnZXRpbmcgUENJLWJhc2VkIFpURSBEaW5nSGFpIGhhcmR3YXJlLgoKRnJvbSB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhpcyBkcml2ZXIgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBQQ0kgZHJpdmVyIGBkaF9wZl9kcml2ZXJgLCB3aXRoIGBkaF9wZl9wcm9iZWAgc2VydmluZyBhcyB0aGUga2V5IGluaXRpYWxpemF0aW9uIHBvaW50LiBJbml0aWFsbHksIEkgdGhvdWdodCBpdCB3YXMgbWlzc2luZyB0aGUgY3J1Y2lhbCBgbmV0X2RldmljZWAgcmVnaXN0cmF0aW9uLCBidXQgdGhlbiBJIHNlZSB0aGUgcGF0Y2ggZG9lcyByZWdpc3RlciBhIGBkZXZsaW5rYCBpbnN0YW5jZSB1c2luZyBgZGV2bGlua19yZWdpc3RlcihkZXZsaW5rKWAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBwb3NpdGl2ZSBzaWduLCBhcyB0aGlzIGV4cG9zZXMgZnVuY3Rpb25hbGl0eSB0byB1c2Vyc3BhY2UuCgpEaWdnaW5nIGRlZXBlciwgdGhlIGRyaXZlciBpbXBsZW1lbnRzIGBkaF9wZl9wcm9iZWAsIGBkaF9wZl9yZW1vdmVgLCBhbmQgYGRoX3BmX3NodXRkb3duYC4gSSBub3RpY2VkIHNvbWUgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0YCwgYHp4ZGhfcGZfc2V0X3ZmX21hY2AsIGV0Yy4sIGFyZSBkZWZpbmVkLiBIb3dldmVyLCBhIHF1aWNrIHNjYW4gb2YgYGVuX3BmLmNgIHJldmVhbGVkIHRoYXQgdGhleSBhcmVuJiMzOTt0IGNhbGxlZCBhbnl3aGVyZSBpbiB0aGUgZHJpdmVyIGl0c2VsZiwgd2hpY2ggaXMgYSBiaXQgcHV6emxpbmcuIE1heWJlIHRoZXkmIzM5O3JlIHBhcnQgb2YgYSBmdXR1cmUgaW1wbGVtZW50YXRpb24gb3IgYXJlIG1lYW50IHRvIGJlIGNhbGxlZCBleHRlcm5hbGx5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhleSBhcmUgdHJ1bHkgdW51c2VkLCBsaWtlbHkgZGVhZCBjb2RlLCBvciBzb21laG93IGNhbGxlZCBlbHNld2hlcmUgKG1heWJlIGEgZGlmZmVyZW50IHBhdGNoPykuCgpMb29raW5nIHNwZWNpZmljYWxseSBhdCB3aGF0IGBkaF9wZl9wcm9iZWAgZG9lcywgSSBzZWUgaXQgY2FsbHMgYGRldmxpbmtfYWxsb2NgLCBgZGhfY29yZV9hbGxvY19wcml2YCwgYGRoX3BmX3BjaV9pbml0YCwgYW5kIHRoZW4gcmVnaXN0ZXJzIHRoZSBgZGV2bGlua2AuIFRoaXMgaXMgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhIGZ1bmN0aW9uYWwgZHJpdmVyLgoKVG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRocm91Z2ggdGhlIGNvZGUgdG8gdmVyaWZ5IHRoYXQgdGhvc2Ugb3RoZXIgZnVuY3Rpb25zIGFyZSBub3QgYWN0dWFsbHkgdXNlZCwgZW5zdXJpbmcgdGhhdCB0aGV5IHRydWx5IGFyZW4mIzM5O3QgcmVmZXJlbmNlZCBieSBhbnkgb3RoZXIgY29kZS4gSSYjMzk7bGwgcnVuIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgaXQgZmluZHMgb24gYHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6eGRoX3BmX21vZGVybl9jZmdfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jPTMyOD12b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0MDppbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM0MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaD05OD12b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo5OTppbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC0xMDAtdTE2IHp4ZGhfcGZfZ2V0X3F1ZXVlX25vdGlmeV9vZmYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MTgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBhIE5ldyBQQ0kgRHJpdmVyKioKCk9rYXksIHNvIHRoaXMgY29kZSBpcyBjdXJyZW50bHkgZG9ybWFudCwgZXNzZW50aWFsbHkgZGVhZCwgYnV0IGBkaF9wZl9wcm9iZWAgaXMgc3RpbGwgYWNjZXNzaWJsZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNob3VsZCBJIGV2ZW4gYm90aGVyIHdpdGggZnV6emluZyB0aGlzPyBZZXMsIGFic29sdXRlbHkuIEl0JiMzOTtzIGEgYnJhbmQgbmV3IFBDSSBkcml2ZXIsIGFuZCBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBmdXp6aW5nIFBDSSBkcml2ZXJzIHVzaW5nIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24g4oCTIGEgZ3JlYXQgb3Bwb3J0dW5pdHkuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3Mgc2VlLCBiYXNlZCBvbiB0aGUgbm90ZXMsIEkgbmVlZCBgTkVUX1ZFTkRPUl9aVEVgLCBgRElOR0hBSWAsIGFuZCBgRElOR0hBSV9QRmAuCgpSaWdodCwgdGltZSB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ2AuIE9rYXksIGBESU5HSEFJYCBkZXBlbmRzIG9uIGBQQ0lgLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQW5kIGBESU5HSEFJX1BGYCBpcyBhIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSBvciBidWlsdC1pbiwgb3IgZXZlbiBkaXNhYmxlZC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBESU5HSEFJYCBhbmQgYERJTkdIQUlfUEZgIGFyZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgdGhlIGRyaXZlciBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRElOR0hBSSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnOjY6Y29uZmlnIERJTkdIQUlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctNy0gICAgYm9vbCBcJiMzNDtaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnPTIxPWlmIERJTkdIQUlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnOjIzOmNvbmZpZyBESU5HSEFJX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTI0LSAgICB0cmlzdGF0ZSBcJiMzNDtaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTkyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFpURSBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBaVEUgRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIGJ5IGV4YW1pbmluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHRoZSBwbGFjZSB3aGVyZSB0aGUgaW5jbHVzaW9uIG9mIHRoZSBaVEUgRXRoZXJuZXQgZHJpdmVyIGlzIGRlZmluZWQsIGFsb25nIHdpdGggYWxsIGl0cyBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0byBmaW5kIGBjb25maWdgIG9wdGlvbnMsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMgdG8gbWFuYWdlIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugd2hldGhlciBpdCBzdXBwb3J0cyBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbnMsIGRpZmZlcmVudCBFdGhlcm5ldCBQSFkgdHlwZXMsIHBvd2VyIG1hbmFnZW1lbnQgZmVhdHVyZXMsIG9yIGFueSBvdGhlciBkcml2ZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWUuIEJhc2VkIG9uIHRoZSBLY29uZmlnIGZpbGUsIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIGl0IG1pZ2h0IGFwcGx5IGluIGEgc3BlY2lmaWMgdXNlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9WRU5ET1JfWlRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZzo2OmNvbmZpZyBORVRfVkVORE9SX1pURVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWctNy0gICAgYm9vbCBcJiMzNDtaVEUgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjk5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWlRFIERpbmdoYWkgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCB0aGUga2V5IGlzIGVuYWJsaW5nIHRoZXNlIG1vZHVsZXM6IGBORVRfVkVORE9SX1pURWAsIGBESU5HSEFJYCwgYW5kIGBESU5HSEFJX1BGYC4gUmlnaHQsIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHN5bWJvbHMsIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMuIEkgc2VlIHRoZSBmb2N1cyBpcyBvbiBgZGhfcGZfcHJvYmVgLCBgZGhfcGZfcmVtb3ZlYCwgYGRoX3BmX3BjaV9pbml0YCwgYW5kIGBkaF9wZl9wY2lfY2xvc2VgLiBBaCwgYGRoX3BmX3Byb2JlYCByaW5ncyBhIGJlbGwsIHRoYXQgbG9va3MgbGlrZSBhIFBDSSBwcm9iZSBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbnRleHQuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFjY2Vzc2libGUgZnVuY3Rpb25zIGluIHRoaXMgcGF0aC4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IGBkZXZsaW5rX29wc2AsIGl0JiMzOTtzIGVtcHR5OiBgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkaF9wZl9kZXZsaW5rX29wcyA9IHt9O2AgT2theSwgc28gbm8gZGV2bGluayBjYWxsYmFja3MgYXJlIGRlZmluZWQgaGVyZS4gVGhhdCBoZWxwcyBuYXJyb3cgdGhpbmdzIGRvd24gY29uc2lkZXJhYmx5LgoKU28sIHRvIHJlaXRlcmF0ZSwgdGhlIG9ubHkgcmVhY2hhYmxlIGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgYGRoX3BmX3Byb2JlYCwgYGRoX3BmX3JlbW92ZWAsIGBkaF9wZl9zaHV0ZG93bmAsIGBkaF9wZl9wY2lfaW5pdGAsIGFuZCBgZGhfcGZfcGNpX2Nsb3NlYC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwsIHNvIEkmIzM5O2xsIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBleGFjdGx5IHdoYXQgYGRoX3BmX3Byb2JlYCBkb2VzIHRvIGNvbmZpcm0gaXQmIzM5O3MgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGl0IHNlZW1zLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTYwOlx0c3RhdGljIGludCBkaF9wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIDU2MTpcdHtcbiA1NjI6XHRcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2O1xuIDU2MzpcdFx0c3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXY7XG4gNTY0Olx0XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbiA1NjU6XHRcdGludCByZXQ7XG4gNTY2Olx0XG4gNTY3Olx0XHRkZXZsaW5rID0gZGV2bGlua19hbGxvYyhcdTAwMjZkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCBkaF9jb3JlX2RldiksXG4gNTY4Olx0XHRcdFx0XHRcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gNTY5Olx0XHRpZiAoIWRldmxpbmspIHtcbiA1NzA6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuIDU3MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA1NzI6XHRcdH1cbiA1NzM6XHRcbiA1NzQ6XHRcdGRoX2RldiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcbiA1NzU6XHRcdGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiA1NzY6XHRcdGRoX2Rldi1cdTAwM2VwZGV2ID0gcGRldjtcbiA1Nzc6XHRcdGRoX2Rldi1cdTAwM2VkZXZsaW5rID0gZGV2bGluaztcbiA1Nzg6XHRcbiA1Nzk6XHRcdHBmX2RldiA9IGRoX2NvcmVfYWxsb2NfcHJpdihkaF9kZXYsIHNpemVvZigqcGZfZGV2KSk7XG4gNTgwOlx0XHRpZiAoIXBmX2Rldikge1xuIDU4MTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxuXCYjMzQ7KTtcbiA1ODI6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA1ODM6XHRcdFx0Z290byBlcnJfcGZfZGV2O1xuIDU4NDpcdFx0fVxuIDU4NTpcdFxuIDU4NjpcdFx0cGZfZGV2LVx1MDAzZWJhcl9jaGFuX3ZhbGlkID0gZmFsc2U7XG4gNTg3Olx0XHRwZl9kZXYtXHUwMDNldmVwYSA9IGZhbHNlO1xuIDU4ODpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkaF9kZXYtXHUwMDNlbG9jayk7XG4gNTg5Olx0XHRtdXRleF9pbml0KFx1MDAyNnBmX2Rldi1cdTAwM2VpcnFfbG9jayk7XG4gNTkwOlx0XG4gNTkxOlx0XHRkaF9kZXYtXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcbiA1OTI6XHRcbiA1OTM6XHRcdHJldCA9IGRoX3BmX3BjaV9pbml0KGRoX2Rldik7XG4gNTk0Olx0XHRpZiAocmV0KSB7XG4gNTk1Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2RoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4gNTk2Olx0XHRcdGdvdG8gZXJyX2NmZ19pbml0O1xuIDU5NzpcdFx0fVxuIDU5ODpcdFxuIDU5OTpcdFx0ZGV2bGlua19yZWdpc3RlcihkZXZsaW5rKTtcbiA2MDA6XHRcbiA2MDE6XHRcdHJldHVybiAwO1xuIDYwMjpcdFxuIDYwMzpcdGVycl9jZmdfaW5pdDpcbiA2MDQ6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbiA2MDU6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGhfZGV2LVx1MDAzZWxvY2spO1xuIDYwNjpcdFx0ZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTtcbiA2MDc6XHRlcnJfcGZfZGV2OlxuIDYwODpcdFx0ZGV2bGlua19mcmVlKGRldmxpbmspO1xuIDYwOTpcdFx0cmV0dXJuIHJldDtcbiA2MTA6XHR9XG4gNjExOlx0XG4gNjEyOlx0c3RhdGljIHZvaWQgZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIDYxMzpcdHtcbiA2MTQ6XHRcdHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuIDYxNTpcdFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoZGhfZGV2KTtcbiA2MTY6XHRcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4gNjE3Olx0XG4gNjE4Olx0XHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4gNjE5Olx0XHRkaF9wZl9wY2lfY2xvc2UoZGhfZGV2KTtcbiA2MjA6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbiA2MjE6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGhfZGV2LVx1MDAzZWxvY2spO1xuIDYyMjpcdFx0ZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTtcbiA2MjM6XHRcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbiA2MjQ6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbiA2MjU6XHR9XG4gNjI2Olx0XG4gNjI3Olx0c3RhdGljIHZvaWQgZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gNjI4Olx0e1xuIDYyOTpcdFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKVxuIDYzMDpcdFx0XHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XG4gNjMxOlx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gNjMyOlx0fVxuIDYzMzpcdFxuIDYzNDpcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkaF9wZl9kcml2ZXIgPSB7XG4gNjM1Olx0XHQubmFtZSA9IFwmIzM0O2RpbmdoYWkxMGVcJiMzNDssXG4gNjM2Olx0XHQuaWRfdGFibGUgPSBkaF9wZl9wY2lfdGFibGUsXG4gNjM3Olx0XHQucHJvYmUgPSBkaF9wZl9wcm9iZSxcbiA2Mzg6XHRcdC5yZW1vdmUgPSBkaF9wZl9yZW1vdmUsXG4gNjM5Olx0XHQuc2h1dGRvd24gPSBkaF9wZl9zaHV0ZG93bixcbiA2NDA6XHR9O1xuIDY0MTpcdFxuIDY0MjpcdG1vZHVsZV9wY2lfZHJpdmVyKGRoX3BmX2RyaXZlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTY0CgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldDogWlRFIERpbmdIYWkgRXRoZXJuZXQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBQQ0kgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUsIGdvb2QsIGEgbmV3IHRhcmdldCEgSXQgaW1wbGVtZW50cyB0aGUgdXN1YWwgUENJIGRyaXZlciBsaWZlY3ljbGUgZnVuY3Rpb25zIOKAkyBgcHJvYmVgLCBgcmVtb3ZlYCwgYW5kIGBzaHV0ZG93bmAg4oCTIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuCgpJJiMzOTttIG5vdGljaW5nIHRoYXQgdGhlIHBhdGNoIGFsc28gZGVmaW5lcyBzb21lIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGB6eGRoX3BmX21vZGVybl9jZmdfaW5pdGAgYW5kIGB6eGRoX3BmX3NldF92Zl9tYWNgLCBidXQgdGhlc2UgZG9uJiMzOTt0IHNlZW0gdG8gYmUgY3VycmVudGx5IHV0aWxpemVkIHdpdGhpbiB0aGUgYHByb2JlYCByb3V0aW5lLiBJbnRlcmVzdGluZ+KApiBwb3RlbnRpYWxseSBhIGZ1dHVyZSBleHBhbnNpb24gb3IgcGVyaGFwcyBzb21lIHVudXNlZCBjb2RlIHBhdGhzLiBXb3J0aCBrZWVwaW5nIGFuIGV5ZSBvbiwgYnV0IGZvciB0aGUgaW5pdGlhbCBmdXp6aW5nLCBteSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLgoKU2luY2UgdGhlIGBwcm9iZWAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHZpYSB0aGUgUENJIHN1YnN5c3RlbSwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMgb24gYGRoX3BmX3Byb2JlYCwgYGRoX3BmX3JlbW92ZWAsIGBkaF9wZl9wY2lfaW5pdGAsIGFuZCBgZGhfcGZfcGNpX2Nsb3NlYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBleGl0IHBvaW50cyBmb3IgdGhlIGRyaXZlciwgYW5kIGZ1enppbmcgdGhlc2UgY291bGQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcyBpbiBob3cgaXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJhdGlvbiwgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJJiMzOTtsbCBuZWVkIHRvIGVuc3VyZSB0aGUgZm9sbG93aW5nIGFyZSBlbmFibGVkOiBgTkVUX1ZFTkRPUl9aVEVgLCBgRElOR0hBSWAsIGFuZCBgRElOR0hBSV9QRmAuIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhlIGRyaXZlciBpcyBwcm9wZXJseSBjb21waWxlZCBhbmQgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGFjY2Vzc2VkLCBlbmFibGluZyBteSBmdXp6aW5nLgoKUmlnaHQsIEkmIzM5O20gY29uZmlkZW50IEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSB0YXJnZXQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBmdXp6aW5nIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9aVEUmIzM0OywKICAgICYjMzQ7RElOR0hBSSYjMzQ7LAogICAgJiMzNDtESU5HSEFJX1BGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGhfcGZfcHJvYmUmIzM0OywKICAgICYjMzQ7ZGhfcGZfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2RoX3BmX3BjaV9pbml0JiMzNDssCiAgICAmIzM0O2RoX3BmX3BjaV9jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGEgUENJIHByb2JlIGZ1bmN0aW9uIHdoaWNoIGluaXRpYWxpemVzIHRoZSBkZXZpY2UsIG1hcHMgUENJIG1lbW9yeSwgYW5kIHJlZ2lzdGVycyBhIGRldmxpbmsgaW5zdGFuY2UuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfWlRFJiMzNDssCiAgICAmIzM0O0RJTkdIQUkmIzM0OywKICAgICYjMzQ7RElOR0hBSV9QRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RoX3BmX3Byb2JlJiMzNDssCiAgICAmIzM0O2RoX3BmX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtkaF9wZl9wY2lfaW5pdCYjMzQ7LAogICAgJiMzNDtkaF9wZl9wY2lfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIFBDSSBwcm9iZSBmdW5jdGlvbiB3aGljaCBpbml0aWFsaXplcyB0aGUgZGV2aWNlLCBtYXBzIFBDSSBtZW1vcnksIGFuZCByZWdpc3RlcnMgYSBkZXZsaW5rIGluc3RhbmNlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIGZ1enplZCB1c2luZyB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzA6MzcuMzQ4NzUxMjYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc0NzYzNjA2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9aVEVcIixcbiAgICBcIkRJTkdIQUlcIixcbiAgICBcIkRJTkdIQUlfUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaF9wZl9wcm9iZVwiLFxuICAgIFwiZGhfcGZfcmVtb3ZlXCIsXG4gICAgXCJkaF9wZl9wY2lfaW5pdFwiLFxuICAgIFwiZGhfcGZfcGNpX2Nsb3NlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIFBDSSBwcm9iZSBmdW5jdGlvbiB3aGljaCBpbml0aWFsaXplcyB0aGUgZGV2aWNlLCBtYXBzIFBDSSBtZW1vcnksIGFuZCByZWdpc3RlcnMgYSBkZXZsaW5rIGluc3RhbmNlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIGZ1enplZCB1c2luZyB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxOTozMDozNy4zNDg3NTYzMzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjY2NTA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI5ZGJhNzFhM2FhZTM1M2M1NDY0NGIwZmY0ZTRlODJjZWVkNTZmZmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTk6MzA6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDJmYjFjNzVhZmQxNjM4Li43MzY5MmIwOWJmN2JhYiAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTI5NDQwLDYgKzI5NDQwLDEyIEBAIFM6XFx0TWFpbnRhaW5lZFxcbiBUOlxcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGl3YWkvc291bmQuZ2l0XFxuIEY6XFx0c291bmQvaGRhL2NvZGVjcy9zZW5hcnl0ZWNoLmNcXG4gXFxuK1pURSBESU5HSEFJIEVUSEVSTkVUIERSSVZFUlxcbitNOlxcdEp1bnlhbmcgSGFuIFxcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXFx1MDAzZVxcbitMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG4rUzpcXHRNYWludGFpbmVkXFxuK0Y6XFx0ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL1xcbitcXG4gVEhFIFJFU1RcXG4gTTpcXHRMaW51cyBUb3J2YWxkcyBcXHUwMDNjdG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmdcXHUwMDNlXFxuIEw6XFx0bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZ1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xcbmluZGV4IGI4ZjcwZTJhMTc2M2FkLi5jMmI2OTk2YjBjZmUxYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xcbkBAIC0xODgsNSArMTg4LDYgQEAgc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcXFwiXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcXFwiXFxuIFxcbiBlbmRpZiAjIEVUSEVSTkVUXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcXG5pbmRleCA1NzM0NGZlYzZjZTA0Ny4uYTM0YmNiZDRkZjRlOTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxcbkBAIC0xMDQsMyArMTA0LDQgQEAgb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWElSQ09NKSArPSB4aXJjb20vXFxuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1NZTk9QU1lTKSArPSBzeW5vcHN5cy9cXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICs9IHBlbnNhbmRvL1xcbiBvYmotJChDT05GSUdfT0FfVEM2KSArPSBvYV90YzYub1xcbitvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9aVEUpICs9IHp0ZS9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2EyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXFxuQEAgLTAsMCArMSwyMCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI1xcbisjIFpURSBkcml2ZXIgY29uZmlndXJhdGlvblxcbisjXFxuK1xcbitjb25maWcgTkVUX1ZFTkRPUl9aVEVcXG4rICAgIGJvb2wgXFxcIlpURSBkZXZpY2VzXFxcIlxcbisgICAgZGVmYXVsdCB5XFxuKyAgICBoZWxwXFxuKyAgICAgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxcbisgICAgICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbisgICAgICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuKyAgICAgIHRoZSBxdWVzdGlvbnMgYWJvdXQgWnRlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkXFxuKyAgICAgIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuK1xcbitpZiBORVRfVkVORE9SX1pURVxcbitcXG4rc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXFxcIlxcbitcXG4rZW5kaWYgIyBORVRfVkVORE9SX1pURVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZDk5MjliNjE1NTljNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBNYWtlZmlsZSBmb3IgdGhlIFpURSBkZXZpY2UgZHJpdmVyc1xcbisjXFxuK1xcbitvYmotJChDT05GSUdfRElOR0hBSSkgKz0gZGluZ2hhaS9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xMjFiZTNiZjc3MDdmZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXFxuQEAgLTAsMCArMSwzNCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI1xcbisjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uXFxuKyNcXG4rXFxuK2NvbmZpZyBESU5HSEFJXFxuKyAgICBib29sIFxcXCJaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuKyAgICBkZXBlbmRzIG9uIFBDSVxcbisgICAgc2VsZWN0IE5FVF9ERVZMSU5LXFxuKyAgICBoZWxwXFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuXFxuK1xcbisgICAgICBEaW5nSGFpIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBFdGhlcm5ldCBjb250cm9sbGVyIHRoYXQgc3VwcG9ydHNcXG4rICAgICAgbXVsdGlwbGUgZmVhdHVyZXMgaW5jbHVkaW5nIGhhcmR3YXJlIG9mZmxvYWRpbmcsIFNSLUlPViwgYW5kXFxuKyAgICAgIGFkdmFuY2VkIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcy5cXG4rXFxuKyAgICAgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgY2FuIHNlbGVjdCBzcGVjaWZpYyBkcml2ZXIgdmFyaWFudHMgYmVsb3cuXFxuK1xcbisgICAgICBJZiB1bnN1cmUsIHNheSBOLlxcbitcXG4raWYgRElOR0hBSVxcbitcXG4rY29uZmlnIERJTkdIQUlfUEZcXG4rICAgIHRyaXN0YXRlIFxcXCJaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclxcXCJcXG4rICAgIGhlbHBcXG4rICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgUENJIEV4cHJlc3MgRXRoZXJuZXRcXG4rICAgICAgYWRhcHRlcnMgKFBGKS5cXG4rXFxuKyAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4rICAgICAgd2lsbCBiZSBuYW1lZCBkaW5naGFpMTBlLlxcbitcXG4rICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuK2VuZGlmICMgRElOR0hBSVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjU1YThkZTUxOGJlYjNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDEwIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjXFxuKyMgTWFrZWZpbGUgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcbisjXFxuK1xcbitjY2ZsYWdzLXkgKz0gLUkkKHNyYylcXG4rXFxuK29iai0kKENPTkZJR19ESU5HSEFJX1BGKSArPSBkaW5naGFpMTBlLm9cXG4rZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cXG4rXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTA2N2M3M2ZlZDMzY2NcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaFxcbkBAIC0wLDAgKzEsNzEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQQ0kgY2FwYWJpbGl0eSBkZWZpbml0aW9uc1xcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX19ESF9RVUVVRV9IX19cXG4rI2RlZmluZSBfX0RIX1FVRVVFX0hfX1xcbitcXG4rLyogVmVjdG9yIHZhbHVlIHVzZWQgdG8gZGlzYWJsZSBNU0kgZm9yIHF1ZXVlICovXFxuKyNkZWZpbmUgWlhESF9NU0lfTk9fVkVDVE9SICAgICAgMHhmZlxcbitcXG4rLyogU3RhdHVzIGJ5dGUgZm9yIGd1ZXN0IHRvIHJlcG9ydCBwcm9ncmVzcywgYW5kIHN5bmNocm9uaXplIGZlYXR1cmVzICovXFxuKy8qIFdlIGhhdmUgc2VlbiBkZXZpY2UgYW5kIHByb2Nlc3NlZCBnZW5lcmljIGZpZWxkcyAqL1xcbisjZGVmaW5lIFpYREhfQ09ORklHX1NfQUNLTk9XTEVER0UgMVxcbisvKiBXZSBoYXZlIGZvdW5kIGEgZHJpdmVyIGZvciB0aGUgZGV2aWNlLiAqL1xcbisjZGVmaW5lIFpYREhfQ09ORklHX1NfRFJJVkVSICAgICAgMlxcbisvKiBEcml2ZXIgaGFzIHVzZWQgaXRzIHBhcnRzIG9mIHRoZSBjb25maWcsIGFuZCBpcyBoYXBweSAqL1xcbisjZGVmaW5lIFpYREhfQ09ORklHX1NfRFJJVkVSX09LICAgNFxcbisvKiBEcml2ZXIgaGFzIGZpbmlzaGVkIGNvbmZpZ3VyaW5nIGZlYXR1cmVzICovXFxuKyNkZWZpbmUgWlhESF9DT05GSUdfU19GRUFUVVJFU19PSyA4XFxuKy8qIERldmljZSBlbnRlcmVkIGludmFsaWQgc3RhdGUsIGRyaXZlciBtdXN0IHJlc2V0IGl0ICovXFxuKyNkZWZpbmUgWlhESF9DT05GSUdfU19ORUVEU19SRVNFVCAweDQwXFxuKy8qIFdlJ3ZlIGdpdmVuIHVwIG9uIHRoaXMgZGV2aWNlICovXFxuKyNkZWZpbmUgWlhESF9DT05GSUdfU19GQUlMRUQgICAgICAweDgwXFxuK1xcbisvKiBUaGlzIGlzIHRoZSBQQ0kgY2FwYWJpbGl0eSBoZWFkZXI6ICovXFxuK3N0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xcbitcXHRfX3U4IGNhcF92bmRyO1xcdFxcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi9cXG4rXFx0X191OCBjYXBfbmV4dDtcXHRcXHQvKiBHZW5lcmljIFBDSSBmaWVsZDogbmV4dCBwdHIuICovXFxuK1xcdF9fdTggY2FwX2xlbjtcXHRcXHQvKiBHZW5lcmljIFBDSSBmaWVsZDogY2FwYWJpbGl0eSBsZW5ndGggKi9cXG4rXFx0X191OCBjZmdfdHlwZTtcXHRcXHQvKiBJZGVudGlmaWVzIHRoZSBzdHJ1Y3R1cmUuICovXFxuK1xcdF9fdTggYmFyO1xcdFxcdC8qIFdoZXJlIHRvIGZpbmQgaXQuICovXFxuK1xcdF9fdTggaWQ7XFx0XFx0LyogTXVsdGlwbGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGUgKi9cXG4rXFx0X191OCBwYWRkaW5nWzJdO1xcdFxcdC8qIFBhZCB0byBmdWxsIGR3b3JkLiAqL1xcbitcXHRfX2xlMzIgb2Zmc2V0O1xcdFxcdC8qIE9mZnNldCB3aXRoaW4gYmFyLiAqL1xcbitcXHRfX2xlMzIgbGVuZ3RoO1xcdFxcdC8qIExlbmd0aCBvZiB0aGUgc3RydWN0dXJlLCBpbiBieXRlcy4gKi9cXG4rfTtcXG4rXFxuKy8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cXG4rc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcge1xcbitcXHQvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqL1xcbitcXHRfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBkZXZpY2VfZmVhdHVyZTtcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFx0X19sZTMyIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBndWVzdF9mZWF0dXJlO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IG1zaXhfY29uZmlnO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IG51bV9xdWV1ZXM7XFx0XFx0LyogcmVhZC1vbmx5ICovXFxuK1xcdF9fdTggZGV2aWNlX3N0YXR1cztcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fdTggY29uZmlnX2dlbmVyYXRpb247XFx0LyogcmVhZC1vbmx5ICovXFxuK1xcbitcXHQvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi9cXG4rXFx0X19sZTE2IHF1ZXVlX3NlbGVjdDtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9zaXplO1xcdFxcdC8qIHJlYWQtd3JpdGUsIHBvd2VyIG9mIDIuICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9tc2l4X3ZlY3RvcjtcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMTYgcXVldWVfbm90aWZ5X29mZjtcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX2Rlc2NfbG87XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMzIgcXVldWVfZGVzY19oaTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV9hdmFpbF9sbztcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV9hdmFpbF9oaTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV91c2VkX2xvO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX3VzZWRfaGk7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbit9O1xcbitcXG4rc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAge1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwIGNhcDtcXG4rXFx0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTlmZDQ3MmE4NmZkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcXG5AQCAtMCwwICsxLDY0MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiZW5fcGYuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImRoX3F1ZXVlLmhcXFwiXFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKdW55YW5nIEhhbiBcXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZGhfcGZfZGV2bGlua19vcHMgPSB7fTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkaF9wZl9wY2lfdGFibGVbXSA9IHtcXG4rXFx0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcXG4rXFx0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1ZGX0RFVklDRV9JRCkgfSxcXG4rXFx0eyB9XFxuK307XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGhfcGZfcGNpX3RhYmxlKTtcXG4rXFxuK3ZvaWQgKmRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0dm9pZCAqcHJpdiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcbitcXHRpZiAocHJpdilcXG4rXFx0XFx0ZGhfZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4rXFx0cmV0dXJuIHByaXY7XFxuK31cXG4rXFxuK3ZvaWQgZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXFxuK3tcXG4rXFx0a2ZyZWUoZGhfZGV2LVxcdTAwM2Vwcml2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkaF9wZl9wY2lfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBjaV9zZXRfZHJ2ZGF0YShkZXYtXFx1MDAzZXBkZXYsIGRldik7XFxuK1xcbitcXHRyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi1cXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi1cXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soMzIpKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2aWNlLCBcXFwiZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRcXHRnb3RvIGVycl9wY2k7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhkZXYtXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHBjaV9zZWxlY3RfYmFycyhkZXYtXFx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcImRoLXBmXFxcIik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldmljZSwgXFxcInBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfcGNpO1xcbitcXHR9XFxuK1xcbitcXHRwY2lfc2V0X21hc3RlcihkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRyZXQgPSBwY2lfc2F2ZV9zdGF0ZShkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKGRldi1cXHUwMDNlcGRldiwgMCkgXFx1MDAyNiBJT1JFU09VUkNFX01FTSkpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldmljZSwgXFxcIkJBUiAwIGlzIG5vdCBhbiBNTUlPIHJlc291cmNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XFxuK1xcdH1cXG4rXFxuK1xcdHBmX2Rldi1cXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSA9XFxuK1xcdFxcdGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi1cXHUwMDNlcGRldiwgMCksXFxuK1xcdFxcdFxcdHBjaV9yZXNvdXJjZV9sZW4oZGV2LVxcdTAwM2VwZGV2LCAwKSk7XFxuK1xcdGlmICghcGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcGNpX3NhdmVfc3RhdGU6XFxuK1xcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LVxcdTAwM2VwZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHBjaV9zZWxlY3RfYmFycyhkZXYtXFx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XFxuK2Vycl9wY2k6XFxuK1xcdHBjaV9kaXNhYmxlX2RldmljZShkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbit2b2lkIGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlvdW5tYXAocGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKTtcXG4rXFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhkZXYtXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGNpX3NlbGVjdF9iYXJzKGRldi1cXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcXG4rXFx0cGNpX2Rpc2FibGVfZGV2aWNlKGRldi1cXHUwMDNlcGRldik7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxcbitcXHRcXHRcXHRcXHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKVxcbit7XFxuK1xcdGludCBwb3M7XFxuK1xcdHU4IHR5cGU7XFxuK1xcdHU4IGJhcjtcXG4rXFxuK1xcdGZvciAocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOyBwb3MgXFx1MDAzZSAwO1xcbitcXHQgICAgIHBvcyA9IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eShwZGV2LCBwb3MsIFBDSV9DQVBfSURfVk5EUikpIHtcXG4rXFx0XFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRjZmdfdHlwZSksIFxcdTAwMjZ0eXBlKTtcXG4rXFx0XFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcXHUwMDI2YmFyKTtcXG4rXFxuK1xcdFxcdC8qIGlnbm9yZSBzdHJ1Y3R1cmVzIHdpdGggcmVzZXJ2ZWQgQkFSIHZhbHVlcyAqL1xcbitcXHRcXHRpZiAoYmFyIFxcdTAwM2UgWlhESF9QRl9NQVhfQkFSX1ZBTClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAodHlwZSA9PSBjZmdfdHlwZSkge1xcbitcXHRcXHRcXHRpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcXHUwMDI2IGlvcmVzb3VyY2VfdHlwZXMpIHtcXG4rXFx0XFx0XFx0XFx0KmJhcnMgfD0gKDEgXFx1MDAzY1xcdTAwM2MgYmFyKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHBvcztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIGludCBvZmYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyICpiYXJfb2ZmKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHR2b2lkIF9faW9tZW0gKnA7XFxuK1xcdHUzMiBvZmZzZXQ7XFxuK1xcdHUzMiBsZW5ndGg7XFxuK1xcdHU4IGJhcjtcXG4rXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXFx1MDAyNmJhcik7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbitcXHRcXHRcXHQgICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRvZmZzZXQpLCBcXHUwMDI2b2Zmc2V0KTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGxlbmd0aCksIFxcdTAwMjZsZW5ndGgpO1xcbitcXG4rXFx0aWYgKGJhcl9vZmYpXFxuK1xcdFxcdCpiYXJfb2ZmID0gb2Zmc2V0O1xcbitcXG4rXFx0aWYgKGxlbmd0aCBcXHUwMDNjPSBzdGFydCkge1xcbitcXHRcXHRkZXZfZXJyKGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiYmFkIGNhcGFiaWxpdHkgbGVuICV1IChcXHUwMDNlJXUgZXhwZWN0ZWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRsZW5ndGgsIHN0YXJ0KTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChsZW5ndGggLSBzdGFydCBcXHUwMDNjIG1pbmxlbikge1xcbitcXHRcXHRkZXZfZXJyKGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiYmFkIGNhcGFiaWxpdHkgbGVuICV1IChcXHUwMDNlPSV6dSBleHBlY3RlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGxlbmd0aCwgbWlubGVuKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGxlbmd0aCAtPSBzdGFydDtcXG4rXFx0aWYgKHN0YXJ0ICsgb2Zmc2V0IFxcdTAwM2Mgb2Zmc2V0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJtYXAgd3JhcC1hcm91bmQgJXUrJXVcXFxcblxcXCIsIHN0YXJ0LCBvZmZzZXQpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0b2Zmc2V0ICs9IHN0YXJ0O1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwMjYgKGFsaWduIC0gMSkpIHtcXG4rXFx0XFx0ZGV2X2VycihkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIm9mZnNldCAldSBub3QgYWxpZ25lZCB0byAldVxcXFxuXFxcIiwgb2Zmc2V0LCBhbGlnbik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobGVuZ3RoIFxcdTAwM2Ugc2l6ZSlcXG4rXFx0XFx0bGVuZ3RoID0gc2l6ZTtcXG4rXFxuK1xcdGlmIChsZW4pXFxuK1xcdFxcdCpsZW4gPSBsZW5ndGg7XFxuK1xcbitcXHRpZiAobWlubGVuICsgb2Zmc2V0IFxcdTAwM2MgbWlubGVuIHx8XFxuK1xcdCAgICBtaW5sZW4gKyBvZmZzZXQgXFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcXG4rXFx0XFx0ZGV2X2VycihkaF9kZXYtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcIm1hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bWlubGVuLCBvZmZzZXQsIGJhcixcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHAgPSBwY2lfaW9tYXBfcmFuZ2UocGRldiwgYmFyLCBvZmZzZXQsIGxlbmd0aCk7XFxuK1xcdGlmICghcCkge1xcbitcXHRcXHRkZXZfZXJyKGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwidW5hYmxlIHRvIG1hcCBjdXN0b20gcXVldWUgJXVAJXUgb24gYmFyICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRsZW5ndGgsIG9mZnNldCwgYmFyKTtcXG4rXFx0fSBlbHNlIGlmIChwYSkge1xcbitcXHRcXHQqcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSArIG9mZnNldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHA7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXFx1MDAzZXBkZXY7XFxuK1xcdGludCBjb21tb247XFxuK1xcbitcXHQvKiBjaGVjayBmb3IgYSBjb21tb24gY29uZmlnOiBpZiBub3QsIHVzZSBsZWdhY3kgbW9kZSAoYmFyIDApLiAqL1xcbitcXHRjb21tb24gPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZW1vZGVybl9iYXJzKTtcXG4rXFx0aWYgKCFjb21tb24pIHtcXG4rXFx0XFx0ZGV2X2VycihkaF9kZXYtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcIm1pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFxuK1xcdHBmX2Rldi1cXHUwMDNlY29tbW9uID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eShkaF9kZXYsIGNvbW1vbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0WlhESF9QRl9BTElHTjQsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdE5VTEwsIE5VTEwsIE5VTEwpO1xcbitcXHRpZiAoIXBmX2Rldi1cXHUwMDNlY29tbW9uKSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwZl9kZXYtXFx1MDAzZWNvbW1vbiBpcyBudWxsXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHR1MzIgbm90aWZ5X2xlbmd0aDtcXG4rXFx0dTMyIG5vdGlmeV9vZmZzZXQ7XFxuK1xcdGludCBub3RpZnk7XFxuK1xcbitcXHQvKiBJZiBjb21tb24gaXMgdGhlcmUsIHRoZXNlIHNob3VsZCBiZSB0b28uLi4gKi9cXG4rXFx0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vtb2Rlcm5fYmFycyk7XFxuK1xcdGlmICghbm90aWZ5KSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJtaXNzaW5nIG5vdGlmeSBjZmcgY2FwYWJpbGl0eVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcXG4rXFx0XFx0XFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXFxuK1xcdFxcdFxcdFxcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXFxuK1xcdFxcdFxcdTAwMjZwZl9kZXYtXFx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcik7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbitcXHRcXHRcXHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcXG4rXFx0XFx0XFx0XFx0Y2FwLmxlbmd0aCksIFxcdTAwMjZub3RpZnlfbGVuZ3RoKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxcbitcXHRcXHRcXHRcXHRjYXAub2Zmc2V0KSwgXFx1MDAyNm5vdGlmeV9vZmZzZXQpO1xcbitcXG4rXFx0LyogV2UgZG9uJ3Qga25vdyBob3cgbWFueSBWUXMgd2UnbGwgbWFwLCBhaGVhZCBvZiB0aGUgdGltZS5cXG4rXFx0ICogSWYgbm90aWZ5IGxlbmd0aCBpcyBzbWFsbCwgbWFwIGl0IGFsbCBub3cuIE90aGVyd2lzZSxcXG4rXFx0ICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5vdGlmeV9sZW5ndGggKyAobm90aWZ5X29mZnNldCAlIFBBR0VfU0laRSkgXFx1MDAzYz0gUEFHRV9TSVpFKSB7XFxuK1xcdFxcdHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KGRoX2Rldiwgbm90aWZ5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFpYREhfUEZfTUFQX01JTkxFTjIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBaWERIX1BGX0FMSUdOMiwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5vdGlmeV9sZW5ndGgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vub3RpZnlfbGVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlbm90aWZ5X3BhLCBOVUxMKTtcXG4rXFx0XFx0aWYgKCFwZl9kZXYtXFx1MDAzZW5vdGlmeV9iYXNlKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwZl9kZXYtXFx1MDAzZW5vdGlmeV9iYXNlIGlzIG51bGxcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwZl9kZXYtXFx1MDAzZW5vdGlmeV9tYXBfY2FwID0gbm90aWZ5O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cXHUwMDNlcGRldjtcXG4rXFx0aW50IGRldmljZTtcXG4rXFxuK1xcdC8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkgbWFuZGF0b3J5IGZvclxcbitcXHQgKiBkZXZpY2VzIHRoYXQgaGF2ZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cXG4rXFx0ICovXFxuK1xcdGRldmljZSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfREVWSUNFX0NGRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlbW9kZXJuX2JhcnMpO1xcbitcXG4rXFx0Lyogd2UgZG9uJ3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLFxcbitcXHQgKiBidXQgUEFHRV9TSVpFIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGFsbCBleGlzdGluZyBkZXZpY2VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGRldmljZSkge1xcbitcXHRcXHRwZl9kZXYtXFx1MDAzZWRldmljZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBkZXZpY2UsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2VkZXZpY2VfbGVuLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlZGV2X2NmZ19iYXJfb2ZmKTtcXG4rXFx0XFx0aWYgKCFwZl9kZXYtXFx1MDAzZWRldmljZSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2VkZXZpY2UgaXMgbnVsbFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXFx1MDAzZXBkZXY7XFxuK1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2VkZXZpY2UpXFxuK1xcdFxcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlZGV2aWNlKTtcXG4rXFx0aWYgKHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpXFxuK1xcdFxcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpO1xcbitcXHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXFx1MDAzZWNvbW1vbik7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXFx1MDAzZXBkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9tYXBfbm90aWZ5O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX2RldmljZV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9tYXBfZGV2aWNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9tYXBfZGV2aWNlOlxcbitcXHRpZiAocGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSk7XFxuK2Vycl9tYXBfbm90aWZ5OlxcbitcXHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXFx1MDAzZWNvbW1vbik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3UxNiB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxcbitcXHRcXHRcXHRcXHQgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKHBmX2Rldi1cXHUwMDNlcGFja2VkX3N0YXR1cylcXG4rXFx0XFx0aW93cml0ZTE2KHBoeV9pbmRleCwgXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VxdWV1ZV9zZWxlY3QpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGlvd3JpdGUxNihpbmRleCwgXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VxdWV1ZV9zZWxlY3QpO1xcbitcXG4rXFx0cmV0dXJuIGlvcmVhZDE2KFxcdTAwMjZwZl9kZXYtXFx1MDAzZWNvbW1vbi1cXHUwMDNlcXVldWVfbm90aWZ5X29mZik7XFxuK31cXG4rXFxuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfdnFfbm90aWZ5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4LFxcbitcXHRcXHRcXHRcXHQgICAgIHJlc291cmNlX3NpemVfdCAqcGEpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcdHUxNiBvZmY7XFxuK1xcbitcXHRvZmYgPSB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKGRoX2RldiwgcGh5X2luZGV4LCBpbmRleCk7XFxuK1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSkge1xcbitcXHRcXHQvKiBvZmZzZXQgc2hvdWxkIG5vdCB3cmFwICovXFxuK1xcdFxcdGlmICgodTY0KW9mZiAqXFxuK1xcdFxcdFxcdHBmX2Rldi1cXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyICsgMiBcXHUwMDNlIHBmX2Rldi1cXHUwMDNlbm90aWZ5X2xlbikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGRoX2Rldi1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXFwiYmFkIG5vdGlmaWNhdGlvbiBvZmZzZXQgJXUgKHggJXUpIGZvciBxdWV1ZSAldSBcXHUwMDNlICV6dVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0b2ZmLCBwZl9kZXYtXFx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllciwgcGh5X2luZGV4LFxcbitcXHRcXHRcXHRcXHRwZl9kZXYtXFx1MDAzZW5vdGlmeV9sZW4pO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHBhKVxcbitcXHRcXHRcXHQqcGEgPSBwZl9kZXYtXFx1MDAzZW5vdGlmeV9wYSArIG9mZiAqIHBmX2Rldi1cXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyO1xcbitcXG4rXFx0XFx0cmV0dXJuIHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UgKyBvZmYgKiBwZl9kZXYtXFx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0dXJuIHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBwZl9kZXYtXFx1MDAzZW5vdGlmeV9tYXBfY2FwLCAyLCAyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBvZmYgKiBwZl9kZXYtXFx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgMiwgTlVMTCwgcGEsIE5VTEwpO1xcbitcXHR9XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl91bm1hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHZvaWQgX19pb21lbSAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmICghcGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAoZGhfZGV2LVxcdTAwM2VwZGV2LCBwcml2KTtcXG4rfVxcbitcXG4rdm9pZCB6eGRoX3BmX3NldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4IHN0YXR1cylcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlvd3JpdGU4KHN0YXR1cywgXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VkZXZpY2Vfc3RhdHVzKTtcXG4rfVxcbitcXG4rdTggenhkaF9wZl9nZXRfc3RhdHVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0cmV0dXJuIGlvcmVhZDgoXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VkZXZpY2Vfc3RhdHVzKTtcXG4rfVxcbitcXG4rdTggenhkaF9wZl9nZXRfY2ZnX2dlbihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dTggY29uZmlnX2dlbmVyYXRpb247XFxuK1xcbitcXHRjb25maWdfZ2VuZXJhdGlvbiA9IGlvcmVhZDgoXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2Vjb25maWdfZ2VuZXJhdGlvbik7XFxuK1xcbitcXHRyZXR1cm4gY29uZmlnX2dlbmVyYXRpb247XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9nZXRfdmZfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjLCBpbnQgdmZfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcdHUzMiBERVZfTUFDX0w7XFxuK1xcdHUxNiBERVZfTUFDX0g7XFxuK1xcbitcXHRldGhfemVyb19hZGRyKG1hYyk7XFxuK1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSkge1xcbitcXHRcXHRERVZfTUFDX0wgPSBpb3JlYWQzMihwZl9kZXYtXFx1MDAzZXBmX3NyaW92X2NhcF9iYXNlICtcXG4rXFx0XFx0XFx0XFx0ICAgICAocGZfZGV2LVxcdTAwM2Vzcmlvdl9iYXJfc2l6ZSkgKiB2Zl9pZCArXFxuK1xcdFxcdFxcdFxcdCAgICAgcGZfZGV2LVxcdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpO1xcbitcXHRcXHRtYWNbMF0gPSBERVZfTUFDX0wgXFx1MDAyNiAweGZmO1xcbitcXHRcXHRtYWNbMV0gPSAoREVWX01BQ19MIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhmZjtcXG4rXFx0XFx0bWFjWzJdID0gKERFVl9NQUNfTCBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweGZmO1xcbitcXHRcXHRtYWNbM10gPSAoREVWX01BQ19MIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IDB4ZmY7XFxuK1xcdFxcdERFVl9NQUNfSCA9IGlvcmVhZDE2KHBmX2Rldi1cXHUwMDNlcGZfc3Jpb3ZfY2FwX2Jhc2UgK1xcbitcXHRcXHRcXHRcXHQgICAgICAocGZfZGV2LVxcdTAwM2Vzcmlvdl9iYXJfc2l6ZSkgKiB2Zl9pZCArXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBmX2Rldi1cXHUwMDNlZGV2X2NmZ19iYXJfb2ZmICtcXG4rXFx0XFx0XFx0XFx0ICAgICAgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKTtcXG4rXFx0XFx0bWFjWzRdID0gREVWX01BQ19IIFxcdTAwMjYgMHhmZjtcXG4rXFx0XFx0bWFjWzVdID0gKERFVl9NQUNfSCBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4ZmY7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZCB6eGRoX3BmX3NldF92Zl9tYWNfcmVnKHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2LFxcbitcXHRcXHRcXHQgICAgdTggKm1hYywgaW50IHZmX2lkKVxcbit7XFxuK1xcdHUzMiBERVZfTUFDX0w7XFxuK1xcdHUxNiBERVZfTUFDX0g7XFxuK1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSkge1xcbitcXHRcXHRERVZfTUFDX0wgPSBtYWNbMF0gfCAobWFjWzFdIFxcdTAwM2NcXHUwMDNjIDgpIHxcXG4rXFx0XFx0XFx0XFx0XFx0KG1hY1syXSBcXHUwMDNjXFx1MDAzYyAxNikgfCAobWFjWzNdIFxcdTAwM2NcXHUwMDNjIDI0KTtcXG4rXFx0XFx0REVWX01BQ19IID0gbWFjWzRdIHwgKG1hY1s1XSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0aW93cml0ZTMyKERFVl9NQUNfTCwgKHBmX2Rldi1cXHUwMDNlcGZfc3Jpb3ZfY2FwX2Jhc2UgK1xcbitcXHRcXHRcXHQgIChwZl9kZXYtXFx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICtcXG4rXFx0XFx0XFx0ICBwZl9kZXYtXFx1MDAzZWRldl9jZmdfYmFyX29mZikpO1xcbitcXHRcXHRpb3dyaXRlMTYoREVWX01BQ19ILCAocGZfZGV2LVxcdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSArXFxuK1xcdFxcdFxcdCAgKHBmX2Rldi1cXHUwMDNlc3Jpb3ZfYmFyX3NpemUpICogdmZfaWQgK1xcbitcXHRcXHRcXHQgIHBmX2Rldi1cXHUwMDNlZGV2X2NmZ19iYXJfb2ZmICtcXG4rXFx0XFx0XFx0ICBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVQpKTtcXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIHp4ZGhfcGZfc2V0X3ZmX21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYywgaW50IHZmX2lkKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0enhkaF9wZl9zZXRfdmZfbWFjX3JlZyhwZl9kZXYsIG1hYywgdmZfaWQpO1xcbit9XFxuK1xcbit2b2lkIHp4ZGhfc2V0X21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYylcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dTMyIERFVl9NQUNfTDtcXG4rXFx0dTE2IERFVl9NQUNfSDtcXG4rXFxuK1xcdGlmICghcGZfZGV2LVxcdTAwM2VkZXZpY2UpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdERFVl9NQUNfTCA9IG1hY1swXSB8IChtYWNbMV0gXFx1MDAzY1xcdTAwM2MgOCkgfCAobWFjWzJdIFxcdTAwM2NcXHUwMDNjIDE2KSB8IChtYWNbM10gXFx1MDAzY1xcdTAwM2MgMjQpO1xcbitcXHRERVZfTUFDX0ggPSBtYWNbNF0gfCAobWFjWzVdIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRpb3dyaXRlMzIoREVWX01BQ19MLCBwZl9kZXYtXFx1MDAzZWRldmljZSk7XFxuK1xcdGlvd3JpdGUxNihERVZfTUFDX0gsIHBmX2Rldi1cXHUwMDNlZGV2aWNlICsgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKTtcXG4rfVxcbitcXG4rdm9pZCB6eGRoX2dldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXFx1MDAzZXByaXY7XFxuK1xcdHUzMiBERVZfTUFDX0w7XFxuK1xcdHUxNiBERVZfTUFDX0g7XFxuK1xcbitcXHRpZiAoIXBmX2Rldi1cXHUwMDNlZGV2aWNlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRERVZfTUFDX0wgPSBpb3JlYWQzMihwZl9kZXYtXFx1MDAzZWRldmljZSk7XFxuK1xcdG1hY1swXSA9IERFVl9NQUNfTCBcXHUwMDI2IDB4ZmY7XFxuK1xcdG1hY1sxXSA9IChERVZfTUFDX0wgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweGZmO1xcbitcXHRtYWNbMl0gPSAoREVWX01BQ19MIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4ZmY7XFxuK1xcdG1hY1szXSA9IChERVZfTUFDX0wgXFx1MDAzZVxcdTAwM2UgMjQpIFxcdTAwMjYgMHhmZjtcXG4rXFx0REVWX01BQ19IID0gaW9yZWFkMTYocGZfZGV2LVxcdTAwM2VkZXZpY2UgKyBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVQpO1xcbitcXHRtYWNbNF0gPSBERVZfTUFDX0ggXFx1MDAyNiAweGZmO1xcbitcXHRtYWNbNV0gPSAoREVWX01BQ19IIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhmZjtcXG4rfVxcbitcXG4rdTY0IHp4ZGhfcGZfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHR1NjQgZGV2aWNlX2ZlYXR1cmU7XFxuK1xcbitcXHRpb3dyaXRlMzIoMCwgXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VkZXZpY2VfZmVhdHVyZV9zZWxlY3QpO1xcbitcXHRkZXZpY2VfZmVhdHVyZSA9IGlvcmVhZDMyKFxcdTAwMjZwZl9kZXYtXFx1MDAzZWNvbW1vbi1cXHUwMDNlZGV2aWNlX2ZlYXR1cmUpO1xcbitcXHRpb3dyaXRlMzIoMSwgXFx1MDAyNnBmX2Rldi1cXHUwMDNlY29tbW9uLVxcdTAwM2VkZXZpY2VfZmVhdHVyZV9zZWxlY3QpO1xcbitcXHRkZXZpY2VfZmVhdHVyZSB8PSAoKHU2NClpb3JlYWQzMihcXHUwMDI2cGZfZGV2LVxcdTAwM2Vjb21tb24tXFx1MDAzZWRldmljZV9mZWF0dXJlKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDNjXFx1MDAzYyAzMik7XFxuK1xcbitcXHRyZXR1cm4gZGV2aWNlX2ZlYXR1cmU7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU2NCBmZWF0dXJlcylcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlvd3JpdGUzMigwLCBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vjb21tb24tXFx1MDAzZWd1ZXN0X2ZlYXR1cmVfc2VsZWN0KTtcXG4rXFx0aW93cml0ZTMyKCh1MzIpZmVhdHVyZXMsIFxcdTAwMjZwZl9kZXYtXFx1MDAzZWNvbW1vbi1cXHUwMDNlZ3Vlc3RfZmVhdHVyZSk7XFxuK1xcdGlvd3JpdGUzMigxLCBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vjb21tb24tXFx1MDAzZWd1ZXN0X2ZlYXR1cmVfc2VsZWN0KTtcXG4rXFx0aW93cml0ZTMyKGZlYXR1cmVzIFxcdTAwM2VcXHUwMDNlIDMyLCBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vjb21tb24tXFx1MDAzZWd1ZXN0X2ZlYXR1cmUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXY7XFxuK1xcdHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFxcdTAwMjZkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCBkaF9jb3JlX2RldiksXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoIWRldmxpbmspIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspO1xcbitcXHRkaF9kZXYtXFx1MDAzZWRldmljZSA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdGRoX2Rldi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuK1xcdGRoX2Rldi1cXHUwMDNlZGV2bGluayA9IGRldmxpbms7XFxuK1xcbitcXHRwZl9kZXYgPSBkaF9jb3JlX2FsbG9jX3ByaXYoZGhfZGV2LCBzaXplb2YoKnBmX2RldikpO1xcbitcXHRpZiAoIXBmX2Rldikge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfcGZfZGV2O1xcbitcXHR9XFxuK1xcbitcXHRwZl9kZXYtXFx1MDAzZWJhcl9jaGFuX3ZhbGlkID0gZmFsc2U7XFxuK1xcdHBmX2Rldi1cXHUwMDNldmVwYSA9IGZhbHNlO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZkaF9kZXYtXFx1MDAzZWxvY2spO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwZl9kZXYtXFx1MDAzZWlycV9sb2NrKTtcXG4rXFxuK1xcdGRoX2Rldi1cXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcXG4rXFxuK1xcdHJldCA9IGRoX3BmX3BjaV9pbml0KGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZGhfcGZfcGNpX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfY2ZnX2luaXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9jZmdfaW5pdDpcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmRoX2Rldi1cXHUwMDNlbG9jayk7XFxuK1xcdGRoX2NvcmVfZnJlZV9wcml2KGRoX2Rldik7XFxuK2Vycl9wZl9kZXY6XFxuK1xcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkaF9kZXYpO1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcXG4rXFx0ZGhfcGZfcGNpX2Nsb3NlKGRoX2Rldik7XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBmX2Rldi1cXHUwMDNlaXJxX2xvY2spO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkaF9kZXYtXFx1MDAzZWxvY2spO1xcbitcXHRkaF9jb3JlX2ZyZWVfcHJpdihkaF9kZXYpO1xcbitcXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XFxuK1xcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKVxcbitcXHRcXHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XFxuK1xcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRoX3BmX2RyaXZlciA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwiZGluZ2hhaTEwZVxcXCIsXFxuK1xcdC5pZF90YWJsZSA9IGRoX3BmX3BjaV90YWJsZSxcXG4rXFx0LnByb2JlID0gZGhfcGZfcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSBkaF9wZl9yZW1vdmUsXFxuK1xcdC5zaHV0ZG93biA9IGRoX3BmX3NodXRkb3duLFxcbit9O1xcbitcXG4rbW9kdWxlX3BjaV9kcml2ZXIoZGhfcGZfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZGFhNzlhNmQ2ZjJhYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXFxuQEAgLTAsMCArMSwxMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQRiBoZWFkZXJcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9fWlhESF9FTl9QRl9IX19cXG4rI2RlZmluZSBfX1pYREhfRU5fUEZfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBaWERIX1BGX1ZFTkRPUl9JRFxcdDB4MWNmMlxcbisjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXFx0MHg4MDQwXFxuKyNkZWZpbmUgWlhESF9WRl9ERVZJQ0VfSURcXHQweDgwNDFcXG4rXFxuKy8qIENvbW1vbiBjb25maWd1cmF0aW9uICovXFxuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkdcXHQxXFxuKy8qIE5vdGlmaWNhdGlvbnMgKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1xcdDJcXG4rLyogSVNSIGFjY2VzcyAqL1xcbisjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHXFx0XFx0M1xcbisvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xcbisjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHXFx0NFxcbisvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfUENJX0NGR1xcdFxcdDVcXG4rXFxuKyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFxcdFxcdDB4NVxcbisjZGVmaW5lIFpYREhfUEZfQUxJR040XFx0XFx0XFx0NFxcbisjZGVmaW5lIFpYREhfUEZfQUxJR04yXFx0XFx0XFx0MlxcbisjZGVmaW5lIFpYREhfUEZfTUFQX01JTkxFTjJcXHRcXHQyXFxuK1xcbisjZGVmaW5lIFpYREhfREVWX01BQ19ISUdIX09GRlNFVFxcdDRcXG4rXFxuK2VudW0gZGhfY29yZWRldl90eXBlIHtcXG4rXFx0REhfQ09SRURFVl9QRixcXG4rXFx0REhfQ09SRURFVl9WRixcXG4rXFx0REhfQ09SRURFVl9TRixcXG4rXFx0REhfQ09SRURFVl9NUEZcXG4rfTtcXG4rXFxuK3N0cnVjdCBkZXZsaW5rO1xcbitcXG4rc3RydWN0IGRoX2NvcmVfZGV2IHtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xcbitcXHRlbnVtIGRoX2NvcmVkZXZfdHlwZSBjb3JlZGV2X3R5cGU7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIFByb3RlY3RzIGRldmljZSBjb25maWd1cmF0aW9uICovXFxuK1xcdHZvaWQgKnByaXY7XFxuK307XFxuK1xcbitzdHJ1Y3QgenhkaF9wZl9kZXZpY2Uge1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjb21tb247XFxuK1xcdC8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqL1xcbitcXHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXFxuK1xcdHZvaWQgX19pb21lbSAqZGV2aWNlO1xcbitcXHR2b2lkIF9faW9tZW0gKm5vdGlmeV9iYXNlO1xcbitcXHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xcbitcXHQvKiBQaHlzaWNhbCBiYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKi9cXG4rXFx0cmVzb3VyY2Vfc2l6ZV90IG5vdGlmeV9wYTtcXG4rXFx0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cXG4rXFx0c2l6ZV90IG5vdGlmeV9sZW47XFxuK1xcdHNpemVfdCBkZXZpY2VfbGVuO1xcbitcXHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xcbitcXHRzMzIgbm90aWZ5X21hcF9jYXA7XFxuK1xcdHUzMiBub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7XFxuK1xcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXFxuK1xcdHMzMiBtb2Rlcm5fYmFycztcXG4rXFx0dm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdO1xcbitcXHR1NjQgc3Jpb3ZfYmFyX3NpemU7XFxuK1xcdHUzMiBkZXZfY2ZnX2Jhcl9vZmY7XFxuK1xcdGJvb2wgcGFja2VkX3N0YXR1cztcXG4rXFx0Ym9vbCBiYXJfY2hhbl92YWxpZDtcXG4rXFx0Ym9vbCB2ZXBhO1xcbitcXHRzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7IC8qIFByb3RlY3RzIElSUSBvcGVyYXRpb25zICovXFxuK307XFxuK1xcbisjZGVmaW5lIEdFVF9DT1JFREVWX1RZUEUocGRldikgXFxcXFxcbitcXHQoKHBkZXYpLVxcdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcXG4rXFxuK3ZvaWQgKmRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgc2l6ZV90IHNpemUpO1xcbit2b2lkIGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcXG4rdm9pZCBkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IGRoX2NvcmVfZGV2ICpkZXYpO1xcbitpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcXG4rXFx0XFx0XFx0XFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycyk7XFxuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgaW50IG9mZixcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSxcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgKmJhcl9vZmYpO1xcbitpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbit2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbit1MTYgenhkaF9wZl9nZXRfcXVldWVfbm90aWZ5X29mZihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldixcXG4rXFx0XFx0XFx0XFx0IHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCk7XFxuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfdnFfbm90aWZ5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCxcXG4rXFx0XFx0XFx0XFx0ICAgICByZXNvdXJjZV9zaXplX3QgKnBhKTtcXG4rdm9pZCB6eGRoX3BmX3VubWFwX3ZxX25vdGlmeShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgdm9pZCBfX2lvbWVtICpwcml2KTtcXG4rdm9pZCB6eGRoX3BmX3NldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4IHN0YXR1cyk7XFxuK3U4IHp4ZGhfcGZfZ2V0X3N0YXR1cyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7XFxuK3U4IHp4ZGhfcGZfZ2V0X2NmZ19nZW4oc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbit2b2lkIHp4ZGhfcGZfZ2V0X3ZmX21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYywgaW50IHZmX2lkKTtcXG4rdm9pZCB6eGRoX3BmX3NldF92Zl9tYWNfcmVnKHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2LFxcbitcXHRcXHRcXHQgICAgdTggKm1hYywgaW50IHZmX2lkKTtcXG4rdm9pZCB6eGRoX3BmX3NldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZCk7XFxuK3ZvaWQgenhkaF9zZXRfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjKTtcXG4rdm9pZCB6eGRoX2dldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpO1xcbit1NjQgenhkaF9wZl9nZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xcbit2b2lkIHp4ZGhfcGZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1NjQgZmVhdHVyZXMpO1xcbitcXG4rI2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzA6MzcuODUyMTMwMzc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk3Mjk3MjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX1pURVwiLFxuICAgIFwiRElOR0hBSVwiLFxuICAgIFwiRElOR0hBSV9QRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRoX3BmX3Byb2JlXCIsXG4gICAgXCJkaF9wZl9yZW1vdmVcIixcbiAgICBcImRoX3BmX3BjaV9pbml0XCIsXG4gICAgXCJkaF9wZl9wY2lfY2xvc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGEgUENJIHByb2JlIGZ1bmN0aW9uIHdoaWNoIGluaXRpYWxpemVzIHRoZSBkZXZpY2UsIG1hcHMgUENJIG1lbW9yeSwgYW5kIHJlZ2lzdGVycyBhIGRldmxpbmsgaW5zdGFuY2UuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjlkYmE3MWEzYWFlMzUzYzU0NjQ0YjBmZjRlNGU4MmNlZWQ1NmZmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDE5OjMwOjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMmZiMWM3NWFmZDE2MzguLjczNjkyYjA5YmY3YmFiIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMjk0NDAsNiArMjk0NDAsMTIgQEAgUzpcdE1haW50YWluZWRcbiBUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXdhaS9zb3VuZC5naXRcbiBGOlx0c291bmQvaGRhL2NvZGVjcy9zZW5hcnl0ZWNoLmNcbiBcbitaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVJcbitNOlx0SnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVxuK0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL1xuK1xuIFRIRSBSRVNUXG4gTTpcdExpbnVzIFRvcnZhbGRzIFx1MDAzY3RvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnXHUwMDNlXG4gTDpcdGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuaW5kZXggYjhmNzBlMmExNzYzYWQuLmMyYjY5OTZiMGNmZTFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuQEAgLTE4OCw1ICsxODgsNiBAQCBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcIlxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXCJcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcIlxuK3NvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXCJcbiBcbiBlbmRpZiAjIEVUSEVSTkVUXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuaW5kZXggNTczNDRmZWM2Y2UwNDcuLmEzNGJjYmQ0ZGY0ZTkyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG5AQCAtMTA0LDMgKzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgKz0geGlyY29tL1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1NZTk9QU1lTKSArPSBzeW5vcHN5cy9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9QRU5TQU5ETykgKz0gcGVuc2FuZG8vXG4gb2JqLSQoQ09ORklHX09BX1RDNikgKz0gb2FfdGM2Lm9cbitvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9aVEUpICs9IHp0ZS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI5NWMyZmM3ZGI3N2EyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xuQEAgLTAsMCArMSwyMCBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIFpURSBkcml2ZXIgY29uZmlndXJhdGlvblxuKyNcbitcbitjb25maWcgTkVUX1ZFTkRPUl9aVEVcbisgICAgYm9vbCBcIlpURSBkZXZpY2VzXCJcbisgICAgZGVmYXVsdCB5XG4rICAgIGhlbHBcbisgICAgICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbisgICAgICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuKyAgICAgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbisgICAgICB0aGUgcXVlc3Rpb25zIGFib3V0IFp0ZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZFxuKyAgICAgIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4rXG4raWYgTkVUX1ZFTkRPUl9aVEVcbitcbitzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXCJcbitcbitlbmRpZiAjIE5FVF9WRU5ET1JfWlRFXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNkOTkyOWI2MTU1OWM2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGVcbkBAIC0wLDAgKzEsNiBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIE1ha2VmaWxlIGZvciB0aGUgWlRFIGRldmljZSBkcml2ZXJzXG4rI1xuK1xuK29iai0kKENPTkZJR19ESU5HSEFJKSArPSBkaW5naGFpL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjEyMWJlM2JmNzcwN2ZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5AQCAtMCwwICsxLDM0IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI1xuKyMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbisjXG4rXG4rY29uZmlnIERJTkdIQUlcbisgICAgYm9vbCBcIlpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclwiXG4rICAgIGRlcGVuZHMgb24gUENJXG4rICAgIHNlbGVjdCBORVRfREVWTElOS1xuKyAgICBoZWxwXG4rICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy5cbitcbisgICAgICBEaW5nSGFpIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBFdGhlcm5ldCBjb250cm9sbGVyIHRoYXQgc3VwcG9ydHNcbisgICAgICBtdWx0aXBsZSBmZWF0dXJlcyBpbmNsdWRpbmcgaGFyZHdhcmUgb2ZmbG9hZGluZywgU1ItSU9WLCBhbmRcbisgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuXG4rXG4rICAgICAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gc2VsZWN0IHNwZWNpZmljIGRyaXZlciB2YXJpYW50cyBiZWxvdy5cbitcbisgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuK2lmIERJTkdIQUlcbitcbitjb25maWcgRElOR0hBSV9QRlxuKyAgICB0cmlzdGF0ZSBcIlpURSBEaW5nSGFpIFBGIChQaHlzaWNhbCBGdW5jdGlvbikgZHJpdmVyXCJcbisgICAgaGVscFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIFBDSSBFeHByZXNzIEV0aGVybmV0XG4rICAgICAgYWRhcHRlcnMgKFBGKS5cbitcbisgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4rICAgICAgd2lsbCBiZSBuYW1lZCBkaW5naGFpMTBlLlxuK1xuKyAgICAgIElmIHVuc3VyZSwgc2F5IE4uXG4rXG4rZW5kaWYgIyBESU5HSEFJXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mNTVhOGRlNTE4YmViM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbkBAIC0wLDAgKzEsMTAgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjXG4rIyBNYWtlZmlsZSBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXG4rI1xuK1xuK2NjZmxhZ3MteSArPSAtSSQoc3JjKVxuK1xuK29iai0kKENPTkZJR19ESU5HSEFJX1BGKSArPSBkaW5naGFpMTBlLm9cbitkaW5naGFpMTBlLXkgOj0gZW5fcGYub1xuK1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjUwNjdjNzNmZWQzM2NjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXG5AQCAtMCwwICsxLDcxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnNcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuKyAqL1xuK1xuKyNpZm5kZWYgX19ESF9RVUVVRV9IX19cbisjZGVmaW5lIF9fREhfUVVFVUVfSF9fXG4rXG4rLyogVmVjdG9yIHZhbHVlIHVzZWQgdG8gZGlzYWJsZSBNU0kgZm9yIHF1ZXVlICovXG4rI2RlZmluZSBaWERIX01TSV9OT19WRUNUT1IgICAgICAweGZmXG4rXG4rLyogU3RhdHVzIGJ5dGUgZm9yIGd1ZXN0IHRvIHJlcG9ydCBwcm9ncmVzcywgYW5kIHN5bmNocm9uaXplIGZlYXR1cmVzICovXG4rLyogV2UgaGF2ZSBzZWVuIGRldmljZSBhbmQgcHJvY2Vzc2VkIGdlbmVyaWMgZmllbGRzICovXG4rI2RlZmluZSBaWERIX0NPTkZJR19TX0FDS05PV0xFREdFIDFcbisvKiBXZSBoYXZlIGZvdW5kIGEgZHJpdmVyIGZvciB0aGUgZGV2aWNlLiAqL1xuKyNkZWZpbmUgWlhESF9DT05GSUdfU19EUklWRVIgICAgICAyXG4rLyogRHJpdmVyIGhhcyB1c2VkIGl0cyBwYXJ0cyBvZiB0aGUgY29uZmlnLCBhbmQgaXMgaGFwcHkgKi9cbisjZGVmaW5lIFpYREhfQ09ORklHX1NfRFJJVkVSX09LICAgNFxuKy8qIERyaXZlciBoYXMgZmluaXNoZWQgY29uZmlndXJpbmcgZmVhdHVyZXMgKi9cbisjZGVmaW5lIFpYREhfQ09ORklHX1NfRkVBVFVSRVNfT0sgOFxuKy8qIERldmljZSBlbnRlcmVkIGludmFsaWQgc3RhdGUsIGRyaXZlciBtdXN0IHJlc2V0IGl0ICovXG4rI2RlZmluZSBaWERIX0NPTkZJR19TX05FRURTX1JFU0VUIDB4NDBcbisvKiBXZSd2ZSBnaXZlbiB1cCBvbiB0aGlzIGRldmljZSAqL1xuKyNkZWZpbmUgWlhESF9DT05GSUdfU19GQUlMRUQgICAgICAweDgwXG4rXG4rLyogVGhpcyBpcyB0aGUgUENJIGNhcGFiaWxpdHkgaGVhZGVyOiAqL1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xuK1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuK1x0X191OCBjYXBfbmV4dDtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IG5leHQgcHRyLiAqL1xuK1x0X191OCBjYXBfbGVuO1x0XHQvKiBHZW5lcmljIFBDSSBmaWVsZDogY2FwYWJpbGl0eSBsZW5ndGggKi9cbitcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbitcdF9fdTggYmFyO1x0XHQvKiBXaGVyZSB0byBmaW5kIGl0LiAqL1xuK1x0X191OCBpZDtcdFx0LyogTXVsdGlwbGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGUgKi9cbitcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4rXHRfX2xlMzIgb2Zmc2V0O1x0XHQvKiBPZmZzZXQgd2l0aGluIGJhci4gKi9cbitcdF9fbGUzMiBsZW5ndGg7XHRcdC8qIExlbmd0aCBvZiB0aGUgc3RydWN0dXJlLCBpbiBieXRlcy4gKi9cbit9O1xuK1xuKy8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cbitzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4rXHQvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgZ3Vlc3RfZmVhdHVyZV9zZWxlY3Q7IC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBndWVzdF9mZWF0dXJlO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBudW1fcXVldWVzO1x0XHQvKiByZWFkLW9ubHkgKi9cbitcdF9fdTggZGV2aWNlX3N0YXR1cztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuK1xuK1x0LyogQWJvdXQgYSBzcGVjaWZpYyB2aXJ0cXVldWUuICovXG4rXHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgcXVldWVfc2l6ZTtcdFx0LyogcmVhZC13cml0ZSwgcG93ZXIgb2YgMi4gKi9cbitcdF9fbGUxNiBxdWV1ZV9tc2l4X3ZlY3RvcjtcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9ub3RpZnlfb2ZmO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgcXVldWVfZGVzY19sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBxdWV1ZV9hdmFpbF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2F2YWlsX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX3VzZWRfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbit9O1xuK1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwIHtcbitcdHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwO1xuK1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbit9O1xuK1xuKyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY4NTlmZDQ3MmE4NmZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5AQCAtMCwwICsxLDY0MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFwiZW5fcGYuaFwiXG4rI2luY2x1ZGUgXCJkaF9xdWV1ZS5oXCJcbitcbitNT0RVTEVfQVVUSE9SKFwiSnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZGhfcGZfZGV2bGlua19vcHMgPSB7fTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGhfcGZfcGNpX3RhYmxlW10gPSB7XG4rXHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfUEZfREVWSUNFX0lEKSB9LFxuK1x0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1ZGX0RFVklDRV9JRCkgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRoX3BmX3BjaV90YWJsZSk7XG4rXG4rdm9pZCAqZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCBzaXplX3Qgc2l6ZSlcbit7XG4rXHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbitcbitcdGlmIChwcml2KVxuK1x0XHRkaF9kZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXHRyZXR1cm4gcHJpdjtcbit9XG4rXG4rdm9pZCBkaF9jb3JlX2ZyZWVfcHJpdihzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldilcbit7XG4rXHRrZnJlZShkaF9kZXYtXHUwMDNlcHJpdik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZGhfcGZfcGNpX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRwY2lfc2V0X2RydmRhdGEoZGV2LVx1MDAzZXBkZXYsIGRldik7XG4rXG4rXHRyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYtXHUwMDNlcGRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldmljZSwgXCJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi1cdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSyg2NCkpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldi1cdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSygzMikpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2aWNlLCBcImRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRcdGdvdG8gZXJyX3BjaTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0ID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhkZXYtXHUwMDNlcGRldixcbitcdFx0XHRcdFx0ICAgcGNpX3NlbGVjdF9iYXJzKGRldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXG4rXHRcdFx0XHRcdCAgIFwiZGgtcGZcIik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldmljZSwgXCJwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zIGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfcGNpO1xuK1x0fVxuK1xuK1x0cGNpX3NldF9tYXN0ZXIoZGV2LVx1MDAzZXBkZXYpO1xuK1x0cmV0ID0gcGNpX3NhdmVfc3RhdGUoZGV2LVx1MDAzZXBkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXZpY2UsIFwicGNpX3NhdmVfc3RhdGUgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbitcdH1cbitcbitcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhkZXYtXHUwMDNlcGRldiwgMCkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXZpY2UsIFwiQkFSIDAgaXMgbm90IGFuIE1NSU8gcmVzb3VyY2VcXG5cIik7XG4rXHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuK1x0fVxuK1xuK1x0cGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gPVxuK1x0XHRpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtXHUwMDNlcGRldiwgMCksXG4rXHRcdFx0cGNpX3Jlc291cmNlX2xlbihkZXYtXHUwMDNlcGRldiwgMCkpO1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSkge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXZpY2UsIFwiZGggcGYgcGNpIGlvcmVtYXAgZmFpbGVkXFxuXCIpO1xuK1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9wY2lfc2F2ZV9zdGF0ZTpcbitcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LVx1MDAzZXBkZXYsXG4rXHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyhkZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcbitlcnJfcGNpOlxuK1x0cGNpX2Rpc2FibGVfZGV2aWNlKGRldi1cdTAwM2VwZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3ZvaWQgZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCBkaF9jb3JlX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGV2LVx1MDAzZXByaXY7XG4rXG4rXHRpb3VubWFwKHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKTtcbitcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoZGV2LVx1MDAzZXBkZXYsXG4rXHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyhkZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcbitcdHBjaV9kaXNhYmxlX2RldmljZShkZXYtXHUwMDNlcGRldik7XG4rfVxuK1xuK2ludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxuK1x0XHRcdFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycylcbit7XG4rXHRpbnQgcG9zO1xuK1x0dTggdHlwZTtcbitcdHU4IGJhcjtcbitcbitcdGZvciAocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOyBwb3MgXHUwMDNlIDA7XG4rXHQgICAgIHBvcyA9IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eShwZGV2LCBwb3MsIFBDSV9DQVBfSURfVk5EUikpIHtcbitcdFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcbitcdFx0XHRcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbitcdFx0XHRcdFx0XHRcdGNmZ190eXBlKSwgXHUwMDI2dHlwZSk7XG4rXHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4rXHRcdFx0XHQgICAgIHBvcyArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFx1MDAyNmJhcik7XG4rXG4rXHRcdC8qIGlnbm9yZSBzdHJ1Y3R1cmVzIHdpdGggcmVzZXJ2ZWQgQkFSIHZhbHVlcyAqL1xuK1x0XHRpZiAoYmFyIFx1MDAzZSBaWERIX1BGX01BWF9CQVJfVkFMKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAodHlwZSA9PSBjZmdfdHlwZSkge1xuK1x0XHRcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpIFx1MDAyNiBpb3Jlc291cmNlX3R5cGVzKSB7XG4rXHRcdFx0XHQqYmFycyB8PSAoMSBcdTAwM2NcdTAwM2MgYmFyKTtcbitcdFx0XHRcdHJldHVybiBwb3M7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCBpbnQgb2ZmLFxuK1x0XHRcdFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXG4rXHRcdFx0XHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXG4rXHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuK1x0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXHUwMDNlcGRldjtcbitcdHZvaWQgX19pb21lbSAqcDtcbitcdHUzMiBvZmZzZXQ7XG4rXHR1MzIgbGVuZ3RoO1xuK1x0dTggYmFyO1xuK1xuK1x0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcbitcdFx0XHQgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFx1MDAyNmJhcik7XG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbitcdFx0XHQgICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxuK1x0XHRcdFx0XHRcdG9mZnNldCksIFx1MDAyNm9mZnNldCk7XG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbitcdFx0XHQgICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxuK1x0XHRcdFx0XHRcdGxlbmd0aCksIFx1MDAyNmxlbmd0aCk7XG4rXG4rXHRpZiAoYmFyX29mZilcbitcdFx0KmJhcl9vZmYgPSBvZmZzZXQ7XG4rXG4rXHRpZiAobGVuZ3RoIFx1MDAzYz0gc3RhcnQpIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcImJhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlJXUgZXhwZWN0ZWQpXFxuXCIsXG4rXHRcdFx0bGVuZ3RoLCBzdGFydCk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0aWYgKGxlbmd0aCAtIHN0YXJ0IFx1MDAzYyBtaW5sZW4pIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcImJhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlPSV6dSBleHBlY3RlZClcXG5cIixcbitcdFx0XHRsZW5ndGgsIG1pbmxlbik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0bGVuZ3RoIC09IHN0YXJ0O1xuK1x0aWYgKHN0YXJ0ICsgb2Zmc2V0IFx1MDAzYyBvZmZzZXQpIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcIm1hcCB3cmFwLWFyb3VuZCAldSsldVxcblwiLCBzdGFydCwgb2Zmc2V0KTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRvZmZzZXQgKz0gc3RhcnQ7XG4rXHRpZiAob2Zmc2V0IFx1MDAyNiAoYWxpZ24gLSAxKSkge1xuK1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwib2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XFxuXCIsIG9mZnNldCwgYWxpZ24pO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdGlmIChsZW5ndGggXHUwMDNlIHNpemUpXG4rXHRcdGxlbmd0aCA9IHNpemU7XG4rXG4rXHRpZiAobGVuKVxuK1x0XHQqbGVuID0gbGVuZ3RoO1xuK1xuK1x0aWYgKG1pbmxlbiArIG9mZnNldCBcdTAwM2MgbWlubGVuIHx8XG4rXHQgICAgbWlubGVuICsgb2Zmc2V0IFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwibWFwIGN1c3RvbSBxdWV1ZSAlenVAJXUgb3V0IG9mIHJhbmdlIG9uIGJhciAldSBsZW5ndGggJWx1XFxuXCIsXG4rXHRcdFx0bWlubGVuLCBvZmZzZXQsIGJhcixcbitcdFx0XHQodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHAgPSBwY2lfaW9tYXBfcmFuZ2UocGRldiwgYmFyLCBvZmZzZXQsIGxlbmd0aCk7XG4rXHRpZiAoIXApIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInVuYWJsZSB0byBtYXAgY3VzdG9tIHF1ZXVlICV1QCV1IG9uIGJhciAldVxcblwiLFxuK1x0XHRcdGxlbmd0aCwgb2Zmc2V0LCBiYXIpO1xuK1x0fSBlbHNlIGlmIChwYSkge1xuK1x0XHQqcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSArIG9mZnNldDtcbitcdH1cbitcbitcdHJldHVybiBwO1xuK31cbitcbitpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHRpbnQgY29tbW9uO1xuK1xuK1x0LyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi9cbitcdGNvbW1vbiA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfQ09NTU9OX0NGRyxcbitcdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXG4rXHRcdFx0XHRcdCAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW1vZGVybl9iYXJzKTtcbitcdGlmICghY29tbW9uKSB7XG4rXHRcdGRldl9lcnIoZGhfZGV2LVx1MDAzZWRldmljZSxcbitcdFx0XHRcIm1pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHBmX2Rldi1cdTAwM2Vjb21tb24gPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KGRoX2RldiwgY29tbW9uLFxuK1x0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXG4rXHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsXG4rXHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbitcdFx0XHRcdFx0XHROVUxMLCBOVUxMLCBOVUxMKTtcbitcdGlmICghcGZfZGV2LVx1MDAzZWNvbW1vbikge1xuK1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwicGZfZGV2LVx1MDAzZWNvbW1vbiBpcyBudWxsXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHR1MzIgbm90aWZ5X2xlbmd0aDtcbitcdHUzMiBub3RpZnlfb2Zmc2V0O1xuK1x0aW50IG5vdGlmeTtcbitcbitcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xuK1x0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxuK1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcbitcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuK1x0aWYgKCFub3RpZnkpIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcIm1pc3Npbmcgbm90aWZ5IGNmZyBjYXBhYmlsaXR5XFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuK1x0XHRcdFx0bm90aWZ5X29mZl9tdWx0aXBsaWVyKSxcbitcdFx0XHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcik7XG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbitcdFx0XHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbitcdFx0XHRcdGNhcC5sZW5ndGgpLCBcdTAwMjZub3RpZnlfbGVuZ3RoKTtcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuK1x0XHRcdFx0Y2FwLm9mZnNldCksIFx1MDAyNm5vdGlmeV9vZmZzZXQpO1xuK1xuK1x0LyogV2UgZG9uJ3Qga25vdyBob3cgbWFueSBWUXMgd2UnbGwgbWFwLCBhaGVhZCBvZiB0aGUgdGltZS5cbitcdCAqIElmIG5vdGlmeSBsZW5ndGggaXMgc21hbGwsIG1hcCBpdCBhbGwgbm93LiBPdGhlcndpc2UsXG4rXHQgKiBtYXAgZWFjaCBWUSBpbmRpdmlkdWFsbHkgbGF0ZXIuXG4rXHQgKi9cbitcdGlmIChub3RpZnlfbGVuZ3RoICsgKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG4rXHRcdHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoZGhfZGV2LCBub3RpZnksXG4rXHRcdFx0XHRcdFx0XHQgICAgIFpYREhfUEZfTUFQX01JTkxFTjIsXG4rXHRcdFx0XHRcdFx0XHQgICAgWlhESF9QRl9BTElHTjIsIDAsXG4rXHRcdFx0XHRcdFx0XHQgICAgbm90aWZ5X2xlbmd0aCxcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X2xlbixcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X3BhLCBOVUxMKTtcbitcdFx0aWYgKCFwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpIHtcbitcdFx0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwicGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlIGlzIG51bGxcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHBmX2Rldi1cdTAwM2Vub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHRpbnQgZGV2aWNlO1xuK1xuK1x0LyogRGV2aWNlIGNhcGFiaWxpdHkgaXMgb25seSBtYW5kYXRvcnkgZm9yXG4rXHQgKiBkZXZpY2VzIHRoYXQgaGF2ZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cbitcdCAqL1xuK1x0ZGV2aWNlID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHLFxuK1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcbitcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuK1xuK1x0Lyogd2UgZG9uJ3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLFxuK1x0ICogYnV0IFBBR0VfU0laRSBpcyBtb3JlIHRoYW4gZW5vdWdoIGZvciBhbGwgZXhpc3RpbmcgZGV2aWNlcy5cbitcdCAqL1xuK1x0aWYgKGRldmljZSkge1xuK1x0XHRwZl9kZXYtXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eShkaF9kZXYsIGRldmljZSwgMCxcbitcdFx0XHRcdFx0XHRcdFpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsXG4rXHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2VkZXZpY2VfbGVuLCBOVUxMLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlZGV2X2NmZ19iYXJfb2ZmKTtcbitcdFx0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKSB7XG4rXHRcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBmX2Rldi1cdTAwM2VkZXZpY2UgaXMgbnVsbFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkaF9kZXYtXHUwMDNlcGRldjtcbitcbitcdGlmIChwZl9kZXYtXHUwMDNlZGV2aWNlKVxuK1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbitcdGlmIChwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpXG4rXHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSk7XG4rXHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbit9XG4rXG4raW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRoX2Rldi1cdTAwM2VwZGV2O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwienhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9tYXBfbm90aWZ5O1xuK1x0fVxuK1xuK1x0cmV0ID0genhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoZGhfZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfbWFwX2RldmljZTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9tYXBfZGV2aWNlOlxuK1x0aWYgKHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSlcbitcdFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKTtcbitlcnJfbWFwX25vdGlmeTpcbitcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vjb21tb24pO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rdTE2IHp4ZGhfcGZfZ2V0X3F1ZXVlX25vdGlmeV9vZmYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXG4rXHRcdFx0XHQgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXG4rXHRpZiAocGZfZGV2LVx1MDAzZXBhY2tlZF9zdGF0dXMpXG4rXHRcdGlvd3JpdGUxNihwaHlfaW5kZXgsIFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlcXVldWVfc2VsZWN0KTtcbitcdGVsc2VcbitcdFx0aW93cml0ZTE2KGluZGV4LCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZXF1ZXVlX3NlbGVjdCk7XG4rXG4rXHRyZXR1cm4gaW9yZWFkMTYoXHUwMDI2cGZfZGV2LVx1MDAzZWNvbW1vbi1cdTAwM2VxdWV1ZV9ub3RpZnlfb2ZmKTtcbit9XG4rXG4rdm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXG4rXHRcdFx0XHQgICAgdTE2IHBoeV9pbmRleCwgdTE2IGluZGV4LFxuK1x0XHRcdFx0ICAgICByZXNvdXJjZV9zaXplX3QgKnBhKVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXHR1MTYgb2ZmO1xuK1xuK1x0b2ZmID0genhkaF9wZl9nZXRfcXVldWVfbm90aWZ5X29mZihkaF9kZXYsIHBoeV9pbmRleCwgaW5kZXgpO1xuK1xuK1x0aWYgKHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSkge1xuK1x0XHQvKiBvZmZzZXQgc2hvdWxkIG5vdCB3cmFwICovXG4rXHRcdGlmICgodTY0KW9mZiAqXG4rXHRcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllciArIDIgXHUwMDNlIHBmX2Rldi1cdTAwM2Vub3RpZnlfbGVuKSB7XG4rXHRcdFx0ZGV2X2VycihkaF9kZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFx0XCJiYWQgbm90aWZpY2F0aW9uIG9mZnNldCAldSAoeCAldSkgZm9yIHF1ZXVlICV1IFx1MDAzZSAlenVcXG5cIixcbitcdFx0XHRcdG9mZiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllciwgcGh5X2luZGV4LFxuK1x0XHRcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9sZW4pO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChwYSlcbitcdFx0XHQqcGEgPSBwZl9kZXYtXHUwMDNlbm90aWZ5X3BhICsgb2ZmICogcGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcbitcbitcdFx0cmV0dXJuIHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSArIG9mZiAqIHBmX2Rldi1cdTAwM2Vub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXR1cm4genhkaF9wZl9tYXBfY2FwYWJpbGl0eShkaF9kZXYsIHBmX2Rldi1cdTAwM2Vub3RpZnlfbWFwX2NhcCwgMiwgMixcbitcdFx0XHRcdFx0ICAgICAgb2ZmICogcGZfZGV2LVx1MDAzZW5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcixcbitcdFx0XHRcdFx0ICAgICAgMiwgTlVMTCwgcGEsIE5VTEwpO1xuK1x0fVxuK31cbitcbit2b2lkIHp4ZGhfcGZfdW5tYXBfdnFfbm90aWZ5KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB2b2lkIF9faW9tZW0gKnByaXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmICghcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKVxuK1x0XHRwY2lfaW91bm1hcChkaF9kZXYtXHUwMDNlcGRldiwgcHJpdik7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9zZXRfc3RhdHVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCBzdGF0dXMpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcbitcdGlvd3JpdGU4KHN0YXR1cywgXHUwMDI2cGZfZGV2LVx1MDAzZWNvbW1vbi1cdTAwM2VkZXZpY2Vfc3RhdHVzKTtcbit9XG4rXG4rdTggenhkaF9wZl9nZXRfc3RhdHVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXG4rXHRyZXR1cm4gaW9yZWFkOChcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9zdGF0dXMpO1xuK31cbitcbit1OCB6eGRoX3BmX2dldF9jZmdfZ2VuKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXHR1OCBjb25maWdfZ2VuZXJhdGlvbjtcbitcbitcdGNvbmZpZ19nZW5lcmF0aW9uID0gaW9yZWFkOChcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWNvbmZpZ19nZW5lcmF0aW9uKTtcbitcbitcdHJldHVybiBjb25maWdfZ2VuZXJhdGlvbjtcbit9XG4rXG4rdm9pZCB6eGRoX3BmX2dldF92Zl9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMsIGludCB2Zl9pZClcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuK1x0dTMyIERFVl9NQUNfTDtcbitcdHUxNiBERVZfTUFDX0g7XG4rXG4rXHRldGhfemVyb19hZGRyKG1hYyk7XG4rXG4rXHRpZiAocGZfZGV2LVx1MDAzZXBmX3NyaW92X2NhcF9iYXNlKSB7XG4rXHRcdERFVl9NQUNfTCA9IGlvcmVhZDMyKHBmX2Rldi1cdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSArXG4rXHRcdFx0XHQgICAgIChwZl9kZXYtXHUwMDNlc3Jpb3ZfYmFyX3NpemUpICogdmZfaWQgK1xuK1x0XHRcdFx0ICAgICBwZl9kZXYtXHUwMDNlZGV2X2NmZ19iYXJfb2ZmKTtcbitcdFx0bWFjWzBdID0gREVWX01BQ19MIFx1MDAyNiAweGZmO1xuK1x0XHRtYWNbMV0gPSAoREVWX01BQ19MIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbitcdFx0bWFjWzJdID0gKERFVl9NQUNfTCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmO1xuK1x0XHRtYWNbM10gPSAoREVWX01BQ19MIFx1MDAzZVx1MDAzZSAyNCkgXHUwMDI2IDB4ZmY7XG4rXHRcdERFVl9NQUNfSCA9IGlvcmVhZDE2KHBmX2Rldi1cdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSArXG4rXHRcdFx0XHQgICAgICAocGZfZGV2LVx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICtcbitcdFx0XHRcdCAgICAgIHBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYgK1xuK1x0XHRcdFx0ICAgICAgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKTtcbitcdFx0bWFjWzRdID0gREVWX01BQ19IIFx1MDAyNiAweGZmO1xuK1x0XHRtYWNbNV0gPSAoREVWX01BQ19IIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbitcdH1cbit9XG4rXG4rdm9pZCB6eGRoX3BmX3NldF92Zl9tYWNfcmVnKHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2LFxuK1x0XHRcdCAgICB1OCAqbWFjLCBpbnQgdmZfaWQpXG4re1xuK1x0dTMyIERFVl9NQUNfTDtcbitcdHUxNiBERVZfTUFDX0g7XG4rXG4rXHRpZiAocGZfZGV2LVx1MDAzZXBmX3NyaW92X2NhcF9iYXNlKSB7XG4rXHRcdERFVl9NQUNfTCA9IG1hY1swXSB8IChtYWNbMV0gXHUwMDNjXHUwMDNjIDgpIHxcbitcdFx0XHRcdFx0KG1hY1syXSBcdTAwM2NcdTAwM2MgMTYpIHwgKG1hY1szXSBcdTAwM2NcdTAwM2MgMjQpO1xuK1x0XHRERVZfTUFDX0ggPSBtYWNbNF0gfCAobWFjWzVdIFx1MDAzY1x1MDAzYyA4KTtcbitcdFx0aW93cml0ZTMyKERFVl9NQUNfTCwgKHBmX2Rldi1cdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSArXG4rXHRcdFx0ICAocGZfZGV2LVx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICtcbitcdFx0XHQgIHBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpKTtcbitcdFx0aW93cml0ZTE2KERFVl9NQUNfSCwgKHBmX2Rldi1cdTAwM2VwZl9zcmlvdl9jYXBfYmFzZSArXG4rXHRcdFx0ICAocGZfZGV2LVx1MDAzZXNyaW92X2Jhcl9zaXplKSAqIHZmX2lkICtcbitcdFx0XHQgIHBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYgK1xuK1x0XHRcdCAgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKSk7XG4rXHR9XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9zZXRfdmZfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjLCBpbnQgdmZfaWQpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcbitcdHp4ZGhfcGZfc2V0X3ZmX21hY19yZWcocGZfZGV2LCBtYWMsIHZmX2lkKTtcbit9XG4rXG4rdm9pZCB6eGRoX3NldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHUzMiBERVZfTUFDX0w7XG4rXHR1MTYgREVWX01BQ19IO1xuK1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRERVZfTUFDX0wgPSBtYWNbMF0gfCAobWFjWzFdIFx1MDAzY1x1MDAzYyA4KSB8IChtYWNbMl0gXHUwMDNjXHUwMDNjIDE2KSB8IChtYWNbM10gXHUwMDNjXHUwMDNjIDI0KTtcbitcdERFVl9NQUNfSCA9IG1hY1s0XSB8IChtYWNbNV0gXHUwMDNjXHUwMDNjIDgpO1xuK1x0aW93cml0ZTMyKERFVl9NQUNfTCwgcGZfZGV2LVx1MDAzZWRldmljZSk7XG4rXHRpb3dyaXRlMTYoREVWX01BQ19ILCBwZl9kZXYtXHUwMDNlZGV2aWNlICsgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUKTtcbit9XG4rXG4rdm9pZCB6eGRoX2dldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHUzMiBERVZfTUFDX0w7XG4rXHR1MTYgREVWX01BQ19IO1xuK1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRERVZfTUFDX0wgPSBpb3JlYWQzMihwZl9kZXYtXHUwMDNlZGV2aWNlKTtcbitcdG1hY1swXSA9IERFVl9NQUNfTCBcdTAwMjYgMHhmZjtcbitcdG1hY1sxXSA9IChERVZfTUFDX0wgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmO1xuK1x0bWFjWzJdID0gKERFVl9NQUNfTCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmO1xuK1x0bWFjWzNdID0gKERFVl9NQUNfTCBcdTAwM2VcdTAwM2UgMjQpIFx1MDAyNiAweGZmO1xuK1x0REVWX01BQ19IID0gaW9yZWFkMTYocGZfZGV2LVx1MDAzZWRldmljZSArIFpYREhfREVWX01BQ19ISUdIX09GRlNFVCk7XG4rXHRtYWNbNF0gPSBERVZfTUFDX0ggXHUwMDI2IDB4ZmY7XG4rXHRtYWNbNV0gPSAoREVWX01BQ19IIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbit9XG4rXG4rdTY0IHp4ZGhfcGZfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2ID0gZGhfZGV2LVx1MDAzZXByaXY7XG4rXHR1NjQgZGV2aWNlX2ZlYXR1cmU7XG4rXG4rXHRpb3dyaXRlMzIoMCwgXHUwMDI2cGZfZGV2LVx1MDAzZWNvbW1vbi1cdTAwM2VkZXZpY2VfZmVhdHVyZV9zZWxlY3QpO1xuK1x0ZGV2aWNlX2ZlYXR1cmUgPSBpb3JlYWQzMihcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9mZWF0dXJlKTtcbitcdGlvd3JpdGUzMigxLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9mZWF0dXJlX3NlbGVjdCk7XG4rXHRkZXZpY2VfZmVhdHVyZSB8PSAoKHU2NClpb3JlYWQzMihcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWRldmljZV9mZWF0dXJlKVxuK1x0XHRcdFx0XHRcdFx1MDAzY1x1MDAzYyAzMik7XG4rXG4rXHRyZXR1cm4gZGV2aWNlX2ZlYXR1cmU7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU2NCBmZWF0dXJlcylcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldiA9IGRoX2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0aW93cml0ZTMyKDAsIFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlZ3Vlc3RfZmVhdHVyZV9zZWxlY3QpO1xuK1x0aW93cml0ZTMyKCh1MzIpZmVhdHVyZXMsIFx1MDAyNnBmX2Rldi1cdTAwM2Vjb21tb24tXHUwMDNlZ3Vlc3RfZmVhdHVyZSk7XG4rXHRpb3dyaXRlMzIoMSwgXHUwMDI2cGZfZGV2LVx1MDAzZWNvbW1vbi1cdTAwM2VndWVzdF9mZWF0dXJlX3NlbGVjdCk7XG4rXHRpb3dyaXRlMzIoZmVhdHVyZXMgXHUwMDNlXHUwMDNlIDMyLCBcdTAwMjZwZl9kZXYtXHUwMDNlY29tbW9uLVx1MDAzZWd1ZXN0X2ZlYXR1cmUpO1xuK31cbitcbitzdGF0aWMgaW50IGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXY7XG4rXHRzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldjtcbitcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuK1x0aW50IHJldDtcbitcbitcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFx1MDAyNmRoX3BmX2Rldmxpbmtfb3BzLCBzaXplb2Yoc3RydWN0IGRoX2NvcmVfZGV2KSxcbitcdFx0XHRcdFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdGlmICghZGV2bGluaykge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcImRoX3BmIGRldmxpbmsgYWxsb2MgZmFpbGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdGRoX2RldiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcbitcdGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdGRoX2Rldi1cdTAwM2VwZGV2ID0gcGRldjtcbitcdGRoX2Rldi1cdTAwM2VkZXZsaW5rID0gZGV2bGluaztcbitcbitcdHBmX2RldiA9IGRoX2NvcmVfYWxsb2NfcHJpdihkaF9kZXYsIHNpemVvZigqcGZfZGV2KSk7XG4rXHRpZiAoIXBmX2Rldikge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcImRoX3BmX2RldiBhbGxvYyBmYWlsZWRcXG5cIik7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZXJyX3BmX2RldjtcbitcdH1cbitcbitcdHBmX2Rldi1cdTAwM2ViYXJfY2hhbl92YWxpZCA9IGZhbHNlO1xuK1x0cGZfZGV2LVx1MDAzZXZlcGEgPSBmYWxzZTtcbitcdG11dGV4X2luaXQoXHUwMDI2ZGhfZGV2LVx1MDAzZWxvY2spO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuK1xuK1x0ZGhfZGV2LVx1MDAzZWNvcmVkZXZfdHlwZSA9IEdFVF9DT1JFREVWX1RZUEUocGRldik7XG4rXG4rXHRyZXQgPSBkaF9wZl9wY2lfaW5pdChkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcImRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4rXHR9XG4rXG4rXHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2NmZ19pbml0OlxuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkaF9kZXYtXHUwMDNlbG9jayk7XG4rXHRkaF9jb3JlX2ZyZWVfcHJpdihkaF9kZXYpO1xuK2Vycl9wZl9kZXY6XG4rXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBkaF9wZl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkaF9kZXYpO1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXHUwMDNlcHJpdjtcbitcbitcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcbitcdGRoX3BmX3BjaV9jbG9zZShkaF9kZXYpO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkaF9kZXYtXHUwMDNlbG9jayk7XG4rXHRkaF9jb3JlX2ZyZWVfcHJpdihkaF9kZXYpO1xuK1x0ZGV2bGlua19mcmVlKGRldmxpbmspO1xuK1x0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBkaF9wZl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXG4rXHRcdHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTtcbitcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRoX3BmX2RyaXZlciA9IHtcbitcdC5uYW1lID0gXCJkaW5naGFpMTBlXCIsXG4rXHQuaWRfdGFibGUgPSBkaF9wZl9wY2lfdGFibGUsXG4rXHQucHJvYmUgPSBkaF9wZl9wcm9iZSxcbitcdC5yZW1vdmUgPSBkaF9wZl9yZW1vdmUsXG4rXHQuc2h1dGRvd24gPSBkaF9wZl9zaHV0ZG93bixcbit9O1xuK1xuK21vZHVsZV9wY2lfZHJpdmVyKGRoX3BmX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWRhYTc5YTZkNmYyYWJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbkBAIC0wLDAgKzEsMTE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUEYgaGVhZGVyXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbisgKi9cbitcbisjaWZuZGVmIF9fWlhESF9FTl9QRl9IX19cbisjZGVmaW5lIF9fWlhESF9FTl9QRl9IX19cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbitcbisjZGVmaW5lIFpYREhfUEZfVkVORE9SX0lEXHQweDFjZjJcbisjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXHQweDgwNDBcbisjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lEXHQweDgwNDFcbitcbisvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkdcdDFcbisvKiBOb3RpZmljYXRpb25zICovXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1x0MlxuKy8qIElTUiBhY2Nlc3MgKi9cbisjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHXHRcdDNcbisvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkdcdDRcbisvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi9cbisjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHXHRcdDVcbitcbisjZGVmaW5lIFpYREhfUEZfTUFYX0JBUl9WQUxcdFx0MHg1XG4rI2RlZmluZSBaWERIX1BGX0FMSUdONFx0XHRcdDRcbisjZGVmaW5lIFpYREhfUEZfQUxJR04yXHRcdFx0MlxuKyNkZWZpbmUgWlhESF9QRl9NQVBfTUlOTEVOMlx0XHQyXG4rXG4rI2RlZmluZSBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVRcdDRcbitcbitlbnVtIGRoX2NvcmVkZXZfdHlwZSB7XG4rXHRESF9DT1JFREVWX1BGLFxuK1x0REhfQ09SRURFVl9WRixcbitcdERIX0NPUkVERVZfU0YsXG4rXHRESF9DT1JFREVWX01QRlxuK307XG4rXG4rc3RydWN0IGRldmxpbms7XG4rXG4rc3RydWN0IGRoX2NvcmVfZGV2IHtcbitcdHN0cnVjdCBkZXZpY2UgKmRldmljZTtcbitcdGVudW0gZGhfY29yZWRldl90eXBlIGNvcmVkZXZfdHlwZTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuK1x0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4rXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogUHJvdGVjdHMgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi9cbitcdHZvaWQgKnByaXY7XG4rfTtcbitcbitzdHJ1Y3QgenhkaF9wZl9kZXZpY2Uge1xuK1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uO1xuK1x0LyogRGV2aWNlLXNwZWNpZmljIGRhdGEgKG5vbi1sZWdhY3kgbW9kZSkgICovXG4rXHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXG4rXHR2b2lkIF9faW9tZW0gKmRldmljZTtcbitcdHZvaWQgX19pb21lbSAqbm90aWZ5X2Jhc2U7XG4rXHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xuK1x0LyogUGh5c2ljYWwgYmFzZSBvZiB2cSBub3RpZmljYXRpb25zICovXG4rXHRyZXNvdXJjZV9zaXplX3Qgbm90aWZ5X3BhO1xuK1x0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cbitcdHNpemVfdCBub3RpZnlfbGVuO1xuK1x0c2l6ZV90IGRldmljZV9sZW47XG4rXHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xuK1x0czMyIG5vdGlmeV9tYXBfY2FwO1xuK1x0dTMyIG5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcbitcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXG4rXHRzMzIgbW9kZXJuX2JhcnM7XG4rXHR2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07XG4rXHR1NjQgc3Jpb3ZfYmFyX3NpemU7XG4rXHR1MzIgZGV2X2NmZ19iYXJfb2ZmO1xuK1x0Ym9vbCBwYWNrZWRfc3RhdHVzO1xuK1x0Ym9vbCBiYXJfY2hhbl92YWxpZDtcbitcdGJvb2wgdmVwYTtcbitcdHN0cnVjdCBtdXRleCBpcnFfbG9jazsgLyogUHJvdGVjdHMgSVJRIG9wZXJhdGlvbnMgKi9cbit9O1xuK1xuKyNkZWZpbmUgR0VUX0NPUkVERVZfVFlQRShwZGV2KSBcXFxuK1x0KChwZGV2KS1cdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcbitcbit2b2lkICpkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHNpemVfdCBzaXplKTtcbit2b2lkIGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbit2b2lkIGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRldik7XG4raW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXG4rXHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTtcbit2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIGludCBvZmYsXG4rXHRcdFx0XHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcbitcdFx0XHRcdCAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSxcbitcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXG4rXHRcdFx0XHQgICAgIHUzMiAqYmFyX29mZik7XG4raW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbitpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuK2ludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7XG4rdm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcbitpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuK3UxNiB6eGRoX3BmX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LFxuK1x0XHRcdFx0IHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCk7XG4rdm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF92cV9ub3RpZnkoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXG4rXHRcdFx0XHQgICAgIHUxNiBwaHlfaW5kZXgsIHUxNiBpbmRleCxcbitcdFx0XHRcdCAgICAgcmVzb3VyY2Vfc2l6ZV90ICpwYSk7XG4rdm9pZCB6eGRoX3BmX3VubWFwX3ZxX25vdGlmeShzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldiwgdm9pZCBfX2lvbWVtICpwcml2KTtcbit2b2lkIHp4ZGhfcGZfc2V0X3N0YXR1cyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggc3RhdHVzKTtcbit1OCB6eGRoX3BmX2dldF9zdGF0dXMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuK3U4IHp4ZGhfcGZfZ2V0X2NmZ19nZW4oc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYpO1xuK3ZvaWQgenhkaF9wZl9nZXRfdmZfbWFjKHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2LCB1OCAqbWFjLCBpbnQgdmZfaWQpO1xuK3ZvaWQgenhkaF9wZl9zZXRfdmZfbWFjX3JlZyhzdHJ1Y3QgenhkaF9wZl9kZXZpY2UgKnBmX2RldixcbitcdFx0XHQgICAgdTggKm1hYywgaW50IHZmX2lkKTtcbit2b2lkIHp4ZGhfcGZfc2V0X3ZmX21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYywgaW50IHZmX2lkKTtcbit2b2lkIHp4ZGhfc2V0X21hYyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTggKm1hYyk7XG4rdm9pZCB6eGRoX2dldF9tYWMoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsIHU4ICptYWMpO1xuK3U2NCB6eGRoX3BmX2dldF9mZWF0dXJlcyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7XG4rdm9pZCB6eGRoX3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2RldiwgdTY0IGZlYXR1cmVzKTtcbitcbisjZW5kaWYgLyogX19aWERIX0VOX1BGX0hfXyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzA6MzcuODUyMTMxOTM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY5ODgyMjUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpURSBEaW5nSGFpIEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYWRkaW5nIGEgbmV3IEV0aGVybmV0IGRyaXZlciBmb3IgWlRFIERpbmdIYWkgZGV2aWNlcy4gVGhlIHN0cnVjdHVyZSBpcyBwcmV0dHkgc3RhbmRhcmQ6IGBNQUlOVEFJTkVSU2AgdXBkYXRlLCBgS2NvbmZpZ2AgYW5kIGBNYWtlZmlsZWAgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBkaXJlY3Rvcmllcy4gU3BlY2lmaWNhbGx5LCB0aGlzIGRyaXZlciBzZWVtcyB0byBiZSB0YXJnZXRpbmcgUENJLWJhc2VkIFpURSBEaW5nSGFpIGhhcmR3YXJlLlxuXG5Gcm9tIHRoZSBjb2RlLCBpdCdzIGNsZWFyIHRoaXMgZHJpdmVyIGlzIGNlbnRlcmVkIGFyb3VuZCB0aGUgUENJIGRyaXZlciBgZGhfcGZfZHJpdmVyYCwgd2l0aCBgZGhfcGZfcHJvYmVgIHNlcnZpbmcgYXMgdGhlIGtleSBpbml0aWFsaXphdGlvbiBwb2ludC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgaXQgd2FzIG1pc3NpbmcgdGhlIGNydWNpYWwgYG5ldF9kZXZpY2VgIHJlZ2lzdHJhdGlvbiwgYnV0IHRoZW4gSSBzZWUgdGhlIHBhdGNoIGRvZXMgcmVnaXN0ZXIgYSBgZGV2bGlua2AgaW5zdGFuY2UgdXNpbmcgYGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluaylgLCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgcG9zaXRpdmUgc2lnbiwgYXMgdGhpcyBleHBvc2VzIGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlLlxuXG5EaWdnaW5nIGRlZXBlciwgdGhlIGRyaXZlciBpbXBsZW1lbnRzIGBkaF9wZl9wcm9iZWAsIGBkaF9wZl9yZW1vdmVgLCBhbmQgYGRoX3BmX3NodXRkb3duYC4gSSBub3RpY2VkIHNvbWUgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0YCwgYHp4ZGhfcGZfc2V0X3ZmX21hY2AsIGV0Yy4sIGFyZSBkZWZpbmVkLiBIb3dldmVyLCBhIHF1aWNrIHNjYW4gb2YgYGVuX3BmLmNgIHJldmVhbGVkIHRoYXQgdGhleSBhcmVuJ3QgY2FsbGVkIGFueXdoZXJlIGluIHRoZSBkcml2ZXIgaXRzZWxmLCB3aGljaCBpcyBhIGJpdCBwdXp6bGluZy4gTWF5YmUgdGhleSdyZSBwYXJ0IG9mIGEgZnV0dXJlIGltcGxlbWVudGF0aW9uIG9yIGFyZSBtZWFudCB0byBiZSBjYWxsZWQgZXh0ZXJuYWxseS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhleSBhcmUgdHJ1bHkgdW51c2VkLCBsaWtlbHkgZGVhZCBjb2RlLCBvciBzb21laG93IGNhbGxlZCBlbHNld2hlcmUgKG1heWJlIGEgZGlmZmVyZW50IHBhdGNoPykuXG5cbkxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IHdoYXQgYGRoX3BmX3Byb2JlYCBkb2VzLCBJIHNlZSBpdCBjYWxscyBgZGV2bGlua19hbGxvY2AsIGBkaF9jb3JlX2FsbG9jX3ByaXZgLCBgZGhfcGZfcGNpX2luaXRgLCBhbmQgdGhlbiByZWdpc3RlcnMgdGhlIGBkZXZsaW5rYC4gVGhpcyBpcyBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGEgZnVuY3Rpb25hbCBkcml2ZXIuXG5cblRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRocm91Z2ggdGhlIGNvZGUgdG8gdmVyaWZ5IHRoYXQgdGhvc2Ugb3RoZXIgZnVuY3Rpb25zIGFyZSBub3QgYWN0dWFsbHkgdXNlZCwgZW5zdXJpbmcgdGhhdCB0aGV5IHRydWx5IGFyZW4ndCByZWZlcmVuY2VkIGJ5IGFueSBvdGhlciBjb2RlLiBJJ2xsIHJ1biBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IGl0IGZpbmRzIG9uIGB6eGRoX3BmX21vZGVybl9jZmdfaW5pdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTQxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzA6NDYuNTUwOTU3MzY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NzMwMjMwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienhkaF9wZl9tb2Rlcm5fY2ZnX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYz0zMjg9dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNDA6aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg9OTg9dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCBkaF9jb3JlX2RldiAqZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjk5OmludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgZGhfY29yZV9kZXYgKmRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC0xMDAtdTE2IHp4ZGhfcGZfZ2V0X3F1ZXVlX25vdGlmeV9vZmYoc3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjMwOjUwLjIyMzk4NTk1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjE1NzIxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBhIE5ldyBQQ0kgRHJpdmVyKipcblxuT2theSwgc28gdGhpcyBjb2RlIGlzIGN1cnJlbnRseSBkb3JtYW50LCBlc3NlbnRpYWxseSBkZWFkLCBidXQgYGRoX3BmX3Byb2JlYCBpcyBzdGlsbCBhY2Nlc3NpYmxlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU2hvdWxkIEkgZXZlbiBib3RoZXIgd2l0aCBmdXp6aW5nIHRoaXM/IFllcywgYWJzb2x1dGVseS4gSXQncyBhIGJyYW5kIG5ldyBQQ0kgZHJpdmVyLCBhbmQgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgZnV6emluZyBQQ0kgZHJpdmVycyB1c2luZyB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uIOKAkyBhIGdyZWF0IG9wcG9ydHVuaXR5LiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlLCBiYXNlZCBvbiB0aGUgbm90ZXMsIEkgbmVlZCBgTkVUX1ZFTkRPUl9aVEVgLCBgRElOR0hBSWAsIGFuZCBgRElOR0hBSV9QRmAuXG5cblJpZ2h0LCB0aW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnYC4gT2theSwgYERJTkdIQUlgIGRlcGVuZHMgb24gYFBDSWAsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEFuZCBgRElOR0hBSV9QRmAgaXMgYSB0cmlzdGF0ZSwgbWVhbmluZyBpdCBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUgb3IgYnVpbHQtaW4sIG9yIGV2ZW4gZGlzYWJsZWQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgRElOR0hBSWAgYW5kIGBESU5HSEFJX1BGYCBhcmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHRoZSBkcml2ZXIgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDE4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjMwOjU1LjY4NTU2MDA4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYwMTY4NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESU5HSEFJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnOjY6Y29uZmlnIERJTkdIQUlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTctICAgIGJvb2wgXFxcIlpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc9MjE9aWYgRElOR0hBSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzoyMzpjb25maWcgRElOR0hBSV9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMjQtICAgIHRyaXN0YXRlIFxcXCJaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzA6NTcuODQ1NzMzOTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk4OTAxNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgWlRFIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBaVEUgRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIGJ5IGV4YW1pbmluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHRoZSBwbGFjZSB3aGVyZSB0aGUgaW5jbHVzaW9uIG9mIHRoZSBaVEUgRXRoZXJuZXQgZHJpdmVyIGlzIGRlZmluZWQsIGFsb25nIHdpdGggYWxsIGl0cyBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0byBmaW5kIGBjb25maWdgIG9wdGlvbnMsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMgdG8gbWFuYWdlIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB3aGV0aGVyIGl0IHN1cHBvcnRzIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9ucywgZGlmZmVyZW50IEV0aGVybmV0IFBIWSB0eXBlcywgcG93ZXIgbWFuYWdlbWVudCBmZWF0dXJlcywgb3IgYW55IG90aGVyIGRyaXZlci1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgYnVpbGQgdGltZS4gQmFzZWQgb24gdGhlIEtjb25maWcgZmlsZSwgSSdsbCBhc3Nlc3Mgd2hldGhlciBpdCBtaWdodCBhcHBseSBpbiBhIHNwZWNpZmljIHVzZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk5MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjMxOjAxLjE0NDYzNzY3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4NTMzMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfVkVORE9SX1pURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnOjY6Y29uZmlnIE5FVF9WRU5ET1JfWlRFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWctNy0gICAgYm9vbCBcXFwiWlRFIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjMxOjAzLjQwMzE3NTk0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDI4MDYzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaVEUgRGluZ2hhaSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCB0aGUga2V5IGlzIGVuYWJsaW5nIHRoZXNlIG1vZHVsZXM6IGBORVRfVkVORE9SX1pURWAsIGBESU5HSEFJYCwgYW5kIGBESU5HSEFJX1BGYC4gUmlnaHQsIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHN5bWJvbHMsIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMuIEkgc2VlIHRoZSBmb2N1cyBpcyBvbiBgZGhfcGZfcHJvYmVgLCBgZGhfcGZfcmVtb3ZlYCwgYGRoX3BmX3BjaV9pbml0YCwgYW5kIGBkaF9wZl9wY2lfY2xvc2VgLiBBaCwgYGRoX3BmX3Byb2JlYCByaW5ncyBhIGJlbGwsIHRoYXQgbG9va3MgbGlrZSBhIFBDSSBwcm9iZSBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYWNjZXNzaWJsZSBmdW5jdGlvbnMgaW4gdGhpcyBwYXRoLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCBgZGV2bGlua19vcHNgLCBpdCdzIGVtcHR5OiBgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkaF9wZl9kZXZsaW5rX29wcyA9IHt9O2AgT2theSwgc28gbm8gZGV2bGluayBjYWxsYmFja3MgYXJlIGRlZmluZWQgaGVyZS4gVGhhdCBoZWxwcyBuYXJyb3cgdGhpbmdzIGRvd24gY29uc2lkZXJhYmx5LlxuXG5TbywgdG8gcmVpdGVyYXRlLCB0aGUgb25seSByZWFjaGFibGUgZnVuY3Rpb25zIGFwcGVhciB0byBiZSBgZGhfcGZfcHJvYmVgLCBgZGhfcGZfcmVtb3ZlYCwgYGRoX3BmX3NodXRkb3duYCwgYGRoX3BmX3BjaV9pbml0YCwgYW5kIGBkaF9wZl9wY2lfY2xvc2VgLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLCBzbyBJJ2xsIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBleGFjdGx5IHdoYXQgYGRoX3BmX3Byb2JlYCBkb2VzIHRvIGNvbmZpcm0gaXQncyBhcyBzdHJhaWdodGZvcndhcmQgYXMgaXQgc2VlbXMuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI5OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxOTozMTowOC42MDU5ODQ5MDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTYwOlxcdHN0YXRpYyBpbnQgZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gNTYxOlxcdHtcXG4gNTYyOlxcdFxcdHN0cnVjdCB6eGRoX3BmX2RldmljZSAqcGZfZGV2O1xcbiA1NjM6XFx0XFx0c3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXY7XFxuIDU2NDpcXHRcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4gNTY1OlxcdFxcdGludCByZXQ7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFxcdTAwMjZkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCBkaF9jb3JlX2RldiksXFxuIDU2ODpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gNTY5OlxcdFxcdGlmICghZGV2bGluaykge1xcbiA1NzA6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXFxcblxcXCIpO1xcbiA1NzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDU3MjpcXHRcXHR9XFxuIDU3MzpcXHRcXG4gNTc0OlxcdFxcdGRoX2RldiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcXG4gNTc1OlxcdFxcdGRoX2Rldi1cXHUwMDNlZGV2aWNlID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gNTc2OlxcdFxcdGRoX2Rldi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuIDU3NzpcXHRcXHRkaF9kZXYtXFx1MDAzZWRldmxpbmsgPSBkZXZsaW5rO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRwZl9kZXYgPSBkaF9jb3JlX2FsbG9jX3ByaXYoZGhfZGV2LCBzaXplb2YoKnBmX2RldikpO1xcbiA1ODA6XFx0XFx0aWYgKCFwZl9kZXYpIHtcXG4gNTgxOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImRoX3BmX2RldiBhbGxvYyBmYWlsZWRcXFxcblxcXCIpO1xcbiA1ODI6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNTgzOlxcdFxcdFxcdGdvdG8gZXJyX3BmX2RldjtcXG4gNTg0OlxcdFxcdH1cXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0cGZfZGV2LVxcdTAwM2ViYXJfY2hhbl92YWxpZCA9IGZhbHNlO1xcbiA1ODc6XFx0XFx0cGZfZGV2LVxcdTAwM2V2ZXBhID0gZmFsc2U7XFxuIDU4ODpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkaF9kZXYtXFx1MDAzZWxvY2spO1xcbiA1ODk6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuIDU5MDpcXHRcXG4gNTkxOlxcdFxcdGRoX2Rldi1cXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcXG4gNTkyOlxcdFxcbiA1OTM6XFx0XFx0cmV0ID0gZGhfcGZfcGNpX2luaXQoZGhfZGV2KTtcXG4gNTk0OlxcdFxcdGlmIChyZXQpIHtcXG4gNTk1OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuIDU5NjpcXHRcXHRcXHRnb3RvIGVycl9jZmdfaW5pdDtcXG4gNTk3OlxcdFxcdH1cXG4gNTk4OlxcdFxcbiA1OTk6XFx0XFx0ZGV2bGlua19yZWdpc3RlcihkZXZsaW5rKTtcXG4gNjAwOlxcdFxcbiA2MDE6XFx0XFx0cmV0dXJuIDA7XFxuIDYwMjpcXHRcXG4gNjAzOlxcdGVycl9jZmdfaW5pdDpcXG4gNjA0OlxcdFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBmX2Rldi1cXHUwMDNlaXJxX2xvY2spO1xcbiA2MDU6XFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2ZGhfZGV2LVxcdTAwM2Vsb2NrKTtcXG4gNjA2OlxcdFxcdGRoX2NvcmVfZnJlZV9wcml2KGRoX2Rldik7XFxuIDYwNzpcXHRlcnJfcGZfZGV2OlxcbiA2MDg6XFx0XFx0ZGV2bGlua19mcmVlKGRldmxpbmspO1xcbiA2MDk6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjEwOlxcdH1cXG4gNjExOlxcdFxcbiA2MTI6XFx0c3RhdGljIHZvaWQgZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiA2MTM6XFx0e1xcbiA2MTQ6XFx0XFx0c3RydWN0IGRoX2NvcmVfZGV2ICpkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuIDYxNTpcXHRcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkaF9kZXYpO1xcbiA2MTY6XFx0XFx0c3RydWN0IHp4ZGhfcGZfZGV2aWNlICpwZl9kZXYgPSBkaF9kZXYtXFx1MDAzZXByaXY7XFxuIDYxNzpcXHRcXG4gNjE4OlxcdFxcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcXG4gNjE5OlxcdFxcdGRoX3BmX3BjaV9jbG9zZShkaF9kZXYpO1xcbiA2MjA6XFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuIDYyMTpcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkaF9kZXYtXFx1MDAzZWxvY2spO1xcbiA2MjI6XFx0XFx0ZGhfY29yZV9mcmVlX3ByaXYoZGhfZGV2KTtcXG4gNjIzOlxcdFxcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcXG4gNjI0OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcXG4gNjI1OlxcdH1cXG4gNjI2OlxcdFxcbiA2Mjc6XFx0c3RhdGljIHZvaWQgZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIDYyODpcXHR7XFxuIDYyOTpcXHRcXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXFxuIDYzMDpcXHRcXHRcXHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XFxuIDYzMTpcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIDYzMjpcXHR9XFxuIDYzMzpcXHRcXG4gNjM0OlxcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkaF9wZl9kcml2ZXIgPSB7XFxuIDYzNTpcXHRcXHQubmFtZSA9IFxcXCJkaW5naGFpMTBlXFxcIixcXG4gNjM2OlxcdFxcdC5pZF90YWJsZSA9IGRoX3BmX3BjaV90YWJsZSxcXG4gNjM3OlxcdFxcdC5wcm9iZSA9IGRoX3BmX3Byb2JlLFxcbiA2Mzg6XFx0XFx0LnJlbW92ZSA9IGRoX3BmX3JlbW92ZSxcXG4gNjM5OlxcdFxcdC5zaHV0ZG93biA9IGRoX3BmX3NodXRkb3duLFxcbiA2NDA6XFx0fTtcXG4gNjQxOlxcdFxcbiA2NDI6XFx0bW9kdWxlX3BjaV9kcml2ZXIoZGhfcGZfZHJpdmVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzE6MDguNjA2MDczNDUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzk3MzQyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQ6IFpURSBEaW5nSGFpIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaW50cm9kdWNpbmcgYSBuZXcgUENJIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlLCBnb29kLCBhIG5ldyB0YXJnZXQhIEl0IGltcGxlbWVudHMgdGhlIHVzdWFsIFBDSSBkcml2ZXIgbGlmZWN5Y2xlIGZ1bmN0aW9ucyDigJMgYHByb2JlYCwgYHJlbW92ZWAsIGFuZCBgc2h1dGRvd25gIOKAkyB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuXG5cbkknbSBub3RpY2luZyB0aGF0IHRoZSBwYXRjaCBhbHNvIGRlZmluZXMgc29tZSBvdGhlciBmdW5jdGlvbnMgbGlrZSBgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXRgIGFuZCBgenhkaF9wZl9zZXRfdmZfbWFjYCwgYnV0IHRoZXNlIGRvbid0IHNlZW0gdG8gYmUgY3VycmVudGx5IHV0aWxpemVkIHdpdGhpbiB0aGUgYHByb2JlYCByb3V0aW5lLiBJbnRlcmVzdGluZ+KApiBwb3RlbnRpYWxseSBhIGZ1dHVyZSBleHBhbnNpb24gb3IgcGVyaGFwcyBzb21lIHVudXNlZCBjb2RlIHBhdGhzLiBXb3J0aCBrZWVwaW5nIGFuIGV5ZSBvbiwgYnV0IGZvciB0aGUgaW5pdGlhbCBmdXp6aW5nLCBteSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLlxuXG5TaW5jZSB0aGUgYHByb2JlYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtLCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMgb24gYGRoX3BmX3Byb2JlYCwgYGRoX3BmX3JlbW92ZWAsIGBkaF9wZl9wY2lfaW5pdGAsIGFuZCBgZGhfcGZfcGNpX2Nsb3NlYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBleGl0IHBvaW50cyBmb3IgdGhlIGRyaXZlciwgYW5kIGZ1enppbmcgdGhlc2UgY291bGQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcyBpbiBob3cgaXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJhdGlvbiwgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuRnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUsIEknbGwgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBhcmUgZW5hYmxlZDogYE5FVF9WRU5ET1JfWlRFYCwgYERJTkdIQUlgLCBhbmQgYERJTkdIQUlfUEZgLiBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoZSBkcml2ZXIgaXMgcHJvcGVybHkgY29tcGlsZWQgYW5kIGluaXRpYWxpemVkIHdoZW4gdGhlIGRldmljZSBpcyBhY2Nlc3NlZCwgZW5hYmxpbmcgbXkgZnV6emluZy5cblxuUmlnaHQsIEknbSBjb25maWRlbnQgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gdGhlIHRhcmdldC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNjQsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6MzE6MTQuNzQ1ODEwMzYxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyODc3NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfWlRFXCIsXG4gICAgXCJESU5HSEFJXCIsXG4gICAgXCJESU5HSEFJX1BGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGhfcGZfcHJvYmVcIixcbiAgICBcImRoX3BmX3JlbW92ZVwiLFxuICAgIFwiZGhfcGZfcGNpX2luaXRcIixcbiAgICBcImRoX3BmX3BjaV9jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUENJIGRyaXZlciBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy4gVGhlIGRyaXZlciByZWdpc3RlcnMgYSBQQ0kgcHJvYmUgZnVuY3Rpb24gd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGRldmljZSwgbWFwcyBQQ0kgbWVtb3J5LCBhbmQgcmVnaXN0ZXJzIGEgZGV2bGluayBpbnN0YW5jZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSBzdWJzeXN0ZW0gYW5kIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX1pURVwiLFxuICAgIFwiRElOR0hBSVwiLFxuICAgIFwiRElOR0hBSV9QRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRoX3BmX3Byb2JlXCIsXG4gICAgXCJkaF9wZl9yZW1vdmVcIixcbiAgICBcImRoX3BmX3BjaV9pbml0XCIsXG4gICAgXCJkaF9wZl9wY2lfY2xvc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGEgUENJIHByb2JlIGZ1bmN0aW9uIHdoaWNoIGluaXRpYWxpemVzIHRoZSBkZXZpY2UsIG1hcHMgUENJIG1lbW9yeSwgYW5kIHJlZ2lzdGVycyBhIGRldmxpbmsgaW5zdGFuY2UuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowd4f6b[1] Phase: Succeeded StartedAt: 2026-07-13 19:31:37 +0000 UTC FinishedAt: 2026-07-13 19:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 19:31:37 +0000 UTC FinishedAt: 2026-07-13 19:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2] Phase: Succeeded StartedAt: 2026-07-13 19:31:37 +0000 UTC FinishedAt: 2026-07-13 22:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 19:31:37 +0000 UTC FinishedAt: 2026-07-13 22:17:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 19:31:37 +0000 UTC FinishedAt: 2026-07-13 19:32:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 19:31:37 +0000 UTC FinishedAt: 2026-07-13 19:31:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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-workflowd4f6b/series-workflowd4f6b-convert-artifact-1601908913/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 19:32:21 +0000 UTC FinishedAt: 2026-07-13 20:28:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 19:32:21 +0000 UTC FinishedAt: 2026-07-13 20:28:37 +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:*e656fc89-18d1-49bf-b8a1-b6a7c48176fb,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-workflowd4f6b/series-workflowd4f6b-convert-artifact-1601908913/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": "005fc1a3-cb01-4a76-8561-c04bb5203c79", "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-workflowd4f6b/series-workflowd4f6b-build-action-1869598431/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 19:32:21 +0000 UTC FinishedAt: 2026-07-13 20:28:27 +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:*e656fc89-18d1-49bf-b8a1-b6a7c48176fb,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-workflowd4f6b/series-workflowd4f6b-convert-artifact-1601908913/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": "005fc1a3-cb01-4a76-8561-c04bb5203c79", "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-workflowd4f6b/series-workflowd4f6b-build-action-1869598431/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 20:28:37 +0000 UTC FinishedAt: 2026-07-13 20:28:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 20:28:37 +0000 UTC FinishedAt: 2026-07-13 20:28:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 20:28:37 +0000 UTC FinishedAt: 2026-07-13 20:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 20:28:37 +0000 UTC FinishedAt: 2026-07-13 20:28:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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-workflowd4f6b/series-workflowd4f6b-convert-artifact-1460412676/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 20:28:59 +0000 UTC FinishedAt: 2026-07-13 20:31:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 20:28:59 +0000 UTC FinishedAt: 2026-07-13 20:31:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*005fc1a3-cb01-4a76-8561-c04bb5203c79,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-workflowd4f6b/series-workflowd4f6b-build-action-1869598431/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-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 20:31:15 +0000 UTC FinishedAt: 2026-07-13 20:31:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 20:31:15 +0000 UTC FinishedAt: 2026-07-13 20:31:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 20:31:15 +0000 UTC FinishedAt: 2026-07-13 21:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 20:31:15 +0000 UTC FinishedAt: 2026-07-13 21:21:28 +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:*e656fc89-18d1-49bf-b8a1-b6a7c48176fb,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-workflowd4f6b/series-workflowd4f6b-convert-artifact-1460412676/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": "726650e3-69d2-4eff-b21d-22ab9657c627", "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-workflowd4f6b/series-workflowd4f6b-build-action-945953552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 20:31:15 +0000 UTC FinishedAt: 2026-07-13 21:21:18 +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:*e656fc89-18d1-49bf-b8a1-b6a7c48176fb,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-workflowd4f6b/series-workflowd4f6b-convert-artifact-1460412676/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": "726650e3-69d2-4eff-b21d-22ab9657c627", "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-workflowd4f6b/series-workflowd4f6b-build-action-945953552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:21:28 +0000 UTC FinishedAt: 2026-07-13 21:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:21:28 +0000 UTC FinishedAt: 2026-07-13 21:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:21:28 +0000 UTC FinishedAt: 2026-07-13 21:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:21:28 +0000 UTC FinishedAt: 2026-07-13 21:23:16 +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:*726650e3-69d2-4eff-b21d-22ab9657c627,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-workflowd4f6b/series-workflowd4f6b-build-action-945953552/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-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:23:26 +0000 UTC FinishedAt: 2026-07-13 22:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:23:26 +0000 UTC FinishedAt: 2026-07-13 22:17:04 +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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"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:*005fc1a3-cb01-4a76-8561-c04bb5203c79,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*726650e3-69d2-4eff-b21d-22ab9657c627,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-workflowd4f6b/series-workflowd4f6b-build-action-1869598431/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-workflowd4f6b/series-workflowd4f6b-build-action-945953552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:23:26 +0000 UTC FinishedAt: 2026-07-13 21:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:23:26 +0000 UTC FinishedAt: 2026-07-13 21:23:30 +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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"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-workflowd4f6b/series-workflowd4f6b-convert-artifact-601242893/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:23:26 +0000 UTC FinishedAt: 2026-07-13 21:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:23:26 +0000 UTC FinishedAt: 2026-07-13 21:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:23:26 +0000 UTC FinishedAt: 2026-07-13 21:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:23:36 +0000 UTC FinishedAt: 2026-07-13 22:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4f6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"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":["dh_pf_probe","dh_pf_remove","dh_pf_pci_init","dh_pf_pci_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_ZTE","DINGHAI","DINGHAI_PF"],"series_id":"c7b29c60-315f-46f4-bb7d-ec3c87abc520","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 21:23:36 +0000 UTC FinishedAt: 2026-07-13 22:16:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*005fc1a3-cb01-4a76-8561-c04bb5203c79,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*726650e3-69d2-4eff-b21d-22ab9657c627,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-workflowd4f6b/series-workflowd4f6b-build-action-1869598431/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-workflowd4f6b/series-workflowd4f6b-build-action-945953552/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-workflowd4f6b/series-workflowd4f6b-convert-artifact-601242893/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,}