Name: series-workflow5dm2m Phase: Succeeded StartedAt: 2026-09-02 20:28:52 +0000 UTC FinishedAt: 2026-09-03 00:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[0] Phase: Succeeded StartedAt: 2026-09-02 20:28:52 +0000 UTC FinishedAt: 2026-09-02 20:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 20:28:52 +0000 UTC FinishedAt: 2026-09-02 20:49:59 +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": "d0ec95a8a4e79f2fd6063fc8932415db8c227689", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "VLAN_8021Q_GVRP", "VLAN_8021Q_MVRP" ], "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": "d0ec95a8a4e79f2fd6063fc8932415db8c227689", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "VLAN_8021Q_GVRP", "VLAN_8021Q_MVRP" ], "series_id": "a6340ab3-120a-46b5-8798-e750e05b67fa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "register_vlan_dev", "unregister_vlan_dev", "__vlan_find_dev_deep_rcu", "vlan_for_each" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUV9HVlJQJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVFfTVZSUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2lzdGVyX3ZsYW5fZGV2JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1JiMzNDssCiAgICAmIzM0O3ZsYW5fZm9yX2VhY2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIFJDVSBhbm5vdGF0aW9ucyBhbmQgbWVtb3J5IG9yZGVyaW5nIHByaW1pdGl2ZXMgaW4gdGhlIDgwMi4xUSBWTEFOIHN1YnN5c3RlbSwgcmVwbGFjaW5nIHNtcF93bWIoKS9zbXBfcm1iKCkgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpL3NtcF9sb2FkX2FjcXVpcmUoKSBhbmQgYWRkaW5nIHJjdV9hc3NpZ25fcG9pbnRlcigpL3JjdV9kZXJlZmVyZW5jZV9yYXcoKSBhY2Nlc3NvcnMuIFRoZSBkeW5hbWljIGFycmF5cyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIHdoaWNoIHplcm9lcyBhbGwgbWVtb3J5IHVwb24gYWxsb2NhdGlvbi4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgYWNjZXNzZWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBpbiB0aGlzIGNvZGUgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBjb25jdXJyZW5jeSBwcmltaXRpdmVzIGFuZCBSQ1UgYW5ub3RhdGlvbnMgZm9yIHRoZSA4MDIuMVEgVkxBTiBkZXZpY2UgbG9va3VwIHRhYmxlcyAoc3dpdGNoaW5nIHRvIHNtcF9zdG9yZV9yZWxlYXNlLCBzbXBfbG9hZF9hY3F1aXJlLCByY3VfYXNzaWduX3BvaW50ZXIsIGFuZCByY3VfZGVyZWZlcmVuY2VfcmF3KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBWTEFOIG1hbmFnZW1lbnQgYW5kIGxvb2t1cCBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTE5N2ZmOWQyN2ViODdiNzg0ZTIwNTQ3Y2NlODU3YzA4OWIyZDU5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMjA6NDg6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmNcbmluZGV4IDJkMmVmYjg3Nzk3NWQuLmVjOWE3Y2M4YWZjNzQgMTAwNjQ0XG4tLS0gYS9uZXQvODAyMXEvdmxhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5jXG5AQCAtNDksNyAmIzQzOzQ5LDcgQEAgY29uc3QgY2hhciB2bGFuX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OO1xuIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0ICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKiphcnJheTtcbiBcdHVuc2lnbmVkIGludCB2aWR4O1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4gXHRpbnQgcGlkeDtcbkBAIC03MCwxMCAmIzQzOzcwLDggQEAgc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXG4gXHRpZiAoYXJyYXkgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuLVx0LyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi9cbi1cdHNtcF93bWIoKTtcbi1cbi1cdHZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0gPSBhcnJheTtcbiYjNDM7XHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0sIGFycmF5KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaFxuaW5kZXggYzQxY2FhZjk0MDk1Zi4uZDg3NGFiMzIzZDMyMCAxMDA2NDRcbi0tLSBhL25ldC84MDIxcS92bGFuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmhcbkBAIC0yMiw4ICYjNDM7MjIsOCBAQCBlbnVtIHZsYW5fcHJvdG9zIHtcbiBzdHJ1Y3Qgdmxhbl9ncm91cCB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bnJfdmxhbl9kZXZzO1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGhsaXN0O1x0LyogbGlua2VkIGxpc3QgKi9cbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqdmxhbl9kZXZpY2VzX2FycmF5c1tWTEFOX1BST1RPX05VTV1cbi1cdFx0XHRcdFx0ICAgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgW1ZMQU5fR1JPVVBfQVJSQVlfU1BMSVRfUEFSVFNdO1xuIH07XG4gXG4gc3RydWN0IHZsYW5faW5mbyB7XG5AQCAtNTQsMTUgJiM0Mzs1NCwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXG4gXHRcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IHBpZHgsXG4gXHRcdFx0XHRcdFx0XHQgdTE2IHZsYW5faWQpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuLVx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4tXHRcdFx0XHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcbi1cbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG4tXHRzbXBfcm1iKCk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi9cbiYjNDM7XHRhcnJheSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxuJiM0MztcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiBcbi1cdHJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7XG4mIzQzO1x0cmV0dXJuIGFycmF5ID8gcmN1X2RlcmVmZXJlbmNlX3JhdyhhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0pIDogTlVMTDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbkBAIC04MiwxMyAmIzQzOzgwLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2dyb3VwX3NldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpbnQgcGlkeCA9IHZsYW5fcHJvdG9faWR4KHZsYW5fcHJvdG8pO1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuIFx0aWYgKCF2ZyB8fCBwaWR4IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXHRhcnJheSA9IHZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbiBcdFx0XHRcdCAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dO1xuLVx0YXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gZGV2O1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0sIGRldik7XG4gfVxuIFxuIC8qIE11c3QgYmUgaW52b2tlZCB3aXRoIHJjdV9yZWFkX2xvY2sgb3Igd2l0aCBSVE5MLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUV9HVlJQJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVFfTVZSUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2lzdGVyX3ZsYW5fZGV2JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1JiMzNDssCiAgICAmIzM0O3ZsYW5fZm9yX2VhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBjb25jdXJyZW5jeSBwcmltaXRpdmVzIGFuZCBSQ1UgYW5ub3RhdGlvbnMgZm9yIHRoZSA4MDIuMVEgVkxBTiBkZXZpY2UgbG9va3VwIHRhYmxlcyAoc3dpdGNoaW5nIHRvIHNtcF9zdG9yZV9yZWxlYXNlLCBzbXBfbG9hZF9hY3F1aXJlLCByY3VfYXNzaWduX3BvaW50ZXIsIGFuZCByY3VfZGVyZWZlcmVuY2VfcmF3KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBWTEFOIG1hbmFnZW1lbnQgYW5kIGxvb2t1cCBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTE5N2ZmOWQyN2ViODdiNzg0ZTIwNTQ3Y2NlODU3YzA4OWIyZDU5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMjA6NDg6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uYwppbmRleCAyZDJlZmI4Nzc5NzVkLi5lYzlhN2NjOGFmYzc0IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmMKQEAgLTQ5LDcgJiM0Mzs0OSw3IEBAIGNvbnN0IGNoYXIgdmxhbl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLAogCQkJCSAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5OwogCXVuc2lnbmVkIGludCB2aWR4OwogCXVuc2lnbmVkIGludCBzaXplOwogCWludCBwaWR4OwpAQCAtNzAsMTAgJiM0Mzs3MCw4IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLAogCWlmIChhcnJheSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKLQkvKiBwYWlyZWQgd2l0aCBzbXBfcm1iKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqLwotCXNtcF93bWIoKTsKLQotCXZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7CiYjNDM7CS8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7dmctJmd0O3ZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0sIGFycmF5KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmgKaW5kZXggYzQxY2FhZjk0MDk1Zi4uZDg3NGFiMzIzZDMyMCAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5oCkBAIC0yMiw4ICYjNDM7MjIsOCBAQCBlbnVtIHZsYW5fcHJvdG9zIHsKIHN0cnVjdCB2bGFuX2dyb3VwIHsKIAl1bnNpZ25lZCBpbnQJCW5yX3ZsYW5fZGV2czsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlobGlzdDsJLyogbGlua2VkIGxpc3QgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dCi0JCQkJCSAgICAgICBbVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUU107CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqdmxhbl9kZXZpY2VzX2FycmF5c1tWTEFOX1BST1RPX05VTV0KJiM0MzsJCQkJCQkgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTsKIH07CiAKIHN0cnVjdCB2bGFuX2luZm8gewpAQCAtNTQsMTUgJiM0Mzs1NCwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiAJCQkJCQkJIHVuc2lnbmVkIGludCBwaWR4LAogCQkJCQkJCSB1MTYgdmxhbl9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5OwogCi0JYXJyYXkgPSB2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XQotCQkJCSAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dOwotCi0JLyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi8KLQlzbXBfcm1iKCk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovCiYjNDM7CWFycmF5ID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdCiYjNDM7CQkJCSBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTsKIAotCXJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7CiYjNDM7CXJldHVybiBhcnJheSA/IHJjdV9kZXJlZmVyZW5jZV9yYXcoYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKSA6IE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCkBAIC04MiwxMyAmIzQzOzgwLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2dyb3VwX3NldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLAogCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgcGlkeCA9IHZsYW5fcHJvdG9faWR4KHZsYW5fcHJvdG8pOwotCXN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7CiAKIAlpZiAoIXZnIHx8IHBpZHggJmx0OyAwKQogCQlyZXR1cm47CiAJYXJyYXkgPSB2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XQogCQkJCSAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dOwotCWFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA9IGRldjsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSwgZGV2KTsKIH0KIAogLyogTXVzdCBiZSBpbnZva2VkIHdpdGggcmN1X3JlYWRfbG9jayBvciB3aXRoIFJUTkwuICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTEFOIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGlzc2VjdCB0aGUgY2hhbmdlcywgZm9jdXNpbmcgb24gdGhlIGNvcmUgZmlsZSBtb2RpZmljYXRpb25zLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBuZXQvODAyMXEvdmxhbi5jYCBhbmQgYG5ldC84MDIxcS92bGFuLmhgIGZpbGVzIOKAkyBzbyBWTEFOIHRhZ2dpbmcsIG5hdHVyYWxseS4KClNwZWNpZmljYWxseSwgaW4gYHZsYW4uY2AsIHRoZSBrZXkgYWRqdXN0bWVudCBzZWVtcyB0byBiZSBpbiBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLiBUaGUgY3JpdGljYWwgc3dpdGNoIGlzIHRoZSBtb3ZlIGZyb20gYSBzaW1wbGUgcG9pbnRlciBhcnJheSwgYHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7YCwgdG8gYW4gUkNVLXNhZmUgdmVyc2lvbjogYHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7YC4gVGhpcyBzY3JlYW1zIGNvbmN1cnJlbnQgYWNjZXNzIGFuZCB0aGUgbmVlZCBmb3IgcHJvcGVyIG1lbW9yeSBiYXJyaWVyL29yZGVyaW5nLiBSZXBsYWNpbmcgYHNtcF93bWIoKWAgYW5kIGRpcmVjdCBhc3NpZ25tZW50IHdpdGggYHNtcF9zdG9yZV9yZWxlYXNlKClgIGlzIHRoZSBnaXZlYXdheSDigJMgcHJvdGVjdGluZyB0aGF0IHdyaXRlIHdpdGggYSByZWxlYXNlIGJhcnJpZXIuCgpUaGVuLCBpbiBgdmxhbi5oYCwgdGhlIGBzdHJ1Y3Qgdmxhbl9ncm91cGAgbm93IGhhcyBpdHMgYXJyYXkgZWxlbWVudHMgYW5ub3RhdGVkIHdpdGggYF9fcmN1YCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoZSBhY2NvbXBhbnlpbmcgY2hhbmdlcyBpbiBgX192bGFuX2dyb3VwX2dldF9kZXZpY2VgIGFyZSBhbHNvIHRlbGxpbmcuIFRoZSB1c2Ugb2YgYHNtcF9sb2FkX2FjcXVpcmVgIGluc3RlYWQgb2YgYHNtcF9ybWJgIGFuZCBgcmN1X2RlcmVmZXJlbmNlX3Jhd2AgY29uZmlybXMgdGhpcy4gV2UmIzM5O3JlIGxvYWRpbmcgdGhlIHBvaW50ZXIgd2l0aCBhbiBhY3F1aXJlIGJhcnJpZXIgdG8gZW5zdXJlIHdlIHNlZSBhbGwgcHJpb3Igd3JpdGVzLCBhbmQgdGhlbiBkZXJlZmVyZW5jaW5nIGl0IHdpdGggdGhlIFJDVSBwcmltaXRpdmVzLiBTaW1pbGFybHksIGB2bGFuX2dyb3VwX3NldF9kZXZpY2VgIG5vdyB1c2VzIGByY3VfYXNzaWduX3BvaW50ZXIoKWAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IFJDVSBwYXR0ZXJuIGZvciBzYWZlbHkgcHVibGlzaGluZyBhIHBvaW50ZXIuCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgYW5kIHJhY2UgY29uZGl0aW9ucyB3aGVuIGFjY2Vzc2luZyB0aGUgVkxBTiBkZXZpY2UgYXJyYXksIHdoaWNoIHdvdWxkIHR5cGljYWxseSBiZSBlbmNvdW50ZXJlZCBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIE5vdywgbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzdXJyb3VuZGluZyBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvODAyMXFgIGRpcmVjdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIGVuYWJsZWQgYXMgYSBjb25zZXF1ZW5jZSBvZiB0aGlzIHBhdGNoLCBvciBpZiBpdCBjaGFuZ2VzIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIFZMQU4gZHJpdmVyLiBJJiMzOTtsbCB1c2UgZWl0aGVyIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgYG5ldC84MDIxcS9LY29uZmlnYCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWTEFOXzgwMjFRJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LzgwMjFxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTMxLVxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL0tjb25maWctMzMtXHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgODAyLjFRIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgdW5kZXJzdGFuZGluZyBob3cgdGhlIDgwMi4xUSBWTEFOIHRhZ2dpbmcgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBmaXJzdCBzdGVwIGlzIHRvIHNlZSBob3cgdGhlIGJ1aWxkIHN5c3RlbSBpbnRlZ3JhdGVzIGl0LCBhbmQsIHdlbGwsIGhvdyB0aGUgb3B0aW9ucyBhbmQgc2V0dGluZ3MgYXJlIHN0cnVjdHVyZWQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBjb25maWd1cmF0aW9uIGFuZCBidWlsZCBmaWxlcy4KCkxldCYjMzk7cyBiZWdpbiBieSBwdWxsaW5nIHVwIGBuZXQvODAyMXEvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoZSBmZWF0dXJlIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIgKGlmIGF0IGFsbCkuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgc2VlIHRoZSBlbmFibGUvZGlzYWJsZSBvcHRpb25zLCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZXMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGhvdyBJJiMzOTtsbCBpbnRlcnByZXQgdGhlIGNvZGUuCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYG5ldC84MDIxcS9NYWtlZmlsZWAuIFRoaXMgd2lsbCByZXZlYWwgaG93IHRoZSA4MDIuMVEgY29kZSBpcyBjb21waWxlZCwgbGlua2VkLCBhbmQgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc291cmNlIGZpbGVzIGluY2x1ZGVkLCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhlIEtjb25maWcgb3B0aW9ucywgYW5kIGhvdyB0aGUgbW9kdWxlcyBhcmUgYnVpbHQuIEl0IHNob3VsZCBwcm92aWRlIGluc2lnaHRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCB3aGljaCBmaWxlcyBpbXBsZW1lbnQgd2hhdCBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIEkgY2FuIGNvbm5lY3QgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUgYWN0dWFsIHNvdXJjZS4gVW5kZXJzdGFuZGluZyB0aGVzZSB0d28gZmlsZXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBhbmFseXNpcywgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCAqaG93KiB0byBjb250cm9sIGFuZCBjb21waWxlIHRoZSB1bmRlcmx5aW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvODAyMXEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIENvbmZpZ3VyYXRpb24gZm9yIDgwMi4xUSBWTEFOIHN1cHBvcnRcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFZMQU5fODAyMVFcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0OzgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBTZWxlY3QgdGhpcyBhbmQgeW91IHdpbGwgYmUgYWJsZSB0byBjcmVhdGUgODAyLjFRIFZMQU4gaW50ZXJmYWNlc1xuICAxMDpcdFx0ICBvbiB5b3VyIEV0aGVybmV0IGludGVyZmFjZXMuIDgwMi4xUSBWTEFOIHN1cHBvcnRzIGFsbW9zdFxuICAxMTpcdFx0ICBldmVyeXRoaW5nIGEgcmVndWxhciBFdGhlcm5ldCBpbnRlcmZhY2UgZG9lcywgaW5jbHVkaW5nXG4gIDEyOlx0XHQgIGZpcmV3YWxsaW5nLCBicmlkZ2luZywgYW5kIG9mIGNvdXJzZSBJUCB0cmFmZmljLiBZb3Ugd2lsbCBuZWVkXG4gIDEzOlx0XHQgIHRoZSAmIzM5O2lwJiMzOTsgdXRpbGl0eSBpbiBvcmRlciB0byBlZmZlY3RpdmVseSB1c2UgVkxBTnMuXG4gIDE0Olx0XHQgIFNlZSB0aGUgVkxBTiB3ZWIgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcbiAgMTU6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5jYW5kZWxhdGVjaC5jb20vfmdyZWVhci92bGFuLmh0bWxcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMTg6XHRcdCAgd2lsbCBiZSBjYWxsZWQgODAyMXEuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtHVlJQIChHQVJQIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgMjU6XHRcdHNlbGVjdCBHQVJQXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSBHVlJQIGVuZC1zeXN0ZW0gc3VwcG9ydC4gR1ZSUCBpcyB1c2VkIGZvclxuICAyODpcdFx0ICBhdXRvbWF0aWMgcHJvcGFnYXRpb24gb2YgcmVnaXN0ZXJlZCBWTEFOcyB0byBzd2l0Y2hlcy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgVkxBTl84MDIxUV9NVlJQXG4gIDMzOlx0XHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gIDM0Olx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgMzU6XHRcdHNlbGVjdCBNUlBcbiAgMzY6XHRcdGhlbHBcbiAgMzc6XHRcdCAgU2VsZWN0IHRoaXMgdG8gZW5hYmxlIE1WUlAgZW5kLXN5c3RlbSBzdXBwb3J0LiBNVlJQIGlzIHVzZWQgZm9yXG4gIDM4Olx0XHQgIGF1dG9tYXRpYyBwcm9wYWdhdGlvbiBvZiByZWdpc3RlcmVkIFZMQU5zIHRvIHN3aXRjaGVzOyBpdFxuICAzOTpcdFx0ICBzdXBlcnNlZGVzIEdWUlAgYW5kIGlzIG5vdCBiYWNrd2FyZHMtY29tcGF0aWJsZS5cbiAgNDA6XHRcbiAgNDE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDYzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMVEgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgODAyLjFRIFZMQU4gc3VwcG9ydCB3aXRoaW4gdGhpcyBrZXJuZWwuIE15IGZpcnN0IHN0b3AgaXMgZGVmaW5pdGVseSBgbmV0LzgwMjFxL01ha2VmaWxlYC4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hhdCBvYmplY3QgZmlsZXMgYXJlIGJlaW5nIGNvbXBpbGVkLiBLbm93aW5nIHRoaXMsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcywgcGlucG9pbnQgd2hpY2ggc291cmNlIGZpbGVzIGFyZSBjcml0aWNhbCwgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb21waWxlZCBvYmplY3RzIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0IG92ZXJ2aWV3IG9mIHRoZSBjb2RlIHRoYXQgbWFuYWdlcyB0aGUgVkxBTiB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcgbG9naWMsIGFuZCB3aGljaCBwYXJ0cyBkZWFsIHdpdGggdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBoYXJkd2FyZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNpcyB0byB0aGVuIGRldGVybWluZSBpZiB0aGVyZSBhcmUgb3B0aW1pemF0aW9ucyBvciBtb2RpZmljYXRpb25zIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0LzgwMjFxL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVkxBTiBsYXllci5cbiAgIDQ6XHQjXG4gICA1Olx0b2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX1ZMQU5fODAyMVEpKVx0JiM0Mzs9IHZsYW5fY29yZS5vXG4gICA2Olx0b2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXHRcdCYjNDM7PSA4MDIxcS5vXG4gICA3Olx0XG4gICA4Olx0ODAyMXEteVx0XHRcdFx0XHQ6PSB2bGFuLm8gdmxhbl9kZXYubyB2bGFuX25ldGxpbmsub1xuICAgOTpcdDgwMjFxLSQoQ09ORklHX1ZMQU5fODAyMVFfR1ZSUClcdFx0JiM0Mzs9IHZsYW5fZ3ZycC5vXG4gIDEwOlx0ODAyMXEtJChDT05GSUdfVkxBTl84MDIxUV9NVlJQKVx0XHQmIzQzOz0gdmxhbl9tdnJwLm9cbiAgMTE6XHQ4MDIxcS0kKENPTkZJR19QUk9DX0ZTKVx0XHRcdCYjNDM7PSB2bGFucHJvYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU0NAoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkFuYWx5emluZyBWTEFOIEdyb3VwIEFsbG9jYXRpb24gJmFtcDsgRGV2aWNlIEFzc29jaWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgYW5kIHVzYWdlIG9mIHRoZXNlIFZMQU4tcmVsYXRlZCBmdW5jdGlvbnM6IGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIGBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZWAsIGFuZCBgdmxhbl9ncm91cF9zZXRfZGV2aWNlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlaXIgdXNhZ2Ug4oCTIGZpbmQgb3V0IHdoZXJlIHRoZXkmIzM5O3JlIGNhbGxlZCBhbmQgd2hhdCB0aGV5JiMzOTtyZSBkb2luZyB3aXRoaW4gdGhlIGxhcmdlciBjb2RlYmFzZS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGtub3cgd2hhdCBtb2R1bGVzIHJlbHkgb24gdGhlbSwgYW5kIGhvdy4KCmB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAgbGlrZWx5IGhhbmRsZXMgcHJlLWFsbG9jYXRpb24gb3IgcmVzZXJ2YXRpb24gb2YgVkxBTiBJRHMsIHBvc3NpYmx5IGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gb3IgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0OiBhcmUgd2UgcHJlLWFsbG9jYXRpbmcgdG8gYXZvaWQgY29uZmxpY3RzLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdGhhdC4KClRoZW4gdGhlcmUmIzM5O3MgYF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlYCB3aGljaCBzdWdnZXN0cyBhIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBsb29raW5nIHVwIG9yIHJldHJpZXZpbmcgdGhlIGRldmljZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIFZMQU4gZ3JvdXAuIFRoZSBkb3VibGUgdW5kZXJzY29yZSBhdCB0aGUgYmVnaW5uaW5nIHN1Z2dlc3RzIHRoYXQgaXQgbWlnaHQgYmUgYW4gaW50ZXJuYWwgZnVuY3Rpb24gbm90IGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UsIHdoaWNoIG1lYW5zIEkmIzM5O2xsIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlICYjMzQ7cmVhbCYjMzQ7IEFQSSB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHN1cHBvcnRpbmcsIGFuZCB3aHkgaXQgaXMgYWJzdHJhY3RlZCBpbiB0aGlzIHdheS4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIHRvIG1hcCBWTEFOIElEcyB0byBuZXR3b3JrIGludGVyZmFjZXMuIElzIHRoaXMgaGFwcGVuaW5nIGF0IHJ1bnRpbWUsIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgb3Igb25seSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb3IgY29uZmlndXJhdGlvbj8KCkZpbmFsbHksIGB2bGFuX2dyb3VwX3NldF9kZXZpY2VgIGltcGxpZXMgYXNzaWduaW5nIG9yIGFzc29jaWF0aW5nIGEgbmV0d29yayBkZXZpY2UgKGxpa2UgYSBwaHlzaWNhbCBOSUMgb3IgYSB2aXJ0dWFsIGJyaWRnZSkgd2l0aCBhIFZMQU4gZ3JvdXAuIFRoaXMgaXMgdGhlIHBhaXJpbmcgb2YgYSBwaHlzaWNhbCBkZXZpY2Ugd2l0aCBWTEFOIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIHRoZSBjb3JlIG9mIGhvdyBWTEFOcyB3b3JrLiBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggZGV2aWNlIHJlbW92YWwgb3IgcmVjb25maWd1cmF0aW9uLiBIb3cgaXMgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgYmVpbmcgbWFpbnRhaW5lZCwgYW5kIGlzIHRoaXMgdGhyZWFkIHNhZmU/CgpCYXNpY2FsbHksIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgd29ya2Zsb3c6IFZMQU4gSUQgYWxsb2NhdGlvbiwgZGV2aWNlIGFzc29jaWF0aW9uLCBhbmQgaG93IHRob3NlIGFzc29jaWF0aW9ucyBhcmUgbWFuYWdlZCBvdmVyIHRpbWUuIFRoZSBjYWxsc2l0ZXMgYXJlIG15IHJvYWRtYXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9ncm91cF9wcmVhbGxvY192aWR8dmxhbl9ncm91cF9zZXRfZGV2aWNlfF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlfHZsYW5fZ3JvdXBfZ2V0X2RldmljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbi5jPTQ1PWNvbnN0IGNoYXIgdmxhbl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjtcbi0tXG5uZXQvODAyMXEvdmxhbi5jLTQ4LVxubmV0LzgwMjFxL3ZsYW4uYzo0OTpzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2Zyxcbm5ldC84MDIxcS92bGFuLmMtNTAtXHRcdFx0XHQgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXG4tLVxubmV0LzgwMjFxL3ZsYW4uYy03Mi1cbm5ldC84MDIxcS92bGFuLmM6NzM6XHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xubmV0LzgwMjFxL3ZsYW4uYy03NC1cdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0sIGFycmF5KTtcbi0tXG5uZXQvODAyMXEvdmxhbi5jPTg2PXZvaWQgdW5yZWdpc3Rlcl92bGFuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbm5ldC84MDIxcS92bGFuLmMtMTA3LVxubmV0LzgwMjFxL3ZsYW4uYzoxMDg6XHR2bGFuX2dyb3VwX3NldF9kZXZpY2UoZ3JwLCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8sIHZsYW5faWQsIE5VTEwpO1xubmV0LzgwMjFxL3ZsYW4uYy0xMDktXG4tLVxubmV0LzgwMjFxL3ZsYW4uYz0xNDY9aW50IHJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvODAyMXEvdmxhbi5jLTE3Mi1cbm5ldC84MDIxcS92bGFuLmM6MTczOlx0ZXJyID0gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoZ3JwLCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8sIHZsYW5faWQpO1xubmV0LzgwMjFxL3ZsYW4uYy0xNzQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC84MDIxcS92bGFuLmMtMTkwLVx0ICovXG5uZXQvODAyMXEvdmxhbi5jOjE5MTpcdHZsYW5fZ3JvdXBfc2V0X2RldmljZShncnAsIHZsYW4tXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCwgZGV2KTtcbm5ldC84MDIxcS92bGFuLmMtMTkyLVx0Z3JwLVx1MDAzZW5yX3ZsYW5fZGV2cyYjNDM7JiM0Mzs7XG4tLVxubmV0LzgwMjFxL3ZsYW4uaD00MD1zdGF0aWMgaW5saW5lIGludCB2bGFuX3Byb3RvX2lkeChfX2JlMTYgcHJvdG8pXG4tLVxubmV0LzgwMjFxL3ZsYW4uaC01Mi1cbm5ldC84MDIxcS92bGFuLmg6NTM6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxubmV0LzgwMjFxL3ZsYW4uaC01NC1cdFx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGlkeCxcbi0tXG5uZXQvODAyMXEvdmxhbi5oLTU4LVxubmV0LzgwMjFxL3ZsYW4uaDo1OTpcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG5uZXQvODAyMXEvdmxhbi5oLTYwLVx0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbi0tXG5uZXQvODAyMXEvdmxhbi5oLTY1LVxubmV0LzgwMjFxL3ZsYW4uaDo2NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxubmV0LzgwMjFxL3ZsYW4uaC02Ny1cdFx0XHRcdFx0XHQgICAgICAgX19iZTE2IHZsYW5fcHJvdG8sXG4tLVxubmV0LzgwMjFxL3ZsYW4uaC03NC1cbm5ldC84MDIxcS92bGFuLmg6NzU6XHRyZXR1cm4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UodmcsIHBpZHgsIHZsYW5faWQpO1xubmV0LzgwMjFxL3ZsYW4uaC03Ni19XG5uZXQvODAyMXEvdmxhbi5oLTc3LVxubmV0LzgwMjFxL3ZsYW4uaDo3ODpzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ncm91cF9zZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2Zyxcbm5ldC84MDIxcS92bGFuLmgtNzktXHRcdFx0XHRcdCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQsXG4tLVxubmV0LzgwMjFxL3ZsYW4uaD05Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2ZpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2Rldixcbi0tXG5uZXQvODAyMXEvdmxhbi5oLTk4LVx0aWYgKHZsYW5faW5mbylcbm5ldC84MDIxcS92bGFuLmg6OTk6XHRcdHJldHVybiB2bGFuX2dyb3VwX2dldF9kZXZpY2UoXHUwMDI2dmxhbl9pbmZvLVx1MDAzZWdycCxcbm5ldC84MDIxcS92bGFuLmgtMTAwLVx0XHRcdFx0XHQgICAgIHZsYW5fcHJvdG8sIHZsYW5faWQpO1xuLS1cbm5ldC84MDIxcS92bGFuLmg9MTA1PXN0YXRpYyBpbmxpbmUgbmV0ZGV2X2ZlYXR1cmVzX3Qgdmxhbl90bmxfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2KVxuLS1cbm5ldC84MDIxcS92bGFuLmgtMTE5LVx0Zm9yICgoaSkgPSAwOyBpIFx1MDAzYyBWTEFOX1BST1RPX05VTSAqIFZMQU5fTl9WSUQ7IGkmIzQzOyYjNDM7KSBcXFxubmV0LzgwMjFxL3ZsYW4uaDoxMjA6XHRcdGlmICgoKGRldikgPSBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgoZ3JwKSwgKGkpIC8gVkxBTl9OX1ZJRCwgXFxcbm5ldC84MDIxcS92bGFuLmgtMTIxLVx0XHRcdFx0XHRcdFx0ICAgIChpKSAlIFZMQU5fTl9WSUQpKSlcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9NzY9c3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy04MS1cdGlmICh2bGFuX2luZm8pIHtcbm5ldC84MDIxcS92bGFuX2NvcmUuYzo4MjpcdFx0cmV0dXJuIHZsYW5fZ3JvdXBfZ2V0X2RldmljZShcdTAwMjZ2bGFuX2luZm8tXHUwMDNlZ3JwLFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTgzLVx0XHRcdFx0XHQgICAgIHZsYW5fcHJvdG8sIHZsYW5faWQpO1xuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYz0yMjc9aW50IHZsYW5fZm9yX2VhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMjQyLVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2aWRfaW5mbywgXHUwMDI2dmxhbl9pbmZvLVx1MDAzZXZpZF9saXN0LCBsaXN0KSB7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MjQzOlx0XHR2ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKFx1MDAyNnZsYW5faW5mby1cdTAwM2VncnAsIHZpZF9pbmZvLVx1MDAzZXByb3RvLFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI0NC1cdFx0XHRcdFx0ICAgICB2aWRfaW5mby1cdTAwM2V2aWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzM4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIFJDVSBhbm5vdGF0aW9ucyBhbmQgY29uY3VycmVuY3kgc3luY2hyb25pemF0aW9uIHdpdGhpbiBWTEFOIDgwMi4xUSBncm91cCBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0htbSwgaXMgdGhpcyBmdXp6YWJsZT8mIzM0OyBUaW1lIHRvIGV2YWx1YXRlLgoKVGhlIGNoZWNrbGlzdCBzYXlzIEkgc2hvdWxkIGV4Y2x1ZGUgcGF0Y2hlcyB0aGF0IGludm9sdmUgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGNvc21ldGljIGxvZ2dpbmcsIG5vbi1mdW5jdGlvbmFsIGNvbnN0YW50IGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgKHBhcnRpY3VsYXJseSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUpLCBvciBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgb25seSBydW4gZHVyaW5nIGhvdC11bnBsdWcgb3BlcmF0aW9ucy4gVGhpcyBpcyBmYWlybHkgc3RhbmRhcmQuCgpMb29raW5nIGRlZXBlciwgdGhpcyBwYXRjaCAqZG9lcyogbW9kaWZ5IGNvcmUgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgODAyLjFRIFZMQU4gZGV2aWNlIG1hbmFnZW1lbnQuIFdlIGFyZSB0YWxraW5nIGFib3V0IGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgYmFycmllcnMsIFJDVSBkZXJlZmVyZW5jaW5nLCBhbmQgcG9pbnRlciBhc3NpZ25tZW50cyBpbiBmdW5jdGlvbnMgbGlrZSBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLCBgX192bGFuX2dyb3VwX2dldF9kZXZpY2VgLCBhbmQgYHZsYW5fZ3JvdXBfc2V0X2RldmljZWAuIFRoaXMgaW5jbHVkZXMgdGhlIGZ1bmN0aW9ucyBleGVjdXRlZCB3aGVuIHJlZ2lzdGVyaW5nLCB1bnJlZ2lzdGVyaW5nIGFuZCB0cmFuc21pdHRpbmcgVkxBTiBkZXZpY2VzLiBDcml0aWNhbGx5LCB0aGlzIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gc3RhbmRhcmQgUUVNVSAvIHN5emthbGxlciBlbnZpcm9ubWVudHMuIEkgY2FuIHRyaWdnZXIgdGhpcyB0aHJvdWdoIHJlZ3VsYXIgcnRubCBsaW5rIG9wZXJhdGlvbnPigJRjcmVhdGluZywgZGVsZXRpbmcsIHNlbmRpbmcsIGFuZCByZWNlaXZpbmcgcGFja2V0cyB3aXRoIFZMQU5zLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY2FsbCBjaGFpbnMuIGBuZXQvODAyMXEvdmxhbi5jYCBpcyB3aGF0IEkgc2hvdWxkIGZvY3VzIG9uLiBgcmVnaXN0ZXJfdmxhbl9kZXZgIGNhbGxzIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAgYW5kIGB2bGFuX2dyb3VwX3NldF9kZXZpY2VgLCB3aGlsZSBgdW5yZWdpc3Rlcl92bGFuX2RldmAgY2FsbHMgYHZsYW5fZ3JvdXBfc2V0X2RldmljZWAuIGB2bGFuX25ld2xpbmtgIGFuZCBgdmxhbl9kZWxsaW5rYCBmcm9tIGBuZXQvODAyMXEvdmxhbl9uZXRsaW5rLmNgIGNhbGwgYHJlZ2lzdGVyX3ZsYW5fZGV2YCBhbmQgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCByZXNwZWN0aXZlbHkuCgpBbHJpZ2h0LCBzbyB0aGUga2V5IGFyZWFzIGFyZSBgbmV0LzgwMjFxL3ZsYW4uY2AgYW5kIGBuZXQvODAyMXEvdmxhbl9uZXRsaW5rLmNgLiBXaXRoIHRob3NlIHBpZWNlcyBpbiBwbGFjZSBhbmQgY29uZmlybWVkLCBJJiMzOTtkIHNheSB0aGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbl9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKlx0VkxBTiBuZXRsaW5rIGNvbnRyb2wgaW50ZXJmYWNlXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBcdENvcHlyaWdodCAoYykgMjAwNyBQYXRyaWNrIE1jSGFyZHkgXHUwMDNja2FiZXJAdHJhc2gubmV0XHUwMDNlXG4gICA2Olx0ICovXG4gICA3Olx0XG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvcnRuZXRsaW5rLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcJiMzNDt2bGFuLmhcJiMzNDtcbiAgMTY6XHRcbiAgMTc6XHRcbiAgMTg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdmxhbl9wb2xpY3lbSUZMQV9WTEFOX01BWCAmIzQzOyAxXSA9IHtcbiAgMTk6XHRcdFtJRkxBX1ZMQU5fSURdXHRcdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcbiAgMjA6XHRcdFtJRkxBX1ZMQU5fRkxBR1NdXHQ9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgaWZsYV92bGFuX2ZsYWdzKSB9LFxuICAyMTpcdFx0W0lGTEFfVkxBTl9FR1JFU1NfUU9TXVx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuICAyMjpcdFx0W0lGTEFfVkxBTl9JTkdSRVNTX1FPU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuICAyMzpcdFx0W0lGTEFfVkxBTl9QUk9UT0NPTF1cdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcbiAgMjQ6XHR9O1xuICAyNTpcdFxuICAyNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2bGFuX21hcF9wb2xpY3lbSUZMQV9WTEFOX1FPU19NQVggJiM0MzsgMV0gPSB7XG4gIDI3Olx0XHRbSUZMQV9WTEFOX1FPU19NQVBQSU5HXSA9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgaWZsYV92bGFuX3Fvc19tYXBwaW5nKSB9LFxuICAyODpcdH07XG4gIDI5Olx0XG4gIDMwOlx0XG4gIDMxOlx0c3RhdGljIGlubGluZSBpbnQgdmxhbl92YWxpZGF0ZV9xb3NfbWFwKHN0cnVjdCBubGF0dHIgKmF0dHIpXG4gIDMyOlx0e1xuICAzMzpcdFx0aWYgKCFhdHRyKVxuICAzNDpcdFx0XHRyZXR1cm4gMDtcbiAgMzU6XHRcdHJldHVybiBubGFfdmFsaWRhdGVfbmVzdGVkX2RlcHJlY2F0ZWQoYXR0ciwgSUZMQV9WTEFOX1FPU19NQVgsXG4gIDM2Olx0XHRcdFx0XHRcdCAgICAgIHZsYW5fbWFwX3BvbGljeSwgTlVMTCk7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBpbnQgdmxhbl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4gIDQwOlx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAgNDE6XHR7XG4gIDQyOlx0XHRzdHJ1Y3QgaWZsYV92bGFuX2ZsYWdzICpmbGFncztcbiAgNDM6XHRcdHUxNiBpZDtcbiAgNDQ6XHRcdGludCBlcnI7XG4gIDQ1Olx0XG4gIDQ2Olx0XHRpZiAodGJbSUZMQV9BRERSRVNTXSkge1xuICA0NzpcdFx0XHRpZiAobmxhX2xlbih0YltJRkxBX0FERFJFU1NdKSAhPSBFVEhfQUxFTikge1xuICA0ODpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludmFsaWQgbGluayBhZGRyZXNzXCYjMzQ7KTtcbiAgNDk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNTA6XHRcdFx0fVxuICA1MTpcdFx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmxhX2RhdGEodGJbSUZMQV9BRERSRVNTXSkpKSB7XG4gIDUyOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBsaW5rIGFkZHJlc3NcJiMzNDspO1xuICA1MzpcdFx0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiAgNTQ6XHRcdFx0fVxuICA1NTpcdFx0fVxuICA1NjpcdFxuICA1NzpcdFx0aWYgKCFkYXRhKSB7XG4gIDU4Olx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O1ZMQU4gcHJvcGVydGllcyBub3Qgc3BlY2lmaWVkXCYjMzQ7KTtcbiAgNTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDYwOlx0XHR9XG4gIDYxOlx0XG4gIDYyOlx0XHRpZiAoZGF0YVtJRkxBX1ZMQU5fUFJPVE9DT0xdKSB7XG4gIDYzOlx0XHRcdHN3aXRjaCAobmxhX2dldF9iZTE2KGRhdGFbSUZMQV9WTEFOX1BST1RPQ09MXSkpIHtcbiAgNjQ6XHRcdFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxUSk6XG4gIDY1Olx0XHRcdGNhc2UgaHRvbnMoRVRIX1BfODAyMUFEKTpcbiAgNjY6XHRcdFx0XHRicmVhaztcbiAgNjc6XHRcdFx0ZGVmYXVsdDpcbiAgNjg6XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtJbnZhbGlkIFZMQU4gcHJvdG9jb2xcJiMzNDspO1xuICA2OTpcdFx0XHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuICA3MDpcdFx0XHR9XG4gIDcxOlx0XHR9XG4gIDcyOlx0XG4gIDczOlx0XHRpZiAoZGF0YVtJRkxBX1ZMQU5fSURdKSB7XG4gIDc0Olx0XHRcdGlkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX1ZMQU5fSURdKTtcbiAgNzU6XHRcdFx0aWYgKGlkIFx1MDAzZT0gVkxBTl9WSURfTUFTSykge1xuICA3NjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludmFsaWQgVkxBTiBpZFwmIzM0Oyk7XG4gIDc3Olx0XHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gIDc4Olx0XHRcdH1cbiAgNzk6XHRcdH1cbiAgODA6XHRcdGlmIChkYXRhW0lGTEFfVkxBTl9GTEFHU10pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBWTEFOIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIFZMQU4gYXNwZWN0cywgYW5kIGl0JiMzOTtzIHRpbWUgdG8gYnJvYWRlbiBteSB2aWV3LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSBob3cgYG5ldC84MDIxcS92bGFuX25ldGxpbmsuY2AgYW5kIGBuZXQvODAyMXEvdmxhbi5jYCBmbGVzaCBvdXQgdGhlIFZMQU4gaGFuZGxpbmcsIGluIHBhcnRpY3VsYXIgZnJvbSBhIG5ldGxpbmsgcGVyc3BlY3RpdmUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBuZXRsaW5rIGludGVyZmFjZXMgZm9yIG1hbmFnaW5nIHRoZXNlIFZMQU4gZGV2aWNlcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIHRoZSBpb2N0bCBjYWxscywgYW5kIGhvdyB0aGV5IGdldCB3aXJlZCB0b2dldGhlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHdhbGtpbmcgdGhyb3VnaCB0aGUgY29kZSBsaW5lIGJ5IGxpbmUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBlbXBsb3llZCwgYW5kIGhvdyBkbyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZXM/IEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIGZsb3c6IGhvdyBWTEFOcyBhcmUgY3JlYXRlZCwgY29uZmlndXJlZCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyaWRnaW5nIGFuZCBmb3J3YXJkaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aCByZXNwZWN0IHRvIHBhY2tldCB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcuIEFsc28sIEkgbXVzdCBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlcyBvciBsb2NrIGNvbnRlbnRpb24gd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC84MDIxcS92bGFuX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDE0MTpcdHtcbiAxNDI6XHRcdHN0cnVjdCBuZXQgKmxpbmtfbmV0ID0gcnRubF9uZXdsaW5rX2xpbmtfbmV0KHBhcmFtcyk7XG4gMTQzOlx0XHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcbiAxNDQ6XHRcdHN0cnVjdCBubGF0dHIgKipkYXRhID0gcGFyYW1zLVx1MDAzZWRhdGE7XG4gMTQ1Olx0XHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBwYXJhbXMtXHUwMDNldGI7XG4gMTQ2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXY7XG4gMTQ3Olx0XHR1bnNpZ25lZCBpbnQgbWF4X210dTtcbiAxNDg6XHRcdF9fYmUxNiBwcm90bztcbiAxNDk6XHRcdGludCBlcnI7XG4gMTUwOlx0XG4gMTUxOlx0XHRpZiAoIWRhdGFbSUZMQV9WTEFOX0lEXSkge1xuIDE1MjpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtWTEFOIGlkIG5vdCBzcGVjaWZpZWRcJiMzNDspO1xuIDE1MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxNTQ6XHRcdH1cbiAxNTU6XHRcbiAxNTY6XHRcdGlmICghdGJbSUZMQV9MSU5LXSkge1xuIDE1NzpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtsaW5rIG5vdCBzcGVjaWZpZWRcJiMzNDspO1xuIDE1ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxNTk6XHRcdH1cbiAxNjA6XHRcbiAxNjE6XHRcdHJlYWxfZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KGxpbmtfbmV0LCBubGFfZ2V0X3UzMih0YltJRkxBX0xJTktdKSk7XG4gMTYyOlx0XHRpZiAoIXJlYWxfZGV2KSB7XG4gMTYzOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O2xpbmsgZG9lcyBub3QgZXhpc3RcJiMzNDspO1xuIDE2NDpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcbiAxNjc6XHRcdHByb3RvID0gbmxhX2dldF9iZTE2X2RlZmF1bHQoZGF0YVtJRkxBX1ZMQU5fUFJPVE9DT0xdLFxuIDE2ODpcdFx0XHRcdFx0ICAgICBodG9ucyhFVEhfUF84MDIxUSkpO1xuIDE2OTpcdFxuIDE3MDpcdFx0dmxhbi1cdTAwM2V2bGFuX3Byb3RvID0gcHJvdG87XG4gMTcxOlx0XHR2bGFuLVx1MDAzZXZsYW5faWRcdCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9WTEFOX0lEXSk7XG4gMTcyOlx0XHR2bGFuLVx1MDAzZXJlYWxfZGV2XHQgPSByZWFsX2RldjtcbiAxNzM6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IChyZWFsX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBJRkZfWE1JVF9EU1RfUkVMRUFTRSk7XG4gMTc0Olx0XHR2bGFuLVx1MDAzZWZsYWdzXHQgPSBWTEFOX0ZMQUdfUkVPUkRFUl9IRFI7XG4gMTc1Olx0XG4gMTc2Olx0XHRlcnIgPSB2bGFuX2NoZWNrX3JlYWxfZGV2KHJlYWxfZGV2LCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8sIHZsYW4tXHUwMDNldmxhbl9pZCxcbiAxNzc6XHRcdFx0XHRcdCAgZXh0YWNrKTtcbiAxNzg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMTc5Olx0XHRcdHJldHVybiBlcnI7XG4gMTgwOlx0XG4gMTgxOlx0XHRtYXhfbXR1ID0gbmV0aWZfcmVkdWNlc192bGFuX210dShyZWFsX2RldikgPyByZWFsX2Rldi1cdTAwM2VtdHUgLSBWTEFOX0hMRU4gOlxuIDE4MjpcdFx0XHRcdFx0XHRcdCAgICAgcmVhbF9kZXYtXHUwMDNlbXR1O1xuIDE4MzpcdFx0aWYgKCF0YltJRkxBX01UVV0pXG4gMTg0Olx0XHRcdGRldi1cdTAwM2VtdHUgPSBtYXhfbXR1O1xuIDE4NTpcdFx0ZWxzZSBpZiAoZGV2LVx1MDAzZW10dSBcdTAwM2UgbWF4X210dSlcbiAxODY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTg3Olx0XG4gMTg4Olx0XHQvKiBOb3RlOiBJZiB0aGlzIGluaXRpYWwgdmxhbl9jaGFuZ2VsaW5rKCkgZmFpbHMsIHdlIG5lZWRcbiAxODk6XHRcdCAqIHRvIGNhbGwgdmxhbl9kZXZfZnJlZV9lZ3Jlc3NfcHJpb3JpdHkoKSB0byBmcmVlIG1lbW9yeS5cbiAxOTA6XHRcdCAqL1xuIDE5MTpcdFx0ZXJyID0gdmxhbl9jaGFuZ2VsaW5rKGRldiwgdGIsIGRhdGEsIGV4dGFjayk7XG4gMTkyOlx0XG4gMTkzOlx0XHRpZiAoIWVycilcbiAxOTQ6XHRcdFx0ZXJyID0gcmVnaXN0ZXJfdmxhbl9kZXYoZGV2LCBleHRhY2spO1xuIDE5NTpcdFxuIDE5NjpcdFx0aWYgKGVycilcbiAxOTc6XHRcdFx0dmxhbl9kZXZfZnJlZV9lZ3Jlc3NfcHJpb3JpdHkoZGV2KTtcbiAxOTg6XHRcdHJldHVybiBlcnI7XG4gMTk5Olx0fVxuIDIwMDpcdFxuIDIwMTpcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IHZsYW5fcW9zX21hcF9zaXplKHVuc2lnbmVkIGludCBuKVxuIDIwMjpcdHtcbiAyMDM6XHRcdGlmIChuID09IDApXG4gMjA0Olx0XHRcdHJldHVybiAwO1xuIDIwNTpcdFx0LyogSUZMQV9WTEFOX3tFR1JFU1MsSU5HUkVTU31fUU9TICYjNDM7IG4gKiBJRkxBX1ZMQU5fUU9TX01BUFBJTkcgKi9cbiAyMDY6XHRcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IG5sYXR0cikpICYjNDM7XG4gMjA3Olx0XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmxhX3ZsYW5fcW9zX21hcHBpbmcpKSAqIG47XG4gMjA4Olx0fVxuIDIwOTpcdFxuIDIxMDpcdHN0YXRpYyBzaXplX3Qgdmxhbl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDIxMTpcdHtcbiAyMTI6XHRcdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdihkZXYpO1xuIDIxMzpcdFxuIDIxNDpcdFx0cmV0dXJuIG5sYV90b3RhbF9zaXplKDIpICYjNDM7XHQvKiBJRkxBX1ZMQU5fUFJPVE9DT0wgKi9cbiAyMTU6XHRcdCAgICAgICBubGFfdG90YWxfc2l6ZSgyKSAmIzQzO1x0LyogSUZMQV9WTEFOX0lEICovXG4gMjE2Olx0XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmxhX3ZsYW5fZmxhZ3MpKSAmIzQzOyAvKiBJRkxBX1ZMQU5fRkxBR1MgKi9cbiAyMTc6XHRcdCAgICAgICB2bGFuX3Fvc19tYXBfc2l6ZSh2bGFuLVx1MDAzZW5yX2luZ3Jlc3NfbWFwcGluZ3MpICYjNDM7XG4gMjE4Olx0XHQgICAgICAgdmxhbl9xb3NfbWFwX3NpemUodmxhbi1cdTAwM2Vucl9lZ3Jlc3NfbWFwcGluZ3MpO1xuIDIxOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVkxBTiBEZXZpY2UgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IFZMQU4gZGV2aWNlcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIHByb2Nlc3MuIE15IGd1dCB0ZWxscyBtZSB0aGUgY29yZSBvZiB0aGlzIGxpZXMgaW4gYG5ldC84MDIxcS92bGFuLmNgLiBUaW1lIHRvIGRpZyBpbnRvIGByZWdpc3Rlcl92bGFuX2RldmAgYW5kIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSwgd2l0aG91dCBhIGRvdWJ0LCB0aGUgbGluY2hwaW5zIG9mIGFkZGluZyBhbmQgcmVtb3ZpbmcgVkxBTiBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSwgaG93IHRoZXkgaGFuZGxlIHRoZSBWTEFOIElEIGFzc2lnbm1lbnQgYW5kIHRyYWNraW5nLCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgYnJpZGdlIHNldHVwIChpZiBhbnkpLCBhbmQgb2YgY291cnNlLCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zLCBlbnN1cmluZyB0aGUgZnVuY3Rpb25zIGFyZSB0aHJlYWQtc2FmZSBhbmQgcHJvdGVjdCBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgbmV0d29ya2luZyBkZXZpY2UgcmVnaXN0cmF0aW9uIHJvdXRpbmVzIGJlaW5nIGNhbGxlZCwgYnV0IHRoZSBkZXZpbCYjMzk7cyBhbHdheXMgaW4gdGhlIGRldGFpbHMg4oCTIEkmIzM5O20gaG9waW5nIHRvIGRpc2NvdmVyIHNvbWUgaW5ub3ZhdGl2ZSBoYW5kbGluZyBvZiB0aGUgODAyLjFRIHRhZ2dpbmcgcHJvdG9jb2wgaXRzZWxmLiBUaGlzIHdpbGwgYmUgYW4gaW50ZXJlc3RpbmcgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC84MDIxcS92bGFuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbilcbiAgODE6XHR7XG4gIDgyOlx0XHRpZiAoISh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfQlJJREdFX0JJTkRJTkcpKVxuICA4MzpcdFx0XHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xuICA4NDpcdH1cbiAgODU6XHRcbiAgODY6XHR2b2lkIHVucmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiAgODc6XHR7XG4gIDg4Olx0XHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcbiAgODk6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tXHUwMDNlcmVhbF9kZXY7XG4gIDkwOlx0XHRzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm87XG4gIDkxOlx0XHRzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwO1xuICA5MjpcdFx0dTE2IHZsYW5faWQgPSB2bGFuLVx1MDAzZXZsYW5faWQ7XG4gIDkzOlx0XG4gIDk0Olx0XHRBU1NFUlRfUlROTCgpO1xuICA5NTpcdFxuICA5NjpcdFx0dmxhbl9pbmZvID0gcnRubF9kZXJlZmVyZW5jZShyZWFsX2Rldi1cdTAwM2V2bGFuX2luZm8pO1xuICA5NzpcdFx0QlVHX09OKCF2bGFuX2luZm8pO1xuICA5ODpcdFxuICA5OTpcdFx0Z3JwID0gXHUwMDI2dmxhbl9pbmZvLVx1MDAzZWdycDtcbiAxMDA6XHRcbiAxMDE6XHRcdGdycC1cdTAwM2Vucl92bGFuX2RldnMtLTtcbiAxMDI6XHRcbiAxMDM6XHRcdGlmICh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfTVZSUClcbiAxMDQ6XHRcdFx0dmxhbl9tdnJwX3JlcXVlc3RfbGVhdmUoZGV2KTtcbiAxMDU6XHRcdGlmICh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfR1ZSUClcbiAxMDY6XHRcdFx0dmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoZGV2KTtcbiAxMDc6XHRcbiAxMDg6XHRcdHZsYW5fZ3JvdXBfc2V0X2RldmljZShncnAsIHZsYW4tXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCwgTlVMTCk7XG4gMTA5Olx0XG4gMTEwOlx0XHRuZXRkZXZfdXBwZXJfZGV2X3VubGluayhyZWFsX2RldiwgZGV2KTtcbiAxMTE6XHRcdC8qIEJlY2F1c2UgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoKSBtYWtlcyBzdXJlIGF0IGxlYXN0IG9uZSByY3VcbiAxMTI6XHRcdCAqIGdyYWNlIHBlcmlvZCBpcyByZXNwZWN0ZWQgYmVmb3JlIGRldmljZSBmcmVlaW5nLFxuIDExMzpcdFx0ICogd2UgZG9udCBuZWVkIHRvIGNhbGwgc3luY2hyb25pemVfbmV0KCkgaGVyZS5cbiAxMTQ6XHRcdCAqL1xuIDExNTpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcbiAxMTY6XHRcbiAxMTc6XHRcdGlmIChncnAtXHUwMDNlbnJfdmxhbl9kZXZzID09IDApIHtcbiAxMTg6XHRcdFx0dmxhbl9tdnJwX3VuaW5pdF9hcHBsaWNhbnQocmVhbF9kZXYpO1xuIDExOTpcdFx0XHR2bGFuX2d2cnBfdW5pbml0X2FwcGxpY2FudChyZWFsX2Rldik7XG4gMTIwOlx0XHR9XG4gMTIxOlx0XG4gMTIyOlx0XHR2bGFuX3ZpZF9kZWwocmVhbF9kZXYsIHZsYW4tXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCk7XG4gMTIzOlx0fVxuIDEyNDpcdFxuIDEyNTpcdGludCB2bGFuX2NoZWNrX3JlYWxfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldixcbiAxMjY6XHRcdFx0XHRfX2JlMTYgcHJvdG9jb2wsIHUxNiB2bGFuX2lkLFxuIDEyNzpcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxMjg6XHR7XG4gMTI5Olx0XHRjb25zdCBjaGFyICpuYW1lID0gcmVhbF9kZXYtXHUwMDNlbmFtZTtcbiAxMzA6XHRcbiAxMzE6XHRcdGlmIChyZWFsX2Rldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQgfHxcbiAxMzI6XHRcdCAgICByZWFsX2Rldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUikge1xuIDEzMzpcdFx0XHRwcl9pbmZvKFwmIzM0O1ZMQU5zIG5vdCBzdXBwb3J0ZWQgb24gJXNcXG5cJiMzNDssIG5hbWUpO1xuIDEzNDpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtWTEFOcyBub3Qgc3VwcG9ydGVkIG9uIGRldmljZVwmIzM0Oyk7XG4gMTM1Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAxMzY6XHRcdH1cbiAxMzc6XHRcbiAxMzg6XHRcdGlmICh2bGFuX2ZpbmRfZGV2KHJlYWxfZGV2LCBwcm90b2NvbCwgdmxhbl9pZCkgIT0gTlVMTCkge1xuIDEzOTpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtWTEFOIGRldmljZSBhbHJlYWR5IGV4aXN0c1wmIzM0Oyk7XG4gMTQwOlx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDE0MTpcdFx0fVxuIDE0MjpcdFxuIDE0MzpcdFx0cmV0dXJuIDA7XG4gMTQ0Olx0fVxuIDE0NTpcdFxuIDE0NjpcdGludCByZWdpc3Rlcl92bGFuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMTQ3Olx0e1xuIDE0ODpcdFx0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KGRldik7XG4gMTQ5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLVx1MDAzZXJlYWxfZGV2O1xuIDE1MDpcdFx0dTE2IHZsYW5faWQgPSB2bGFuLVx1MDAzZXZsYW5faWQ7XG4gMTUxOlx0XHRzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm87XG4gMTUyOlx0XHRzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwO1xuIDE1MzpcdFx0aW50IGVycjtcbiAxNTQ6XHRcbiAxNTU6XHRcdGVyciA9IHZsYW5fdmlkX2FkZChyZWFsX2Rldiwgdmxhbi1cdTAwM2V2bGFuX3Byb3RvLCB2bGFuX2lkKTtcbiAxNTY6XHRcdGlmIChlcnIpXG4gMTU3Olx0XHRcdHJldHVybiBlcnI7XG4gMTU4Olx0XG4gMTU5Olx0XHR2bGFuX2luZm8gPSBydG5sX2RlcmVmZXJlbmNlKHJlYWxfZGV2LVx1MDAzZXZsYW5faW5mbyk7XG4gMTYwOlx0XHQvKiB2bGFuX2luZm8gc2hvdWxkIGJlIHRoZXJlIG5vdy4gdmxhbl92aWRfYWRkIHRvb2sgY2FyZSBvZiBpdCAqL1xuIDE2MTpcdFx0QlVHX09OKCF2bGFuX2luZm8pO1xuIDE2MjpcdFxuIDE2MzpcdFx0Z3JwID0gXHUwMDI2dmxhbl9pbmZvLVx1MDAzZWdycDtcbiAxNjQ6XHRcdGlmIChncnAtXHUwMDNlbnJfdmxhbl9kZXZzID09IDApIHtcbiAxNjU6XHRcdFx0ZXJyID0gdmxhbl9ndnJwX2luaXRfYXBwbGljYW50KHJlYWxfZGV2KTtcbiAxNjY6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAxNjc6XHRcdFx0XHRnb3RvIG91dF92aWRfZGVsO1xuIDE2ODpcdFx0XHRlcnIgPSB2bGFuX212cnBfaW5pdF9hcHBsaWNhbnQocmVhbF9kZXYpO1xuIDE2OTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDE3MDpcdFx0XHRcdGdvdG8gb3V0X3VuaW5pdF9ndnJwO1xuIDE3MTpcdFx0fVxuIDE3MjpcdFxuIDE3MzpcdFx0ZXJyID0gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoZ3JwLCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8sIHZsYW5faWQpO1xuIDE3NDpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAxNzU6XHRcdFx0Z290byBvdXRfdW5pbml0X212cnA7XG4gMTc2Olx0XG4gMTc3Olx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiAxNzg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMTc5Olx0XHRcdGdvdG8gb3V0X3VuaW5pdF9tdnJwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgwOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVkxBTiBEZXZpY2UgUmVnaXN0cmF0aW9uIGFuZCBVbnJlZ2lzdHJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCBgdmxhbl9uZXdsaW5rYCwgYW5kIGB2bGFuX2RlbGxpbmtgIGFyZSB0aGUga2V5IGV4cG9ydGVkLCBub24tc3RhdGljIGVudHJ5IHBvaW50cyBoZXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHJlZ2lzdGVyX3ZsYW5fZGV2YCBhbmQgYHVucmVnaXN0ZXJfdmxhbl9kZXZgIHRvIHNlZSB3aGVyZSB0aGV5IGFyZSBleHBvcnRlZCBmcm9tLiBBaGEsIGJvdGggb2YgdGhvc2UgYXJlIGRlZmluZWQgd2l0aGluIGBuZXQvODAyMXEvdmxhbi5jYC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgd291bGQgYmUgZ29vZCBjYW5kaWRhdGVzIGZvciBkZWVwZXIgYW5hbHlzaXMgYXMgRm9jdXNTeW1ib2xzIOKAkyBgcmVnaXN0ZXJfdmxhbl9kZXZgLCBgdW5yZWdpc3Rlcl92bGFuX2RldmAsIGB2bGFuX25ld2xpbmtgIG9yIHBvc3NpYmx5IGV2ZW4gYHZsYW5fY2hlY2tfcmVhbF9kZXZgLiBUaW1lIHRvIGNoZWNrIG91dCB0aGUgc3ltYm9sIGRlZmluaXRpb25zIGFjcm9zcyBgbmV0LzgwMjFxL3ZsYW4uY2AgYW5kIGFsc28gYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgdG8gc2VlIHdoaWNoIGFyZSB0aGUgcmlnaHQgb25lcyB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC84MDIxcSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbl9jb3JlLmM9NzY9c3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy05OS19XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MTAwOkVYUE9SVF9TWU1CT0woX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KTtcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMDEtXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTAyPXN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2Rldl9yZWFsX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMTAtfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjExMTpFWFBPUlRfU1lNQk9MKHZsYW5fZGV2X3JlYWxfZGV2KTtcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMTItXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTEzPXUxNiB2bGFuX2Rldl92bGFuX2lkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTExNi19XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MTE3OkVYUE9SVF9TWU1CT0wodmxhbl9kZXZfdmxhbl9pZCk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMTE4LVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTExOT1fX2JlMTYgdmxhbl9kZXZfdmxhbl9wcm90byhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMjItfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjEyMzpFWFBPUlRfU1lNQk9MKHZsYW5fZGV2X3ZsYW5fcHJvdG8pO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTEyNC1cbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MjI3PWludCB2bGFuX2Zvcl9lYWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI1MS19XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MjUyOkVYUE9SVF9TWU1CT0wodmxhbl9mb3JfZWFjaCk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMjUzLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTI1ND1pbnQgdmxhbl9maWx0ZXJfcHVzaF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy0yODAtfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjI4MTpFWFBPUlRfU1lNQk9MKHZsYW5fZmlsdGVyX3B1c2hfdmlkcyk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMjgyLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTI4Mz12b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90bylcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMjkyLX1cbm5ldC84MDIxcS92bGFuX2NvcmUuYzoyOTM6RVhQT1JUX1NZTUJPTCh2bGFuX2ZpbHRlcl9kcm9wX3ZpZHMpO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI5NC1cbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MzE4PWludCB2bGFuX3ZpZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy0zNTEtfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjM1MjpFWFBPUlRfU1lNQk9MKHZsYW5fdmlkX2FkZCk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzUzLVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYz0zNzE9dm9pZCB2bGFuX3ZpZF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy0zOTMtfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjM5NDpFWFBPUlRfU1lNQk9MKHZsYW5fdmlkX2RlbCk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzk1LVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTM5Nj1pbnQgdmxhbl92aWRzX2FkZF9ieV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDI4LX1cbm5ldC84MDIxcS92bGFuX2NvcmUuYzo0Mjk6RVhQT1JUX1NZTUJPTCh2bGFuX3ZpZHNfYWRkX2J5X2Rldik7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDMwLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTQzMT12b2lkIHZsYW5fdmlkc19kZWxfYnlfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ0OC19XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NDQ5OkVYUE9SVF9TWU1CT0wodmxhbl92aWRzX2RlbF9ieV9kZXYpO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ1MC1cbm5ldC84MDIxcS92bGFuX2NvcmUuYz00NTE9Ym9vbCB2bGFuX3VzZXNfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ2MS19XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NDYyOkVYUE9SVF9TWU1CT0wodmxhbl91c2VzX2Rldik7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY5NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgVkxBTiBIZWFkZXIgRGVjbGFyYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgVkxBTiBoZWFkZXImIzM5O3MgcHVibGljbHkgYWNjZXNzaWJsZSBjb21wb25lbnRzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgYG5ldC84MDIxcS92bGFuLmhgLiBUaGlzIGhlYWRlciBmaWxlIHNob3VsZCBnaXZlIG1lIGEgY29uY2lzZSBvdmVydmlldyBvZiB3aGF0JiMzOTtzICpub3QqIHN0YXRpYyB3aXRoaW4gdGhlIGBuZXQvODAyMXEvYCBkaXJlY3RvcnkuIEJ5IGV4YW1pbmluZyB0aGUgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbnMgaGVyZSwgSSBjYW4gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGludGVyZmFjZXMgYW5kIHN0cnVjdHVyZXMgdGhhdCBhcmUgZGVzaWduZWQgZm9yIGV4dGVybmFsIHVzZSBvciBtb2RpZmljYXRpb24uIFRoaXMgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgVkxBTiB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcgbWVjaGFuaXNtcyBpbnRlcmFjdCB3aXRoIG90aGVyIG5ldHdvcmsgY29tcG9uZW50cyBhbmQgcHJvdG9jb2xzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzIChpZiBhbnkpLCBhbmQgcGVyaGFwcyBzb21lIGVudW1zIHJlbGF0ZWQgdG8gVkxBTi1zcGVjaWZpYyBwYXJhbWV0ZXJzIGxpa2UgdGhlIFZMQU4gSUQgYW5kIHByaW9yaXR5LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaG93IHRoaXMgbW9kdWxlIGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC84MDIxcS92bGFuLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0XHRcdFx0XHQgICAgIHZsYW5fcHJvdG8sIHZsYW5faWQpO1xuIDEwMTpcdFxuIDEwMjpcdFx0cmV0dXJuIE5VTEw7XG4gMTAzOlx0fVxuIDEwNDpcdFxuIDEwNTpcdHN0YXRpYyBpbmxpbmUgbmV0ZGV2X2ZlYXR1cmVzX3Qgdmxhbl90bmxfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2KVxuIDEwNjpcdHtcbiAxMDc6XHRcdG5ldGRldl9mZWF0dXJlc190IHJldDtcbiAxMDg6XHRcbiAxMDk6XHRcdHJldCA9IHJlYWxfZGV2LVx1MDAzZWh3X2VuY19mZWF0dXJlcyBcdTAwMjZcbiAxMTA6XHRcdCAgICAgIChORVRJRl9GX0NTVU1fTUFTSyB8IE5FVElGX0ZfR1NPX1NPRlRXQVJFIHxcbiAxMTE6XHRcdCAgICAgICBORVRJRl9GX0dTT19FTkNBUF9BTEwpO1xuIDExMjpcdFxuIDExMzpcdFx0aWYgKChyZXQgXHUwMDI2IE5FVElGX0ZfR1NPX0VOQ0FQX0FMTCkgXHUwMDI2XHUwMDI2IChyZXQgXHUwMDI2IE5FVElGX0ZfQ1NVTV9NQVNLKSlcbiAxMTQ6XHRcdFx0cmV0dXJuIChyZXQgXHUwMDI2IH5ORVRJRl9GX0NTVU1fTUFTSykgfCBORVRJRl9GX0hXX0NTVU07XG4gMTE1Olx0XHRyZXR1cm4gMDtcbiAxMTY6XHR9XG4gMTE3Olx0XG4gMTE4Olx0I2RlZmluZSB2bGFuX2dyb3VwX2Zvcl9lYWNoX2RldihncnAsIGksIGRldikgXFxcbiAxMTk6XHRcdGZvciAoKGkpID0gMDsgaSBcdTAwM2MgVkxBTl9QUk9UT19OVU0gKiBWTEFOX05fVklEOyBpJiM0MzsmIzQzOykgXFxcbiAxMjA6XHRcdFx0aWYgKCgoZGV2KSA9IF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKChncnApLCAoaSkgLyBWTEFOX05fVklELCBcXFxuIDEyMTpcdFx0XHRcdFx0XHRcdFx0ICAgIChpKSAlIFZMQU5fTl9WSUQpKSlcbiAxMjI6XHRcbiAxMjM6XHRpbnQgdmxhbl9maWx0ZXJfcHVzaF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKTtcbiAxMjQ6XHR2b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XG4gMTI1Olx0XG4gMTI2Olx0LyogbmV0ZGV2X3dvcmsgZXZlbnRzIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVhbCBkZXZpY2UsIHNlZSB2bGFuX2Rldl93b3JrKCkuICovXG4gMTI3Olx0ZW51bSB7XG4gMTI4Olx0XHRWTEFOX1dPUktfTElOS19TVEFURVx0PSBCSVQoMCksIC8qIHN5bmMgdXAvZG93biB3aXRoIHJlYWxfZGV2ICovXG4gMTI5Olx0XHRWTEFOX1dPUktfTVRVXHRcdD0gQklUKDEpLCAvKiBjbGFtcCBtdHUgdG8gcmVhbF9kZXYmIzM5O3MgKi9cbiAxMzA6XHRcdFZMQU5fV09SS19GRUFUVVJFU1x0PSBCSVQoMiksIC8qIHJlLWluaGVyaXQgcmVhbF9kZXYgZmVhdHVyZXMgKi9cbiAxMzE6XHR9O1xuIDEzMjpcdFxuIDEzMzpcdHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcbiAxMzQ6XHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAxMzU6XHRcdFx0XHRcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pO1xuIDEzNjpcdFxuIDEzNzpcdC8qIGZvdW5kIGluIHZsYW5fZGV2LmMgKi9cbiAxMzg6XHR2b2lkIHZsYW5fZGV2X3NldF9pbmdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTM5Olx0XHRcdFx0XHQgICB1MzIgc2tiX3ByaW8sIHUxNiB2bGFuX3ByaW8pO1xuIDE0MDpcdGludCB2bGFuX2Rldl9zZXRfZWdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTQxOlx0XHRcdFx0XHQgdTMyIHNrYl9wcmlvLCB1MTYgdmxhbl9wcmlvKTtcbiAxNDI6XHR2b2lkIHZsYW5fZGV2X2ZyZWVfZWdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIDE0MzpcdGludCB2bGFuX2Rldl9jaGFuZ2VfZmxhZ3MoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZsYWcsIHUzMiBtYXNrKTtcbiAxNDQ6XHR2b2lkIHZsYW5fZGV2X2dldF9yZWFsZGV2X25hbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqcmVzdWx0LFxuIDE0NTpcdFx0XHRcdCAgICAgICBzaXplX3Qgc2l6ZSk7XG4gMTQ2Olx0XG4gMTQ3Olx0aW50IHZsYW5fY2hlY2tfcmVhbF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxuIDE0ODpcdFx0XHRcdF9fYmUxNiBwcm90b2NvbCwgdTE2IHZsYW5faWQsXG4gMTQ5Olx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiAxNTA6XHR2b2lkIHZsYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gMTUxOlx0aW50IHJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gMTUyOlx0dm9pZCB1bnJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuIDE1MzpcdGJvb2wgdmxhbl9kZXZfaW5oZXJpdF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTU0Olx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2KTtcbiAxNTU6XHRcbiAxNTY6XHRzdGF0aWMgaW5saW5lIHUzMiB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTU3Olx0XHRcdFx0XHRcdCAgICB1MTYgdmxhbl90Y2kpXG4gMTU4Olx0e1xuIDE1OTpcdFx0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZpcCA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcbiAxNjA6XHRcbiAxNjE6XHRcdHJldHVybiB2aXAtXHUwMDNlaW5ncmVzc19wcmlvcml0eV9tYXBbKHZsYW5fdGNpIFx1MDAzZVx1MDAzZSBWTEFOX1BSSU9fU0hJRlQpIFx1MDAyNiAweDddO1xuIDE2MjpcdH1cbiAxNjM6XHRcbiAxNjQ6XHQjaWZkZWYgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUFxuIDE2NTpcdGludCB2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIDE2NjpcdHZvaWQgdmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gMTY3Olx0aW50IHZsYW5fZ3ZycF9pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiAxNjg6XHR2b2lkIHZsYW5fZ3ZycF91bmluaXRfYXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIDE2OTpcdGludCB2bGFuX2d2cnBfaW5pdCh2b2lkKTtcbiAxNzA6XHR2b2lkIHZsYW5fZ3ZycF91bmluaXQodm9pZCk7XG4gMTcxOlx0I2Vsc2VcbiAxNzI6XHRzdGF0aWMgaW5saW5lIGludCB2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH1cbiAxNzM6XHRzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikge31cbiAxNzQ6XHRzdGF0aWMgaW5saW5lIGludCB2bGFuX2d2cnBfaW5pdF9hcHBsaWNhbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfVxuIDE3NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2d2cnBfdW5pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7fVxuIDE3NjpcdHN0YXRpYyBpbmxpbmUgaW50IHZsYW5fZ3ZycF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAxNzc6XHRzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ndnJwX3VuaW5pdCh2b2lkKSB7fVxuIDE3ODpcdCNlbmRpZlxuIDE3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYxMAoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA2NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgODAyLjFRIFZMQU4gU3VwcG9ydCBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gVG8gY29tcGlsZSB0aGlzIGNvZGUsIEkgbmVlZCBgQ09ORklHX1ZMQU5fODAyMVFgLiBJJiMzOTttIGRvdWJsZS1jaGVja2luZyBpdHMgZGVwZW5kZW5jaWVzIOKAkyBub3RoaW5nIHNpZ25pZmljYW50LCBqdXN0IHRoZSB1c3VhbCBORVQvSU5FVCByZXF1aXJlbWVudHMgd2hpY2ggYXJlIGdlbmVyYWxseSBlbmFibGVkLiBUaGUgb3B0aW9uYWwgZmVhdHVyZXMsIGBWTEFOXzgwMjFRX0dWUlBgIGFuZCBgVkxBTl84MDIxUV9NVlJQYCwgZGVwZW5kIG9uIGBWTEFOXzgwMjFRYCB3aGljaCBpcyBleHBlY3RlZC4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgZnVuY3Rpb25zLiBGb2N1c1N5bWJvbHMgaW5kaWNhdGUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBkaXJlY3RseSBtb2RpZmllZCBvciBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZTogYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCBgdmxhbl92aWRfYWRkYCwgYHZsYW5fdmlkX2RlbGAsIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLCBhbmQgYHZsYW5fZm9yX2VhY2hgLiBJJiMzOTttIGFsc28gbG9va2luZyBhdCBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLCB3aGljaCBpcyBzdGF0aWMsIGFuZCBpdHMgY2FsbGVycy4gVGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCB3aGljaCBpbmNsdWRlIGByZWdpc3Rlcl92bGFuX2RldmAsIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHZsYW5fZm9yX2VhY2hgLCBhbmQgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAsIGFyZSB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8uCgpOb3csIHRoZSBjcml0aWNhbCBwYXJ0OiBkZXRlcm1pbmluZyBpZiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0ZSB5ZXMuIFRoZXJlIGhhdmUgYmVlbiBtZW1vcnkgb3JkZXJpbmcgYW5kIFJDVSBwb2ludGVyIGFjY2VzcyBmaXhlcyBpbiA4MDIuMVEgVkxBTiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgdmxhbl9kZXZpY2VzX2FycmF5c2AuIEluY29ycmVjdCBSQ1UgYmFycmllcnMgb3IgZGVyZWZlcmVuY2VzIGNhbiBsZWFkIHRvIGNvbmN1cnJlbmN5IGJ1Z3Mg4oCTIGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBldmVuIG51bGwgZGVyZWZlcmVuY2VzIOKAkyB3aGVuIFZMQU4gZGV2aWNlcyBhcmUgY3JlYXRlZCwgZGVsZXRlZCwgb3IgbG9va2VkIHVwIGNvbmN1cnJlbnRseSB3aXRoaW4gdGhlIFJDVSBjcml0aWNhbCBzZWN0aW9uLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0LgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIEkmIzM5O2xsIHNldCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHRvIGluY2x1ZGUgYCYjMzQ7VkxBTl84MDIxUSYjMzQ7YCwgYW5kIEkmIzM5O2xsIGxpa2VseSBpbmNsdWRlIGAmIzM0O1ZMQU5fODAyMVFfR1ZSUCYjMzQ7YCBhbmQgYCYjMzQ7VkxBTl84MDIxUV9NVlJQJiMzNDtgIGFzIHdlbGwuIEZpbmFsbHksIG15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGByZWdpc3Rlcl92bGFuX2RldmAsIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YCwgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAsIGFuZCBgdmxhbl9mb3JfZWFjaGAuIEkmIzM5O3ZlIGNvbmZpcm1lZCBhbGwgdGhlc2UgZWxlbWVudHMgYW5kIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUV9HVlJQJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVFfTVZSUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2lzdGVyX3ZsYW5fZGV2JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1JiMzNDssCiAgICAmIzM0O3ZsYW5fZm9yX2VhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBjb25jdXJyZW5jeSBwcmltaXRpdmVzIGFuZCBSQ1UgYW5ub3RhdGlvbnMgZm9yIHRoZSA4MDIuMVEgVkxBTiBkZXZpY2UgbG9va3VwIHRhYmxlcyAoc3dpdGNoaW5nIHRvIHNtcF9zdG9yZV9yZWxlYXNlLCBzbXBfbG9hZF9hY3F1aXJlLCByY3VfYXNzaWduX3BvaW50ZXIsIGFuZCByY3VfZGVyZWZlcmVuY2VfcmF3KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBWTEFOIG1hbmFnZW1lbnQgYW5kIGxvb2t1cCBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVFfR1ZSUCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRX01WUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdpc3Rlcl92bGFuX2RldiYjMzQ7LAogICAgJiMzNDt1bnJlZ2lzdGVyX3ZsYW5fZGV2JiMzNDssCiAgICAmIzM0O19fdmxhbl9maW5kX2Rldl9kZWVwX3JjdSYjMzQ7LAogICAgJiMzNDt2bGFuX2Zvcl9lYWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgY29uY3VycmVuY3kgcHJpbWl0aXZlcyBhbmQgUkNVIGFubm90YXRpb25zIGZvciB0aGUgODAyLjFRIFZMQU4gZGV2aWNlIGxvb2t1cCB0YWJsZXMgKHN3aXRjaGluZyB0byBzbXBfc3RvcmVfcmVsZWFzZSwgc21wX2xvYWRfYWNxdWlyZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBhbmQgcmN1X2RlcmVmZXJlbmNlX3JhdykuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgVkxBTiBtYW5hZ2VtZW50IGFuZCBsb29rdXAgcGF0aHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgUkNVIGFubm90YXRpb25zIGFuZCBtZW1vcnkgb3JkZXJpbmcgcHJpbWl0aXZlcyBpbiB0aGUgODAyLjFRIFZMQU4gc3Vic3lzdGVtLCByZXBsYWNpbmcgc21wX3dtYigpL3NtcF9ybWIoKSB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkvc21wX2xvYWRfYWNxdWlyZSgpIGFuZCBhZGRpbmcgcmN1X2Fzc2lnbl9wb2ludGVyKCkvcmN1X2RlcmVmZXJlbmNlX3JhdygpIGFjY2Vzc29ycy4gVGhlIGR5bmFtaWMgYXJyYXlzIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jKCkgd2hpY2ggemVyb2VzIGFsbCBtZW1vcnkgdXBvbiBhbGxvY2F0aW9uLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBhY2Nlc3NlZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5IG9yIG1lbW9yeSBsaWZlY3ljbGUgaXNzdWVzIGluIHRoaXMgY29kZSB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMTk3ZmY5ZDI3ZWI4N2I3ODRlMjA1NDdjY2U4NTdjMDg5YjJkNTlmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMDo0ODoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IDJkMmVmYjg3Nzk3NWQuLmVjOWE3Y2M4YWZjNzQgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtNDksNyAmIzQzOzQ5LDcgQEAgY29uc3QgY2hhciB2bGFuX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiAJCQkJICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7CiAJdW5zaWduZWQgaW50IHZpZHg7CiAJdW5zaWduZWQgaW50IHNpemU7CiAJaW50IHBpZHg7CkBAIC03MCwxMCAmIzQzOzcwLDggQEAgc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiAJaWYgKGFycmF5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PQlVGUzsKIAotCS8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovCi0Jc21wX3dtYigpOwotCi0JdmctJmd0O3ZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0gPSBhcnJheTsKJiM0MzsJLyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaAppbmRleCBjNDFjYWFmOTQwOTVmLi5kODc0YWIzMjNkMzIwIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmgKQEAgLTIyLDggJiM0MzsyMiw4IEBAIGVudW0gdmxhbl9wcm90b3Mgewogc3RydWN0IHZsYW5fZ3JvdXAgewogCXVuc2lnbmVkIGludAkJbnJfdmxhbl9kZXZzOwogCXN0cnVjdCBobGlzdF9ub2RlCWhsaXN0OwkvKiBsaW5rZWQgbGlzdCAqLwotCXN0cnVjdCBuZXRfZGV2aWNlICoqdmxhbl9kZXZpY2VzX2FycmF5c1tWTEFOX1BST1RPX05VTV0KLQkJCQkJICAgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKip2bGFuX2RldmljZXNfYXJyYXlzW1ZMQU5fUFJPVE9fTlVNXQomIzQzOwkJCQkJCSAgICAgW1ZMQU5fR1JPVVBfQVJSQVlfU1BMSVRfUEFSVFNdOwogfTsKIAogc3RydWN0IHZsYW5faW5mbyB7CkBAIC01NCwxNSAmIzQzOzU0LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywKIAkJCQkJCQkgdW5zaWduZWQgaW50IHBpZHgsCiAJCQkJCQkJIHUxNiB2bGFuX2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7CiAKLQlhcnJheSA9IHZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdCi0JCQkJICAgICAgIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl07Ci0KLQkvKiBwYWlyZWQgd2l0aCBzbXBfd21iKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqLwotCXNtcF9ybWIoKTsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi8KJiM0MzsJYXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7dmctJmd0O3ZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF0KJiM0MzsJCQkJIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0pOwogCi0JcmV0dXJuIGFycmF5ID8gYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dIDogTlVMTDsKJiM0MzsJcmV0dXJuIGFycmF5ID8gcmN1X2RlcmVmZXJlbmNlX3JhdyhhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0pIDogTlVMTDsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywKQEAgLTgyLDEzICYjNDM7ODAsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHZsYW5fZ3JvdXBfc2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiAJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBwaWR4ID0gdmxhbl9wcm90b19pZHgodmxhbl9wcm90byk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKiphcnJheTsKIAogCWlmICghdmcgfHwgcGlkeCAmbHQ7IDApCiAJCXJldHVybjsKIAlhcnJheSA9IHZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdCiAJCQkJICAgICAgIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl07Ci0JYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gZGV2OwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dLCBkZXYpOwogfQogCiAvKiBNdXN0IGJlIGludm9rZWQgd2l0aCByY3VfcmVhZF9sb2NrIG9yIHdpdGggUlROTC4gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTEFOIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFZMQU4gY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0LzgwMjFxL3ZsYW4uY2AgYW5kIGBuZXQvODAyMXEvdmxhbi5oYC4gVGhpcyBzZWVtcyBsaWtlIGEgY29uY3VycmVuY3ktcmVsYXRlZCB1cGRhdGUsIGp1ZGdpbmcgYnkgdGhlIGNoYW5nZXMgaW52b2x2aW5nIGF0b21pYyBvcGVyYXRpb25zIGFuZCBtZW1vcnkgYmFycmllcnMuCgpMb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgX19yY3VgIGFuZCBjb3JyZXNwb25kaW5nIGF0b21pYyBvcGVyYXRpb25zIHN1cnJvdW5kaW5nIHRoZSBgdmxhbl9kZXZpY2VzX2FycmF5c2AgZGF0YSBzdHJ1Y3R1cmUuIEluIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIHRoZXkmIzM5O3ZlIHN3YXBwZWQgYHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7YCBmb3IgYHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7YC4gVGhlbiwgdGhlIHdyaXRlIHRvIHRoaXMgYXJyYXkgaGFzIGNoYW5nZWQsIHVzaW5nIGBzbXBfc3RvcmVfcmVsZWFzZWAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYHNtcF93bWJgIGZvbGxvd2VkIGJ5IGEgZGlyZWN0IGFzc2lnbm1lbnQuIFRoaXMgc2lnbmFscyBhbiBhdHRlbXB0IHRvIGltcHJvdmUgc3luY2hyb25pemF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBkZXZpY2UgbWFuYWdlbWVudC4KCldpdGhpbiBgdmxhbi5oYCwgdGhlIGFycmF5JiMzOTtzIGRlY2xhcmF0aW9uIHJlZmxlY3RzIHRoaXMgY2hhbmdlIHRvIHRoZSB1c2Ugb2YgYF9fcmN1YC4gSW4gYF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlYCwgdGhleSYjMzk7cmUgdXNpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGluc3RlYWQgb2YgcmVhZCBhbmQgYHNtcF9ybWJgLCBwbHVzIGFuIGByY3VfZGVyZWZlcmVuY2VfcmF3YCB0byBkZXJlZmVyZW5jZSB0aGUgYXJyYXkgZWxlbWVudCByYXRoZXIgdGhhbiBkaXJlY3QgYWNjZXNzLiBUaGlzIGRlZmluaXRlbHkgaXMgcmVsYXRlZCB0byByZWFkLWNvcHktdXBkYXRlIHNlbWFudGljcy4gU2ltaWxhcmx5LCB3aXRoaW4gYHZsYW5fZ3JvdXBfc2V0X2RldmljZWAsIHRoZSBhc3NpZ25tZW50IHRvIHRoZSBhcnJheSBub3cgdXNlcyBgcmN1X2Fzc2lnbl9wb2ludGVyYC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGhvdyB0aGUgYGFycmF5YCBpcyBhbGxvY2F0ZWQgd2l0aGluIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIHNvIEkmIzM5O2xsIGdyYWIgdGhlIGNvZGUgZnJvbSBgbmV0LzgwMjFxL3ZsYW4uY2AgYXJvdW5kIGxpbmVzIDQ1LTg1IHRvIHNlZSBob3cgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEZyb20gdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UsIEkgZXhwZWN0IHRvIHNlZSBhbiBleHBsaWNpdCBhbGxvY2F0aW9uLCBhbmQgcG9zc2libHkgYW5vdGhlciBmZW5jZSByZWxhdGVkIHRvIHRoZSBjcmVhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYGFycmF5YCBiZWZvcmUgaXQmIzM5O3MgYXNzaWduZWQgdG8gYHZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGUgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NTpcdGNvbnN0IGNoYXIgdmxhbl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjtcbiAgNDY6XHRcbiAgNDc6XHQvKiBFbmQgb2YgZ2xvYmFsIHZhcmlhYmxlcyBkZWZpbml0aW9ucy4gKi9cbiAgNDg6XHRcbiAgNDk6XHRzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiAgNTA6XHRcdFx0XHRcdCAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZClcbiAgNTE6XHR7XG4gIDUyOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuICA1MzpcdFx0dW5zaWduZWQgaW50IHZpZHg7XG4gIDU0Olx0XHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiAgNTU6XHRcdGludCBwaWR4O1xuICA1NjpcdFxuICA1NzpcdFx0QVNTRVJUX1JUTkwoKTtcbiAgNTg6XHRcbiAgNTk6XHRcdHBpZHggID0gdmxhbl9wcm90b19pZHgodmxhbl9wcm90byk7XG4gIDYwOlx0XHRpZiAocGlkeCBcdTAwM2MgMClcbiAgNjE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDYyOlx0XG4gIDYzOlx0XHR2aWR4ICA9IHZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOO1xuICA2NDpcdFx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdO1xuICA2NTpcdFx0aWYgKGFycmF5ICE9IE5VTEwpXG4gIDY2Olx0XHRcdHJldHVybiAwO1xuICA2NzpcdFxuICA2ODpcdFx0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZSAqKSAqIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU47XG4gIDY5Olx0XHRhcnJheSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiAgNzA6XHRcdGlmIChhcnJheSA9PSBOVUxMKVxuICA3MTpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gIDcyOlx0XG4gIDczOlx0XHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuICA3NDpcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xuICA3NTpcdFx0cmV0dXJuIDA7XG4gIDc2Olx0fVxuICA3NzpcdFxuICA3ODpcdHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcbiAgNzk6XHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAgODA6XHRcdFx0XHRcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXG4gIDgxOlx0e1xuICA4MjpcdFx0aWYgKCEodmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgVkxBTl9GTEFHX0JSSURHRV9CSU5ESU5HKSlcbiAgODM6XHRcdFx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocm9vdGRldiwgZGV2KTtcbiAgODQ6XHR9XG4gIDg1Olx0XG4gIDg2Olx0dm9pZCB1bnJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gIDg3Olx0e1xuICA4ODpcdFx0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KGRldik7XG4gIDg5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLVx1MDAzZXJlYWxfZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTYyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gVkxBTiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBjaXJjbGluZyBiYWNrLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0LzgwMjFxL3ZsYW4uaGAuIFRoaXMgbGlrZWx5IGhvbGRzIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIGZvciBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB3ZSYjMzk7bGwgZmluZCB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyBWTEFOIGludGVyZmFjZXMsIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBWTEFOIElEcywgYW5kIHBvdGVudGlhbGx5IHNvbWUga2V5IG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgVkxBTiBoZWFkZXJzLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IHRhZ2dpbmcgc2NlbmFyaW9zOiBzaW5nbGUgdGFnZ2VkLCBkb3VibGUgdGFnZ2VkIChRaW5RKSwgYW5kIGFueSBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb3Igb3B0aW1pemF0aW9ucyBpbXBsZW1lbnRlZCBmb3IgcGVyZm9ybWFuY2UuIEkgZXhwZWN0IHdlJiMzOTtsbCBhbHNvIGZpbmQgc29tZSB1c2VmdWwgY29tbWVudHMgcmVnYXJkaW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMgYW5kIGFueSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBmb3IgaGFyZHdhcmUgb2ZmbG9hZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZpbGUgaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIFZMQU4gb3BlcmF0aW9uIGluIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC84MDIxcS92bGFuLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAgIDI6XHQjaWZuZGVmIF9fQkVOX1ZMQU5fODAyXzFRX0lOQ19fXG4gICAzOlx0I2RlZmluZSBfX0JFTl9WTEFOXzgwMl8xUV9JTkNfX1xuICAgNDpcdFxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAgIDg6XHRcbiAgIDk6XHQvKiBpZiB0aGlzIGNoYW5nZXMsIGFsZ29yaXRobSB3aWxsIGhhdmUgdG8gYmUgcmV3b3JrZWQgYmVjYXVzZSB0aGlzXG4gIDEwOlx0ICogZGVwZW5kcyBvbiBjb21wbGV0ZWx5IGV4aGF1c3RpbmcgdGhlIFZMQU4gaWRlbnRpZmllciBzcGFjZS4gIFRodXNcbiAgMTE6XHQgKiBpdCBnaXZlcyBjb25zdGFudCB0aW1lIGxvb2stdXAsIGJ1dCBpbiBtYW55IGNhc2VzIGl0IHdhc3RlcyBtZW1vcnkuXG4gIDEyOlx0ICovXG4gIDEzOlx0I2RlZmluZSBWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTICA4XG4gIDE0Olx0I2RlZmluZSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOICAgICAoVkxBTl9OX1ZJRC9WTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTKVxuICAxNTpcdFxuICAxNjpcdGVudW0gdmxhbl9wcm90b3Mge1xuICAxNzpcdFx0VkxBTl9QUk9UT184MDIxUVx0PSAwLFxuICAxODpcdFx0VkxBTl9QUk9UT184MDIxQUQsXG4gIDE5Olx0XHRWTEFOX1BST1RPX05VTSxcbiAgMjA6XHR9O1xuICAyMTpcdFxuICAyMjpcdHN0cnVjdCB2bGFuX2dyb3VwIHtcbiAgMjM6XHRcdHVuc2lnbmVkIGludFx0XHRucl92bGFuX2RldnM7XG4gIDI0Olx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0aGxpc3Q7XHQvKiBsaW5rZWQgbGlzdCAqL1xuICAyNTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKip2bGFuX2RldmljZXNfYXJyYXlzW1ZMQU5fUFJPVE9fTlVNXVxuICAyNjpcdFx0XHRcdFx0XHRcdCAgICAgW1ZMQU5fR1JPVVBfQVJSQVlfU1BMSVRfUEFSVFNdO1xuICAyNzpcdH07XG4gIDI4Olx0XG4gIDI5Olx0c3RydWN0IHZsYW5faW5mbyB7XG4gIDMwOlx0XHRzdHJ1Y3QgbmV0X2RldmljZVx0KnJlYWxfZGV2OyAvKiBUaGUgZXRoZXJuZXQobGlrZSkgZGV2aWNlXG4gIDMxOlx0XHRcdFx0XHRcdCAgICAqIHRoZSB2bGFuIGlzIGF0dGFjaGVkIHRvLlxuICAzMjpcdFx0XHRcdFx0XHQgICAgKi9cbiAgMzM6XHRcdHN0cnVjdCB2bGFuX2dyb3VwXHRncnA7XG4gIDM0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHR2aWRfbGlzdDtcbiAgMzU6XHRcdHVuc2lnbmVkIGludFx0XHRucl92aWRzO1xuICAzNjpcdFx0Ym9vbFx0XHRcdGF1dG9fdmlkMDtcbiAgMzc6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4gIDM4Olx0fTtcbiAgMzk6XHRcbiAgNDA6XHRzdGF0aWMgaW5saW5lIGludCB2bGFuX3Byb3RvX2lkeChfX2JlMTYgcHJvdG8pXG4gIDQxOlx0e1xuICA0MjpcdFx0c3dpdGNoIChwcm90bykge1xuICA0MzpcdFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxUSk6XG4gIDQ0Olx0XHRcdHJldHVybiBWTEFOX1BST1RPXzgwMjFRO1xuICA0NTpcdFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxQUQpOlxuICA0NjpcdFx0XHRyZXR1cm4gVkxBTl9QUk9UT184MDIxQUQ7XG4gIDQ3Olx0XHRkZWZhdWx0OlxuICA0ODpcdFx0XHRXQVJOKDEsIFwmIzM0O2ludmFsaWQgVkxBTiBwcm90b2NvbDogMHglMDR4XFxuXCYjMzQ7LCBudG9ocyhwcm90bykpO1xuICA0OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNTA6XHRcdH1cbiAgNTE6XHR9XG4gIDUyOlx0XG4gIDUzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuICA1NDpcdFx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwaWR4LFxuICA1NTpcdFx0XHRcdFx0XHRcdFx0IHUxNiB2bGFuX2lkKVxuICA1NjpcdHtcbiAgNTc6XHRcdHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7XG4gIDU4Olx0XG4gIDU5Olx0XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xuICA2MDpcdFx0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbiAgNjE6XHRcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiAgNjI6XHRcbiAgNjM6XHRcdHJldHVybiBhcnJheSA/IHJjdV9kZXJlZmVyZW5jZV9yYXcoYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKSA6IE5VTEw7XG4gIDY0Olx0fVxuICA2NTpcdFxuICA2NjpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXG4gIDY3Olx0XHRcdFx0XHRcdFx0ICAgICAgIF9fYmUxNiB2bGFuX3Byb3RvLFxuICA2ODpcdFx0XHRcdFx0XHRcdCAgICAgICB1MTYgdmxhbl9pZClcbiAgNjk6XHR7XG4gIDcwOlx0XHRpbnQgcGlkeCA9IHZsYW5fcHJvdG9faWR4KHZsYW5fcHJvdG8pO1xuICA3MTpcdFxuICA3MjpcdFx0aWYgKHBpZHggXHUwMDNjIDApXG4gIDczOlx0XHRcdHJldHVybiBOVUxMO1xuICA3NDpcdFxuICA3NTpcdFx0cmV0dXJuIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKHZnLCBwaWR4LCB2bGFuX2lkKTtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0c3RhdGljIGlubGluZSB2b2lkIHZsYW5fZ3JvdXBfc2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXG4gIDc5Olx0XHRcdFx0XHRcdCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQsXG4gIDgwOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICA4MTpcdHtcbiAgODI6XHRcdGludCBwaWR4ID0gdmxhbl9wcm90b19pZHgodmxhbl9wcm90byk7XG4gIDgzOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuICA4NDpcdFxuICA4NTpcdFx0aWYgKCF2ZyB8fCBwaWR4IFx1MDAzYyAwKVxuICA4NjpcdFx0XHRyZXR1cm47XG4gIDg3Olx0XHRhcnJheSA9IHZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbiAgODg6XHRcdFx0XHRcdCAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dO1xuICA4OTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSwgZGV2KTtcbiAgOTA6XHR9XG4gIDkxOlx0XG4gIDkyOlx0LyogTXVzdCBiZSBpbnZva2VkIHdpdGggcmN1X3JlYWRfbG9jayBvciB3aXRoIFJUTkwuICovXG4gIDkzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9maW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXG4gIDk0Olx0XHRcdFx0XHRcdCAgICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXG4gIDk1Olx0e1xuICA5NjpcdFx0c3RydWN0IHZsYW5faW5mbyAqdmxhbl9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwocmVhbF9kZXYtXHUwMDNldmxhbl9pbmZvKTtcbiAgOTc6XHRcbiAgOTg6XHRcdGlmICh2bGFuX2luZm8pXG4gIDk5Olx0XHRcdHJldHVybiB2bGFuX2dyb3VwX2dldF9kZXZpY2UoXHUwMDI2dmxhbl9pbmZvLVx1MDAzZWdycCxcbiAxMDA6XHRcdFx0XHRcdFx0ICAgICB2bGFuX3Byb3RvLCB2bGFuX2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM4OQoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiA0NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBSQ1UgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHJlZmluaW5nIHRoZSBjb25jdXJyZW5jeSBhc3BlY3RzIG9mIDgwMi4xUSBWTEFOIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIGNvbnRleHQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHRpZ2h0ZW5pbmcgdXAgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgbWVtb3J5IGFjY2VzcyBzZW1hbnRpY3MuCgpGaXJzdCwgSSBzZWUgdGhlIHN3aXRjaCBmcm9tIHJhdyBgc21wX3dtYigpYCBhbmQgYHNtcF9ybWIoKWAgdG8gYHNtcF9zdG9yZV9yZWxlYXNlYCBhbmQgYHNtcF9sb2FkX2FjcXVpcmVgLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGEgbW9yZSBtb2Rlcm4gYW5kIHJvYnVzdCBhcHByb2FjaCB0byBtZW1vcnkgYmFycmllcnMuIFRoZSB1c2Ugb2YgYHJjdV9kZXJlZmVyZW5jZV9yYXdgIGFuZCBgcmN1X2Fzc2lnbl9wb2ludGVyYCBmb3IgdGhlIG5ldF9kZXZpY2UgcG9pbnRlciB3aXRoaW4gdGhlIFJDVSBhcnJheSBpcyBhbHNvIHRoZSBjb3JyZWN0IHdheSB0byBoYW5kbGUgdGhlc2UgdHlwZXMgb2Ygc3RydWN0dXJlcyBpbiBhbiBSQ1UgY29udGV4dCwgYW5kIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYF9fcmN1YCBhbm5vdGF0aW9ucyB0byB0aGUgYHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXlgIGlzIHByZWNpc2VseSB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSwgdG8gY2xlYXJseSBpZGVudGlmeSB0aGF0IHRoaXMgZGF0YSBpcyBtYW5hZ2VkIGJ5IFJDVS4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgbWVtb3J5IHNhZmV0eS4gVGhhbmtmdWxseSwgdGhlIGFycmF5IGFsbG9jYXRpb24gdXNlcyBga3phbGxvY2AsIHdoaWNoIGluaXRpYWxpemVzIHRoZSBtZW1vcnkgdG8gemVyby4gVGhpcyBpcyBhIGNydWNpYWwgY2hlY2sgdG8gcHJldmVudCBhbnkgYWNjaWRlbnRhbCByZWFkaW5nIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBTaW5jZSB0aGVyZSBhcmUgbm8gY2FsbHMgdG8gY29weV90b191c2VyLCBhbnkgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgcmVhZHMgZnJvbSBzdGFjayB2YXJpYWJsZXMsIHRoaXMgbmFycm93cyB0aGUgc2NvcGUgY29uc2lkZXJhYmx5LiBUaGlzIHBhdGNoIGlzIHB1cmVseSBmb2N1c2VkIG9uIGltcHJvdmluZyBSQ1UgYW5kIGNvbmN1cnJlbmN5LCBwbHVzIHJlc29sdmluZyB0aGUgc3BhcnNlIGBfX3JjdWAgYW5ub3RhdGlvbiBpc3N1ZXMuIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55IGV4cG9zdXJlIHRvIGl0LCB3aGljaCBpcyB0aGUgbWFpbiBjb25jZXJuIGhlcmUuIEdpdmVuIHRoYXQgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUCBhcmUgYWxyZWFkeSBpbiBwbGFjZSwgdGhlIHVzdWFsIGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGJvdW5kcyBpc3N1ZXMgYXJlIGhhbmRsZWQsIHNvIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KClNvLCBsZXQgbWUgc29saWRpZnkgdGhlIGNvbmNsdXNpb25zLiBXZSYjMzk7cmUgY29udmVydGluZyBiYXJyaWVyLWJhc2VkIFJDVSBwdWJsaXNoaW5nIHRvIHRoZSBtb3JlIGNvbnRlbXBvcmFyeSBhbmQgZXhwbGljaXQgYHNtcF9zdG9yZV9yZWxlYXNlYC9gc21wX2xvYWRfYWNxdWlyZWAgYXBwcm9hY2gsIGFsb25nIHdpdGggdGhlIGNvcnJlY3QgUkNVIGFubm90YXRpb25zIGFuZCBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgbWVtb3J5IGluIHF1ZXN0aW9uIGlzIGRlZmluaXRlbHkgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY2AuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQsIHVzZWQsIG9yIGxlYWtlZCBpbiBhbnkgd2F5LiBBbnkgY29uY3VycmVuY3kgaXNzdWVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBleGlzdGluZyBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGVyZWZvcmUsIHRoZSAmIzM0O05lZWRzS01TQU4mIzM0OyBmbGFnIGlzIGZhbHNlLiBJJiMzOTttIGNvbmZpZGVudCBhYm91dCB0aGlzIGFzc2Vzc21lbnQsIGFuZCBpdCYjMzk7cyB0aW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBSQ1UgYW5ub3RhdGlvbnMgYW5kIG1lbW9yeSBvcmRlcmluZyBwcmltaXRpdmVzIGluIHRoZSA4MDIuMVEgVkxBTiBzdWJzeXN0ZW0sIHJlcGxhY2luZyBzbXBfd21iKCkvc21wX3JtYigpIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKS9zbXBfbG9hZF9hY3F1aXJlKCkgYW5kIGFkZGluZyByY3VfYXNzaWduX3BvaW50ZXIoKS9yY3VfZGVyZWZlcmVuY2VfcmF3KCkgYWNjZXNzb3JzLiBUaGUgZHluYW1pYyBhcnJheXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MoKSB3aGljaCB6ZXJvZXMgYWxsIG1lbW9yeSB1cG9uIGFsbG9jYXRpb24uIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIGludHJvZHVjZWQsIGFjY2Vzc2VkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgY29uY3VycmVuY3kgb3IgbWVtb3J5IGxpZmVjeWNsZSBpc3N1ZXMgaW4gdGhpcyBjb2RlIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOL0tDU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIFJDVSBhbm5vdGF0aW9ucyBhbmQgbWVtb3J5IG9yZGVyaW5nIHByaW1pdGl2ZXMgaW4gdGhlIDgwMi4xUSBWTEFOIHN1YnN5c3RlbSwgcmVwbGFjaW5nIHNtcF93bWIoKS9zbXBfcm1iKCkgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpL3NtcF9sb2FkX2FjcXVpcmUoKSBhbmQgYWRkaW5nIHJjdV9hc3NpZ25fcG9pbnRlcigpL3JjdV9kZXJlZmVyZW5jZV9yYXcoKSBhY2Nlc3NvcnMuIFRoZSBkeW5hbWljIGFycmF5cyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIHdoaWNoIHplcm9lcyBhbGwgbWVtb3J5IHVwb24gYWxsb2NhdGlvbi4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgYWNjZXNzZWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBpbiB0aGlzIGNvZGUgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6MjYuMzM0NjYxNTI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2NDUwMzgyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiVkxBTl84MDIxUV9HVlJQXCIsXG4gICAgXCJWTEFOXzgwMjFRX01WUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdpc3Rlcl92bGFuX2RldlwiLFxuICAgIFwidW5yZWdpc3Rlcl92bGFuX2RldlwiLFxuICAgIFwiX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1XCIsXG4gICAgXCJ2bGFuX2Zvcl9lYWNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIFJDVSBhbm5vdGF0aW9ucyBhbmQgbWVtb3J5IG9yZGVyaW5nIHByaW1pdGl2ZXMgaW4gdGhlIDgwMi4xUSBWTEFOIHN1YnN5c3RlbSwgcmVwbGFjaW5nIHNtcF93bWIoKS9zbXBfcm1iKCkgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpL3NtcF9sb2FkX2FjcXVpcmUoKSBhbmQgYWRkaW5nIHJjdV9hc3NpZ25fcG9pbnRlcigpL3JjdV9kZXJlZmVyZW5jZV9yYXcoKSBhY2Nlc3NvcnMuIFRoZSBkeW5hbWljIGFycmF5cyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIHdoaWNoIHplcm9lcyBhbGwgbWVtb3J5IHVwb24gYWxsb2NhdGlvbi4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgYWNjZXNzZWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBpbiB0aGlzIGNvZGUgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGNvbmN1cnJlbmN5IHByaW1pdGl2ZXMgYW5kIFJDVSBhbm5vdGF0aW9ucyBmb3IgdGhlIDgwMi4xUSBWTEFOIGRldmljZSBsb29rdXAgdGFibGVzIChzd2l0Y2hpbmcgdG8gc21wX3N0b3JlX3JlbGVhc2UsIHNtcF9sb2FkX2FjcXVpcmUsIHJjdV9hc3NpZ25fcG9pbnRlciwgYW5kIHJjdV9kZXJlZmVyZW5jZV9yYXcpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgZm9yIFZMQU4gbWFuYWdlbWVudCBhbmQgbG9va3VwIHBhdGhzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjI2LjMzNDY2ODkzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0NzE5OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTE5N2ZmOWQyN2ViODdiNzg0ZTIwNTQ3Y2NlODU3YzA4OWIyZDU5ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDIwOjQ4OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jXFxuaW5kZXggMmQyZWZiODc3OTc1ZC4uZWM5YTdjYzhhZmM3NCAxMDA2NDRcXG4tLS0gYS9uZXQvODAyMXEvdmxhbi5jXFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uY1xcbkBAIC00OSw3ICs0OSw3IEBAIGNvbnN0IGNoYXIgdmxhbl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjtcXG4gc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxuIFxcdFxcdFxcdFxcdCAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZClcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xcbiBcXHR1bnNpZ25lZCBpbnQgdmlkeDtcXG4gXFx0dW5zaWduZWQgaW50IHNpemU7XFxuIFxcdGludCBwaWR4O1xcbkBAIC03MCwxMCArNzAsOCBAQCBzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcXG4gXFx0aWYgKGFycmF5ID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuLVxcdC8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXFxuLVxcdHNtcF93bWIoKTtcXG4tXFxuLVxcdHZnLVxcdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7XFxuK1xcdC8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmhcXG5pbmRleCBjNDFjYWFmOTQwOTVmLi5kODc0YWIzMjNkMzIwIDEwMDY0NFxcbi0tLSBhL25ldC84MDIxcS92bGFuLmhcXG4rKysgYi9uZXQvODAyMXEvdmxhbi5oXFxuQEAgLTIyLDggKzIyLDggQEAgZW51bSB2bGFuX3Byb3RvcyB7XFxuIHN0cnVjdCB2bGFuX2dyb3VwIHtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0bnJfdmxhbl9kZXZzO1xcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGhsaXN0O1xcdC8qIGxpbmtlZCBsaXN0ICovXFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICoqdmxhbl9kZXZpY2VzX2FycmF5c1tWTEFOX1BST1RPX05VTV1cXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKip2bGFuX2RldmljZXNfYXJyYXlzW1ZMQU5fUFJPVE9fTlVNXVxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTtcXG4gfTtcXG4gXFxuIHN0cnVjdCB2bGFuX2luZm8ge1xcbkBAIC01NCwxNSArNTQsMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBpZHgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCB1MTYgdmxhbl9pZClcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xcbiBcXG4tXFx0YXJyYXkgPSB2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxcbi1cXHRcXHRcXHRcXHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcXG4tXFxuLVxcdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXFxuLVxcdHNtcF9ybWIoKTtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi9cXG4rXFx0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxcbitcXHRcXHRcXHRcXHQgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSk7XFxuIFxcbi1cXHRyZXR1cm4gYXJyYXkgPyBhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0gOiBOVUxMO1xcbitcXHRyZXR1cm4gYXJyYXkgPyByY3VfZGVyZWZlcmVuY2VfcmF3KGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSkgOiBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbkBAIC04MiwxMyArODAsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHZsYW5fZ3JvdXBfc2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGludCBwaWR4ID0gdmxhbl9wcm90b19pZHgodmxhbl9wcm90byk7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7XFxuIFxcbiBcXHRpZiAoIXZnIHx8IHBpZHggXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdGFycmF5ID0gdmctXFx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cXG4gXFx0XFx0XFx0XFx0ICAgICAgIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl07XFxuLVxcdGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA9IGRldjtcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSwgZGV2KTtcXG4gfVxcbiBcXG4gLyogTXVzdCBiZSBpbnZva2VkIHdpdGggcmN1X3JlYWRfbG9jayBvciB3aXRoIFJUTkwuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjI2LjkyMjYxMDEwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDU2MjgwNjU0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiVkxBTl84MDIxUV9HVlJQXCIsXG4gICAgXCJWTEFOXzgwMjFRX01WUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdpc3Rlcl92bGFuX2RldlwiLFxuICAgIFwidW5yZWdpc3Rlcl92bGFuX2RldlwiLFxuICAgIFwiX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1XCIsXG4gICAgXCJ2bGFuX2Zvcl9lYWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBjb25jdXJyZW5jeSBwcmltaXRpdmVzIGFuZCBSQ1UgYW5ub3RhdGlvbnMgZm9yIHRoZSA4MDIuMVEgVkxBTiBkZXZpY2UgbG9va3VwIHRhYmxlcyAoc3dpdGNoaW5nIHRvIHNtcF9zdG9yZV9yZWxlYXNlLCBzbXBfbG9hZF9hY3F1aXJlLCByY3VfYXNzaWduX3BvaW50ZXIsIGFuZCByY3VfZGVyZWZlcmVuY2VfcmF3KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBWTEFOIG1hbmFnZW1lbnQgYW5kIGxvb2t1cCBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMTk3ZmY5ZDI3ZWI4N2I3ODRlMjA1NDdjY2U4NTdjMDg5YjJkNTlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMDo0ODoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jXG5pbmRleCAyZDJlZmI4Nzc5NzVkLi5lYzlhN2NjOGFmYzc0IDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uY1xuKysrIGIvbmV0LzgwMjFxL3ZsYW4uY1xuQEAgLTQ5LDcgKzQ5LDcgQEAgY29uc3QgY2hhciB2bGFuX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OO1xuIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0ICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFx0dW5zaWduZWQgaW50IHZpZHg7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiBcdGludCBwaWR4O1xuQEAgLTcwLDEwICs3MCw4IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0aWYgKGFycmF5ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXG4tXHRzbXBfd21iKCk7XG4tXG4tXHR2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oXG5pbmRleCBjNDFjYWFmOTQwOTVmLi5kODc0YWIzMjNkMzIwIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uaFxuQEAgLTIyLDggKzIyLDggQEAgZW51bSB2bGFuX3Byb3RvcyB7XG4gc3RydWN0IHZsYW5fZ3JvdXAge1xuIFx0dW5zaWduZWQgaW50XHRcdG5yX3ZsYW5fZGV2cztcbiBcdHN0cnVjdCBobGlzdF9ub2RlXHRobGlzdDtcdC8qIGxpbmtlZCBsaXN0ICovXG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXG4tXHRcdFx0XHRcdCAgICAgICBbVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUU107XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXG4rXHRcdFx0XHRcdFx0ICAgICBbVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUU107XG4gfTtcbiBcbiBzdHJ1Y3Qgdmxhbl9pbmZvIHtcbkBAIC01NCwxNSArNTQsMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwaWR4LFxuIFx0XHRcdFx0XHRcdFx0IHUxNiB2bGFuX2lkKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuLVx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4tXHRcdFx0XHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcbi1cbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG4tXHRzbXBfcm1iKCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xuK1x0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbitcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiBcbi1cdHJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7XG4rXHRyZXR1cm4gYXJyYXkgPyByY3VfZGVyZWZlcmVuY2VfcmF3KGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSkgOiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuQEAgLTgyLDEzICs4MCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ncm91cF9zZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiBcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IHBpZHggPSB2bGFuX3Byb3RvX2lkeCh2bGFuX3Byb3RvKTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuIFx0aWYgKCF2ZyB8fCBwaWR4IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXHRhcnJheSA9IHZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbiBcdFx0XHRcdCAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dO1xuLVx0YXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gZGV2O1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSwgZGV2KTtcbiB9XG4gXG4gLyogTXVzdCBiZSBpbnZva2VkIHdpdGggcmN1X3JlYWRfbG9jayBvciB3aXRoIFJUTkwuICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0ODoyNi45MjI2MTM2MTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzAzODY3NDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkxBTiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXNzZWN0IHRoZSBjaGFuZ2VzLCBmb2N1c2luZyBvbiB0aGUgY29yZSBmaWxlIG1vZGlmaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgbmV0LzgwMjFxL3ZsYW4uY2AgYW5kIGBuZXQvODAyMXEvdmxhbi5oYCBmaWxlcyDigJMgc28gVkxBTiB0YWdnaW5nLCBuYXR1cmFsbHkuXG5cblNwZWNpZmljYWxseSwgaW4gYHZsYW4uY2AsIHRoZSBrZXkgYWRqdXN0bWVudCBzZWVtcyB0byBiZSBpbiBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLiBUaGUgY3JpdGljYWwgc3dpdGNoIGlzIHRoZSBtb3ZlIGZyb20gYSBzaW1wbGUgcG9pbnRlciBhcnJheSwgYHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7YCwgdG8gYW4gUkNVLXNhZmUgdmVyc2lvbjogYHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7YC4gVGhpcyBzY3JlYW1zIGNvbmN1cnJlbnQgYWNjZXNzIGFuZCB0aGUgbmVlZCBmb3IgcHJvcGVyIG1lbW9yeSBiYXJyaWVyL29yZGVyaW5nLiBSZXBsYWNpbmcgYHNtcF93bWIoKWAgYW5kIGRpcmVjdCBhc3NpZ25tZW50IHdpdGggYHNtcF9zdG9yZV9yZWxlYXNlKClgIGlzIHRoZSBnaXZlYXdheSDigJMgcHJvdGVjdGluZyB0aGF0IHdyaXRlIHdpdGggYSByZWxlYXNlIGJhcnJpZXIuXG5cblRoZW4sIGluIGB2bGFuLmhgLCB0aGUgYHN0cnVjdCB2bGFuX2dyb3VwYCBub3cgaGFzIGl0cyBhcnJheSBlbGVtZW50cyBhbm5vdGF0ZWQgd2l0aCBgX19yY3VgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGFjY29tcGFueWluZyBjaGFuZ2VzIGluIGBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZWAgYXJlIGFsc28gdGVsbGluZy4gVGhlIHVzZSBvZiBgc21wX2xvYWRfYWNxdWlyZWAgaW5zdGVhZCBvZiBgc21wX3JtYmAgYW5kIGByY3VfZGVyZWZlcmVuY2VfcmF3YCBjb25maXJtcyB0aGlzLiBXZSdyZSBsb2FkaW5nIHRoZSBwb2ludGVyIHdpdGggYW4gYWNxdWlyZSBiYXJyaWVyIHRvIGVuc3VyZSB3ZSBzZWUgYWxsIHByaW9yIHdyaXRlcywgYW5kIHRoZW4gZGVyZWZlcmVuY2luZyBpdCB3aXRoIHRoZSBSQ1UgcHJpbWl0aXZlcy4gU2ltaWxhcmx5LCBgdmxhbl9ncm91cF9zZXRfZGV2aWNlYCBub3cgdXNlcyBgcmN1X2Fzc2lnbl9wb2ludGVyKClgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBSQ1UgcGF0dGVybiBmb3Igc2FmZWx5IHB1Ymxpc2hpbmcgYSBwb2ludGVyLlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBhbmQgcmFjZSBjb25kaXRpb25zIHdoZW4gYWNjZXNzaW5nIHRoZSBWTEFOIGRldmljZSBhcnJheSwgd2hpY2ggd291bGQgdHlwaWNhbGx5IGJlIGVuY291bnRlcmVkIGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gTm93LCBsZXQgbWUgY2hlY2sgdGhlIEtjb25maWcgYW5kIHN1cnJvdW5kaW5nIGZpbGVzIHdpdGhpbiB0aGUgYG5ldC84MDIxcWAgZGlyZWN0b3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgZW5hYmxlZCBhcyBhIGNvbnNlcXVlbmNlIG9mIHRoaXMgcGF0Y2gsIG9yIGlmIGl0IGNoYW5nZXMgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgVkxBTiBkcml2ZXIuIEknbGwgdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIGBuZXQvODAyMXEvS2NvbmZpZ2AgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjMyLjIyNjQ4NTI4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwMjYzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZMQU5fODAyMVFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0LzgwMjFxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC84MDIxcS9LY29uZmlnLTUtXFxubmV0LzgwMjFxL0tjb25maWc6Njpjb25maWcgVkxBTl84MDIxUVxcbm5ldC84MDIxcS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIjgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFxcXCJcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTIxLVxcbm5ldC84MDIxcS9LY29uZmlnOjIyOmNvbmZpZyBWTEFOXzgwMjFRX0dWUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cXHRib29sIFxcXCJHVlJQIChHQVJQIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0LzgwMjFxL0tjb25maWctMzEtXFxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxcbm5ldC84MDIxcS9LY29uZmlnLTMzLVxcdGJvb2wgXFxcIk1WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0ODozMi4zNDQ1MTYwMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTc2ODAxNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgODAyLjFRIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgaG93IHRoZSA4MDIuMVEgVkxBTiB0YWdnaW5nIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaW50ZWdyYXRlcyBpdCwgYW5kLCB3ZWxsLCBob3cgdGhlIG9wdGlvbnMgYW5kIHNldHRpbmdzIGFyZSBzdHJ1Y3R1cmVkLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBjb25maWd1cmF0aW9uIGFuZCBidWlsZCBmaWxlcy5cblxuTGV0J3MgYmVnaW4gYnkgcHVsbGluZyB1cCBgbmV0LzgwMjFxL0tjb25maWdgLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBleHBvc2VkIHRvIHRoZSB1c2VyIChpZiBhdCBhbGwpLiBUaGlzIGlzIHdoZXJlIEknbGwgc2VlIHRoZSBlbmFibGUvZGlzYWJsZSBvcHRpb25zLCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZXMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGhvdyBJJ2xsIGludGVycHJldCB0aGUgY29kZS5cblxuVGhlbiwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgYG5ldC84MDIxcS9NYWtlZmlsZWAuIFRoaXMgd2lsbCByZXZlYWwgaG93IHRoZSA4MDIuMVEgY29kZSBpcyBjb21waWxlZCwgbGlua2VkLCBhbmQgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzb3VyY2UgZmlsZXMgaW5jbHVkZWQsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgaG93IHRoZSBtb2R1bGVzIGFyZSBidWlsdC4gSXQgc2hvdWxkIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHdoaWNoIGZpbGVzIGltcGxlbWVudCB3aGF0IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgd2hlcmUgSSBjYW4gY29ubmVjdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBhY3R1YWwgc291cmNlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHR3byBmaWxlcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGFuYWx5c2lzLCBhbGxvd2luZyBtZSB0byB1bmRlcnN0YW5kICpob3cqIHRvIGNvbnRyb2wgYW5kIGNvbXBpbGUgdGhlIHVuZGVybHlpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjM1LjUyMTMyMDQwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENvbmZpZ3VyYXRpb24gZm9yIDgwMi4xUSBWTEFOIHN1cHBvcnRcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFZMQU5fODAyMVFcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCI4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFNlbGVjdCB0aGlzIGFuZCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNyZWF0ZSA4MDIuMVEgVkxBTiBpbnRlcmZhY2VzXFxuICAxMDpcXHRcXHQgIG9uIHlvdXIgRXRoZXJuZXQgaW50ZXJmYWNlcy4gODAyLjFRIFZMQU4gc3VwcG9ydHMgYWxtb3N0XFxuICAxMTpcXHRcXHQgIGV2ZXJ5dGhpbmcgYSByZWd1bGFyIEV0aGVybmV0IGludGVyZmFjZSBkb2VzLCBpbmNsdWRpbmdcXG4gIDEyOlxcdFxcdCAgZmlyZXdhbGxpbmcsIGJyaWRnaW5nLCBhbmQgb2YgY291cnNlIElQIHRyYWZmaWMuIFlvdSB3aWxsIG5lZWRcXG4gIDEzOlxcdFxcdCAgdGhlICdpcCcgdXRpbGl0eSBpbiBvcmRlciB0byBlZmZlY3RpdmVseSB1c2UgVkxBTnMuXFxuICAxNDpcXHRcXHQgIFNlZSB0aGUgVkxBTiB3ZWIgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcXG4gIDE1OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cuY2FuZGVsYXRlY2guY29tL35ncmVlYXIvdmxhbi5odG1sXFx1MDAzZVxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAxODpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIDgwMjFxLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBWTEFOXzgwMjFRX0dWUlBcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkdWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcXG4gIDI1OlxcdFxcdHNlbGVjdCBHQVJQXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSBHVlJQIGVuZC1zeXN0ZW0gc3VwcG9ydC4gR1ZSUCBpcyB1c2VkIGZvclxcbiAgMjg6XFx0XFx0ICBhdXRvbWF0aWMgcHJvcGFnYXRpb24gb2YgcmVnaXN0ZXJlZCBWTEFOcyB0byBzd2l0Y2hlcy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgVkxBTl84MDIxUV9NVlJQXFxuICAzMzpcXHRcXHRib29sIFxcXCJNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gIDM0OlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgMzU6XFx0XFx0c2VsZWN0IE1SUFxcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBTZWxlY3QgdGhpcyB0byBlbmFibGUgTVZSUCBlbmQtc3lzdGVtIHN1cHBvcnQuIE1WUlAgaXMgdXNlZCBmb3JcXG4gIDM4OlxcdFxcdCAgYXV0b21hdGljIHByb3BhZ2F0aW9uIG9mIHJlZ2lzdGVyZWQgVkxBTnMgdG8gc3dpdGNoZXM7IGl0XFxuICAzOTpcXHRcXHQgIHN1cGVyc2VkZXMgR1ZSUCBhbmQgaXMgbm90IGJhY2t3YXJkcy1jb21wYXRpYmxlLlxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjM1LjUyMTQxNzg2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODI4ODEzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSA4MDIuMVEgTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSA4MDIuMVEgVkxBTiBzdXBwb3J0IHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgZmlyc3Qgc3RvcCBpcyBkZWZpbml0ZWx5IGBuZXQvODAyMXEvTWFrZWZpbGVgLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB3aGF0IG9iamVjdCBmaWxlcyBhcmUgYmVpbmcgY29tcGlsZWQuIEtub3dpbmcgdGhpcywgSSBjYW4gdHJhY2UgZGVwZW5kZW5jaWVzLCBwaW5wb2ludCB3aGljaCBzb3VyY2UgZmlsZXMgYXJlIGNyaXRpY2FsLCBhbmQgZ2V0IGEgZmVlbCBmb3IgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIHRoZSBtb2R1bGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbXBpbGVkIG9iamVjdHMgd2lsbCBnaXZlIG1lIGEgZ3JlYXQgb3ZlcnZpZXcgb2YgdGhlIGNvZGUgdGhhdCBtYW5hZ2VzIHRoZSBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyBsb2dpYywgYW5kIHdoaWNoIHBhcnRzIGRlYWwgd2l0aCB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGhhcmR3YXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2lzIHRvIHRoZW4gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBvcHRpbWl6YXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjM3LjkwNDMwMjY0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvODAyMXEvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVkxBTiBsYXllci5cXG4gICA0OlxcdCNcXG4gICA1OlxcdG9iai0kKHN1YnN0IG0seSwkKENPTkZJR19WTEFOXzgwMjFRKSlcXHQrPSB2bGFuX2NvcmUub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXFx0XFx0Kz0gODAyMXEub1xcbiAgIDc6XFx0XFxuICAgODpcXHQ4MDIxcS15XFx0XFx0XFx0XFx0XFx0Oj0gdmxhbi5vIHZsYW5fZGV2Lm8gdmxhbl9uZXRsaW5rLm9cXG4gICA5OlxcdDgwMjFxLSQoQ09ORklHX1ZMQU5fODAyMVFfR1ZSUClcXHRcXHQrPSB2bGFuX2d2cnAub1xcbiAgMTA6XFx0ODAyMXEtJChDT05GSUdfVkxBTl84MDIxUV9NVlJQKVxcdFxcdCs9IHZsYW5fbXZycC5vXFxuICAxMTpcXHQ4MDIxcS0kKENPTkZJR19QUk9DX0ZTKVxcdFxcdFxcdCs9IHZsYW5wcm9jLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6MzcuOTA0NDYwMzE2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk1NDc2OTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqQW5hbHl6aW5nIFZMQU4gR3JvdXAgQWxsb2NhdGlvbiBcdTAwMjYgRGV2aWNlIEFzc29jaWF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBhbmQgdXNhZ2Ugb2YgdGhlc2UgVkxBTi1yZWxhdGVkIGZ1bmN0aW9uczogYHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkYCwgYF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlYCwgYW5kIGB2bGFuX2dyb3VwX3NldF9kZXZpY2VgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSB0aGVpciB1c2FnZSDigJMgZmluZCBvdXQgd2hlcmUgdGhleSdyZSBjYWxsZWQgYW5kIHdoYXQgdGhleSdyZSBkb2luZyB3aXRoaW4gdGhlIGxhcmdlciBjb2RlYmFzZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8ga25vdyB3aGF0IG1vZHVsZXMgcmVseSBvbiB0aGVtLCBhbmQgaG93LlxuXG5gdmxhbl9ncm91cF9wcmVhbGxvY192aWRgIGxpa2VseSBoYW5kbGVzIHByZS1hbGxvY2F0aW9uIG9yIHJlc2VydmF0aW9uIG9mIFZMQU4gSURzLCBwb3NzaWJseSBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIG9yIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0OiBhcmUgd2UgcHJlLWFsbG9jYXRpbmcgdG8gYXZvaWQgY29uZmxpY3RzLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdGhhdC5cblxuVGhlbiB0aGVyZSdzIGBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZWAgd2hpY2ggc3VnZ2VzdHMgYSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgbG9va2luZyB1cCBvciByZXRyaWV2aW5nIHRoZSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBWTEFOIGdyb3VwLiBUaGUgZG91YmxlIHVuZGVyc2NvcmUgYXQgdGhlIGJlZ2lubmluZyBzdWdnZXN0cyB0aGF0IGl0IG1pZ2h0IGJlIGFuIGludGVybmFsIGZ1bmN0aW9uIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCB3aGljaCBtZWFucyBJJ2xsIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIFwicmVhbFwiIEFQSSB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHN1cHBvcnRpbmcsIGFuZCB3aHkgaXQgaXMgYWJzdHJhY3RlZCBpbiB0aGlzIHdheS4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgdG8gbWFwIFZMQU4gSURzIHRvIG5ldHdvcmsgaW50ZXJmYWNlcy4gSXMgdGhpcyBoYXBwZW5pbmcgYXQgcnVudGltZSwgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBvciBvbmx5IGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uP1xuXG5GaW5hbGx5LCBgdmxhbl9ncm91cF9zZXRfZGV2aWNlYCBpbXBsaWVzIGFzc2lnbmluZyBvciBhc3NvY2lhdGluZyBhIG5ldHdvcmsgZGV2aWNlIChsaWtlIGEgcGh5c2ljYWwgTklDIG9yIGEgdmlydHVhbCBicmlkZ2UpIHdpdGggYSBWTEFOIGdyb3VwLiBUaGlzIGlzIHRoZSBwYWlyaW5nIG9mIGEgcGh5c2ljYWwgZGV2aWNlIHdpdGggVkxBTiBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyB0aGUgY29yZSBvZiBob3cgVkxBTnMgd29yay4gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBkZWFscyB3aXRoIGRldmljZSByZW1vdmFsIG9yIHJlY29uZmlndXJhdGlvbi4gSG93IGlzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIGJlaW5nIG1haW50YWluZWQsIGFuZCBpcyB0aGlzIHRocmVhZCBzYWZlP1xuXG5CYXNpY2FsbHksIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgd29ya2Zsb3c6IFZMQU4gSUQgYWxsb2NhdGlvbiwgZGV2aWNlIGFzc29jaWF0aW9uLCBhbmQgaG93IHRob3NlIGFzc29jaWF0aW9ucyBhcmUgbWFuYWdlZCBvdmVyIHRpbWUuIFRoZSBjYWxsc2l0ZXMgYXJlIG15IHJvYWRtYXAgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0NCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6NDEuODU5MjMyOTM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzAwMDIzMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkfHZsYW5fZ3JvdXBfc2V0X2RldmljZXxfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZXx2bGFuX2dyb3VwX2dldF9kZXZpY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL3ZsYW4uYz00NT1jb25zdCBjaGFyIHZsYW5fdmVyc2lvbltdID0gRFJWX1ZFUlNJT047XFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jLTQ4LVxcbm5ldC84MDIxcS92bGFuLmM6NDk6c3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxubmV0LzgwMjFxL3ZsYW4uYy01MC1cXHRcXHRcXHRcXHQgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jLTcyLVxcbm5ldC84MDIxcS92bGFuLmM6NzM6XFx0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi9cXG5uZXQvODAyMXEvdmxhbi5jLTc0LVxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xcbi0tXFxubmV0LzgwMjFxL3ZsYW4uYz04Nj12b2lkIHVucmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC84MDIxcS92bGFuLmMtMTA3LVxcbm5ldC84MDIxcS92bGFuLmM6MTA4OlxcdHZsYW5fZ3JvdXBfc2V0X2RldmljZShncnAsIHZsYW4tXFx1MDAzZXZsYW5fcHJvdG8sIHZsYW5faWQsIE5VTEwpO1xcbm5ldC84MDIxcS92bGFuLmMtMTA5LVxcbi0tXFxubmV0LzgwMjFxL3ZsYW4uYz0xNDY9aW50IHJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC84MDIxcS92bGFuLmMtMTcyLVxcbm5ldC84MDIxcS92bGFuLmM6MTczOlxcdGVyciA9IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKGdycCwgdmxhbi1cXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCk7XFxubmV0LzgwMjFxL3ZsYW4uYy0xNzQtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jLTE5MC1cXHQgKi9cXG5uZXQvODAyMXEvdmxhbi5jOjE5MTpcXHR2bGFuX2dyb3VwX3NldF9kZXZpY2UoZ3JwLCB2bGFuLVxcdTAwM2V2bGFuX3Byb3RvLCB2bGFuX2lkLCBkZXYpO1xcbm5ldC84MDIxcS92bGFuLmMtMTkyLVxcdGdycC1cXHUwMDNlbnJfdmxhbl9kZXZzKys7XFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oPTQwPXN0YXRpYyBpbmxpbmUgaW50IHZsYW5fcHJvdG9faWR4KF9fYmUxNiBwcm90bylcXG4tLVxcbm5ldC84MDIxcS92bGFuLmgtNTItXFxubmV0LzgwMjFxL3ZsYW4uaDo1MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxubmV0LzgwMjFxL3ZsYW4uaC01NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBpZHgsXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oLTU4LVxcbm5ldC84MDIxcS92bGFuLmg6NTk6XFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi9cXG5uZXQvODAyMXEvdmxhbi5oLTYwLVxcdGFycmF5ID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2dmctXFx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cXG4tLVxcbm5ldC84MDIxcS92bGFuLmgtNjUtXFxubmV0LzgwMjFxL3ZsYW4uaDo2NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbm5ldC84MDIxcS92bGFuLmgtNjctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYmUxNiB2bGFuX3Byb3RvLFxcbi0tXFxubmV0LzgwMjFxL3ZsYW4uaC03NC1cXG5uZXQvODAyMXEvdmxhbi5oOjc1OlxcdHJldHVybiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSh2ZywgcGlkeCwgdmxhbl9pZCk7XFxubmV0LzgwMjFxL3ZsYW4uaC03Ni19XFxubmV0LzgwMjFxL3ZsYW4uaC03Ny1cXG5uZXQvODAyMXEvdmxhbi5oOjc4OnN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2dyb3VwX3NldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbm5ldC84MDIxcS92bGFuLmgtNzktXFx0XFx0XFx0XFx0XFx0IF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZCxcXG4tLVxcbm5ldC84MDIxcS92bGFuLmg9OTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9maW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oLTk4LVxcdGlmICh2bGFuX2luZm8pXFxubmV0LzgwMjFxL3ZsYW4uaDo5OTpcXHRcXHRyZXR1cm4gdmxhbl9ncm91cF9nZXRfZGV2aWNlKFxcdTAwMjZ2bGFuX2luZm8tXFx1MDAzZWdycCxcXG5uZXQvODAyMXEvdmxhbi5oLTEwMC1cXHRcXHRcXHRcXHRcXHQgICAgIHZsYW5fcHJvdG8sIHZsYW5faWQpO1xcbi0tXFxubmV0LzgwMjFxL3ZsYW4uaD0xMDU9c3RhdGljIGlubGluZSBuZXRkZXZfZmVhdHVyZXNfdCB2bGFuX3RubF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYpXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oLTExOS1cXHRmb3IgKChpKSA9IDA7IGkgXFx1MDAzYyBWTEFOX1BST1RPX05VTSAqIFZMQU5fTl9WSUQ7IGkrKykgXFxcXFxcbm5ldC84MDIxcS92bGFuLmg6MTIwOlxcdFxcdGlmICgoKGRldikgPSBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgoZ3JwKSwgKGkpIC8gVkxBTl9OX1ZJRCwgXFxcXFxcbm5ldC84MDIxcS92bGFuLmgtMTIxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAoaSkgJSBWTEFOX05fVklEKSkpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9NzY9c3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTgxLVxcdGlmICh2bGFuX2luZm8pIHtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6ODI6XFx0XFx0cmV0dXJuIHZsYW5fZ3JvdXBfZ2V0X2RldmljZShcXHUwMDI2dmxhbl9pbmZvLVxcdTAwM2VncnAsXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTgzLVxcdFxcdFxcdFxcdFxcdCAgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MjI3PWludCB2bGFuX2Zvcl9lYWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMjQyLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkodmlkX2luZm8sIFxcdTAwMjZ2bGFuX2luZm8tXFx1MDAzZXZpZF9saXN0LCBsaXN0KSB7XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjI0MzpcXHRcXHR2ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKFxcdTAwMjZ2bGFuX2luZm8tXFx1MDAzZWdycCwgdmlkX2luZm8tXFx1MDAzZXByb3RvLFxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0yNDQtXFx0XFx0XFx0XFx0XFx0ICAgICB2aWRfaW5mby1cXHUwMDNldmlkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6NDUuNTU5MjY1ODIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NjgxNTc4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIFJDVSBhbm5vdGF0aW9ucyBhbmQgY29uY3VycmVuY3kgc3luY2hyb25pemF0aW9uIHdpdGhpbiBWTEFOIDgwMi4xUSBncm91cCBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkhtbSwgaXMgdGhpcyBmdXp6YWJsZT9cIiBUaW1lIHRvIGV2YWx1YXRlLlxuXG5UaGUgY2hlY2tsaXN0IHNheXMgSSBzaG91bGQgZXhjbHVkZSBwYXRjaGVzIHRoYXQgaW52b2x2ZSBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgY29zbWV0aWMgbG9nZ2luZywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSAocGFydGljdWxhcmx5IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSksIG9yIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBvbmx5IHJ1biBkdXJpbmcgaG90LXVucGx1ZyBvcGVyYXRpb25zLiBUaGlzIGlzIGZhaXJseSBzdGFuZGFyZC5cblxuTG9va2luZyBkZWVwZXIsIHRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIDgwMi4xUSBWTEFOIGRldmljZSBtYW5hZ2VtZW50LiBXZSBhcmUgdGFsa2luZyBhYm91dCBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGJhcnJpZXJzLCBSQ1UgZGVyZWZlcmVuY2luZywgYW5kIHBvaW50ZXIgYXNzaWdubWVudHMgaW4gZnVuY3Rpb25zIGxpa2UgYHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkYCwgYF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlYCwgYW5kIGB2bGFuX2dyb3VwX3NldF9kZXZpY2VgLiBUaGlzIGluY2x1ZGVzIHRoZSBmdW5jdGlvbnMgZXhlY3V0ZWQgd2hlbiByZWdpc3RlcmluZywgdW5yZWdpc3RlcmluZyBhbmQgdHJhbnNtaXR0aW5nIFZMQU4gZGV2aWNlcy4gQ3JpdGljYWxseSwgdGhpcyBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHN0YW5kYXJkIFFFTVUgLyBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiBJIGNhbiB0cmlnZ2VyIHRoaXMgdGhyb3VnaCByZWd1bGFyIHJ0bmwgbGluayBvcGVyYXRpb25z4oCUY3JlYXRpbmcsIGRlbGV0aW5nLCBzZW5kaW5nLCBhbmQgcmVjZWl2aW5nIHBhY2tldHMgd2l0aCBWTEFOcy5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBjYWxsIGNoYWlucy4gYG5ldC84MDIxcS92bGFuLmNgIGlzIHdoYXQgSSBzaG91bGQgZm9jdXMgb24uIGByZWdpc3Rlcl92bGFuX2RldmAgY2FsbHMgYHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkYCBhbmQgYHZsYW5fZ3JvdXBfc2V0X2RldmljZWAsIHdoaWxlIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YCBjYWxscyBgdmxhbl9ncm91cF9zZXRfZGV2aWNlYC4gYHZsYW5fbmV3bGlua2AgYW5kIGB2bGFuX2RlbGxpbmtgIGZyb20gYG5ldC84MDIxcS92bGFuX25ldGxpbmsuY2AgY2FsbCBgcmVnaXN0ZXJfdmxhbl9kZXZgIGFuZCBgdW5yZWdpc3Rlcl92bGFuX2RldmAsIHJlc3BlY3RpdmVseS5cblxuQWxyaWdodCwgc28gdGhlIGtleSBhcmVhcyBhcmUgYG5ldC84MDIxcS92bGFuLmNgIGFuZCBgbmV0LzgwMjFxL3ZsYW5fbmV0bGluay5jYC4gV2l0aCB0aG9zZSBwaWVjZXMgaW4gcGxhY2UgYW5kIGNvbmZpcm1lZCwgSSdkIHNheSB0aGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0ODo1MS4wMjc0MjgyNjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS92bGFuX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKlxcdFZMQU4gbmV0bGluayBjb250cm9sIGludGVyZmFjZVxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIFxcdENvcHlyaWdodCAoYykgMjAwNyBQYXRyaWNrIE1jSGFyZHkgXFx1MDAzY2thYmVyQHRyYXNoLm5ldFxcdTAwM2VcXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvcnRuZXRsaW5rLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXFwidmxhbi5oXFxcIlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXG4gIDE4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2bGFuX3BvbGljeVtJRkxBX1ZMQU5fTUFYICsgMV0gPSB7XFxuICAxOTpcXHRcXHRbSUZMQV9WTEFOX0lEXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG4gIDIwOlxcdFxcdFtJRkxBX1ZMQU5fRkxBR1NdXFx0PSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IGlmbGFfdmxhbl9mbGFncykgfSxcXG4gIDIxOlxcdFxcdFtJRkxBX1ZMQU5fRUdSRVNTX1FPU11cXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuICAyMjpcXHRcXHRbSUZMQV9WTEFOX0lOR1JFU1NfUU9TXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuICAyMzpcXHRcXHRbSUZMQV9WTEFOX1BST1RPQ09MXVxcdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG4gIDI0OlxcdH07XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2bGFuX21hcF9wb2xpY3lbSUZMQV9WTEFOX1FPU19NQVggKyAxXSA9IHtcXG4gIDI3OlxcdFxcdFtJRkxBX1ZMQU5fUU9TX01BUFBJTkddID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBpZmxhX3ZsYW5fcW9zX21hcHBpbmcpIH0sXFxuICAyODpcXHR9O1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXG4gIDMxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHZsYW5fdmFsaWRhdGVfcW9zX21hcChzdHJ1Y3QgbmxhdHRyICphdHRyKVxcbiAgMzI6XFx0e1xcbiAgMzM6XFx0XFx0aWYgKCFhdHRyKVxcbiAgMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICAzNTpcXHRcXHRyZXR1cm4gbmxhX3ZhbGlkYXRlX25lc3RlZF9kZXByZWNhdGVkKGF0dHIsIElGTEFfVkxBTl9RT1NfTUFYLFxcbiAgMzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdmxhbl9tYXBfcG9saWN5LCBOVUxMKTtcXG4gIDM3OlxcdH1cXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGludCB2bGFuX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4gIDQwOlxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuICA0MTpcXHR7XFxuICA0MjpcXHRcXHRzdHJ1Y3QgaWZsYV92bGFuX2ZsYWdzICpmbGFncztcXG4gIDQzOlxcdFxcdHUxNiBpZDtcXG4gIDQ0OlxcdFxcdGludCBlcnI7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdGlmICh0YltJRkxBX0FERFJFU1NdKSB7XFxuICA0NzpcXHRcXHRcXHRpZiAobmxhX2xlbih0YltJRkxBX0FERFJFU1NdKSAhPSBFVEhfQUxFTikge1xcbiAgNDg6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkludmFsaWQgbGluayBhZGRyZXNzXFxcIik7XFxuICA0OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDUwOlxcdFxcdFxcdH1cXG4gIDUxOlxcdFxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihubGFfZGF0YSh0YltJRkxBX0FERFJFU1NdKSkpIHtcXG4gIDUyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJJbnZhbGlkIGxpbmsgYWRkcmVzc1xcXCIpO1xcbiAgNTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbiAgNTQ6XFx0XFx0XFx0fVxcbiAgNTU6XFx0XFx0fVxcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRpZiAoIWRhdGEpIHtcXG4gIDU4OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJWTEFOIHByb3BlcnRpZXMgbm90IHNwZWNpZmllZFxcXCIpO1xcbiAgNTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA2MDpcXHRcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdGlmIChkYXRhW0lGTEFfVkxBTl9QUk9UT0NPTF0pIHtcXG4gIDYzOlxcdFxcdFxcdHN3aXRjaCAobmxhX2dldF9iZTE2KGRhdGFbSUZMQV9WTEFOX1BST1RPQ09MXSkpIHtcXG4gIDY0OlxcdFxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfODAyMVEpOlxcbiAgNjU6XFx0XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxQUQpOlxcbiAgNjY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA2NzpcXHRcXHRcXHRkZWZhdWx0OlxcbiAgNjg6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkludmFsaWQgVkxBTiBwcm90b2NvbFxcXCIpO1xcbiAgNjk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuICA3MDpcXHRcXHRcXHR9XFxuICA3MTpcXHRcXHR9XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdGlmIChkYXRhW0lGTEFfVkxBTl9JRF0pIHtcXG4gIDc0OlxcdFxcdFxcdGlkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX1ZMQU5fSURdKTtcXG4gIDc1OlxcdFxcdFxcdGlmIChpZCBcXHUwMDNlPSBWTEFOX1ZJRF9NQVNLKSB7XFxuICA3NjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiSW52YWxpZCBWTEFOIGlkXFxcIik7XFxuICA3NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gIDc4OlxcdFxcdFxcdH1cXG4gIDc5OlxcdFxcdH1cXG4gIDgwOlxcdFxcdGlmIChkYXRhW0lGTEFfVkxBTl9GTEFHU10pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6NTEuMDI3NTc2MDM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3OTk4OTY2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIFZMQU4gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIFZMQU4gYXNwZWN0cywgYW5kIGl0J3MgdGltZSB0byBicm9hZGVuIG15IHZpZXcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVsbCBwaWN0dXJlLiBMZXQncyBzZWUgaG93IGBuZXQvODAyMXEvdmxhbl9uZXRsaW5rLmNgIGFuZCBgbmV0LzgwMjFxL3ZsYW4uY2AgZmxlc2ggb3V0IHRoZSBWTEFOIGhhbmRsaW5nLCBpbiBwYXJ0aWN1bGFyIGZyb20gYSBuZXRsaW5rIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2VzIGZvciBtYW5hZ2luZyB0aGVzZSBWTEFOIGRldmljZXMuIFRoaXMgc2hvdWxkIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgaW9jdGwgY2FsbHMsIGFuZCBob3cgdGhleSBnZXQgd2lyZWQgdG9nZXRoZXIuIExldCdzIHN0YXJ0IGJ5IHdhbGtpbmcgdGhyb3VnaCB0aGUgY29kZSBsaW5lIGJ5IGxpbmUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBlbXBsb3llZCwgYW5kIGhvdyBkbyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZXM/IEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIGZsb3c6IGhvdyBWTEFOcyBhcmUgY3JlYXRlZCwgY29uZmlndXJlZCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyaWRnaW5nIGFuZCBmb3J3YXJkaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aCByZXNwZWN0IHRvIHBhY2tldCB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcuIEFsc28sIEkgbXVzdCBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlcyBvciBsb2NrIGNvbnRlbnRpb24gd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA5NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6NTMuODI3NDc2MzE0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvODAyMXEvdmxhbl9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMTQxOlxcdHtcXG4gMTQyOlxcdFxcdHN0cnVjdCBuZXQgKmxpbmtfbmV0ID0gcnRubF9uZXdsaW5rX2xpbmtfbmV0KHBhcmFtcyk7XFxuIDE0MzpcXHRcXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcXG4gMTQ0OlxcdFxcdHN0cnVjdCBubGF0dHIgKipkYXRhID0gcGFyYW1zLVxcdTAwM2VkYXRhO1xcbiAxNDU6XFx0XFx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVxcdTAwM2V0YjtcXG4gMTQ2OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjtcXG4gMTQ3OlxcdFxcdHVuc2lnbmVkIGludCBtYXhfbXR1O1xcbiAxNDg6XFx0XFx0X19iZTE2IHByb3RvO1xcbiAxNDk6XFx0XFx0aW50IGVycjtcXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0aWYgKCFkYXRhW0lGTEFfVkxBTl9JRF0pIHtcXG4gMTUyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJWTEFOIGlkIG5vdCBzcGVjaWZpZWRcXFwiKTtcXG4gMTUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNTQ6XFx0XFx0fVxcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHRpZiAoIXRiW0lGTEFfTElOS10pIHtcXG4gMTU3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJsaW5rIG5vdCBzcGVjaWZpZWRcXFwiKTtcXG4gMTU4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNTk6XFx0XFx0fVxcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRyZWFsX2RldiA9IF9fZGV2X2dldF9ieV9pbmRleChsaW5rX25ldCwgbmxhX2dldF91MzIodGJbSUZMQV9MSU5LXSkpO1xcbiAxNjI6XFx0XFx0aWYgKCFyZWFsX2Rldikge1xcbiAxNjM6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImxpbmsgZG9lcyBub3QgZXhpc3RcXFwiKTtcXG4gMTY0OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAxNjU6XFx0XFx0fVxcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRwcm90byA9IG5sYV9nZXRfYmUxNl9kZWZhdWx0KGRhdGFbSUZMQV9WTEFOX1BST1RPQ09MXSxcXG4gMTY4OlxcdFxcdFxcdFxcdFxcdCAgICAgaHRvbnMoRVRIX1BfODAyMVEpKTtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0dmxhbi1cXHUwMDNldmxhbl9wcm90byA9IHByb3RvO1xcbiAxNzE6XFx0XFx0dmxhbi1cXHUwMDNldmxhbl9pZFxcdCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9WTEFOX0lEXSk7XFxuIDE3MjpcXHRcXHR2bGFuLVxcdTAwM2VyZWFsX2RldlxcdCA9IHJlYWxfZGV2O1xcbiAxNzM6XFx0XFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IChyZWFsX2Rldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9YTUlUX0RTVF9SRUxFQVNFKTtcXG4gMTc0OlxcdFxcdHZsYW4tXFx1MDAzZWZsYWdzXFx0ID0gVkxBTl9GTEFHX1JFT1JERVJfSERSO1xcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRlcnIgPSB2bGFuX2NoZWNrX3JlYWxfZGV2KHJlYWxfZGV2LCB2bGFuLVxcdTAwM2V2bGFuX3Byb3RvLCB2bGFuLVxcdTAwM2V2bGFuX2lkLFxcbiAxNzc6XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbiAxNzg6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHRtYXhfbXR1ID0gbmV0aWZfcmVkdWNlc192bGFuX210dShyZWFsX2RldikgPyByZWFsX2Rldi1cXHUwMDNlbXR1IC0gVkxBTl9ITEVOIDpcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcmVhbF9kZXYtXFx1MDAzZW10dTtcXG4gMTgzOlxcdFxcdGlmICghdGJbSUZMQV9NVFVdKVxcbiAxODQ6XFx0XFx0XFx0ZGV2LVxcdTAwM2VtdHUgPSBtYXhfbXR1O1xcbiAxODU6XFx0XFx0ZWxzZSBpZiAoZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBtYXhfbXR1KVxcbiAxODY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdC8qIE5vdGU6IElmIHRoaXMgaW5pdGlhbCB2bGFuX2NoYW5nZWxpbmsoKSBmYWlscywgd2UgbmVlZFxcbiAxODk6XFx0XFx0ICogdG8gY2FsbCB2bGFuX2Rldl9mcmVlX2VncmVzc19wcmlvcml0eSgpIHRvIGZyZWUgbWVtb3J5LlxcbiAxOTA6XFx0XFx0ICovXFxuIDE5MTpcXHRcXHRlcnIgPSB2bGFuX2NoYW5nZWxpbmsoZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0aWYgKCFlcnIpXFxuIDE5NDpcXHRcXHRcXHRlcnIgPSByZWdpc3Rlcl92bGFuX2RldihkZXYsIGV4dGFjayk7XFxuIDE5NTpcXHRcXG4gMTk2OlxcdFxcdGlmIChlcnIpXFxuIDE5NzpcXHRcXHRcXHR2bGFuX2Rldl9mcmVlX2VncmVzc19wcmlvcml0eShkZXYpO1xcbiAxOTg6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTk5OlxcdH1cXG4gMjAwOlxcdFxcbiAyMDE6XFx0c3RhdGljIGlubGluZSBzaXplX3Qgdmxhbl9xb3NfbWFwX3NpemUodW5zaWduZWQgaW50IG4pXFxuIDIwMjpcXHR7XFxuIDIwMzpcXHRcXHRpZiAobiA9PSAwKVxcbiAyMDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwNTpcXHRcXHQvKiBJRkxBX1ZMQU5fe0VHUkVTUyxJTkdSRVNTfV9RT1MgKyBuICogSUZMQV9WTEFOX1FPU19NQVBQSU5HICovXFxuIDIwNjpcXHRcXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBubGF0dHIpKSArXFxuIDIwNzpcXHRcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmxhX3ZsYW5fcW9zX21hcHBpbmcpKSAqIG47XFxuIDIwODpcXHR9XFxuIDIwOTpcXHRcXG4gMjEwOlxcdHN0YXRpYyBzaXplX3Qgdmxhbl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAyMTE6XFx0e1xcbiAyMTI6XFx0XFx0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KGRldik7XFxuIDIxMzpcXHRcXG4gMjE0OlxcdFxcdHJldHVybiBubGFfdG90YWxfc2l6ZSgyKSArXFx0LyogSUZMQV9WTEFOX1BST1RPQ09MICovXFxuIDIxNTpcXHRcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoMikgK1xcdC8qIElGTEFfVkxBTl9JRCAqL1xcbiAyMTY6XFx0XFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaWZsYV92bGFuX2ZsYWdzKSkgKyAvKiBJRkxBX1ZMQU5fRkxBR1MgKi9cXG4gMjE3OlxcdFxcdCAgICAgICB2bGFuX3Fvc19tYXBfc2l6ZSh2bGFuLVxcdTAwM2Vucl9pbmdyZXNzX21hcHBpbmdzKSArXFxuIDIxODpcXHRcXHQgICAgICAgdmxhbl9xb3NfbWFwX3NpemUodmxhbi1cXHUwMDNlbnJfZWdyZXNzX21hcHBpbmdzKTtcXG4gMjE5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6NTMuODI3NjE4NDA0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzQ1MjgyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFZMQU4gRGV2aWNlIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IFZMQU4gZGV2aWNlcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIHByb2Nlc3MuIE15IGd1dCB0ZWxscyBtZSB0aGUgY29yZSBvZiB0aGlzIGxpZXMgaW4gYG5ldC84MDIxcS92bGFuLmNgLiBUaW1lIHRvIGRpZyBpbnRvIGByZWdpc3Rlcl92bGFuX2RldmAgYW5kIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSwgd2l0aG91dCBhIGRvdWJ0LCB0aGUgbGluY2hwaW5zIG9mIGFkZGluZyBhbmQgcmVtb3ZpbmcgVkxBTiBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSwgaG93IHRoZXkgaGFuZGxlIHRoZSBWTEFOIElEIGFzc2lnbm1lbnQgYW5kIHRyYWNraW5nLCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgYnJpZGdlIHNldHVwIChpZiBhbnkpLCBhbmQgb2YgY291cnNlLCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMsIGVuc3VyaW5nIHRoZSBmdW5jdGlvbnMgYXJlIHRocmVhZC1zYWZlIGFuZCBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgZGV2aWNlIHJlZ2lzdHJhdGlvbiByb3V0aW5lcyBiZWluZyBjYWxsZWQsIGJ1dCB0aGUgZGV2aWwncyBhbHdheXMgaW4gdGhlIGRldGFpbHMg4oCTIEknbSBob3BpbmcgdG8gZGlzY292ZXIgc29tZSBpbm5vdmF0aXZlIGhhbmRsaW5nIG9mIHRoZSA4MDIuMVEgdGFnZ2luZyBwcm90b2NvbCBpdHNlbGYuIFRoaXMgd2lsbCBiZSBhbiBpbnRlcmVzdGluZyBkZWVwIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODQzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0ODo1Ni4yMDIxNTEyNDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRpZiAoISh2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZMQU5fRkxBR19CUklER0VfQklORElORykpXFxuICA4MzpcXHRcXHRcXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xcbiAgODQ6XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHR2b2lkIHVucmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4gIDg3OlxcdHtcXG4gIDg4OlxcdFxcdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdihkZXYpO1xcbiAgODk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbi1cXHUwMDNlcmVhbF9kZXY7XFxuICA5MDpcXHRcXHRzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm87XFxuICA5MTpcXHRcXHRzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwO1xcbiAgOTI6XFx0XFx0dTE2IHZsYW5faWQgPSB2bGFuLVxcdTAwM2V2bGFuX2lkO1xcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHR2bGFuX2luZm8gPSBydG5sX2RlcmVmZXJlbmNlKHJlYWxfZGV2LVxcdTAwM2V2bGFuX2luZm8pO1xcbiAgOTc6XFx0XFx0QlVHX09OKCF2bGFuX2luZm8pO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRncnAgPSBcXHUwMDI2dmxhbl9pbmZvLVxcdTAwM2VncnA7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdGdycC1cXHUwMDNlbnJfdmxhbl9kZXZzLS07XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmICh2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZMQU5fRkxBR19NVlJQKVxcbiAxMDQ6XFx0XFx0XFx0dmxhbl9tdnJwX3JlcXVlc3RfbGVhdmUoZGV2KTtcXG4gMTA1OlxcdFxcdGlmICh2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZMQU5fRkxBR19HVlJQKVxcbiAxMDY6XFx0XFx0XFx0dmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoZGV2KTtcXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0dmxhbl9ncm91cF9zZXRfZGV2aWNlKGdycCwgdmxhbi1cXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCwgTlVMTCk7XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKHJlYWxfZGV2LCBkZXYpO1xcbiAxMTE6XFx0XFx0LyogQmVjYXVzZSB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZSgpIG1ha2VzIHN1cmUgYXQgbGVhc3Qgb25lIHJjdVxcbiAxMTI6XFx0XFx0ICogZ3JhY2UgcGVyaW9kIGlzIHJlc3BlY3RlZCBiZWZvcmUgZGV2aWNlIGZyZWVpbmcsXFxuIDExMzpcXHRcXHQgKiB3ZSBkb250IG5lZWQgdG8gY2FsbCBzeW5jaHJvbml6ZV9uZXQoKSBoZXJlLlxcbiAxMTQ6XFx0XFx0ICovXFxuIDExNTpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRpZiAoZ3JwLVxcdTAwM2Vucl92bGFuX2RldnMgPT0gMCkge1xcbiAxMTg6XFx0XFx0XFx0dmxhbl9tdnJwX3VuaW5pdF9hcHBsaWNhbnQocmVhbF9kZXYpO1xcbiAxMTk6XFx0XFx0XFx0dmxhbl9ndnJwX3VuaW5pdF9hcHBsaWNhbnQocmVhbF9kZXYpO1xcbiAxMjA6XFx0XFx0fVxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHR2bGFuX3ZpZF9kZWwocmVhbF9kZXYsIHZsYW4tXFx1MDAzZXZsYW5fcHJvdG8sIHZsYW5faWQpO1xcbiAxMjM6XFx0fVxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRpbnQgdmxhbl9jaGVja19yZWFsX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuIDEyNjpcXHRcXHRcXHRcXHRfX2JlMTYgcHJvdG9jb2wsIHUxNiB2bGFuX2lkLFxcbiAxMjc6XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAxMjg6XFx0e1xcbiAxMjk6XFx0XFx0Y29uc3QgY2hhciAqbmFtZSA9IHJlYWxfZGV2LVxcdTAwM2VuYW1lO1xcbiAxMzA6XFx0XFxuIDEzMTpcXHRcXHRpZiAocmVhbF9kZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQgfHxcXG4gMTMyOlxcdFxcdCAgICByZWFsX2Rldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfRVRIRVIpIHtcXG4gMTMzOlxcdFxcdFxcdHByX2luZm8oXFxcIlZMQU5zIG5vdCBzdXBwb3J0ZWQgb24gJXNcXFxcblxcXCIsIG5hbWUpO1xcbiAxMzQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlZMQU5zIG5vdCBzdXBwb3J0ZWQgb24gZGV2aWNlXFxcIik7XFxuIDEzNTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDEzNjpcXHRcXHR9XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGlmICh2bGFuX2ZpbmRfZGV2KHJlYWxfZGV2LCBwcm90b2NvbCwgdmxhbl9pZCkgIT0gTlVMTCkge1xcbiAxMzk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlZMQU4gZGV2aWNlIGFscmVhZHkgZXhpc3RzXFxcIik7XFxuIDE0MDpcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gMTQxOlxcdFxcdH1cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0cmV0dXJuIDA7XFxuIDE0NDpcXHR9XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGludCByZWdpc3Rlcl92bGFuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDE0NzpcXHR7XFxuIDE0ODpcXHRcXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcXG4gMTQ5OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tXFx1MDAzZXJlYWxfZGV2O1xcbiAxNTA6XFx0XFx0dTE2IHZsYW5faWQgPSB2bGFuLVxcdTAwM2V2bGFuX2lkO1xcbiAxNTE6XFx0XFx0c3RydWN0IHZsYW5faW5mbyAqdmxhbl9pbmZvO1xcbiAxNTI6XFx0XFx0c3RydWN0IHZsYW5fZ3JvdXAgKmdycDtcXG4gMTUzOlxcdFxcdGludCBlcnI7XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdGVyciA9IHZsYW5fdmlkX2FkZChyZWFsX2Rldiwgdmxhbi1cXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCk7XFxuIDE1NjpcXHRcXHRpZiAoZXJyKVxcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0dmxhbl9pbmZvID0gcnRubF9kZXJlZmVyZW5jZShyZWFsX2Rldi1cXHUwMDNldmxhbl9pbmZvKTtcXG4gMTYwOlxcdFxcdC8qIHZsYW5faW5mbyBzaG91bGQgYmUgdGhlcmUgbm93LiB2bGFuX3ZpZF9hZGQgdG9vayBjYXJlIG9mIGl0ICovXFxuIDE2MTpcXHRcXHRCVUdfT04oIXZsYW5faW5mbyk7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdGdycCA9IFxcdTAwMjZ2bGFuX2luZm8tXFx1MDAzZWdycDtcXG4gMTY0OlxcdFxcdGlmIChncnAtXFx1MDAzZW5yX3ZsYW5fZGV2cyA9PSAwKSB7XFxuIDE2NTpcXHRcXHRcXHRlcnIgPSB2bGFuX2d2cnBfaW5pdF9hcHBsaWNhbnQocmVhbF9kZXYpO1xcbiAxNjY6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDE2NzpcXHRcXHRcXHRcXHRnb3RvIG91dF92aWRfZGVsO1xcbiAxNjg6XFx0XFx0XFx0ZXJyID0gdmxhbl9tdnJwX2luaXRfYXBwbGljYW50KHJlYWxfZGV2KTtcXG4gMTY5OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAxNzA6XFx0XFx0XFx0XFx0Z290byBvdXRfdW5pbml0X2d2cnA7XFxuIDE3MTpcXHRcXHR9XFxuIDE3MjpcXHRcXG4gMTczOlxcdFxcdGVyciA9IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKGdycCwgdmxhbi1cXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCk7XFxuIDE3NDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMTc1OlxcdFxcdFxcdGdvdG8gb3V0X3VuaW5pdF9tdnJwO1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gMTc4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAxNzk6XFx0XFx0XFx0Z290byBvdXRfdW5pbml0X212cnA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjU2LjIwMjM0NDIzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTg5MzEzNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIERldmljZSBSZWdpc3RyYXRpb24gYW5kIFVucmVnaXN0cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCBgdmxhbl9uZXdsaW5rYCwgYW5kIGB2bGFuX2RlbGxpbmtgIGFyZSB0aGUga2V5IGV4cG9ydGVkLCBub24tc3RhdGljIGVudHJ5IHBvaW50cyBoZXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgcmVnaXN0ZXJfdmxhbl9kZXZgIGFuZCBgdW5yZWdpc3Rlcl92bGFuX2RldmAgdG8gc2VlIHdoZXJlIHRoZXkgYXJlIGV4cG9ydGVkIGZyb20uIEFoYSwgYm90aCBvZiB0aG9zZSBhcmUgZGVmaW5lZCB3aXRoaW4gYG5ldC84MDIxcS92bGFuLmNgLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyB3b3VsZCBiZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGRlZXBlciBhbmFseXNpcyBhcyBGb2N1c1N5bWJvbHMg4oCTIGByZWdpc3Rlcl92bGFuX2RldmAsIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHZsYW5fbmV3bGlua2Agb3IgcG9zc2libHkgZXZlbiBgdmxhbl9jaGVja19yZWFsX2RldmAuIFRpbWUgdG8gY2hlY2sgb3V0IHRoZSBzeW1ib2wgZGVmaW5pdGlvbnMgYWNyb3NzIGBuZXQvODAyMXEvdmxhbi5jYCBhbmQgYWxzbyBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYCB0byBzZWUgd2hpY2ggYXJlIHRoZSByaWdodCBvbmVzIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjAyLjM5MTY2MDU1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcwNTUyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvODAyMXFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL3ZsYW5fY29yZS5jPTc2PXN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy05OS19XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjEwMDpFWFBPUlRfU1lNQk9MKF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdSk7XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTEwMS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTAyPXN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2Rldl9yZWFsX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTExMC19XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjExMTpFWFBPUlRfU1lNQk9MKHZsYW5fZGV2X3JlYWxfZGV2KTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMTEyLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz0xMTM9dTE2IHZsYW5fZGV2X3ZsYW5faWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMTYtfVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYzoxMTc6RVhQT1JUX1NZTUJPTCh2bGFuX2Rldl92bGFuX2lkKTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMTE4LVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz0xMTk9X19iZTE2IHZsYW5fZGV2X3ZsYW5fcHJvdG8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMjItfVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYzoxMjM6RVhQT1JUX1NZTUJPTCh2bGFuX2Rldl92bGFuX3Byb3RvKTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMTI0LVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTIyNz1pbnQgdmxhbl9mb3JfZWFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI1MS19XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjI1MjpFWFBPUlRfU1lNQk9MKHZsYW5fZm9yX2VhY2gpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0yNTMtXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTI1ND1pbnQgdmxhbl9maWx0ZXJfcHVzaF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI4MC19XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjI4MTpFWFBPUlRfU1lNQk9MKHZsYW5fZmlsdGVyX3B1c2hfdmlkcyk7XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI4Mi1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MjgzPXZvaWQgdmxhbl9maWx0ZXJfZHJvcF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI5Mi19XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjI5MzpFWFBPUlRfU1lNQk9MKHZsYW5fZmlsdGVyX2Ryb3Bfdmlkcyk7XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI5NC1cXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz0zMTg9aW50IHZsYW5fdmlkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzUxLX1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MzUyOkVYUE9SVF9TWU1CT0wodmxhbl92aWRfYWRkKTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzUzLVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTM3MT12b2lkIHZsYW5fdmlkX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzkzLX1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6Mzk0OkVYUE9SVF9TWU1CT0wodmxhbl92aWRfZGVsKTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzk1LVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz0zOTY9aW50IHZsYW5fdmlkc19hZGRfYnlfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDI4LX1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NDI5OkVYUE9SVF9TWU1CT0wodmxhbl92aWRzX2FkZF9ieV9kZXYpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYy00MzAtXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTQzMT12b2lkIHZsYW5fdmlkc19kZWxfYnlfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDQ4LX1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NDQ5OkVYUE9SVF9TWU1CT0wodmxhbl92aWRzX2RlbF9ieV9kZXYpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYy00NTAtXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTQ1MT1ib29sIHZsYW5fdXNlc19kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy00NjEtfVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYzo0NjI6RVhQT1JUX1NZTUJPTCh2bGFuX3VzZXNfZGV2KTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0OTowMi40NTg3MjYwNThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA1Mjg5MTEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyBWTEFOIEhlYWRlciBEZWNsYXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgVkxBTiBoZWFkZXIncyBwdWJsaWNseSBhY2Nlc3NpYmxlIGNvbXBvbmVudHMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBgbmV0LzgwMjFxL3ZsYW4uaGAuIFRoaXMgaGVhZGVyIGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBjb25jaXNlIG92ZXJ2aWV3IG9mIHdoYXQncyAqbm90KiBzdGF0aWMgd2l0aGluIHRoZSBgbmV0LzgwMjFxL2AgZGlyZWN0b3J5LiBCeSBleGFtaW5pbmcgdGhlIG5vbi1zdGF0aWMgZGVjbGFyYXRpb25zIGhlcmUsIEkgY2FuIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBpbnRlcmZhY2VzIGFuZCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGRlc2lnbmVkIGZvciBleHRlcm5hbCB1c2Ugb3IgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIGtleSBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFZMQU4gdGFnZ2luZyBhbmQgdW50YWdnaW5nIG1lY2hhbmlzbXMgaW50ZXJhY3Qgd2l0aCBvdGhlciBuZXR3b3JrIGNvbXBvbmVudHMgYW5kIHByb3RvY29scy4gSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcywgZnVuY3Rpb24gcHJvdG90eXBlcyAoaWYgYW55KSwgYW5kIHBlcmhhcHMgc29tZSBlbnVtcyByZWxhdGVkIHRvIFZMQU4tc3BlY2lmaWMgcGFyYW1ldGVycyBsaWtlIHRoZSBWTEFOIElEIGFuZCBwcmlvcml0eS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGhvdyB0aGlzIG1vZHVsZSBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2OTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0OTowNS41MTE2MjEwMTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS92bGFuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdHJldHVybiBOVUxMO1xcbiAxMDM6XFx0fVxcbiAxMDQ6XFx0XFxuIDEwNTpcXHRzdGF0aWMgaW5saW5lIG5ldGRldl9mZWF0dXJlc190IHZsYW5fdG5sX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldilcXG4gMTA2OlxcdHtcXG4gMTA3OlxcdFxcdG5ldGRldl9mZWF0dXJlc190IHJldDtcXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0cmV0ID0gcmVhbF9kZXYtXFx1MDAzZWh3X2VuY19mZWF0dXJlcyBcXHUwMDI2XFxuIDExMDpcXHRcXHQgICAgICAoTkVUSUZfRl9DU1VNX01BU0sgfCBORVRJRl9GX0dTT19TT0ZUV0FSRSB8XFxuIDExMTpcXHRcXHQgICAgICAgTkVUSUZfRl9HU09fRU5DQVBfQUxMKTtcXG4gMTEyOlxcdFxcbiAxMTM6XFx0XFx0aWYgKChyZXQgXFx1MDAyNiBORVRJRl9GX0dTT19FTkNBUF9BTEwpIFxcdTAwMjZcXHUwMDI2IChyZXQgXFx1MDAyNiBORVRJRl9GX0NTVU1fTUFTSykpXFxuIDExNDpcXHRcXHRcXHRyZXR1cm4gKHJldCBcXHUwMDI2IH5ORVRJRl9GX0NTVU1fTUFTSykgfCBORVRJRl9GX0hXX0NTVU07XFxuIDExNTpcXHRcXHRyZXR1cm4gMDtcXG4gMTE2OlxcdH1cXG4gMTE3OlxcdFxcbiAxMTg6XFx0I2RlZmluZSB2bGFuX2dyb3VwX2Zvcl9lYWNoX2RldihncnAsIGksIGRldikgXFxcXFxcbiAxMTk6XFx0XFx0Zm9yICgoaSkgPSAwOyBpIFxcdTAwM2MgVkxBTl9QUk9UT19OVU0gKiBWTEFOX05fVklEOyBpKyspIFxcXFxcXG4gMTIwOlxcdFxcdFxcdGlmICgoKGRldikgPSBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgoZ3JwKSwgKGkpIC8gVkxBTl9OX1ZJRCwgXFxcXFxcbiAxMjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIChpKSAlIFZMQU5fTl9WSUQpKSlcXG4gMTIyOlxcdFxcbiAxMjM6XFx0aW50IHZsYW5fZmlsdGVyX3B1c2hfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XFxuIDEyNDpcXHR2b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XFxuIDEyNTpcXHRcXG4gMTI2OlxcdC8qIG5ldGRldl93b3JrIGV2ZW50cyBwcm9wYWdhdGVkIGZyb20gdGhlIHJlYWwgZGV2aWNlLCBzZWUgdmxhbl9kZXZfd29yaygpLiAqL1xcbiAxMjc6XFx0ZW51bSB7XFxuIDEyODpcXHRcXHRWTEFOX1dPUktfTElOS19TVEFURVxcdD0gQklUKDApLCAvKiBzeW5jIHVwL2Rvd24gd2l0aCByZWFsX2RldiAqL1xcbiAxMjk6XFx0XFx0VkxBTl9XT1JLX01UVVxcdFxcdD0gQklUKDEpLCAvKiBjbGFtcCBtdHUgdG8gcmVhbF9kZXYncyAqL1xcbiAxMzA6XFx0XFx0VkxBTl9XT1JLX0ZFQVRVUkVTXFx0PSBCSVQoMiksIC8qIHJlLWluaGVyaXQgcmVhbF9kZXYgZmVhdHVyZXMgKi9cXG4gMTMxOlxcdH07XFxuIDEzMjpcXHRcXG4gMTMzOlxcdHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcXG4gMTM0OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTM1OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHQvKiBmb3VuZCBpbiB2bGFuX2Rldi5jICovXFxuIDEzODpcXHR2b2lkIHZsYW5fZGV2X3NldF9pbmdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDEzOTpcXHRcXHRcXHRcXHRcXHQgICB1MzIgc2tiX3ByaW8sIHUxNiB2bGFuX3ByaW8pO1xcbiAxNDA6XFx0aW50IHZsYW5fZGV2X3NldF9lZ3Jlc3NfcHJpb3JpdHkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTQxOlxcdFxcdFxcdFxcdFxcdCB1MzIgc2tiX3ByaW8sIHUxNiB2bGFuX3ByaW8pO1xcbiAxNDI6XFx0dm9pZCB2bGFuX2Rldl9mcmVlX2VncmVzc19wcmlvcml0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gMTQzOlxcdGludCB2bGFuX2Rldl9jaGFuZ2VfZmxhZ3MoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZsYWcsIHUzMiBtYXNrKTtcXG4gMTQ0OlxcdHZvaWQgdmxhbl9kZXZfZ2V0X3JlYWxkZXZfbmFtZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpyZXN1bHQsXFxuIDE0NTpcXHRcXHRcXHRcXHQgICAgICAgc2l6ZV90IHNpemUpO1xcbiAxNDY6XFx0XFxuIDE0NzpcXHRpbnQgdmxhbl9jaGVja19yZWFsX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuIDE0ODpcXHRcXHRcXHRcXHRfX2JlMTYgcHJvdG9jb2wsIHUxNiB2bGFuX2lkLFxcbiAxNDk6XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gMTUwOlxcdHZvaWQgdmxhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gMTUxOlxcdGludCByZWdpc3Rlcl92bGFuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiAxNTI6XFx0dm9pZCB1bnJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcbiAxNTM6XFx0Ym9vbCB2bGFuX2Rldl9pbmhlcml0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTU0OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2Rldik7XFxuIDE1NTpcXHRcXG4gMTU2OlxcdHN0YXRpYyBpbmxpbmUgdTMyIHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MTYgdmxhbl90Y2kpXFxuIDE1ODpcXHR7XFxuIDE1OTpcXHRcXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmlwID0gdmxhbl9kZXZfcHJpdihkZXYpO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRyZXR1cm4gdmlwLVxcdTAwM2VpbmdyZXNzX3ByaW9yaXR5X21hcFsodmxhbl90Y2kgXFx1MDAzZVxcdTAwM2UgVkxBTl9QUklPX1NISUZUKSBcXHUwMDI2IDB4N107XFxuIDE2MjpcXHR9XFxuIDE2MzpcXHRcXG4gMTY0OlxcdCNpZmRlZiBDT05GSUdfVkxBTl84MDIxUV9HVlJQXFxuIDE2NTpcXHRpbnQgdmxhbl9ndnJwX3JlcXVlc3Rfam9pbihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gMTY2OlxcdHZvaWQgdmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIDE2NzpcXHRpbnQgdmxhbl9ndnJwX2luaXRfYXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiAxNjg6XFx0dm9pZCB2bGFuX2d2cnBfdW5pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gMTY5OlxcdGludCB2bGFuX2d2cnBfaW5pdCh2b2lkKTtcXG4gMTcwOlxcdHZvaWQgdmxhbl9ndnJwX3VuaW5pdCh2b2lkKTtcXG4gMTcxOlxcdCNlbHNlXFxuIDE3MjpcXHRzdGF0aWMgaW5saW5lIGludCB2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH1cXG4gMTczOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2d2cnBfcmVxdWVzdF9sZWF2ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7fVxcbiAxNzQ6XFx0c3RhdGljIGlubGluZSBpbnQgdmxhbl9ndnJwX2luaXRfYXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH1cXG4gMTc1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2d2cnBfdW5pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7fVxcbiAxNzY6XFx0c3RhdGljIGlubGluZSBpbnQgdmxhbl9ndnJwX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxcbiAxNzc6XFx0c3RhdGljIGlubGluZSB2b2lkIHZsYW5fZ3ZycF91bmluaXQodm9pZCkge31cXG4gMTc4OlxcdCNlbmRpZlxcbiAxNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjA1LjUxMTc2MjIzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTEzMjkyNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIDgwMi4xUSBWTEFOIFN1cHBvcnQgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUbyBjb21waWxlIHRoaXMgY29kZSwgSSBuZWVkIGBDT05GSUdfVkxBTl84MDIxUWAuIEknbSBkb3VibGUtY2hlY2tpbmcgaXRzIGRlcGVuZGVuY2llcyDigJMgbm90aGluZyBzaWduaWZpY2FudCwganVzdCB0aGUgdXN1YWwgTkVUL0lORVQgcmVxdWlyZW1lbnRzIHdoaWNoIGFyZSBnZW5lcmFsbHkgZW5hYmxlZC4gVGhlIG9wdGlvbmFsIGZlYXR1cmVzLCBgVkxBTl84MDIxUV9HVlJQYCBhbmQgYFZMQU5fODAyMVFfTVZSUGAsIGRlcGVuZCBvbiBgVkxBTl84MDIxUWAgd2hpY2ggaXMgZXhwZWN0ZWQuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgZnVuY3Rpb25zLiBGb2N1c1N5bWJvbHMgaW5kaWNhdGUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBkaXJlY3RseSBtb2RpZmllZCBvciBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZTogYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCBgdmxhbl92aWRfYWRkYCwgYHZsYW5fdmlkX2RlbGAsIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLCBhbmQgYHZsYW5fZm9yX2VhY2hgLiBJJ20gYWxzbyBsb29raW5nIGF0IGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIHdoaWNoIGlzIHN0YXRpYywgYW5kIGl0cyBjYWxsZXJzLiBUaGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHdoaWNoIGluY2x1ZGUgYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCBgdmxhbl9mb3JfZWFjaGAsIGFuZCBgX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1YCwgYXJlIHRoZSBvbmVzIEkgcmVhbGx5IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by5cblxuTm93LCB0aGUgY3JpdGljYWwgcGFydDogZGV0ZXJtaW5pbmcgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgYW5zd2VyIGlzIGEgZGVmaW5pdGUgeWVzLiBUaGVyZSBoYXZlIGJlZW4gbWVtb3J5IG9yZGVyaW5nIGFuZCBSQ1UgcG9pbnRlciBhY2Nlc3MgZml4ZXMgaW4gODAyLjFRIFZMQU4gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgYHZsYW5fZGV2aWNlc19hcnJheXNgLiBJbmNvcnJlY3QgUkNVIGJhcnJpZXJzIG9yIGRlcmVmZXJlbmNlcyBjYW4gbGVhZCB0byBjb25jdXJyZW5jeSBidWdzIOKAkyBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZXZlbiBudWxsIGRlcmVmZXJlbmNlcyDigJMgd2hlbiBWTEFOIGRldmljZXMgYXJlIGNyZWF0ZWQsIGRlbGV0ZWQsIG9yIGxvb2tlZCB1cCBjb25jdXJyZW50bHkgd2l0aGluIHRoZSBSQ1UgY3JpdGljYWwgc2VjdGlvbi4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIEknbGwgc2V0IHRoZSBgRW5hYmxlQ29uZmlnc2AgdG8gaW5jbHVkZSBgXCJWTEFOXzgwMjFRXCJgLCBhbmQgSSdsbCBsaWtlbHkgaW5jbHVkZSBgXCJWTEFOXzgwMjFRX0dWUlBcImAgYW5kIGBcIlZMQU5fODAyMVFfTVZSUFwiYCBhcyB3ZWxsLiBGaW5hbGx5LCBteSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOiBgcmVnaXN0ZXJfdmxhbl9kZXZgLCBgdW5yZWdpc3Rlcl92bGFuX2RldmAsIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLCBhbmQgYHZsYW5fZm9yX2VhY2hgLiBJJ3ZlIGNvbmZpcm1lZCBhbGwgdGhlc2UgZWxlbWVudHMgYW5kIEknbSByZWFkeSB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYxMCwiT3V0cHV0VG9rZW5zIjoxOTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0OToxMi40MjUwNTc5MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU2MTQxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIlZMQU5fODAyMVFfR1ZSUFwiLFxuICAgIFwiVkxBTl84MDIxUV9NVlJQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnaXN0ZXJfdmxhbl9kZXZcIixcbiAgICBcInVucmVnaXN0ZXJfdmxhbl9kZXZcIixcbiAgICBcIl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdVwiLFxuICAgIFwidmxhbl9mb3JfZWFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgY29uY3VycmVuY3kgcHJpbWl0aXZlcyBhbmQgUkNVIGFubm90YXRpb25zIGZvciB0aGUgODAyLjFRIFZMQU4gZGV2aWNlIGxvb2t1cCB0YWJsZXMgKHN3aXRjaGluZyB0byBzbXBfc3RvcmVfcmVsZWFzZSwgc21wX2xvYWRfYWNxdWlyZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBhbmQgcmN1X2RlcmVmZXJlbmNlX3JhdykuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgVkxBTiBtYW5hZ2VtZW50IGFuZCBsb29rdXAgcGF0aHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJWTEFOXzgwMjFRX0dWUlBcIixcbiAgICBcIlZMQU5fODAyMVFfTVZSUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJ1bnJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VcIixcbiAgICBcInZsYW5fZm9yX2VhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGNvbmN1cnJlbmN5IHByaW1pdGl2ZXMgYW5kIFJDVSBhbm5vdGF0aW9ucyBmb3IgdGhlIDgwMi4xUSBWTEFOIGRldmljZSBsb29rdXAgdGFibGVzIChzd2l0Y2hpbmcgdG8gc21wX3N0b3JlX3JlbGVhc2UsIHNtcF9sb2FkX2FjcXVpcmUsIHJjdV9hc3NpZ25fcG9pbnRlciwgYW5kIHJjdV9kZXJlZmVyZW5jZV9yYXcpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgZm9yIFZMQU4gbWFuYWdlbWVudCBhbmQgbG9va3VwIHBhdGhzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjEyLjU1MDY3OTU3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDQyOTAwNzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjEyLjU1MTE2ODU0OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0NDI4NTExODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIFJDVSBhbm5vdGF0aW9ucyBhbmQgbWVtb3J5IG9yZGVyaW5nIHByaW1pdGl2ZXMgaW4gdGhlIDgwMi4xUSBWTEFOIHN1YnN5c3RlbSwgcmVwbGFjaW5nIHNtcF93bWIoKS9zbXBfcm1iKCkgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpL3NtcF9sb2FkX2FjcXVpcmUoKSBhbmQgYWRkaW5nIHJjdV9hc3NpZ25fcG9pbnRlcigpL3JjdV9kZXJlZmVyZW5jZV9yYXcoKSBhY2Nlc3NvcnMuIFRoZSBkeW5hbWljIGFycmF5cyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIHdoaWNoIHplcm9lcyBhbGwgbWVtb3J5IHVwb24gYWxsb2NhdGlvbi4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgYWNjZXNzZWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBpbiB0aGlzIGNvZGUgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMTk3ZmY5ZDI3ZWI4N2I3ODRlMjA1NDdjY2U4NTdjMDg5YjJkNTlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMDo0ODoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jXG5pbmRleCAyZDJlZmI4Nzc5NzVkLi5lYzlhN2NjOGFmYzc0IDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uY1xuKysrIGIvbmV0LzgwMjFxL3ZsYW4uY1xuQEAgLTQ5LDcgKzQ5LDcgQEAgY29uc3QgY2hhciB2bGFuX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OO1xuIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0ICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFx0dW5zaWduZWQgaW50IHZpZHg7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiBcdGludCBwaWR4O1xuQEAgLTcwLDEwICs3MCw4IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0aWYgKGFycmF5ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXG4tXHRzbXBfd21iKCk7XG4tXG4tXHR2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oXG5pbmRleCBjNDFjYWFmOTQwOTVmLi5kODc0YWIzMjNkMzIwIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uaFxuQEAgLTIyLDggKzIyLDggQEAgZW51bSB2bGFuX3Byb3RvcyB7XG4gc3RydWN0IHZsYW5fZ3JvdXAge1xuIFx0dW5zaWduZWQgaW50XHRcdG5yX3ZsYW5fZGV2cztcbiBcdHN0cnVjdCBobGlzdF9ub2RlXHRobGlzdDtcdC8qIGxpbmtlZCBsaXN0ICovXG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXG4tXHRcdFx0XHRcdCAgICAgICBbVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUU107XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXG4rXHRcdFx0XHRcdFx0ICAgICBbVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUU107XG4gfTtcbiBcbiBzdHJ1Y3Qgdmxhbl9pbmZvIHtcbkBAIC01NCwxNSArNTQsMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwaWR4LFxuIFx0XHRcdFx0XHRcdFx0IHUxNiB2bGFuX2lkKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuLVx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4tXHRcdFx0XHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcbi1cbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG4tXHRzbXBfcm1iKCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xuK1x0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbitcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiBcbi1cdHJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7XG4rXHRyZXR1cm4gYXJyYXkgPyByY3VfZGVyZWZlcmVuY2VfcmF3KGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSkgOiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuQEAgLTgyLDEzICs4MCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ncm91cF9zZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiBcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IHBpZHggPSB2bGFuX3Byb3RvX2lkeCh2bGFuX3Byb3RvKTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuIFx0aWYgKCF2ZyB8fCBwaWR4IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXHRhcnJheSA9IHZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbiBcdFx0XHRcdCAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dO1xuLVx0YXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gZGV2O1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSwgZGV2KTtcbiB9XG4gXG4gLyogTXVzdCBiZSBpbnZva2VkIHdpdGggcmN1X3JlYWRfbG9jayBvciB3aXRoIFJUTkwuICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0OToxMi41NTExNjkzMzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2OTMzODIwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWTEFOIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBWTEFOIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC84MDIxcS92bGFuLmNgIGFuZCBgbmV0LzgwMjFxL3ZsYW4uaGAuIFRoaXMgc2VlbXMgbGlrZSBhIGNvbmN1cnJlbmN5LXJlbGF0ZWQgdXBkYXRlLCBqdWRnaW5nIGJ5IHRoZSBjaGFuZ2VzIGludm9sdmluZyBhdG9taWMgb3BlcmF0aW9ucyBhbmQgbWVtb3J5IGJhcnJpZXJzLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgX19yY3VgIGFuZCBjb3JyZXNwb25kaW5nIGF0b21pYyBvcGVyYXRpb25zIHN1cnJvdW5kaW5nIHRoZSBgdmxhbl9kZXZpY2VzX2FycmF5c2AgZGF0YSBzdHJ1Y3R1cmUuIEluIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIHRoZXkndmUgc3dhcHBlZCBgc3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTtgIGZvciBgc3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKiphcnJheTtgLiBUaGVuLCB0aGUgd3JpdGUgdG8gdGhpcyBhcnJheSBoYXMgY2hhbmdlZCwgdXNpbmcgYHNtcF9zdG9yZV9yZWxlYXNlYCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBgc21wX3dtYmAgZm9sbG93ZWQgYnkgYSBkaXJlY3QgYXNzaWdubWVudC4gVGhpcyBzaWduYWxzIGFuIGF0dGVtcHQgdG8gaW1wcm92ZSBzeW5jaHJvbml6YXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGRldmljZSBtYW5hZ2VtZW50LlxuXG5XaXRoaW4gYHZsYW4uaGAsIHRoZSBhcnJheSdzIGRlY2xhcmF0aW9uIHJlZmxlY3RzIHRoaXMgY2hhbmdlIHRvIHRoZSB1c2Ugb2YgYF9fcmN1YC4gSW4gYF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlYCwgdGhleSdyZSB1c2luZyBgc21wX2xvYWRfYWNxdWlyZWAgaW5zdGVhZCBvZiByZWFkIGFuZCBgc21wX3JtYmAsIHBsdXMgYW4gYHJjdV9kZXJlZmVyZW5jZV9yYXdgIHRvIGRlcmVmZXJlbmNlIHRoZSBhcnJheSBlbGVtZW50IHJhdGhlciB0aGFuIGRpcmVjdCBhY2Nlc3MuIFRoaXMgZGVmaW5pdGVseSBpcyByZWxhdGVkIHRvIHJlYWQtY29weS11cGRhdGUgc2VtYW50aWNzLiBTaW1pbGFybHksIHdpdGhpbiBgdmxhbl9ncm91cF9zZXRfZGV2aWNlYCwgdGhlIGFzc2lnbm1lbnQgdG8gdGhlIGFycmF5IG5vdyB1c2VzIGByY3VfYXNzaWduX3BvaW50ZXJgLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgdGhlIGBhcnJheWAgaXMgYWxsb2NhdGVkIHdpdGhpbiBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLCBzbyBJJ2xsIGdyYWIgdGhlIGNvZGUgZnJvbSBgbmV0LzgwMjFxL3ZsYW4uY2AgYXJvdW5kIGxpbmVzIDQ1LTg1IHRvIHNlZSBob3cgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEZyb20gdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UsIEkgZXhwZWN0IHRvIHNlZSBhbiBleHBsaWNpdCBhbGxvY2F0aW9uLCBhbmQgcG9zc2libHkgYW5vdGhlciBmZW5jZSByZWxhdGVkIHRvIHRoZSBjcmVhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYGFycmF5YCBiZWZvcmUgaXQncyBhc3NpZ25lZCB0byBgdmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c2AuIExldCdzIHNlZSBob3cgdGhleSBoYW5kbGUgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjM4LjI0NDU1NDQxNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvODAyMXEvdmxhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdGNvbnN0IGNoYXIgdmxhbl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjtcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0LyogRW5kIG9mIGdsb2JhbCB2YXJpYWJsZXMgZGVmaW5pdGlvbnMuICovXFxuICA0ODpcXHRcXG4gIDQ5OlxcdHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbiAgNTA6XFx0XFx0XFx0XFx0XFx0ICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxcbiAgNTE6XFx0e1xcbiAgNTI6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKiphcnJheTtcXG4gIDUzOlxcdFxcdHVuc2lnbmVkIGludCB2aWR4O1xcbiAgNTQ6XFx0XFx0dW5zaWduZWQgaW50IHNpemU7XFxuICA1NTpcXHRcXHRpbnQgcGlkeDtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0cGlkeCAgPSB2bGFuX3Byb3RvX2lkeCh2bGFuX3Byb3RvKTtcXG4gIDYwOlxcdFxcdGlmIChwaWR4IFxcdTAwM2MgMClcXG4gIDYxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHR2aWR4ICA9IHZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOO1xcbiAgNjQ6XFx0XFx0YXJyYXkgPSB2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XTtcXG4gIDY1OlxcdFxcdGlmIChhcnJheSAhPSBOVUxMKVxcbiAgNjY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdHNpemUgPSBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UgKikgKiBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOO1xcbiAgNjk6XFx0XFx0YXJyYXkgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuICA3MDpcXHRcXHRpZiAoYXJyYXkgPT0gTlVMTClcXG4gIDcxOlxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi9cXG4gIDc0OlxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xcbiAgNzU6XFx0XFx0cmV0dXJuIDA7XFxuICA3NjpcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcXG4gIDc5OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gIDgwOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRpZiAoISh2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZMQU5fRkxBR19CUklER0VfQklORElORykpXFxuICA4MzpcXHRcXHRcXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xcbiAgODQ6XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHR2b2lkIHVucmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4gIDg3OlxcdHtcXG4gIDg4OlxcdFxcdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdihkZXYpO1xcbiAgODk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbi1cXHUwMDNlcmVhbF9kZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjM4LjI0NDYyODIwNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyNjI4NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBWTEFOIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBjaXJjbGluZyBiYWNrLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0LzgwMjFxL3ZsYW4uaGAuIFRoaXMgbGlrZWx5IGhvbGRzIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIGZvciBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB3ZSdsbCBmaW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgcmVwcmVzZW50aW5nIFZMQU4gaW50ZXJmYWNlcywgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIFZMQU4gSURzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBrZXkgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBWTEFOIGhlYWRlcnMuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCB0YWdnaW5nIHNjZW5hcmlvczogc2luZ2xlIHRhZ2dlZCwgZG91YmxlIHRhZ2dlZCAoUWluUSksIGFuZCBhbnkgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9yIG9wdGltaXphdGlvbnMgaW1wbGVtZW50ZWQgZm9yIHBlcmZvcm1hbmNlLiBJIGV4cGVjdCB3ZSdsbCBhbHNvIGZpbmQgc29tZSB1c2VmdWwgY29tbWVudHMgcmVnYXJkaW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMgYW5kIGFueSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBmb3IgaGFyZHdhcmUgb2ZmbG9hZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZpbGUgaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIFZMQU4gb3BlcmF0aW9uIGluIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjQwLjM5NzI1OTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS92bGFuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgX19CRU5fVkxBTl84MDJfMVFfSU5DX19cXG4gICAzOlxcdCNkZWZpbmUgX19CRU5fVkxBTl84MDJfMVFfSU5DX19cXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0LyogaWYgdGhpcyBjaGFuZ2VzLCBhbGdvcml0aG0gd2lsbCBoYXZlIHRvIGJlIHJld29ya2VkIGJlY2F1c2UgdGhpc1xcbiAgMTA6XFx0ICogZGVwZW5kcyBvbiBjb21wbGV0ZWx5IGV4aGF1c3RpbmcgdGhlIFZMQU4gaWRlbnRpZmllciBzcGFjZS4gIFRodXNcXG4gIDExOlxcdCAqIGl0IGdpdmVzIGNvbnN0YW50IHRpbWUgbG9vay11cCwgYnV0IGluIG1hbnkgY2FzZXMgaXQgd2FzdGVzIG1lbW9yeS5cXG4gIDEyOlxcdCAqL1xcbiAgMTM6XFx0I2RlZmluZSBWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTICA4XFxuICAxNDpcXHQjZGVmaW5lIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU4gICAgIChWTEFOX05fVklEL1ZMQU5fR1JPVVBfQVJSQVlfU1BMSVRfUEFSVFMpXFxuICAxNTpcXHRcXG4gIDE2OlxcdGVudW0gdmxhbl9wcm90b3Mge1xcbiAgMTc6XFx0XFx0VkxBTl9QUk9UT184MDIxUVxcdD0gMCxcXG4gIDE4OlxcdFxcdFZMQU5fUFJPVE9fODAyMUFELFxcbiAgMTk6XFx0XFx0VkxBTl9QUk9UT19OVU0sXFxuICAyMDpcXHR9O1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdHJ1Y3Qgdmxhbl9ncm91cCB7XFxuICAyMzpcXHRcXHR1bnNpZ25lZCBpbnRcXHRcXHRucl92bGFuX2RldnM7XFxuICAyNDpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGhsaXN0O1xcdC8qIGxpbmtlZCBsaXN0ICovXFxuICAyNTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXFxuICAyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTtcXG4gIDI3OlxcdH07XFxuICAyODpcXHRcXG4gIDI5OlxcdHN0cnVjdCB2bGFuX2luZm8ge1xcbiAgMzA6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqcmVhbF9kZXY7IC8qIFRoZSBldGhlcm5ldChsaWtlKSBkZXZpY2VcXG4gIDMxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAqIHRoZSB2bGFuIGlzIGF0dGFjaGVkIHRvLlxcbiAgMzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICovXFxuICAzMzpcXHRcXHRzdHJ1Y3Qgdmxhbl9ncm91cFxcdGdycDtcXG4gIDM0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHR2aWRfbGlzdDtcXG4gIDM1OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdG5yX3ZpZHM7XFxuICAzNjpcXHRcXHRib29sXFx0XFx0XFx0YXV0b192aWQwO1xcbiAgMzc6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0cmN1O1xcbiAgMzg6XFx0fTtcXG4gIDM5OlxcdFxcbiAgNDA6XFx0c3RhdGljIGlubGluZSBpbnQgdmxhbl9wcm90b19pZHgoX19iZTE2IHByb3RvKVxcbiAgNDE6XFx0e1xcbiAgNDI6XFx0XFx0c3dpdGNoIChwcm90bykge1xcbiAgNDM6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxUSk6XFxuICA0NDpcXHRcXHRcXHRyZXR1cm4gVkxBTl9QUk9UT184MDIxUTtcXG4gIDQ1OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfODAyMUFEKTpcXG4gIDQ2OlxcdFxcdFxcdHJldHVybiBWTEFOX1BST1RPXzgwMjFBRDtcXG4gIDQ3OlxcdFxcdGRlZmF1bHQ6XFxuICA0ODpcXHRcXHRcXHRXQVJOKDEsIFxcXCJpbnZhbGlkIFZMQU4gcHJvdG9jb2w6IDB4JTA0eFxcXFxuXFxcIiwgbnRvaHMocHJvdG8pKTtcXG4gIDQ5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNTA6XFx0XFx0fVxcbiAgNTE6XFx0fVxcbiAgNTI6XFx0XFxuICA1MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxuICA1NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBpZHgsXFxuICA1NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdTE2IHZsYW5faWQpXFxuICA1NjpcXHR7XFxuICA1NzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xcbiAgNjA6XFx0XFx0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxcbiAgNjE6XFx0XFx0XFx0XFx0XFx0IFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0pO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRyZXR1cm4gYXJyYXkgPyByY3VfZGVyZWZlcmVuY2VfcmF3KGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSkgOiBOVUxMO1xcbiAgNjQ6XFx0fVxcbiAgNjU6XFx0XFxuICA2NjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbiAgNjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYmUxNiB2bGFuX3Byb3RvLFxcbiAgNjg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHUxNiB2bGFuX2lkKVxcbiAgNjk6XFx0e1xcbiAgNzA6XFx0XFx0aW50IHBpZHggPSB2bGFuX3Byb3RvX2lkeCh2bGFuX3Byb3RvKTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0aWYgKHBpZHggXFx1MDAzYyAwKVxcbiAgNzM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdHJldHVybiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSh2ZywgcGlkeCwgdmxhbl9pZCk7XFxuICA3NjpcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2dyb3VwX3NldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbiAgNzk6XFx0XFx0XFx0XFx0XFx0XFx0IF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZCxcXG4gIDgwOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgODE6XFx0e1xcbiAgODI6XFx0XFx0aW50IHBpZHggPSB2bGFuX3Byb3RvX2lkeCh2bGFuX3Byb3RvKTtcXG4gIDgzOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdGlmICghdmcgfHwgcGlkeCBcXHUwMDNjIDApXFxuICA4NjpcXHRcXHRcXHRyZXR1cm47XFxuICA4NzpcXHRcXHRhcnJheSA9IHZnLVxcdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXFxuICA4ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcXG4gIDg5OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0sIGRldik7XFxuICA5MDpcXHR9XFxuICA5MTpcXHRcXG4gIDkyOlxcdC8qIE11c3QgYmUgaW52b2tlZCB3aXRoIHJjdV9yZWFkX2xvY2sgb3Igd2l0aCBSVE5MLiAqL1xcbiAgOTM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9maW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuICA5NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxcbiAgOTU6XFx0e1xcbiAgOTY6XFx0XFx0c3RydWN0IHZsYW5faW5mbyAqdmxhbl9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwocmVhbF9kZXYtXFx1MDAzZXZsYW5faW5mbyk7XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdGlmICh2bGFuX2luZm8pXFxuICA5OTpcXHRcXHRcXHRyZXR1cm4gdmxhbl9ncm91cF9nZXRfZGV2aWNlKFxcdTAwMjZ2bGFuX2luZm8tXFx1MDAzZWdycCxcXG4gMTAwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjQwLjM5NzM4Mzc5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1ODIyNjQ3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBSQ1UgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiByZWZpbmluZyB0aGUgY29uY3VycmVuY3kgYXNwZWN0cyBvZiA4MDIuMVEgVkxBTiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBjb250ZXh0LiBJdCdzIGVzc2VudGlhbGx5IHRpZ2h0ZW5pbmcgdXAgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgbWVtb3J5IGFjY2VzcyBzZW1hbnRpY3MuXG5cbkZpcnN0LCBJIHNlZSB0aGUgc3dpdGNoIGZyb20gcmF3IGBzbXBfd21iKClgIGFuZCBgc21wX3JtYigpYCB0byBgc21wX3N0b3JlX3JlbGVhc2VgIGFuZCBgc21wX2xvYWRfYWNxdWlyZWAuIFRoYXQncyBnb29kOyBpdCdzIGEgbW9yZSBtb2Rlcm4gYW5kIHJvYnVzdCBhcHByb2FjaCB0byBtZW1vcnkgYmFycmllcnMuIFRoZSB1c2Ugb2YgYHJjdV9kZXJlZmVyZW5jZV9yYXdgIGFuZCBgcmN1X2Fzc2lnbl9wb2ludGVyYCBmb3IgdGhlIG5ldF9kZXZpY2UgcG9pbnRlciB3aXRoaW4gdGhlIFJDVSBhcnJheSBpcyBhbHNvIHRoZSBjb3JyZWN0IHdheSB0byBoYW5kbGUgdGhlc2UgdHlwZXMgb2Ygc3RydWN0dXJlcyBpbiBhbiBSQ1UgY29udGV4dCwgYW5kIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYF9fcmN1YCBhbm5vdGF0aW9ucyB0byB0aGUgYHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXlgIGlzIHByZWNpc2VseSB3aGF0IEknZCBleHBlY3QgdG8gc2VlLCB0byBjbGVhcmx5IGlkZW50aWZ5IHRoYXQgdGhpcyBkYXRhIGlzIG1hbmFnZWQgYnkgUkNVLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IG1lbW9yeSBzYWZldHkuIFRoYW5rZnVsbHksIHRoZSBhcnJheSBhbGxvY2F0aW9uIHVzZXMgYGt6YWxsb2NgLCB3aGljaCBpbml0aWFsaXplcyB0aGUgbWVtb3J5IHRvIHplcm8uIFRoaXMgaXMgYSBjcnVjaWFsIGNoZWNrIHRvIHByZXZlbnQgYW55IGFjY2lkZW50YWwgcmVhZGluZyBvZiB1bmluaXRpYWxpemVkIHZhbHVlcy4gU2luY2UgdGhlcmUgYXJlIG5vIGNhbGxzIHRvIGNvcHlfdG9fdXNlciwgYW55IG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIHJlYWRzIGZyb20gc3RhY2sgdmFyaWFibGVzLCB0aGlzIG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gVGhpcyBwYXRjaCBpcyBwdXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgUkNVIGFuZCBjb25jdXJyZW5jeSwgcGx1cyByZXNvbHZpbmcgdGhlIHNwYXJzZSBgX19yY3VgIGFubm90YXRpb24gaXNzdWVzLiBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55IGV4cG9zdXJlIHRvIGl0LCB3aGljaCBpcyB0aGUgbWFpbiBjb25jZXJuIGhlcmUuIEdpdmVuIHRoYXQgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUCBhcmUgYWxyZWFkeSBpbiBwbGFjZSwgdGhlIHVzdWFsIGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGJvdW5kcyBpc3N1ZXMgYXJlIGhhbmRsZWQsIHNvIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5TbywgbGV0IG1lIHNvbGlkaWZ5IHRoZSBjb25jbHVzaW9ucy4gV2UncmUgY29udmVydGluZyBiYXJyaWVyLWJhc2VkIFJDVSBwdWJsaXNoaW5nIHRvIHRoZSBtb3JlIGNvbnRlbXBvcmFyeSBhbmQgZXhwbGljaXQgYHNtcF9zdG9yZV9yZWxlYXNlYC9gc21wX2xvYWRfYWNxdWlyZWAgYXBwcm9hY2gsIGFsb25nIHdpdGggdGhlIGNvcnJlY3QgUkNVIGFubm90YXRpb25zIGFuZCBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgbWVtb3J5IGluIHF1ZXN0aW9uIGlzIGRlZmluaXRlbHkgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY2AuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQsIHVzZWQsIG9yIGxlYWtlZCBpbiBhbnkgd2F5LiBBbnkgY29uY3VycmVuY3kgaXNzdWVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBleGlzdGluZyBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGVyZWZvcmUsIHRoZSBcIk5lZWRzS01TQU5cIiBmbGFnIGlzIGZhbHNlLiBJJ20gY29uZmlkZW50IGFib3V0IHRoaXMgYXNzZXNzbWVudCwgYW5kIGl0J3MgdGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODksIk91dHB1dFRva2VucyI6MTcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDk6NDYuOTc5NjUzNTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgUkNVIGFubm90YXRpb25zIGFuZCBtZW1vcnkgb3JkZXJpbmcgcHJpbWl0aXZlcyBpbiB0aGUgODAyLjFRIFZMQU4gc3Vic3lzdGVtLCByZXBsYWNpbmcgc21wX3dtYigpL3NtcF9ybWIoKSB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkvc21wX2xvYWRfYWNxdWlyZSgpIGFuZCBhZGRpbmcgcmN1X2Fzc2lnbl9wb2ludGVyKCkvcmN1X2RlcmVmZXJlbmNlX3JhdygpIGFjY2Vzc29ycy4gVGhlIGR5bmFtaWMgYXJyYXlzIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jKCkgd2hpY2ggemVyb2VzIGFsbCBtZW1vcnkgdXBvbiBhbGxvY2F0aW9uLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBhY2Nlc3NlZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5IG9yIG1lbW9yeSBsaWZlY3ljbGUgaXNzdWVzIGluIHRoaXMgY29kZSB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgUkNVIGFubm90YXRpb25zIGFuZCBtZW1vcnkgb3JkZXJpbmcgcHJpbWl0aXZlcyBpbiB0aGUgODAyLjFRIFZMQU4gc3Vic3lzdGVtLCByZXBsYWNpbmcgc21wX3dtYigpL3NtcF9ybWIoKSB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkvc21wX2xvYWRfYWNxdWlyZSgpIGFuZCBhZGRpbmcgcmN1X2Fzc2lnbl9wb2ludGVyKCkvcmN1X2RlcmVmZXJlbmNlX3JhdygpIGFjY2Vzc29ycy4gVGhlIGR5bmFtaWMgYXJyYXlzIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jKCkgd2hpY2ggemVyb2VzIGFsbCBtZW1vcnkgdXBvbiBhbGxvY2F0aW9uLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBhY2Nlc3NlZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5IG9yIG1lbW9yeSBsaWZlY3ljbGUgaXNzdWVzIGluIHRoaXMgY29kZSB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5dm2m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 20:28:52 +0000 UTC FinishedAt: 2026-09-02 20:49:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "d0ec95a8a4e79f2fd6063fc8932415db8c227689", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "VLAN_8021Q_GVRP", "VLAN_8021Q_MVRP" ], "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": "d0ec95a8a4e79f2fd6063fc8932415db8c227689", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "VLAN_8021Q_GVRP", "VLAN_8021Q_MVRP" ], "series_id": "a6340ab3-120a-46b5-8798-e750e05b67fa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "register_vlan_dev", "unregister_vlan_dev", "__vlan_find_dev_deep_rcu", "vlan_for_each" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUV9HVlJQJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVFfTVZSUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2lzdGVyX3ZsYW5fZGV2JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1JiMzNDssCiAgICAmIzM0O3ZsYW5fZm9yX2VhY2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIFJDVSBhbm5vdGF0aW9ucyBhbmQgbWVtb3J5IG9yZGVyaW5nIHByaW1pdGl2ZXMgaW4gdGhlIDgwMi4xUSBWTEFOIHN1YnN5c3RlbSwgcmVwbGFjaW5nIHNtcF93bWIoKS9zbXBfcm1iKCkgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpL3NtcF9sb2FkX2FjcXVpcmUoKSBhbmQgYWRkaW5nIHJjdV9hc3NpZ25fcG9pbnRlcigpL3JjdV9kZXJlZmVyZW5jZV9yYXcoKSBhY2Nlc3NvcnMuIFRoZSBkeW5hbWljIGFycmF5cyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIHdoaWNoIHplcm9lcyBhbGwgbWVtb3J5IHVwb24gYWxsb2NhdGlvbi4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgYWNjZXNzZWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBpbiB0aGlzIGNvZGUgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBjb25jdXJyZW5jeSBwcmltaXRpdmVzIGFuZCBSQ1UgYW5ub3RhdGlvbnMgZm9yIHRoZSA4MDIuMVEgVkxBTiBkZXZpY2UgbG9va3VwIHRhYmxlcyAoc3dpdGNoaW5nIHRvIHNtcF9zdG9yZV9yZWxlYXNlLCBzbXBfbG9hZF9hY3F1aXJlLCByY3VfYXNzaWduX3BvaW50ZXIsIGFuZCByY3VfZGVyZWZlcmVuY2VfcmF3KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBWTEFOIG1hbmFnZW1lbnQgYW5kIGxvb2t1cCBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTE5N2ZmOWQyN2ViODdiNzg0ZTIwNTQ3Y2NlODU3YzA4OWIyZDU5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMjA6NDg6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmNcbmluZGV4IDJkMmVmYjg3Nzk3NWQuLmVjOWE3Y2M4YWZjNzQgMTAwNjQ0XG4tLS0gYS9uZXQvODAyMXEvdmxhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5jXG5AQCAtNDksNyAmIzQzOzQ5LDcgQEAgY29uc3QgY2hhciB2bGFuX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OO1xuIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0ICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKiphcnJheTtcbiBcdHVuc2lnbmVkIGludCB2aWR4O1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4gXHRpbnQgcGlkeDtcbkBAIC03MCwxMCAmIzQzOzcwLDggQEAgc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXG4gXHRpZiAoYXJyYXkgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuLVx0LyogcGFpcmVkIHdpdGggc21wX3JtYigpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi9cbi1cdHNtcF93bWIoKTtcbi1cbi1cdHZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0gPSBhcnJheTtcbiYjNDM7XHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0sIGFycmF5KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaFxuaW5kZXggYzQxY2FhZjk0MDk1Zi4uZDg3NGFiMzIzZDMyMCAxMDA2NDRcbi0tLSBhL25ldC84MDIxcS92bGFuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmhcbkBAIC0yMiw4ICYjNDM7MjIsOCBAQCBlbnVtIHZsYW5fcHJvdG9zIHtcbiBzdHJ1Y3Qgdmxhbl9ncm91cCB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bnJfdmxhbl9kZXZzO1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGhsaXN0O1x0LyogbGlua2VkIGxpc3QgKi9cbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqdmxhbl9kZXZpY2VzX2FycmF5c1tWTEFOX1BST1RPX05VTV1cbi1cdFx0XHRcdFx0ICAgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgW1ZMQU5fR1JPVVBfQVJSQVlfU1BMSVRfUEFSVFNdO1xuIH07XG4gXG4gc3RydWN0IHZsYW5faW5mbyB7XG5AQCAtNTQsMTUgJiM0Mzs1NCwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXG4gXHRcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IHBpZHgsXG4gXHRcdFx0XHRcdFx0XHQgdTE2IHZsYW5faWQpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuLVx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4tXHRcdFx0XHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcbi1cbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG4tXHRzbXBfcm1iKCk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi9cbiYjNDM7XHRhcnJheSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxuJiM0MztcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiBcbi1cdHJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7XG4mIzQzO1x0cmV0dXJuIGFycmF5ID8gcmN1X2RlcmVmZXJlbmNlX3JhdyhhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0pIDogTlVMTDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbkBAIC04MiwxMyAmIzQzOzgwLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2dyb3VwX3NldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpbnQgcGlkeCA9IHZsYW5fcHJvdG9faWR4KHZsYW5fcHJvdG8pO1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuIFx0aWYgKCF2ZyB8fCBwaWR4IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXHRhcnJheSA9IHZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbiBcdFx0XHRcdCAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dO1xuLVx0YXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gZGV2O1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0sIGRldik7XG4gfVxuIFxuIC8qIE11c3QgYmUgaW52b2tlZCB3aXRoIHJjdV9yZWFkX2xvY2sgb3Igd2l0aCBSVE5MLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUV9HVlJQJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVFfTVZSUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2lzdGVyX3ZsYW5fZGV2JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1JiMzNDssCiAgICAmIzM0O3ZsYW5fZm9yX2VhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBjb25jdXJyZW5jeSBwcmltaXRpdmVzIGFuZCBSQ1UgYW5ub3RhdGlvbnMgZm9yIHRoZSA4MDIuMVEgVkxBTiBkZXZpY2UgbG9va3VwIHRhYmxlcyAoc3dpdGNoaW5nIHRvIHNtcF9zdG9yZV9yZWxlYXNlLCBzbXBfbG9hZF9hY3F1aXJlLCByY3VfYXNzaWduX3BvaW50ZXIsIGFuZCByY3VfZGVyZWZlcmVuY2VfcmF3KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBWTEFOIG1hbmFnZW1lbnQgYW5kIGxvb2t1cCBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTE5N2ZmOWQyN2ViODdiNzg0ZTIwNTQ3Y2NlODU3YzA4OWIyZDU5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMjA6NDg6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uYwppbmRleCAyZDJlZmI4Nzc5NzVkLi5lYzlhN2NjOGFmYzc0IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmMKQEAgLTQ5LDcgJiM0Mzs0OSw3IEBAIGNvbnN0IGNoYXIgdmxhbl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLAogCQkJCSAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5OwogCXVuc2lnbmVkIGludCB2aWR4OwogCXVuc2lnbmVkIGludCBzaXplOwogCWludCBwaWR4OwpAQCAtNzAsMTAgJiM0Mzs3MCw4IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLAogCWlmIChhcnJheSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKLQkvKiBwYWlyZWQgd2l0aCBzbXBfcm1iKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqLwotCXNtcF93bWIoKTsKLQotCXZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7CiYjNDM7CS8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7dmctJmd0O3ZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0sIGFycmF5KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmgKaW5kZXggYzQxY2FhZjk0MDk1Zi4uZDg3NGFiMzIzZDMyMCAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5oCkBAIC0yMiw4ICYjNDM7MjIsOCBAQCBlbnVtIHZsYW5fcHJvdG9zIHsKIHN0cnVjdCB2bGFuX2dyb3VwIHsKIAl1bnNpZ25lZCBpbnQJCW5yX3ZsYW5fZGV2czsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlobGlzdDsJLyogbGlua2VkIGxpc3QgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dCi0JCQkJCSAgICAgICBbVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUU107CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqdmxhbl9kZXZpY2VzX2FycmF5c1tWTEFOX1BST1RPX05VTV0KJiM0MzsJCQkJCQkgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTsKIH07CiAKIHN0cnVjdCB2bGFuX2luZm8gewpAQCAtNTQsMTUgJiM0Mzs1NCwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiAJCQkJCQkJIHVuc2lnbmVkIGludCBwaWR4LAogCQkJCQkJCSB1MTYgdmxhbl9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5OwogCi0JYXJyYXkgPSB2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XQotCQkJCSAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dOwotCi0JLyogcGFpcmVkIHdpdGggc21wX3dtYigpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi8KLQlzbXBfcm1iKCk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovCiYjNDM7CWFycmF5ID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdCiYjNDM7CQkJCSBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTsKIAotCXJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7CiYjNDM7CXJldHVybiBhcnJheSA/IHJjdV9kZXJlZmVyZW5jZV9yYXcoYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKSA6IE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCkBAIC04MiwxMyAmIzQzOzgwLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2dyb3VwX3NldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLAogCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgcGlkeCA9IHZsYW5fcHJvdG9faWR4KHZsYW5fcHJvdG8pOwotCXN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7CiAKIAlpZiAoIXZnIHx8IHBpZHggJmx0OyAwKQogCQlyZXR1cm47CiAJYXJyYXkgPSB2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XQogCQkJCSAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dOwotCWFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA9IGRldjsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSwgZGV2KTsKIH0KIAogLyogTXVzdCBiZSBpbnZva2VkIHdpdGggcmN1X3JlYWRfbG9jayBvciB3aXRoIFJUTkwuICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTEFOIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGlzc2VjdCB0aGUgY2hhbmdlcywgZm9jdXNpbmcgb24gdGhlIGNvcmUgZmlsZSBtb2RpZmljYXRpb25zLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBuZXQvODAyMXEvdmxhbi5jYCBhbmQgYG5ldC84MDIxcS92bGFuLmhgIGZpbGVzIOKAkyBzbyBWTEFOIHRhZ2dpbmcsIG5hdHVyYWxseS4KClNwZWNpZmljYWxseSwgaW4gYHZsYW4uY2AsIHRoZSBrZXkgYWRqdXN0bWVudCBzZWVtcyB0byBiZSBpbiBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLiBUaGUgY3JpdGljYWwgc3dpdGNoIGlzIHRoZSBtb3ZlIGZyb20gYSBzaW1wbGUgcG9pbnRlciBhcnJheSwgYHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7YCwgdG8gYW4gUkNVLXNhZmUgdmVyc2lvbjogYHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7YC4gVGhpcyBzY3JlYW1zIGNvbmN1cnJlbnQgYWNjZXNzIGFuZCB0aGUgbmVlZCBmb3IgcHJvcGVyIG1lbW9yeSBiYXJyaWVyL29yZGVyaW5nLiBSZXBsYWNpbmcgYHNtcF93bWIoKWAgYW5kIGRpcmVjdCBhc3NpZ25tZW50IHdpdGggYHNtcF9zdG9yZV9yZWxlYXNlKClgIGlzIHRoZSBnaXZlYXdheSDigJMgcHJvdGVjdGluZyB0aGF0IHdyaXRlIHdpdGggYSByZWxlYXNlIGJhcnJpZXIuCgpUaGVuLCBpbiBgdmxhbi5oYCwgdGhlIGBzdHJ1Y3Qgdmxhbl9ncm91cGAgbm93IGhhcyBpdHMgYXJyYXkgZWxlbWVudHMgYW5ub3RhdGVkIHdpdGggYF9fcmN1YCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoZSBhY2NvbXBhbnlpbmcgY2hhbmdlcyBpbiBgX192bGFuX2dyb3VwX2dldF9kZXZpY2VgIGFyZSBhbHNvIHRlbGxpbmcuIFRoZSB1c2Ugb2YgYHNtcF9sb2FkX2FjcXVpcmVgIGluc3RlYWQgb2YgYHNtcF9ybWJgIGFuZCBgcmN1X2RlcmVmZXJlbmNlX3Jhd2AgY29uZmlybXMgdGhpcy4gV2UmIzM5O3JlIGxvYWRpbmcgdGhlIHBvaW50ZXIgd2l0aCBhbiBhY3F1aXJlIGJhcnJpZXIgdG8gZW5zdXJlIHdlIHNlZSBhbGwgcHJpb3Igd3JpdGVzLCBhbmQgdGhlbiBkZXJlZmVyZW5jaW5nIGl0IHdpdGggdGhlIFJDVSBwcmltaXRpdmVzLiBTaW1pbGFybHksIGB2bGFuX2dyb3VwX3NldF9kZXZpY2VgIG5vdyB1c2VzIGByY3VfYXNzaWduX3BvaW50ZXIoKWAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IFJDVSBwYXR0ZXJuIGZvciBzYWZlbHkgcHVibGlzaGluZyBhIHBvaW50ZXIuCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgYW5kIHJhY2UgY29uZGl0aW9ucyB3aGVuIGFjY2Vzc2luZyB0aGUgVkxBTiBkZXZpY2UgYXJyYXksIHdoaWNoIHdvdWxkIHR5cGljYWxseSBiZSBlbmNvdW50ZXJlZCBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIE5vdywgbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzdXJyb3VuZGluZyBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvODAyMXFgIGRpcmVjdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIGVuYWJsZWQgYXMgYSBjb25zZXF1ZW5jZSBvZiB0aGlzIHBhdGNoLCBvciBpZiBpdCBjaGFuZ2VzIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIFZMQU4gZHJpdmVyLiBJJiMzOTtsbCB1c2UgZWl0aGVyIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgYG5ldC84MDIxcS9LY29uZmlnYCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWTEFOXzgwMjFRJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LzgwMjFxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTMxLVxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL0tjb25maWctMzMtXHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgODAyLjFRIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgdW5kZXJzdGFuZGluZyBob3cgdGhlIDgwMi4xUSBWTEFOIHRhZ2dpbmcgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBmaXJzdCBzdGVwIGlzIHRvIHNlZSBob3cgdGhlIGJ1aWxkIHN5c3RlbSBpbnRlZ3JhdGVzIGl0LCBhbmQsIHdlbGwsIGhvdyB0aGUgb3B0aW9ucyBhbmQgc2V0dGluZ3MgYXJlIHN0cnVjdHVyZWQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBjb25maWd1cmF0aW9uIGFuZCBidWlsZCBmaWxlcy4KCkxldCYjMzk7cyBiZWdpbiBieSBwdWxsaW5nIHVwIGBuZXQvODAyMXEvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoZSBmZWF0dXJlIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIgKGlmIGF0IGFsbCkuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgc2VlIHRoZSBlbmFibGUvZGlzYWJsZSBvcHRpb25zLCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZXMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGhvdyBJJiMzOTtsbCBpbnRlcnByZXQgdGhlIGNvZGUuCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYG5ldC84MDIxcS9NYWtlZmlsZWAuIFRoaXMgd2lsbCByZXZlYWwgaG93IHRoZSA4MDIuMVEgY29kZSBpcyBjb21waWxlZCwgbGlua2VkLCBhbmQgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc291cmNlIGZpbGVzIGluY2x1ZGVkLCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhlIEtjb25maWcgb3B0aW9ucywgYW5kIGhvdyB0aGUgbW9kdWxlcyBhcmUgYnVpbHQuIEl0IHNob3VsZCBwcm92aWRlIGluc2lnaHRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCB3aGljaCBmaWxlcyBpbXBsZW1lbnQgd2hhdCBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIEkgY2FuIGNvbm5lY3QgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUgYWN0dWFsIHNvdXJjZS4gVW5kZXJzdGFuZGluZyB0aGVzZSB0d28gZmlsZXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBhbmFseXNpcywgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCAqaG93KiB0byBjb250cm9sIGFuZCBjb21waWxlIHRoZSB1bmRlcmx5aW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvODAyMXEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIENvbmZpZ3VyYXRpb24gZm9yIDgwMi4xUSBWTEFOIHN1cHBvcnRcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFZMQU5fODAyMVFcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0OzgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBTZWxlY3QgdGhpcyBhbmQgeW91IHdpbGwgYmUgYWJsZSB0byBjcmVhdGUgODAyLjFRIFZMQU4gaW50ZXJmYWNlc1xuICAxMDpcdFx0ICBvbiB5b3VyIEV0aGVybmV0IGludGVyZmFjZXMuIDgwMi4xUSBWTEFOIHN1cHBvcnRzIGFsbW9zdFxuICAxMTpcdFx0ICBldmVyeXRoaW5nIGEgcmVndWxhciBFdGhlcm5ldCBpbnRlcmZhY2UgZG9lcywgaW5jbHVkaW5nXG4gIDEyOlx0XHQgIGZpcmV3YWxsaW5nLCBicmlkZ2luZywgYW5kIG9mIGNvdXJzZSBJUCB0cmFmZmljLiBZb3Ugd2lsbCBuZWVkXG4gIDEzOlx0XHQgIHRoZSAmIzM5O2lwJiMzOTsgdXRpbGl0eSBpbiBvcmRlciB0byBlZmZlY3RpdmVseSB1c2UgVkxBTnMuXG4gIDE0Olx0XHQgIFNlZSB0aGUgVkxBTiB3ZWIgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcbiAgMTU6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5jYW5kZWxhdGVjaC5jb20vfmdyZWVhci92bGFuLmh0bWxcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMTg6XHRcdCAgd2lsbCBiZSBjYWxsZWQgODAyMXEuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtHVlJQIChHQVJQIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgMjU6XHRcdHNlbGVjdCBHQVJQXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSBHVlJQIGVuZC1zeXN0ZW0gc3VwcG9ydC4gR1ZSUCBpcyB1c2VkIGZvclxuICAyODpcdFx0ICBhdXRvbWF0aWMgcHJvcGFnYXRpb24gb2YgcmVnaXN0ZXJlZCBWTEFOcyB0byBzd2l0Y2hlcy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgVkxBTl84MDIxUV9NVlJQXG4gIDMzOlx0XHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gIDM0Olx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgMzU6XHRcdHNlbGVjdCBNUlBcbiAgMzY6XHRcdGhlbHBcbiAgMzc6XHRcdCAgU2VsZWN0IHRoaXMgdG8gZW5hYmxlIE1WUlAgZW5kLXN5c3RlbSBzdXBwb3J0LiBNVlJQIGlzIHVzZWQgZm9yXG4gIDM4Olx0XHQgIGF1dG9tYXRpYyBwcm9wYWdhdGlvbiBvZiByZWdpc3RlcmVkIFZMQU5zIHRvIHN3aXRjaGVzOyBpdFxuICAzOTpcdFx0ICBzdXBlcnNlZGVzIEdWUlAgYW5kIGlzIG5vdCBiYWNrd2FyZHMtY29tcGF0aWJsZS5cbiAgNDA6XHRcbiAgNDE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDYzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMVEgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgODAyLjFRIFZMQU4gc3VwcG9ydCB3aXRoaW4gdGhpcyBrZXJuZWwuIE15IGZpcnN0IHN0b3AgaXMgZGVmaW5pdGVseSBgbmV0LzgwMjFxL01ha2VmaWxlYC4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hhdCBvYmplY3QgZmlsZXMgYXJlIGJlaW5nIGNvbXBpbGVkLiBLbm93aW5nIHRoaXMsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcywgcGlucG9pbnQgd2hpY2ggc291cmNlIGZpbGVzIGFyZSBjcml0aWNhbCwgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb21waWxlZCBvYmplY3RzIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0IG92ZXJ2aWV3IG9mIHRoZSBjb2RlIHRoYXQgbWFuYWdlcyB0aGUgVkxBTiB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcgbG9naWMsIGFuZCB3aGljaCBwYXJ0cyBkZWFsIHdpdGggdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBoYXJkd2FyZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNpcyB0byB0aGVuIGRldGVybWluZSBpZiB0aGVyZSBhcmUgb3B0aW1pemF0aW9ucyBvciBtb2RpZmljYXRpb25zIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0LzgwMjFxL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVkxBTiBsYXllci5cbiAgIDQ6XHQjXG4gICA1Olx0b2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX1ZMQU5fODAyMVEpKVx0JiM0Mzs9IHZsYW5fY29yZS5vXG4gICA2Olx0b2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXHRcdCYjNDM7PSA4MDIxcS5vXG4gICA3Olx0XG4gICA4Olx0ODAyMXEteVx0XHRcdFx0XHQ6PSB2bGFuLm8gdmxhbl9kZXYubyB2bGFuX25ldGxpbmsub1xuICAgOTpcdDgwMjFxLSQoQ09ORklHX1ZMQU5fODAyMVFfR1ZSUClcdFx0JiM0Mzs9IHZsYW5fZ3ZycC5vXG4gIDEwOlx0ODAyMXEtJChDT05GSUdfVkxBTl84MDIxUV9NVlJQKVx0XHQmIzQzOz0gdmxhbl9tdnJwLm9cbiAgMTE6XHQ4MDIxcS0kKENPTkZJR19QUk9DX0ZTKVx0XHRcdCYjNDM7PSB2bGFucHJvYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU0NAoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkFuYWx5emluZyBWTEFOIEdyb3VwIEFsbG9jYXRpb24gJmFtcDsgRGV2aWNlIEFzc29jaWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgYW5kIHVzYWdlIG9mIHRoZXNlIFZMQU4tcmVsYXRlZCBmdW5jdGlvbnM6IGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIGBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZWAsIGFuZCBgdmxhbl9ncm91cF9zZXRfZGV2aWNlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlaXIgdXNhZ2Ug4oCTIGZpbmQgb3V0IHdoZXJlIHRoZXkmIzM5O3JlIGNhbGxlZCBhbmQgd2hhdCB0aGV5JiMzOTtyZSBkb2luZyB3aXRoaW4gdGhlIGxhcmdlciBjb2RlYmFzZS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGtub3cgd2hhdCBtb2R1bGVzIHJlbHkgb24gdGhlbSwgYW5kIGhvdy4KCmB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAgbGlrZWx5IGhhbmRsZXMgcHJlLWFsbG9jYXRpb24gb3IgcmVzZXJ2YXRpb24gb2YgVkxBTiBJRHMsIHBvc3NpYmx5IGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gb3IgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0OiBhcmUgd2UgcHJlLWFsbG9jYXRpbmcgdG8gYXZvaWQgY29uZmxpY3RzLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdGhhdC4KClRoZW4gdGhlcmUmIzM5O3MgYF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlYCB3aGljaCBzdWdnZXN0cyBhIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBsb29raW5nIHVwIG9yIHJldHJpZXZpbmcgdGhlIGRldmljZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIFZMQU4gZ3JvdXAuIFRoZSBkb3VibGUgdW5kZXJzY29yZSBhdCB0aGUgYmVnaW5uaW5nIHN1Z2dlc3RzIHRoYXQgaXQgbWlnaHQgYmUgYW4gaW50ZXJuYWwgZnVuY3Rpb24gbm90IGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UsIHdoaWNoIG1lYW5zIEkmIzM5O2xsIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlICYjMzQ7cmVhbCYjMzQ7IEFQSSB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHN1cHBvcnRpbmcsIGFuZCB3aHkgaXQgaXMgYWJzdHJhY3RlZCBpbiB0aGlzIHdheS4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIHRvIG1hcCBWTEFOIElEcyB0byBuZXR3b3JrIGludGVyZmFjZXMuIElzIHRoaXMgaGFwcGVuaW5nIGF0IHJ1bnRpbWUsIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgb3Igb25seSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb3IgY29uZmlndXJhdGlvbj8KCkZpbmFsbHksIGB2bGFuX2dyb3VwX3NldF9kZXZpY2VgIGltcGxpZXMgYXNzaWduaW5nIG9yIGFzc29jaWF0aW5nIGEgbmV0d29yayBkZXZpY2UgKGxpa2UgYSBwaHlzaWNhbCBOSUMgb3IgYSB2aXJ0dWFsIGJyaWRnZSkgd2l0aCBhIFZMQU4gZ3JvdXAuIFRoaXMgaXMgdGhlIHBhaXJpbmcgb2YgYSBwaHlzaWNhbCBkZXZpY2Ugd2l0aCBWTEFOIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIHRoZSBjb3JlIG9mIGhvdyBWTEFOcyB3b3JrLiBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggZGV2aWNlIHJlbW92YWwgb3IgcmVjb25maWd1cmF0aW9uLiBIb3cgaXMgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgYmVpbmcgbWFpbnRhaW5lZCwgYW5kIGlzIHRoaXMgdGhyZWFkIHNhZmU/CgpCYXNpY2FsbHksIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgd29ya2Zsb3c6IFZMQU4gSUQgYWxsb2NhdGlvbiwgZGV2aWNlIGFzc29jaWF0aW9uLCBhbmQgaG93IHRob3NlIGFzc29jaWF0aW9ucyBhcmUgbWFuYWdlZCBvdmVyIHRpbWUuIFRoZSBjYWxsc2l0ZXMgYXJlIG15IHJvYWRtYXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9ncm91cF9wcmVhbGxvY192aWR8dmxhbl9ncm91cF9zZXRfZGV2aWNlfF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlfHZsYW5fZ3JvdXBfZ2V0X2RldmljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbi5jPTQ1PWNvbnN0IGNoYXIgdmxhbl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjtcbi0tXG5uZXQvODAyMXEvdmxhbi5jLTQ4LVxubmV0LzgwMjFxL3ZsYW4uYzo0OTpzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2Zyxcbm5ldC84MDIxcS92bGFuLmMtNTAtXHRcdFx0XHQgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXG4tLVxubmV0LzgwMjFxL3ZsYW4uYy03Mi1cbm5ldC84MDIxcS92bGFuLmM6NzM6XHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xubmV0LzgwMjFxL3ZsYW4uYy03NC1cdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0sIGFycmF5KTtcbi0tXG5uZXQvODAyMXEvdmxhbi5jPTg2PXZvaWQgdW5yZWdpc3Rlcl92bGFuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbm5ldC84MDIxcS92bGFuLmMtMTA3LVxubmV0LzgwMjFxL3ZsYW4uYzoxMDg6XHR2bGFuX2dyb3VwX3NldF9kZXZpY2UoZ3JwLCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8sIHZsYW5faWQsIE5VTEwpO1xubmV0LzgwMjFxL3ZsYW4uYy0xMDktXG4tLVxubmV0LzgwMjFxL3ZsYW4uYz0xNDY9aW50IHJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvODAyMXEvdmxhbi5jLTE3Mi1cbm5ldC84MDIxcS92bGFuLmM6MTczOlx0ZXJyID0gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoZ3JwLCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8sIHZsYW5faWQpO1xubmV0LzgwMjFxL3ZsYW4uYy0xNzQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC84MDIxcS92bGFuLmMtMTkwLVx0ICovXG5uZXQvODAyMXEvdmxhbi5jOjE5MTpcdHZsYW5fZ3JvdXBfc2V0X2RldmljZShncnAsIHZsYW4tXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCwgZGV2KTtcbm5ldC84MDIxcS92bGFuLmMtMTkyLVx0Z3JwLVx1MDAzZW5yX3ZsYW5fZGV2cyYjNDM7JiM0Mzs7XG4tLVxubmV0LzgwMjFxL3ZsYW4uaD00MD1zdGF0aWMgaW5saW5lIGludCB2bGFuX3Byb3RvX2lkeChfX2JlMTYgcHJvdG8pXG4tLVxubmV0LzgwMjFxL3ZsYW4uaC01Mi1cbm5ldC84MDIxcS92bGFuLmg6NTM6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxubmV0LzgwMjFxL3ZsYW4uaC01NC1cdFx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGlkeCxcbi0tXG5uZXQvODAyMXEvdmxhbi5oLTU4LVxubmV0LzgwMjFxL3ZsYW4uaDo1OTpcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG5uZXQvODAyMXEvdmxhbi5oLTYwLVx0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbi0tXG5uZXQvODAyMXEvdmxhbi5oLTY1LVxubmV0LzgwMjFxL3ZsYW4uaDo2NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxubmV0LzgwMjFxL3ZsYW4uaC02Ny1cdFx0XHRcdFx0XHQgICAgICAgX19iZTE2IHZsYW5fcHJvdG8sXG4tLVxubmV0LzgwMjFxL3ZsYW4uaC03NC1cbm5ldC84MDIxcS92bGFuLmg6NzU6XHRyZXR1cm4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UodmcsIHBpZHgsIHZsYW5faWQpO1xubmV0LzgwMjFxL3ZsYW4uaC03Ni19XG5uZXQvODAyMXEvdmxhbi5oLTc3LVxubmV0LzgwMjFxL3ZsYW4uaDo3ODpzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ncm91cF9zZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2Zyxcbm5ldC84MDIxcS92bGFuLmgtNzktXHRcdFx0XHRcdCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQsXG4tLVxubmV0LzgwMjFxL3ZsYW4uaD05Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2ZpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2Rldixcbi0tXG5uZXQvODAyMXEvdmxhbi5oLTk4LVx0aWYgKHZsYW5faW5mbylcbm5ldC84MDIxcS92bGFuLmg6OTk6XHRcdHJldHVybiB2bGFuX2dyb3VwX2dldF9kZXZpY2UoXHUwMDI2dmxhbl9pbmZvLVx1MDAzZWdycCxcbm5ldC84MDIxcS92bGFuLmgtMTAwLVx0XHRcdFx0XHQgICAgIHZsYW5fcHJvdG8sIHZsYW5faWQpO1xuLS1cbm5ldC84MDIxcS92bGFuLmg9MTA1PXN0YXRpYyBpbmxpbmUgbmV0ZGV2X2ZlYXR1cmVzX3Qgdmxhbl90bmxfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2KVxuLS1cbm5ldC84MDIxcS92bGFuLmgtMTE5LVx0Zm9yICgoaSkgPSAwOyBpIFx1MDAzYyBWTEFOX1BST1RPX05VTSAqIFZMQU5fTl9WSUQ7IGkmIzQzOyYjNDM7KSBcXFxubmV0LzgwMjFxL3ZsYW4uaDoxMjA6XHRcdGlmICgoKGRldikgPSBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgoZ3JwKSwgKGkpIC8gVkxBTl9OX1ZJRCwgXFxcbm5ldC84MDIxcS92bGFuLmgtMTIxLVx0XHRcdFx0XHRcdFx0ICAgIChpKSAlIFZMQU5fTl9WSUQpKSlcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9NzY9c3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy04MS1cdGlmICh2bGFuX2luZm8pIHtcbm5ldC84MDIxcS92bGFuX2NvcmUuYzo4MjpcdFx0cmV0dXJuIHZsYW5fZ3JvdXBfZ2V0X2RldmljZShcdTAwMjZ2bGFuX2luZm8tXHUwMDNlZ3JwLFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTgzLVx0XHRcdFx0XHQgICAgIHZsYW5fcHJvdG8sIHZsYW5faWQpO1xuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYz0yMjc9aW50IHZsYW5fZm9yX2VhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMjQyLVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2aWRfaW5mbywgXHUwMDI2dmxhbl9pbmZvLVx1MDAzZXZpZF9saXN0LCBsaXN0KSB7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MjQzOlx0XHR2ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKFx1MDAyNnZsYW5faW5mby1cdTAwM2VncnAsIHZpZF9pbmZvLVx1MDAzZXByb3RvLFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI0NC1cdFx0XHRcdFx0ICAgICB2aWRfaW5mby1cdTAwM2V2aWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzM4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIFJDVSBhbm5vdGF0aW9ucyBhbmQgY29uY3VycmVuY3kgc3luY2hyb25pemF0aW9uIHdpdGhpbiBWTEFOIDgwMi4xUSBncm91cCBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0htbSwgaXMgdGhpcyBmdXp6YWJsZT8mIzM0OyBUaW1lIHRvIGV2YWx1YXRlLgoKVGhlIGNoZWNrbGlzdCBzYXlzIEkgc2hvdWxkIGV4Y2x1ZGUgcGF0Y2hlcyB0aGF0IGludm9sdmUgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGNvc21ldGljIGxvZ2dpbmcsIG5vbi1mdW5jdGlvbmFsIGNvbnN0YW50IGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgKHBhcnRpY3VsYXJseSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUpLCBvciBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgb25seSBydW4gZHVyaW5nIGhvdC11bnBsdWcgb3BlcmF0aW9ucy4gVGhpcyBpcyBmYWlybHkgc3RhbmRhcmQuCgpMb29raW5nIGRlZXBlciwgdGhpcyBwYXRjaCAqZG9lcyogbW9kaWZ5IGNvcmUgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgODAyLjFRIFZMQU4gZGV2aWNlIG1hbmFnZW1lbnQuIFdlIGFyZSB0YWxraW5nIGFib3V0IGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgYmFycmllcnMsIFJDVSBkZXJlZmVyZW5jaW5nLCBhbmQgcG9pbnRlciBhc3NpZ25tZW50cyBpbiBmdW5jdGlvbnMgbGlrZSBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLCBgX192bGFuX2dyb3VwX2dldF9kZXZpY2VgLCBhbmQgYHZsYW5fZ3JvdXBfc2V0X2RldmljZWAuIFRoaXMgaW5jbHVkZXMgdGhlIGZ1bmN0aW9ucyBleGVjdXRlZCB3aGVuIHJlZ2lzdGVyaW5nLCB1bnJlZ2lzdGVyaW5nIGFuZCB0cmFuc21pdHRpbmcgVkxBTiBkZXZpY2VzLiBDcml0aWNhbGx5LCB0aGlzIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gc3RhbmRhcmQgUUVNVSAvIHN5emthbGxlciBlbnZpcm9ubWVudHMuIEkgY2FuIHRyaWdnZXIgdGhpcyB0aHJvdWdoIHJlZ3VsYXIgcnRubCBsaW5rIG9wZXJhdGlvbnPigJRjcmVhdGluZywgZGVsZXRpbmcsIHNlbmRpbmcsIGFuZCByZWNlaXZpbmcgcGFja2V0cyB3aXRoIFZMQU5zLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY2FsbCBjaGFpbnMuIGBuZXQvODAyMXEvdmxhbi5jYCBpcyB3aGF0IEkgc2hvdWxkIGZvY3VzIG9uLiBgcmVnaXN0ZXJfdmxhbl9kZXZgIGNhbGxzIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAgYW5kIGB2bGFuX2dyb3VwX3NldF9kZXZpY2VgLCB3aGlsZSBgdW5yZWdpc3Rlcl92bGFuX2RldmAgY2FsbHMgYHZsYW5fZ3JvdXBfc2V0X2RldmljZWAuIGB2bGFuX25ld2xpbmtgIGFuZCBgdmxhbl9kZWxsaW5rYCBmcm9tIGBuZXQvODAyMXEvdmxhbl9uZXRsaW5rLmNgIGNhbGwgYHJlZ2lzdGVyX3ZsYW5fZGV2YCBhbmQgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCByZXNwZWN0aXZlbHkuCgpBbHJpZ2h0LCBzbyB0aGUga2V5IGFyZWFzIGFyZSBgbmV0LzgwMjFxL3ZsYW4uY2AgYW5kIGBuZXQvODAyMXEvdmxhbl9uZXRsaW5rLmNgLiBXaXRoIHRob3NlIHBpZWNlcyBpbiBwbGFjZSBhbmQgY29uZmlybWVkLCBJJiMzOTtkIHNheSB0aGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbl9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKlx0VkxBTiBuZXRsaW5rIGNvbnRyb2wgaW50ZXJmYWNlXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBcdENvcHlyaWdodCAoYykgMjAwNyBQYXRyaWNrIE1jSGFyZHkgXHUwMDNja2FiZXJAdHJhc2gubmV0XHUwMDNlXG4gICA2Olx0ICovXG4gICA3Olx0XG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvcnRuZXRsaW5rLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcJiMzNDt2bGFuLmhcJiMzNDtcbiAgMTY6XHRcbiAgMTc6XHRcbiAgMTg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdmxhbl9wb2xpY3lbSUZMQV9WTEFOX01BWCAmIzQzOyAxXSA9IHtcbiAgMTk6XHRcdFtJRkxBX1ZMQU5fSURdXHRcdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcbiAgMjA6XHRcdFtJRkxBX1ZMQU5fRkxBR1NdXHQ9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgaWZsYV92bGFuX2ZsYWdzKSB9LFxuICAyMTpcdFx0W0lGTEFfVkxBTl9FR1JFU1NfUU9TXVx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuICAyMjpcdFx0W0lGTEFfVkxBTl9JTkdSRVNTX1FPU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuICAyMzpcdFx0W0lGTEFfVkxBTl9QUk9UT0NPTF1cdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcbiAgMjQ6XHR9O1xuICAyNTpcdFxuICAyNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2bGFuX21hcF9wb2xpY3lbSUZMQV9WTEFOX1FPU19NQVggJiM0MzsgMV0gPSB7XG4gIDI3Olx0XHRbSUZMQV9WTEFOX1FPU19NQVBQSU5HXSA9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgaWZsYV92bGFuX3Fvc19tYXBwaW5nKSB9LFxuICAyODpcdH07XG4gIDI5Olx0XG4gIDMwOlx0XG4gIDMxOlx0c3RhdGljIGlubGluZSBpbnQgdmxhbl92YWxpZGF0ZV9xb3NfbWFwKHN0cnVjdCBubGF0dHIgKmF0dHIpXG4gIDMyOlx0e1xuICAzMzpcdFx0aWYgKCFhdHRyKVxuICAzNDpcdFx0XHRyZXR1cm4gMDtcbiAgMzU6XHRcdHJldHVybiBubGFfdmFsaWRhdGVfbmVzdGVkX2RlcHJlY2F0ZWQoYXR0ciwgSUZMQV9WTEFOX1FPU19NQVgsXG4gIDM2Olx0XHRcdFx0XHRcdCAgICAgIHZsYW5fbWFwX3BvbGljeSwgTlVMTCk7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBpbnQgdmxhbl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4gIDQwOlx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAgNDE6XHR7XG4gIDQyOlx0XHRzdHJ1Y3QgaWZsYV92bGFuX2ZsYWdzICpmbGFncztcbiAgNDM6XHRcdHUxNiBpZDtcbiAgNDQ6XHRcdGludCBlcnI7XG4gIDQ1Olx0XG4gIDQ2Olx0XHRpZiAodGJbSUZMQV9BRERSRVNTXSkge1xuICA0NzpcdFx0XHRpZiAobmxhX2xlbih0YltJRkxBX0FERFJFU1NdKSAhPSBFVEhfQUxFTikge1xuICA0ODpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludmFsaWQgbGluayBhZGRyZXNzXCYjMzQ7KTtcbiAgNDk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNTA6XHRcdFx0fVxuICA1MTpcdFx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmxhX2RhdGEodGJbSUZMQV9BRERSRVNTXSkpKSB7XG4gIDUyOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBsaW5rIGFkZHJlc3NcJiMzNDspO1xuICA1MzpcdFx0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiAgNTQ6XHRcdFx0fVxuICA1NTpcdFx0fVxuICA1NjpcdFxuICA1NzpcdFx0aWYgKCFkYXRhKSB7XG4gIDU4Olx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O1ZMQU4gcHJvcGVydGllcyBub3Qgc3BlY2lmaWVkXCYjMzQ7KTtcbiAgNTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDYwOlx0XHR9XG4gIDYxOlx0XG4gIDYyOlx0XHRpZiAoZGF0YVtJRkxBX1ZMQU5fUFJPVE9DT0xdKSB7XG4gIDYzOlx0XHRcdHN3aXRjaCAobmxhX2dldF9iZTE2KGRhdGFbSUZMQV9WTEFOX1BST1RPQ09MXSkpIHtcbiAgNjQ6XHRcdFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxUSk6XG4gIDY1Olx0XHRcdGNhc2UgaHRvbnMoRVRIX1BfODAyMUFEKTpcbiAgNjY6XHRcdFx0XHRicmVhaztcbiAgNjc6XHRcdFx0ZGVmYXVsdDpcbiAgNjg6XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtJbnZhbGlkIFZMQU4gcHJvdG9jb2xcJiMzNDspO1xuICA2OTpcdFx0XHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuICA3MDpcdFx0XHR9XG4gIDcxOlx0XHR9XG4gIDcyOlx0XG4gIDczOlx0XHRpZiAoZGF0YVtJRkxBX1ZMQU5fSURdKSB7XG4gIDc0Olx0XHRcdGlkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX1ZMQU5fSURdKTtcbiAgNzU6XHRcdFx0aWYgKGlkIFx1MDAzZT0gVkxBTl9WSURfTUFTSykge1xuICA3NjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludmFsaWQgVkxBTiBpZFwmIzM0Oyk7XG4gIDc3Olx0XHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gIDc4Olx0XHRcdH1cbiAgNzk6XHRcdH1cbiAgODA6XHRcdGlmIChkYXRhW0lGTEFfVkxBTl9GTEFHU10pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBWTEFOIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIFZMQU4gYXNwZWN0cywgYW5kIGl0JiMzOTtzIHRpbWUgdG8gYnJvYWRlbiBteSB2aWV3LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSBob3cgYG5ldC84MDIxcS92bGFuX25ldGxpbmsuY2AgYW5kIGBuZXQvODAyMXEvdmxhbi5jYCBmbGVzaCBvdXQgdGhlIFZMQU4gaGFuZGxpbmcsIGluIHBhcnRpY3VsYXIgZnJvbSBhIG5ldGxpbmsgcGVyc3BlY3RpdmUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBuZXRsaW5rIGludGVyZmFjZXMgZm9yIG1hbmFnaW5nIHRoZXNlIFZMQU4gZGV2aWNlcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIHRoZSBpb2N0bCBjYWxscywgYW5kIGhvdyB0aGV5IGdldCB3aXJlZCB0b2dldGhlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHdhbGtpbmcgdGhyb3VnaCB0aGUgY29kZSBsaW5lIGJ5IGxpbmUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBlbXBsb3llZCwgYW5kIGhvdyBkbyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZXM/IEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIGZsb3c6IGhvdyBWTEFOcyBhcmUgY3JlYXRlZCwgY29uZmlndXJlZCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyaWRnaW5nIGFuZCBmb3J3YXJkaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aCByZXNwZWN0IHRvIHBhY2tldCB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcuIEFsc28sIEkgbXVzdCBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlcyBvciBsb2NrIGNvbnRlbnRpb24gd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC84MDIxcS92bGFuX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDE0MTpcdHtcbiAxNDI6XHRcdHN0cnVjdCBuZXQgKmxpbmtfbmV0ID0gcnRubF9uZXdsaW5rX2xpbmtfbmV0KHBhcmFtcyk7XG4gMTQzOlx0XHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcbiAxNDQ6XHRcdHN0cnVjdCBubGF0dHIgKipkYXRhID0gcGFyYW1zLVx1MDAzZWRhdGE7XG4gMTQ1Olx0XHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBwYXJhbXMtXHUwMDNldGI7XG4gMTQ2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXY7XG4gMTQ3Olx0XHR1bnNpZ25lZCBpbnQgbWF4X210dTtcbiAxNDg6XHRcdF9fYmUxNiBwcm90bztcbiAxNDk6XHRcdGludCBlcnI7XG4gMTUwOlx0XG4gMTUxOlx0XHRpZiAoIWRhdGFbSUZMQV9WTEFOX0lEXSkge1xuIDE1MjpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtWTEFOIGlkIG5vdCBzcGVjaWZpZWRcJiMzNDspO1xuIDE1MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxNTQ6XHRcdH1cbiAxNTU6XHRcbiAxNTY6XHRcdGlmICghdGJbSUZMQV9MSU5LXSkge1xuIDE1NzpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtsaW5rIG5vdCBzcGVjaWZpZWRcJiMzNDspO1xuIDE1ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxNTk6XHRcdH1cbiAxNjA6XHRcbiAxNjE6XHRcdHJlYWxfZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KGxpbmtfbmV0LCBubGFfZ2V0X3UzMih0YltJRkxBX0xJTktdKSk7XG4gMTYyOlx0XHRpZiAoIXJlYWxfZGV2KSB7XG4gMTYzOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O2xpbmsgZG9lcyBub3QgZXhpc3RcJiMzNDspO1xuIDE2NDpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcbiAxNjc6XHRcdHByb3RvID0gbmxhX2dldF9iZTE2X2RlZmF1bHQoZGF0YVtJRkxBX1ZMQU5fUFJPVE9DT0xdLFxuIDE2ODpcdFx0XHRcdFx0ICAgICBodG9ucyhFVEhfUF84MDIxUSkpO1xuIDE2OTpcdFxuIDE3MDpcdFx0dmxhbi1cdTAwM2V2bGFuX3Byb3RvID0gcHJvdG87XG4gMTcxOlx0XHR2bGFuLVx1MDAzZXZsYW5faWRcdCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9WTEFOX0lEXSk7XG4gMTcyOlx0XHR2bGFuLVx1MDAzZXJlYWxfZGV2XHQgPSByZWFsX2RldjtcbiAxNzM6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IChyZWFsX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBJRkZfWE1JVF9EU1RfUkVMRUFTRSk7XG4gMTc0Olx0XHR2bGFuLVx1MDAzZWZsYWdzXHQgPSBWTEFOX0ZMQUdfUkVPUkRFUl9IRFI7XG4gMTc1Olx0XG4gMTc2Olx0XHRlcnIgPSB2bGFuX2NoZWNrX3JlYWxfZGV2KHJlYWxfZGV2LCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8sIHZsYW4tXHUwMDNldmxhbl9pZCxcbiAxNzc6XHRcdFx0XHRcdCAgZXh0YWNrKTtcbiAxNzg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMTc5Olx0XHRcdHJldHVybiBlcnI7XG4gMTgwOlx0XG4gMTgxOlx0XHRtYXhfbXR1ID0gbmV0aWZfcmVkdWNlc192bGFuX210dShyZWFsX2RldikgPyByZWFsX2Rldi1cdTAwM2VtdHUgLSBWTEFOX0hMRU4gOlxuIDE4MjpcdFx0XHRcdFx0XHRcdCAgICAgcmVhbF9kZXYtXHUwMDNlbXR1O1xuIDE4MzpcdFx0aWYgKCF0YltJRkxBX01UVV0pXG4gMTg0Olx0XHRcdGRldi1cdTAwM2VtdHUgPSBtYXhfbXR1O1xuIDE4NTpcdFx0ZWxzZSBpZiAoZGV2LVx1MDAzZW10dSBcdTAwM2UgbWF4X210dSlcbiAxODY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTg3Olx0XG4gMTg4Olx0XHQvKiBOb3RlOiBJZiB0aGlzIGluaXRpYWwgdmxhbl9jaGFuZ2VsaW5rKCkgZmFpbHMsIHdlIG5lZWRcbiAxODk6XHRcdCAqIHRvIGNhbGwgdmxhbl9kZXZfZnJlZV9lZ3Jlc3NfcHJpb3JpdHkoKSB0byBmcmVlIG1lbW9yeS5cbiAxOTA6XHRcdCAqL1xuIDE5MTpcdFx0ZXJyID0gdmxhbl9jaGFuZ2VsaW5rKGRldiwgdGIsIGRhdGEsIGV4dGFjayk7XG4gMTkyOlx0XG4gMTkzOlx0XHRpZiAoIWVycilcbiAxOTQ6XHRcdFx0ZXJyID0gcmVnaXN0ZXJfdmxhbl9kZXYoZGV2LCBleHRhY2spO1xuIDE5NTpcdFxuIDE5NjpcdFx0aWYgKGVycilcbiAxOTc6XHRcdFx0dmxhbl9kZXZfZnJlZV9lZ3Jlc3NfcHJpb3JpdHkoZGV2KTtcbiAxOTg6XHRcdHJldHVybiBlcnI7XG4gMTk5Olx0fVxuIDIwMDpcdFxuIDIwMTpcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IHZsYW5fcW9zX21hcF9zaXplKHVuc2lnbmVkIGludCBuKVxuIDIwMjpcdHtcbiAyMDM6XHRcdGlmIChuID09IDApXG4gMjA0Olx0XHRcdHJldHVybiAwO1xuIDIwNTpcdFx0LyogSUZMQV9WTEFOX3tFR1JFU1MsSU5HUkVTU31fUU9TICYjNDM7IG4gKiBJRkxBX1ZMQU5fUU9TX01BUFBJTkcgKi9cbiAyMDY6XHRcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IG5sYXR0cikpICYjNDM7XG4gMjA3Olx0XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmxhX3ZsYW5fcW9zX21hcHBpbmcpKSAqIG47XG4gMjA4Olx0fVxuIDIwOTpcdFxuIDIxMDpcdHN0YXRpYyBzaXplX3Qgdmxhbl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDIxMTpcdHtcbiAyMTI6XHRcdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdihkZXYpO1xuIDIxMzpcdFxuIDIxNDpcdFx0cmV0dXJuIG5sYV90b3RhbF9zaXplKDIpICYjNDM7XHQvKiBJRkxBX1ZMQU5fUFJPVE9DT0wgKi9cbiAyMTU6XHRcdCAgICAgICBubGFfdG90YWxfc2l6ZSgyKSAmIzQzO1x0LyogSUZMQV9WTEFOX0lEICovXG4gMjE2Olx0XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmxhX3ZsYW5fZmxhZ3MpKSAmIzQzOyAvKiBJRkxBX1ZMQU5fRkxBR1MgKi9cbiAyMTc6XHRcdCAgICAgICB2bGFuX3Fvc19tYXBfc2l6ZSh2bGFuLVx1MDAzZW5yX2luZ3Jlc3NfbWFwcGluZ3MpICYjNDM7XG4gMjE4Olx0XHQgICAgICAgdmxhbl9xb3NfbWFwX3NpemUodmxhbi1cdTAwM2Vucl9lZ3Jlc3NfbWFwcGluZ3MpO1xuIDIxOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVkxBTiBEZXZpY2UgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IFZMQU4gZGV2aWNlcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIHByb2Nlc3MuIE15IGd1dCB0ZWxscyBtZSB0aGUgY29yZSBvZiB0aGlzIGxpZXMgaW4gYG5ldC84MDIxcS92bGFuLmNgLiBUaW1lIHRvIGRpZyBpbnRvIGByZWdpc3Rlcl92bGFuX2RldmAgYW5kIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSwgd2l0aG91dCBhIGRvdWJ0LCB0aGUgbGluY2hwaW5zIG9mIGFkZGluZyBhbmQgcmVtb3ZpbmcgVkxBTiBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSwgaG93IHRoZXkgaGFuZGxlIHRoZSBWTEFOIElEIGFzc2lnbm1lbnQgYW5kIHRyYWNraW5nLCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgYnJpZGdlIHNldHVwIChpZiBhbnkpLCBhbmQgb2YgY291cnNlLCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zLCBlbnN1cmluZyB0aGUgZnVuY3Rpb25zIGFyZSB0aHJlYWQtc2FmZSBhbmQgcHJvdGVjdCBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgbmV0d29ya2luZyBkZXZpY2UgcmVnaXN0cmF0aW9uIHJvdXRpbmVzIGJlaW5nIGNhbGxlZCwgYnV0IHRoZSBkZXZpbCYjMzk7cyBhbHdheXMgaW4gdGhlIGRldGFpbHMg4oCTIEkmIzM5O20gaG9waW5nIHRvIGRpc2NvdmVyIHNvbWUgaW5ub3ZhdGl2ZSBoYW5kbGluZyBvZiB0aGUgODAyLjFRIHRhZ2dpbmcgcHJvdG9jb2wgaXRzZWxmLiBUaGlzIHdpbGwgYmUgYW4gaW50ZXJlc3RpbmcgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC84MDIxcS92bGFuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbilcbiAgODE6XHR7XG4gIDgyOlx0XHRpZiAoISh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfQlJJREdFX0JJTkRJTkcpKVxuICA4MzpcdFx0XHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xuICA4NDpcdH1cbiAgODU6XHRcbiAgODY6XHR2b2lkIHVucmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiAgODc6XHR7XG4gIDg4Olx0XHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcbiAgODk6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tXHUwMDNlcmVhbF9kZXY7XG4gIDkwOlx0XHRzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm87XG4gIDkxOlx0XHRzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwO1xuICA5MjpcdFx0dTE2IHZsYW5faWQgPSB2bGFuLVx1MDAzZXZsYW5faWQ7XG4gIDkzOlx0XG4gIDk0Olx0XHRBU1NFUlRfUlROTCgpO1xuICA5NTpcdFxuICA5NjpcdFx0dmxhbl9pbmZvID0gcnRubF9kZXJlZmVyZW5jZShyZWFsX2Rldi1cdTAwM2V2bGFuX2luZm8pO1xuICA5NzpcdFx0QlVHX09OKCF2bGFuX2luZm8pO1xuICA5ODpcdFxuICA5OTpcdFx0Z3JwID0gXHUwMDI2dmxhbl9pbmZvLVx1MDAzZWdycDtcbiAxMDA6XHRcbiAxMDE6XHRcdGdycC1cdTAwM2Vucl92bGFuX2RldnMtLTtcbiAxMDI6XHRcbiAxMDM6XHRcdGlmICh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfTVZSUClcbiAxMDQ6XHRcdFx0dmxhbl9tdnJwX3JlcXVlc3RfbGVhdmUoZGV2KTtcbiAxMDU6XHRcdGlmICh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfR1ZSUClcbiAxMDY6XHRcdFx0dmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoZGV2KTtcbiAxMDc6XHRcbiAxMDg6XHRcdHZsYW5fZ3JvdXBfc2V0X2RldmljZShncnAsIHZsYW4tXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCwgTlVMTCk7XG4gMTA5Olx0XG4gMTEwOlx0XHRuZXRkZXZfdXBwZXJfZGV2X3VubGluayhyZWFsX2RldiwgZGV2KTtcbiAxMTE6XHRcdC8qIEJlY2F1c2UgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoKSBtYWtlcyBzdXJlIGF0IGxlYXN0IG9uZSByY3VcbiAxMTI6XHRcdCAqIGdyYWNlIHBlcmlvZCBpcyByZXNwZWN0ZWQgYmVmb3JlIGRldmljZSBmcmVlaW5nLFxuIDExMzpcdFx0ICogd2UgZG9udCBuZWVkIHRvIGNhbGwgc3luY2hyb25pemVfbmV0KCkgaGVyZS5cbiAxMTQ6XHRcdCAqL1xuIDExNTpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcbiAxMTY6XHRcbiAxMTc6XHRcdGlmIChncnAtXHUwMDNlbnJfdmxhbl9kZXZzID09IDApIHtcbiAxMTg6XHRcdFx0dmxhbl9tdnJwX3VuaW5pdF9hcHBsaWNhbnQocmVhbF9kZXYpO1xuIDExOTpcdFx0XHR2bGFuX2d2cnBfdW5pbml0X2FwcGxpY2FudChyZWFsX2Rldik7XG4gMTIwOlx0XHR9XG4gMTIxOlx0XG4gMTIyOlx0XHR2bGFuX3ZpZF9kZWwocmVhbF9kZXYsIHZsYW4tXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCk7XG4gMTIzOlx0fVxuIDEyNDpcdFxuIDEyNTpcdGludCB2bGFuX2NoZWNrX3JlYWxfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldixcbiAxMjY6XHRcdFx0XHRfX2JlMTYgcHJvdG9jb2wsIHUxNiB2bGFuX2lkLFxuIDEyNzpcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxMjg6XHR7XG4gMTI5Olx0XHRjb25zdCBjaGFyICpuYW1lID0gcmVhbF9kZXYtXHUwMDNlbmFtZTtcbiAxMzA6XHRcbiAxMzE6XHRcdGlmIChyZWFsX2Rldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQgfHxcbiAxMzI6XHRcdCAgICByZWFsX2Rldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUikge1xuIDEzMzpcdFx0XHRwcl9pbmZvKFwmIzM0O1ZMQU5zIG5vdCBzdXBwb3J0ZWQgb24gJXNcXG5cJiMzNDssIG5hbWUpO1xuIDEzNDpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtWTEFOcyBub3Qgc3VwcG9ydGVkIG9uIGRldmljZVwmIzM0Oyk7XG4gMTM1Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAxMzY6XHRcdH1cbiAxMzc6XHRcbiAxMzg6XHRcdGlmICh2bGFuX2ZpbmRfZGV2KHJlYWxfZGV2LCBwcm90b2NvbCwgdmxhbl9pZCkgIT0gTlVMTCkge1xuIDEzOTpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtWTEFOIGRldmljZSBhbHJlYWR5IGV4aXN0c1wmIzM0Oyk7XG4gMTQwOlx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDE0MTpcdFx0fVxuIDE0MjpcdFxuIDE0MzpcdFx0cmV0dXJuIDA7XG4gMTQ0Olx0fVxuIDE0NTpcdFxuIDE0NjpcdGludCByZWdpc3Rlcl92bGFuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMTQ3Olx0e1xuIDE0ODpcdFx0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KGRldik7XG4gMTQ5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLVx1MDAzZXJlYWxfZGV2O1xuIDE1MDpcdFx0dTE2IHZsYW5faWQgPSB2bGFuLVx1MDAzZXZsYW5faWQ7XG4gMTUxOlx0XHRzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm87XG4gMTUyOlx0XHRzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwO1xuIDE1MzpcdFx0aW50IGVycjtcbiAxNTQ6XHRcbiAxNTU6XHRcdGVyciA9IHZsYW5fdmlkX2FkZChyZWFsX2Rldiwgdmxhbi1cdTAwM2V2bGFuX3Byb3RvLCB2bGFuX2lkKTtcbiAxNTY6XHRcdGlmIChlcnIpXG4gMTU3Olx0XHRcdHJldHVybiBlcnI7XG4gMTU4Olx0XG4gMTU5Olx0XHR2bGFuX2luZm8gPSBydG5sX2RlcmVmZXJlbmNlKHJlYWxfZGV2LVx1MDAzZXZsYW5faW5mbyk7XG4gMTYwOlx0XHQvKiB2bGFuX2luZm8gc2hvdWxkIGJlIHRoZXJlIG5vdy4gdmxhbl92aWRfYWRkIHRvb2sgY2FyZSBvZiBpdCAqL1xuIDE2MTpcdFx0QlVHX09OKCF2bGFuX2luZm8pO1xuIDE2MjpcdFxuIDE2MzpcdFx0Z3JwID0gXHUwMDI2dmxhbl9pbmZvLVx1MDAzZWdycDtcbiAxNjQ6XHRcdGlmIChncnAtXHUwMDNlbnJfdmxhbl9kZXZzID09IDApIHtcbiAxNjU6XHRcdFx0ZXJyID0gdmxhbl9ndnJwX2luaXRfYXBwbGljYW50KHJlYWxfZGV2KTtcbiAxNjY6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAxNjc6XHRcdFx0XHRnb3RvIG91dF92aWRfZGVsO1xuIDE2ODpcdFx0XHRlcnIgPSB2bGFuX212cnBfaW5pdF9hcHBsaWNhbnQocmVhbF9kZXYpO1xuIDE2OTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDE3MDpcdFx0XHRcdGdvdG8gb3V0X3VuaW5pdF9ndnJwO1xuIDE3MTpcdFx0fVxuIDE3MjpcdFxuIDE3MzpcdFx0ZXJyID0gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoZ3JwLCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8sIHZsYW5faWQpO1xuIDE3NDpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAxNzU6XHRcdFx0Z290byBvdXRfdW5pbml0X212cnA7XG4gMTc2Olx0XG4gMTc3Olx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiAxNzg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMTc5Olx0XHRcdGdvdG8gb3V0X3VuaW5pdF9tdnJwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgwOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVkxBTiBEZXZpY2UgUmVnaXN0cmF0aW9uIGFuZCBVbnJlZ2lzdHJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCBgdmxhbl9uZXdsaW5rYCwgYW5kIGB2bGFuX2RlbGxpbmtgIGFyZSB0aGUga2V5IGV4cG9ydGVkLCBub24tc3RhdGljIGVudHJ5IHBvaW50cyBoZXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHJlZ2lzdGVyX3ZsYW5fZGV2YCBhbmQgYHVucmVnaXN0ZXJfdmxhbl9kZXZgIHRvIHNlZSB3aGVyZSB0aGV5IGFyZSBleHBvcnRlZCBmcm9tLiBBaGEsIGJvdGggb2YgdGhvc2UgYXJlIGRlZmluZWQgd2l0aGluIGBuZXQvODAyMXEvdmxhbi5jYC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgd291bGQgYmUgZ29vZCBjYW5kaWRhdGVzIGZvciBkZWVwZXIgYW5hbHlzaXMgYXMgRm9jdXNTeW1ib2xzIOKAkyBgcmVnaXN0ZXJfdmxhbl9kZXZgLCBgdW5yZWdpc3Rlcl92bGFuX2RldmAsIGB2bGFuX25ld2xpbmtgIG9yIHBvc3NpYmx5IGV2ZW4gYHZsYW5fY2hlY2tfcmVhbF9kZXZgLiBUaW1lIHRvIGNoZWNrIG91dCB0aGUgc3ltYm9sIGRlZmluaXRpb25zIGFjcm9zcyBgbmV0LzgwMjFxL3ZsYW4uY2AgYW5kIGFsc28gYG5ldC84MDIxcS92bGFuX2NvcmUuY2AgdG8gc2VlIHdoaWNoIGFyZSB0aGUgcmlnaHQgb25lcyB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC84MDIxcSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbl9jb3JlLmM9NzY9c3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy05OS19XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MTAwOkVYUE9SVF9TWU1CT0woX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KTtcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMDEtXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTAyPXN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2Rldl9yZWFsX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMTAtfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjExMTpFWFBPUlRfU1lNQk9MKHZsYW5fZGV2X3JlYWxfZGV2KTtcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMTItXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTEzPXUxNiB2bGFuX2Rldl92bGFuX2lkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTExNi19XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MTE3OkVYUE9SVF9TWU1CT0wodmxhbl9kZXZfdmxhbl9pZCk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMTE4LVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTExOT1fX2JlMTYgdmxhbl9kZXZfdmxhbl9wcm90byhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMjItfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjEyMzpFWFBPUlRfU1lNQk9MKHZsYW5fZGV2X3ZsYW5fcHJvdG8pO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTEyNC1cbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MjI3PWludCB2bGFuX2Zvcl9lYWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI1MS19XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MjUyOkVYUE9SVF9TWU1CT0wodmxhbl9mb3JfZWFjaCk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMjUzLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTI1ND1pbnQgdmxhbl9maWx0ZXJfcHVzaF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy0yODAtfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjI4MTpFWFBPUlRfU1lNQk9MKHZsYW5fZmlsdGVyX3B1c2hfdmlkcyk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMjgyLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTI4Mz12b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90bylcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMjkyLX1cbm5ldC84MDIxcS92bGFuX2NvcmUuYzoyOTM6RVhQT1JUX1NZTUJPTCh2bGFuX2ZpbHRlcl9kcm9wX3ZpZHMpO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI5NC1cbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MzE4PWludCB2bGFuX3ZpZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy0zNTEtfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjM1MjpFWFBPUlRfU1lNQk9MKHZsYW5fdmlkX2FkZCk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzUzLVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYz0zNzE9dm9pZCB2bGFuX3ZpZF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy0zOTMtfVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjM5NDpFWFBPUlRfU1lNQk9MKHZsYW5fdmlkX2RlbCk7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzk1LVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTM5Nj1pbnQgdmxhbl92aWRzX2FkZF9ieV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDI4LX1cbm5ldC84MDIxcS92bGFuX2NvcmUuYzo0Mjk6RVhQT1JUX1NZTUJPTCh2bGFuX3ZpZHNfYWRkX2J5X2Rldik7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDMwLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTQzMT12b2lkIHZsYW5fdmlkc19kZWxfYnlfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ0OC19XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NDQ5OkVYUE9SVF9TWU1CT0wodmxhbl92aWRzX2RlbF9ieV9kZXYpO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ1MC1cbm5ldC84MDIxcS92bGFuX2NvcmUuYz00NTE9Ym9vbCB2bGFuX3VzZXNfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTQ2MS19XG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NDYyOkVYUE9SVF9TWU1CT0wodmxhbl91c2VzX2Rldik7XG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY5NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgVkxBTiBIZWFkZXIgRGVjbGFyYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgVkxBTiBoZWFkZXImIzM5O3MgcHVibGljbHkgYWNjZXNzaWJsZSBjb21wb25lbnRzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgYG5ldC84MDIxcS92bGFuLmhgLiBUaGlzIGhlYWRlciBmaWxlIHNob3VsZCBnaXZlIG1lIGEgY29uY2lzZSBvdmVydmlldyBvZiB3aGF0JiMzOTtzICpub3QqIHN0YXRpYyB3aXRoaW4gdGhlIGBuZXQvODAyMXEvYCBkaXJlY3RvcnkuIEJ5IGV4YW1pbmluZyB0aGUgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbnMgaGVyZSwgSSBjYW4gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGludGVyZmFjZXMgYW5kIHN0cnVjdHVyZXMgdGhhdCBhcmUgZGVzaWduZWQgZm9yIGV4dGVybmFsIHVzZSBvciBtb2RpZmljYXRpb24uIFRoaXMgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgVkxBTiB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcgbWVjaGFuaXNtcyBpbnRlcmFjdCB3aXRoIG90aGVyIG5ldHdvcmsgY29tcG9uZW50cyBhbmQgcHJvdG9jb2xzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzIChpZiBhbnkpLCBhbmQgcGVyaGFwcyBzb21lIGVudW1zIHJlbGF0ZWQgdG8gVkxBTi1zcGVjaWZpYyBwYXJhbWV0ZXJzIGxpa2UgdGhlIFZMQU4gSUQgYW5kIHByaW9yaXR5LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaG93IHRoaXMgbW9kdWxlIGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC84MDIxcS92bGFuLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0XHRcdFx0XHQgICAgIHZsYW5fcHJvdG8sIHZsYW5faWQpO1xuIDEwMTpcdFxuIDEwMjpcdFx0cmV0dXJuIE5VTEw7XG4gMTAzOlx0fVxuIDEwNDpcdFxuIDEwNTpcdHN0YXRpYyBpbmxpbmUgbmV0ZGV2X2ZlYXR1cmVzX3Qgdmxhbl90bmxfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2KVxuIDEwNjpcdHtcbiAxMDc6XHRcdG5ldGRldl9mZWF0dXJlc190IHJldDtcbiAxMDg6XHRcbiAxMDk6XHRcdHJldCA9IHJlYWxfZGV2LVx1MDAzZWh3X2VuY19mZWF0dXJlcyBcdTAwMjZcbiAxMTA6XHRcdCAgICAgIChORVRJRl9GX0NTVU1fTUFTSyB8IE5FVElGX0ZfR1NPX1NPRlRXQVJFIHxcbiAxMTE6XHRcdCAgICAgICBORVRJRl9GX0dTT19FTkNBUF9BTEwpO1xuIDExMjpcdFxuIDExMzpcdFx0aWYgKChyZXQgXHUwMDI2IE5FVElGX0ZfR1NPX0VOQ0FQX0FMTCkgXHUwMDI2XHUwMDI2IChyZXQgXHUwMDI2IE5FVElGX0ZfQ1NVTV9NQVNLKSlcbiAxMTQ6XHRcdFx0cmV0dXJuIChyZXQgXHUwMDI2IH5ORVRJRl9GX0NTVU1fTUFTSykgfCBORVRJRl9GX0hXX0NTVU07XG4gMTE1Olx0XHRyZXR1cm4gMDtcbiAxMTY6XHR9XG4gMTE3Olx0XG4gMTE4Olx0I2RlZmluZSB2bGFuX2dyb3VwX2Zvcl9lYWNoX2RldihncnAsIGksIGRldikgXFxcbiAxMTk6XHRcdGZvciAoKGkpID0gMDsgaSBcdTAwM2MgVkxBTl9QUk9UT19OVU0gKiBWTEFOX05fVklEOyBpJiM0MzsmIzQzOykgXFxcbiAxMjA6XHRcdFx0aWYgKCgoZGV2KSA9IF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKChncnApLCAoaSkgLyBWTEFOX05fVklELCBcXFxuIDEyMTpcdFx0XHRcdFx0XHRcdFx0ICAgIChpKSAlIFZMQU5fTl9WSUQpKSlcbiAxMjI6XHRcbiAxMjM6XHRpbnQgdmxhbl9maWx0ZXJfcHVzaF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKTtcbiAxMjQ6XHR2b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XG4gMTI1Olx0XG4gMTI2Olx0LyogbmV0ZGV2X3dvcmsgZXZlbnRzIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVhbCBkZXZpY2UsIHNlZSB2bGFuX2Rldl93b3JrKCkuICovXG4gMTI3Olx0ZW51bSB7XG4gMTI4Olx0XHRWTEFOX1dPUktfTElOS19TVEFURVx0PSBCSVQoMCksIC8qIHN5bmMgdXAvZG93biB3aXRoIHJlYWxfZGV2ICovXG4gMTI5Olx0XHRWTEFOX1dPUktfTVRVXHRcdD0gQklUKDEpLCAvKiBjbGFtcCBtdHUgdG8gcmVhbF9kZXYmIzM5O3MgKi9cbiAxMzA6XHRcdFZMQU5fV09SS19GRUFUVVJFU1x0PSBCSVQoMiksIC8qIHJlLWluaGVyaXQgcmVhbF9kZXYgZmVhdHVyZXMgKi9cbiAxMzE6XHR9O1xuIDEzMjpcdFxuIDEzMzpcdHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcbiAxMzQ6XHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAxMzU6XHRcdFx0XHRcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pO1xuIDEzNjpcdFxuIDEzNzpcdC8qIGZvdW5kIGluIHZsYW5fZGV2LmMgKi9cbiAxMzg6XHR2b2lkIHZsYW5fZGV2X3NldF9pbmdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTM5Olx0XHRcdFx0XHQgICB1MzIgc2tiX3ByaW8sIHUxNiB2bGFuX3ByaW8pO1xuIDE0MDpcdGludCB2bGFuX2Rldl9zZXRfZWdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTQxOlx0XHRcdFx0XHQgdTMyIHNrYl9wcmlvLCB1MTYgdmxhbl9wcmlvKTtcbiAxNDI6XHR2b2lkIHZsYW5fZGV2X2ZyZWVfZWdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIDE0MzpcdGludCB2bGFuX2Rldl9jaGFuZ2VfZmxhZ3MoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZsYWcsIHUzMiBtYXNrKTtcbiAxNDQ6XHR2b2lkIHZsYW5fZGV2X2dldF9yZWFsZGV2X25hbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqcmVzdWx0LFxuIDE0NTpcdFx0XHRcdCAgICAgICBzaXplX3Qgc2l6ZSk7XG4gMTQ2Olx0XG4gMTQ3Olx0aW50IHZsYW5fY2hlY2tfcmVhbF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxuIDE0ODpcdFx0XHRcdF9fYmUxNiBwcm90b2NvbCwgdTE2IHZsYW5faWQsXG4gMTQ5Olx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiAxNTA6XHR2b2lkIHZsYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gMTUxOlx0aW50IHJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gMTUyOlx0dm9pZCB1bnJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuIDE1MzpcdGJvb2wgdmxhbl9kZXZfaW5oZXJpdF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTU0Olx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2KTtcbiAxNTU6XHRcbiAxNTY6XHRzdGF0aWMgaW5saW5lIHUzMiB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTU3Olx0XHRcdFx0XHRcdCAgICB1MTYgdmxhbl90Y2kpXG4gMTU4Olx0e1xuIDE1OTpcdFx0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZpcCA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcbiAxNjA6XHRcbiAxNjE6XHRcdHJldHVybiB2aXAtXHUwMDNlaW5ncmVzc19wcmlvcml0eV9tYXBbKHZsYW5fdGNpIFx1MDAzZVx1MDAzZSBWTEFOX1BSSU9fU0hJRlQpIFx1MDAyNiAweDddO1xuIDE2MjpcdH1cbiAxNjM6XHRcbiAxNjQ6XHQjaWZkZWYgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUFxuIDE2NTpcdGludCB2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIDE2NjpcdHZvaWQgdmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gMTY3Olx0aW50IHZsYW5fZ3ZycF9pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiAxNjg6XHR2b2lkIHZsYW5fZ3ZycF91bmluaXRfYXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIDE2OTpcdGludCB2bGFuX2d2cnBfaW5pdCh2b2lkKTtcbiAxNzA6XHR2b2lkIHZsYW5fZ3ZycF91bmluaXQodm9pZCk7XG4gMTcxOlx0I2Vsc2VcbiAxNzI6XHRzdGF0aWMgaW5saW5lIGludCB2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH1cbiAxNzM6XHRzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikge31cbiAxNzQ6XHRzdGF0aWMgaW5saW5lIGludCB2bGFuX2d2cnBfaW5pdF9hcHBsaWNhbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfVxuIDE3NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2d2cnBfdW5pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7fVxuIDE3NjpcdHN0YXRpYyBpbmxpbmUgaW50IHZsYW5fZ3ZycF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAxNzc6XHRzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ndnJwX3VuaW5pdCh2b2lkKSB7fVxuIDE3ODpcdCNlbmRpZlxuIDE3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYxMAoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA2NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgODAyLjFRIFZMQU4gU3VwcG9ydCBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gVG8gY29tcGlsZSB0aGlzIGNvZGUsIEkgbmVlZCBgQ09ORklHX1ZMQU5fODAyMVFgLiBJJiMzOTttIGRvdWJsZS1jaGVja2luZyBpdHMgZGVwZW5kZW5jaWVzIOKAkyBub3RoaW5nIHNpZ25pZmljYW50LCBqdXN0IHRoZSB1c3VhbCBORVQvSU5FVCByZXF1aXJlbWVudHMgd2hpY2ggYXJlIGdlbmVyYWxseSBlbmFibGVkLiBUaGUgb3B0aW9uYWwgZmVhdHVyZXMsIGBWTEFOXzgwMjFRX0dWUlBgIGFuZCBgVkxBTl84MDIxUV9NVlJQYCwgZGVwZW5kIG9uIGBWTEFOXzgwMjFRYCB3aGljaCBpcyBleHBlY3RlZC4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgZnVuY3Rpb25zLiBGb2N1c1N5bWJvbHMgaW5kaWNhdGUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBkaXJlY3RseSBtb2RpZmllZCBvciBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZTogYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCBgdmxhbl92aWRfYWRkYCwgYHZsYW5fdmlkX2RlbGAsIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLCBhbmQgYHZsYW5fZm9yX2VhY2hgLiBJJiMzOTttIGFsc28gbG9va2luZyBhdCBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLCB3aGljaCBpcyBzdGF0aWMsIGFuZCBpdHMgY2FsbGVycy4gVGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCB3aGljaCBpbmNsdWRlIGByZWdpc3Rlcl92bGFuX2RldmAsIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHZsYW5fZm9yX2VhY2hgLCBhbmQgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAsIGFyZSB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8uCgpOb3csIHRoZSBjcml0aWNhbCBwYXJ0OiBkZXRlcm1pbmluZyBpZiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0ZSB5ZXMuIFRoZXJlIGhhdmUgYmVlbiBtZW1vcnkgb3JkZXJpbmcgYW5kIFJDVSBwb2ludGVyIGFjY2VzcyBmaXhlcyBpbiA4MDIuMVEgVkxBTiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgdmxhbl9kZXZpY2VzX2FycmF5c2AuIEluY29ycmVjdCBSQ1UgYmFycmllcnMgb3IgZGVyZWZlcmVuY2VzIGNhbiBsZWFkIHRvIGNvbmN1cnJlbmN5IGJ1Z3Mg4oCTIGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBldmVuIG51bGwgZGVyZWZlcmVuY2VzIOKAkyB3aGVuIFZMQU4gZGV2aWNlcyBhcmUgY3JlYXRlZCwgZGVsZXRlZCwgb3IgbG9va2VkIHVwIGNvbmN1cnJlbnRseSB3aXRoaW4gdGhlIFJDVSBjcml0aWNhbCBzZWN0aW9uLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0LgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIEkmIzM5O2xsIHNldCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHRvIGluY2x1ZGUgYCYjMzQ7VkxBTl84MDIxUSYjMzQ7YCwgYW5kIEkmIzM5O2xsIGxpa2VseSBpbmNsdWRlIGAmIzM0O1ZMQU5fODAyMVFfR1ZSUCYjMzQ7YCBhbmQgYCYjMzQ7VkxBTl84MDIxUV9NVlJQJiMzNDtgIGFzIHdlbGwuIEZpbmFsbHksIG15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGByZWdpc3Rlcl92bGFuX2RldmAsIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YCwgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAsIGFuZCBgdmxhbl9mb3JfZWFjaGAuIEkmIzM5O3ZlIGNvbmZpcm1lZCBhbGwgdGhlc2UgZWxlbWVudHMgYW5kIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUV9HVlJQJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVFfTVZSUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2lzdGVyX3ZsYW5fZGV2JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfdmxhbl9kZXYmIzM0OywKICAgICYjMzQ7X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1JiMzNDssCiAgICAmIzM0O3ZsYW5fZm9yX2VhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBjb25jdXJyZW5jeSBwcmltaXRpdmVzIGFuZCBSQ1UgYW5ub3RhdGlvbnMgZm9yIHRoZSA4MDIuMVEgVkxBTiBkZXZpY2UgbG9va3VwIHRhYmxlcyAoc3dpdGNoaW5nIHRvIHNtcF9zdG9yZV9yZWxlYXNlLCBzbXBfbG9hZF9hY3F1aXJlLCByY3VfYXNzaWduX3BvaW50ZXIsIGFuZCByY3VfZGVyZWZlcmVuY2VfcmF3KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBWTEFOIG1hbmFnZW1lbnQgYW5kIGxvb2t1cCBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVFfR1ZSUCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRX01WUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdpc3Rlcl92bGFuX2RldiYjMzQ7LAogICAgJiMzNDt1bnJlZ2lzdGVyX3ZsYW5fZGV2JiMzNDssCiAgICAmIzM0O19fdmxhbl9maW5kX2Rldl9kZWVwX3JjdSYjMzQ7LAogICAgJiMzNDt2bGFuX2Zvcl9lYWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgY29uY3VycmVuY3kgcHJpbWl0aXZlcyBhbmQgUkNVIGFubm90YXRpb25zIGZvciB0aGUgODAyLjFRIFZMQU4gZGV2aWNlIGxvb2t1cCB0YWJsZXMgKHN3aXRjaGluZyB0byBzbXBfc3RvcmVfcmVsZWFzZSwgc21wX2xvYWRfYWNxdWlyZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBhbmQgcmN1X2RlcmVmZXJlbmNlX3JhdykuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgVkxBTiBtYW5hZ2VtZW50IGFuZCBsb29rdXAgcGF0aHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgUkNVIGFubm90YXRpb25zIGFuZCBtZW1vcnkgb3JkZXJpbmcgcHJpbWl0aXZlcyBpbiB0aGUgODAyLjFRIFZMQU4gc3Vic3lzdGVtLCByZXBsYWNpbmcgc21wX3dtYigpL3NtcF9ybWIoKSB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkvc21wX2xvYWRfYWNxdWlyZSgpIGFuZCBhZGRpbmcgcmN1X2Fzc2lnbl9wb2ludGVyKCkvcmN1X2RlcmVmZXJlbmNlX3JhdygpIGFjY2Vzc29ycy4gVGhlIGR5bmFtaWMgYXJyYXlzIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jKCkgd2hpY2ggemVyb2VzIGFsbCBtZW1vcnkgdXBvbiBhbGxvY2F0aW9uLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBhY2Nlc3NlZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5IG9yIG1lbW9yeSBsaWZlY3ljbGUgaXNzdWVzIGluIHRoaXMgY29kZSB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMTk3ZmY5ZDI3ZWI4N2I3ODRlMjA1NDdjY2U4NTdjMDg5YjJkNTlmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMDo0ODoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IDJkMmVmYjg3Nzk3NWQuLmVjOWE3Y2M4YWZjNzQgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtNDksNyAmIzQzOzQ5LDcgQEAgY29uc3QgY2hhciB2bGFuX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiAJCQkJICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7CiAJdW5zaWduZWQgaW50IHZpZHg7CiAJdW5zaWduZWQgaW50IHNpemU7CiAJaW50IHBpZHg7CkBAIC03MCwxMCAmIzQzOzcwLDggQEAgc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiAJaWYgKGFycmF5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PQlVGUzsKIAotCS8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovCi0Jc21wX3dtYigpOwotCi0JdmctJmd0O3ZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1bdmlkeF0gPSBhcnJheTsKJiM0MzsJLyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2Zy0mZ3Q7dmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaAppbmRleCBjNDFjYWFmOTQwOTVmLi5kODc0YWIzMjNkMzIwIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmgKQEAgLTIyLDggJiM0MzsyMiw4IEBAIGVudW0gdmxhbl9wcm90b3Mgewogc3RydWN0IHZsYW5fZ3JvdXAgewogCXVuc2lnbmVkIGludAkJbnJfdmxhbl9kZXZzOwogCXN0cnVjdCBobGlzdF9ub2RlCWhsaXN0OwkvKiBsaW5rZWQgbGlzdCAqLwotCXN0cnVjdCBuZXRfZGV2aWNlICoqdmxhbl9kZXZpY2VzX2FycmF5c1tWTEFOX1BST1RPX05VTV0KLQkJCQkJICAgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKip2bGFuX2RldmljZXNfYXJyYXlzW1ZMQU5fUFJPVE9fTlVNXQomIzQzOwkJCQkJCSAgICAgW1ZMQU5fR1JPVVBfQVJSQVlfU1BMSVRfUEFSVFNdOwogfTsKIAogc3RydWN0IHZsYW5faW5mbyB7CkBAIC01NCwxNSAmIzQzOzU0LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywKIAkJCQkJCQkgdW5zaWduZWQgaW50IHBpZHgsCiAJCQkJCQkJIHUxNiB2bGFuX2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7CiAKLQlhcnJheSA9IHZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdCi0JCQkJICAgICAgIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl07Ci0KLQkvKiBwYWlyZWQgd2l0aCBzbXBfd21iKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqLwotCXNtcF9ybWIoKTsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi8KJiM0MzsJYXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7dmctJmd0O3ZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF0KJiM0MzsJCQkJIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0pOwogCi0JcmV0dXJuIGFycmF5ID8gYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dIDogTlVMTDsKJiM0MzsJcmV0dXJuIGFycmF5ID8gcmN1X2RlcmVmZXJlbmNlX3JhdyhhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0pIDogTlVMTDsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9ncm91cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywKQEAgLTgyLDEzICYjNDM7ODAsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHZsYW5fZ3JvdXBfc2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCiAJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBwaWR4ID0gdmxhbl9wcm90b19pZHgodmxhbl9wcm90byk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKiphcnJheTsKIAogCWlmICghdmcgfHwgcGlkeCAmbHQ7IDApCiAJCXJldHVybjsKIAlhcnJheSA9IHZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdCiAJCQkJICAgICAgIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl07Ci0JYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gZGV2OwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dLCBkZXYpOwogfQogCiAvKiBNdXN0IGJlIGludm9rZWQgd2l0aCByY3VfcmVhZF9sb2NrIG9yIHdpdGggUlROTC4gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTEFOIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFZMQU4gY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0LzgwMjFxL3ZsYW4uY2AgYW5kIGBuZXQvODAyMXEvdmxhbi5oYC4gVGhpcyBzZWVtcyBsaWtlIGEgY29uY3VycmVuY3ktcmVsYXRlZCB1cGRhdGUsIGp1ZGdpbmcgYnkgdGhlIGNoYW5nZXMgaW52b2x2aW5nIGF0b21pYyBvcGVyYXRpb25zIGFuZCBtZW1vcnkgYmFycmllcnMuCgpMb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgX19yY3VgIGFuZCBjb3JyZXNwb25kaW5nIGF0b21pYyBvcGVyYXRpb25zIHN1cnJvdW5kaW5nIHRoZSBgdmxhbl9kZXZpY2VzX2FycmF5c2AgZGF0YSBzdHJ1Y3R1cmUuIEluIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIHRoZXkmIzM5O3ZlIHN3YXBwZWQgYHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7YCBmb3IgYHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7YC4gVGhlbiwgdGhlIHdyaXRlIHRvIHRoaXMgYXJyYXkgaGFzIGNoYW5nZWQsIHVzaW5nIGBzbXBfc3RvcmVfcmVsZWFzZWAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYHNtcF93bWJgIGZvbGxvd2VkIGJ5IGEgZGlyZWN0IGFzc2lnbm1lbnQuIFRoaXMgc2lnbmFscyBhbiBhdHRlbXB0IHRvIGltcHJvdmUgc3luY2hyb25pemF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBkZXZpY2UgbWFuYWdlbWVudC4KCldpdGhpbiBgdmxhbi5oYCwgdGhlIGFycmF5JiMzOTtzIGRlY2xhcmF0aW9uIHJlZmxlY3RzIHRoaXMgY2hhbmdlIHRvIHRoZSB1c2Ugb2YgYF9fcmN1YC4gSW4gYF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlYCwgdGhleSYjMzk7cmUgdXNpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGluc3RlYWQgb2YgcmVhZCBhbmQgYHNtcF9ybWJgLCBwbHVzIGFuIGByY3VfZGVyZWZlcmVuY2VfcmF3YCB0byBkZXJlZmVyZW5jZSB0aGUgYXJyYXkgZWxlbWVudCByYXRoZXIgdGhhbiBkaXJlY3QgYWNjZXNzLiBUaGlzIGRlZmluaXRlbHkgaXMgcmVsYXRlZCB0byByZWFkLWNvcHktdXBkYXRlIHNlbWFudGljcy4gU2ltaWxhcmx5LCB3aXRoaW4gYHZsYW5fZ3JvdXBfc2V0X2RldmljZWAsIHRoZSBhc3NpZ25tZW50IHRvIHRoZSBhcnJheSBub3cgdXNlcyBgcmN1X2Fzc2lnbl9wb2ludGVyYC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGhvdyB0aGUgYGFycmF5YCBpcyBhbGxvY2F0ZWQgd2l0aGluIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIHNvIEkmIzM5O2xsIGdyYWIgdGhlIGNvZGUgZnJvbSBgbmV0LzgwMjFxL3ZsYW4uY2AgYXJvdW5kIGxpbmVzIDQ1LTg1IHRvIHNlZSBob3cgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEZyb20gdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UsIEkgZXhwZWN0IHRvIHNlZSBhbiBleHBsaWNpdCBhbGxvY2F0aW9uLCBhbmQgcG9zc2libHkgYW5vdGhlciBmZW5jZSByZWxhdGVkIHRvIHRoZSBjcmVhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYGFycmF5YCBiZWZvcmUgaXQmIzM5O3MgYXNzaWduZWQgdG8gYHZnLSZndDt2bGFuX2RldmljZXNfYXJyYXlzYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGUgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NTpcdGNvbnN0IGNoYXIgdmxhbl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjtcbiAgNDY6XHRcbiAgNDc6XHQvKiBFbmQgb2YgZ2xvYmFsIHZhcmlhYmxlcyBkZWZpbml0aW9ucy4gKi9cbiAgNDg6XHRcbiAgNDk6XHRzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiAgNTA6XHRcdFx0XHRcdCAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZClcbiAgNTE6XHR7XG4gIDUyOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuICA1MzpcdFx0dW5zaWduZWQgaW50IHZpZHg7XG4gIDU0Olx0XHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiAgNTU6XHRcdGludCBwaWR4O1xuICA1NjpcdFxuICA1NzpcdFx0QVNTRVJUX1JUTkwoKTtcbiAgNTg6XHRcbiAgNTk6XHRcdHBpZHggID0gdmxhbl9wcm90b19pZHgodmxhbl9wcm90byk7XG4gIDYwOlx0XHRpZiAocGlkeCBcdTAwM2MgMClcbiAgNjE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDYyOlx0XG4gIDYzOlx0XHR2aWR4ICA9IHZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOO1xuICA2NDpcdFx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdO1xuICA2NTpcdFx0aWYgKGFycmF5ICE9IE5VTEwpXG4gIDY2Olx0XHRcdHJldHVybiAwO1xuICA2NzpcdFxuICA2ODpcdFx0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZSAqKSAqIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU47XG4gIDY5Olx0XHRhcnJheSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiAgNzA6XHRcdGlmIChhcnJheSA9PSBOVUxMKVxuICA3MTpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gIDcyOlx0XG4gIDczOlx0XHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuICA3NDpcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xuICA3NTpcdFx0cmV0dXJuIDA7XG4gIDc2Olx0fVxuICA3NzpcdFxuICA3ODpcdHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcbiAgNzk6XHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAgODA6XHRcdFx0XHRcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXG4gIDgxOlx0e1xuICA4MjpcdFx0aWYgKCEodmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgVkxBTl9GTEFHX0JSSURHRV9CSU5ESU5HKSlcbiAgODM6XHRcdFx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocm9vdGRldiwgZGV2KTtcbiAgODQ6XHR9XG4gIDg1Olx0XG4gIDg2Olx0dm9pZCB1bnJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gIDg3Olx0e1xuICA4ODpcdFx0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KGRldik7XG4gIDg5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLVx1MDAzZXJlYWxfZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTYyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gVkxBTiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBjaXJjbGluZyBiYWNrLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0LzgwMjFxL3ZsYW4uaGAuIFRoaXMgbGlrZWx5IGhvbGRzIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIGZvciBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB3ZSYjMzk7bGwgZmluZCB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyBWTEFOIGludGVyZmFjZXMsIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBWTEFOIElEcywgYW5kIHBvdGVudGlhbGx5IHNvbWUga2V5IG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgVkxBTiBoZWFkZXJzLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IHRhZ2dpbmcgc2NlbmFyaW9zOiBzaW5nbGUgdGFnZ2VkLCBkb3VibGUgdGFnZ2VkIChRaW5RKSwgYW5kIGFueSBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb3Igb3B0aW1pemF0aW9ucyBpbXBsZW1lbnRlZCBmb3IgcGVyZm9ybWFuY2UuIEkgZXhwZWN0IHdlJiMzOTtsbCBhbHNvIGZpbmQgc29tZSB1c2VmdWwgY29tbWVudHMgcmVnYXJkaW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMgYW5kIGFueSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBmb3IgaGFyZHdhcmUgb2ZmbG9hZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZpbGUgaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIFZMQU4gb3BlcmF0aW9uIGluIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC84MDIxcS92bGFuLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAgIDI6XHQjaWZuZGVmIF9fQkVOX1ZMQU5fODAyXzFRX0lOQ19fXG4gICAzOlx0I2RlZmluZSBfX0JFTl9WTEFOXzgwMl8xUV9JTkNfX1xuICAgNDpcdFxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAgIDg6XHRcbiAgIDk6XHQvKiBpZiB0aGlzIGNoYW5nZXMsIGFsZ29yaXRobSB3aWxsIGhhdmUgdG8gYmUgcmV3b3JrZWQgYmVjYXVzZSB0aGlzXG4gIDEwOlx0ICogZGVwZW5kcyBvbiBjb21wbGV0ZWx5IGV4aGF1c3RpbmcgdGhlIFZMQU4gaWRlbnRpZmllciBzcGFjZS4gIFRodXNcbiAgMTE6XHQgKiBpdCBnaXZlcyBjb25zdGFudCB0aW1lIGxvb2stdXAsIGJ1dCBpbiBtYW55IGNhc2VzIGl0IHdhc3RlcyBtZW1vcnkuXG4gIDEyOlx0ICovXG4gIDEzOlx0I2RlZmluZSBWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTICA4XG4gIDE0Olx0I2RlZmluZSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOICAgICAoVkxBTl9OX1ZJRC9WTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTKVxuICAxNTpcdFxuICAxNjpcdGVudW0gdmxhbl9wcm90b3Mge1xuICAxNzpcdFx0VkxBTl9QUk9UT184MDIxUVx0PSAwLFxuICAxODpcdFx0VkxBTl9QUk9UT184MDIxQUQsXG4gIDE5Olx0XHRWTEFOX1BST1RPX05VTSxcbiAgMjA6XHR9O1xuICAyMTpcdFxuICAyMjpcdHN0cnVjdCB2bGFuX2dyb3VwIHtcbiAgMjM6XHRcdHVuc2lnbmVkIGludFx0XHRucl92bGFuX2RldnM7XG4gIDI0Olx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0aGxpc3Q7XHQvKiBsaW5rZWQgbGlzdCAqL1xuICAyNTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKip2bGFuX2RldmljZXNfYXJyYXlzW1ZMQU5fUFJPVE9fTlVNXVxuICAyNjpcdFx0XHRcdFx0XHRcdCAgICAgW1ZMQU5fR1JPVVBfQVJSQVlfU1BMSVRfUEFSVFNdO1xuICAyNzpcdH07XG4gIDI4Olx0XG4gIDI5Olx0c3RydWN0IHZsYW5faW5mbyB7XG4gIDMwOlx0XHRzdHJ1Y3QgbmV0X2RldmljZVx0KnJlYWxfZGV2OyAvKiBUaGUgZXRoZXJuZXQobGlrZSkgZGV2aWNlXG4gIDMxOlx0XHRcdFx0XHRcdCAgICAqIHRoZSB2bGFuIGlzIGF0dGFjaGVkIHRvLlxuICAzMjpcdFx0XHRcdFx0XHQgICAgKi9cbiAgMzM6XHRcdHN0cnVjdCB2bGFuX2dyb3VwXHRncnA7XG4gIDM0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHR2aWRfbGlzdDtcbiAgMzU6XHRcdHVuc2lnbmVkIGludFx0XHRucl92aWRzO1xuICAzNjpcdFx0Ym9vbFx0XHRcdGF1dG9fdmlkMDtcbiAgMzc6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4gIDM4Olx0fTtcbiAgMzk6XHRcbiAgNDA6XHRzdGF0aWMgaW5saW5lIGludCB2bGFuX3Byb3RvX2lkeChfX2JlMTYgcHJvdG8pXG4gIDQxOlx0e1xuICA0MjpcdFx0c3dpdGNoIChwcm90bykge1xuICA0MzpcdFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxUSk6XG4gIDQ0Olx0XHRcdHJldHVybiBWTEFOX1BST1RPXzgwMjFRO1xuICA0NTpcdFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxQUQpOlxuICA0NjpcdFx0XHRyZXR1cm4gVkxBTl9QUk9UT184MDIxQUQ7XG4gIDQ3Olx0XHRkZWZhdWx0OlxuICA0ODpcdFx0XHRXQVJOKDEsIFwmIzM0O2ludmFsaWQgVkxBTiBwcm90b2NvbDogMHglMDR4XFxuXCYjMzQ7LCBudG9ocyhwcm90bykpO1xuICA0OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNTA6XHRcdH1cbiAgNTE6XHR9XG4gIDUyOlx0XG4gIDUzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuICA1NDpcdFx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwaWR4LFxuICA1NTpcdFx0XHRcdFx0XHRcdFx0IHUxNiB2bGFuX2lkKVxuICA1NjpcdHtcbiAgNTc6XHRcdHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7XG4gIDU4Olx0XG4gIDU5Olx0XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xuICA2MDpcdFx0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbiAgNjE6XHRcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiAgNjI6XHRcbiAgNjM6XHRcdHJldHVybiBhcnJheSA/IHJjdV9kZXJlZmVyZW5jZV9yYXcoYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKSA6IE5VTEw7XG4gIDY0Olx0fVxuICA2NTpcdFxuICA2NjpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXG4gIDY3Olx0XHRcdFx0XHRcdFx0ICAgICAgIF9fYmUxNiB2bGFuX3Byb3RvLFxuICA2ODpcdFx0XHRcdFx0XHRcdCAgICAgICB1MTYgdmxhbl9pZClcbiAgNjk6XHR7XG4gIDcwOlx0XHRpbnQgcGlkeCA9IHZsYW5fcHJvdG9faWR4KHZsYW5fcHJvdG8pO1xuICA3MTpcdFxuICA3MjpcdFx0aWYgKHBpZHggXHUwMDNjIDApXG4gIDczOlx0XHRcdHJldHVybiBOVUxMO1xuICA3NDpcdFxuICA3NTpcdFx0cmV0dXJuIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKHZnLCBwaWR4LCB2bGFuX2lkKTtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0c3RhdGljIGlubGluZSB2b2lkIHZsYW5fZ3JvdXBfc2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXG4gIDc5Olx0XHRcdFx0XHRcdCBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQsXG4gIDgwOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICA4MTpcdHtcbiAgODI6XHRcdGludCBwaWR4ID0gdmxhbl9wcm90b19pZHgodmxhbl9wcm90byk7XG4gIDgzOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuICA4NDpcdFxuICA4NTpcdFx0aWYgKCF2ZyB8fCBwaWR4IFx1MDAzYyAwKVxuICA4NjpcdFx0XHRyZXR1cm47XG4gIDg3Olx0XHRhcnJheSA9IHZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbiAgODg6XHRcdFx0XHRcdCAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dO1xuICA4OTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSwgZGV2KTtcbiAgOTA6XHR9XG4gIDkxOlx0XG4gIDkyOlx0LyogTXVzdCBiZSBpbnZva2VkIHdpdGggcmN1X3JlYWRfbG9jayBvciB3aXRoIFJUTkwuICovXG4gIDkzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9maW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXG4gIDk0Olx0XHRcdFx0XHRcdCAgICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXG4gIDk1Olx0e1xuICA5NjpcdFx0c3RydWN0IHZsYW5faW5mbyAqdmxhbl9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwocmVhbF9kZXYtXHUwMDNldmxhbl9pbmZvKTtcbiAgOTc6XHRcbiAgOTg6XHRcdGlmICh2bGFuX2luZm8pXG4gIDk5Olx0XHRcdHJldHVybiB2bGFuX2dyb3VwX2dldF9kZXZpY2UoXHUwMDI2dmxhbl9pbmZvLVx1MDAzZWdycCxcbiAxMDA6XHRcdFx0XHRcdFx0ICAgICB2bGFuX3Byb3RvLCB2bGFuX2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM4OQoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiA0NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBSQ1UgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHJlZmluaW5nIHRoZSBjb25jdXJyZW5jeSBhc3BlY3RzIG9mIDgwMi4xUSBWTEFOIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIGNvbnRleHQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHRpZ2h0ZW5pbmcgdXAgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgbWVtb3J5IGFjY2VzcyBzZW1hbnRpY3MuCgpGaXJzdCwgSSBzZWUgdGhlIHN3aXRjaCBmcm9tIHJhdyBgc21wX3dtYigpYCBhbmQgYHNtcF9ybWIoKWAgdG8gYHNtcF9zdG9yZV9yZWxlYXNlYCBhbmQgYHNtcF9sb2FkX2FjcXVpcmVgLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGEgbW9yZSBtb2Rlcm4gYW5kIHJvYnVzdCBhcHByb2FjaCB0byBtZW1vcnkgYmFycmllcnMuIFRoZSB1c2Ugb2YgYHJjdV9kZXJlZmVyZW5jZV9yYXdgIGFuZCBgcmN1X2Fzc2lnbl9wb2ludGVyYCBmb3IgdGhlIG5ldF9kZXZpY2UgcG9pbnRlciB3aXRoaW4gdGhlIFJDVSBhcnJheSBpcyBhbHNvIHRoZSBjb3JyZWN0IHdheSB0byBoYW5kbGUgdGhlc2UgdHlwZXMgb2Ygc3RydWN0dXJlcyBpbiBhbiBSQ1UgY29udGV4dCwgYW5kIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYF9fcmN1YCBhbm5vdGF0aW9ucyB0byB0aGUgYHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXlgIGlzIHByZWNpc2VseSB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSwgdG8gY2xlYXJseSBpZGVudGlmeSB0aGF0IHRoaXMgZGF0YSBpcyBtYW5hZ2VkIGJ5IFJDVS4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgbWVtb3J5IHNhZmV0eS4gVGhhbmtmdWxseSwgdGhlIGFycmF5IGFsbG9jYXRpb24gdXNlcyBga3phbGxvY2AsIHdoaWNoIGluaXRpYWxpemVzIHRoZSBtZW1vcnkgdG8gemVyby4gVGhpcyBpcyBhIGNydWNpYWwgY2hlY2sgdG8gcHJldmVudCBhbnkgYWNjaWRlbnRhbCByZWFkaW5nIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBTaW5jZSB0aGVyZSBhcmUgbm8gY2FsbHMgdG8gY29weV90b191c2VyLCBhbnkgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgcmVhZHMgZnJvbSBzdGFjayB2YXJpYWJsZXMsIHRoaXMgbmFycm93cyB0aGUgc2NvcGUgY29uc2lkZXJhYmx5LiBUaGlzIHBhdGNoIGlzIHB1cmVseSBmb2N1c2VkIG9uIGltcHJvdmluZyBSQ1UgYW5kIGNvbmN1cnJlbmN5LCBwbHVzIHJlc29sdmluZyB0aGUgc3BhcnNlIGBfX3JjdWAgYW5ub3RhdGlvbiBpc3N1ZXMuIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55IGV4cG9zdXJlIHRvIGl0LCB3aGljaCBpcyB0aGUgbWFpbiBjb25jZXJuIGhlcmUuIEdpdmVuIHRoYXQgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUCBhcmUgYWxyZWFkeSBpbiBwbGFjZSwgdGhlIHVzdWFsIGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGJvdW5kcyBpc3N1ZXMgYXJlIGhhbmRsZWQsIHNvIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KClNvLCBsZXQgbWUgc29saWRpZnkgdGhlIGNvbmNsdXNpb25zLiBXZSYjMzk7cmUgY29udmVydGluZyBiYXJyaWVyLWJhc2VkIFJDVSBwdWJsaXNoaW5nIHRvIHRoZSBtb3JlIGNvbnRlbXBvcmFyeSBhbmQgZXhwbGljaXQgYHNtcF9zdG9yZV9yZWxlYXNlYC9gc21wX2xvYWRfYWNxdWlyZWAgYXBwcm9hY2gsIGFsb25nIHdpdGggdGhlIGNvcnJlY3QgUkNVIGFubm90YXRpb25zIGFuZCBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgbWVtb3J5IGluIHF1ZXN0aW9uIGlzIGRlZmluaXRlbHkgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY2AuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQsIHVzZWQsIG9yIGxlYWtlZCBpbiBhbnkgd2F5LiBBbnkgY29uY3VycmVuY3kgaXNzdWVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBleGlzdGluZyBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGVyZWZvcmUsIHRoZSAmIzM0O05lZWRzS01TQU4mIzM0OyBmbGFnIGlzIGZhbHNlLiBJJiMzOTttIGNvbmZpZGVudCBhYm91dCB0aGlzIGFzc2Vzc21lbnQsIGFuZCBpdCYjMzk7cyB0aW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBSQ1UgYW5ub3RhdGlvbnMgYW5kIG1lbW9yeSBvcmRlcmluZyBwcmltaXRpdmVzIGluIHRoZSA4MDIuMVEgVkxBTiBzdWJzeXN0ZW0sIHJlcGxhY2luZyBzbXBfd21iKCkvc21wX3JtYigpIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKS9zbXBfbG9hZF9hY3F1aXJlKCkgYW5kIGFkZGluZyByY3VfYXNzaWduX3BvaW50ZXIoKS9yY3VfZGVyZWZlcmVuY2VfcmF3KCkgYWNjZXNzb3JzLiBUaGUgZHluYW1pYyBhcnJheXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MoKSB3aGljaCB6ZXJvZXMgYWxsIG1lbW9yeSB1cG9uIGFsbG9jYXRpb24uIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIGludHJvZHVjZWQsIGFjY2Vzc2VkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgY29uY3VycmVuY3kgb3IgbWVtb3J5IGxpZmVjeWNsZSBpc3N1ZXMgaW4gdGhpcyBjb2RlIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOL0tDU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIFJDVSBhbm5vdGF0aW9ucyBhbmQgbWVtb3J5IG9yZGVyaW5nIHByaW1pdGl2ZXMgaW4gdGhlIDgwMi4xUSBWTEFOIHN1YnN5c3RlbSwgcmVwbGFjaW5nIHNtcF93bWIoKS9zbXBfcm1iKCkgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpL3NtcF9sb2FkX2FjcXVpcmUoKSBhbmQgYWRkaW5nIHJjdV9hc3NpZ25fcG9pbnRlcigpL3JjdV9kZXJlZmVyZW5jZV9yYXcoKSBhY2Nlc3NvcnMuIFRoZSBkeW5hbWljIGFycmF5cyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIHdoaWNoIHplcm9lcyBhbGwgbWVtb3J5IHVwb24gYWxsb2NhdGlvbi4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgYWNjZXNzZWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBpbiB0aGlzIGNvZGUgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6MjYuMzM0NjYxNTI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2NDUwMzgyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiVkxBTl84MDIxUV9HVlJQXCIsXG4gICAgXCJWTEFOXzgwMjFRX01WUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdpc3Rlcl92bGFuX2RldlwiLFxuICAgIFwidW5yZWdpc3Rlcl92bGFuX2RldlwiLFxuICAgIFwiX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1XCIsXG4gICAgXCJ2bGFuX2Zvcl9lYWNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIFJDVSBhbm5vdGF0aW9ucyBhbmQgbWVtb3J5IG9yZGVyaW5nIHByaW1pdGl2ZXMgaW4gdGhlIDgwMi4xUSBWTEFOIHN1YnN5c3RlbSwgcmVwbGFjaW5nIHNtcF93bWIoKS9zbXBfcm1iKCkgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpL3NtcF9sb2FkX2FjcXVpcmUoKSBhbmQgYWRkaW5nIHJjdV9hc3NpZ25fcG9pbnRlcigpL3JjdV9kZXJlZmVyZW5jZV9yYXcoKSBhY2Nlc3NvcnMuIFRoZSBkeW5hbWljIGFycmF5cyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIHdoaWNoIHplcm9lcyBhbGwgbWVtb3J5IHVwb24gYWxsb2NhdGlvbi4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgYWNjZXNzZWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBpbiB0aGlzIGNvZGUgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGNvbmN1cnJlbmN5IHByaW1pdGl2ZXMgYW5kIFJDVSBhbm5vdGF0aW9ucyBmb3IgdGhlIDgwMi4xUSBWTEFOIGRldmljZSBsb29rdXAgdGFibGVzIChzd2l0Y2hpbmcgdG8gc21wX3N0b3JlX3JlbGVhc2UsIHNtcF9sb2FkX2FjcXVpcmUsIHJjdV9hc3NpZ25fcG9pbnRlciwgYW5kIHJjdV9kZXJlZmVyZW5jZV9yYXcpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgZm9yIFZMQU4gbWFuYWdlbWVudCBhbmQgbG9va3VwIHBhdGhzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjI2LjMzNDY2ODkzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0NzE5OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTE5N2ZmOWQyN2ViODdiNzg0ZTIwNTQ3Y2NlODU3YzA4OWIyZDU5ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDIwOjQ4OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jXFxuaW5kZXggMmQyZWZiODc3OTc1ZC4uZWM5YTdjYzhhZmM3NCAxMDA2NDRcXG4tLS0gYS9uZXQvODAyMXEvdmxhbi5jXFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uY1xcbkBAIC00OSw3ICs0OSw3IEBAIGNvbnN0IGNoYXIgdmxhbl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjtcXG4gc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxuIFxcdFxcdFxcdFxcdCAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZClcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xcbiBcXHR1bnNpZ25lZCBpbnQgdmlkeDtcXG4gXFx0dW5zaWduZWQgaW50IHNpemU7XFxuIFxcdGludCBwaWR4O1xcbkBAIC03MCwxMCArNzAsOCBAQCBzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcXG4gXFx0aWYgKGFycmF5ID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuLVxcdC8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXFxuLVxcdHNtcF93bWIoKTtcXG4tXFxuLVxcdHZnLVxcdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7XFxuK1xcdC8qIHBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmhcXG5pbmRleCBjNDFjYWFmOTQwOTVmLi5kODc0YWIzMjNkMzIwIDEwMDY0NFxcbi0tLSBhL25ldC84MDIxcS92bGFuLmhcXG4rKysgYi9uZXQvODAyMXEvdmxhbi5oXFxuQEAgLTIyLDggKzIyLDggQEAgZW51bSB2bGFuX3Byb3RvcyB7XFxuIHN0cnVjdCB2bGFuX2dyb3VwIHtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0bnJfdmxhbl9kZXZzO1xcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGhsaXN0O1xcdC8qIGxpbmtlZCBsaXN0ICovXFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICoqdmxhbl9kZXZpY2VzX2FycmF5c1tWTEFOX1BST1RPX05VTV1cXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKip2bGFuX2RldmljZXNfYXJyYXlzW1ZMQU5fUFJPVE9fTlVNXVxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTtcXG4gfTtcXG4gXFxuIHN0cnVjdCB2bGFuX2luZm8ge1xcbkBAIC01NCwxNSArNTQsMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBpZHgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCB1MTYgdmxhbl9pZClcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xcbiBcXG4tXFx0YXJyYXkgPSB2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxcbi1cXHRcXHRcXHRcXHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcXG4tXFxuLVxcdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXFxuLVxcdHNtcF9ybWIoKTtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi9cXG4rXFx0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxcbitcXHRcXHRcXHRcXHQgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSk7XFxuIFxcbi1cXHRyZXR1cm4gYXJyYXkgPyBhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0gOiBOVUxMO1xcbitcXHRyZXR1cm4gYXJyYXkgPyByY3VfZGVyZWZlcmVuY2VfcmF3KGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSkgOiBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbkBAIC04MiwxMyArODAsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHZsYW5fZ3JvdXBfc2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGludCBwaWR4ID0gdmxhbl9wcm90b19pZHgodmxhbl9wcm90byk7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7XFxuIFxcbiBcXHRpZiAoIXZnIHx8IHBpZHggXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdGFycmF5ID0gdmctXFx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cXG4gXFx0XFx0XFx0XFx0ICAgICAgIFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl07XFxuLVxcdGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA9IGRldjtcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSwgZGV2KTtcXG4gfVxcbiBcXG4gLyogTXVzdCBiZSBpbnZva2VkIHdpdGggcmN1X3JlYWRfbG9jayBvciB3aXRoIFJUTkwuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjI2LjkyMjYxMDEwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDU2MjgwNjU0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiVkxBTl84MDIxUV9HVlJQXCIsXG4gICAgXCJWTEFOXzgwMjFRX01WUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdpc3Rlcl92bGFuX2RldlwiLFxuICAgIFwidW5yZWdpc3Rlcl92bGFuX2RldlwiLFxuICAgIFwiX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1XCIsXG4gICAgXCJ2bGFuX2Zvcl9lYWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBjb25jdXJyZW5jeSBwcmltaXRpdmVzIGFuZCBSQ1UgYW5ub3RhdGlvbnMgZm9yIHRoZSA4MDIuMVEgVkxBTiBkZXZpY2UgbG9va3VwIHRhYmxlcyAoc3dpdGNoaW5nIHRvIHNtcF9zdG9yZV9yZWxlYXNlLCBzbXBfbG9hZF9hY3F1aXJlLCByY3VfYXNzaWduX3BvaW50ZXIsIGFuZCByY3VfZGVyZWZlcmVuY2VfcmF3KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBWTEFOIG1hbmFnZW1lbnQgYW5kIGxvb2t1cCBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMTk3ZmY5ZDI3ZWI4N2I3ODRlMjA1NDdjY2U4NTdjMDg5YjJkNTlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMDo0ODoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jXG5pbmRleCAyZDJlZmI4Nzc5NzVkLi5lYzlhN2NjOGFmYzc0IDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uY1xuKysrIGIvbmV0LzgwMjFxL3ZsYW4uY1xuQEAgLTQ5LDcgKzQ5LDcgQEAgY29uc3QgY2hhciB2bGFuX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OO1xuIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0ICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFx0dW5zaWduZWQgaW50IHZpZHg7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiBcdGludCBwaWR4O1xuQEAgLTcwLDEwICs3MCw4IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0aWYgKGFycmF5ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXG4tXHRzbXBfd21iKCk7XG4tXG4tXHR2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oXG5pbmRleCBjNDFjYWFmOTQwOTVmLi5kODc0YWIzMjNkMzIwIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uaFxuQEAgLTIyLDggKzIyLDggQEAgZW51bSB2bGFuX3Byb3RvcyB7XG4gc3RydWN0IHZsYW5fZ3JvdXAge1xuIFx0dW5zaWduZWQgaW50XHRcdG5yX3ZsYW5fZGV2cztcbiBcdHN0cnVjdCBobGlzdF9ub2RlXHRobGlzdDtcdC8qIGxpbmtlZCBsaXN0ICovXG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXG4tXHRcdFx0XHRcdCAgICAgICBbVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUU107XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXG4rXHRcdFx0XHRcdFx0ICAgICBbVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUU107XG4gfTtcbiBcbiBzdHJ1Y3Qgdmxhbl9pbmZvIHtcbkBAIC01NCwxNSArNTQsMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwaWR4LFxuIFx0XHRcdFx0XHRcdFx0IHUxNiB2bGFuX2lkKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuLVx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4tXHRcdFx0XHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcbi1cbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG4tXHRzbXBfcm1iKCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xuK1x0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbitcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiBcbi1cdHJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7XG4rXHRyZXR1cm4gYXJyYXkgPyByY3VfZGVyZWZlcmVuY2VfcmF3KGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSkgOiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuQEAgLTgyLDEzICs4MCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ncm91cF9zZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiBcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IHBpZHggPSB2bGFuX3Byb3RvX2lkeCh2bGFuX3Byb3RvKTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuIFx0aWYgKCF2ZyB8fCBwaWR4IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXHRhcnJheSA9IHZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbiBcdFx0XHRcdCAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dO1xuLVx0YXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gZGV2O1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSwgZGV2KTtcbiB9XG4gXG4gLyogTXVzdCBiZSBpbnZva2VkIHdpdGggcmN1X3JlYWRfbG9jayBvciB3aXRoIFJUTkwuICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0ODoyNi45MjI2MTM2MTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzAzODY3NDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkxBTiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXNzZWN0IHRoZSBjaGFuZ2VzLCBmb2N1c2luZyBvbiB0aGUgY29yZSBmaWxlIG1vZGlmaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgbmV0LzgwMjFxL3ZsYW4uY2AgYW5kIGBuZXQvODAyMXEvdmxhbi5oYCBmaWxlcyDigJMgc28gVkxBTiB0YWdnaW5nLCBuYXR1cmFsbHkuXG5cblNwZWNpZmljYWxseSwgaW4gYHZsYW4uY2AsIHRoZSBrZXkgYWRqdXN0bWVudCBzZWVtcyB0byBiZSBpbiBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLiBUaGUgY3JpdGljYWwgc3dpdGNoIGlzIHRoZSBtb3ZlIGZyb20gYSBzaW1wbGUgcG9pbnRlciBhcnJheSwgYHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7YCwgdG8gYW4gUkNVLXNhZmUgdmVyc2lvbjogYHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7YC4gVGhpcyBzY3JlYW1zIGNvbmN1cnJlbnQgYWNjZXNzIGFuZCB0aGUgbmVlZCBmb3IgcHJvcGVyIG1lbW9yeSBiYXJyaWVyL29yZGVyaW5nLiBSZXBsYWNpbmcgYHNtcF93bWIoKWAgYW5kIGRpcmVjdCBhc3NpZ25tZW50IHdpdGggYHNtcF9zdG9yZV9yZWxlYXNlKClgIGlzIHRoZSBnaXZlYXdheSDigJMgcHJvdGVjdGluZyB0aGF0IHdyaXRlIHdpdGggYSByZWxlYXNlIGJhcnJpZXIuXG5cblRoZW4sIGluIGB2bGFuLmhgLCB0aGUgYHN0cnVjdCB2bGFuX2dyb3VwYCBub3cgaGFzIGl0cyBhcnJheSBlbGVtZW50cyBhbm5vdGF0ZWQgd2l0aCBgX19yY3VgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGFjY29tcGFueWluZyBjaGFuZ2VzIGluIGBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZWAgYXJlIGFsc28gdGVsbGluZy4gVGhlIHVzZSBvZiBgc21wX2xvYWRfYWNxdWlyZWAgaW5zdGVhZCBvZiBgc21wX3JtYmAgYW5kIGByY3VfZGVyZWZlcmVuY2VfcmF3YCBjb25maXJtcyB0aGlzLiBXZSdyZSBsb2FkaW5nIHRoZSBwb2ludGVyIHdpdGggYW4gYWNxdWlyZSBiYXJyaWVyIHRvIGVuc3VyZSB3ZSBzZWUgYWxsIHByaW9yIHdyaXRlcywgYW5kIHRoZW4gZGVyZWZlcmVuY2luZyBpdCB3aXRoIHRoZSBSQ1UgcHJpbWl0aXZlcy4gU2ltaWxhcmx5LCBgdmxhbl9ncm91cF9zZXRfZGV2aWNlYCBub3cgdXNlcyBgcmN1X2Fzc2lnbl9wb2ludGVyKClgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBSQ1UgcGF0dGVybiBmb3Igc2FmZWx5IHB1Ymxpc2hpbmcgYSBwb2ludGVyLlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBhbmQgcmFjZSBjb25kaXRpb25zIHdoZW4gYWNjZXNzaW5nIHRoZSBWTEFOIGRldmljZSBhcnJheSwgd2hpY2ggd291bGQgdHlwaWNhbGx5IGJlIGVuY291bnRlcmVkIGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gTm93LCBsZXQgbWUgY2hlY2sgdGhlIEtjb25maWcgYW5kIHN1cnJvdW5kaW5nIGZpbGVzIHdpdGhpbiB0aGUgYG5ldC84MDIxcWAgZGlyZWN0b3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgZW5hYmxlZCBhcyBhIGNvbnNlcXVlbmNlIG9mIHRoaXMgcGF0Y2gsIG9yIGlmIGl0IGNoYW5nZXMgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgVkxBTiBkcml2ZXIuIEknbGwgdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIGBuZXQvODAyMXEvS2NvbmZpZ2AgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjMyLjIyNjQ4NTI4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwMjYzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZMQU5fODAyMVFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0LzgwMjFxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC84MDIxcS9LY29uZmlnLTUtXFxubmV0LzgwMjFxL0tjb25maWc6Njpjb25maWcgVkxBTl84MDIxUVxcbm5ldC84MDIxcS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIjgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFxcXCJcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTIxLVxcbm5ldC84MDIxcS9LY29uZmlnOjIyOmNvbmZpZyBWTEFOXzgwMjFRX0dWUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cXHRib29sIFxcXCJHVlJQIChHQVJQIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0LzgwMjFxL0tjb25maWctMzEtXFxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxcbm5ldC84MDIxcS9LY29uZmlnLTMzLVxcdGJvb2wgXFxcIk1WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0ODozMi4zNDQ1MTYwMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTc2ODAxNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgODAyLjFRIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgaG93IHRoZSA4MDIuMVEgVkxBTiB0YWdnaW5nIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaW50ZWdyYXRlcyBpdCwgYW5kLCB3ZWxsLCBob3cgdGhlIG9wdGlvbnMgYW5kIHNldHRpbmdzIGFyZSBzdHJ1Y3R1cmVkLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBjb25maWd1cmF0aW9uIGFuZCBidWlsZCBmaWxlcy5cblxuTGV0J3MgYmVnaW4gYnkgcHVsbGluZyB1cCBgbmV0LzgwMjFxL0tjb25maWdgLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBleHBvc2VkIHRvIHRoZSB1c2VyIChpZiBhdCBhbGwpLiBUaGlzIGlzIHdoZXJlIEknbGwgc2VlIHRoZSBlbmFibGUvZGlzYWJsZSBvcHRpb25zLCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZXMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGhvdyBJJ2xsIGludGVycHJldCB0aGUgY29kZS5cblxuVGhlbiwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgYG5ldC84MDIxcS9NYWtlZmlsZWAuIFRoaXMgd2lsbCByZXZlYWwgaG93IHRoZSA4MDIuMVEgY29kZSBpcyBjb21waWxlZCwgbGlua2VkLCBhbmQgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzb3VyY2UgZmlsZXMgaW5jbHVkZWQsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgaG93IHRoZSBtb2R1bGVzIGFyZSBidWlsdC4gSXQgc2hvdWxkIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHdoaWNoIGZpbGVzIGltcGxlbWVudCB3aGF0IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgd2hlcmUgSSBjYW4gY29ubmVjdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBhY3R1YWwgc291cmNlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHR3byBmaWxlcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGFuYWx5c2lzLCBhbGxvd2luZyBtZSB0byB1bmRlcnN0YW5kICpob3cqIHRvIGNvbnRyb2wgYW5kIGNvbXBpbGUgdGhlIHVuZGVybHlpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjM1LjUyMTMyMDQwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENvbmZpZ3VyYXRpb24gZm9yIDgwMi4xUSBWTEFOIHN1cHBvcnRcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFZMQU5fODAyMVFcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCI4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFNlbGVjdCB0aGlzIGFuZCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNyZWF0ZSA4MDIuMVEgVkxBTiBpbnRlcmZhY2VzXFxuICAxMDpcXHRcXHQgIG9uIHlvdXIgRXRoZXJuZXQgaW50ZXJmYWNlcy4gODAyLjFRIFZMQU4gc3VwcG9ydHMgYWxtb3N0XFxuICAxMTpcXHRcXHQgIGV2ZXJ5dGhpbmcgYSByZWd1bGFyIEV0aGVybmV0IGludGVyZmFjZSBkb2VzLCBpbmNsdWRpbmdcXG4gIDEyOlxcdFxcdCAgZmlyZXdhbGxpbmcsIGJyaWRnaW5nLCBhbmQgb2YgY291cnNlIElQIHRyYWZmaWMuIFlvdSB3aWxsIG5lZWRcXG4gIDEzOlxcdFxcdCAgdGhlICdpcCcgdXRpbGl0eSBpbiBvcmRlciB0byBlZmZlY3RpdmVseSB1c2UgVkxBTnMuXFxuICAxNDpcXHRcXHQgIFNlZSB0aGUgVkxBTiB3ZWIgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcXG4gIDE1OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cuY2FuZGVsYXRlY2guY29tL35ncmVlYXIvdmxhbi5odG1sXFx1MDAzZVxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAxODpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIDgwMjFxLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBWTEFOXzgwMjFRX0dWUlBcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkdWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcXG4gIDI1OlxcdFxcdHNlbGVjdCBHQVJQXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSBHVlJQIGVuZC1zeXN0ZW0gc3VwcG9ydC4gR1ZSUCBpcyB1c2VkIGZvclxcbiAgMjg6XFx0XFx0ICBhdXRvbWF0aWMgcHJvcGFnYXRpb24gb2YgcmVnaXN0ZXJlZCBWTEFOcyB0byBzd2l0Y2hlcy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgVkxBTl84MDIxUV9NVlJQXFxuICAzMzpcXHRcXHRib29sIFxcXCJNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gIDM0OlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgMzU6XFx0XFx0c2VsZWN0IE1SUFxcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBTZWxlY3QgdGhpcyB0byBlbmFibGUgTVZSUCBlbmQtc3lzdGVtIHN1cHBvcnQuIE1WUlAgaXMgdXNlZCBmb3JcXG4gIDM4OlxcdFxcdCAgYXV0b21hdGljIHByb3BhZ2F0aW9uIG9mIHJlZ2lzdGVyZWQgVkxBTnMgdG8gc3dpdGNoZXM7IGl0XFxuICAzOTpcXHRcXHQgIHN1cGVyc2VkZXMgR1ZSUCBhbmQgaXMgbm90IGJhY2t3YXJkcy1jb21wYXRpYmxlLlxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjM1LjUyMTQxNzg2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODI4ODEzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSA4MDIuMVEgTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSA4MDIuMVEgVkxBTiBzdXBwb3J0IHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgZmlyc3Qgc3RvcCBpcyBkZWZpbml0ZWx5IGBuZXQvODAyMXEvTWFrZWZpbGVgLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB3aGF0IG9iamVjdCBmaWxlcyBhcmUgYmVpbmcgY29tcGlsZWQuIEtub3dpbmcgdGhpcywgSSBjYW4gdHJhY2UgZGVwZW5kZW5jaWVzLCBwaW5wb2ludCB3aGljaCBzb3VyY2UgZmlsZXMgYXJlIGNyaXRpY2FsLCBhbmQgZ2V0IGEgZmVlbCBmb3IgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIHRoZSBtb2R1bGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbXBpbGVkIG9iamVjdHMgd2lsbCBnaXZlIG1lIGEgZ3JlYXQgb3ZlcnZpZXcgb2YgdGhlIGNvZGUgdGhhdCBtYW5hZ2VzIHRoZSBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyBsb2dpYywgYW5kIHdoaWNoIHBhcnRzIGRlYWwgd2l0aCB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGhhcmR3YXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2lzIHRvIHRoZW4gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBvcHRpbWl6YXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjM3LjkwNDMwMjY0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvODAyMXEvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVkxBTiBsYXllci5cXG4gICA0OlxcdCNcXG4gICA1OlxcdG9iai0kKHN1YnN0IG0seSwkKENPTkZJR19WTEFOXzgwMjFRKSlcXHQrPSB2bGFuX2NvcmUub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXFx0XFx0Kz0gODAyMXEub1xcbiAgIDc6XFx0XFxuICAgODpcXHQ4MDIxcS15XFx0XFx0XFx0XFx0XFx0Oj0gdmxhbi5vIHZsYW5fZGV2Lm8gdmxhbl9uZXRsaW5rLm9cXG4gICA5OlxcdDgwMjFxLSQoQ09ORklHX1ZMQU5fODAyMVFfR1ZSUClcXHRcXHQrPSB2bGFuX2d2cnAub1xcbiAgMTA6XFx0ODAyMXEtJChDT05GSUdfVkxBTl84MDIxUV9NVlJQKVxcdFxcdCs9IHZsYW5fbXZycC5vXFxuICAxMTpcXHQ4MDIxcS0kKENPTkZJR19QUk9DX0ZTKVxcdFxcdFxcdCs9IHZsYW5wcm9jLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6MzcuOTA0NDYwMzE2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk1NDc2OTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqQW5hbHl6aW5nIFZMQU4gR3JvdXAgQWxsb2NhdGlvbiBcdTAwMjYgRGV2aWNlIEFzc29jaWF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBhbmQgdXNhZ2Ugb2YgdGhlc2UgVkxBTi1yZWxhdGVkIGZ1bmN0aW9uczogYHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkYCwgYF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlYCwgYW5kIGB2bGFuX2dyb3VwX3NldF9kZXZpY2VgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSB0aGVpciB1c2FnZSDigJMgZmluZCBvdXQgd2hlcmUgdGhleSdyZSBjYWxsZWQgYW5kIHdoYXQgdGhleSdyZSBkb2luZyB3aXRoaW4gdGhlIGxhcmdlciBjb2RlYmFzZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8ga25vdyB3aGF0IG1vZHVsZXMgcmVseSBvbiB0aGVtLCBhbmQgaG93LlxuXG5gdmxhbl9ncm91cF9wcmVhbGxvY192aWRgIGxpa2VseSBoYW5kbGVzIHByZS1hbGxvY2F0aW9uIG9yIHJlc2VydmF0aW9uIG9mIFZMQU4gSURzLCBwb3NzaWJseSBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIG9yIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0OiBhcmUgd2UgcHJlLWFsbG9jYXRpbmcgdG8gYXZvaWQgY29uZmxpY3RzLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdGhhdC5cblxuVGhlbiB0aGVyZSdzIGBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZWAgd2hpY2ggc3VnZ2VzdHMgYSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgbG9va2luZyB1cCBvciByZXRyaWV2aW5nIHRoZSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBWTEFOIGdyb3VwLiBUaGUgZG91YmxlIHVuZGVyc2NvcmUgYXQgdGhlIGJlZ2lubmluZyBzdWdnZXN0cyB0aGF0IGl0IG1pZ2h0IGJlIGFuIGludGVybmFsIGZ1bmN0aW9uIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCB3aGljaCBtZWFucyBJJ2xsIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIFwicmVhbFwiIEFQSSB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHN1cHBvcnRpbmcsIGFuZCB3aHkgaXQgaXMgYWJzdHJhY3RlZCBpbiB0aGlzIHdheS4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgdG8gbWFwIFZMQU4gSURzIHRvIG5ldHdvcmsgaW50ZXJmYWNlcy4gSXMgdGhpcyBoYXBwZW5pbmcgYXQgcnVudGltZSwgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBvciBvbmx5IGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uP1xuXG5GaW5hbGx5LCBgdmxhbl9ncm91cF9zZXRfZGV2aWNlYCBpbXBsaWVzIGFzc2lnbmluZyBvciBhc3NvY2lhdGluZyBhIG5ldHdvcmsgZGV2aWNlIChsaWtlIGEgcGh5c2ljYWwgTklDIG9yIGEgdmlydHVhbCBicmlkZ2UpIHdpdGggYSBWTEFOIGdyb3VwLiBUaGlzIGlzIHRoZSBwYWlyaW5nIG9mIGEgcGh5c2ljYWwgZGV2aWNlIHdpdGggVkxBTiBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyB0aGUgY29yZSBvZiBob3cgVkxBTnMgd29yay4gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBkZWFscyB3aXRoIGRldmljZSByZW1vdmFsIG9yIHJlY29uZmlndXJhdGlvbi4gSG93IGlzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIGJlaW5nIG1haW50YWluZWQsIGFuZCBpcyB0aGlzIHRocmVhZCBzYWZlP1xuXG5CYXNpY2FsbHksIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgd29ya2Zsb3c6IFZMQU4gSUQgYWxsb2NhdGlvbiwgZGV2aWNlIGFzc29jaWF0aW9uLCBhbmQgaG93IHRob3NlIGFzc29jaWF0aW9ucyBhcmUgbWFuYWdlZCBvdmVyIHRpbWUuIFRoZSBjYWxsc2l0ZXMgYXJlIG15IHJvYWRtYXAgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0NCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6NDEuODU5MjMyOTM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzAwMDIzMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkfHZsYW5fZ3JvdXBfc2V0X2RldmljZXxfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZXx2bGFuX2dyb3VwX2dldF9kZXZpY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL3ZsYW4uYz00NT1jb25zdCBjaGFyIHZsYW5fdmVyc2lvbltdID0gRFJWX1ZFUlNJT047XFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jLTQ4LVxcbm5ldC84MDIxcS92bGFuLmM6NDk6c3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxubmV0LzgwMjFxL3ZsYW4uYy01MC1cXHRcXHRcXHRcXHQgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jLTcyLVxcbm5ldC84MDIxcS92bGFuLmM6NzM6XFx0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi9cXG5uZXQvODAyMXEvdmxhbi5jLTc0LVxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xcbi0tXFxubmV0LzgwMjFxL3ZsYW4uYz04Nj12b2lkIHVucmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC84MDIxcS92bGFuLmMtMTA3LVxcbm5ldC84MDIxcS92bGFuLmM6MTA4OlxcdHZsYW5fZ3JvdXBfc2V0X2RldmljZShncnAsIHZsYW4tXFx1MDAzZXZsYW5fcHJvdG8sIHZsYW5faWQsIE5VTEwpO1xcbm5ldC84MDIxcS92bGFuLmMtMTA5LVxcbi0tXFxubmV0LzgwMjFxL3ZsYW4uYz0xNDY9aW50IHJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC84MDIxcS92bGFuLmMtMTcyLVxcbm5ldC84MDIxcS92bGFuLmM6MTczOlxcdGVyciA9IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKGdycCwgdmxhbi1cXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCk7XFxubmV0LzgwMjFxL3ZsYW4uYy0xNzQtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jLTE5MC1cXHQgKi9cXG5uZXQvODAyMXEvdmxhbi5jOjE5MTpcXHR2bGFuX2dyb3VwX3NldF9kZXZpY2UoZ3JwLCB2bGFuLVxcdTAwM2V2bGFuX3Byb3RvLCB2bGFuX2lkLCBkZXYpO1xcbm5ldC84MDIxcS92bGFuLmMtMTkyLVxcdGdycC1cXHUwMDNlbnJfdmxhbl9kZXZzKys7XFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oPTQwPXN0YXRpYyBpbmxpbmUgaW50IHZsYW5fcHJvdG9faWR4KF9fYmUxNiBwcm90bylcXG4tLVxcbm5ldC84MDIxcS92bGFuLmgtNTItXFxubmV0LzgwMjFxL3ZsYW4uaDo1MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxubmV0LzgwMjFxL3ZsYW4uaC01NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBpZHgsXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oLTU4LVxcbm5ldC84MDIxcS92bGFuLmg6NTk6XFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKCkgKi9cXG5uZXQvODAyMXEvdmxhbi5oLTYwLVxcdGFycmF5ID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2dmctXFx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cXG4tLVxcbm5ldC84MDIxcS92bGFuLmgtNjUtXFxubmV0LzgwMjFxL3ZsYW4uaDo2NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbm5ldC84MDIxcS92bGFuLmgtNjctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYmUxNiB2bGFuX3Byb3RvLFxcbi0tXFxubmV0LzgwMjFxL3ZsYW4uaC03NC1cXG5uZXQvODAyMXEvdmxhbi5oOjc1OlxcdHJldHVybiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSh2ZywgcGlkeCwgdmxhbl9pZCk7XFxubmV0LzgwMjFxL3ZsYW4uaC03Ni19XFxubmV0LzgwMjFxL3ZsYW4uaC03Ny1cXG5uZXQvODAyMXEvdmxhbi5oOjc4OnN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2dyb3VwX3NldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbm5ldC84MDIxcS92bGFuLmgtNzktXFx0XFx0XFx0XFx0XFx0IF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZCxcXG4tLVxcbm5ldC84MDIxcS92bGFuLmg9OTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9maW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oLTk4LVxcdGlmICh2bGFuX2luZm8pXFxubmV0LzgwMjFxL3ZsYW4uaDo5OTpcXHRcXHRyZXR1cm4gdmxhbl9ncm91cF9nZXRfZGV2aWNlKFxcdTAwMjZ2bGFuX2luZm8tXFx1MDAzZWdycCxcXG5uZXQvODAyMXEvdmxhbi5oLTEwMC1cXHRcXHRcXHRcXHRcXHQgICAgIHZsYW5fcHJvdG8sIHZsYW5faWQpO1xcbi0tXFxubmV0LzgwMjFxL3ZsYW4uaD0xMDU9c3RhdGljIGlubGluZSBuZXRkZXZfZmVhdHVyZXNfdCB2bGFuX3RubF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYpXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oLTExOS1cXHRmb3IgKChpKSA9IDA7IGkgXFx1MDAzYyBWTEFOX1BST1RPX05VTSAqIFZMQU5fTl9WSUQ7IGkrKykgXFxcXFxcbm5ldC84MDIxcS92bGFuLmg6MTIwOlxcdFxcdGlmICgoKGRldikgPSBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgoZ3JwKSwgKGkpIC8gVkxBTl9OX1ZJRCwgXFxcXFxcbm5ldC84MDIxcS92bGFuLmgtMTIxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAoaSkgJSBWTEFOX05fVklEKSkpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9NzY9c3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTgxLVxcdGlmICh2bGFuX2luZm8pIHtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6ODI6XFx0XFx0cmV0dXJuIHZsYW5fZ3JvdXBfZ2V0X2RldmljZShcXHUwMDI2dmxhbl9pbmZvLVxcdTAwM2VncnAsXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTgzLVxcdFxcdFxcdFxcdFxcdCAgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MjI3PWludCB2bGFuX2Zvcl9lYWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMjQyLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkodmlkX2luZm8sIFxcdTAwMjZ2bGFuX2luZm8tXFx1MDAzZXZpZF9saXN0LCBsaXN0KSB7XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjI0MzpcXHRcXHR2ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKFxcdTAwMjZ2bGFuX2luZm8tXFx1MDAzZWdycCwgdmlkX2luZm8tXFx1MDAzZXByb3RvLFxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0yNDQtXFx0XFx0XFx0XFx0XFx0ICAgICB2aWRfaW5mby1cXHUwMDNldmlkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6NDUuNTU5MjY1ODIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NjgxNTc4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIFJDVSBhbm5vdGF0aW9ucyBhbmQgY29uY3VycmVuY3kgc3luY2hyb25pemF0aW9uIHdpdGhpbiBWTEFOIDgwMi4xUSBncm91cCBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkhtbSwgaXMgdGhpcyBmdXp6YWJsZT9cIiBUaW1lIHRvIGV2YWx1YXRlLlxuXG5UaGUgY2hlY2tsaXN0IHNheXMgSSBzaG91bGQgZXhjbHVkZSBwYXRjaGVzIHRoYXQgaW52b2x2ZSBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgY29zbWV0aWMgbG9nZ2luZywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSAocGFydGljdWxhcmx5IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSksIG9yIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBvbmx5IHJ1biBkdXJpbmcgaG90LXVucGx1ZyBvcGVyYXRpb25zLiBUaGlzIGlzIGZhaXJseSBzdGFuZGFyZC5cblxuTG9va2luZyBkZWVwZXIsIHRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIDgwMi4xUSBWTEFOIGRldmljZSBtYW5hZ2VtZW50LiBXZSBhcmUgdGFsa2luZyBhYm91dCBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGJhcnJpZXJzLCBSQ1UgZGVyZWZlcmVuY2luZywgYW5kIHBvaW50ZXIgYXNzaWdubWVudHMgaW4gZnVuY3Rpb25zIGxpa2UgYHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkYCwgYF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlYCwgYW5kIGB2bGFuX2dyb3VwX3NldF9kZXZpY2VgLiBUaGlzIGluY2x1ZGVzIHRoZSBmdW5jdGlvbnMgZXhlY3V0ZWQgd2hlbiByZWdpc3RlcmluZywgdW5yZWdpc3RlcmluZyBhbmQgdHJhbnNtaXR0aW5nIFZMQU4gZGV2aWNlcy4gQ3JpdGljYWxseSwgdGhpcyBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHN0YW5kYXJkIFFFTVUgLyBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiBJIGNhbiB0cmlnZ2VyIHRoaXMgdGhyb3VnaCByZWd1bGFyIHJ0bmwgbGluayBvcGVyYXRpb25z4oCUY3JlYXRpbmcsIGRlbGV0aW5nLCBzZW5kaW5nLCBhbmQgcmVjZWl2aW5nIHBhY2tldHMgd2l0aCBWTEFOcy5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBjYWxsIGNoYWlucy4gYG5ldC84MDIxcS92bGFuLmNgIGlzIHdoYXQgSSBzaG91bGQgZm9jdXMgb24uIGByZWdpc3Rlcl92bGFuX2RldmAgY2FsbHMgYHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkYCBhbmQgYHZsYW5fZ3JvdXBfc2V0X2RldmljZWAsIHdoaWxlIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YCBjYWxscyBgdmxhbl9ncm91cF9zZXRfZGV2aWNlYC4gYHZsYW5fbmV3bGlua2AgYW5kIGB2bGFuX2RlbGxpbmtgIGZyb20gYG5ldC84MDIxcS92bGFuX25ldGxpbmsuY2AgY2FsbCBgcmVnaXN0ZXJfdmxhbl9kZXZgIGFuZCBgdW5yZWdpc3Rlcl92bGFuX2RldmAsIHJlc3BlY3RpdmVseS5cblxuQWxyaWdodCwgc28gdGhlIGtleSBhcmVhcyBhcmUgYG5ldC84MDIxcS92bGFuLmNgIGFuZCBgbmV0LzgwMjFxL3ZsYW5fbmV0bGluay5jYC4gV2l0aCB0aG9zZSBwaWVjZXMgaW4gcGxhY2UgYW5kIGNvbmZpcm1lZCwgSSdkIHNheSB0aGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0ODo1MS4wMjc0MjgyNjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS92bGFuX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKlxcdFZMQU4gbmV0bGluayBjb250cm9sIGludGVyZmFjZVxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIFxcdENvcHlyaWdodCAoYykgMjAwNyBQYXRyaWNrIE1jSGFyZHkgXFx1MDAzY2thYmVyQHRyYXNoLm5ldFxcdTAwM2VcXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvcnRuZXRsaW5rLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXFwidmxhbi5oXFxcIlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXG4gIDE4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2bGFuX3BvbGljeVtJRkxBX1ZMQU5fTUFYICsgMV0gPSB7XFxuICAxOTpcXHRcXHRbSUZMQV9WTEFOX0lEXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG4gIDIwOlxcdFxcdFtJRkxBX1ZMQU5fRkxBR1NdXFx0PSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IGlmbGFfdmxhbl9mbGFncykgfSxcXG4gIDIxOlxcdFxcdFtJRkxBX1ZMQU5fRUdSRVNTX1FPU11cXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuICAyMjpcXHRcXHRbSUZMQV9WTEFOX0lOR1JFU1NfUU9TXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuICAyMzpcXHRcXHRbSUZMQV9WTEFOX1BST1RPQ09MXVxcdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG4gIDI0OlxcdH07XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2bGFuX21hcF9wb2xpY3lbSUZMQV9WTEFOX1FPU19NQVggKyAxXSA9IHtcXG4gIDI3OlxcdFxcdFtJRkxBX1ZMQU5fUU9TX01BUFBJTkddID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBpZmxhX3ZsYW5fcW9zX21hcHBpbmcpIH0sXFxuICAyODpcXHR9O1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXG4gIDMxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHZsYW5fdmFsaWRhdGVfcW9zX21hcChzdHJ1Y3QgbmxhdHRyICphdHRyKVxcbiAgMzI6XFx0e1xcbiAgMzM6XFx0XFx0aWYgKCFhdHRyKVxcbiAgMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICAzNTpcXHRcXHRyZXR1cm4gbmxhX3ZhbGlkYXRlX25lc3RlZF9kZXByZWNhdGVkKGF0dHIsIElGTEFfVkxBTl9RT1NfTUFYLFxcbiAgMzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdmxhbl9tYXBfcG9saWN5LCBOVUxMKTtcXG4gIDM3OlxcdH1cXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGludCB2bGFuX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4gIDQwOlxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuICA0MTpcXHR7XFxuICA0MjpcXHRcXHRzdHJ1Y3QgaWZsYV92bGFuX2ZsYWdzICpmbGFncztcXG4gIDQzOlxcdFxcdHUxNiBpZDtcXG4gIDQ0OlxcdFxcdGludCBlcnI7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdGlmICh0YltJRkxBX0FERFJFU1NdKSB7XFxuICA0NzpcXHRcXHRcXHRpZiAobmxhX2xlbih0YltJRkxBX0FERFJFU1NdKSAhPSBFVEhfQUxFTikge1xcbiAgNDg6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkludmFsaWQgbGluayBhZGRyZXNzXFxcIik7XFxuICA0OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDUwOlxcdFxcdFxcdH1cXG4gIDUxOlxcdFxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihubGFfZGF0YSh0YltJRkxBX0FERFJFU1NdKSkpIHtcXG4gIDUyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJJbnZhbGlkIGxpbmsgYWRkcmVzc1xcXCIpO1xcbiAgNTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbiAgNTQ6XFx0XFx0XFx0fVxcbiAgNTU6XFx0XFx0fVxcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRpZiAoIWRhdGEpIHtcXG4gIDU4OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJWTEFOIHByb3BlcnRpZXMgbm90IHNwZWNpZmllZFxcXCIpO1xcbiAgNTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA2MDpcXHRcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdGlmIChkYXRhW0lGTEFfVkxBTl9QUk9UT0NPTF0pIHtcXG4gIDYzOlxcdFxcdFxcdHN3aXRjaCAobmxhX2dldF9iZTE2KGRhdGFbSUZMQV9WTEFOX1BST1RPQ09MXSkpIHtcXG4gIDY0OlxcdFxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfODAyMVEpOlxcbiAgNjU6XFx0XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxQUQpOlxcbiAgNjY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA2NzpcXHRcXHRcXHRkZWZhdWx0OlxcbiAgNjg6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkludmFsaWQgVkxBTiBwcm90b2NvbFxcXCIpO1xcbiAgNjk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuICA3MDpcXHRcXHRcXHR9XFxuICA3MTpcXHRcXHR9XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdGlmIChkYXRhW0lGTEFfVkxBTl9JRF0pIHtcXG4gIDc0OlxcdFxcdFxcdGlkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX1ZMQU5fSURdKTtcXG4gIDc1OlxcdFxcdFxcdGlmIChpZCBcXHUwMDNlPSBWTEFOX1ZJRF9NQVNLKSB7XFxuICA3NjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiSW52YWxpZCBWTEFOIGlkXFxcIik7XFxuICA3NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gIDc4OlxcdFxcdFxcdH1cXG4gIDc5OlxcdFxcdH1cXG4gIDgwOlxcdFxcdGlmIChkYXRhW0lGTEFfVkxBTl9GTEFHU10pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6NTEuMDI3NTc2MDM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3OTk4OTY2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIFZMQU4gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIFZMQU4gYXNwZWN0cywgYW5kIGl0J3MgdGltZSB0byBicm9hZGVuIG15IHZpZXcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVsbCBwaWN0dXJlLiBMZXQncyBzZWUgaG93IGBuZXQvODAyMXEvdmxhbl9uZXRsaW5rLmNgIGFuZCBgbmV0LzgwMjFxL3ZsYW4uY2AgZmxlc2ggb3V0IHRoZSBWTEFOIGhhbmRsaW5nLCBpbiBwYXJ0aWN1bGFyIGZyb20gYSBuZXRsaW5rIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2VzIGZvciBtYW5hZ2luZyB0aGVzZSBWTEFOIGRldmljZXMuIFRoaXMgc2hvdWxkIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgaW9jdGwgY2FsbHMsIGFuZCBob3cgdGhleSBnZXQgd2lyZWQgdG9nZXRoZXIuIExldCdzIHN0YXJ0IGJ5IHdhbGtpbmcgdGhyb3VnaCB0aGUgY29kZSBsaW5lIGJ5IGxpbmUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBlbXBsb3llZCwgYW5kIGhvdyBkbyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZXM/IEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIGZsb3c6IGhvdyBWTEFOcyBhcmUgY3JlYXRlZCwgY29uZmlndXJlZCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyaWRnaW5nIGFuZCBmb3J3YXJkaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aCByZXNwZWN0IHRvIHBhY2tldCB0YWdnaW5nIGFuZCB1bnRhZ2dpbmcuIEFsc28sIEkgbXVzdCBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlcyBvciBsb2NrIGNvbnRlbnRpb24gd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA5NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6NTMuODI3NDc2MzE0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvODAyMXEvdmxhbl9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMTQxOlxcdHtcXG4gMTQyOlxcdFxcdHN0cnVjdCBuZXQgKmxpbmtfbmV0ID0gcnRubF9uZXdsaW5rX2xpbmtfbmV0KHBhcmFtcyk7XFxuIDE0MzpcXHRcXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcXG4gMTQ0OlxcdFxcdHN0cnVjdCBubGF0dHIgKipkYXRhID0gcGFyYW1zLVxcdTAwM2VkYXRhO1xcbiAxNDU6XFx0XFx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVxcdTAwM2V0YjtcXG4gMTQ2OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjtcXG4gMTQ3OlxcdFxcdHVuc2lnbmVkIGludCBtYXhfbXR1O1xcbiAxNDg6XFx0XFx0X19iZTE2IHByb3RvO1xcbiAxNDk6XFx0XFx0aW50IGVycjtcXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0aWYgKCFkYXRhW0lGTEFfVkxBTl9JRF0pIHtcXG4gMTUyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJWTEFOIGlkIG5vdCBzcGVjaWZpZWRcXFwiKTtcXG4gMTUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNTQ6XFx0XFx0fVxcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHRpZiAoIXRiW0lGTEFfTElOS10pIHtcXG4gMTU3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJsaW5rIG5vdCBzcGVjaWZpZWRcXFwiKTtcXG4gMTU4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNTk6XFx0XFx0fVxcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRyZWFsX2RldiA9IF9fZGV2X2dldF9ieV9pbmRleChsaW5rX25ldCwgbmxhX2dldF91MzIodGJbSUZMQV9MSU5LXSkpO1xcbiAxNjI6XFx0XFx0aWYgKCFyZWFsX2Rldikge1xcbiAxNjM6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImxpbmsgZG9lcyBub3QgZXhpc3RcXFwiKTtcXG4gMTY0OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAxNjU6XFx0XFx0fVxcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRwcm90byA9IG5sYV9nZXRfYmUxNl9kZWZhdWx0KGRhdGFbSUZMQV9WTEFOX1BST1RPQ09MXSxcXG4gMTY4OlxcdFxcdFxcdFxcdFxcdCAgICAgaHRvbnMoRVRIX1BfODAyMVEpKTtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0dmxhbi1cXHUwMDNldmxhbl9wcm90byA9IHByb3RvO1xcbiAxNzE6XFx0XFx0dmxhbi1cXHUwMDNldmxhbl9pZFxcdCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9WTEFOX0lEXSk7XFxuIDE3MjpcXHRcXHR2bGFuLVxcdTAwM2VyZWFsX2RldlxcdCA9IHJlYWxfZGV2O1xcbiAxNzM6XFx0XFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IChyZWFsX2Rldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9YTUlUX0RTVF9SRUxFQVNFKTtcXG4gMTc0OlxcdFxcdHZsYW4tXFx1MDAzZWZsYWdzXFx0ID0gVkxBTl9GTEFHX1JFT1JERVJfSERSO1xcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRlcnIgPSB2bGFuX2NoZWNrX3JlYWxfZGV2KHJlYWxfZGV2LCB2bGFuLVxcdTAwM2V2bGFuX3Byb3RvLCB2bGFuLVxcdTAwM2V2bGFuX2lkLFxcbiAxNzc6XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbiAxNzg6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHRtYXhfbXR1ID0gbmV0aWZfcmVkdWNlc192bGFuX210dShyZWFsX2RldikgPyByZWFsX2Rldi1cXHUwMDNlbXR1IC0gVkxBTl9ITEVOIDpcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcmVhbF9kZXYtXFx1MDAzZW10dTtcXG4gMTgzOlxcdFxcdGlmICghdGJbSUZMQV9NVFVdKVxcbiAxODQ6XFx0XFx0XFx0ZGV2LVxcdTAwM2VtdHUgPSBtYXhfbXR1O1xcbiAxODU6XFx0XFx0ZWxzZSBpZiAoZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBtYXhfbXR1KVxcbiAxODY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdC8qIE5vdGU6IElmIHRoaXMgaW5pdGlhbCB2bGFuX2NoYW5nZWxpbmsoKSBmYWlscywgd2UgbmVlZFxcbiAxODk6XFx0XFx0ICogdG8gY2FsbCB2bGFuX2Rldl9mcmVlX2VncmVzc19wcmlvcml0eSgpIHRvIGZyZWUgbWVtb3J5LlxcbiAxOTA6XFx0XFx0ICovXFxuIDE5MTpcXHRcXHRlcnIgPSB2bGFuX2NoYW5nZWxpbmsoZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0aWYgKCFlcnIpXFxuIDE5NDpcXHRcXHRcXHRlcnIgPSByZWdpc3Rlcl92bGFuX2RldihkZXYsIGV4dGFjayk7XFxuIDE5NTpcXHRcXG4gMTk2OlxcdFxcdGlmIChlcnIpXFxuIDE5NzpcXHRcXHRcXHR2bGFuX2Rldl9mcmVlX2VncmVzc19wcmlvcml0eShkZXYpO1xcbiAxOTg6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTk5OlxcdH1cXG4gMjAwOlxcdFxcbiAyMDE6XFx0c3RhdGljIGlubGluZSBzaXplX3Qgdmxhbl9xb3NfbWFwX3NpemUodW5zaWduZWQgaW50IG4pXFxuIDIwMjpcXHR7XFxuIDIwMzpcXHRcXHRpZiAobiA9PSAwKVxcbiAyMDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwNTpcXHRcXHQvKiBJRkxBX1ZMQU5fe0VHUkVTUyxJTkdSRVNTfV9RT1MgKyBuICogSUZMQV9WTEFOX1FPU19NQVBQSU5HICovXFxuIDIwNjpcXHRcXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBubGF0dHIpKSArXFxuIDIwNzpcXHRcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmxhX3ZsYW5fcW9zX21hcHBpbmcpKSAqIG47XFxuIDIwODpcXHR9XFxuIDIwOTpcXHRcXG4gMjEwOlxcdHN0YXRpYyBzaXplX3Qgdmxhbl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAyMTE6XFx0e1xcbiAyMTI6XFx0XFx0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KGRldik7XFxuIDIxMzpcXHRcXG4gMjE0OlxcdFxcdHJldHVybiBubGFfdG90YWxfc2l6ZSgyKSArXFx0LyogSUZMQV9WTEFOX1BST1RPQ09MICovXFxuIDIxNTpcXHRcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoMikgK1xcdC8qIElGTEFfVkxBTl9JRCAqL1xcbiAyMTY6XFx0XFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaWZsYV92bGFuX2ZsYWdzKSkgKyAvKiBJRkxBX1ZMQU5fRkxBR1MgKi9cXG4gMjE3OlxcdFxcdCAgICAgICB2bGFuX3Fvc19tYXBfc2l6ZSh2bGFuLVxcdTAwM2Vucl9pbmdyZXNzX21hcHBpbmdzKSArXFxuIDIxODpcXHRcXHQgICAgICAgdmxhbl9xb3NfbWFwX3NpemUodmxhbi1cXHUwMDNlbnJfZWdyZXNzX21hcHBpbmdzKTtcXG4gMjE5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDg6NTMuODI3NjE4NDA0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzQ1MjgyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFZMQU4gRGV2aWNlIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IFZMQU4gZGV2aWNlcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIHByb2Nlc3MuIE15IGd1dCB0ZWxscyBtZSB0aGUgY29yZSBvZiB0aGlzIGxpZXMgaW4gYG5ldC84MDIxcS92bGFuLmNgLiBUaW1lIHRvIGRpZyBpbnRvIGByZWdpc3Rlcl92bGFuX2RldmAgYW5kIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSwgd2l0aG91dCBhIGRvdWJ0LCB0aGUgbGluY2hwaW5zIG9mIGFkZGluZyBhbmQgcmVtb3ZpbmcgVkxBTiBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSwgaG93IHRoZXkgaGFuZGxlIHRoZSBWTEFOIElEIGFzc2lnbm1lbnQgYW5kIHRyYWNraW5nLCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgYnJpZGdlIHNldHVwIChpZiBhbnkpLCBhbmQgb2YgY291cnNlLCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMsIGVuc3VyaW5nIHRoZSBmdW5jdGlvbnMgYXJlIHRocmVhZC1zYWZlIGFuZCBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgZGV2aWNlIHJlZ2lzdHJhdGlvbiByb3V0aW5lcyBiZWluZyBjYWxsZWQsIGJ1dCB0aGUgZGV2aWwncyBhbHdheXMgaW4gdGhlIGRldGFpbHMg4oCTIEknbSBob3BpbmcgdG8gZGlzY292ZXIgc29tZSBpbm5vdmF0aXZlIGhhbmRsaW5nIG9mIHRoZSA4MDIuMVEgdGFnZ2luZyBwcm90b2NvbCBpdHNlbGYuIFRoaXMgd2lsbCBiZSBhbiBpbnRlcmVzdGluZyBkZWVwIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODQzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0ODo1Ni4yMDIxNTEyNDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRpZiAoISh2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZMQU5fRkxBR19CUklER0VfQklORElORykpXFxuICA4MzpcXHRcXHRcXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xcbiAgODQ6XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHR2b2lkIHVucmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4gIDg3OlxcdHtcXG4gIDg4OlxcdFxcdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdihkZXYpO1xcbiAgODk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbi1cXHUwMDNlcmVhbF9kZXY7XFxuICA5MDpcXHRcXHRzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm87XFxuICA5MTpcXHRcXHRzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwO1xcbiAgOTI6XFx0XFx0dTE2IHZsYW5faWQgPSB2bGFuLVxcdTAwM2V2bGFuX2lkO1xcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHR2bGFuX2luZm8gPSBydG5sX2RlcmVmZXJlbmNlKHJlYWxfZGV2LVxcdTAwM2V2bGFuX2luZm8pO1xcbiAgOTc6XFx0XFx0QlVHX09OKCF2bGFuX2luZm8pO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRncnAgPSBcXHUwMDI2dmxhbl9pbmZvLVxcdTAwM2VncnA7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdGdycC1cXHUwMDNlbnJfdmxhbl9kZXZzLS07XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmICh2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZMQU5fRkxBR19NVlJQKVxcbiAxMDQ6XFx0XFx0XFx0dmxhbl9tdnJwX3JlcXVlc3RfbGVhdmUoZGV2KTtcXG4gMTA1OlxcdFxcdGlmICh2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZMQU5fRkxBR19HVlJQKVxcbiAxMDY6XFx0XFx0XFx0dmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoZGV2KTtcXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0dmxhbl9ncm91cF9zZXRfZGV2aWNlKGdycCwgdmxhbi1cXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCwgTlVMTCk7XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKHJlYWxfZGV2LCBkZXYpO1xcbiAxMTE6XFx0XFx0LyogQmVjYXVzZSB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZSgpIG1ha2VzIHN1cmUgYXQgbGVhc3Qgb25lIHJjdVxcbiAxMTI6XFx0XFx0ICogZ3JhY2UgcGVyaW9kIGlzIHJlc3BlY3RlZCBiZWZvcmUgZGV2aWNlIGZyZWVpbmcsXFxuIDExMzpcXHRcXHQgKiB3ZSBkb250IG5lZWQgdG8gY2FsbCBzeW5jaHJvbml6ZV9uZXQoKSBoZXJlLlxcbiAxMTQ6XFx0XFx0ICovXFxuIDExNTpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRpZiAoZ3JwLVxcdTAwM2Vucl92bGFuX2RldnMgPT0gMCkge1xcbiAxMTg6XFx0XFx0XFx0dmxhbl9tdnJwX3VuaW5pdF9hcHBsaWNhbnQocmVhbF9kZXYpO1xcbiAxMTk6XFx0XFx0XFx0dmxhbl9ndnJwX3VuaW5pdF9hcHBsaWNhbnQocmVhbF9kZXYpO1xcbiAxMjA6XFx0XFx0fVxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHR2bGFuX3ZpZF9kZWwocmVhbF9kZXYsIHZsYW4tXFx1MDAzZXZsYW5fcHJvdG8sIHZsYW5faWQpO1xcbiAxMjM6XFx0fVxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRpbnQgdmxhbl9jaGVja19yZWFsX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuIDEyNjpcXHRcXHRcXHRcXHRfX2JlMTYgcHJvdG9jb2wsIHUxNiB2bGFuX2lkLFxcbiAxMjc6XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAxMjg6XFx0e1xcbiAxMjk6XFx0XFx0Y29uc3QgY2hhciAqbmFtZSA9IHJlYWxfZGV2LVxcdTAwM2VuYW1lO1xcbiAxMzA6XFx0XFxuIDEzMTpcXHRcXHRpZiAocmVhbF9kZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQgfHxcXG4gMTMyOlxcdFxcdCAgICByZWFsX2Rldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfRVRIRVIpIHtcXG4gMTMzOlxcdFxcdFxcdHByX2luZm8oXFxcIlZMQU5zIG5vdCBzdXBwb3J0ZWQgb24gJXNcXFxcblxcXCIsIG5hbWUpO1xcbiAxMzQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlZMQU5zIG5vdCBzdXBwb3J0ZWQgb24gZGV2aWNlXFxcIik7XFxuIDEzNTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDEzNjpcXHRcXHR9XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGlmICh2bGFuX2ZpbmRfZGV2KHJlYWxfZGV2LCBwcm90b2NvbCwgdmxhbl9pZCkgIT0gTlVMTCkge1xcbiAxMzk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlZMQU4gZGV2aWNlIGFscmVhZHkgZXhpc3RzXFxcIik7XFxuIDE0MDpcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gMTQxOlxcdFxcdH1cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0cmV0dXJuIDA7XFxuIDE0NDpcXHR9XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGludCByZWdpc3Rlcl92bGFuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDE0NzpcXHR7XFxuIDE0ODpcXHRcXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcXG4gMTQ5OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tXFx1MDAzZXJlYWxfZGV2O1xcbiAxNTA6XFx0XFx0dTE2IHZsYW5faWQgPSB2bGFuLVxcdTAwM2V2bGFuX2lkO1xcbiAxNTE6XFx0XFx0c3RydWN0IHZsYW5faW5mbyAqdmxhbl9pbmZvO1xcbiAxNTI6XFx0XFx0c3RydWN0IHZsYW5fZ3JvdXAgKmdycDtcXG4gMTUzOlxcdFxcdGludCBlcnI7XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdGVyciA9IHZsYW5fdmlkX2FkZChyZWFsX2Rldiwgdmxhbi1cXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCk7XFxuIDE1NjpcXHRcXHRpZiAoZXJyKVxcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0dmxhbl9pbmZvID0gcnRubF9kZXJlZmVyZW5jZShyZWFsX2Rldi1cXHUwMDNldmxhbl9pbmZvKTtcXG4gMTYwOlxcdFxcdC8qIHZsYW5faW5mbyBzaG91bGQgYmUgdGhlcmUgbm93LiB2bGFuX3ZpZF9hZGQgdG9vayBjYXJlIG9mIGl0ICovXFxuIDE2MTpcXHRcXHRCVUdfT04oIXZsYW5faW5mbyk7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdGdycCA9IFxcdTAwMjZ2bGFuX2luZm8tXFx1MDAzZWdycDtcXG4gMTY0OlxcdFxcdGlmIChncnAtXFx1MDAzZW5yX3ZsYW5fZGV2cyA9PSAwKSB7XFxuIDE2NTpcXHRcXHRcXHRlcnIgPSB2bGFuX2d2cnBfaW5pdF9hcHBsaWNhbnQocmVhbF9kZXYpO1xcbiAxNjY6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDE2NzpcXHRcXHRcXHRcXHRnb3RvIG91dF92aWRfZGVsO1xcbiAxNjg6XFx0XFx0XFx0ZXJyID0gdmxhbl9tdnJwX2luaXRfYXBwbGljYW50KHJlYWxfZGV2KTtcXG4gMTY5OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAxNzA6XFx0XFx0XFx0XFx0Z290byBvdXRfdW5pbml0X2d2cnA7XFxuIDE3MTpcXHRcXHR9XFxuIDE3MjpcXHRcXG4gMTczOlxcdFxcdGVyciA9IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKGdycCwgdmxhbi1cXHUwMDNldmxhbl9wcm90bywgdmxhbl9pZCk7XFxuIDE3NDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMTc1OlxcdFxcdFxcdGdvdG8gb3V0X3VuaW5pdF9tdnJwO1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gMTc4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAxNzk6XFx0XFx0XFx0Z290byBvdXRfdW5pbml0X212cnA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ4OjU2LjIwMjM0NDIzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTg5MzEzNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIERldmljZSBSZWdpc3RyYXRpb24gYW5kIFVucmVnaXN0cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCBgdmxhbl9uZXdsaW5rYCwgYW5kIGB2bGFuX2RlbGxpbmtgIGFyZSB0aGUga2V5IGV4cG9ydGVkLCBub24tc3RhdGljIGVudHJ5IHBvaW50cyBoZXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgcmVnaXN0ZXJfdmxhbl9kZXZgIGFuZCBgdW5yZWdpc3Rlcl92bGFuX2RldmAgdG8gc2VlIHdoZXJlIHRoZXkgYXJlIGV4cG9ydGVkIGZyb20uIEFoYSwgYm90aCBvZiB0aG9zZSBhcmUgZGVmaW5lZCB3aXRoaW4gYG5ldC84MDIxcS92bGFuLmNgLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyB3b3VsZCBiZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGRlZXBlciBhbmFseXNpcyBhcyBGb2N1c1N5bWJvbHMg4oCTIGByZWdpc3Rlcl92bGFuX2RldmAsIGB1bnJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHZsYW5fbmV3bGlua2Agb3IgcG9zc2libHkgZXZlbiBgdmxhbl9jaGVja19yZWFsX2RldmAuIFRpbWUgdG8gY2hlY2sgb3V0IHRoZSBzeW1ib2wgZGVmaW5pdGlvbnMgYWNyb3NzIGBuZXQvODAyMXEvdmxhbi5jYCBhbmQgYWxzbyBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYCB0byBzZWUgd2hpY2ggYXJlIHRoZSByaWdodCBvbmVzIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjAyLjM5MTY2MDU1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcwNTUyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvODAyMXFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL3ZsYW5fY29yZS5jPTc2PXN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy05OS19XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjEwMDpFWFBPUlRfU1lNQk9MKF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdSk7XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTEwMS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTAyPXN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2Rldl9yZWFsX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTExMC19XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjExMTpFWFBPUlRfU1lNQk9MKHZsYW5fZGV2X3JlYWxfZGV2KTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMTEyLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz0xMTM9dTE2IHZsYW5fZGV2X3ZsYW5faWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMTYtfVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYzoxMTc6RVhQT1JUX1NZTUJPTCh2bGFuX2Rldl92bGFuX2lkKTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMTE4LVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz0xMTk9X19iZTE2IHZsYW5fZGV2X3ZsYW5fcHJvdG8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMjItfVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYzoxMjM6RVhQT1JUX1NZTUJPTCh2bGFuX2Rldl92bGFuX3Byb3RvKTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMTI0LVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTIyNz1pbnQgdmxhbl9mb3JfZWFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI1MS19XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjI1MjpFWFBPUlRfU1lNQk9MKHZsYW5fZm9yX2VhY2gpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0yNTMtXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTI1ND1pbnQgdmxhbl9maWx0ZXJfcHVzaF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI4MC19XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjI4MTpFWFBPUlRfU1lNQk9MKHZsYW5fZmlsdGVyX3B1c2hfdmlkcyk7XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI4Mi1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MjgzPXZvaWQgdmxhbl9maWx0ZXJfZHJvcF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI5Mi19XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjI5MzpFWFBPUlRfU1lNQk9MKHZsYW5fZmlsdGVyX2Ryb3Bfdmlkcyk7XFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTI5NC1cXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz0zMTg9aW50IHZsYW5fdmlkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzUxLX1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6MzUyOkVYUE9SVF9TWU1CT0wodmxhbl92aWRfYWRkKTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzUzLVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTM3MT12b2lkIHZsYW5fdmlkX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzkzLX1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6Mzk0OkVYUE9SVF9TWU1CT0wodmxhbl92aWRfZGVsKTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtMzk1LVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz0zOTY9aW50IHZsYW5fdmlkc19hZGRfYnlfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDI4LX1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NDI5OkVYUE9SVF9TWU1CT0wodmxhbl92aWRzX2FkZF9ieV9kZXYpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYy00MzAtXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTQzMT12b2lkIHZsYW5fdmlkc19kZWxfYnlfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDQ4LX1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NDQ5OkVYUE9SVF9TWU1CT0wodmxhbl92aWRzX2RlbF9ieV9kZXYpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYy00NTAtXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jPTQ1MT1ib29sIHZsYW5fdXNlc19kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy00NjEtfVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYzo0NjI6RVhQT1JUX1NZTUJPTCh2bGFuX3VzZXNfZGV2KTtcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0OTowMi40NTg3MjYwNThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA1Mjg5MTEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyBWTEFOIEhlYWRlciBEZWNsYXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgVkxBTiBoZWFkZXIncyBwdWJsaWNseSBhY2Nlc3NpYmxlIGNvbXBvbmVudHMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBgbmV0LzgwMjFxL3ZsYW4uaGAuIFRoaXMgaGVhZGVyIGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBjb25jaXNlIG92ZXJ2aWV3IG9mIHdoYXQncyAqbm90KiBzdGF0aWMgd2l0aGluIHRoZSBgbmV0LzgwMjFxL2AgZGlyZWN0b3J5LiBCeSBleGFtaW5pbmcgdGhlIG5vbi1zdGF0aWMgZGVjbGFyYXRpb25zIGhlcmUsIEkgY2FuIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBpbnRlcmZhY2VzIGFuZCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGRlc2lnbmVkIGZvciBleHRlcm5hbCB1c2Ugb3IgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIGtleSBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFZMQU4gdGFnZ2luZyBhbmQgdW50YWdnaW5nIG1lY2hhbmlzbXMgaW50ZXJhY3Qgd2l0aCBvdGhlciBuZXR3b3JrIGNvbXBvbmVudHMgYW5kIHByb3RvY29scy4gSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcywgZnVuY3Rpb24gcHJvdG90eXBlcyAoaWYgYW55KSwgYW5kIHBlcmhhcHMgc29tZSBlbnVtcyByZWxhdGVkIHRvIFZMQU4tc3BlY2lmaWMgcGFyYW1ldGVycyBsaWtlIHRoZSBWTEFOIElEIGFuZCBwcmlvcml0eS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGhvdyB0aGlzIG1vZHVsZSBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2OTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0OTowNS41MTE2MjEwMTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS92bGFuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdHJldHVybiBOVUxMO1xcbiAxMDM6XFx0fVxcbiAxMDQ6XFx0XFxuIDEwNTpcXHRzdGF0aWMgaW5saW5lIG5ldGRldl9mZWF0dXJlc190IHZsYW5fdG5sX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldilcXG4gMTA2OlxcdHtcXG4gMTA3OlxcdFxcdG5ldGRldl9mZWF0dXJlc190IHJldDtcXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0cmV0ID0gcmVhbF9kZXYtXFx1MDAzZWh3X2VuY19mZWF0dXJlcyBcXHUwMDI2XFxuIDExMDpcXHRcXHQgICAgICAoTkVUSUZfRl9DU1VNX01BU0sgfCBORVRJRl9GX0dTT19TT0ZUV0FSRSB8XFxuIDExMTpcXHRcXHQgICAgICAgTkVUSUZfRl9HU09fRU5DQVBfQUxMKTtcXG4gMTEyOlxcdFxcbiAxMTM6XFx0XFx0aWYgKChyZXQgXFx1MDAyNiBORVRJRl9GX0dTT19FTkNBUF9BTEwpIFxcdTAwMjZcXHUwMDI2IChyZXQgXFx1MDAyNiBORVRJRl9GX0NTVU1fTUFTSykpXFxuIDExNDpcXHRcXHRcXHRyZXR1cm4gKHJldCBcXHUwMDI2IH5ORVRJRl9GX0NTVU1fTUFTSykgfCBORVRJRl9GX0hXX0NTVU07XFxuIDExNTpcXHRcXHRyZXR1cm4gMDtcXG4gMTE2OlxcdH1cXG4gMTE3OlxcdFxcbiAxMTg6XFx0I2RlZmluZSB2bGFuX2dyb3VwX2Zvcl9lYWNoX2RldihncnAsIGksIGRldikgXFxcXFxcbiAxMTk6XFx0XFx0Zm9yICgoaSkgPSAwOyBpIFxcdTAwM2MgVkxBTl9QUk9UT19OVU0gKiBWTEFOX05fVklEOyBpKyspIFxcXFxcXG4gMTIwOlxcdFxcdFxcdGlmICgoKGRldikgPSBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgoZ3JwKSwgKGkpIC8gVkxBTl9OX1ZJRCwgXFxcXFxcbiAxMjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIChpKSAlIFZMQU5fTl9WSUQpKSlcXG4gMTIyOlxcdFxcbiAxMjM6XFx0aW50IHZsYW5fZmlsdGVyX3B1c2hfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XFxuIDEyNDpcXHR2b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XFxuIDEyNTpcXHRcXG4gMTI2OlxcdC8qIG5ldGRldl93b3JrIGV2ZW50cyBwcm9wYWdhdGVkIGZyb20gdGhlIHJlYWwgZGV2aWNlLCBzZWUgdmxhbl9kZXZfd29yaygpLiAqL1xcbiAxMjc6XFx0ZW51bSB7XFxuIDEyODpcXHRcXHRWTEFOX1dPUktfTElOS19TVEFURVxcdD0gQklUKDApLCAvKiBzeW5jIHVwL2Rvd24gd2l0aCByZWFsX2RldiAqL1xcbiAxMjk6XFx0XFx0VkxBTl9XT1JLX01UVVxcdFxcdD0gQklUKDEpLCAvKiBjbGFtcCBtdHUgdG8gcmVhbF9kZXYncyAqL1xcbiAxMzA6XFx0XFx0VkxBTl9XT1JLX0ZFQVRVUkVTXFx0PSBCSVQoMiksIC8qIHJlLWluaGVyaXQgcmVhbF9kZXYgZmVhdHVyZXMgKi9cXG4gMTMxOlxcdH07XFxuIDEzMjpcXHRcXG4gMTMzOlxcdHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcXG4gMTM0OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTM1OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHQvKiBmb3VuZCBpbiB2bGFuX2Rldi5jICovXFxuIDEzODpcXHR2b2lkIHZsYW5fZGV2X3NldF9pbmdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDEzOTpcXHRcXHRcXHRcXHRcXHQgICB1MzIgc2tiX3ByaW8sIHUxNiB2bGFuX3ByaW8pO1xcbiAxNDA6XFx0aW50IHZsYW5fZGV2X3NldF9lZ3Jlc3NfcHJpb3JpdHkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTQxOlxcdFxcdFxcdFxcdFxcdCB1MzIgc2tiX3ByaW8sIHUxNiB2bGFuX3ByaW8pO1xcbiAxNDI6XFx0dm9pZCB2bGFuX2Rldl9mcmVlX2VncmVzc19wcmlvcml0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gMTQzOlxcdGludCB2bGFuX2Rldl9jaGFuZ2VfZmxhZ3MoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZsYWcsIHUzMiBtYXNrKTtcXG4gMTQ0OlxcdHZvaWQgdmxhbl9kZXZfZ2V0X3JlYWxkZXZfbmFtZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpyZXN1bHQsXFxuIDE0NTpcXHRcXHRcXHRcXHQgICAgICAgc2l6ZV90IHNpemUpO1xcbiAxNDY6XFx0XFxuIDE0NzpcXHRpbnQgdmxhbl9jaGVja19yZWFsX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuIDE0ODpcXHRcXHRcXHRcXHRfX2JlMTYgcHJvdG9jb2wsIHUxNiB2bGFuX2lkLFxcbiAxNDk6XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gMTUwOlxcdHZvaWQgdmxhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gMTUxOlxcdGludCByZWdpc3Rlcl92bGFuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiAxNTI6XFx0dm9pZCB1bnJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcbiAxNTM6XFx0Ym9vbCB2bGFuX2Rldl9pbmhlcml0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTU0OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2Rldik7XFxuIDE1NTpcXHRcXG4gMTU2OlxcdHN0YXRpYyBpbmxpbmUgdTMyIHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MTYgdmxhbl90Y2kpXFxuIDE1ODpcXHR7XFxuIDE1OTpcXHRcXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmlwID0gdmxhbl9kZXZfcHJpdihkZXYpO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRyZXR1cm4gdmlwLVxcdTAwM2VpbmdyZXNzX3ByaW9yaXR5X21hcFsodmxhbl90Y2kgXFx1MDAzZVxcdTAwM2UgVkxBTl9QUklPX1NISUZUKSBcXHUwMDI2IDB4N107XFxuIDE2MjpcXHR9XFxuIDE2MzpcXHRcXG4gMTY0OlxcdCNpZmRlZiBDT05GSUdfVkxBTl84MDIxUV9HVlJQXFxuIDE2NTpcXHRpbnQgdmxhbl9ndnJwX3JlcXVlc3Rfam9pbihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gMTY2OlxcdHZvaWQgdmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIDE2NzpcXHRpbnQgdmxhbl9ndnJwX2luaXRfYXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiAxNjg6XFx0dm9pZCB2bGFuX2d2cnBfdW5pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gMTY5OlxcdGludCB2bGFuX2d2cnBfaW5pdCh2b2lkKTtcXG4gMTcwOlxcdHZvaWQgdmxhbl9ndnJwX3VuaW5pdCh2b2lkKTtcXG4gMTcxOlxcdCNlbHNlXFxuIDE3MjpcXHRzdGF0aWMgaW5saW5lIGludCB2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH1cXG4gMTczOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2d2cnBfcmVxdWVzdF9sZWF2ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7fVxcbiAxNzQ6XFx0c3RhdGljIGlubGluZSBpbnQgdmxhbl9ndnJwX2luaXRfYXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH1cXG4gMTc1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2d2cnBfdW5pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7fVxcbiAxNzY6XFx0c3RhdGljIGlubGluZSBpbnQgdmxhbl9ndnJwX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxcbiAxNzc6XFx0c3RhdGljIGlubGluZSB2b2lkIHZsYW5fZ3ZycF91bmluaXQodm9pZCkge31cXG4gMTc4OlxcdCNlbmRpZlxcbiAxNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjA1LjUxMTc2MjIzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTEzMjkyNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIDgwMi4xUSBWTEFOIFN1cHBvcnQgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUbyBjb21waWxlIHRoaXMgY29kZSwgSSBuZWVkIGBDT05GSUdfVkxBTl84MDIxUWAuIEknbSBkb3VibGUtY2hlY2tpbmcgaXRzIGRlcGVuZGVuY2llcyDigJMgbm90aGluZyBzaWduaWZpY2FudCwganVzdCB0aGUgdXN1YWwgTkVUL0lORVQgcmVxdWlyZW1lbnRzIHdoaWNoIGFyZSBnZW5lcmFsbHkgZW5hYmxlZC4gVGhlIG9wdGlvbmFsIGZlYXR1cmVzLCBgVkxBTl84MDIxUV9HVlJQYCBhbmQgYFZMQU5fODAyMVFfTVZSUGAsIGRlcGVuZCBvbiBgVkxBTl84MDIxUWAgd2hpY2ggaXMgZXhwZWN0ZWQuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgZnVuY3Rpb25zLiBGb2N1c1N5bWJvbHMgaW5kaWNhdGUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBkaXJlY3RseSBtb2RpZmllZCBvciBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZTogYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCBgdmxhbl92aWRfYWRkYCwgYHZsYW5fdmlkX2RlbGAsIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLCBhbmQgYHZsYW5fZm9yX2VhY2hgLiBJJ20gYWxzbyBsb29raW5nIGF0IGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIHdoaWNoIGlzIHN0YXRpYywgYW5kIGl0cyBjYWxsZXJzLiBUaGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHdoaWNoIGluY2x1ZGUgYHJlZ2lzdGVyX3ZsYW5fZGV2YCwgYHVucmVnaXN0ZXJfdmxhbl9kZXZgLCBgdmxhbl9mb3JfZWFjaGAsIGFuZCBgX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1YCwgYXJlIHRoZSBvbmVzIEkgcmVhbGx5IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by5cblxuTm93LCB0aGUgY3JpdGljYWwgcGFydDogZGV0ZXJtaW5pbmcgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgYW5zd2VyIGlzIGEgZGVmaW5pdGUgeWVzLiBUaGVyZSBoYXZlIGJlZW4gbWVtb3J5IG9yZGVyaW5nIGFuZCBSQ1UgcG9pbnRlciBhY2Nlc3MgZml4ZXMgaW4gODAyLjFRIFZMQU4gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgYHZsYW5fZGV2aWNlc19hcnJheXNgLiBJbmNvcnJlY3QgUkNVIGJhcnJpZXJzIG9yIGRlcmVmZXJlbmNlcyBjYW4gbGVhZCB0byBjb25jdXJyZW5jeSBidWdzIOKAkyBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZXZlbiBudWxsIGRlcmVmZXJlbmNlcyDigJMgd2hlbiBWTEFOIGRldmljZXMgYXJlIGNyZWF0ZWQsIGRlbGV0ZWQsIG9yIGxvb2tlZCB1cCBjb25jdXJyZW50bHkgd2l0aGluIHRoZSBSQ1UgY3JpdGljYWwgc2VjdGlvbi4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIEknbGwgc2V0IHRoZSBgRW5hYmxlQ29uZmlnc2AgdG8gaW5jbHVkZSBgXCJWTEFOXzgwMjFRXCJgLCBhbmQgSSdsbCBsaWtlbHkgaW5jbHVkZSBgXCJWTEFOXzgwMjFRX0dWUlBcImAgYW5kIGBcIlZMQU5fODAyMVFfTVZSUFwiYCBhcyB3ZWxsLiBGaW5hbGx5LCBteSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOiBgcmVnaXN0ZXJfdmxhbl9kZXZgLCBgdW5yZWdpc3Rlcl92bGFuX2RldmAsIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLCBhbmQgYHZsYW5fZm9yX2VhY2hgLiBJJ3ZlIGNvbmZpcm1lZCBhbGwgdGhlc2UgZWxlbWVudHMgYW5kIEknbSByZWFkeSB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYxMCwiT3V0cHV0VG9rZW5zIjoxOTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0OToxMi40MjUwNTc5MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU2MTQxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIlZMQU5fODAyMVFfR1ZSUFwiLFxuICAgIFwiVkxBTl84MDIxUV9NVlJQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnaXN0ZXJfdmxhbl9kZXZcIixcbiAgICBcInVucmVnaXN0ZXJfdmxhbl9kZXZcIixcbiAgICBcIl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdVwiLFxuICAgIFwidmxhbl9mb3JfZWFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgY29uY3VycmVuY3kgcHJpbWl0aXZlcyBhbmQgUkNVIGFubm90YXRpb25zIGZvciB0aGUgODAyLjFRIFZMQU4gZGV2aWNlIGxvb2t1cCB0YWJsZXMgKHN3aXRjaGluZyB0byBzbXBfc3RvcmVfcmVsZWFzZSwgc21wX2xvYWRfYWNxdWlyZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBhbmQgcmN1X2RlcmVmZXJlbmNlX3JhdykuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgVkxBTiBtYW5hZ2VtZW50IGFuZCBsb29rdXAgcGF0aHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJWTEFOXzgwMjFRX0dWUlBcIixcbiAgICBcIlZMQU5fODAyMVFfTVZSUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJ1bnJlZ2lzdGVyX3ZsYW5fZGV2XCIsXG4gICAgXCJfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VcIixcbiAgICBcInZsYW5fZm9yX2VhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGNvbmN1cnJlbmN5IHByaW1pdGl2ZXMgYW5kIFJDVSBhbm5vdGF0aW9ucyBmb3IgdGhlIDgwMi4xUSBWTEFOIGRldmljZSBsb29rdXAgdGFibGVzIChzd2l0Y2hpbmcgdG8gc21wX3N0b3JlX3JlbGVhc2UsIHNtcF9sb2FkX2FjcXVpcmUsIHJjdV9hc3NpZ25fcG9pbnRlciwgYW5kIHJjdV9kZXJlZmVyZW5jZV9yYXcpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgZm9yIFZMQU4gbWFuYWdlbWVudCBhbmQgbG9va3VwIHBhdGhzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjEyLjU1MDY3OTU3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDQyOTAwNzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjEyLjU1MTE2ODU0OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0NDI4NTExODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIFJDVSBhbm5vdGF0aW9ucyBhbmQgbWVtb3J5IG9yZGVyaW5nIHByaW1pdGl2ZXMgaW4gdGhlIDgwMi4xUSBWTEFOIHN1YnN5c3RlbSwgcmVwbGFjaW5nIHNtcF93bWIoKS9zbXBfcm1iKCkgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpL3NtcF9sb2FkX2FjcXVpcmUoKSBhbmQgYWRkaW5nIHJjdV9hc3NpZ25fcG9pbnRlcigpL3JjdV9kZXJlZmVyZW5jZV9yYXcoKSBhY2Nlc3NvcnMuIFRoZSBkeW5hbWljIGFycmF5cyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYygpIHdoaWNoIHplcm9lcyBhbGwgbWVtb3J5IHVwb24gYWxsb2NhdGlvbi4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgYWNjZXNzZWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBtZW1vcnkgbGlmZWN5Y2xlIGlzc3VlcyBpbiB0aGlzIGNvZGUgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMTk3ZmY5ZDI3ZWI4N2I3ODRlMjA1NDdjY2U4NTdjMDg5YjJkNTlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMDo0ODoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jXG5pbmRleCAyZDJlZmI4Nzc5NzVkLi5lYzlhN2NjOGFmYzc0IDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uY1xuKysrIGIvbmV0LzgwMjFxL3ZsYW4uY1xuQEAgLTQ5LDcgKzQ5LDcgQEAgY29uc3QgY2hhciB2bGFuX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OO1xuIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0ICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFx0dW5zaWduZWQgaW50IHZpZHg7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiBcdGludCBwaWR4O1xuQEAgLTcwLDEwICs3MCw4IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0aWYgKGFycmF5ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF9ybWIoKSBpbiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSgpICovXG4tXHRzbXBfd21iKCk7XG4tXG4tXHR2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdW3ZpZHhdID0gYXJyYXk7XG4rXHQvKiBwYWlyZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gX192bGFuX2dyb3VwX2dldF9kZXZpY2UoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oXG5pbmRleCBjNDFjYWFmOTQwOTVmLi5kODc0YWIzMjNkMzIwIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uaFxuQEAgLTIyLDggKzIyLDggQEAgZW51bSB2bGFuX3Byb3RvcyB7XG4gc3RydWN0IHZsYW5fZ3JvdXAge1xuIFx0dW5zaWduZWQgaW50XHRcdG5yX3ZsYW5fZGV2cztcbiBcdHN0cnVjdCBobGlzdF9ub2RlXHRobGlzdDtcdC8qIGxpbmtlZCBsaXN0ICovXG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXG4tXHRcdFx0XHRcdCAgICAgICBbVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUU107XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXG4rXHRcdFx0XHRcdFx0ICAgICBbVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUU107XG4gfTtcbiBcbiBzdHJ1Y3Qgdmxhbl9pbmZvIHtcbkBAIC01NCwxNSArNTQsMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqX192bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwaWR4LFxuIFx0XHRcdFx0XHRcdFx0IHUxNiB2bGFuX2lkKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuLVx0YXJyYXkgPSB2Zy1cdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXG4tXHRcdFx0XHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcbi1cbi1cdC8qIHBhaXJlZCB3aXRoIHNtcF93bWIoKSBpbiB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZCgpICovXG4tXHRzbXBfcm1iKCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xuK1x0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbitcdFx0XHRcdCBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dKTtcbiBcbi1cdHJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7XG4rXHRyZXR1cm4gYXJyYXkgPyByY3VfZGVyZWZlcmVuY2VfcmF3KGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSkgOiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuQEAgLTgyLDEzICs4MCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ncm91cF9zZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZyxcbiBcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IHBpZHggPSB2bGFuX3Byb3RvX2lkeCh2bGFuX3Byb3RvKTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xuIFxuIFx0aWYgKCF2ZyB8fCBwaWR4IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXHRhcnJheSA9IHZnLVx1MDAzZXZsYW5fZGV2aWNlc19hcnJheXNbcGlkeF1cbiBcdFx0XHRcdCAgICAgICBbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dO1xuLVx0YXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gZGV2O1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSwgZGV2KTtcbiB9XG4gXG4gLyogTXVzdCBiZSBpbnZva2VkIHdpdGggcmN1X3JlYWRfbG9jayBvciB3aXRoIFJUTkwuICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0OToxMi41NTExNjkzMzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2OTMzODIwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWTEFOIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBWTEFOIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC84MDIxcS92bGFuLmNgIGFuZCBgbmV0LzgwMjFxL3ZsYW4uaGAuIFRoaXMgc2VlbXMgbGlrZSBhIGNvbmN1cnJlbmN5LXJlbGF0ZWQgdXBkYXRlLCBqdWRnaW5nIGJ5IHRoZSBjaGFuZ2VzIGludm9sdmluZyBhdG9taWMgb3BlcmF0aW9ucyBhbmQgbWVtb3J5IGJhcnJpZXJzLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgX19yY3VgIGFuZCBjb3JyZXNwb25kaW5nIGF0b21pYyBvcGVyYXRpb25zIHN1cnJvdW5kaW5nIHRoZSBgdmxhbl9kZXZpY2VzX2FycmF5c2AgZGF0YSBzdHJ1Y3R1cmUuIEluIGB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZGAsIHRoZXkndmUgc3dhcHBlZCBgc3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTtgIGZvciBgc3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKiphcnJheTtgLiBUaGVuLCB0aGUgd3JpdGUgdG8gdGhpcyBhcnJheSBoYXMgY2hhbmdlZCwgdXNpbmcgYHNtcF9zdG9yZV9yZWxlYXNlYCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBgc21wX3dtYmAgZm9sbG93ZWQgYnkgYSBkaXJlY3QgYXNzaWdubWVudC4gVGhpcyBzaWduYWxzIGFuIGF0dGVtcHQgdG8gaW1wcm92ZSBzeW5jaHJvbml6YXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGRldmljZSBtYW5hZ2VtZW50LlxuXG5XaXRoaW4gYHZsYW4uaGAsIHRoZSBhcnJheSdzIGRlY2xhcmF0aW9uIHJlZmxlY3RzIHRoaXMgY2hhbmdlIHRvIHRoZSB1c2Ugb2YgYF9fcmN1YC4gSW4gYF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlYCwgdGhleSdyZSB1c2luZyBgc21wX2xvYWRfYWNxdWlyZWAgaW5zdGVhZCBvZiByZWFkIGFuZCBgc21wX3JtYmAsIHBsdXMgYW4gYHJjdV9kZXJlZmVyZW5jZV9yYXdgIHRvIGRlcmVmZXJlbmNlIHRoZSBhcnJheSBlbGVtZW50IHJhdGhlciB0aGFuIGRpcmVjdCBhY2Nlc3MuIFRoaXMgZGVmaW5pdGVseSBpcyByZWxhdGVkIHRvIHJlYWQtY29weS11cGRhdGUgc2VtYW50aWNzLiBTaW1pbGFybHksIHdpdGhpbiBgdmxhbl9ncm91cF9zZXRfZGV2aWNlYCwgdGhlIGFzc2lnbm1lbnQgdG8gdGhlIGFycmF5IG5vdyB1c2VzIGByY3VfYXNzaWduX3BvaW50ZXJgLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgdGhlIGBhcnJheWAgaXMgYWxsb2NhdGVkIHdpdGhpbiBgdmxhbl9ncm91cF9wcmVhbGxvY192aWRgLCBzbyBJJ2xsIGdyYWIgdGhlIGNvZGUgZnJvbSBgbmV0LzgwMjFxL3ZsYW4uY2AgYXJvdW5kIGxpbmVzIDQ1LTg1IHRvIHNlZSBob3cgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEZyb20gdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UsIEkgZXhwZWN0IHRvIHNlZSBhbiBleHBsaWNpdCBhbGxvY2F0aW9uLCBhbmQgcG9zc2libHkgYW5vdGhlciBmZW5jZSByZWxhdGVkIHRvIHRoZSBjcmVhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYGFycmF5YCBiZWZvcmUgaXQncyBhc3NpZ25lZCB0byBgdmctXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c2AuIExldCdzIHNlZSBob3cgdGhleSBoYW5kbGUgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjM4LjI0NDU1NDQxNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvODAyMXEvdmxhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdGNvbnN0IGNoYXIgdmxhbl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjtcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0LyogRW5kIG9mIGdsb2JhbCB2YXJpYWJsZXMgZGVmaW5pdGlvbnMuICovXFxuICA0ODpcXHRcXG4gIDQ5OlxcdHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbiAgNTA6XFx0XFx0XFx0XFx0XFx0ICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxcbiAgNTE6XFx0e1xcbiAgNTI6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKiphcnJheTtcXG4gIDUzOlxcdFxcdHVuc2lnbmVkIGludCB2aWR4O1xcbiAgNTQ6XFx0XFx0dW5zaWduZWQgaW50IHNpemU7XFxuICA1NTpcXHRcXHRpbnQgcGlkeDtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0cGlkeCAgPSB2bGFuX3Byb3RvX2lkeCh2bGFuX3Byb3RvKTtcXG4gIDYwOlxcdFxcdGlmIChwaWR4IFxcdTAwM2MgMClcXG4gIDYxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHR2aWR4ICA9IHZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOO1xcbiAgNjQ6XFx0XFx0YXJyYXkgPSB2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XTtcXG4gIDY1OlxcdFxcdGlmIChhcnJheSAhPSBOVUxMKVxcbiAgNjY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdHNpemUgPSBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UgKikgKiBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOO1xcbiAgNjk6XFx0XFx0YXJyYXkgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuICA3MDpcXHRcXHRpZiAoYXJyYXkgPT0gTlVMTClcXG4gIDcxOlxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0LyogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIF9fdmxhbl9ncm91cF9nZXRfZGV2aWNlKCkgKi9cXG4gIDc0OlxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVt2aWR4XSwgYXJyYXkpO1xcbiAgNzU6XFx0XFx0cmV0dXJuIDA7XFxuICA3NjpcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcXG4gIDc5OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gIDgwOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRpZiAoISh2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZMQU5fRkxBR19CUklER0VfQklORElORykpXFxuICA4MzpcXHRcXHRcXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xcbiAgODQ6XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHR2b2lkIHVucmVnaXN0ZXJfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4gIDg3OlxcdHtcXG4gIDg4OlxcdFxcdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdihkZXYpO1xcbiAgODk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbi1cXHUwMDNlcmVhbF9kZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjM4LjI0NDYyODIwNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyNjI4NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBWTEFOIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBjaXJjbGluZyBiYWNrLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0LzgwMjFxL3ZsYW4uaGAuIFRoaXMgbGlrZWx5IGhvbGRzIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIGZvciBWTEFOIHRhZ2dpbmcgYW5kIHVudGFnZ2luZyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB3ZSdsbCBmaW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgcmVwcmVzZW50aW5nIFZMQU4gaW50ZXJmYWNlcywgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIFZMQU4gSURzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBrZXkgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBWTEFOIGhlYWRlcnMuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCB0YWdnaW5nIHNjZW5hcmlvczogc2luZ2xlIHRhZ2dlZCwgZG91YmxlIHRhZ2dlZCAoUWluUSksIGFuZCBhbnkgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9yIG9wdGltaXphdGlvbnMgaW1wbGVtZW50ZWQgZm9yIHBlcmZvcm1hbmNlLiBJIGV4cGVjdCB3ZSdsbCBhbHNvIGZpbmQgc29tZSB1c2VmdWwgY29tbWVudHMgcmVnYXJkaW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMgYW5kIGFueSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBmb3IgaGFyZHdhcmUgb2ZmbG9hZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZpbGUgaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIFZMQU4gb3BlcmF0aW9uIGluIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjQwLjM5NzI1OTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC84MDIxcS92bGFuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgX19CRU5fVkxBTl84MDJfMVFfSU5DX19cXG4gICAzOlxcdCNkZWZpbmUgX19CRU5fVkxBTl84MDJfMVFfSU5DX19cXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0LyogaWYgdGhpcyBjaGFuZ2VzLCBhbGdvcml0aG0gd2lsbCBoYXZlIHRvIGJlIHJld29ya2VkIGJlY2F1c2UgdGhpc1xcbiAgMTA6XFx0ICogZGVwZW5kcyBvbiBjb21wbGV0ZWx5IGV4aGF1c3RpbmcgdGhlIFZMQU4gaWRlbnRpZmllciBzcGFjZS4gIFRodXNcXG4gIDExOlxcdCAqIGl0IGdpdmVzIGNvbnN0YW50IHRpbWUgbG9vay11cCwgYnV0IGluIG1hbnkgY2FzZXMgaXQgd2FzdGVzIG1lbW9yeS5cXG4gIDEyOlxcdCAqL1xcbiAgMTM6XFx0I2RlZmluZSBWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTICA4XFxuICAxNDpcXHQjZGVmaW5lIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU4gICAgIChWTEFOX05fVklEL1ZMQU5fR1JPVVBfQVJSQVlfU1BMSVRfUEFSVFMpXFxuICAxNTpcXHRcXG4gIDE2OlxcdGVudW0gdmxhbl9wcm90b3Mge1xcbiAgMTc6XFx0XFx0VkxBTl9QUk9UT184MDIxUVxcdD0gMCxcXG4gIDE4OlxcdFxcdFZMQU5fUFJPVE9fODAyMUFELFxcbiAgMTk6XFx0XFx0VkxBTl9QUk9UT19OVU0sXFxuICAyMDpcXHR9O1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdHJ1Y3Qgdmxhbl9ncm91cCB7XFxuICAyMzpcXHRcXHR1bnNpZ25lZCBpbnRcXHRcXHRucl92bGFuX2RldnM7XFxuICAyNDpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGhsaXN0O1xcdC8qIGxpbmtlZCBsaXN0ICovXFxuICAyNTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9QUk9UT19OVU1dXFxuICAyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFtWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTtcXG4gIDI3OlxcdH07XFxuICAyODpcXHRcXG4gIDI5OlxcdHN0cnVjdCB2bGFuX2luZm8ge1xcbiAgMzA6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqcmVhbF9kZXY7IC8qIFRoZSBldGhlcm5ldChsaWtlKSBkZXZpY2VcXG4gIDMxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAqIHRoZSB2bGFuIGlzIGF0dGFjaGVkIHRvLlxcbiAgMzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICovXFxuICAzMzpcXHRcXHRzdHJ1Y3Qgdmxhbl9ncm91cFxcdGdycDtcXG4gIDM0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHR2aWRfbGlzdDtcXG4gIDM1OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdG5yX3ZpZHM7XFxuICAzNjpcXHRcXHRib29sXFx0XFx0XFx0YXV0b192aWQwO1xcbiAgMzc6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0cmN1O1xcbiAgMzg6XFx0fTtcXG4gIDM5OlxcdFxcbiAgNDA6XFx0c3RhdGljIGlubGluZSBpbnQgdmxhbl9wcm90b19pZHgoX19iZTE2IHByb3RvKVxcbiAgNDE6XFx0e1xcbiAgNDI6XFx0XFx0c3dpdGNoIChwcm90bykge1xcbiAgNDM6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxUSk6XFxuICA0NDpcXHRcXHRcXHRyZXR1cm4gVkxBTl9QUk9UT184MDIxUTtcXG4gIDQ1OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfODAyMUFEKTpcXG4gIDQ2OlxcdFxcdFxcdHJldHVybiBWTEFOX1BST1RPXzgwMjFBRDtcXG4gIDQ3OlxcdFxcdGRlZmF1bHQ6XFxuICA0ODpcXHRcXHRcXHRXQVJOKDEsIFxcXCJpbnZhbGlkIFZMQU4gcHJvdG9jb2w6IDB4JTA0eFxcXFxuXFxcIiwgbnRvaHMocHJvdG8pKTtcXG4gIDQ5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNTA6XFx0XFx0fVxcbiAgNTE6XFx0fVxcbiAgNTI6XFx0XFxuICA1MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsXFxuICA1NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBpZHgsXFxuICA1NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdTE2IHZsYW5faWQpXFxuICA1NjpcXHR7XFxuICA1NzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdSAqKmFycmF5O1xcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoKSAqL1xcbiAgNjA6XFx0XFx0YXJyYXkgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9kZXZpY2VzX2FycmF5c1twaWR4XVxcbiAgNjE6XFx0XFx0XFx0XFx0XFx0IFt2bGFuX2lkIC8gVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0pO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRyZXR1cm4gYXJyYXkgPyByY3VfZGVyZWZlcmVuY2VfcmF3KGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSkgOiBOVUxMO1xcbiAgNjQ6XFx0fVxcbiAgNjU6XFx0XFxuICA2NjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2dyb3VwX2dldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbiAgNjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYmUxNiB2bGFuX3Byb3RvLFxcbiAgNjg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHUxNiB2bGFuX2lkKVxcbiAgNjk6XFx0e1xcbiAgNzA6XFx0XFx0aW50IHBpZHggPSB2bGFuX3Byb3RvX2lkeCh2bGFuX3Byb3RvKTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0aWYgKHBpZHggXFx1MDAzYyAwKVxcbiAgNzM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdHJldHVybiBfX3ZsYW5fZ3JvdXBfZ2V0X2RldmljZSh2ZywgcGlkeCwgdmxhbl9pZCk7XFxuICA3NjpcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2dyb3VwX3NldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbiAgNzk6XFx0XFx0XFx0XFx0XFx0XFx0IF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZCxcXG4gIDgwOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgODE6XFx0e1xcbiAgODI6XFx0XFx0aW50IHBpZHggPSB2bGFuX3Byb3RvX2lkeCh2bGFuX3Byb3RvKTtcXG4gIDgzOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXk7XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdGlmICghdmcgfHwgcGlkeCBcXHUwMDNjIDApXFxuICA4NjpcXHRcXHRcXHRyZXR1cm47XFxuICA4NzpcXHRcXHRhcnJheSA9IHZnLVxcdTAwM2V2bGFuX2RldmljZXNfYXJyYXlzW3BpZHhdXFxuICA4ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTtcXG4gIDg5OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihhcnJheVt2bGFuX2lkICUgVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTl0sIGRldik7XFxuICA5MDpcXHR9XFxuICA5MTpcXHRcXG4gIDkyOlxcdC8qIE11c3QgYmUgaW52b2tlZCB3aXRoIHJjdV9yZWFkX2xvY2sgb3Igd2l0aCBSVE5MLiAqL1xcbiAgOTM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9maW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuICA5NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxcbiAgOTU6XFx0e1xcbiAgOTY6XFx0XFx0c3RydWN0IHZsYW5faW5mbyAqdmxhbl9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwocmVhbF9kZXYtXFx1MDAzZXZsYW5faW5mbyk7XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdGlmICh2bGFuX2luZm8pXFxuICA5OTpcXHRcXHRcXHRyZXR1cm4gdmxhbl9ncm91cF9nZXRfZGV2aWNlKFxcdTAwMjZ2bGFuX2luZm8tXFx1MDAzZWdycCxcXG4gMTAwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ5OjQwLjM5NzM4Mzc5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1ODIyNjQ3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBSQ1UgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiByZWZpbmluZyB0aGUgY29uY3VycmVuY3kgYXNwZWN0cyBvZiA4MDIuMVEgVkxBTiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBjb250ZXh0LiBJdCdzIGVzc2VudGlhbGx5IHRpZ2h0ZW5pbmcgdXAgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgbWVtb3J5IGFjY2VzcyBzZW1hbnRpY3MuXG5cbkZpcnN0LCBJIHNlZSB0aGUgc3dpdGNoIGZyb20gcmF3IGBzbXBfd21iKClgIGFuZCBgc21wX3JtYigpYCB0byBgc21wX3N0b3JlX3JlbGVhc2VgIGFuZCBgc21wX2xvYWRfYWNxdWlyZWAuIFRoYXQncyBnb29kOyBpdCdzIGEgbW9yZSBtb2Rlcm4gYW5kIHJvYnVzdCBhcHByb2FjaCB0byBtZW1vcnkgYmFycmllcnMuIFRoZSB1c2Ugb2YgYHJjdV9kZXJlZmVyZW5jZV9yYXdgIGFuZCBgcmN1X2Fzc2lnbl9wb2ludGVyYCBmb3IgdGhlIG5ldF9kZXZpY2UgcG9pbnRlciB3aXRoaW4gdGhlIFJDVSBhcnJheSBpcyBhbHNvIHRoZSBjb3JyZWN0IHdheSB0byBoYW5kbGUgdGhlc2UgdHlwZXMgb2Ygc3RydWN0dXJlcyBpbiBhbiBSQ1UgY29udGV4dCwgYW5kIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYF9fcmN1YCBhbm5vdGF0aW9ucyB0byB0aGUgYHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1ICoqYXJyYXlgIGlzIHByZWNpc2VseSB3aGF0IEknZCBleHBlY3QgdG8gc2VlLCB0byBjbGVhcmx5IGlkZW50aWZ5IHRoYXQgdGhpcyBkYXRhIGlzIG1hbmFnZWQgYnkgUkNVLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IG1lbW9yeSBzYWZldHkuIFRoYW5rZnVsbHksIHRoZSBhcnJheSBhbGxvY2F0aW9uIHVzZXMgYGt6YWxsb2NgLCB3aGljaCBpbml0aWFsaXplcyB0aGUgbWVtb3J5IHRvIHplcm8uIFRoaXMgaXMgYSBjcnVjaWFsIGNoZWNrIHRvIHByZXZlbnQgYW55IGFjY2lkZW50YWwgcmVhZGluZyBvZiB1bmluaXRpYWxpemVkIHZhbHVlcy4gU2luY2UgdGhlcmUgYXJlIG5vIGNhbGxzIHRvIGNvcHlfdG9fdXNlciwgYW55IG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIHJlYWRzIGZyb20gc3RhY2sgdmFyaWFibGVzLCB0aGlzIG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gVGhpcyBwYXRjaCBpcyBwdXJlbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgUkNVIGFuZCBjb25jdXJyZW5jeSwgcGx1cyByZXNvbHZpbmcgdGhlIHNwYXJzZSBgX19yY3VgIGFubm90YXRpb24gaXNzdWVzLiBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55IGV4cG9zdXJlIHRvIGl0LCB3aGljaCBpcyB0aGUgbWFpbiBjb25jZXJuIGhlcmUuIEdpdmVuIHRoYXQgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUCBhcmUgYWxyZWFkeSBpbiBwbGFjZSwgdGhlIHVzdWFsIGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGJvdW5kcyBpc3N1ZXMgYXJlIGhhbmRsZWQsIHNvIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5TbywgbGV0IG1lIHNvbGlkaWZ5IHRoZSBjb25jbHVzaW9ucy4gV2UncmUgY29udmVydGluZyBiYXJyaWVyLWJhc2VkIFJDVSBwdWJsaXNoaW5nIHRvIHRoZSBtb3JlIGNvbnRlbXBvcmFyeSBhbmQgZXhwbGljaXQgYHNtcF9zdG9yZV9yZWxlYXNlYC9gc21wX2xvYWRfYWNxdWlyZWAgYXBwcm9hY2gsIGFsb25nIHdpdGggdGhlIGNvcnJlY3QgUkNVIGFubm90YXRpb25zIGFuZCBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgbWVtb3J5IGluIHF1ZXN0aW9uIGlzIGRlZmluaXRlbHkgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY2AuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQsIHVzZWQsIG9yIGxlYWtlZCBpbiBhbnkgd2F5LiBBbnkgY29uY3VycmVuY3kgaXNzdWVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBleGlzdGluZyBtZW1vcnkgc2FmZXR5IHRvb2xzLiBUaGVyZWZvcmUsIHRoZSBcIk5lZWRzS01TQU5cIiBmbGFnIGlzIGZhbHNlLiBJJ20gY29uZmlkZW50IGFib3V0IHRoaXMgYXNzZXNzbWVudCwgYW5kIGl0J3MgdGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODksIk91dHB1dFRva2VucyI6MTcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDk6NDYuOTc5NjUzNTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgUkNVIGFubm90YXRpb25zIGFuZCBtZW1vcnkgb3JkZXJpbmcgcHJpbWl0aXZlcyBpbiB0aGUgODAyLjFRIFZMQU4gc3Vic3lzdGVtLCByZXBsYWNpbmcgc21wX3dtYigpL3NtcF9ybWIoKSB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkvc21wX2xvYWRfYWNxdWlyZSgpIGFuZCBhZGRpbmcgcmN1X2Fzc2lnbl9wb2ludGVyKCkvcmN1X2RlcmVmZXJlbmNlX3JhdygpIGFjY2Vzc29ycy4gVGhlIGR5bmFtaWMgYXJyYXlzIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jKCkgd2hpY2ggemVyb2VzIGFsbCBtZW1vcnkgdXBvbiBhbGxvY2F0aW9uLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBhY2Nlc3NlZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5IG9yIG1lbW9yeSBsaWZlY3ljbGUgaXNzdWVzIGluIHRoaXMgY29kZSB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgUkNVIGFubm90YXRpb25zIGFuZCBtZW1vcnkgb3JkZXJpbmcgcHJpbWl0aXZlcyBpbiB0aGUgODAyLjFRIFZMQU4gc3Vic3lzdGVtLCByZXBsYWNpbmcgc21wX3dtYigpL3NtcF9ybWIoKSB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkvc21wX2xvYWRfYWNxdWlyZSgpIGFuZCBhZGRpbmcgcmN1X2Fzc2lnbl9wb2ludGVyKCkvcmN1X2RlcmVmZXJlbmNlX3JhdygpIGFjY2Vzc29ycy4gVGhlIGR5bmFtaWMgYXJyYXlzIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jKCkgd2hpY2ggemVyb2VzIGFsbCBtZW1vcnkgdXBvbiBhbGxvY2F0aW9uLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBhY2Nlc3NlZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5IG9yIG1lbW9yeSBsaWZlY3ljbGUgaXNzdWVzIGluIHRoaXMgY29kZSB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5dm2m[1] Phase: Succeeded StartedAt: 2026-09-02 20:49:59 +0000 UTC FinishedAt: 2026-09-02 20:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 20:49:59 +0000 UTC FinishedAt: 2026-09-02 20:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2] Phase: Succeeded StartedAt: 2026-09-02 20:49:59 +0000 UTC FinishedAt: 2026-09-03 00:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 20:49:59 +0000 UTC FinishedAt: 2026-09-03 00:39:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","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-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 20:49:59 +0000 UTC FinishedAt: 2026-09-02 20:50:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 20:49:59 +0000 UTC FinishedAt: 2026-09-02 20:50:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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-workflow5dm2m/series-workflow5dm2m-convert-artifact-2280032133/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 20:50:09 +0000 UTC FinishedAt: 2026-09-02 21:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 20:50:09 +0000 UTC FinishedAt: 2026-09-02 21:11:06 +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:*aa50ba90-82f7-4a4f-9666-b0c298e6bea5,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-workflow5dm2m/series-workflow5dm2m-convert-artifact-2280032133/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": "14c0263d-589d-4fda-9f35-5cbe1887ec76", "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-workflow5dm2m/series-workflow5dm2m-build-action-2024096555/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 20:50:09 +0000 UTC FinishedAt: 2026-09-02 21:10:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*aa50ba90-82f7-4a4f-9666-b0c298e6bea5,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-workflow5dm2m/series-workflow5dm2m-convert-artifact-2280032133/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": "14c0263d-589d-4fda-9f35-5cbe1887ec76", "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-workflow5dm2m/series-workflow5dm2m-build-action-2024096555/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 21:11:06 +0000 UTC FinishedAt: 2026-09-02 21:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 21:11:06 +0000 UTC FinishedAt: 2026-09-02 21:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 21:11:06 +0000 UTC FinishedAt: 2026-09-02 21:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 21:11:06 +0000 UTC FinishedAt: 2026-09-02 21:11:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","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-workflow5dm2m/series-workflow5dm2m-convert-artifact-3572909152/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 21:11:27 +0000 UTC FinishedAt: 2026-09-02 21:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 21:11:27 +0000 UTC FinishedAt: 2026-09-02 21:13:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*14c0263d-589d-4fda-9f35-5cbe1887ec76,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-workflow5dm2m/series-workflow5dm2m-build-action-2024096555/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-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 21:13:18 +0000 UTC FinishedAt: 2026-09-02 21:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 21:13:18 +0000 UTC FinishedAt: 2026-09-02 21:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 21:13:18 +0000 UTC FinishedAt: 2026-09-02 21:34:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 21:13:18 +0000 UTC FinishedAt: 2026-09-02 21:34:17 +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:*aa50ba90-82f7-4a4f-9666-b0c298e6bea5,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-workflow5dm2m/series-workflow5dm2m-convert-artifact-3572909152/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": "dead8c7a-6e74-46a1-a58b-ef2f77ee7ee5", "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-workflow5dm2m/series-workflow5dm2m-build-action-795390236/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 21:13:18 +0000 UTC FinishedAt: 2026-09-02 21:34:07 +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:*aa50ba90-82f7-4a4f-9666-b0c298e6bea5,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-workflow5dm2m/series-workflow5dm2m-convert-artifact-3572909152/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": "dead8c7a-6e74-46a1-a58b-ef2f77ee7ee5", "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-workflow5dm2m/series-workflow5dm2m-build-action-795390236/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 21:34:17 +0000 UTC FinishedAt: 2026-09-02 21:34:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 21:34:17 +0000 UTC FinishedAt: 2026-09-02 21:34:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 21:34:17 +0000 UTC FinishedAt: 2026-09-02 21:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 21:34:17 +0000 UTC FinishedAt: 2026-09-02 21:36:06 +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:*dead8c7a-6e74-46a1-a58b-ef2f77ee7ee5,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-workflow5dm2m/series-workflow5dm2m-build-action-795390236/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-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 21:36:16 +0000 UTC FinishedAt: 2026-09-03 00:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 21:36:16 +0000 UTC FinishedAt: 2026-09-03 00:39:08 +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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"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:*14c0263d-589d-4fda-9f35-5cbe1887ec76,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dead8c7a-6e74-46a1-a58b-ef2f77ee7ee5,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-workflow5dm2m/series-workflow5dm2m-build-action-2024096555/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-workflow5dm2m/series-workflow5dm2m-build-action-795390236/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 21:36:16 +0000 UTC FinishedAt: 2026-09-02 21:36:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 21:36:16 +0000 UTC FinishedAt: 2026-09-02 21:36:20 +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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"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-workflow5dm2m/series-workflow5dm2m-convert-artifact-3176190649/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 21:36:16 +0000 UTC FinishedAt: 2026-09-02 21:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 21:36:16 +0000 UTC FinishedAt: 2026-09-02 21:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 21:36:16 +0000 UTC FinishedAt: 2026-09-02 21:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 21:36:26 +0000 UTC FinishedAt: 2026-09-03 00:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dm2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"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":["register_vlan_dev","unregister_vlan_dev","__vlan_find_dev_deep_rcu","vlan_for_each"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d0ec95a8a4e79f2fd6063fc8932415db8c227689","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","VLAN_8021Q_GVRP","VLAN_8021Q_MVRP"],"series_id":"a6340ab3-120a-46b5-8798-e750e05b67fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 21:36:26 +0000 UTC FinishedAt: 2026-09-03 00:38:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*14c0263d-589d-4fda-9f35-5cbe1887ec76,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dead8c7a-6e74-46a1-a58b-ef2f77ee7ee5,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-workflow5dm2m/series-workflow5dm2m-build-action-2024096555/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-workflow5dm2m/series-workflow5dm2m-build-action-795390236/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-workflow5dm2m/series-workflow5dm2m-convert-artifact-3176190649/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,}