Name: series-workflow2xfxw Phase: Succeeded StartedAt: 2026-09-06 16:50:27 +0000 UTC FinishedAt: 2026-09-06 20:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[0] Phase: Succeeded StartedAt: 2026-09-06 16:50:27 +0000 UTC FinishedAt: 2026-09-06 17:11:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 16:50:27 +0000 UTC FinishedAt: 2026-09-06 17:11:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACSEC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACSEC" ], "series_id": "d52fda5e-3d27-4817-b735-7ad4cc46ec4d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macsec_changelink" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ1NFQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY3NlY19jaGFuZ2VsaW5rJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rKCkgdG8gdmVyaWZ5IHBlcm1pc3Npb25zIHdoZW4gY2hhbmdpbmcgc2V0dGluZ3Mgb2YgYW4gb2ZmbG9hZGVkIE1BQ3NlYyBkZXZpY2UgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcy5cblxuVGhpcyBpcyBwdXJlbHkgYSBwZXJtaXNzaW9uIHZhbGlkYXRpb24gY2hlY2sgcmV0dXJuaW5nIC1FUEVSTSBhbmQgc2V0dGluZyBhbiBlcnJvciBzdHJpbmcgaW4gZXh0YWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgbWVtb3J5IHN0cnVjdHVyZXMsIGJ1ZmZlcnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rIHRvIHJlc3RyaWN0IGNoYW5naW5nIE1BQ3NlYyBkZXZpY2Ugc2V0dGluZ3Mgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuYW1lc3BhY2UuIE1BQ3NlYyBkZXZpY2VzIGFyZSBmdWxseSB2aXJ0dWFsL3NvZnR3YXJlLWVtdWxhdGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG1lc3NhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjBkNGVhNzBmN2UwYTdmMzlmZmZmYzhlZTJjYmRhNjcwNmM5Nzc2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MDk6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuaW5kZXggNmY5ZjNhY2VmZmFhZC4uMGYzNTFlODM5ZjE0NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3NlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuQEAgLTE5LDYgJiM0MzsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyb19jZWxscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXHUwMDNlXG5AQCAtMzk1OSw2ICYjNDM7Mzk2MCwxMyBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVx1MDAzZXJlYWxfZGV2KSkpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fFxuIFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfSUNWX0xFTl0gfHxcbiBcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1NDSV0gfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNTRUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNzZWNfY2hhbmdlbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsgdG8gcmVzdHJpY3QgY2hhbmdpbmcgTUFDc2VjIGRldmljZSBzZXR0aW5ncyB3aGVuIHRoZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5hbWVzcGFjZS4gTUFDc2VjIGRldmljZXMgYXJlIGZ1bGx5IHZpcnR1YWwvc29mdHdhcmUtZW11bGF0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbWVzc2FnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMGQ0ZWE3MGY3ZTBhN2YzOWZmZmZjOGVlMmNiZGE2NzA2Yzk3NzY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAxNzowOToyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3NlYy5jIGIvZHJpdmVycy9uZXQvbWFjc2VjLmMKaW5kZXggNmY5ZjNhY2VmZmFhZC4uMGYzNTFlODM5ZjE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjc2VjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWFjc2VjLmMKQEAgLTE5LDYgJiM0MzsxOSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2dyb19jZWxscy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9tYWNzZWMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0X21ldGFkYXRhLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9ydG5ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZGV2X2xvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oJmd0OwpAQCAtMzk1OSw2ICYjNDM7Mzk2MCwxMyBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sCiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gfHwgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLSZndDtyZWFsX2RldikpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7Q2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CX0KJiM0MzsKIAlpZiAoZGF0YVtJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEVdIHx8CiAJICAgIGRhdGFbSUZMQV9NQUNTRUNfSUNWX0xFTl0gfHwKIAkgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTcKCQkJCQkJCW91dHB1dDogNjMKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGNvZGUgY2hhbmdlLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBuZXR3b3JrIHNlY3VyaXR5IGFuZCBrZXJuZWwgZHJpdmVyczoKCioqQW5hbHl6aW5nIGEgTUFDc2VjIFBhdGNoKioKCkFscmlnaHQsIGEgcGF0Y2ggaGFzIGhpdCBteSBkZXNrIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9uZXQvbWFjc2VjLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtYWNzZWNfY2hhbmdlbGlua2AgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCBJJiMzOTttIGdvaW5nIGludG8gdHJpYWdlIG1vZGUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gKnVuZGVyc3RhbmQqIHdoYXQgdGhpcyBtb2RpZmljYXRpb24gaXMgKmludGVuZGVkKiB0byBkbywgYW5kICp3aHkqLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nOgoKKiAgIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoaXMgZmlsZSwgdGhlIG1vZGlmaWNhdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFdoYXQgaXMgdGhlIGhpc3RvcnkgaGVyZT8gSXMgdGhpcyBhIG5ldyBmZWF0dXJlLCBhIGJ1ZyBmaXgsIG9yIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgYGdpdCBsb2dgIG9uIHRoYXQgc3BlY2lmaWMgZmlsZSB0byBzZWUgdGhlIHJlY2VudCBjb21taXRzLiBJIG5lZWQgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgaW50ZW50IG9mIGBtYWNzZWNfY2hhbmdlbGlua2AsIGFuZCB0aGlzIGRyaXZlciBpbiBnZW5lcmFsLgoqICAgTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIG90aGVyIGZpbGVzIHRoaXMgZnVuY3Rpb24gY2FsbHMgb3IgaXMgY2FsbGVkIGJ5LiBJIHdhbnQgdG8gYnVpbGQgYSBjYWxsIGdyYXBoIG1lbnRhbGx5LiBBbnkgS2NvbmZpZyBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBjaGVjay4gQXJlIGFueSBuZXcgS2NvbmZpZyBvcHRpb25zIGludHJvZHVjZWQsIGNoYW5nZWQsIG9yIHJlbW92ZWQ/IFdoYXQga2VybmVsIHZlcnNpb25zIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/CiogICBJIHdhbnQgYSBxdWljayB3YXkgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSwgc28gYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHdpbGwgYmUgbXkgdG9vbHMgb2YgY2hvaWNlLiBXaGF0IGlzIHRoZSBkaXJlY3QgY29udGV4dCBhcm91bmQgdGhlIG1vZGlmaWVkIGxpbmVzPyBEb2VzIHRoaXMgY2hhbmdlIGRlcGVuZCBvbiBvdGhlciBjaGFuZ2VzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2U/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSAqaW1wYWN0KiBvZiB0aGlzIHBhdGNoLCBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZS4gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmc/IElzIHRoaXMgcHJvcGVybHkgdGVzdGVkPyBJIHdpbGwgbmVlZCB0byBiZSB2ZXJ5IHJpZ29yb3VzIG9uIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWFjc2VjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NTA6XHRcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjM5NTE6XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjM5NTI6XHR7XG4zOTUzOlx0XHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbjM5NTQ6XHRcdGJvb2wgbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gZmFsc2U7XG4zOTU1Olx0XHRlbnVtIG1hY3NlY19vZmZsb2FkIG9mZmxvYWQ7XG4zOTU2Olx0XHRzdHJ1Y3QgbWFjc2VjX3R4X3NjIHR4X3NjO1xuMzk1NzpcdFx0c3RydWN0IG1hY3NlY19zZWN5IHNlY3k7XG4zOTU4Olx0XHRpbnQgcmV0O1xuMzk1OTpcdFxuMzk2MDpcdFx0aWYgKCFkYXRhKVxuMzk2MTpcdFx0XHRyZXR1cm4gMDtcbjM5NjI6XHRcbjM5NjM6XHRcdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuMzk2NDpcdFx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXHUwMDNlcmVhbF9kZXYpKSkge1xuMzk2NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4zOTY2Olx0XHRcdFx0ICAgICAgIFwmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcJiMzNDspO1xuMzk2NzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMzk2ODpcdFx0fVxuMzk2OTpcdFxuMzk3MDpcdFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fFxuMzk3MTpcdFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfSUNWX0xFTl0gfHxcbjM5NzI6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1NDSV0gfHxcbjM5NzM6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1BPUlRdKVxuMzk3NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM5NzU6XHRcbjM5NzY6XHRcdC8qIEtlZXAgYSBjb3B5IG9mIHVubW9kaWZpZWQgc2VjeSBhbmQgdHhfc2MsIGluIGNhc2UgdGhlIG9mZmxvYWRcbjM5Nzc6XHRcdCAqIHByb3BhZ2F0aW9uIGZhaWxzLCB0byByZXZlcnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uLlxuMzk3ODpcdFx0ICovXG4zOTc5Olx0XHRtZW1jcHkoXHUwMDI2c2VjeSwgXHUwMDI2bWFjc2VjLVx1MDAzZXNlY3ksIHNpemVvZihzZWN5KSk7XG4zOTgwOlx0XHRtZW1jcHkoXHUwMDI2dHhfc2MsIFx1MDAyNm1hY3NlYy1cdTAwM2VzZWN5LnR4X3NjLCBzaXplb2YodHhfc2MpKTtcbjM5ODE6XHRcbjM5ODI6XHRcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xuMzk4MzpcdFx0aWYgKHJldClcbjM5ODQ6XHRcdFx0Z290byBjbGVhbnVwO1xuMzk4NTpcdFxuMzk4NjpcdFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pIHtcbjM5ODc6XHRcdFx0b2ZmbG9hZCA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSk7XG4zOTg4Olx0XHRcdGlmIChtYWNzZWMtXHUwMDNlb2ZmbG9hZCAhPSBvZmZsb2FkKSB7XG4zOTg5Olx0XHRcdFx0bWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gdHJ1ZTtcbjM5OTA6XHRcdFx0XHRyZXQgPSBtYWNzZWNfdXBkYXRlX29mZmxvYWQoZGV2LCBvZmZsb2FkLCBleHRhY2spO1xuMzk5MTpcdFx0XHRcdGlmIChyZXQpXG4zOTkyOlx0XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4zOTkzOlx0XHRcdH1cbjM5OTQ6XHRcdH1cbjM5OTU6XHRcbjM5OTY6XHRcdC8qIElmIGgvdyBvZmZsb2FkaW5nIGlzIGF2YWlsYWJsZSwgcHJvcGFnYXRlIHRvIHRoZSBkZXZpY2UgKi9cbjM5OTc6XHRcdGlmICghbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlIFx1MDAyNlx1MDAyNiBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIHtcbjM5OTg6XHRcdFx0Y29uc3Qgc3RydWN0IG1hY3NlY19vcHMgKm9wcztcbjM5OTk6XHRcdFx0c3RydWN0IG1hY3NlY19jb250ZXh0IGN0eDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDU0VDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMDI9Y29uZmlnIEFNVFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzE3LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMTg6Y29uZmlnIE1BQ1NFQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMTktXHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xQUUgTUFDLWxldmVsIGVuY3J5cHRpb24gKE1BQ3NlYylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTA5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTUFDU0VDIEtjb25maWcqKgoKT2theSwgdGltZSB0byBnZXQgZ3JhbnVsYXIuIEJlZm9yZSBJIHN0YXJ0IG1ha2luZyBhbnkgY2hhbmdlcywgSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBmb3IgTUFDU0VDLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZpbmRpbmcgdGhlIGJvb2xlYW4gc3dpdGNoZXM7IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBob3cgaXQmIzM5O3MgY3VycmVudGx5IGludGVncmF0ZWQsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYW5kIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIGNvbnNpZGVyYXRpb25zIHRoYXQgYXJlIHJlZmxlY3RlZCBpbiB0aGUgS2NvbmZpZz8gSXQmIzM5O3MgYWxsIGFib3V0IGJ1aWxkaW5nIGEgc29saWQgZm91bmRhdGlvbiBvZiB1bmRlcnN0YW5kaW5nIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgbWFraW5nIGEgc2luZ2xlIHR3ZWFrLiBUaGlzIHdpbGwgaGVscCBwcmV2ZW50IHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIGRvd24gdGhlIGxpbmUgYW5kIGFsbG93IG1lIHRvIGRldGVybWluZSBpZiBjaGFuZ2VzIHNob3VsZCBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXJzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMzE2Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGFtdC5cbiAzMTc6XHRcbiAzMTg6XHRjb25maWcgTUFDU0VDXG4gMzE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xQUUgTUFDLWxldmVsIGVuY3J5cHRpb24gKE1BQ3NlYylcJiMzNDtcbiAzMjA6XHRcdHNlbGVjdCBDUllQVE9cbiAzMjE6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gMzIyOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuIDMyMzpcdFx0c2VsZWN0IEdST19DRUxMU1xuIDMyNDpcdFx0aGVscFxuIDMyNTpcdFx0ICAgTUFDc2VjIGlzIGFuIGVuY3J5cHRpb24gc3RhbmRhcmQgZm9yIEV0aGVybmV0LlxuIDMyNjpcdFxuIDMyNzpcdGNvbmZpZyBORVRDT05TT0xFXG4gMzI4Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG4gMzI5Olx0XHRkZXBlbmRzIG9uIFBSSU5US1xuIDMzMDpcdFx0aGVscFxuIDMzMTpcdFx0ICBJZiB5b3Ugd2FudCB0byBsb2cga2VybmVsIG1lc3NhZ2VzIG92ZXIgdGhlIG5ldHdvcmssIGVuYWJsZSB0aGlzLlxuIDMzMjpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzMzOlx0XG4gMzM0Olx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTUFDc2VjIEV4cGxvcmF0aW9uOiBEaXZpbmcgaW50byB0aGUgVmlydHVhbCBOZXR3b3JrIERldmljZSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhpcyBgbWFjc2VjLmNgIGRyaXZlciwgd2hpY2ggZnJvbSB0aGUgb3V0c2V0LCBzZWVtcyB0byBiZSBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgZHJpdmVyLiBJdCBjcmVhdGVzIHRoZXNlIE1BQ3NlYyBpbnRlcmZhY2VzLCBhbmQgaXQmIzM5O3MgYWxsIGhhbmRsZWQgdGhyb3VnaCBgcnRubGAgYW5kIGBuZXRsaW5rYC4gVGhlIGtleSB0YWtlYXdheSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgdmlydHVhbCwgZnVsbHkgZW11bGF0ZWQsIG1lYW5pbmcgaXQgc2l0cyBvbiB0b3Agb2Ygc29tZXRoaW5nIGxpa2UgYSBkdW1teSwgdmV0aCwgb3IgbG9vcGJhY2sgZGV2aWNlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIG5ldHdvcmsgc3RhY2suCgpJdCBsb29rcyBsaWtlIFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGNvbmZpZ3VyaW5nIHRoZXNlIE1BQ3NlYyBkZXZpY2VzIHRocm91Z2ggbmV0bGluaywgc3BlY2lmaWNhbGx5IHJ0bmV0bGluayBhbmQgZ2VuZXRsaW5rLCB1c2luZyBgSUZMQV9JTkZPX0tJTkQgJiMzNDttYWNzZWMmIzM0O2AuIFRoYXQgZ2l2ZXMgbWUgYSBncmVhdCBmb290aG9sZCBmb3IgZnV6emluZyBpZiBJIG5lZWQgaXQuCgpOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIGFuZCByZWxhdGlvbnNoaXBzIGhlcmUgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgZHJpdmVyIHRob3JvdWdobHkuIEkgc2hvdWxkIGZpbmQgd2hlcmUgYG1hY3NlY19jaGFuZ2VsaW5rYCBpcyBjYWxsZWQgd2l0aGluIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBlbHNlIGluIGBtYWNzZWMuY2AgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGZ1bmN0aW9uaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucywgbGlrZWx5LiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBpbm5lciB3b3JraW5ncyBvZiB0aGlzIHZpcnR1YWwgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY3NlY19jaGFuZ2VsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWFjc2VjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWFjc2VjLmM9Mzg1Nz1zdGF0aWMgdm9pZCBtYWNzZWNfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zODcwLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzg3MTpzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzg3Mi1cdFx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk0OC1cbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM5NDk6c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk1MC1cdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTc2LVx0LyogS2VlcCBhIGNvcHkgb2YgdW5tb2RpZmllZCBzZWN5IGFuZCB0eF9zYywgaW4gY2FzZSB0aGUgb2ZmbG9hZFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk3NzpcdCAqIHByb3BhZ2F0aW9uIGZhaWxzLCB0byByZXZlcnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uLlxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk3OC1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5ODEtXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTgyOlx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgZGF0YSk7XG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTgzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00MTczPXN0YXRpYyBpbnQgbWFjc2VjX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00MjYyLVx0aWYgKGRhdGEpIHtcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjQyNjM6XHRcdGVyciA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDI2NC1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00NDQ2PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDUzLVx0Lm5ld2xpbmtcdD0gbWFjc2VjX25ld2xpbmssXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDU0Olx0LmNoYW5nZWxpbmtcdD0gbWFjc2VjX2NoYW5nZWxpbmssXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDU1LVx0LmRlbGxpbmtcdD0gbWFjc2VjX2RlbGxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMTYKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1BQ3NlYyBMaW5rIENoYW5nZSBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtYWNzZWNfY2hhbmdlbGlua2AgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBuZXRsaW5rIGNoYW5nZWxpbmsgaGFuZGxlciBmb3IgTUFDc2VjIG5ldHdvcmsgZGV2aWNlcy4gSXQgc2VlbXMgdGhhdCB3aGVuIGEgdXNlciwgZWl0aGVyIHByaXZpbGVnZWQgb3IgdW5wcml2aWxlZ2VkIGJ1dCB3aXRoIG5ldGxpbmsgYWNjZXNzLCBzZW5kcyBhbiBSVE1fTkVXTElOSyBvciBSVE1fU0VUTElOSyBtZXNzYWdlIHRvIG1vZGlmeSBhIE1BQ3NlYyBsaW5rLCB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCBnZXRzIGNhbGxlZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGEgcGVybWlzc2lvbiBjaGVjaywgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgLCB3aGljaCBzb3VuZHMgbGlrZSBpdCYjMzk7cyBnb2luZyB0byBiZSBrZXksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggTUFDc2VjIGRldmljZXMgd2hlcmUgdGhlIHVuZGVybHlpbmcgcmVhbCBkZXZpY2UgbGl2ZXMgaW4gYSBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2Ugb3Igd2hlbiBvZmZsb2FkaW5nIGlzIGludm9sdmVkLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gc29tZXRoaW5nIEkgY2FuIGVmZmVjdGl2ZWx5IGZ1enogaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQnV0LCB5ZXMsIGl0JiMzOTtzIHRvdGFsbHkgcmVhY2hhYmxlIGJlY2F1c2UgSSBjYW4gY3JlYXRlIGFuZCBtYW5pcHVsYXRlIHRoZXNlIGBtYWNzZWNgIGRldmljZXMgdXNpbmcgbmV0bGluayBvbiB0b3Agb2YgdmlydHVhbCBkZXZpY2VzIGxpa2UgYHZldGhgLCBgZHVtbXlgLCBhbmQgYG1hY3ZsYW5gLCBhbW9uZyBvdGhlcnMuIFRoYXQgbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIG15IHRpbWUuIEl0IHRvdWNoZXMgb24gY29yZSBuZXR3b3JraW5nIGRyaXZlciBhbmQgbmV0bGluayBsaW5rIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucy4gVGhlIHJlbGV2YW50IG9uZSBpcyBgQ09ORklHX01BQ1NFQ2AuIEl0IGxvb2tzIGxpa2UgaXQgZGVwZW5kcyBvbiBgTkVUYCBhbmQgdGhlbiBzZWxlY3RzIGBDUllQVE9gLCBgQ1JZUFRPX0FFU2AsIGBDUllQVE9fR0NNYCwgYW5kIGBHUk9fQ0VMTFNgLiBHb29kLCBJIGtub3cgZXhhY3RseSB3aGF0IHRvIGxvb2sgZm9yIHRoZXJlLgoKRm9jdXNpbmcgb24gdGhlIHN5bWJvbHMsIG9idmlvdXNseSB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0byBob25lIGluIG9uIGlzIGBtYWNzZWNfY2hhbmdlbGlua2AuIEkmIzM5O2xsIGFsc28gZ2xhbmNlIGF0IGBtYWNzZWNfbmV3bGlua2AsIGp1c3QgdG8gYmUgc3VyZSwgYWx0aG91Z2ggYGNoYW5nZWxpbmtgIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzd2VlcCBvZiB0aGUgZGlmZiB0byBjb25maXJtIG5vIG90aGVyIGZpbGVzIG9yIHN5bWJvbHMgYXJlIG1vZGlmaWVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEl0JiMzOTtzIGFsbCBjb250YWluZWQgd2l0aGluIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AsIHNwZWNpZmljYWxseSBgbWFjc2VjX2NoYW5nZWxpbmtgLgoKQWxyaWdodCwgYSBmaW5hbCBjaGVjayB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGFsbCB0aGUgcGllY2VzOgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlKiogLSBBYnNvbHV0ZWx5LgoqICAgKipGb2N1c1N5bWJvbHM6KiogYG1hY3NlY19jaGFuZ2VsaW5rYCAtIEdvdCBpdC4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgTUFDU0VDYCAtIENvbmZpcm1lZC4KKiAgICoqUmVhc29uaW5nOioqIENvbmNpc2UsIHNvbGlkIHJhdGlvbmFsZS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDU0VDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjc2VjX2NoYW5nZWxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rIHRvIHJlc3RyaWN0IGNoYW5naW5nIE1BQ3NlYyBkZXZpY2Ugc2V0dGluZ3Mgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuYW1lc3BhY2UuIE1BQ3NlYyBkZXZpY2VzIGFyZSBmdWxseSB2aXJ0dWFsL3NvZnR3YXJlLWVtdWxhdGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG1lc3NhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNTRUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNzZWNfY2hhbmdlbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsgdG8gcmVzdHJpY3QgY2hhbmdpbmcgTUFDc2VjIGRldmljZSBzZXR0aW5ncyB3aGVuIHRoZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5hbWVzcGFjZS4gTUFDc2VjIGRldmljZXMgYXJlIGZ1bGx5IHZpcnR1YWwvc29mdHdhcmUtZW11bGF0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbWVzc2FnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byB2ZXJpZnkgcGVybWlzc2lvbnMgd2hlbiBjaGFuZ2luZyBzZXR0aW5ncyBvZiBhbiBvZmZsb2FkZWQgTUFDc2VjIGRldmljZSBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxuXG5UaGlzIGlzIHB1cmVseSBhIHBlcm1pc3Npb24gdmFsaWRhdGlvbiBjaGVjayByZXR1cm5pbmcgLUVQRVJNIGFuZCBzZXR0aW5nIGFuIGVycm9yIHN0cmluZyBpbiBleHRhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBtZW1vcnkgc3RydWN0dXJlcywgYnVmZmVycywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjBkNGVhNzBmN2UwYTdmMzlmZmZmYzhlZTJjYmRhNjcwNmM5Nzc2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTc6MDk6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzZWMuYyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jCmluZGV4IDZmOWYzYWNlZmZhYWQuLjBmMzUxZTgzOWYxNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3NlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jCkBAIC0xOSw2ICYjNDM7MTksNyBAQAogI2luY2x1ZGUgJmx0O25ldC9ncm9fY2VsbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbWFjc2VjLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2RzdF9tZXRhZGF0YS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcnRuZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCZndDsKQEAgLTM5NTksNiAmIzQzOzM5NjAsMTMgQEAgc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCWlmICghZGF0YSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWYgKChkYXRhW0lGTEFfTUFDU0VDX09GRkxPQURdIHx8IG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy0mZ3Q7cmVhbF9kZXYpKSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2UmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwl9CiYjNDM7CiAJaWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fAogCSAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8CiAJICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbjogQSBRdWljayBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBqdXN0aWZpZXMgYSBkZWRpY2F0ZWQgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb2RlIGlzIGRvaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC4KCkkgc2VlIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB3aXRoaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC4gSXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBuZXR3b3JrIG5hbWVzcGFjZXMgYW5kIHBvdGVudGlhbGx5IG9mZmxvYWRlZCBNQUNzZWMgb3BlcmF0aW9ucy4gVGhlIGFkZGVkIGBpZmAgc3RhdGVtZW50IGNoZWNrcyBmb3IgYElGTEFfTUFDU0VDX09GRkxPQURgIG9yIGlmIHRoZSBkZXZpY2UgYG1hY3NlY2AgaXMgY29uc2lkZXJlZCBvZmZsb2FkZWQgYW5kIHRoZW4gY2FsbHMgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIHZlcmlmeSBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyB0aGUgYENBUF9ORVRfQURNSU5gIGNhcGFiaWxpdHkgaW4gdGhlIG5ldHdvcmsgbmFtZXNwYWNlIG9mIHRoZSAmIzM0O3JlYWwmIzM0OyBkZXZpY2UuIElmIHRoZSBjaGVjayBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3Igb2YgYC1FUEVSTWAuCgpUaGUgaW1wb3J0YW50IGJpdCBoZXJlIGlzIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlYC4gU2luY2UgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2hlY2sgcmVsYXRlZCB0byBuZXR3b3JrIG5hbWVzcGFjZXMgYW5kIHBlcm1pc3Npb24gY2hlY2tzLCBteSBleHBlcnQgaW50dWl0aW9uIHNheXMgdGhhdCB0aGlzIG1pZ2h0IGJlIGFuIGFyZWEgd2hlcmUgS01TQU4gY2FuIGlkZW50aWZ5IGlzc3Vlcy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hlY2sgcmVsYXRlcyB0byBwb3RlbnRpYWxseSBvZmZsb2FkZWQgb3BlcmF0aW9ucyBhbHNvIHJhaXNlcyBhIGZsYWcsIHNpbmNlIG1vcmUgY29tcGxleCBzZXR1cHMgbGlrZSB0aGF0IGFyZSBvZnRlbiBwcm9uZSB0byBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGVyZSBhcmUgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgd2hlbiBuZXR3b3JrIG5hbWVzcGFjZSBib3VuZGFyaWVzIGFyZSBjcm9zc2VkIG9yIG9mZmxvYWQgb3BlcmF0aW9ucyBhcmUgaW52b2x2ZWQuIEkmIzM5O2QgZGVmaW5pdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIG9mIHRoaXMgY2hlY2sgYW5kIHRoZSBzaXR1YXRpb25zIGl0IGNvdmVycy4KClNvLCBpbiBjb25jbHVzaW9uLCB3aGlsZSB0aGUgcGF0Y2ggaXRzZWxmIGlzIG5vdCBvdmVyd2hlbG1pbmdseSBjb21wbGV4LCB0aGUgYWRkZWQgY2hlY2tzIGludm9sdmluZyBuZXR3b3JrIG5hbWVzcGFjZXMsIG9mZmxvYWQsIGFuZCBwZXJtaXNzaW9ucyBkZWZpbml0ZWx5IHdhcnJhbnQgZnVydGhlciBzY3J1dGlueSwgYW5kIHRodXMgKmNvdWxkKiBiZSBhIGRlY2VudCBjYW5kaWRhdGUgZm9yIEtNU0FOIGZ1enppbmcuIEl0JiMzOTtzIGEgJiMzNDttYXliZSYjMzQ7IHRoYXQmIzM5O3MgbGVhbmluZyB0b3dhcmRzICYjMzQ7eWVzLCYjMzQ7IGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyBzb21lIGNvbXBsZXhpdHkgdG8gaXQsIHdoaWNoIEkmIzM5O2QgbmVlZCB0byB2ZXJpZnkgd2l0aCBmdXJ0aGVyIGNvZGUgYW5hbHlzaXMgKGUuZy4sIGdyZXBwaW5nIGZvciB3aGVyZSBgbWFjc2VjX2NoYW5nZWxpbmtgIGlzIGNhbGxlZCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgc2NlbmFyaW9zIGNvdmVyZWQgYnkgdGhlIGNvZGUpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNzZWNfY2hhbmdlbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jPTM4NTc9c3RhdGljIHZvaWQgbWFjc2VjX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzg3MC1cbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM4NzE6c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM4NzItXHRcdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdKVxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NDgtXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTQ5OnN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NTAtXHRcdFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk3Ni1cdC8qIEtlZXAgYSBjb3B5IG9mIHVubW9kaWZpZWQgc2VjeSBhbmQgdHhfc2MsIGluIGNhc2UgdGhlIG9mZmxvYWRcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM5Nzc6XHQgKiBwcm9wYWdhdGlvbiBmYWlscywgdG8gcmV2ZXJ0IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbi5cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NzgtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTgxLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk4MjpcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk4My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM9NDE3Mz1zdGF0aWMgaW50IG1hY3NlY19uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDI2Mi1cdGlmIChkYXRhKSB7XG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0MjYzOlx0XHRlcnIgPSBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oZGV2LCBkYXRhKTtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQyNjQtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM9NDQ0Nj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbWFjc2VjX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ1My1cdC5uZXdsaW5rXHQ9IG1hY3NlY19uZXdsaW5rLFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDQ1NDpcdC5jaGFuZ2VsaW5rXHQ9IG1hY3NlY19jaGFuZ2VsaW5rLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ1NS1cdC5kZWxsaW5rXHQ9IG1hY3NlY19kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzgxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ29udGV4dCBvZiBgbWFjc2VjX2NoYW5nZWxpbmtgKioKCkFscmlnaHQsIHNvIHRoZSBpbnN0cnVjdGlvbiBpcyB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBgbWFjc2VjX2NoYW5nZWxpbmtgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGF0JiMzOTtzIHN0YW5kYXJkIGRlYnVnZ2luZyBwcm9jZWR1cmUuJiMzNDsgSSYjMzk7bSBub3QganVzdCBsb29raW5nICphdCogdGhlIGZ1bmN0aW9uIGl0c2VsZjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcmVzdCBvZiB0aGUgY29kZS4gSXMgaXQgY2FsbGVkLCBhbmQgaWYgc28sIHdoZXJlIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnM/IFdoYXQgdmFyaWFibGVzIGFyZSBwYXNzZWQgdG8gaXQ/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IFRoZSBzdXJyb3VuZGluZyBsaW5lcyB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGV4cGVjdGVkIGlucHV0cywgb3V0cHV0cywgZXJyb3IgaGFuZGxpbmcsIGFuZCBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgTUFDc2VjIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGVzc2VudGlhbGx5IHBlcmZvcm1pbmcgYSBtaW5pYXR1cmUgY29udHJvbCBmbG93IGFuZCBkYXRhIGZsb3cgYW5hbHlzaXMgYXJvdW5kIHRoZSBgbWFjc2VjX2NoYW5nZWxpbmtgIGZ1bmN0aW9uIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBldmVuIHN0YXJ0IGRpZ2dpbmcgaW50byBpdHMgaW1wbGVtZW50YXRpb24uIEl0IGlzIGEgbmVjZXNzYXJ5IGZpcnN0IHN0ZXAuIEkgd2lsbCBiZSBsb29raW5nIGZvcjogY2FsbCBzaXRlcywgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBpbml0aWFsaXNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tYWNzZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk0NTpcdFxuMzk0NjpcdFx0cmV0dXJuIDA7XG4zOTQ3Olx0fVxuMzk0ODpcdFxuMzk0OTpcdHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbjM5NTA6XHRcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjM5NTE6XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjM5NTI6XHR7XG4zOTUzOlx0XHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbjM5NTQ6XHRcdGJvb2wgbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gZmFsc2U7XG4zOTU1Olx0XHRlbnVtIG1hY3NlY19vZmZsb2FkIG9mZmxvYWQ7XG4zOTU2Olx0XHRzdHJ1Y3QgbWFjc2VjX3R4X3NjIHR4X3NjO1xuMzk1NzpcdFx0c3RydWN0IG1hY3NlY19zZWN5IHNlY3k7XG4zOTU4Olx0XHRpbnQgcmV0O1xuMzk1OTpcdFxuMzk2MDpcdFx0aWYgKCFkYXRhKVxuMzk2MTpcdFx0XHRyZXR1cm4gMDtcbjM5NjI6XHRcbjM5NjM6XHRcdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuMzk2NDpcdFx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXHUwMDNlcmVhbF9kZXYpKSkge1xuMzk2NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4zOTY2Olx0XHRcdFx0ICAgICAgIFwmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcJiMzNDspO1xuMzk2NzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMzk2ODpcdFx0fVxuMzk2OTpcdFxuMzk3MDpcdFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fFxuMzk3MTpcdFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfSUNWX0xFTl0gfHxcbjM5NzI6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1NDSV0gfHxcbjM5NzM6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1BPUlRdKVxuMzk3NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM5NzU6XHRcbjM5NzY6XHRcdC8qIEtlZXAgYSBjb3B5IG9mIHVubW9kaWZpZWQgc2VjeSBhbmQgdHhfc2MsIGluIGNhc2UgdGhlIG9mZmxvYWRcbjM5Nzc6XHRcdCAqIHByb3BhZ2F0aW9uIGZhaWxzLCB0byByZXZlcnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uLlxuMzk3ODpcdFx0ICovXG4zOTc5Olx0XHRtZW1jcHkoXHUwMDI2c2VjeSwgXHUwMDI2bWFjc2VjLVx1MDAzZXNlY3ksIHNpemVvZihzZWN5KSk7XG4zOTgwOlx0XHRtZW1jcHkoXHUwMDI2dHhfc2MsIFx1MDAyNm1hY3NlYy1cdTAwM2VzZWN5LnR4X3NjLCBzaXplb2YodHhfc2MpKTtcbjM5ODE6XHRcbjM5ODI6XHRcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xuMzk4MzpcdFx0aWYgKHJldClcbjM5ODQ6XHRcdFx0Z290byBjbGVhbnVwO1xuMzk4NTpcdFxuMzk4NjpcdFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pIHtcbjM5ODc6XHRcdFx0b2ZmbG9hZCA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSk7XG4zOTg4Olx0XHRcdGlmIChtYWNzZWMtXHUwMDNlb2ZmbG9hZCAhPSBvZmZsb2FkKSB7XG4zOTg5Olx0XHRcdFx0bWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gdHJ1ZTtcbjM5OTA6XHRcdFx0XHRyZXQgPSBtYWNzZWNfdXBkYXRlX29mZmxvYWQoZGV2LCBvZmZsb2FkLCBleHRhY2spO1xuMzk5MTpcdFx0XHRcdGlmIChyZXQpXG4zOTkyOlx0XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4zOTkzOlx0XHRcdH1cbjM5OTQ6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipEaWdnaW5nIGludG8gTmV0d29yayBDYXBhYmlsaXR5IENoZWNrcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyBuZXR3b3JrIGxpbmsgY2FwYWJpbGl0aWVzIGFuZCBwZXJtaXNzaW9uIGNoZWNrcy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB3aGVyZSB0aGVzZSBjaGVja3MgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQsIGFuZCBob3cuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG1hY3NlY19uZXdsaW5rYCDigJMgdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHkg4oCTIGFuZCB0aGVuIGJyb2FkZW4gbXkgc2VhcmNoIHRvIG90aGVyIHJlbGV2YW50IGFyZWFzLiBUbyBnZXQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LCBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IGZ1bmN0aW9ucyBhbmQgbW9kdWxlcyB0aGF0IHVzZSByb3V0aW5lcyBsaWtlIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlYCwgb3Igc2ltaWxhciBwZXJtaXNzaW9uIHZlcmlmaWNhdGlvbiBwcm9jZWR1cmVzLiBJJiMzOTtsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZWJhc2UgZm9yIGluc3RhbmNlcyBvZiBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAgdG8gbWFwIG91dCB0aGUgdXNhZ2UgbGFuZHNjYXBlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjQ2NT1zdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQ3My1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI0NzQ6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBnZW5ldmUtXHUwMDNlbmV0KSlcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI0NzUtXHRcdHJldHVybiAtRVBFUk07XG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM9Mzk0OT1zdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk2My1cdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk2NDpcdCAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVx1MDAzZXJlYWxfZGV2KSkpIHtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NjUtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTQ3Mz1pbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNDk4LVx0XHRsb3dlcmRldiA9IG1hY3ZsYW5fZGV2X3JlYWxfZGV2KGxvd2VyZGV2KTtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxNDk5Olx0XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KGxvd2VyZGV2KSkpIHtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNTAwLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTYzMz1zdGF0aWMgaW50IG1hY3ZsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNjQ0LVx0ICAgIChkYXRhW0lGTEFfTUFDVkxBTl9CQ19RVUVVRV9MRU5dIHx8IGRhdGFbSUZMQV9NQUNWTEFOX0JDX0NVVE9GRl0pIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjE2NDU6XHQgICAgIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KHZsYW4tXHUwMDNlbG93ZXJkZXYpKSkge1xuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTE2NDYtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9NDQ0MD1zdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ1MC1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0NDUxOlx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdnhsYW4tXHUwMDNlbmV0KSlcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00NDUyLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmluY2x1ZGUvbmV0L3J0bmV0bGluay5oPTI1OD1zdHJ1Y3QgbmV0ICpydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzdHJ1Y3Qgc29jayAqc2ssIGludCBuZXRuc2lkKTtcbmluY2x1ZGUvbmV0L3J0bmV0bGluay5oOjI1OTpib29sIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L3J0bmV0bGluay5oLTI2MC1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5ldCAqbGlua19uZXQpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTI0OTU9RVhQT1JUX1NZTUJPTF9HUEwocnRubF9nZXRfbmV0X25zX2NhcGFibGUpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjQ5Ni1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI0OTc6Ym9vbCBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNDk4LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0ICpsaW5rX25ldClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTAyLX1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI1MDM6RVhQT1JUX1NZTUJPTF9HUEwocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTA0LVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE0NTU9c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ2My1cbm5ldC9pcHY0L2lwX2dyZS5jOjE0NjQ6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDY1LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE0ODc9c3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTUtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDk2Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ5Ny1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2NC9pcF92dGkuYz01OTE9c3RhdGljIGludCB2dGlfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jLTU5OC1cbm5ldC9pcHY0L2lwX3Z0aS5jOjU5OTpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbm5ldC9pcHY0L2lwX3Z0aS5jLTYwMC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2NC9pcGlwLmM9NDk3PXN0YXRpYyBpbnQgaXBpcF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjQvaXBpcC5jLTUwNi1cbm5ldC9pcHY0L2lwaXAuYzo1MDc6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5uZXQvaXB2NC9pcGlwLmMtNTA4LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMDQzPXN0YXRpYyBpbnQgaXA2Z3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA1MC1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDUxOlx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxubmV0L2lwdjYvaXA2X2dyZS5jLTIwNTItXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNjU9c3RhdGljIGludCBpcDZlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjcyLVxubmV0L2lwdjYvaXA2X2dyZS5jOjIyNzM6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI3NC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjEwOT1zdGF0aWMgaW50IGlwNl90bmxfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTE4LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMTk6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBuZXQpKVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMjAtXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jPTEwNDA9c3RhdGljIGludCB2dGk2X2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMTA0OC1cbm5ldC9pcHY2L2lwNl92dGkuYzoxMDQ5Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcbm5ldC9pcHY2L2lwNl92dGkuYy0xMDUwLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9pcHY2L3NpdC5jPTE2MDE9c3RhdGljIGludCBpcGlwNl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjYvc2l0LmMtMTYxNS1cbm5ldC9pcHY2L3NpdC5jOjE2MTY6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBuZXQpKVxubmV0L2lwdjYvc2l0LmMtMTYxNy1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9ODY0PXN0YXRpYyBpbnQgeGZybWlfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy04NzEtXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM6ODcyOlx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy04NzMtXHRcdHJldHVybiAtRVBFUk07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMTkKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogMzQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1BQ3NlYyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmlnb3JvdXNseSBhbmFseXplIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyB3aXRoaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC4gSSBzZWUgdGhhdCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGNhcGFiaWxpdHkgY2hlY2ssIHNwZWNpZmljYWxseToKCmBgYGMKCWlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpICZhbXA7JmFtcDsKCSAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLSZndDtyZWFsX2RldikpKSB7CgkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAoJCQkgICAgICAgJiMzNDtDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlJiMzNDspOwoJCXJldHVybiAtRVBFUk07Cgl9CmBgYAoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBtZW1vcnktcmVsYXRlZCB2dWxuZXJhYmlsaXRpZXM6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgbGVha3MsIG9yIHdyaXRlcy4gTGV0JiMzOTtzIHNlZS4uLgoKKiAgIGBtYWNzZWMtJmd0O3JlYWxfZGV2YCBpcyBhbHJlYWR5IGEgdmFsaWQgcG9pbnRlciwgcHJlc3VtYWJseSB0byBhIGBzdHJ1Y3QgbmV0X2RldmljZWAuIGBkZXZfbmV0KClgIGdyYWJzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBvZiB0aGF0IGRldmljZS4gYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoKWAgcGVyZm9ybXMgYSBjYXBhYmlsaXR5IGNoZWNrIHVzaW5nIGBuZXRsaW5rX25ldF9jYXBhYmxlKC4uLilgLiBgTkxfU0VUX0VSUl9NU0dgIHdyaXRlcyBhIHN0YXRpYyBzdHJpbmcgdG8gYGV4dGFja2AuIE5vdGhpbmcgc2VlbXMgYW1pc3MuCgpGcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLCBhcmUgdGhlcmUgYW55IHJpc2tzIHN0ZW1taW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhPwoKKiAgIE5vIG5ldyBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIGFsdGVyZWQgYnkgdGhpcyBwYXRjaC4KKiAgIFRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGludm9sdmUgY29weWluZyBkYXRhIHRvIHVzZXJzcGFjZSB0aGF04oCZcyBiZWVuIG1vZGlmaWVkLiBPbmx5IGFuIGVycm9yIG1lc3NhZ2UgaXMgd3JpdHRlbiBpZiB0aGUgcGVybWlzc2lvbiBjaGVjayBmYWlscy4KKiAgIFRoZXJlJiMzOTtzIG5vIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCiogICBObyBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgYXMgYSByZXN1bHQgb2YgdGhpcyBjb2RlLgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIGRldGFpbGVkIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQ29uc2VxdWVudGx5LCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGhlcmUuIFdlIGNhbiBtYXJrIGBOZWVkc0tNU0FOID0gZmFsc2VgIGluIG91ciBgc2V0LXJlc3VsdHNgIGNhbGwsIGFuZCBwcm92aWRlIGEgY2xlYXIgZXhwbGFuYXRpb24gdG8gZGlzdGluZ3Vpc2ggS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaW4gdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXR3b3JrIG5hbWVzcGFjZSBjYXBhYmlsaXR5IGNoZWNrIChydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKSBpbiBtYWNzZWNfY2hhbmdlbGluaygpIHRvIHZlcmlmeSBwZXJtaXNzaW9ucyB3aGVuIGNoYW5naW5nIHNldHRpbmdzIG9mIGFuIG9mZmxvYWRlZCBNQUNzZWMgZGV2aWNlIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuXG5cblRoaXMgaXMgcHVyZWx5IGEgcGVybWlzc2lvbiB2YWxpZGF0aW9uIGNoZWNrIHJldHVybmluZyAtRVBFUk0gYW5kIHNldHRpbmcgYW4gZXJyb3Igc3RyaW5nIGluIGV4dGFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IG1lbW9yeSBzdHJ1Y3R1cmVzLCBidWZmZXJzLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byB2ZXJpZnkgcGVybWlzc2lvbnMgd2hlbiBjaGFuZ2luZyBzZXR0aW5ncyBvZiBhbiBvZmZsb2FkZWQgTUFDc2VjIGRldmljZSBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxuXG5UaGlzIGlzIHB1cmVseSBhIHBlcm1pc3Npb24gdmFsaWRhdGlvbiBjaGVjayByZXR1cm5pbmcgLUVQRVJNIGFuZCBzZXR0aW5nIGFuIGVycm9yIHN0cmluZyBpbiBleHRhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBtZW1vcnkgc3RydWN0dXJlcywgYnVmZmVycywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzowOTozMC4wNTExMzg4NjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkwMjUxNTg4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDU0VDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjc2VjX2NoYW5nZWxpbmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXR3b3JrIG5hbWVzcGFjZSBjYXBhYmlsaXR5IGNoZWNrIChydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKSBpbiBtYWNzZWNfY2hhbmdlbGluaygpIHRvIHZlcmlmeSBwZXJtaXNzaW9ucyB3aGVuIGNoYW5naW5nIHNldHRpbmdzIG9mIGFuIG9mZmxvYWRlZCBNQUNzZWMgZGV2aWNlIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuXFxuXFxuVGhpcyBpcyBwdXJlbHkgYSBwZXJtaXNzaW9uIHZhbGlkYXRpb24gY2hlY2sgcmV0dXJuaW5nIC1FUEVSTSBhbmQgc2V0dGluZyBhbiBlcnJvciBzdHJpbmcgaW4gZXh0YWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgbWVtb3J5IHN0cnVjdHVyZXMsIGJ1ZmZlcnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsgdG8gcmVzdHJpY3QgY2hhbmdpbmcgTUFDc2VjIGRldmljZSBzZXR0aW5ncyB3aGVuIHRoZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5hbWVzcGFjZS4gTUFDc2VjIGRldmljZXMgYXJlIGZ1bGx5IHZpcnR1YWwvc29mdHdhcmUtZW11bGF0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbWVzc2FnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjMwLjA1MTE0NDI4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3Mzk5MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjBkNGVhNzBmN2UwYTdmMzlmZmZmYzhlZTJjYmRhNjcwNmM5Nzc2OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDE3OjA5OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3NlYy5jIGIvZHJpdmVycy9uZXQvbWFjc2VjLmNcXG5pbmRleCA2ZjlmM2FjZWZmYWFkLi4wZjM1MWU4MzlmMTQ0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3NlYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWFjc2VjLmNcXG5AQCAtMTksNiArMTksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2dyb19jZWxscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21hY3NlYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3J0bmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmhcXHUwMDNlXFxuQEAgLTM5NTksNiArMzk2MCwxMyBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIFxcdGlmICghZGF0YSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRpZiAoKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gfHwgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cXHUwMDNlcmVhbF9kZXYpKSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiQ2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZVxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEVdIHx8XFxuIFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XFxuIFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1NDSV0gfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MDk6MzAuNDU5MjczMTk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjU0NTM0NDAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUNTRUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNzZWNfY2hhbmdlbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXR3b3JrIG5hbWVzcGFjZSBjYXBhYmlsaXR5IGNoZWNrIChydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKSBpbiBtYWNzZWNfY2hhbmdlbGluayB0byByZXN0cmljdCBjaGFuZ2luZyBNQUNzZWMgZGV2aWNlIHNldHRpbmdzIHdoZW4gdGhlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmFtZXNwYWNlLiBNQUNzZWMgZGV2aWNlcyBhcmUgZnVsbHkgdmlydHVhbC9zb2Z0d2FyZS1lbXVsYXRhYmxlIGFuZCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHJ0bmV0bGluayBtZXNzYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMGQ0ZWE3MGY3ZTBhN2YzOWZmZmZjOGVlMmNiZGE2NzA2Yzk3NzY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNzowOToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3NlYy5jIGIvZHJpdmVycy9uZXQvbWFjc2VjLmNcbmluZGV4IDZmOWYzYWNlZmZhYWQuLjBmMzUxZTgzOWYxNDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tYWNzZWMuY1xuKysrIGIvZHJpdmVycy9uZXQvbWFjc2VjLmNcbkBAIC0xOSw2ICsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyb19jZWxscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmhcdTAwM2VcbkBAIC0zOTU5LDYgKzM5NjAsMTMgQEAgc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0aWYgKCFkYXRhKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXHUwMDNlcmVhbF9kZXYpKSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiQ2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZVwiKTtcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcdH1cbitcbiBcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcbiBcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XG4gXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzowOTozMC40NTkyNzQ4MTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDU4ODEyMDExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyBjb2RlIGNoYW5nZSwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JrIHNlY3VyaXR5IGFuZCBrZXJuZWwgZHJpdmVyczpcblxuKipBbmFseXppbmcgYSBNQUNzZWMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBhIHBhdGNoIGhhcyBoaXQgbXkgZGVzayBhbmQgaXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvbWFjc2VjLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtYWNzZWNfY2hhbmdlbGlua2AgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCBJJ20gZ29pbmcgaW50byB0cmlhZ2UgbW9kZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byAqdW5kZXJzdGFuZCogd2hhdCB0aGlzIG1vZGlmaWNhdGlvbiBpcyAqaW50ZW5kZWQqIHRvIGRvLCBhbmQgKndoeSouIEknbSBpbW1lZGlhdGVseSB0aGlua2luZzpcblxuKiAgIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoaXMgZmlsZSwgdGhlIG1vZGlmaWNhdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFdoYXQgaXMgdGhlIGhpc3RvcnkgaGVyZT8gSXMgdGhpcyBhIG5ldyBmZWF0dXJlLCBhIGJ1ZyBmaXgsIG9yIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBxdWljayBgZ2l0IGxvZ2Agb24gdGhhdCBzcGVjaWZpYyBmaWxlIHRvIHNlZSB0aGUgcmVjZW50IGNvbW1pdHMuIEkgbmVlZCB0byBnZXQgYSBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbnRlbnQgb2YgYG1hY3NlY19jaGFuZ2VsaW5rYCwgYW5kIHRoaXMgZHJpdmVyIGluIGdlbmVyYWwuXG4qICAgTmV4dCwgSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggb3RoZXIgZmlsZXMgdGhpcyBmdW5jdGlvbiBjYWxscyBvciBpcyBjYWxsZWQgYnkuIEkgd2FudCB0byBidWlsZCBhIGNhbGwgZ3JhcGggbWVudGFsbHkuIEFueSBLY29uZmlnIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIGNoZWNrLiBBcmUgYW55IG5ldyBLY29uZmlnIG9wdGlvbnMgaW50cm9kdWNlZCwgY2hhbmdlZCwgb3IgcmVtb3ZlZD8gV2hhdCBrZXJuZWwgdmVyc2lvbnMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT9cbiogICBJIHdhbnQgYSBxdWljayB3YXkgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSwgc28gYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHdpbGwgYmUgbXkgdG9vbHMgb2YgY2hvaWNlLiBXaGF0IGlzIHRoZSBkaXJlY3QgY29udGV4dCBhcm91bmQgdGhlIG1vZGlmaWVkIGxpbmVzPyBEb2VzIHRoaXMgY2hhbmdlIGRlcGVuZCBvbiBvdGhlciBjaGFuZ2VzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2U/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSAqaW1wYWN0KiBvZiB0aGlzIHBhdGNoLCBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZS4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gSXMgdGhpcyBwcm9wZXJseSB0ZXN0ZWQ/IEkgd2lsbCBuZWVkIHRvIGJlIHZlcnkgcmlnb3JvdXMgb24gdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTcsIk91dHB1dFRva2VucyI6NjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjQxLjA0NzM5NzY3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTUwOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbjM5NTE6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzk1MjpcXHR7XFxuMzk1MzpcXHRcXHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcXG4zOTU0OlxcdFxcdGJvb2wgbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gZmFsc2U7XFxuMzk1NTpcXHRcXHRlbnVtIG1hY3NlY19vZmZsb2FkIG9mZmxvYWQ7XFxuMzk1NjpcXHRcXHRzdHJ1Y3QgbWFjc2VjX3R4X3NjIHR4X3NjO1xcbjM5NTc6XFx0XFx0c3RydWN0IG1hY3NlY19zZWN5IHNlY3k7XFxuMzk1ODpcXHRcXHRpbnQgcmV0O1xcbjM5NTk6XFx0XFxuMzk2MDpcXHRcXHRpZiAoIWRhdGEpXFxuMzk2MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zOTYyOlxcdFxcbjM5NjM6XFx0XFx0aWYgKChkYXRhW0lGTEFfTUFDU0VDX09GRkxPQURdIHx8IG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKSkgXFx1MDAyNlxcdTAwMjZcXG4zOTY0OlxcdFxcdCAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVxcdTAwM2VyZWFsX2RldikpKSB7XFxuMzk2NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuMzk2NjpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkNoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcXFwiKTtcXG4zOTY3OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMzk2ODpcXHRcXHR9XFxuMzk2OTpcXHRcXG4zOTcwOlxcdFxcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcXG4zOTcxOlxcdFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XFxuMzk3MjpcXHRcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XFxuMzk3MzpcXHRcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19QT1JUXSlcXG4zOTc0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM5NzU6XFx0XFxuMzk3NjpcXHRcXHQvKiBLZWVwIGEgY29weSBvZiB1bm1vZGlmaWVkIHNlY3kgYW5kIHR4X3NjLCBpbiBjYXNlIHRoZSBvZmZsb2FkXFxuMzk3NzpcXHRcXHQgKiBwcm9wYWdhdGlvbiBmYWlscywgdG8gcmV2ZXJ0IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbi5cXG4zOTc4OlxcdFxcdCAqL1xcbjM5Nzk6XFx0XFx0bWVtY3B5KFxcdTAwMjZzZWN5LCBcXHUwMDI2bWFjc2VjLVxcdTAwM2VzZWN5LCBzaXplb2Yoc2VjeSkpO1xcbjM5ODA6XFx0XFx0bWVtY3B5KFxcdTAwMjZ0eF9zYywgXFx1MDAyNm1hY3NlYy1cXHUwMDNlc2VjeS50eF9zYywgc2l6ZW9mKHR4X3NjKSk7XFxuMzk4MTpcXHRcXG4zOTgyOlxcdFxcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xcbjM5ODM6XFx0XFx0aWYgKHJldClcXG4zOTg0OlxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4zOTg1OlxcdFxcbjM5ODY6XFx0XFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pIHtcXG4zOTg3OlxcdFxcdFxcdG9mZmxvYWQgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pO1xcbjM5ODg6XFx0XFx0XFx0aWYgKG1hY3NlYy1cXHUwMDNlb2ZmbG9hZCAhPSBvZmZsb2FkKSB7XFxuMzk4OTpcXHRcXHRcXHRcXHRtYWNzZWNfb2ZmbG9hZF9zdGF0ZV9jaGFuZ2UgPSB0cnVlO1xcbjM5OTA6XFx0XFx0XFx0XFx0cmV0ID0gbWFjc2VjX3VwZGF0ZV9vZmZsb2FkKGRldiwgb2ZmbG9hZCwgZXh0YWNrKTtcXG4zOTkxOlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuMzk5MjpcXHRcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuMzk5MzpcXHRcXHRcXHR9XFxuMzk5NDpcXHRcXHR9XFxuMzk5NTpcXHRcXG4zOTk2OlxcdFxcdC8qIElmIGgvdyBvZmZsb2FkaW5nIGlzIGF2YWlsYWJsZSwgcHJvcGFnYXRlIHRvIHRoZSBkZXZpY2UgKi9cXG4zOTk3OlxcdFxcdGlmICghbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlIFxcdTAwMjZcXHUwMDI2IG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKSkge1xcbjM5OTg6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG1hY3NlY19vcHMgKm9wcztcXG4zOTk5OlxcdFxcdFxcdHN0cnVjdCBtYWNzZWNfY29udGV4dCBjdHg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjQxLjA0NzU2MDk1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEwMzMyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ1NFQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTMwMj1jb25maWcgQU1UXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMxNy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMxODpjb25maWcgTUFDU0VDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMTktXFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjFBRSBNQUMtbGV2ZWwgZW5jcnlwdGlvbiAoTUFDc2VjKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MDk6NDEuMjA4NjAxMDQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzOTM5NTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDU0VDIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBncmFudWxhci4gQmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBjaGFuZ2VzLCBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciBNQUNTRUMuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBmaW5kaW5nIHRoZSBib29sZWFuIHN3aXRjaGVzOyBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBjdXJyZW50bHkgaW50ZWdyYXRlZCwgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbmQgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgZmVhdHVyZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0gY29uc2lkZXJhdGlvbnMgdGhhdCBhcmUgcmVmbGVjdGVkIGluIHRoZSBLY29uZmlnPyBJdCdzIGFsbCBhYm91dCBidWlsZGluZyBhIHNvbGlkIGZvdW5kYXRpb24gb2YgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IG1ha2luZyBhIHNpbmdsZSB0d2Vhay4gVGhpcyB3aWxsIGhlbHAgcHJldmVudCB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBkb3duIHRoZSBsaW5lIGFuZCBhbGxvdyBtZSB0byBkZXRlcm1pbmUgaWYgY2hhbmdlcyBzaG91bGQgYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjQzLjM0Nzk5ODc3MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMzE2OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYW10LlxcbiAzMTc6XFx0XFxuIDMxODpcXHRjb25maWcgTUFDU0VDXFxuIDMxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMUFFIE1BQy1sZXZlbCBlbmNyeXB0aW9uIChNQUNzZWMpXFxcIlxcbiAzMjA6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAzMjE6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gMzIyOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuIDMyMzpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuIDMyNDpcXHRcXHRoZWxwXFxuIDMyNTpcXHRcXHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXFxuIDMyNjpcXHRcXG4gMzI3OlxcdGNvbmZpZyBORVRDT05TT0xFXFxuIDMyODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4gMzI5OlxcdFxcdGRlcGVuZHMgb24gUFJJTlRLXFxuIDMzMDpcXHRcXHRoZWxwXFxuIDMzMTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXFxuIDMzMjpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjQzLjM0ODA3MzI5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MDI2MDQ5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTUFDc2VjIEV4cGxvcmF0aW9uOiBEaXZpbmcgaW50byB0aGUgVmlydHVhbCBOZXR3b3JrIERldmljZSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgYG1hY3NlYy5jYCBkcml2ZXIsIHdoaWNoIGZyb20gdGhlIG91dHNldCwgc2VlbXMgdG8gYmUgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlci4gSXQgY3JlYXRlcyB0aGVzZSBNQUNzZWMgaW50ZXJmYWNlcywgYW5kIGl0J3MgYWxsIGhhbmRsZWQgdGhyb3VnaCBgcnRubGAgYW5kIGBuZXRsaW5rYC4gVGhlIGtleSB0YWtlYXdheSBoZXJlIGlzIHRoYXQgaXQncyB2aXJ0dWFsLCBmdWxseSBlbXVsYXRlZCwgbWVhbmluZyBpdCBzaXRzIG9uIHRvcCBvZiBzb21ldGhpbmcgbGlrZSBhIGR1bW15LCB2ZXRoLCBvciBsb29wYmFjayBkZXZpY2UuIFRoYXQncyBnb29kIHRvIGtub3cgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlIGluIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5JdCBsb29rcyBsaWtlIFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGNvbmZpZ3VyaW5nIHRoZXNlIE1BQ3NlYyBkZXZpY2VzIHRocm91Z2ggbmV0bGluaywgc3BlY2lmaWNhbGx5IHJ0bmV0bGluayBhbmQgZ2VuZXRsaW5rLCB1c2luZyBgSUZMQV9JTkZPX0tJTkQgXCJtYWNzZWNcImAuIFRoYXQgZ2l2ZXMgbWUgYSBncmVhdCBmb290aG9sZCBmb3IgZnV6emluZyBpZiBJIG5lZWQgaXQuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVoYXZpb3IgYW5kIHJlbGF0aW9uc2hpcHMgaGVyZSBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBkcml2ZXIgdGhvcm91Z2hseS4gSSBzaG91bGQgZmluZCB3aGVyZSBgbWFjc2VjX2NoYW5nZWxpbmtgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGVsc2UgaW4gYG1hY3NlYy5jYCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgZnVuY3Rpb25pbmcuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGVycm9yIGhhbmRsaW5nLCBhbmQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIGxpa2VseS4gVGhpcyB3aWxsIHJldmVhbCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdGhpcyB2aXJ0dWFsIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjQ4LjA1MDY4MDc5NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE4NTAwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNzZWNfY2hhbmdlbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuYz0zODU3PXN0YXRpYyB2b2lkIG1hY3NlY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzg3MC1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozODcxOnN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzg3Mi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdKVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk0OC1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTQ5OnN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTUwLVxcdFxcdFxcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk3Ni1cXHQvKiBLZWVwIGEgY29weSBvZiB1bm1vZGlmaWVkIHNlY3kgYW5kIHR4X3NjLCBpbiBjYXNlIHRoZSBvZmZsb2FkXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk3NzpcXHQgKiBwcm9wYWdhdGlvbiBmYWlscywgdG8gcmV2ZXJ0IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbi5cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTc4LVxcdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk4MS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTgyOlxcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5ODMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jPTQxNzM9c3RhdGljIGludCBtYWNzZWNfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDI2Mi1cXHRpZiAoZGF0YSkge1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjQyNjM6XFx0XFx0ZXJyID0gbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgZGF0YSk7XFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDI2NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9NDQ0Nj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbWFjc2VjX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDUzLVxcdC5uZXdsaW5rXFx0PSBtYWNzZWNfbmV3bGluayxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDU0OlxcdC5jaGFuZ2VsaW5rXFx0PSBtYWNzZWNfY2hhbmdlbGluayxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDU1LVxcdC5kZWxsaW5rXFx0PSBtYWNzZWNfZGVsbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MDk6NDguMDk1ODcwODYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MjgzNjQ4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUFDc2VjIExpbmsgQ2hhbmdlIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtYWNzZWNfY2hhbmdlbGlua2AgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBuZXRsaW5rIGNoYW5nZWxpbmsgaGFuZGxlciBmb3IgTUFDc2VjIG5ldHdvcmsgZGV2aWNlcy4gSXQgc2VlbXMgdGhhdCB3aGVuIGEgdXNlciwgZWl0aGVyIHByaXZpbGVnZWQgb3IgdW5wcml2aWxlZ2VkIGJ1dCB3aXRoIG5ldGxpbmsgYWNjZXNzLCBzZW5kcyBhbiBSVE1fTkVXTElOSyBvciBSVE1fU0VUTElOSyBtZXNzYWdlIHRvIG1vZGlmeSBhIE1BQ3NlYyBsaW5rLCB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCBnZXRzIGNhbGxlZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGEgcGVybWlzc2lvbiBjaGVjaywgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgLCB3aGljaCBzb3VuZHMgbGlrZSBpdCdzIGdvaW5nIHRvIGJlIGtleSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBNQUNzZWMgZGV2aWNlcyB3aGVyZSB0aGUgdW5kZXJseWluZyByZWFsIGRldmljZSBsaXZlcyBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZSBvciB3aGVuIG9mZmxvYWRpbmcgaXMgaW52b2x2ZWQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuIHNvbWV0aGluZyBJIGNhbiBlZmZlY3RpdmVseSBmdXp6IGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEJ1dCwgeWVzLCBpdCdzIHRvdGFsbHkgcmVhY2hhYmxlIGJlY2F1c2UgSSBjYW4gY3JlYXRlIGFuZCBtYW5pcHVsYXRlIHRoZXNlIGBtYWNzZWNgIGRldmljZXMgdXNpbmcgbmV0bGluayBvbiB0b3Agb2YgdmlydHVhbCBkZXZpY2VzIGxpa2UgYHZldGhgLCBgZHVtbXlgLCBhbmQgYG1hY3ZsYW5gLCBhbW9uZyBvdGhlcnMuIFRoYXQgbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIG15IHRpbWUuIEl0IHRvdWNoZXMgb24gY29yZSBuZXR3b3JraW5nIGRyaXZlciBhbmQgbmV0bGluayBsaW5rIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0LlxuXG5Ob3csIGxldCdzIHNlZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSByZWxldmFudCBvbmUgaXMgYENPTkZJR19NQUNTRUNgLiBJdCBsb29rcyBsaWtlIGl0IGRlcGVuZHMgb24gYE5FVGAgYW5kIHRoZW4gc2VsZWN0cyBgQ1JZUFRPYCwgYENSWVBUT19BRVNgLCBgQ1JZUFRPX0dDTWAsIGFuZCBgR1JPX0NFTExTYC4gR29vZCwgSSBrbm93IGV4YWN0bHkgd2hhdCB0byBsb29rIGZvciB0aGVyZS5cblxuRm9jdXNpbmcgb24gdGhlIHN5bWJvbHMsIG9idmlvdXNseSB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0byBob25lIGluIG9uIGlzIGBtYWNzZWNfY2hhbmdlbGlua2AuIEknbGwgYWxzbyBnbGFuY2UgYXQgYG1hY3NlY19uZXdsaW5rYCwganVzdCB0byBiZSBzdXJlLCBhbHRob3VnaCBgY2hhbmdlbGlua2AgaXMgd2hlcmUgdGhlIGFjdGlvbiBpcy5cblxuTGV0J3MgZG8gYSBxdWljayBzd2VlcCBvZiB0aGUgZGlmZiB0byBjb25maXJtIG5vIG90aGVyIGZpbGVzIG9yIHN5bWJvbHMgYXJlIG1vZGlmaWVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEl0J3MgYWxsIGNvbnRhaW5lZCB3aXRoaW4gYGRyaXZlcnMvbmV0L21hY3NlYy5jYCwgc3BlY2lmaWNhbGx5IGBtYWNzZWNfY2hhbmdlbGlua2AuXG5cbkFscmlnaHQsIGEgZmluYWwgY2hlY2sgdG8gbWFrZSBzdXJlIEkndmUgZ290IGFsbCB0aGUgcGllY2VzOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IFRydWUqKiAtIEFic29sdXRlbHkuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYG1hY3NlY19jaGFuZ2VsaW5rYCAtIEdvdCBpdC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1BQ1NFQ2AgLSBDb25maXJtZWQuXG4qICAgKipSZWFzb25pbmc6KiogQ29uY2lzZSwgc29saWQgcmF0aW9uYWxlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAxNiwiT3V0cHV0VG9rZW5zIjoxMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MDk6NTIuOTI0MjM4MTE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzNzQ3NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ1NFQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3NlY19jaGFuZ2VsaW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rIHRvIHJlc3RyaWN0IGNoYW5naW5nIE1BQ3NlYyBkZXZpY2Ugc2V0dGluZ3Mgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuYW1lc3BhY2UuIE1BQ3NlYyBkZXZpY2VzIGFyZSBmdWxseSB2aXJ0dWFsL3NvZnR3YXJlLWVtdWxhdGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG1lc3NhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ1NFQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3NlY19jaGFuZ2VsaW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rIHRvIHJlc3RyaWN0IGNoYW5naW5nIE1BQ3NlYyBkZXZpY2Ugc2V0dGluZ3Mgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuYW1lc3BhY2UuIE1BQ3NlYyBkZXZpY2VzIGFyZSBmdWxseSB2aXJ0dWFsL3NvZnR3YXJlLWVtdWxhdGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG1lc3NhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzowOTo1My4wMDQ2MjA4N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwNzE2NjU5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzowOTo1My4wMDUxNTU0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg2MDcxMTI3NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byB2ZXJpZnkgcGVybWlzc2lvbnMgd2hlbiBjaGFuZ2luZyBzZXR0aW5ncyBvZiBhbiBvZmZsb2FkZWQgTUFDc2VjIGRldmljZSBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxcblxcblRoaXMgaXMgcHVyZWx5IGEgcGVybWlzc2lvbiB2YWxpZGF0aW9uIGNoZWNrIHJldHVybmluZyAtRVBFUk0gYW5kIHNldHRpbmcgYW4gZXJyb3Igc3RyaW5nIGluIGV4dGFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IG1lbW9yeSBzdHJ1Y3R1cmVzLCBidWZmZXJzLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjBkNGVhNzBmN2UwYTdmMzlmZmZmYzhlZTJjYmRhNjcwNmM5Nzc2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MDk6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzZWMuYyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXG5pbmRleCA2ZjlmM2FjZWZmYWFkLi4wZjM1MWU4MzlmMTQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWFjc2VjLmNcbisrKyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9ncm9fY2VsbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXHUwMDNlXG5AQCAtMzk1OSw2ICszOTYwLDEzIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdGlmICghZGF0YSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZiAoKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gfHwgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVx1MDAzZXJlYWxfZGV2KSkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkNoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcIik7XG4rXHRcdHJldHVybiAtRVBFUk07XG4rXHR9XG4rXG4gXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEVdIHx8XG4gXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19JQ1ZfTEVOXSB8fFxuIFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MDk6NTMuMDA1MTU2MzM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMDg2ODk4Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2gganVzdGlmaWVzIGEgZGVkaWNhdGVkIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikgZnV6emluZyBzZXNzaW9uLiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb2RlIGlzIGRvaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC5cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHdpdGhpbiBgbWFjc2VjX2NoYW5nZWxpbmtgLiBJdCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIG5ldHdvcmsgbmFtZXNwYWNlcyBhbmQgcG90ZW50aWFsbHkgb2ZmbG9hZGVkIE1BQ3NlYyBvcGVyYXRpb25zLiBUaGUgYWRkZWQgYGlmYCBzdGF0ZW1lbnQgY2hlY2tzIGZvciBgSUZMQV9NQUNTRUNfT0ZGTE9BRGAgb3IgaWYgdGhlIGRldmljZSBgbWFjc2VjYCBpcyBjb25zaWRlcmVkIG9mZmxvYWRlZCBhbmQgdGhlbiBjYWxscyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gdmVyaWZ5IGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIHRoZSBgQ0FQX05FVF9BRE1JTmAgY2FwYWJpbGl0eSBpbiB0aGUgbmV0d29yayBuYW1lc3BhY2Ugb2YgdGhlIFwicmVhbFwiIGRldmljZS4gSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBvZiBgLUVQRVJNYC5cblxuVGhlIGltcG9ydGFudCBiaXQgaGVyZSBpcyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAuIFNpbmNlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrIHJlbGF0ZWQgdG8gbmV0d29yayBuYW1lc3BhY2VzIGFuZCBwZXJtaXNzaW9uIGNoZWNrcywgbXkgZXhwZXJ0IGludHVpdGlvbiBzYXlzIHRoYXQgdGhpcyBtaWdodCBiZSBhbiBhcmVhIHdoZXJlIEtNU0FOIGNhbiBpZGVudGlmeSBpc3N1ZXMuIFRoZSBmYWN0IHRoYXQgdGhlIGNoZWNrIHJlbGF0ZXMgdG8gcG90ZW50aWFsbHkgb2ZmbG9hZGVkIG9wZXJhdGlvbnMgYWxzbyByYWlzZXMgYSBmbGFnLCBzaW5jZSBtb3JlIGNvbXBsZXggc2V0dXBzIGxpa2UgdGhhdCBhcmUgb2Z0ZW4gcHJvbmUgdG8gc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGVycm9ycy4gSXQncyBwb3NzaWJsZSB0aGVyZSBhcmUgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgd2hlbiBuZXR3b3JrIG5hbWVzcGFjZSBib3VuZGFyaWVzIGFyZSBjcm9zc2VkIG9yIG9mZmxvYWQgb3BlcmF0aW9ucyBhcmUgaW52b2x2ZWQuIEknZCBkZWZpbml0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBjaGVjayBhbmQgdGhlIHNpdHVhdGlvbnMgaXQgY292ZXJzLlxuXG5TbywgaW4gY29uY2x1c2lvbiwgd2hpbGUgdGhlIHBhdGNoIGl0c2VsZiBpcyBub3Qgb3ZlcndoZWxtaW5nbHkgY29tcGxleCwgdGhlIGFkZGVkIGNoZWNrcyBpbnZvbHZpbmcgbmV0d29yayBuYW1lc3BhY2VzLCBvZmZsb2FkLCBhbmQgcGVybWlzc2lvbnMgZGVmaW5pdGVseSB3YXJyYW50IGZ1cnRoZXIgc2NydXRpbnksIGFuZCB0aHVzICpjb3VsZCogYmUgYSBkZWNlbnQgY2FuZGlkYXRlIGZvciBLTVNBTiBmdXp6aW5nLiBJdCdzIGEgXCJtYXliZVwiIHRoYXQncyBsZWFuaW5nIHRvd2FyZHMgXCJ5ZXMsXCIgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzIHNvbWUgY29tcGxleGl0eSB0byBpdCwgd2hpY2ggSSdkIG5lZWQgdG8gdmVyaWZ5IHdpdGggZnVydGhlciBjb2RlIGFuYWx5c2lzIChlLmcuLCBncmVwcGluZyBmb3Igd2hlcmUgYG1hY3NlY19jaGFuZ2VsaW5rYCBpcyBjYWxsZWQgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHNjZW5hcmlvcyBjb3ZlcmVkIGJ5IHRoZSBjb2RlKS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEwOjA0LjA5MjA1NzYwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyODg1MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjc2VjX2NoYW5nZWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWFjc2VjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWFjc2VjLmM9Mzg1Nz1zdGF0aWMgdm9pZCBtYWNzZWNfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM4NzAtXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzg3MTpzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM4NzItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSlcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NDgtXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk0OTpzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk1MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NzYtXFx0LyogS2VlcCBhIGNvcHkgb2YgdW5tb2RpZmllZCBzZWN5IGFuZCB0eF9zYywgaW4gY2FzZSB0aGUgb2ZmbG9hZFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM5Nzc6XFx0ICogcHJvcGFnYXRpb24gZmFpbHMsIHRvIHJldmVydCBtYWNzZWNfY2hhbmdlbGlua19jb21tb24uXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk3OC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5ODEtXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk4MjpcXHRyZXQgPSBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oZGV2LCBkYXRhKTtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTgzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00MTczPXN0YXRpYyBpbnQgbWFjc2VjX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQyNjItXFx0aWYgKGRhdGEpIHtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0MjYzOlxcdFxcdGVyciA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQyNjQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jPTQ0NDY9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIG1hY3NlY19saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ1My1cXHQubmV3bGlua1xcdD0gbWFjc2VjX25ld2xpbmssXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDQ1NDpcXHQuY2hhbmdlbGlua1xcdD0gbWFjc2VjX2NoYW5nZWxpbmssXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ1NS1cXHQuZGVsbGlua1xcdD0gbWFjc2VjX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEwOjA0LjE5MTM1MTI0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDcwMzUyODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb250ZXh0IG9mIGBtYWNzZWNfY2hhbmdlbGlua2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgbGluZXMgb2YgYG1hY3NlY19jaGFuZ2VsaW5rYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCdzIHN0YW5kYXJkIGRlYnVnZ2luZyBwcm9jZWR1cmUuXCIgSSdtIG5vdCBqdXN0IGxvb2tpbmcgKmF0KiB0aGUgZnVuY3Rpb24gaXRzZWxmOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBJcyBpdCBjYWxsZWQsIGFuZCBpZiBzbywgd2hlcmUgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gV2hhdCB2YXJpYWJsZXMgYXJlIHBhc3NlZCB0byBpdD8gV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gVGhlIHN1cnJvdW5kaW5nIGxpbmVzIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgZXhwZWN0ZWQgaW5wdXRzLCBvdXRwdXRzLCBlcnJvciBoYW5kbGluZywgYW5kIG92ZXJhbGwgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBNQUNzZWMgaW1wbGVtZW50YXRpb24uIEknbSBlc3NlbnRpYWxseSBwZXJmb3JtaW5nIGEgbWluaWF0dXJlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBmbG93IGFuYWx5c2lzIGFyb3VuZCB0aGUgYG1hY3NlY19jaGFuZ2VsaW5rYCBmdW5jdGlvbiB0byBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZXZlbiBzdGFydCBkaWdnaW5nIGludG8gaXRzIGltcGxlbWVudGF0aW9uLiBJdCBpcyBhIG5lY2Vzc2FyeSBmaXJzdCBzdGVwLiBJIHdpbGwgYmUgbG9va2luZyBmb3I6IGNhbGwgc2l0ZXMsIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgaW5pdGlhbGlzYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMDowNi42NjE3MDYzNTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L21hY3NlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NDUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5NDU6XFx0XFxuMzk0NjpcXHRcXHRyZXR1cm4gMDtcXG4zOTQ3OlxcdH1cXG4zOTQ4OlxcdFxcbjM5NDk6XFx0c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbjM5NTA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuMzk1MTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4zOTUyOlxcdHtcXG4zOTUzOlxcdFxcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xcbjM5NTQ6XFx0XFx0Ym9vbCBtYWNzZWNfb2ZmbG9hZF9zdGF0ZV9jaGFuZ2UgPSBmYWxzZTtcXG4zOTU1OlxcdFxcdGVudW0gbWFjc2VjX29mZmxvYWQgb2ZmbG9hZDtcXG4zOTU2OlxcdFxcdHN0cnVjdCBtYWNzZWNfdHhfc2MgdHhfc2M7XFxuMzk1NzpcXHRcXHRzdHJ1Y3QgbWFjc2VjX3NlY3kgc2VjeTtcXG4zOTU4OlxcdFxcdGludCByZXQ7XFxuMzk1OTpcXHRcXG4zOTYwOlxcdFxcdGlmICghZGF0YSlcXG4zOTYxOlxcdFxcdFxcdHJldHVybiAwO1xcbjM5NjI6XFx0XFxuMzk2MzpcXHRcXHRpZiAoKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gfHwgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpKSBcXHUwMDI2XFx1MDAyNlxcbjM5NjQ6XFx0XFx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXFx1MDAzZXJlYWxfZGV2KSkpIHtcXG4zOTY1OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4zOTY2OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiQ2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZVxcXCIpO1xcbjM5Njc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4zOTY4OlxcdFxcdH1cXG4zOTY5OlxcdFxcbjM5NzA6XFx0XFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fFxcbjM5NzE6XFx0XFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfSUNWX0xFTl0gfHxcXG4zOTcyOlxcdFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1NDSV0gfHxcXG4zOTczOlxcdFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1BPUlRdKVxcbjM5NzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzk3NTpcXHRcXG4zOTc2OlxcdFxcdC8qIEtlZXAgYSBjb3B5IG9mIHVubW9kaWZpZWQgc2VjeSBhbmQgdHhfc2MsIGluIGNhc2UgdGhlIG9mZmxvYWRcXG4zOTc3OlxcdFxcdCAqIHByb3BhZ2F0aW9uIGZhaWxzLCB0byByZXZlcnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uLlxcbjM5Nzg6XFx0XFx0ICovXFxuMzk3OTpcXHRcXHRtZW1jcHkoXFx1MDAyNnNlY3ksIFxcdTAwMjZtYWNzZWMtXFx1MDAzZXNlY3ksIHNpemVvZihzZWN5KSk7XFxuMzk4MDpcXHRcXHRtZW1jcHkoXFx1MDAyNnR4X3NjLCBcXHUwMDI2bWFjc2VjLVxcdTAwM2VzZWN5LnR4X3NjLCBzaXplb2YodHhfc2MpKTtcXG4zOTgxOlxcdFxcbjM5ODI6XFx0XFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgZGF0YSk7XFxuMzk4MzpcXHRcXHRpZiAocmV0KVxcbjM5ODQ6XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjM5ODU6XFx0XFxuMzk4NjpcXHRcXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSkge1xcbjM5ODc6XFx0XFx0XFx0b2ZmbG9hZCA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSk7XFxuMzk4ODpcXHRcXHRcXHRpZiAobWFjc2VjLVxcdTAwM2VvZmZsb2FkICE9IG9mZmxvYWQpIHtcXG4zOTg5OlxcdFxcdFxcdFxcdG1hY3NlY19vZmZsb2FkX3N0YXRlX2NoYW5nZSA9IHRydWU7XFxuMzk5MDpcXHRcXHRcXHRcXHRyZXQgPSBtYWNzZWNfdXBkYXRlX29mZmxvYWQoZGV2LCBvZmZsb2FkLCBleHRhY2spO1xcbjM5OTE6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4zOTkyOlxcdFxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4zOTkzOlxcdFxcdFxcdH1cXG4zOTk0OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTA6MDYuNjYxOTY2Nzg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODc4MDI0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEaWdnaW5nIGludG8gTmV0d29yayBDYXBhYmlsaXR5IENoZWNrcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGhhbmRsaW5nIG5ldHdvcmsgbGluayBjYXBhYmlsaXRpZXMgYW5kIHBlcm1pc3Npb24gY2hlY2tzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGZvY3VzIG9uIHdoZXJlIHRoZXNlIGNoZWNrcyBhcmUgYWN0dWFsbHkgYmVpbmcgdXNlZCwgYW5kIGhvdy4gSSdsbCBzdGFydCB3aXRoIGBtYWNzZWNfbmV3bGlua2Ag4oCTIHRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoaXMga2luZCBvZiBmdW5jdGlvbmFsaXR5IOKAkyBhbmQgdGhlbiBicm9hZGVuIG15IHNlYXJjaCB0byBvdGhlciByZWxldmFudCBhcmVhcy4gVG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldywgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGZ1bmN0aW9ucyBhbmQgbW9kdWxlcyB0aGF0IHVzZSByb3V0aW5lcyBsaWtlIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlYCwgb3Igc2ltaWxhciBwZXJtaXNzaW9uIHZlcmlmaWNhdGlvbiBwcm9jZWR1cmVzLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzY2FuIHRoZSBjb2RlYmFzZSBmb3IgaW5zdGFuY2VzIG9mIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlYCB0byBtYXAgb3V0IHRoZSB1c2FnZSBsYW5kc2NhcGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTA6MDkuMDQ5NzcxMjI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5NDUxMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjQ2NT1zdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDczLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI0NzQ6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZ2VuZXZlLVxcdTAwM2VuZXQpKVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI0NzUtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jPTM5NDk9c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk2My1cXHRpZiAoKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gfHwgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM5NjQ6XFx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXFx1MDAzZXJlYWxfZGV2KSkpIHtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTY1LVxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz0xNDczPWludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTQ5OC1cXHRcXHRsb3dlcmRldiA9IG1hY3ZsYW5fZGV2X3JlYWxfZGV2KGxvd2VyZGV2KTtcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6MTQ5OTpcXHRcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KGxvd2VyZGV2KSkpIHtcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTUwMC1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTYzMz1zdGF0aWMgaW50IG1hY3ZsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTE2NDQtXFx0ICAgIChkYXRhW0lGTEFfTUFDVkxBTl9CQ19RVUVVRV9MRU5dIHx8IGRhdGFbSUZMQV9NQUNWTEFOX0JDX0NVVE9GRl0pIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjE2NDU6XFx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldCh2bGFuLVxcdTAwM2Vsb3dlcmRldikpKSB7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTE2NDYtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTQ0NDA9c3RhdGljIGludCB2eGxhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ1MC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDQ1MTpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB2eGxhbi1cXHUwMDNlbmV0KSlcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ1Mi1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmg9MjU4PXN0cnVjdCBuZXQgKnJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHN0cnVjdCBzb2NrICpzaywgaW50IG5ldG5zaWQpO1xcbmluY2x1ZGUvbmV0L3J0bmV0bGluay5oOjI1OTpib29sIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL25ldC9ydG5ldGxpbmsuaC0yNjAtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXQgKmxpbmtfbmV0KTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTI0OTU9RVhQT1JUX1NZTUJPTF9HUEwocnRubF9nZXRfbmV0X25zX2NhcGFibGUpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI0OTYtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjQ5Nzpib29sIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNDk4LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0ICpsaW5rX25ldClcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1MDItfVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI1MDM6RVhQT1JUX1NZTUJPTF9HUEwocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjUwNC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE0NTU9c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDYzLVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NjQ6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDY1LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDg3PXN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTUtXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ5NjpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTctXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbm5ldC9pcHY0L2lwX3Z0aS5jPTU5MT1zdGF0aWMgaW50IHZ0aV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYy01OTgtXFxubmV0L2lwdjQvaXBfdnRpLmM6NTk5OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXFx1MDAzZW5ldCkpXFxubmV0L2lwdjQvaXBfdnRpLmMtNjAwLVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NDk3PXN0YXRpYyBpbnQgaXBpcF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNTA2LVxcbm5ldC9pcHY0L2lwaXAuYzo1MDc6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5uZXQvaXB2NC9pcGlwLmMtNTA4LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjA0Mz1zdGF0aWMgaW50IGlwNmdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA1MC1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjA1MTpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDUyLVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI2NT1zdGF0aWMgaW50IGlwNmVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI3Mi1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI3MzpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjc0LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjEwOT1zdGF0aWMgaW50IGlwNl90bmxfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMTgtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMTk6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEyMC1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jPTEwNDA9c3RhdGljIGludCB2dGk2X2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9pcHY2L2lwNl92dGkuYy0xMDQ4LVxcbm5ldC9pcHY2L2lwNl92dGkuYzoxMDQ5OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTEwNTAtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTE2MDE9c3RhdGljIGludCBpcGlwNl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy0xNjE1LVxcbm5ldC9pcHY2L3NpdC5jOjE2MTY6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcXG5uZXQvaXB2Ni9zaXQuYy0xNjE3LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9ODY0PXN0YXRpYyBpbnQgeGZybWlfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTg3MS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM6ODcyOlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTg3My1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMDoxMC44MDkyMjc5OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjgyNjcwMzMwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUFDc2VjIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmlnb3JvdXNseSBhbmFseXplIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyB3aXRoaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC4gSSBzZWUgdGhhdCBpdCdzIGludHJvZHVjaW5nIGEgY2FwYWJpbGl0eSBjaGVjaywgc3BlY2lmaWNhbGx5OlxuXG5gYGBjXG5cdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuXHQgICAgIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKSB7XG5cdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuXHRcdFx0ICAgICAgIFwiQ2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZVwiKTtcblx0XHRyZXR1cm4gLUVQRVJNO1xuXHR9XG5gYGBcblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBtZW1vcnktcmVsYXRlZCB2dWxuZXJhYmlsaXRpZXM6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgbGVha3MsIG9yIHdyaXRlcy4gTGV0J3Mgc2VlLi4uXG5cbiogICBgbWFjc2VjLVx1MDAzZXJlYWxfZGV2YCBpcyBhbHJlYWR5IGEgdmFsaWQgcG9pbnRlciwgcHJlc3VtYWJseSB0byBhIGBzdHJ1Y3QgbmV0X2RldmljZWAuIGBkZXZfbmV0KClgIGdyYWJzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBvZiB0aGF0IGRldmljZS4gYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoKWAgcGVyZm9ybXMgYSBjYXBhYmlsaXR5IGNoZWNrIHVzaW5nIGBuZXRsaW5rX25ldF9jYXBhYmxlKC4uLilgLiBgTkxfU0VUX0VSUl9NU0dgIHdyaXRlcyBhIHN0YXRpYyBzdHJpbmcgdG8gYGV4dGFja2AuIE5vdGhpbmcgc2VlbXMgYW1pc3MuXG5cbkZyb20gYSBtZW1vcnkgcGVyc3BlY3RpdmUsIGFyZSB0aGVyZSBhbnkgcmlza3Mgc3RlbW1pbmcgZnJvbSB1bmluaXRpYWxpemVkIGRhdGE/XG5cbiogICBObyBuZXcgbWVtb3J5IGlzIGFsbG9jYXRlZCBvciBhbHRlcmVkIGJ5IHRoaXMgcGF0Y2guXG4qICAgVGhlIHBhdGNoICpkb2Vzbid0KiBpbnZvbHZlIGNvcHlpbmcgZGF0YSB0byB1c2Vyc3BhY2UgdGhhdOKAmXMgYmVlbiBtb2RpZmllZC4gT25seSBhbiBlcnJvciBtZXNzYWdlIGlzIHdyaXR0ZW4gaWYgdGhlIHBlcm1pc3Npb24gY2hlY2sgZmFpbHMuXG4qICAgVGhlcmUncyBubyBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuKiAgIE5vIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGxlZnQgdW5pbml0aWFsaXplZCBhcyBhIHJlc3VsdCBvZiB0aGlzIGNvZGUuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBhbmFseXNpcywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBDb25zZXF1ZW50bHksIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgaGVyZS4gV2UgY2FuIG1hcmsgYE5lZWRzS01TQU4gPSBmYWxzZWAgaW4gb3VyIGBzZXQtcmVzdWx0c2AgY2FsbCwgYW5kIHByb3ZpZGUgYSBjbGVhciBleHBsYW5hdGlvbiB0byBkaXN0aW5ndWlzaCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpbiB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMxOSwiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTE6MTkuMDc2MjY0NTM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byB2ZXJpZnkgcGVybWlzc2lvbnMgd2hlbiBjaGFuZ2luZyBzZXR0aW5ncyBvZiBhbiBvZmZsb2FkZWQgTUFDc2VjIGRldmljZSBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxcblxcblRoaXMgaXMgcHVyZWx5IGEgcGVybWlzc2lvbiB2YWxpZGF0aW9uIGNoZWNrIHJldHVybmluZyAtRVBFUk0gYW5kIHNldHRpbmcgYW4gZXJyb3Igc3RyaW5nIGluIGV4dGFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IG1lbW9yeSBzdHJ1Y3R1cmVzLCBidWZmZXJzLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rKCkgdG8gdmVyaWZ5IHBlcm1pc3Npb25zIHdoZW4gY2hhbmdpbmcgc2V0dGluZ3Mgb2YgYW4gb2ZmbG9hZGVkIE1BQ3NlYyBkZXZpY2UgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcy5cXG5cXG5UaGlzIGlzIHB1cmVseSBhIHBlcm1pc3Npb24gdmFsaWRhdGlvbiBjaGVjayByZXR1cm5pbmcgLUVQRVJNIGFuZCBzZXR0aW5nIGFuIGVycm9yIHN0cmluZyBpbiBleHRhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBtZW1vcnkgc3RydWN0dXJlcywgYnVmZmVycywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow2xfxw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 16:50:27 +0000 UTC FinishedAt: 2026-09-06 17:11:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACSEC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACSEC" ], "series_id": "d52fda5e-3d27-4817-b735-7ad4cc46ec4d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macsec_changelink" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ1NFQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY3NlY19jaGFuZ2VsaW5rJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rKCkgdG8gdmVyaWZ5IHBlcm1pc3Npb25zIHdoZW4gY2hhbmdpbmcgc2V0dGluZ3Mgb2YgYW4gb2ZmbG9hZGVkIE1BQ3NlYyBkZXZpY2UgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcy5cblxuVGhpcyBpcyBwdXJlbHkgYSBwZXJtaXNzaW9uIHZhbGlkYXRpb24gY2hlY2sgcmV0dXJuaW5nIC1FUEVSTSBhbmQgc2V0dGluZyBhbiBlcnJvciBzdHJpbmcgaW4gZXh0YWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgbWVtb3J5IHN0cnVjdHVyZXMsIGJ1ZmZlcnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rIHRvIHJlc3RyaWN0IGNoYW5naW5nIE1BQ3NlYyBkZXZpY2Ugc2V0dGluZ3Mgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuYW1lc3BhY2UuIE1BQ3NlYyBkZXZpY2VzIGFyZSBmdWxseSB2aXJ0dWFsL3NvZnR3YXJlLWVtdWxhdGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG1lc3NhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjBkNGVhNzBmN2UwYTdmMzlmZmZmYzhlZTJjYmRhNjcwNmM5Nzc2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MDk6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuaW5kZXggNmY5ZjNhY2VmZmFhZC4uMGYzNTFlODM5ZjE0NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3NlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuQEAgLTE5LDYgJiM0MzsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyb19jZWxscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXHUwMDNlXG5AQCAtMzk1OSw2ICYjNDM7Mzk2MCwxMyBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVx1MDAzZXJlYWxfZGV2KSkpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fFxuIFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfSUNWX0xFTl0gfHxcbiBcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1NDSV0gfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNTRUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNzZWNfY2hhbmdlbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsgdG8gcmVzdHJpY3QgY2hhbmdpbmcgTUFDc2VjIGRldmljZSBzZXR0aW5ncyB3aGVuIHRoZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5hbWVzcGFjZS4gTUFDc2VjIGRldmljZXMgYXJlIGZ1bGx5IHZpcnR1YWwvc29mdHdhcmUtZW11bGF0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbWVzc2FnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMGQ0ZWE3MGY3ZTBhN2YzOWZmZmZjOGVlMmNiZGE2NzA2Yzk3NzY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAxNzowOToyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3NlYy5jIGIvZHJpdmVycy9uZXQvbWFjc2VjLmMKaW5kZXggNmY5ZjNhY2VmZmFhZC4uMGYzNTFlODM5ZjE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjc2VjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWFjc2VjLmMKQEAgLTE5LDYgJiM0MzsxOSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2dyb19jZWxscy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9tYWNzZWMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0X21ldGFkYXRhLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9ydG5ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZGV2X2xvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oJmd0OwpAQCAtMzk1OSw2ICYjNDM7Mzk2MCwxMyBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sCiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gfHwgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLSZndDtyZWFsX2RldikpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7Q2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CX0KJiM0MzsKIAlpZiAoZGF0YVtJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEVdIHx8CiAJICAgIGRhdGFbSUZMQV9NQUNTRUNfSUNWX0xFTl0gfHwKIAkgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTcKCQkJCQkJCW91dHB1dDogNjMKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGNvZGUgY2hhbmdlLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBuZXR3b3JrIHNlY3VyaXR5IGFuZCBrZXJuZWwgZHJpdmVyczoKCioqQW5hbHl6aW5nIGEgTUFDc2VjIFBhdGNoKioKCkFscmlnaHQsIGEgcGF0Y2ggaGFzIGhpdCBteSBkZXNrIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9uZXQvbWFjc2VjLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtYWNzZWNfY2hhbmdlbGlua2AgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCBJJiMzOTttIGdvaW5nIGludG8gdHJpYWdlIG1vZGUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gKnVuZGVyc3RhbmQqIHdoYXQgdGhpcyBtb2RpZmljYXRpb24gaXMgKmludGVuZGVkKiB0byBkbywgYW5kICp3aHkqLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nOgoKKiAgIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoaXMgZmlsZSwgdGhlIG1vZGlmaWNhdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFdoYXQgaXMgdGhlIGhpc3RvcnkgaGVyZT8gSXMgdGhpcyBhIG5ldyBmZWF0dXJlLCBhIGJ1ZyBmaXgsIG9yIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgYGdpdCBsb2dgIG9uIHRoYXQgc3BlY2lmaWMgZmlsZSB0byBzZWUgdGhlIHJlY2VudCBjb21taXRzLiBJIG5lZWQgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgaW50ZW50IG9mIGBtYWNzZWNfY2hhbmdlbGlua2AsIGFuZCB0aGlzIGRyaXZlciBpbiBnZW5lcmFsLgoqICAgTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIG90aGVyIGZpbGVzIHRoaXMgZnVuY3Rpb24gY2FsbHMgb3IgaXMgY2FsbGVkIGJ5LiBJIHdhbnQgdG8gYnVpbGQgYSBjYWxsIGdyYXBoIG1lbnRhbGx5LiBBbnkgS2NvbmZpZyBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBjaGVjay4gQXJlIGFueSBuZXcgS2NvbmZpZyBvcHRpb25zIGludHJvZHVjZWQsIGNoYW5nZWQsIG9yIHJlbW92ZWQ/IFdoYXQga2VybmVsIHZlcnNpb25zIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/CiogICBJIHdhbnQgYSBxdWljayB3YXkgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSwgc28gYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHdpbGwgYmUgbXkgdG9vbHMgb2YgY2hvaWNlLiBXaGF0IGlzIHRoZSBkaXJlY3QgY29udGV4dCBhcm91bmQgdGhlIG1vZGlmaWVkIGxpbmVzPyBEb2VzIHRoaXMgY2hhbmdlIGRlcGVuZCBvbiBvdGhlciBjaGFuZ2VzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2U/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSAqaW1wYWN0KiBvZiB0aGlzIHBhdGNoLCBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZS4gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmc/IElzIHRoaXMgcHJvcGVybHkgdGVzdGVkPyBJIHdpbGwgbmVlZCB0byBiZSB2ZXJ5IHJpZ29yb3VzIG9uIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWFjc2VjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NTA6XHRcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjM5NTE6XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjM5NTI6XHR7XG4zOTUzOlx0XHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbjM5NTQ6XHRcdGJvb2wgbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gZmFsc2U7XG4zOTU1Olx0XHRlbnVtIG1hY3NlY19vZmZsb2FkIG9mZmxvYWQ7XG4zOTU2Olx0XHRzdHJ1Y3QgbWFjc2VjX3R4X3NjIHR4X3NjO1xuMzk1NzpcdFx0c3RydWN0IG1hY3NlY19zZWN5IHNlY3k7XG4zOTU4Olx0XHRpbnQgcmV0O1xuMzk1OTpcdFxuMzk2MDpcdFx0aWYgKCFkYXRhKVxuMzk2MTpcdFx0XHRyZXR1cm4gMDtcbjM5NjI6XHRcbjM5NjM6XHRcdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuMzk2NDpcdFx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXHUwMDNlcmVhbF9kZXYpKSkge1xuMzk2NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4zOTY2Olx0XHRcdFx0ICAgICAgIFwmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcJiMzNDspO1xuMzk2NzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMzk2ODpcdFx0fVxuMzk2OTpcdFxuMzk3MDpcdFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fFxuMzk3MTpcdFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfSUNWX0xFTl0gfHxcbjM5NzI6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1NDSV0gfHxcbjM5NzM6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1BPUlRdKVxuMzk3NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM5NzU6XHRcbjM5NzY6XHRcdC8qIEtlZXAgYSBjb3B5IG9mIHVubW9kaWZpZWQgc2VjeSBhbmQgdHhfc2MsIGluIGNhc2UgdGhlIG9mZmxvYWRcbjM5Nzc6XHRcdCAqIHByb3BhZ2F0aW9uIGZhaWxzLCB0byByZXZlcnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uLlxuMzk3ODpcdFx0ICovXG4zOTc5Olx0XHRtZW1jcHkoXHUwMDI2c2VjeSwgXHUwMDI2bWFjc2VjLVx1MDAzZXNlY3ksIHNpemVvZihzZWN5KSk7XG4zOTgwOlx0XHRtZW1jcHkoXHUwMDI2dHhfc2MsIFx1MDAyNm1hY3NlYy1cdTAwM2VzZWN5LnR4X3NjLCBzaXplb2YodHhfc2MpKTtcbjM5ODE6XHRcbjM5ODI6XHRcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xuMzk4MzpcdFx0aWYgKHJldClcbjM5ODQ6XHRcdFx0Z290byBjbGVhbnVwO1xuMzk4NTpcdFxuMzk4NjpcdFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pIHtcbjM5ODc6XHRcdFx0b2ZmbG9hZCA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSk7XG4zOTg4Olx0XHRcdGlmIChtYWNzZWMtXHUwMDNlb2ZmbG9hZCAhPSBvZmZsb2FkKSB7XG4zOTg5Olx0XHRcdFx0bWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gdHJ1ZTtcbjM5OTA6XHRcdFx0XHRyZXQgPSBtYWNzZWNfdXBkYXRlX29mZmxvYWQoZGV2LCBvZmZsb2FkLCBleHRhY2spO1xuMzk5MTpcdFx0XHRcdGlmIChyZXQpXG4zOTkyOlx0XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4zOTkzOlx0XHRcdH1cbjM5OTQ6XHRcdH1cbjM5OTU6XHRcbjM5OTY6XHRcdC8qIElmIGgvdyBvZmZsb2FkaW5nIGlzIGF2YWlsYWJsZSwgcHJvcGFnYXRlIHRvIHRoZSBkZXZpY2UgKi9cbjM5OTc6XHRcdGlmICghbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlIFx1MDAyNlx1MDAyNiBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIHtcbjM5OTg6XHRcdFx0Y29uc3Qgc3RydWN0IG1hY3NlY19vcHMgKm9wcztcbjM5OTk6XHRcdFx0c3RydWN0IG1hY3NlY19jb250ZXh0IGN0eDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDU0VDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMDI9Y29uZmlnIEFNVFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzE3LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMTg6Y29uZmlnIE1BQ1NFQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMTktXHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xQUUgTUFDLWxldmVsIGVuY3J5cHRpb24gKE1BQ3NlYylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTA5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTUFDU0VDIEtjb25maWcqKgoKT2theSwgdGltZSB0byBnZXQgZ3JhbnVsYXIuIEJlZm9yZSBJIHN0YXJ0IG1ha2luZyBhbnkgY2hhbmdlcywgSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBmb3IgTUFDU0VDLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZpbmRpbmcgdGhlIGJvb2xlYW4gc3dpdGNoZXM7IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBob3cgaXQmIzM5O3MgY3VycmVudGx5IGludGVncmF0ZWQsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYW5kIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIGNvbnNpZGVyYXRpb25zIHRoYXQgYXJlIHJlZmxlY3RlZCBpbiB0aGUgS2NvbmZpZz8gSXQmIzM5O3MgYWxsIGFib3V0IGJ1aWxkaW5nIGEgc29saWQgZm91bmRhdGlvbiBvZiB1bmRlcnN0YW5kaW5nIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgbWFraW5nIGEgc2luZ2xlIHR3ZWFrLiBUaGlzIHdpbGwgaGVscCBwcmV2ZW50IHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIGRvd24gdGhlIGxpbmUgYW5kIGFsbG93IG1lIHRvIGRldGVybWluZSBpZiBjaGFuZ2VzIHNob3VsZCBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXJzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMzE2Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGFtdC5cbiAzMTc6XHRcbiAzMTg6XHRjb25maWcgTUFDU0VDXG4gMzE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xQUUgTUFDLWxldmVsIGVuY3J5cHRpb24gKE1BQ3NlYylcJiMzNDtcbiAzMjA6XHRcdHNlbGVjdCBDUllQVE9cbiAzMjE6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gMzIyOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuIDMyMzpcdFx0c2VsZWN0IEdST19DRUxMU1xuIDMyNDpcdFx0aGVscFxuIDMyNTpcdFx0ICAgTUFDc2VjIGlzIGFuIGVuY3J5cHRpb24gc3RhbmRhcmQgZm9yIEV0aGVybmV0LlxuIDMyNjpcdFxuIDMyNzpcdGNvbmZpZyBORVRDT05TT0xFXG4gMzI4Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG4gMzI5Olx0XHRkZXBlbmRzIG9uIFBSSU5US1xuIDMzMDpcdFx0aGVscFxuIDMzMTpcdFx0ICBJZiB5b3Ugd2FudCB0byBsb2cga2VybmVsIG1lc3NhZ2VzIG92ZXIgdGhlIG5ldHdvcmssIGVuYWJsZSB0aGlzLlxuIDMzMjpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzMzOlx0XG4gMzM0Olx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTUFDc2VjIEV4cGxvcmF0aW9uOiBEaXZpbmcgaW50byB0aGUgVmlydHVhbCBOZXR3b3JrIERldmljZSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhpcyBgbWFjc2VjLmNgIGRyaXZlciwgd2hpY2ggZnJvbSB0aGUgb3V0c2V0LCBzZWVtcyB0byBiZSBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgZHJpdmVyLiBJdCBjcmVhdGVzIHRoZXNlIE1BQ3NlYyBpbnRlcmZhY2VzLCBhbmQgaXQmIzM5O3MgYWxsIGhhbmRsZWQgdGhyb3VnaCBgcnRubGAgYW5kIGBuZXRsaW5rYC4gVGhlIGtleSB0YWtlYXdheSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgdmlydHVhbCwgZnVsbHkgZW11bGF0ZWQsIG1lYW5pbmcgaXQgc2l0cyBvbiB0b3Agb2Ygc29tZXRoaW5nIGxpa2UgYSBkdW1teSwgdmV0aCwgb3IgbG9vcGJhY2sgZGV2aWNlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIG5ldHdvcmsgc3RhY2suCgpJdCBsb29rcyBsaWtlIFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGNvbmZpZ3VyaW5nIHRoZXNlIE1BQ3NlYyBkZXZpY2VzIHRocm91Z2ggbmV0bGluaywgc3BlY2lmaWNhbGx5IHJ0bmV0bGluayBhbmQgZ2VuZXRsaW5rLCB1c2luZyBgSUZMQV9JTkZPX0tJTkQgJiMzNDttYWNzZWMmIzM0O2AuIFRoYXQgZ2l2ZXMgbWUgYSBncmVhdCBmb290aG9sZCBmb3IgZnV6emluZyBpZiBJIG5lZWQgaXQuCgpOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIGFuZCByZWxhdGlvbnNoaXBzIGhlcmUgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgZHJpdmVyIHRob3JvdWdobHkuIEkgc2hvdWxkIGZpbmQgd2hlcmUgYG1hY3NlY19jaGFuZ2VsaW5rYCBpcyBjYWxsZWQgd2l0aGluIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBlbHNlIGluIGBtYWNzZWMuY2AgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGZ1bmN0aW9uaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucywgbGlrZWx5LiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBpbm5lciB3b3JraW5ncyBvZiB0aGlzIHZpcnR1YWwgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY3NlY19jaGFuZ2VsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWFjc2VjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWFjc2VjLmM9Mzg1Nz1zdGF0aWMgdm9pZCBtYWNzZWNfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zODcwLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzg3MTpzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzg3Mi1cdFx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk0OC1cbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM5NDk6c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk1MC1cdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTc2LVx0LyogS2VlcCBhIGNvcHkgb2YgdW5tb2RpZmllZCBzZWN5IGFuZCB0eF9zYywgaW4gY2FzZSB0aGUgb2ZmbG9hZFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk3NzpcdCAqIHByb3BhZ2F0aW9uIGZhaWxzLCB0byByZXZlcnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uLlxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk3OC1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5ODEtXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTgyOlx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgZGF0YSk7XG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTgzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00MTczPXN0YXRpYyBpbnQgbWFjc2VjX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00MjYyLVx0aWYgKGRhdGEpIHtcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjQyNjM6XHRcdGVyciA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDI2NC1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00NDQ2PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDUzLVx0Lm5ld2xpbmtcdD0gbWFjc2VjX25ld2xpbmssXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDU0Olx0LmNoYW5nZWxpbmtcdD0gbWFjc2VjX2NoYW5nZWxpbmssXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDU1LVx0LmRlbGxpbmtcdD0gbWFjc2VjX2RlbGxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMTYKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1BQ3NlYyBMaW5rIENoYW5nZSBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtYWNzZWNfY2hhbmdlbGlua2AgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBuZXRsaW5rIGNoYW5nZWxpbmsgaGFuZGxlciBmb3IgTUFDc2VjIG5ldHdvcmsgZGV2aWNlcy4gSXQgc2VlbXMgdGhhdCB3aGVuIGEgdXNlciwgZWl0aGVyIHByaXZpbGVnZWQgb3IgdW5wcml2aWxlZ2VkIGJ1dCB3aXRoIG5ldGxpbmsgYWNjZXNzLCBzZW5kcyBhbiBSVE1fTkVXTElOSyBvciBSVE1fU0VUTElOSyBtZXNzYWdlIHRvIG1vZGlmeSBhIE1BQ3NlYyBsaW5rLCB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCBnZXRzIGNhbGxlZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGEgcGVybWlzc2lvbiBjaGVjaywgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgLCB3aGljaCBzb3VuZHMgbGlrZSBpdCYjMzk7cyBnb2luZyB0byBiZSBrZXksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggTUFDc2VjIGRldmljZXMgd2hlcmUgdGhlIHVuZGVybHlpbmcgcmVhbCBkZXZpY2UgbGl2ZXMgaW4gYSBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2Ugb3Igd2hlbiBvZmZsb2FkaW5nIGlzIGludm9sdmVkLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gc29tZXRoaW5nIEkgY2FuIGVmZmVjdGl2ZWx5IGZ1enogaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQnV0LCB5ZXMsIGl0JiMzOTtzIHRvdGFsbHkgcmVhY2hhYmxlIGJlY2F1c2UgSSBjYW4gY3JlYXRlIGFuZCBtYW5pcHVsYXRlIHRoZXNlIGBtYWNzZWNgIGRldmljZXMgdXNpbmcgbmV0bGluayBvbiB0b3Agb2YgdmlydHVhbCBkZXZpY2VzIGxpa2UgYHZldGhgLCBgZHVtbXlgLCBhbmQgYG1hY3ZsYW5gLCBhbW9uZyBvdGhlcnMuIFRoYXQgbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIG15IHRpbWUuIEl0IHRvdWNoZXMgb24gY29yZSBuZXR3b3JraW5nIGRyaXZlciBhbmQgbmV0bGluayBsaW5rIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucy4gVGhlIHJlbGV2YW50IG9uZSBpcyBgQ09ORklHX01BQ1NFQ2AuIEl0IGxvb2tzIGxpa2UgaXQgZGVwZW5kcyBvbiBgTkVUYCBhbmQgdGhlbiBzZWxlY3RzIGBDUllQVE9gLCBgQ1JZUFRPX0FFU2AsIGBDUllQVE9fR0NNYCwgYW5kIGBHUk9fQ0VMTFNgLiBHb29kLCBJIGtub3cgZXhhY3RseSB3aGF0IHRvIGxvb2sgZm9yIHRoZXJlLgoKRm9jdXNpbmcgb24gdGhlIHN5bWJvbHMsIG9idmlvdXNseSB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0byBob25lIGluIG9uIGlzIGBtYWNzZWNfY2hhbmdlbGlua2AuIEkmIzM5O2xsIGFsc28gZ2xhbmNlIGF0IGBtYWNzZWNfbmV3bGlua2AsIGp1c3QgdG8gYmUgc3VyZSwgYWx0aG91Z2ggYGNoYW5nZWxpbmtgIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzd2VlcCBvZiB0aGUgZGlmZiB0byBjb25maXJtIG5vIG90aGVyIGZpbGVzIG9yIHN5bWJvbHMgYXJlIG1vZGlmaWVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEl0JiMzOTtzIGFsbCBjb250YWluZWQgd2l0aGluIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AsIHNwZWNpZmljYWxseSBgbWFjc2VjX2NoYW5nZWxpbmtgLgoKQWxyaWdodCwgYSBmaW5hbCBjaGVjayB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGFsbCB0aGUgcGllY2VzOgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlKiogLSBBYnNvbHV0ZWx5LgoqICAgKipGb2N1c1N5bWJvbHM6KiogYG1hY3NlY19jaGFuZ2VsaW5rYCAtIEdvdCBpdC4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgTUFDU0VDYCAtIENvbmZpcm1lZC4KKiAgICoqUmVhc29uaW5nOioqIENvbmNpc2UsIHNvbGlkIHJhdGlvbmFsZS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDU0VDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjc2VjX2NoYW5nZWxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rIHRvIHJlc3RyaWN0IGNoYW5naW5nIE1BQ3NlYyBkZXZpY2Ugc2V0dGluZ3Mgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuYW1lc3BhY2UuIE1BQ3NlYyBkZXZpY2VzIGFyZSBmdWxseSB2aXJ0dWFsL3NvZnR3YXJlLWVtdWxhdGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG1lc3NhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNTRUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNzZWNfY2hhbmdlbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsgdG8gcmVzdHJpY3QgY2hhbmdpbmcgTUFDc2VjIGRldmljZSBzZXR0aW5ncyB3aGVuIHRoZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5hbWVzcGFjZS4gTUFDc2VjIGRldmljZXMgYXJlIGZ1bGx5IHZpcnR1YWwvc29mdHdhcmUtZW11bGF0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbWVzc2FnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byB2ZXJpZnkgcGVybWlzc2lvbnMgd2hlbiBjaGFuZ2luZyBzZXR0aW5ncyBvZiBhbiBvZmZsb2FkZWQgTUFDc2VjIGRldmljZSBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxuXG5UaGlzIGlzIHB1cmVseSBhIHBlcm1pc3Npb24gdmFsaWRhdGlvbiBjaGVjayByZXR1cm5pbmcgLUVQRVJNIGFuZCBzZXR0aW5nIGFuIGVycm9yIHN0cmluZyBpbiBleHRhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBtZW1vcnkgc3RydWN0dXJlcywgYnVmZmVycywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjBkNGVhNzBmN2UwYTdmMzlmZmZmYzhlZTJjYmRhNjcwNmM5Nzc2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTc6MDk6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzZWMuYyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jCmluZGV4IDZmOWYzYWNlZmZhYWQuLjBmMzUxZTgzOWYxNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3NlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jCkBAIC0xOSw2ICYjNDM7MTksNyBAQAogI2luY2x1ZGUgJmx0O25ldC9ncm9fY2VsbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbWFjc2VjLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2RzdF9tZXRhZGF0YS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcnRuZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCZndDsKQEAgLTM5NTksNiAmIzQzOzM5NjAsMTMgQEAgc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCWlmICghZGF0YSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWYgKChkYXRhW0lGTEFfTUFDU0VDX09GRkxPQURdIHx8IG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy0mZ3Q7cmVhbF9kZXYpKSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2UmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwl9CiYjNDM7CiAJaWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fAogCSAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8CiAJICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbjogQSBRdWljayBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBqdXN0aWZpZXMgYSBkZWRpY2F0ZWQgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb2RlIGlzIGRvaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC4KCkkgc2VlIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB3aXRoaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC4gSXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBuZXR3b3JrIG5hbWVzcGFjZXMgYW5kIHBvdGVudGlhbGx5IG9mZmxvYWRlZCBNQUNzZWMgb3BlcmF0aW9ucy4gVGhlIGFkZGVkIGBpZmAgc3RhdGVtZW50IGNoZWNrcyBmb3IgYElGTEFfTUFDU0VDX09GRkxPQURgIG9yIGlmIHRoZSBkZXZpY2UgYG1hY3NlY2AgaXMgY29uc2lkZXJlZCBvZmZsb2FkZWQgYW5kIHRoZW4gY2FsbHMgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIHZlcmlmeSBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyB0aGUgYENBUF9ORVRfQURNSU5gIGNhcGFiaWxpdHkgaW4gdGhlIG5ldHdvcmsgbmFtZXNwYWNlIG9mIHRoZSAmIzM0O3JlYWwmIzM0OyBkZXZpY2UuIElmIHRoZSBjaGVjayBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3Igb2YgYC1FUEVSTWAuCgpUaGUgaW1wb3J0YW50IGJpdCBoZXJlIGlzIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlYC4gU2luY2UgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2hlY2sgcmVsYXRlZCB0byBuZXR3b3JrIG5hbWVzcGFjZXMgYW5kIHBlcm1pc3Npb24gY2hlY2tzLCBteSBleHBlcnQgaW50dWl0aW9uIHNheXMgdGhhdCB0aGlzIG1pZ2h0IGJlIGFuIGFyZWEgd2hlcmUgS01TQU4gY2FuIGlkZW50aWZ5IGlzc3Vlcy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hlY2sgcmVsYXRlcyB0byBwb3RlbnRpYWxseSBvZmZsb2FkZWQgb3BlcmF0aW9ucyBhbHNvIHJhaXNlcyBhIGZsYWcsIHNpbmNlIG1vcmUgY29tcGxleCBzZXR1cHMgbGlrZSB0aGF0IGFyZSBvZnRlbiBwcm9uZSB0byBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGVyZSBhcmUgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgd2hlbiBuZXR3b3JrIG5hbWVzcGFjZSBib3VuZGFyaWVzIGFyZSBjcm9zc2VkIG9yIG9mZmxvYWQgb3BlcmF0aW9ucyBhcmUgaW52b2x2ZWQuIEkmIzM5O2QgZGVmaW5pdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIG9mIHRoaXMgY2hlY2sgYW5kIHRoZSBzaXR1YXRpb25zIGl0IGNvdmVycy4KClNvLCBpbiBjb25jbHVzaW9uLCB3aGlsZSB0aGUgcGF0Y2ggaXRzZWxmIGlzIG5vdCBvdmVyd2hlbG1pbmdseSBjb21wbGV4LCB0aGUgYWRkZWQgY2hlY2tzIGludm9sdmluZyBuZXR3b3JrIG5hbWVzcGFjZXMsIG9mZmxvYWQsIGFuZCBwZXJtaXNzaW9ucyBkZWZpbml0ZWx5IHdhcnJhbnQgZnVydGhlciBzY3J1dGlueSwgYW5kIHRodXMgKmNvdWxkKiBiZSBhIGRlY2VudCBjYW5kaWRhdGUgZm9yIEtNU0FOIGZ1enppbmcuIEl0JiMzOTtzIGEgJiMzNDttYXliZSYjMzQ7IHRoYXQmIzM5O3MgbGVhbmluZyB0b3dhcmRzICYjMzQ7eWVzLCYjMzQ7IGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyBzb21lIGNvbXBsZXhpdHkgdG8gaXQsIHdoaWNoIEkmIzM5O2QgbmVlZCB0byB2ZXJpZnkgd2l0aCBmdXJ0aGVyIGNvZGUgYW5hbHlzaXMgKGUuZy4sIGdyZXBwaW5nIGZvciB3aGVyZSBgbWFjc2VjX2NoYW5nZWxpbmtgIGlzIGNhbGxlZCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgc2NlbmFyaW9zIGNvdmVyZWQgYnkgdGhlIGNvZGUpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNzZWNfY2hhbmdlbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jPTM4NTc9c3RhdGljIHZvaWQgbWFjc2VjX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzg3MC1cbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM4NzE6c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM4NzItXHRcdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdKVxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NDgtXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTQ5OnN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NTAtXHRcdFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk3Ni1cdC8qIEtlZXAgYSBjb3B5IG9mIHVubW9kaWZpZWQgc2VjeSBhbmQgdHhfc2MsIGluIGNhc2UgdGhlIG9mZmxvYWRcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM5Nzc6XHQgKiBwcm9wYWdhdGlvbiBmYWlscywgdG8gcmV2ZXJ0IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbi5cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NzgtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTgxLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk4MjpcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk4My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM9NDE3Mz1zdGF0aWMgaW50IG1hY3NlY19uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDI2Mi1cdGlmIChkYXRhKSB7XG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0MjYzOlx0XHRlcnIgPSBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oZGV2LCBkYXRhKTtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQyNjQtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM9NDQ0Nj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbWFjc2VjX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ1My1cdC5uZXdsaW5rXHQ9IG1hY3NlY19uZXdsaW5rLFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDQ1NDpcdC5jaGFuZ2VsaW5rXHQ9IG1hY3NlY19jaGFuZ2VsaW5rLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ1NS1cdC5kZWxsaW5rXHQ9IG1hY3NlY19kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzgxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ29udGV4dCBvZiBgbWFjc2VjX2NoYW5nZWxpbmtgKioKCkFscmlnaHQsIHNvIHRoZSBpbnN0cnVjdGlvbiBpcyB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBgbWFjc2VjX2NoYW5nZWxpbmtgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGF0JiMzOTtzIHN0YW5kYXJkIGRlYnVnZ2luZyBwcm9jZWR1cmUuJiMzNDsgSSYjMzk7bSBub3QganVzdCBsb29raW5nICphdCogdGhlIGZ1bmN0aW9uIGl0c2VsZjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcmVzdCBvZiB0aGUgY29kZS4gSXMgaXQgY2FsbGVkLCBhbmQgaWYgc28sIHdoZXJlIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnM/IFdoYXQgdmFyaWFibGVzIGFyZSBwYXNzZWQgdG8gaXQ/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IFRoZSBzdXJyb3VuZGluZyBsaW5lcyB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGV4cGVjdGVkIGlucHV0cywgb3V0cHV0cywgZXJyb3IgaGFuZGxpbmcsIGFuZCBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgTUFDc2VjIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGVzc2VudGlhbGx5IHBlcmZvcm1pbmcgYSBtaW5pYXR1cmUgY29udHJvbCBmbG93IGFuZCBkYXRhIGZsb3cgYW5hbHlzaXMgYXJvdW5kIHRoZSBgbWFjc2VjX2NoYW5nZWxpbmtgIGZ1bmN0aW9uIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBldmVuIHN0YXJ0IGRpZ2dpbmcgaW50byBpdHMgaW1wbGVtZW50YXRpb24uIEl0IGlzIGEgbmVjZXNzYXJ5IGZpcnN0IHN0ZXAuIEkgd2lsbCBiZSBsb29raW5nIGZvcjogY2FsbCBzaXRlcywgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBpbml0aWFsaXNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tYWNzZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk0NTpcdFxuMzk0NjpcdFx0cmV0dXJuIDA7XG4zOTQ3Olx0fVxuMzk0ODpcdFxuMzk0OTpcdHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbjM5NTA6XHRcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjM5NTE6XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjM5NTI6XHR7XG4zOTUzOlx0XHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbjM5NTQ6XHRcdGJvb2wgbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gZmFsc2U7XG4zOTU1Olx0XHRlbnVtIG1hY3NlY19vZmZsb2FkIG9mZmxvYWQ7XG4zOTU2Olx0XHRzdHJ1Y3QgbWFjc2VjX3R4X3NjIHR4X3NjO1xuMzk1NzpcdFx0c3RydWN0IG1hY3NlY19zZWN5IHNlY3k7XG4zOTU4Olx0XHRpbnQgcmV0O1xuMzk1OTpcdFxuMzk2MDpcdFx0aWYgKCFkYXRhKVxuMzk2MTpcdFx0XHRyZXR1cm4gMDtcbjM5NjI6XHRcbjM5NjM6XHRcdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuMzk2NDpcdFx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXHUwMDNlcmVhbF9kZXYpKSkge1xuMzk2NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4zOTY2Olx0XHRcdFx0ICAgICAgIFwmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcJiMzNDspO1xuMzk2NzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMzk2ODpcdFx0fVxuMzk2OTpcdFxuMzk3MDpcdFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fFxuMzk3MTpcdFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfSUNWX0xFTl0gfHxcbjM5NzI6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1NDSV0gfHxcbjM5NzM6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1BPUlRdKVxuMzk3NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM5NzU6XHRcbjM5NzY6XHRcdC8qIEtlZXAgYSBjb3B5IG9mIHVubW9kaWZpZWQgc2VjeSBhbmQgdHhfc2MsIGluIGNhc2UgdGhlIG9mZmxvYWRcbjM5Nzc6XHRcdCAqIHByb3BhZ2F0aW9uIGZhaWxzLCB0byByZXZlcnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uLlxuMzk3ODpcdFx0ICovXG4zOTc5Olx0XHRtZW1jcHkoXHUwMDI2c2VjeSwgXHUwMDI2bWFjc2VjLVx1MDAzZXNlY3ksIHNpemVvZihzZWN5KSk7XG4zOTgwOlx0XHRtZW1jcHkoXHUwMDI2dHhfc2MsIFx1MDAyNm1hY3NlYy1cdTAwM2VzZWN5LnR4X3NjLCBzaXplb2YodHhfc2MpKTtcbjM5ODE6XHRcbjM5ODI6XHRcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xuMzk4MzpcdFx0aWYgKHJldClcbjM5ODQ6XHRcdFx0Z290byBjbGVhbnVwO1xuMzk4NTpcdFxuMzk4NjpcdFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pIHtcbjM5ODc6XHRcdFx0b2ZmbG9hZCA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSk7XG4zOTg4Olx0XHRcdGlmIChtYWNzZWMtXHUwMDNlb2ZmbG9hZCAhPSBvZmZsb2FkKSB7XG4zOTg5Olx0XHRcdFx0bWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gdHJ1ZTtcbjM5OTA6XHRcdFx0XHRyZXQgPSBtYWNzZWNfdXBkYXRlX29mZmxvYWQoZGV2LCBvZmZsb2FkLCBleHRhY2spO1xuMzk5MTpcdFx0XHRcdGlmIChyZXQpXG4zOTkyOlx0XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4zOTkzOlx0XHRcdH1cbjM5OTQ6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipEaWdnaW5nIGludG8gTmV0d29yayBDYXBhYmlsaXR5IENoZWNrcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyBuZXR3b3JrIGxpbmsgY2FwYWJpbGl0aWVzIGFuZCBwZXJtaXNzaW9uIGNoZWNrcy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB3aGVyZSB0aGVzZSBjaGVja3MgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQsIGFuZCBob3cuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG1hY3NlY19uZXdsaW5rYCDigJMgdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHkg4oCTIGFuZCB0aGVuIGJyb2FkZW4gbXkgc2VhcmNoIHRvIG90aGVyIHJlbGV2YW50IGFyZWFzLiBUbyBnZXQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LCBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IGZ1bmN0aW9ucyBhbmQgbW9kdWxlcyB0aGF0IHVzZSByb3V0aW5lcyBsaWtlIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlYCwgb3Igc2ltaWxhciBwZXJtaXNzaW9uIHZlcmlmaWNhdGlvbiBwcm9jZWR1cmVzLiBJJiMzOTtsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZWJhc2UgZm9yIGluc3RhbmNlcyBvZiBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAgdG8gbWFwIG91dCB0aGUgdXNhZ2UgbGFuZHNjYXBlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjQ2NT1zdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQ3My1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI0NzQ6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBnZW5ldmUtXHUwMDNlbmV0KSlcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI0NzUtXHRcdHJldHVybiAtRVBFUk07XG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM9Mzk0OT1zdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk2My1cdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk2NDpcdCAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVx1MDAzZXJlYWxfZGV2KSkpIHtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NjUtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTQ3Mz1pbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNDk4LVx0XHRsb3dlcmRldiA9IG1hY3ZsYW5fZGV2X3JlYWxfZGV2KGxvd2VyZGV2KTtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxNDk5Olx0XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KGxvd2VyZGV2KSkpIHtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNTAwLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTYzMz1zdGF0aWMgaW50IG1hY3ZsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNjQ0LVx0ICAgIChkYXRhW0lGTEFfTUFDVkxBTl9CQ19RVUVVRV9MRU5dIHx8IGRhdGFbSUZMQV9NQUNWTEFOX0JDX0NVVE9GRl0pIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjE2NDU6XHQgICAgIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KHZsYW4tXHUwMDNlbG93ZXJkZXYpKSkge1xuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTE2NDYtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9NDQ0MD1zdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ1MC1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0NDUxOlx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdnhsYW4tXHUwMDNlbmV0KSlcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00NDUyLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmluY2x1ZGUvbmV0L3J0bmV0bGluay5oPTI1OD1zdHJ1Y3QgbmV0ICpydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzdHJ1Y3Qgc29jayAqc2ssIGludCBuZXRuc2lkKTtcbmluY2x1ZGUvbmV0L3J0bmV0bGluay5oOjI1OTpib29sIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L3J0bmV0bGluay5oLTI2MC1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5ldCAqbGlua19uZXQpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTI0OTU9RVhQT1JUX1NZTUJPTF9HUEwocnRubF9nZXRfbmV0X25zX2NhcGFibGUpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjQ5Ni1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI0OTc6Ym9vbCBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNDk4LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0ICpsaW5rX25ldClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTAyLX1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI1MDM6RVhQT1JUX1NZTUJPTF9HUEwocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTA0LVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE0NTU9c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ2My1cbm5ldC9pcHY0L2lwX2dyZS5jOjE0NjQ6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDY1LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE0ODc9c3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTUtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDk2Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ5Ny1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2NC9pcF92dGkuYz01OTE9c3RhdGljIGludCB2dGlfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jLTU5OC1cbm5ldC9pcHY0L2lwX3Z0aS5jOjU5OTpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbm5ldC9pcHY0L2lwX3Z0aS5jLTYwMC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2NC9pcGlwLmM9NDk3PXN0YXRpYyBpbnQgaXBpcF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjQvaXBpcC5jLTUwNi1cbm5ldC9pcHY0L2lwaXAuYzo1MDc6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5uZXQvaXB2NC9pcGlwLmMtNTA4LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMDQzPXN0YXRpYyBpbnQgaXA2Z3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA1MC1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMDUxOlx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxubmV0L2lwdjYvaXA2X2dyZS5jLTIwNTItXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNjU9c3RhdGljIGludCBpcDZlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjcyLVxubmV0L2lwdjYvaXA2X2dyZS5jOjIyNzM6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI3NC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjEwOT1zdGF0aWMgaW50IGlwNl90bmxfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTE4LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMTk6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBuZXQpKVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMjAtXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jPTEwNDA9c3RhdGljIGludCB2dGk2X2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMTA0OC1cbm5ldC9pcHY2L2lwNl92dGkuYzoxMDQ5Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcbm5ldC9pcHY2L2lwNl92dGkuYy0xMDUwLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9pcHY2L3NpdC5jPTE2MDE9c3RhdGljIGludCBpcGlwNl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjYvc2l0LmMtMTYxNS1cbm5ldC9pcHY2L3NpdC5jOjE2MTY6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBuZXQpKVxubmV0L2lwdjYvc2l0LmMtMTYxNy1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9ODY0PXN0YXRpYyBpbnQgeGZybWlfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy04NzEtXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM6ODcyOlx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy04NzMtXHRcdHJldHVybiAtRVBFUk07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMTkKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogMzQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1BQ3NlYyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmlnb3JvdXNseSBhbmFseXplIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyB3aXRoaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC4gSSBzZWUgdGhhdCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGNhcGFiaWxpdHkgY2hlY2ssIHNwZWNpZmljYWxseToKCmBgYGMKCWlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpICZhbXA7JmFtcDsKCSAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLSZndDtyZWFsX2RldikpKSB7CgkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAoJCQkgICAgICAgJiMzNDtDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlJiMzNDspOwoJCXJldHVybiAtRVBFUk07Cgl9CmBgYAoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBtZW1vcnktcmVsYXRlZCB2dWxuZXJhYmlsaXRpZXM6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgbGVha3MsIG9yIHdyaXRlcy4gTGV0JiMzOTtzIHNlZS4uLgoKKiAgIGBtYWNzZWMtJmd0O3JlYWxfZGV2YCBpcyBhbHJlYWR5IGEgdmFsaWQgcG9pbnRlciwgcHJlc3VtYWJseSB0byBhIGBzdHJ1Y3QgbmV0X2RldmljZWAuIGBkZXZfbmV0KClgIGdyYWJzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBvZiB0aGF0IGRldmljZS4gYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoKWAgcGVyZm9ybXMgYSBjYXBhYmlsaXR5IGNoZWNrIHVzaW5nIGBuZXRsaW5rX25ldF9jYXBhYmxlKC4uLilgLiBgTkxfU0VUX0VSUl9NU0dgIHdyaXRlcyBhIHN0YXRpYyBzdHJpbmcgdG8gYGV4dGFja2AuIE5vdGhpbmcgc2VlbXMgYW1pc3MuCgpGcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLCBhcmUgdGhlcmUgYW55IHJpc2tzIHN0ZW1taW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhPwoKKiAgIE5vIG5ldyBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIGFsdGVyZWQgYnkgdGhpcyBwYXRjaC4KKiAgIFRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGludm9sdmUgY29weWluZyBkYXRhIHRvIHVzZXJzcGFjZSB0aGF04oCZcyBiZWVuIG1vZGlmaWVkLiBPbmx5IGFuIGVycm9yIG1lc3NhZ2UgaXMgd3JpdHRlbiBpZiB0aGUgcGVybWlzc2lvbiBjaGVjayBmYWlscy4KKiAgIFRoZXJlJiMzOTtzIG5vIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCiogICBObyBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgYXMgYSByZXN1bHQgb2YgdGhpcyBjb2RlLgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIGRldGFpbGVkIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQ29uc2VxdWVudGx5LCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGhlcmUuIFdlIGNhbiBtYXJrIGBOZWVkc0tNU0FOID0gZmFsc2VgIGluIG91ciBgc2V0LXJlc3VsdHNgIGNhbGwsIGFuZCBwcm92aWRlIGEgY2xlYXIgZXhwbGFuYXRpb24gdG8gZGlzdGluZ3Vpc2ggS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaW4gdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXR3b3JrIG5hbWVzcGFjZSBjYXBhYmlsaXR5IGNoZWNrIChydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKSBpbiBtYWNzZWNfY2hhbmdlbGluaygpIHRvIHZlcmlmeSBwZXJtaXNzaW9ucyB3aGVuIGNoYW5naW5nIHNldHRpbmdzIG9mIGFuIG9mZmxvYWRlZCBNQUNzZWMgZGV2aWNlIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuXG5cblRoaXMgaXMgcHVyZWx5IGEgcGVybWlzc2lvbiB2YWxpZGF0aW9uIGNoZWNrIHJldHVybmluZyAtRVBFUk0gYW5kIHNldHRpbmcgYW4gZXJyb3Igc3RyaW5nIGluIGV4dGFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IG1lbW9yeSBzdHJ1Y3R1cmVzLCBidWZmZXJzLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byB2ZXJpZnkgcGVybWlzc2lvbnMgd2hlbiBjaGFuZ2luZyBzZXR0aW5ncyBvZiBhbiBvZmZsb2FkZWQgTUFDc2VjIGRldmljZSBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxuXG5UaGlzIGlzIHB1cmVseSBhIHBlcm1pc3Npb24gdmFsaWRhdGlvbiBjaGVjayByZXR1cm5pbmcgLUVQRVJNIGFuZCBzZXR0aW5nIGFuIGVycm9yIHN0cmluZyBpbiBleHRhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBtZW1vcnkgc3RydWN0dXJlcywgYnVmZmVycywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzowOTozMC4wNTExMzg4NjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkwMjUxNTg4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDU0VDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjc2VjX2NoYW5nZWxpbmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXR3b3JrIG5hbWVzcGFjZSBjYXBhYmlsaXR5IGNoZWNrIChydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKSBpbiBtYWNzZWNfY2hhbmdlbGluaygpIHRvIHZlcmlmeSBwZXJtaXNzaW9ucyB3aGVuIGNoYW5naW5nIHNldHRpbmdzIG9mIGFuIG9mZmxvYWRlZCBNQUNzZWMgZGV2aWNlIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuXFxuXFxuVGhpcyBpcyBwdXJlbHkgYSBwZXJtaXNzaW9uIHZhbGlkYXRpb24gY2hlY2sgcmV0dXJuaW5nIC1FUEVSTSBhbmQgc2V0dGluZyBhbiBlcnJvciBzdHJpbmcgaW4gZXh0YWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgbWVtb3J5IHN0cnVjdHVyZXMsIGJ1ZmZlcnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsgdG8gcmVzdHJpY3QgY2hhbmdpbmcgTUFDc2VjIGRldmljZSBzZXR0aW5ncyB3aGVuIHRoZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5hbWVzcGFjZS4gTUFDc2VjIGRldmljZXMgYXJlIGZ1bGx5IHZpcnR1YWwvc29mdHdhcmUtZW11bGF0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbWVzc2FnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjMwLjA1MTE0NDI4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3Mzk5MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjBkNGVhNzBmN2UwYTdmMzlmZmZmYzhlZTJjYmRhNjcwNmM5Nzc2OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDE3OjA5OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3NlYy5jIGIvZHJpdmVycy9uZXQvbWFjc2VjLmNcXG5pbmRleCA2ZjlmM2FjZWZmYWFkLi4wZjM1MWU4MzlmMTQ0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3NlYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWFjc2VjLmNcXG5AQCAtMTksNiArMTksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2dyb19jZWxscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21hY3NlYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3J0bmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmhcXHUwMDNlXFxuQEAgLTM5NTksNiArMzk2MCwxMyBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIFxcdGlmICghZGF0YSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRpZiAoKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gfHwgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cXHUwMDNlcmVhbF9kZXYpKSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiQ2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZVxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEVdIHx8XFxuIFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XFxuIFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1NDSV0gfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MDk6MzAuNDU5MjczMTk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjU0NTM0NDAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUNTRUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNzZWNfY2hhbmdlbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXR3b3JrIG5hbWVzcGFjZSBjYXBhYmlsaXR5IGNoZWNrIChydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKSBpbiBtYWNzZWNfY2hhbmdlbGluayB0byByZXN0cmljdCBjaGFuZ2luZyBNQUNzZWMgZGV2aWNlIHNldHRpbmdzIHdoZW4gdGhlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmFtZXNwYWNlLiBNQUNzZWMgZGV2aWNlcyBhcmUgZnVsbHkgdmlydHVhbC9zb2Z0d2FyZS1lbXVsYXRhYmxlIGFuZCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHJ0bmV0bGluayBtZXNzYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMGQ0ZWE3MGY3ZTBhN2YzOWZmZmZjOGVlMmNiZGE2NzA2Yzk3NzY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNzowOToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3NlYy5jIGIvZHJpdmVycy9uZXQvbWFjc2VjLmNcbmluZGV4IDZmOWYzYWNlZmZhYWQuLjBmMzUxZTgzOWYxNDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tYWNzZWMuY1xuKysrIGIvZHJpdmVycy9uZXQvbWFjc2VjLmNcbkBAIC0xOSw2ICsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyb19jZWxscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmhcdTAwM2VcbkBAIC0zOTU5LDYgKzM5NjAsMTMgQEAgc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0aWYgKCFkYXRhKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXHUwMDNlcmVhbF9kZXYpKSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiQ2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZVwiKTtcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcdH1cbitcbiBcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcbiBcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XG4gXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzowOTozMC40NTkyNzQ4MTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDU4ODEyMDExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyBjb2RlIGNoYW5nZSwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JrIHNlY3VyaXR5IGFuZCBrZXJuZWwgZHJpdmVyczpcblxuKipBbmFseXppbmcgYSBNQUNzZWMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBhIHBhdGNoIGhhcyBoaXQgbXkgZGVzayBhbmQgaXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvbWFjc2VjLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtYWNzZWNfY2hhbmdlbGlua2AgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCBJJ20gZ29pbmcgaW50byB0cmlhZ2UgbW9kZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byAqdW5kZXJzdGFuZCogd2hhdCB0aGlzIG1vZGlmaWNhdGlvbiBpcyAqaW50ZW5kZWQqIHRvIGRvLCBhbmQgKndoeSouIEknbSBpbW1lZGlhdGVseSB0aGlua2luZzpcblxuKiAgIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoaXMgZmlsZSwgdGhlIG1vZGlmaWNhdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFdoYXQgaXMgdGhlIGhpc3RvcnkgaGVyZT8gSXMgdGhpcyBhIG5ldyBmZWF0dXJlLCBhIGJ1ZyBmaXgsIG9yIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBxdWljayBgZ2l0IGxvZ2Agb24gdGhhdCBzcGVjaWZpYyBmaWxlIHRvIHNlZSB0aGUgcmVjZW50IGNvbW1pdHMuIEkgbmVlZCB0byBnZXQgYSBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbnRlbnQgb2YgYG1hY3NlY19jaGFuZ2VsaW5rYCwgYW5kIHRoaXMgZHJpdmVyIGluIGdlbmVyYWwuXG4qICAgTmV4dCwgSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggb3RoZXIgZmlsZXMgdGhpcyBmdW5jdGlvbiBjYWxscyBvciBpcyBjYWxsZWQgYnkuIEkgd2FudCB0byBidWlsZCBhIGNhbGwgZ3JhcGggbWVudGFsbHkuIEFueSBLY29uZmlnIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIGNoZWNrLiBBcmUgYW55IG5ldyBLY29uZmlnIG9wdGlvbnMgaW50cm9kdWNlZCwgY2hhbmdlZCwgb3IgcmVtb3ZlZD8gV2hhdCBrZXJuZWwgdmVyc2lvbnMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT9cbiogICBJIHdhbnQgYSBxdWljayB3YXkgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSwgc28gYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHdpbGwgYmUgbXkgdG9vbHMgb2YgY2hvaWNlLiBXaGF0IGlzIHRoZSBkaXJlY3QgY29udGV4dCBhcm91bmQgdGhlIG1vZGlmaWVkIGxpbmVzPyBEb2VzIHRoaXMgY2hhbmdlIGRlcGVuZCBvbiBvdGhlciBjaGFuZ2VzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2U/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSAqaW1wYWN0KiBvZiB0aGlzIHBhdGNoLCBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZS4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gSXMgdGhpcyBwcm9wZXJseSB0ZXN0ZWQ/IEkgd2lsbCBuZWVkIHRvIGJlIHZlcnkgcmlnb3JvdXMgb24gdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTcsIk91dHB1dFRva2VucyI6NjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjQxLjA0NzM5NzY3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTUwOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbjM5NTE6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzk1MjpcXHR7XFxuMzk1MzpcXHRcXHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcXG4zOTU0OlxcdFxcdGJvb2wgbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gZmFsc2U7XFxuMzk1NTpcXHRcXHRlbnVtIG1hY3NlY19vZmZsb2FkIG9mZmxvYWQ7XFxuMzk1NjpcXHRcXHRzdHJ1Y3QgbWFjc2VjX3R4X3NjIHR4X3NjO1xcbjM5NTc6XFx0XFx0c3RydWN0IG1hY3NlY19zZWN5IHNlY3k7XFxuMzk1ODpcXHRcXHRpbnQgcmV0O1xcbjM5NTk6XFx0XFxuMzk2MDpcXHRcXHRpZiAoIWRhdGEpXFxuMzk2MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zOTYyOlxcdFxcbjM5NjM6XFx0XFx0aWYgKChkYXRhW0lGTEFfTUFDU0VDX09GRkxPQURdIHx8IG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKSkgXFx1MDAyNlxcdTAwMjZcXG4zOTY0OlxcdFxcdCAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVxcdTAwM2VyZWFsX2RldikpKSB7XFxuMzk2NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuMzk2NjpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkNoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcXFwiKTtcXG4zOTY3OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMzk2ODpcXHRcXHR9XFxuMzk2OTpcXHRcXG4zOTcwOlxcdFxcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcXG4zOTcxOlxcdFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XFxuMzk3MjpcXHRcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XFxuMzk3MzpcXHRcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19QT1JUXSlcXG4zOTc0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM5NzU6XFx0XFxuMzk3NjpcXHRcXHQvKiBLZWVwIGEgY29weSBvZiB1bm1vZGlmaWVkIHNlY3kgYW5kIHR4X3NjLCBpbiBjYXNlIHRoZSBvZmZsb2FkXFxuMzk3NzpcXHRcXHQgKiBwcm9wYWdhdGlvbiBmYWlscywgdG8gcmV2ZXJ0IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbi5cXG4zOTc4OlxcdFxcdCAqL1xcbjM5Nzk6XFx0XFx0bWVtY3B5KFxcdTAwMjZzZWN5LCBcXHUwMDI2bWFjc2VjLVxcdTAwM2VzZWN5LCBzaXplb2Yoc2VjeSkpO1xcbjM5ODA6XFx0XFx0bWVtY3B5KFxcdTAwMjZ0eF9zYywgXFx1MDAyNm1hY3NlYy1cXHUwMDNlc2VjeS50eF9zYywgc2l6ZW9mKHR4X3NjKSk7XFxuMzk4MTpcXHRcXG4zOTgyOlxcdFxcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xcbjM5ODM6XFx0XFx0aWYgKHJldClcXG4zOTg0OlxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4zOTg1OlxcdFxcbjM5ODY6XFx0XFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pIHtcXG4zOTg3OlxcdFxcdFxcdG9mZmxvYWQgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pO1xcbjM5ODg6XFx0XFx0XFx0aWYgKG1hY3NlYy1cXHUwMDNlb2ZmbG9hZCAhPSBvZmZsb2FkKSB7XFxuMzk4OTpcXHRcXHRcXHRcXHRtYWNzZWNfb2ZmbG9hZF9zdGF0ZV9jaGFuZ2UgPSB0cnVlO1xcbjM5OTA6XFx0XFx0XFx0XFx0cmV0ID0gbWFjc2VjX3VwZGF0ZV9vZmZsb2FkKGRldiwgb2ZmbG9hZCwgZXh0YWNrKTtcXG4zOTkxOlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuMzk5MjpcXHRcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuMzk5MzpcXHRcXHRcXHR9XFxuMzk5NDpcXHRcXHR9XFxuMzk5NTpcXHRcXG4zOTk2OlxcdFxcdC8qIElmIGgvdyBvZmZsb2FkaW5nIGlzIGF2YWlsYWJsZSwgcHJvcGFnYXRlIHRvIHRoZSBkZXZpY2UgKi9cXG4zOTk3OlxcdFxcdGlmICghbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlIFxcdTAwMjZcXHUwMDI2IG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKSkge1xcbjM5OTg6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG1hY3NlY19vcHMgKm9wcztcXG4zOTk5OlxcdFxcdFxcdHN0cnVjdCBtYWNzZWNfY29udGV4dCBjdHg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjQxLjA0NzU2MDk1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEwMzMyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ1NFQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTMwMj1jb25maWcgQU1UXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMxNy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMxODpjb25maWcgTUFDU0VDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMTktXFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjFBRSBNQUMtbGV2ZWwgZW5jcnlwdGlvbiAoTUFDc2VjKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MDk6NDEuMjA4NjAxMDQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzOTM5NTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDU0VDIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBncmFudWxhci4gQmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBjaGFuZ2VzLCBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciBNQUNTRUMuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBmaW5kaW5nIHRoZSBib29sZWFuIHN3aXRjaGVzOyBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBjdXJyZW50bHkgaW50ZWdyYXRlZCwgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbmQgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgZmVhdHVyZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0gY29uc2lkZXJhdGlvbnMgdGhhdCBhcmUgcmVmbGVjdGVkIGluIHRoZSBLY29uZmlnPyBJdCdzIGFsbCBhYm91dCBidWlsZGluZyBhIHNvbGlkIGZvdW5kYXRpb24gb2YgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IG1ha2luZyBhIHNpbmdsZSB0d2Vhay4gVGhpcyB3aWxsIGhlbHAgcHJldmVudCB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBkb3duIHRoZSBsaW5lIGFuZCBhbGxvdyBtZSB0byBkZXRlcm1pbmUgaWYgY2hhbmdlcyBzaG91bGQgYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjQzLjM0Nzk5ODc3MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMzE2OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYW10LlxcbiAzMTc6XFx0XFxuIDMxODpcXHRjb25maWcgTUFDU0VDXFxuIDMxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMUFFIE1BQy1sZXZlbCBlbmNyeXB0aW9uIChNQUNzZWMpXFxcIlxcbiAzMjA6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAzMjE6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gMzIyOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuIDMyMzpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuIDMyNDpcXHRcXHRoZWxwXFxuIDMyNTpcXHRcXHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXFxuIDMyNjpcXHRcXG4gMzI3OlxcdGNvbmZpZyBORVRDT05TT0xFXFxuIDMyODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4gMzI5OlxcdFxcdGRlcGVuZHMgb24gUFJJTlRLXFxuIDMzMDpcXHRcXHRoZWxwXFxuIDMzMTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXFxuIDMzMjpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjQzLjM0ODA3MzI5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MDI2MDQ5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTUFDc2VjIEV4cGxvcmF0aW9uOiBEaXZpbmcgaW50byB0aGUgVmlydHVhbCBOZXR3b3JrIERldmljZSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgYG1hY3NlYy5jYCBkcml2ZXIsIHdoaWNoIGZyb20gdGhlIG91dHNldCwgc2VlbXMgdG8gYmUgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlci4gSXQgY3JlYXRlcyB0aGVzZSBNQUNzZWMgaW50ZXJmYWNlcywgYW5kIGl0J3MgYWxsIGhhbmRsZWQgdGhyb3VnaCBgcnRubGAgYW5kIGBuZXRsaW5rYC4gVGhlIGtleSB0YWtlYXdheSBoZXJlIGlzIHRoYXQgaXQncyB2aXJ0dWFsLCBmdWxseSBlbXVsYXRlZCwgbWVhbmluZyBpdCBzaXRzIG9uIHRvcCBvZiBzb21ldGhpbmcgbGlrZSBhIGR1bW15LCB2ZXRoLCBvciBsb29wYmFjayBkZXZpY2UuIFRoYXQncyBnb29kIHRvIGtub3cgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlIGluIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5JdCBsb29rcyBsaWtlIFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGNvbmZpZ3VyaW5nIHRoZXNlIE1BQ3NlYyBkZXZpY2VzIHRocm91Z2ggbmV0bGluaywgc3BlY2lmaWNhbGx5IHJ0bmV0bGluayBhbmQgZ2VuZXRsaW5rLCB1c2luZyBgSUZMQV9JTkZPX0tJTkQgXCJtYWNzZWNcImAuIFRoYXQgZ2l2ZXMgbWUgYSBncmVhdCBmb290aG9sZCBmb3IgZnV6emluZyBpZiBJIG5lZWQgaXQuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVoYXZpb3IgYW5kIHJlbGF0aW9uc2hpcHMgaGVyZSBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBkcml2ZXIgdGhvcm91Z2hseS4gSSBzaG91bGQgZmluZCB3aGVyZSBgbWFjc2VjX2NoYW5nZWxpbmtgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGVsc2UgaW4gYG1hY3NlYy5jYCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgZnVuY3Rpb25pbmcuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGVycm9yIGhhbmRsaW5nLCBhbmQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIGxpa2VseS4gVGhpcyB3aWxsIHJldmVhbCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdGhpcyB2aXJ0dWFsIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjA5OjQ4LjA1MDY4MDc5NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE4NTAwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNzZWNfY2hhbmdlbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuYz0zODU3PXN0YXRpYyB2b2lkIG1hY3NlY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzg3MC1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozODcxOnN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzg3Mi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdKVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk0OC1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTQ5OnN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTUwLVxcdFxcdFxcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk3Ni1cXHQvKiBLZWVwIGEgY29weSBvZiB1bm1vZGlmaWVkIHNlY3kgYW5kIHR4X3NjLCBpbiBjYXNlIHRoZSBvZmZsb2FkXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk3NzpcXHQgKiBwcm9wYWdhdGlvbiBmYWlscywgdG8gcmV2ZXJ0IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbi5cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTc4LVxcdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk4MS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTgyOlxcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5ODMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jPTQxNzM9c3RhdGljIGludCBtYWNzZWNfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDI2Mi1cXHRpZiAoZGF0YSkge1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjQyNjM6XFx0XFx0ZXJyID0gbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgZGF0YSk7XFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDI2NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9NDQ0Nj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbWFjc2VjX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDUzLVxcdC5uZXdsaW5rXFx0PSBtYWNzZWNfbmV3bGluayxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDU0OlxcdC5jaGFuZ2VsaW5rXFx0PSBtYWNzZWNfY2hhbmdlbGluayxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDU1LVxcdC5kZWxsaW5rXFx0PSBtYWNzZWNfZGVsbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MDk6NDguMDk1ODcwODYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MjgzNjQ4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUFDc2VjIExpbmsgQ2hhbmdlIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtYWNzZWNfY2hhbmdlbGlua2AgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBuZXRsaW5rIGNoYW5nZWxpbmsgaGFuZGxlciBmb3IgTUFDc2VjIG5ldHdvcmsgZGV2aWNlcy4gSXQgc2VlbXMgdGhhdCB3aGVuIGEgdXNlciwgZWl0aGVyIHByaXZpbGVnZWQgb3IgdW5wcml2aWxlZ2VkIGJ1dCB3aXRoIG5ldGxpbmsgYWNjZXNzLCBzZW5kcyBhbiBSVE1fTkVXTElOSyBvciBSVE1fU0VUTElOSyBtZXNzYWdlIHRvIG1vZGlmeSBhIE1BQ3NlYyBsaW5rLCB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCBnZXRzIGNhbGxlZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGEgcGVybWlzc2lvbiBjaGVjaywgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgLCB3aGljaCBzb3VuZHMgbGlrZSBpdCdzIGdvaW5nIHRvIGJlIGtleSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBNQUNzZWMgZGV2aWNlcyB3aGVyZSB0aGUgdW5kZXJseWluZyByZWFsIGRldmljZSBsaXZlcyBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZSBvciB3aGVuIG9mZmxvYWRpbmcgaXMgaW52b2x2ZWQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuIHNvbWV0aGluZyBJIGNhbiBlZmZlY3RpdmVseSBmdXp6IGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEJ1dCwgeWVzLCBpdCdzIHRvdGFsbHkgcmVhY2hhYmxlIGJlY2F1c2UgSSBjYW4gY3JlYXRlIGFuZCBtYW5pcHVsYXRlIHRoZXNlIGBtYWNzZWNgIGRldmljZXMgdXNpbmcgbmV0bGluayBvbiB0b3Agb2YgdmlydHVhbCBkZXZpY2VzIGxpa2UgYHZldGhgLCBgZHVtbXlgLCBhbmQgYG1hY3ZsYW5gLCBhbW9uZyBvdGhlcnMuIFRoYXQgbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIG15IHRpbWUuIEl0IHRvdWNoZXMgb24gY29yZSBuZXR3b3JraW5nIGRyaXZlciBhbmQgbmV0bGluayBsaW5rIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0LlxuXG5Ob3csIGxldCdzIHNlZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSByZWxldmFudCBvbmUgaXMgYENPTkZJR19NQUNTRUNgLiBJdCBsb29rcyBsaWtlIGl0IGRlcGVuZHMgb24gYE5FVGAgYW5kIHRoZW4gc2VsZWN0cyBgQ1JZUFRPYCwgYENSWVBUT19BRVNgLCBgQ1JZUFRPX0dDTWAsIGFuZCBgR1JPX0NFTExTYC4gR29vZCwgSSBrbm93IGV4YWN0bHkgd2hhdCB0byBsb29rIGZvciB0aGVyZS5cblxuRm9jdXNpbmcgb24gdGhlIHN5bWJvbHMsIG9idmlvdXNseSB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0byBob25lIGluIG9uIGlzIGBtYWNzZWNfY2hhbmdlbGlua2AuIEknbGwgYWxzbyBnbGFuY2UgYXQgYG1hY3NlY19uZXdsaW5rYCwganVzdCB0byBiZSBzdXJlLCBhbHRob3VnaCBgY2hhbmdlbGlua2AgaXMgd2hlcmUgdGhlIGFjdGlvbiBpcy5cblxuTGV0J3MgZG8gYSBxdWljayBzd2VlcCBvZiB0aGUgZGlmZiB0byBjb25maXJtIG5vIG90aGVyIGZpbGVzIG9yIHN5bWJvbHMgYXJlIG1vZGlmaWVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEl0J3MgYWxsIGNvbnRhaW5lZCB3aXRoaW4gYGRyaXZlcnMvbmV0L21hY3NlYy5jYCwgc3BlY2lmaWNhbGx5IGBtYWNzZWNfY2hhbmdlbGlua2AuXG5cbkFscmlnaHQsIGEgZmluYWwgY2hlY2sgdG8gbWFrZSBzdXJlIEkndmUgZ290IGFsbCB0aGUgcGllY2VzOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IFRydWUqKiAtIEFic29sdXRlbHkuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYG1hY3NlY19jaGFuZ2VsaW5rYCAtIEdvdCBpdC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1BQ1NFQ2AgLSBDb25maXJtZWQuXG4qICAgKipSZWFzb25pbmc6KiogQ29uY2lzZSwgc29saWQgcmF0aW9uYWxlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAxNiwiT3V0cHV0VG9rZW5zIjoxMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MDk6NTIuOTI0MjM4MTE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzNzQ3NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ1NFQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3NlY19jaGFuZ2VsaW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rIHRvIHJlc3RyaWN0IGNoYW5naW5nIE1BQ3NlYyBkZXZpY2Ugc2V0dGluZ3Mgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuYW1lc3BhY2UuIE1BQ3NlYyBkZXZpY2VzIGFyZSBmdWxseSB2aXJ0dWFsL3NvZnR3YXJlLWVtdWxhdGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG1lc3NhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ1NFQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3NlY19jaGFuZ2VsaW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rIHRvIHJlc3RyaWN0IGNoYW5naW5nIE1BQ3NlYyBkZXZpY2Ugc2V0dGluZ3Mgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuYW1lc3BhY2UuIE1BQ3NlYyBkZXZpY2VzIGFyZSBmdWxseSB2aXJ0dWFsL3NvZnR3YXJlLWVtdWxhdGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG1lc3NhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzowOTo1My4wMDQ2MjA4N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwNzE2NjU5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzowOTo1My4wMDUxNTU0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg2MDcxMTI3NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byB2ZXJpZnkgcGVybWlzc2lvbnMgd2hlbiBjaGFuZ2luZyBzZXR0aW5ncyBvZiBhbiBvZmZsb2FkZWQgTUFDc2VjIGRldmljZSBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxcblxcblRoaXMgaXMgcHVyZWx5IGEgcGVybWlzc2lvbiB2YWxpZGF0aW9uIGNoZWNrIHJldHVybmluZyAtRVBFUk0gYW5kIHNldHRpbmcgYW4gZXJyb3Igc3RyaW5nIGluIGV4dGFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IG1lbW9yeSBzdHJ1Y3R1cmVzLCBidWZmZXJzLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjBkNGVhNzBmN2UwYTdmMzlmZmZmYzhlZTJjYmRhNjcwNmM5Nzc2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MDk6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzZWMuYyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXG5pbmRleCA2ZjlmM2FjZWZmYWFkLi4wZjM1MWU4MzlmMTQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWFjc2VjLmNcbisrKyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9ncm9fY2VsbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXHUwMDNlXG5AQCAtMzk1OSw2ICszOTYwLDEzIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdGlmICghZGF0YSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZiAoKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gfHwgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVx1MDAzZXJlYWxfZGV2KSkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkNoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcIik7XG4rXHRcdHJldHVybiAtRVBFUk07XG4rXHR9XG4rXG4gXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEVdIHx8XG4gXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19JQ1ZfTEVOXSB8fFxuIFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MDk6NTMuMDA1MTU2MzM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMDg2ODk4Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2gganVzdGlmaWVzIGEgZGVkaWNhdGVkIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikgZnV6emluZyBzZXNzaW9uLiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb2RlIGlzIGRvaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC5cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHdpdGhpbiBgbWFjc2VjX2NoYW5nZWxpbmtgLiBJdCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIG5ldHdvcmsgbmFtZXNwYWNlcyBhbmQgcG90ZW50aWFsbHkgb2ZmbG9hZGVkIE1BQ3NlYyBvcGVyYXRpb25zLiBUaGUgYWRkZWQgYGlmYCBzdGF0ZW1lbnQgY2hlY2tzIGZvciBgSUZMQV9NQUNTRUNfT0ZGTE9BRGAgb3IgaWYgdGhlIGRldmljZSBgbWFjc2VjYCBpcyBjb25zaWRlcmVkIG9mZmxvYWRlZCBhbmQgdGhlbiBjYWxscyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gdmVyaWZ5IGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIHRoZSBgQ0FQX05FVF9BRE1JTmAgY2FwYWJpbGl0eSBpbiB0aGUgbmV0d29yayBuYW1lc3BhY2Ugb2YgdGhlIFwicmVhbFwiIGRldmljZS4gSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBvZiBgLUVQRVJNYC5cblxuVGhlIGltcG9ydGFudCBiaXQgaGVyZSBpcyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAuIFNpbmNlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrIHJlbGF0ZWQgdG8gbmV0d29yayBuYW1lc3BhY2VzIGFuZCBwZXJtaXNzaW9uIGNoZWNrcywgbXkgZXhwZXJ0IGludHVpdGlvbiBzYXlzIHRoYXQgdGhpcyBtaWdodCBiZSBhbiBhcmVhIHdoZXJlIEtNU0FOIGNhbiBpZGVudGlmeSBpc3N1ZXMuIFRoZSBmYWN0IHRoYXQgdGhlIGNoZWNrIHJlbGF0ZXMgdG8gcG90ZW50aWFsbHkgb2ZmbG9hZGVkIG9wZXJhdGlvbnMgYWxzbyByYWlzZXMgYSBmbGFnLCBzaW5jZSBtb3JlIGNvbXBsZXggc2V0dXBzIGxpa2UgdGhhdCBhcmUgb2Z0ZW4gcHJvbmUgdG8gc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGVycm9ycy4gSXQncyBwb3NzaWJsZSB0aGVyZSBhcmUgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgd2hlbiBuZXR3b3JrIG5hbWVzcGFjZSBib3VuZGFyaWVzIGFyZSBjcm9zc2VkIG9yIG9mZmxvYWQgb3BlcmF0aW9ucyBhcmUgaW52b2x2ZWQuIEknZCBkZWZpbml0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBjaGVjayBhbmQgdGhlIHNpdHVhdGlvbnMgaXQgY292ZXJzLlxuXG5TbywgaW4gY29uY2x1c2lvbiwgd2hpbGUgdGhlIHBhdGNoIGl0c2VsZiBpcyBub3Qgb3ZlcndoZWxtaW5nbHkgY29tcGxleCwgdGhlIGFkZGVkIGNoZWNrcyBpbnZvbHZpbmcgbmV0d29yayBuYW1lc3BhY2VzLCBvZmZsb2FkLCBhbmQgcGVybWlzc2lvbnMgZGVmaW5pdGVseSB3YXJyYW50IGZ1cnRoZXIgc2NydXRpbnksIGFuZCB0aHVzICpjb3VsZCogYmUgYSBkZWNlbnQgY2FuZGlkYXRlIGZvciBLTVNBTiBmdXp6aW5nLiBJdCdzIGEgXCJtYXliZVwiIHRoYXQncyBsZWFuaW5nIHRvd2FyZHMgXCJ5ZXMsXCIgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzIHNvbWUgY29tcGxleGl0eSB0byBpdCwgd2hpY2ggSSdkIG5lZWQgdG8gdmVyaWZ5IHdpdGggZnVydGhlciBjb2RlIGFuYWx5c2lzIChlLmcuLCBncmVwcGluZyBmb3Igd2hlcmUgYG1hY3NlY19jaGFuZ2VsaW5rYCBpcyBjYWxsZWQgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHNjZW5hcmlvcyBjb3ZlcmVkIGJ5IHRoZSBjb2RlKS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEwOjA0LjA5MjA1NzYwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyODg1MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjc2VjX2NoYW5nZWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWFjc2VjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWFjc2VjLmM9Mzg1Nz1zdGF0aWMgdm9pZCBtYWNzZWNfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM4NzAtXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzg3MTpzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM4NzItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSlcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NDgtXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk0OTpzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk1MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NzYtXFx0LyogS2VlcCBhIGNvcHkgb2YgdW5tb2RpZmllZCBzZWN5IGFuZCB0eF9zYywgaW4gY2FzZSB0aGUgb2ZmbG9hZFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM5Nzc6XFx0ICogcHJvcGFnYXRpb24gZmFpbHMsIHRvIHJldmVydCBtYWNzZWNfY2hhbmdlbGlua19jb21tb24uXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk3OC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5ODEtXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk4MjpcXHRyZXQgPSBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oZGV2LCBkYXRhKTtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTgzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00MTczPXN0YXRpYyBpbnQgbWFjc2VjX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQyNjItXFx0aWYgKGRhdGEpIHtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0MjYzOlxcdFxcdGVyciA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQyNjQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jPTQ0NDY9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIG1hY3NlY19saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ1My1cXHQubmV3bGlua1xcdD0gbWFjc2VjX25ld2xpbmssXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDQ1NDpcXHQuY2hhbmdlbGlua1xcdD0gbWFjc2VjX2NoYW5nZWxpbmssXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ1NS1cXHQuZGVsbGlua1xcdD0gbWFjc2VjX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjEwOjA0LjE5MTM1MTI0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDcwMzUyODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb250ZXh0IG9mIGBtYWNzZWNfY2hhbmdlbGlua2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgbGluZXMgb2YgYG1hY3NlY19jaGFuZ2VsaW5rYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCdzIHN0YW5kYXJkIGRlYnVnZ2luZyBwcm9jZWR1cmUuXCIgSSdtIG5vdCBqdXN0IGxvb2tpbmcgKmF0KiB0aGUgZnVuY3Rpb24gaXRzZWxmOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBJcyBpdCBjYWxsZWQsIGFuZCBpZiBzbywgd2hlcmUgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gV2hhdCB2YXJpYWJsZXMgYXJlIHBhc3NlZCB0byBpdD8gV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gVGhlIHN1cnJvdW5kaW5nIGxpbmVzIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgZXhwZWN0ZWQgaW5wdXRzLCBvdXRwdXRzLCBlcnJvciBoYW5kbGluZywgYW5kIG92ZXJhbGwgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBNQUNzZWMgaW1wbGVtZW50YXRpb24uIEknbSBlc3NlbnRpYWxseSBwZXJmb3JtaW5nIGEgbWluaWF0dXJlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBmbG93IGFuYWx5c2lzIGFyb3VuZCB0aGUgYG1hY3NlY19jaGFuZ2VsaW5rYCBmdW5jdGlvbiB0byBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZXZlbiBzdGFydCBkaWdnaW5nIGludG8gaXRzIGltcGxlbWVudGF0aW9uLiBJdCBpcyBhIG5lY2Vzc2FyeSBmaXJzdCBzdGVwLiBJIHdpbGwgYmUgbG9va2luZyBmb3I6IGNhbGwgc2l0ZXMsIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgaW5pdGlhbGlzYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMDowNi42NjE3MDYzNTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L21hY3NlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NDUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5NDU6XFx0XFxuMzk0NjpcXHRcXHRyZXR1cm4gMDtcXG4zOTQ3OlxcdH1cXG4zOTQ4OlxcdFxcbjM5NDk6XFx0c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbjM5NTA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuMzk1MTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4zOTUyOlxcdHtcXG4zOTUzOlxcdFxcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xcbjM5NTQ6XFx0XFx0Ym9vbCBtYWNzZWNfb2ZmbG9hZF9zdGF0ZV9jaGFuZ2UgPSBmYWxzZTtcXG4zOTU1OlxcdFxcdGVudW0gbWFjc2VjX29mZmxvYWQgb2ZmbG9hZDtcXG4zOTU2OlxcdFxcdHN0cnVjdCBtYWNzZWNfdHhfc2MgdHhfc2M7XFxuMzk1NzpcXHRcXHRzdHJ1Y3QgbWFjc2VjX3NlY3kgc2VjeTtcXG4zOTU4OlxcdFxcdGludCByZXQ7XFxuMzk1OTpcXHRcXG4zOTYwOlxcdFxcdGlmICghZGF0YSlcXG4zOTYxOlxcdFxcdFxcdHJldHVybiAwO1xcbjM5NjI6XFx0XFxuMzk2MzpcXHRcXHRpZiAoKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gfHwgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpKSBcXHUwMDI2XFx1MDAyNlxcbjM5NjQ6XFx0XFx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXFx1MDAzZXJlYWxfZGV2KSkpIHtcXG4zOTY1OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4zOTY2OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiQ2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZVxcXCIpO1xcbjM5Njc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4zOTY4OlxcdFxcdH1cXG4zOTY5OlxcdFxcbjM5NzA6XFx0XFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fFxcbjM5NzE6XFx0XFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfSUNWX0xFTl0gfHxcXG4zOTcyOlxcdFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1NDSV0gfHxcXG4zOTczOlxcdFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX1BPUlRdKVxcbjM5NzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzk3NTpcXHRcXG4zOTc2OlxcdFxcdC8qIEtlZXAgYSBjb3B5IG9mIHVubW9kaWZpZWQgc2VjeSBhbmQgdHhfc2MsIGluIGNhc2UgdGhlIG9mZmxvYWRcXG4zOTc3OlxcdFxcdCAqIHByb3BhZ2F0aW9uIGZhaWxzLCB0byByZXZlcnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uLlxcbjM5Nzg6XFx0XFx0ICovXFxuMzk3OTpcXHRcXHRtZW1jcHkoXFx1MDAyNnNlY3ksIFxcdTAwMjZtYWNzZWMtXFx1MDAzZXNlY3ksIHNpemVvZihzZWN5KSk7XFxuMzk4MDpcXHRcXHRtZW1jcHkoXFx1MDAyNnR4X3NjLCBcXHUwMDI2bWFjc2VjLVxcdTAwM2VzZWN5LnR4X3NjLCBzaXplb2YodHhfc2MpKTtcXG4zOTgxOlxcdFxcbjM5ODI6XFx0XFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKGRldiwgZGF0YSk7XFxuMzk4MzpcXHRcXHRpZiAocmV0KVxcbjM5ODQ6XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjM5ODU6XFx0XFxuMzk4NjpcXHRcXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSkge1xcbjM5ODc6XFx0XFx0XFx0b2ZmbG9hZCA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSk7XFxuMzk4ODpcXHRcXHRcXHRpZiAobWFjc2VjLVxcdTAwM2VvZmZsb2FkICE9IG9mZmxvYWQpIHtcXG4zOTg5OlxcdFxcdFxcdFxcdG1hY3NlY19vZmZsb2FkX3N0YXRlX2NoYW5nZSA9IHRydWU7XFxuMzk5MDpcXHRcXHRcXHRcXHRyZXQgPSBtYWNzZWNfdXBkYXRlX29mZmxvYWQoZGV2LCBvZmZsb2FkLCBleHRhY2spO1xcbjM5OTE6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4zOTkyOlxcdFxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4zOTkzOlxcdFxcdFxcdH1cXG4zOTk0OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTA6MDYuNjYxOTY2Nzg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODc4MDI0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEaWdnaW5nIGludG8gTmV0d29yayBDYXBhYmlsaXR5IENoZWNrcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGhhbmRsaW5nIG5ldHdvcmsgbGluayBjYXBhYmlsaXRpZXMgYW5kIHBlcm1pc3Npb24gY2hlY2tzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGZvY3VzIG9uIHdoZXJlIHRoZXNlIGNoZWNrcyBhcmUgYWN0dWFsbHkgYmVpbmcgdXNlZCwgYW5kIGhvdy4gSSdsbCBzdGFydCB3aXRoIGBtYWNzZWNfbmV3bGlua2Ag4oCTIHRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoaXMga2luZCBvZiBmdW5jdGlvbmFsaXR5IOKAkyBhbmQgdGhlbiBicm9hZGVuIG15IHNlYXJjaCB0byBvdGhlciByZWxldmFudCBhcmVhcy4gVG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldywgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGZ1bmN0aW9ucyBhbmQgbW9kdWxlcyB0aGF0IHVzZSByb3V0aW5lcyBsaWtlIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlYCwgb3Igc2ltaWxhciBwZXJtaXNzaW9uIHZlcmlmaWNhdGlvbiBwcm9jZWR1cmVzLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzY2FuIHRoZSBjb2RlYmFzZSBmb3IgaW5zdGFuY2VzIG9mIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlYCB0byBtYXAgb3V0IHRoZSB1c2FnZSBsYW5kc2NhcGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTA6MDkuMDQ5NzcxMjI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5NDUxMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjQ2NT1zdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDczLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI0NzQ6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZ2VuZXZlLVxcdTAwM2VuZXQpKVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI0NzUtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jPTM5NDk9c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk2My1cXHRpZiAoKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gfHwgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM5NjQ6XFx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXFx1MDAzZXJlYWxfZGV2KSkpIHtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTY1LVxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz0xNDczPWludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTQ5OC1cXHRcXHRsb3dlcmRldiA9IG1hY3ZsYW5fZGV2X3JlYWxfZGV2KGxvd2VyZGV2KTtcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6MTQ5OTpcXHRcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KGxvd2VyZGV2KSkpIHtcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTUwMC1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTYzMz1zdGF0aWMgaW50IG1hY3ZsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTE2NDQtXFx0ICAgIChkYXRhW0lGTEFfTUFDVkxBTl9CQ19RVUVVRV9MRU5dIHx8IGRhdGFbSUZMQV9NQUNWTEFOX0JDX0NVVE9GRl0pIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjE2NDU6XFx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldCh2bGFuLVxcdTAwM2Vsb3dlcmRldikpKSB7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTE2NDYtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTQ0NDA9c3RhdGljIGludCB2eGxhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ1MC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDQ1MTpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB2eGxhbi1cXHUwMDNlbmV0KSlcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ1Mi1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmg9MjU4PXN0cnVjdCBuZXQgKnJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHN0cnVjdCBzb2NrICpzaywgaW50IG5ldG5zaWQpO1xcbmluY2x1ZGUvbmV0L3J0bmV0bGluay5oOjI1OTpib29sIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL25ldC9ydG5ldGxpbmsuaC0yNjAtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXQgKmxpbmtfbmV0KTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTI0OTU9RVhQT1JUX1NZTUJPTF9HUEwocnRubF9nZXRfbmV0X25zX2NhcGFibGUpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI0OTYtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjQ5Nzpib29sIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNDk4LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0ICpsaW5rX25ldClcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1MDItfVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI1MDM6RVhQT1JUX1NZTUJPTF9HUEwocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjUwNC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE0NTU9c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDYzLVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NjQ6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDY1LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDg3PXN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTUtXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ5NjpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTctXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbm5ldC9pcHY0L2lwX3Z0aS5jPTU5MT1zdGF0aWMgaW50IHZ0aV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYy01OTgtXFxubmV0L2lwdjQvaXBfdnRpLmM6NTk5OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXFx1MDAzZW5ldCkpXFxubmV0L2lwdjQvaXBfdnRpLmMtNjAwLVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NDk3PXN0YXRpYyBpbnQgaXBpcF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNTA2LVxcbm5ldC9pcHY0L2lwaXAuYzo1MDc6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5uZXQvaXB2NC9pcGlwLmMtNTA4LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjA0Mz1zdGF0aWMgaW50IGlwNmdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA1MC1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjA1MTpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDUyLVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI2NT1zdGF0aWMgaW50IGlwNmVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI3Mi1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI3MzpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjc0LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjEwOT1zdGF0aWMgaW50IGlwNl90bmxfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMTgtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMTk6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEyMC1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jPTEwNDA9c3RhdGljIGludCB2dGk2X2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9pcHY2L2lwNl92dGkuYy0xMDQ4LVxcbm5ldC9pcHY2L2lwNl92dGkuYzoxMDQ5OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTEwNTAtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTE2MDE9c3RhdGljIGludCBpcGlwNl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy0xNjE1LVxcbm5ldC9pcHY2L3NpdC5jOjE2MTY6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcXG5uZXQvaXB2Ni9zaXQuYy0xNjE3LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9ODY0PXN0YXRpYyBpbnQgeGZybWlfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTg3MS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM6ODcyOlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTg3My1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxMDoxMC44MDkyMjc5OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjgyNjcwMzMwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUFDc2VjIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmlnb3JvdXNseSBhbmFseXplIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyB3aXRoaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC4gSSBzZWUgdGhhdCBpdCdzIGludHJvZHVjaW5nIGEgY2FwYWJpbGl0eSBjaGVjaywgc3BlY2lmaWNhbGx5OlxuXG5gYGBjXG5cdGlmICgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSB8fCBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYykpIFx1MDAyNlx1MDAyNlxuXHQgICAgIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKSB7XG5cdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuXHRcdFx0ICAgICAgIFwiQ2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZVwiKTtcblx0XHRyZXR1cm4gLUVQRVJNO1xuXHR9XG5gYGBcblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBtZW1vcnktcmVsYXRlZCB2dWxuZXJhYmlsaXRpZXM6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgbGVha3MsIG9yIHdyaXRlcy4gTGV0J3Mgc2VlLi4uXG5cbiogICBgbWFjc2VjLVx1MDAzZXJlYWxfZGV2YCBpcyBhbHJlYWR5IGEgdmFsaWQgcG9pbnRlciwgcHJlc3VtYWJseSB0byBhIGBzdHJ1Y3QgbmV0X2RldmljZWAuIGBkZXZfbmV0KClgIGdyYWJzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBvZiB0aGF0IGRldmljZS4gYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoKWAgcGVyZm9ybXMgYSBjYXBhYmlsaXR5IGNoZWNrIHVzaW5nIGBuZXRsaW5rX25ldF9jYXBhYmxlKC4uLilgLiBgTkxfU0VUX0VSUl9NU0dgIHdyaXRlcyBhIHN0YXRpYyBzdHJpbmcgdG8gYGV4dGFja2AuIE5vdGhpbmcgc2VlbXMgYW1pc3MuXG5cbkZyb20gYSBtZW1vcnkgcGVyc3BlY3RpdmUsIGFyZSB0aGVyZSBhbnkgcmlza3Mgc3RlbW1pbmcgZnJvbSB1bmluaXRpYWxpemVkIGRhdGE/XG5cbiogICBObyBuZXcgbWVtb3J5IGlzIGFsbG9jYXRlZCBvciBhbHRlcmVkIGJ5IHRoaXMgcGF0Y2guXG4qICAgVGhlIHBhdGNoICpkb2Vzbid0KiBpbnZvbHZlIGNvcHlpbmcgZGF0YSB0byB1c2Vyc3BhY2UgdGhhdOKAmXMgYmVlbiBtb2RpZmllZC4gT25seSBhbiBlcnJvciBtZXNzYWdlIGlzIHdyaXR0ZW4gaWYgdGhlIHBlcm1pc3Npb24gY2hlY2sgZmFpbHMuXG4qICAgVGhlcmUncyBubyBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuKiAgIE5vIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGxlZnQgdW5pbml0aWFsaXplZCBhcyBhIHJlc3VsdCBvZiB0aGlzIGNvZGUuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBhbmFseXNpcywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBDb25zZXF1ZW50bHksIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgaGVyZS4gV2UgY2FuIG1hcmsgYE5lZWRzS01TQU4gPSBmYWxzZWAgaW4gb3VyIGBzZXQtcmVzdWx0c2AgY2FsbCwgYW5kIHByb3ZpZGUgYSBjbGVhciBleHBsYW5hdGlvbiB0byBkaXN0aW5ndWlzaCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpbiB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMxOSwiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTE6MTkuMDc2MjY0NTM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0d29yayBuYW1lc3BhY2UgY2FwYWJpbGl0eSBjaGVjayAocnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSkgaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byB2ZXJpZnkgcGVybWlzc2lvbnMgd2hlbiBjaGFuZ2luZyBzZXR0aW5ncyBvZiBhbiBvZmZsb2FkZWQgTUFDc2VjIGRldmljZSBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxcblxcblRoaXMgaXMgcHVyZWx5IGEgcGVybWlzc2lvbiB2YWxpZGF0aW9uIGNoZWNrIHJldHVybmluZyAtRVBFUk0gYW5kIHNldHRpbmcgYW4gZXJyb3Igc3RyaW5nIGluIGV4dGFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IG1lbW9yeSBzdHJ1Y3R1cmVzLCBidWZmZXJzLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldHdvcmsgbmFtZXNwYWNlIGNhcGFiaWxpdHkgY2hlY2sgKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpIGluIG1hY3NlY19jaGFuZ2VsaW5rKCkgdG8gdmVyaWZ5IHBlcm1pc3Npb25zIHdoZW4gY2hhbmdpbmcgc2V0dGluZ3Mgb2YgYW4gb2ZmbG9hZGVkIE1BQ3NlYyBkZXZpY2UgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcy5cXG5cXG5UaGlzIGlzIHB1cmVseSBhIHBlcm1pc3Npb24gdmFsaWRhdGlvbiBjaGVjayByZXR1cm5pbmcgLUVQRVJNIGFuZCBzZXR0aW5nIGFuIGVycm9yIHN0cmluZyBpbiBleHRhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBtZW1vcnkgc3RydWN0dXJlcywgYnVmZmVycywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow2xfxw[1] Phase: Succeeded StartedAt: 2026-09-06 17:11:56 +0000 UTC FinishedAt: 2026-09-06 17:11:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 17:11:56 +0000 UTC FinishedAt: 2026-09-06 17:11:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2] Phase: Succeeded StartedAt: 2026-09-06 17:11:56 +0000 UTC FinishedAt: 2026-09-06 20:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 17:11:56 +0000 UTC FinishedAt: 2026-09-06 20:56:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 17:11:56 +0000 UTC FinishedAt: 2026-09-06 17:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 17:11:56 +0000 UTC FinishedAt: 2026-09-06 17:12:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow2xfxw/series-workflow2xfxw-convert-artifact-2628848360/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 17:12:17 +0000 UTC FinishedAt: 2026-09-06 17:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 17:12:17 +0000 UTC FinishedAt: 2026-09-06 17:29:36 +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:*ab17c035-1118-4e6b-95eb-acafc9533d18,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-workflow2xfxw/series-workflow2xfxw-convert-artifact-2628848360/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": "df19fb23-7b80-4b26-9232-ff8eeafe1564", "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-workflow2xfxw/series-workflow2xfxw-build-action-1273335902/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 17:12:17 +0000 UTC FinishedAt: 2026-09-06 17:29:26 +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:*ab17c035-1118-4e6b-95eb-acafc9533d18,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-workflow2xfxw/series-workflow2xfxw-convert-artifact-2628848360/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": "df19fb23-7b80-4b26-9232-ff8eeafe1564", "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-workflow2xfxw/series-workflow2xfxw-build-action-1273335902/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 17:29:36 +0000 UTC FinishedAt: 2026-09-06 17:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 17:29:36 +0000 UTC FinishedAt: 2026-09-06 17:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 17:29:36 +0000 UTC FinishedAt: 2026-09-06 17:29:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 17:29:36 +0000 UTC FinishedAt: 2026-09-06 17:29:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow2xfxw/series-workflow2xfxw-convert-artifact-3376664527/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 17:29:46 +0000 UTC FinishedAt: 2026-09-06 17:31:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 17:29:46 +0000 UTC FinishedAt: 2026-09-06 17:31:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*df19fb23-7b80-4b26-9232-ff8eeafe1564,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-workflow2xfxw/series-workflow2xfxw-build-action-1273335902/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-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 17:31:45 +0000 UTC FinishedAt: 2026-09-06 17:31:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 17:31:45 +0000 UTC FinishedAt: 2026-09-06 17:31:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 17:31:45 +0000 UTC FinishedAt: 2026-09-06 17:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 17:31:45 +0000 UTC FinishedAt: 2026-09-06 17:51:50 +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:*ab17c035-1118-4e6b-95eb-acafc9533d18,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-workflow2xfxw/series-workflow2xfxw-convert-artifact-3376664527/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": "52f4a86a-c424-4090-beca-701b9a59386b", "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-workflow2xfxw/series-workflow2xfxw-build-action-2482984931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 17:31:45 +0000 UTC FinishedAt: 2026-09-06 17:51:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ab17c035-1118-4e6b-95eb-acafc9533d18,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-workflow2xfxw/series-workflow2xfxw-convert-artifact-3376664527/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": "52f4a86a-c424-4090-beca-701b9a59386b", "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-workflow2xfxw/series-workflow2xfxw-build-action-2482984931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 17:51:50 +0000 UTC FinishedAt: 2026-09-06 17:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 17:51:50 +0000 UTC FinishedAt: 2026-09-06 17:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 17:51:50 +0000 UTC FinishedAt: 2026-09-06 17:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 17:51:50 +0000 UTC FinishedAt: 2026-09-06 17:53:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*52f4a86a-c424-4090-beca-701b9a59386b,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-workflow2xfxw/series-workflow2xfxw-build-action-2482984931/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-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 17:54:03 +0000 UTC FinishedAt: 2026-09-06 20:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 17:54:03 +0000 UTC FinishedAt: 2026-09-06 20:56:41 +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":["macsec_changelink"],"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:*df19fb23-7b80-4b26-9232-ff8eeafe1564,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*52f4a86a-c424-4090-beca-701b9a59386b,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-workflow2xfxw/series-workflow2xfxw-build-action-1273335902/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-workflow2xfxw/series-workflow2xfxw-build-action-2482984931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 17:54:03 +0000 UTC FinishedAt: 2026-09-06 17:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 17:54:03 +0000 UTC FinishedAt: 2026-09-06 17:54:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"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-workflow2xfxw/series-workflow2xfxw-convert-artifact-1780515208/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 17:54:03 +0000 UTC FinishedAt: 2026-09-06 17:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 17:54:03 +0000 UTC FinishedAt: 2026-09-06 17:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 17:54:03 +0000 UTC FinishedAt: 2026-09-06 17:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 17:54:13 +0000 UTC FinishedAt: 2026-09-06 20:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2xfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC"],"series_id":"d52fda5e-3d27-4817-b735-7ad4cc46ec4d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 17:54:13 +0000 UTC FinishedAt: 2026-09-06 20:56:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*df19fb23-7b80-4b26-9232-ff8eeafe1564,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*52f4a86a-c424-4090-beca-701b9a59386b,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-workflow2xfxw/series-workflow2xfxw-build-action-1273335902/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-workflow2xfxw/series-workflow2xfxw-build-action-2482984931/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-workflow2xfxw/series-workflow2xfxw-convert-artifact-1780515208/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,}