Name: series-workflow5tgwq Phase: Succeeded StartedAt: 2026-07-22 11:19:34 +0000 UTC FinishedAt: 2026-07-22 16:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[0] Phase: Succeeded StartedAt: 2026-07-22 11:19:34 +0000 UTC FinishedAt: 2026-07-22 11:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 11:19:34 +0000 UTC FinishedAt: 2026-07-22 11:58:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "df13c1df8147675470213ffff29dd5762fa321f5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GENEVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "df13c1df8147675470213ffff29dd5762fa321f5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GENEVE" ], "series_id": "e4bd9c22-7e30-4b0a-b7cb-e829efbd0662" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "geneve_configure", "geneve_newlink", "geneve_dev_create_fb" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dFTkVWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmV2ZV9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7Z2VuZXZlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2Rldl9jcmVhdGVfZmImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBnZW5ldmVfY29uZmlndXJlLiBJZiByZWdpc3Rlcl9uZXRkZXZpY2UoKSBmYWlscywgdGhlIGRldmljZSYjMzk7cyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGE1ZTlhNzJiMGUwMzQ4MTRmYzUzMTI1OGJjMjE4NDRkY2JmYmFjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDExOjU1OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jIGIvZHJpdmVycy9uZXQvZ2VuZXZlLmNcbmluZGV4IDE3YmQzNTQzZDU4N2E5Li5lYjE1NmYzM2I2Mjc1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9nZW5ldmUuY1xuQEAgLTIwNDMsOCAmIzQzOzIwNDMsMTAgQEAgc3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcbiBcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuLVx0aWYgKGVycilcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRnZW5ldmVfZnJlZV9kZXYoZGV2KTtcbiBcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXG4gXHRsaXN0X2FkZChcdTAwMjZnZW5ldmUtXHUwMDNlbmV4dCwgXHUwMDI2Z24tXHUwMDNlZ2VuZXZlX2xpc3QpO1xuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dFTkVWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmV2ZV9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7Z2VuZXZlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2Rldl9jcmVhdGVfZmImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBnZW5ldmVfY29uZmlndXJlLiBJZiByZWdpc3Rlcl9uZXRkZXZpY2UoKSBmYWlscywgdGhlIGRldmljZSYjMzk7cyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYTVlOWE3MmIwZTAzNDgxNGZjNTMxMjU4YmMyMTg0NGRjYmZiYWNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMTE6NTU6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9nZW5ldmUuYyBiL2RyaXZlcnMvbmV0L2dlbmV2ZS5jCmluZGV4IDE3YmQzNTQzZDU4N2E5Li5lYjE1NmYzM2I2Mjc1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2VuZXZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ2VuZXZlLmMKQEAgLTIwNDMsOCAmIzQzOzIwNDMsMTAgQEAgc3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKLQlpZiAoZXJyKQomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlnZW5ldmVfZnJlZV9kZXYoZGV2KTsKIAkJcmV0dXJuIGVycjsKJiM0MzsJfQogCiAJbGlzdF9hZGQoJmFtcDtnZW5ldmUtJmd0O25leHQsICZhbXA7Z24tJmd0O2dlbmV2ZV9saXN0KTsKIAlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBwYXRjaCBmbG9hdGluZyBhcm91bmQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBkcml2ZXJzL25ldC9nZW5ldmUuY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGFuIGVycm9yIGhhbmRsaW5nIGlzc3VlIHdpdGhpbiB0aGUgYGdlbmV2ZV9jb25maWd1cmVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBhIGBnZW5ldmVfZnJlZV9kZXYoZGV2KTtgIGNhbGwgdG8gdGhlIGVycm9yIHBhdGggb2YgYGdlbmV2ZV9jb25maWd1cmVgLiBUaGlzIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIGZ1bmN0aW9uIGZhaWxzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGFkZGl0aW9uIGlzIGxpa2VseSBpbnRlbmRlZCB0byBwcmV2ZW50IGEgcmVzb3VyY2UgbGVhay4gSWYgYHJlZ2lzdGVyX25ldGRldmljZWAgZmFpbHMsIHRoZSBgZGV2YCBzdHJ1Y3Qgd291bGQgYmUgbGVmdCBhbGxvY2F0ZWQsIGJ1dCBub3QgcmVnaXN0ZXJlZCwgYW5kIHBvdGVudGlhbGx5IGNhdXNlIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgZGV2aWNlIGlzIGZyZWVkIHNvIHdlIGRvbiYjMzk7dCBsZWFrIHJlc291cmNlcy4gTm93IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBnZW5ldmVfY29uZmlndXJlYCBmdW5jdGlvbiBpdHNlbGYgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgYWRkaXRpb24gYW5kIHdoZXRoZXIgaXQmIzM5O3MgdGhlIGNvcnJlY3QgYXBwcm9hY2guIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5ldmVfY29uZmlndXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTk3Mz1zdGF0aWMgYm9vbCBnZW5ldmVfZHN0X2FkZHJfZXF1YWwoc3RydWN0IGlwX3R1bm5lbF9pbmZvICphLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE5ODEtXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxOTgyOnN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xOTgzLVx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjM2NT1zdGF0aWMgaW50IGdlbmV2ZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjM4Ny1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjIzODg6XHRlcnIgPSBnZW5ldmVfY29uZmlndXJlKGxpbmtfbmV0LCBkZXYsIGV4dGFjaywgXHUwMDI2Y2ZnKTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzODktXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI1OTI9c3RydWN0IG5ldF9kZXZpY2UgKmdlbmV2ZV9kZXZfY3JlYXRlX2ZiKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjE1LVx0aW5pdF90bmxfaW5mbyhcdTAwMjZjZmcuaW5mbywgZHN0X3BvcnQpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjYxNjpcdGVyciA9IGdlbmV2ZV9jb25maWd1cmUobmV0LCBkZXYsIE5VTEwsIFx1MDAyNmNmZyk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjE3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBmdW5jdGlvbnM6CgoqKkFuYWx5emluZyBHZW5ldmUgRGV2aWNlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgYW5kIGBnZW5ldmVfY29uZmlndXJlYC4gTmF0dXJhbGx5LCB0aGUgZmlyc3QgZnVuY3Rpb24sIGBnZW5ldmVfZnJlZV9kZXZgLCBoYXMgdG8gYmUgdGhlIGNsZWFudXAgcm91dGluZS4gSXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIEdlbmV2ZSBkZXZpY2UgaWRlbnRpZmllZCBieSBgZGV2YC4gVGhpcyBjb3VsZCBpbmNsdWRlIGZyZWVpbmcgbWVtb3J5IGFsbG9jYXRlZCBmb3IgZGF0YSBzdHJ1Y3R1cmVzLCBjbG9zaW5nIGZpbGUgZGVzY3JpcHRvcnMsIHVucmVnaXN0ZXJpbmcgdGhlIGRldmljZSBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIGRldmljZSB0ZWFyZG93bi4gSSBuZWVkIHRvIGJlIHN1cmUgaXQmIzM5O3MgaGFuZGxpbmcgYWxsIGFzcGVjdHMgb2YgZGV2aWNlIGRlYWxsb2NhdGlvbiB0byBhdm9pZCBsZWFrcyBvciBkYW5nbGluZyByZWZlcmVuY2VzLiBJIHNob3VsZCBwcm9iYWJseSB0cmFjZSBpdHMgY2FsbHMsIGVuc3VyaW5nIGl0IHNhZmVseSBoYW5kbGVzIHJlc291cmNlcyBhbmQgZG9lc27igJl0IGNvcnJ1cHQgbWVtb3J5LgoKVGhlbiwgdGhlcmUmIzM5O3MgYGdlbmV2ZV9jb25maWd1cmVgLiBUaGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIHBheSBhIGxvdCBvZiBhdHRlbnRpb24gdG8uIFRoaXMgZnVuY3Rpb24gYWxtb3N0IGNlcnRhaW5seSBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIG9yIG1vZGlmaWNhdGlvbiBvZiBhIEdlbmV2ZSBkZXZpY2UuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIGFjY2VwdGVkLCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlIG9yIHZpcnR1YWwgaW50ZXJmYWNlcyBkdXJpbmcgdGhpcyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gaXMgcGFyYW1vdW50LCBhcyB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIGRldGVybWluZXMgdGhlIHBlcmZvcm1hbmNlIGFuZCBiZWhhdmlvciBvZiB0aGUgR2VuZXZlIHR1bm5lbC4gQXJlIHdlIGhhbmRsaW5nIE1UVSwgSVAgYWRkcmVzc2VzLCBVRFAgcG9ydHMsIFZMQU4gdGFncz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGl0IHZhbGlkYXRlcyB0aGUgaW5wdXQgdG8gYXZvaWQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVlIHRvIGluY29ycmVjdCBwYXJhbWV0ZXIgc2V0dGluZ3MuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIHdoZXJlIHRoaW5ncyBnbyB0ZXJyaWJseSB3cm9uZy4gVGhpcyB3aWxsIGRlZmluaXRlbHkgYmUgd2hlcmUgdGhlIGJ1bGsgb2YgbXkgZWZmb3J0IGdvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXZlX2ZyZWVfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc1OD1zdGF0aWMgdm9pZCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzY1LS8qIEluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzY2OnN0YXRpYyB2b2lkIGdlbmV2ZV9mcmVlX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc2Ny17XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc3NT1zdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzgxLVx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjE3ODI6XHRkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yID0gZ2VuZXZlX2ZyZWVfZGV2O1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc4My1cbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0xOTgyPXN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjA0Ni1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjIwNDc6XHRcdGdlbmV2ZV9mcmVlX2RldihkZXYpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjA0OC1cdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZW5ldmUgRGV2aWNlIFNldHVwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBnZW5ldmVfc2V0dXBgIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgZGV2aWNlIGNsZWFudXAgaXMgaGFuZGxlZC4gSSBzZWUgdGhhdCB0aGUgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYCBpcyBhc3NpZ25lZCB0byBgZ2VuZXZlX2ZyZWVfZGV2YC4gVGhhdCYjMzk7cyB0aGUga2V5LiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgd2hhdCBoYXBwZW5zIGlmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzPyBJIHJlbWVtYmVyIHRoYXQgdHlwaWNhbGx5LCB3aGVuIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGJhaWxzIG91dCwgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAsIGFuZCBpdCBkb2VzIHNvIGJ5IGNhbGxpbmcgYGZyZWVfbmV0ZGV2YC4gQW5kICp0aGF0KiBpcyB3aGF0IHNob3VsZCB0cmlnZ2VyIG15IGBwcml2X2Rlc3RydWN0b3JgISBTbyBgZ2VuZXZlX2ZyZWVfZGV2YCBzaG91bGQgYmUgY2FsbGVkIGluIHRoYXQgZmFpbHVyZSBzY2VuYXJpbywgYW5kIGZyZWUgdGhlIGRldmljZS4gQnV0IEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB3aGVyZSBgZ2VuZXZlX2NvbmZpZ3VyZWAgaXMgY2FsbGVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLiBXZSBoYXZlIHRvIGJlIHRob3JvdWdoIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXZlX25ld2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYz0yMzE5PXN0YXRpYyB2b2lkIGdlbmV2ZV9saW5rX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzNjQtXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyMzY1OnN0YXRpYyBpbnQgZ2VuZXZlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzNjYtXHRcdFx0ICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI1Nzg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGdlbmV2ZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI1ODQtXHQudmFsaWRhdGVcdD0gZ2VuZXZlX3ZhbGlkYXRlLFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjU4NTpcdC5uZXdsaW5rXHQ9IGdlbmV2ZV9uZXdsaW5rLFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4Ni1cdC5jaGFuZ2VsaW5rXHQ9IGdlbmV2ZV9jaGFuZ2VsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRG91YmxlIEZyZWUgQ29uY2VybiBpbiBHZW5ldmUgRGV2aWNlIENyZWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBHZW5ldmUgZGV2aWNlIGNyZWF0aW9uIHByb2Nlc3MgYW5kIEkmIzM5O3ZlIGhpdCBhIHBvdGVudGlhbCBzbmFnLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgdGhpczogaWYgYGdlbmV2ZV9jb25maWd1cmVgIGZhaWxzLCBkb2VzIGBnZW5ldmVfbmV3bGlua2AgcHJvcGVybHkgaGFuZGxlIHRoZSBjbGVhbnVwPyBJIGtub3cgYGdlbmV2ZV9uZXdsaW5rYCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gYHJ0bmxfbmV3bGlua2AsIGFuZCBgcnRubF9uZXdsaW5rYCAqaXRzZWxmKiBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAgaWYgdGhlIGxpbmsgY3JlYXRpb24gZmFpbHMuIAoKQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlciwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogaWYgYGdlbmV2ZV9jb25maWd1cmVgIGhhcyBhbHJlYWR5IGRvbmUgc29tZSBjbGVhbnVwLCBzcGVjaWZpY2FsbHkgYnkgY2FsbGluZyBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGV4cGxpY2l0bHkgYmVmb3JlIHRoZSBmYWlsdXJlLCBhbmQgKnRoZW4qIGBmcmVlX25ldGRldihkZXYpYCBpcyBzdWJzZXF1ZW50bHkgY2FsbGVkIGJ5IGBydG5sX25ld2xpbmtgIGR1ZSB0byB0aGUgYGdlbmV2ZV9uZXdsaW5rYCBmYWlsdXJlLCB3ZSBjb3VsZCBoYXZlIGEgZG91YmxlIGZyZWUgc2l0dWF0aW9uLiBUaGlzIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNvbWV0aGluZyBsaWtlIGBnZW5ldmUtJmd0O2luZm9gLCBvciB3aGF0ZXZlciByZXNvdXJjZXMgYGdlbmV2ZV9mcmVlX2RldmAgbWFuYWdlcy4KCkkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZ2VuZXZlX2ZyZWVfZGV2YCB0byB1bmRlcnN0YW5kIGl0cyBvcGVyYXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGFjdHVhbGx5IGRlYWxpbmcgd2l0aC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2dlbmV2ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzYwOlx0XHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBnZW5ldmVfY29uZmlnLCByY3UpO1xuMTc2MTpcdFxuMTc2MjpcdFx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XG4xNzYzOlx0fVxuMTc2NDpcdFxuMTc2NTpcdC8qIEluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovXG4xNzY2Olx0c3RhdGljIHZvaWQgZ2VuZXZlX2ZyZWVfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNzY3Olx0e1xuMTc2ODpcdFx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4xNzY5Olx0XHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnZW5ldmUtXHUwMDNlY2ZnLCAxKTtcbjE3NzA6XHRcbjE3NzE6XHRcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuMTc3MjpcdFx0UkNVX0lOSVRfUE9JTlRFUihnZW5ldmUtXHUwMDNlY2ZnLCBOVUxMKTtcbjE3NzM6XHR9XG4xNzc0Olx0XG4xNzc1Olx0c3RhdGljIHZvaWQgZ2VuZXZlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNzc2Olx0e1xuMTc3NzpcdFx0ZXRoZXJfc2V0dXAoZGV2KTtcbjE3Nzg6XHRcbjE3Nzk6XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2Z2VuZXZlX25ldGRldl9vcHM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1ODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRG91YmxlLUZyZWUgQ29uY2VybnMgaW4gR2VuZXZlIERldmljZSBDbGVhbnVwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBnZW5ldmVfZnJlZV9kZXZgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCBmcmVlcyB0aGUgYGNmZ2Agc3RydWN0dXJlIGFuZCB0aGVuIG51bGxzIG91dCBgZ2VuZXZlLSZndDtjZmdgLiBTaW1wbGUgZW5vdWdoLiBCdXQgd2FpdCwgdGhpcyBpcyBzZXR0aW5nIG9mZiBhbGFybSBiZWxscy4gSWYgYGdlbmV2ZV9mcmVlX2RldmAgaXMgY2FsbGVkIGV4cGxpY2l0bHkgKmFuZCB0aGVuKiBsYXRlciBgZnJlZV9uZXRkZXZgIGNhbGxzIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAsIHdoaWNoIGhhcHBlbnMgdG8gKmFsc28qIGJlIGBnZW5ldmVfZnJlZV9kZXZgLi4uIHdlIGhhdmUgYSBkb3VibGUtZnJlZSBzaXR1YXRpb24gYnJld2luZywgcmlnaHQ/IFdlJiMzOTtyZSBmcmVlaW5nIHRoZSBzYW1lIG1lbW9yeSB0d2ljZS4gVGhhdCYjMzk7cyBuZXZlciBnb29kLgoKQW5kIHRoYXQgbWFrZXMgbWUgdGhpbmssIGV2ZW4gaWYgYGNmZ2AgKmlzKiBOVUxMIGluIHRoZSBzZWNvbmQgY2FsbCwgaXMgYGdlbmV2ZV9jb25maWdfZnJlZWAgc2FmZSBpZiBpdCYjMzk7cyBjYWxsZWQgdHdpY2U/IEkgY2FuJiMzOTt0IGltbWVkaWF0ZWx5IHJlY2FsbC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2VuZXZlX2NvbmZpZ19mcmVlYCB0byBiZSBzdXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGdvaW5nIHRvIGNhdXNlIGFueSBtZW1vcnkgY29ycnVwdGlvbiBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIGFpcnRpZ2h0IG9uIHRoaXMuIFRoaXMgZmVlbHMgbGlrZSBpdCBjb3VsZCBiZSBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5ldmVfY29uZmlnX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYz0xNzMxPXN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqZ2VuZXZlX2NvbmZpZ19hbGxvYyhjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqc3JjKVxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NDktXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzUwOnN0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZShzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnKVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc1MS17XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc1Ny1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjE3NTg6c3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzU5LXtcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzYxLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTc2MjpcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc2My19XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc2Nj1zdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzcwLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTc3MTpcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc3Mi1cdFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVx1MDAzZWNmZywgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjQwMT1zdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQyOS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI0MzA6XHRjYWxsX3JjdV9odXJyeShcdTAwMjZvbGRfY2ZnLVx1MDAzZXJjdSwgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdSk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDMxLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQzMy1lcnJfZnJlZV9jZmc6XG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyNDM0Olx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDM1LVx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgYGdlbmV2ZV9jb25maWdfZnJlZWAgZnVuY3Rpb246CgoqKkFuYWx5emluZyB0aGUgYGdlbmV2ZV9jb25maWdfZnJlZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBkaXNzZWN0IHRoaXMgYGdlbmV2ZV9jb25maWdfZnJlZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIHB1cnBvc2UgaXMuIEJhc2VkIG9uIHRoZSBuYW1lLCBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gZnJlZWluZyBtZW1vcnkgYWxsb2NhdGVkIGZvciBhIEdlbmV2ZSBjb25maWd1cmF0aW9uLiBJdOKAmXMgbGlrZWx5IGEgY2xlYW51cCBmdW5jdGlvbi4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBHZW5ldmUgaXMgbGlrZWx5IGEgcHJvdG9jb2wgaW52b2x2ZWQgaW4gdHVubmVsaW5nIG9yIG5ldHdvcmsgdmlydHVhbGl6YXRpb24sIHNvIGZyZWVpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcHJvYmFibHkgcHJldmVudHMgbWVtb3J5IGxlYWtzIGFuZCBlbnN1cmVzIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXJ0IG9mIHRoYXQgY29uZmlndXJhdGlvbi4gSSBleHBlY3QgaXQgaGFuZGxlcyBhbGxvY2F0ZWQgcG9pbnRlcnMgdG8gc3RydWN0dXJlcyBjb250YWluaW5nIGRldGFpbHMgbGlrZSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzc2VzLCBWTEFOIGluZm9ybWF0aW9uLCBvciBwZXJoYXBzIHNvbWUgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzLgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIGFueSBvdGhlciByZWxhdGVkIEdlbmV2ZSBmdW5jdGlvbnMuIERvZXMgaXQgY2FsbCBvdGhlciBjbGVhbnVwIG9yIGRlYWxsb2NhdGlvbiByb3V0aW5lcz8gQXJlIHRoZXJlIGFueSBwcmVjb25kaXRpb25zIGl0IGV4cGVjdHMsIGxpa2UgdGhlIGNvbmZpZ3VyYXRpb24gYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgdGhhdCBubyBvdGhlciBwcm9jZXNzIGlzIHN0aWxsIHV0aWxpemluZyB0aGUgY29uZmlnPyBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBJcyBpdCBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBvbiBhIG51bGwgcG9pbnRlciwgb3Igc2hvdWxkIHRoZSBjYWxsZXIgaGFuZGxlIHRoYXQgc2NlbmFyaW8/IFRoZSBzcGVjaWZpYyBlcnJvciBjb2RlcyB3b3VsZCBiZSByZWFsbHkgdXNlZnVsIHRvIG1lLgpNeSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBob3cgdG8gY29ycmVjdGx5IHVzZSBpdCB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIHNhZmVseSBhbmQgcHJldmVudCBlcnJvcnMuIEkgbmVlZCB0byBncmFzcCB0aGlzIGZ1bmN0aW9uIGxpa2UgSSBncmFzcCBhbnkgb3RoZXIgY3J1Y2lhbCBwaWVjZSBvZiBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc0NTpcdFx0fVxuMTc0NjpcdFxuMTc0NzpcdFx0cmV0dXJuIGNmZztcbjE3NDg6XHR9XG4xNzQ5Olx0XG4xNzUwOlx0c3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlKHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcpXG4xNzUxOlx0e1xuMTc1MjpcdFx0aWYgKGNmZykge1xuMTc1MzpcdFx0XHRkc3RfY2FjaGVfZGVzdHJveShcdTAwMjZjZmctXHUwMDNlaW5mby5kc3RfY2FjaGUpO1xuMTc1NDpcdFx0XHRrZnJlZShjZmcpO1xuMTc1NTpcdFx0fVxuMTc1NjpcdH1cbjE3NTc6XHRcbjE3NTg6XHRzdGF0aWMgdm9pZCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbjE3NTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZW5ldmUgRHJpdmVyJiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBnZW5ldmVfY29uZmlnX2ZyZWVgIGlzIGRvaW5nIHRoZSByaWdodCB0aGluZywgY2hlY2tpbmcgaWYgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnRlciBgY2ZnYCBpcyBub24tTlVMTCBiZWZvcmUgZnJlZWluZyBpdC4gU21hcnQuIEFuZCBJIHNlZSB0aGF0IGBnZW5ldmVfZnJlZV9kZXZgIGV4cGxpY2l0bHkgdXNlcyBgUkNVX0lOSVRfUE9JTlRFUihnZW5ldmUtJmd0O2NmZywgTlVMTCk7YCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnRlciB0byBOVUxMLiBUaGF0IG1lYW5zIGNhbGxpbmcgYGdlbmV2ZV9mcmVlX2RldmAgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgZGV2aWNlIGlzIHBlcmZlY3RseSBzYWZlLCB3aGljaCBpcyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gQnV0IGhvbGQgb24uLi4gd2h5IGRpZCB0aGF0IHBhdGNoIGluY2x1ZGUgYSBjYWxsIHRvIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgaW5zaWRlIGBnZW5ldmVfY29uZmlndXJlYD8gVGhhdCBzZWVtcyBwb3RlbnRpYWxseSByZWR1bmRhbnQgb3IgZXZlbi4uLiByaXNreT8gTGV0IG1lIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgYGdlbmV2ZV9jb25maWd1cmVgIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgdGhhdCBhcmUgYmVpbmcgaW50cm9kdWNlZCBvciBpbmFkdmVydGVudGx5IHJlc29sdmVkIGJ5IHRoYXQgYWRkaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTgwOlx0fVxuMTk4MTpcdFxuMTk4MjpcdHN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4xOTgzOlx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbjE5ODQ6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZylcbjE5ODU6XHR7XG4xOTg2Olx0XHRzdHJ1Y3QgZ2VuZXZlX25ldCAqZ24gPSBuZXRfZ2VuZXJpYyhuZXQsIGdlbmV2ZV9uZXRfaWQpO1xuMTk4NzpcdFx0c3RydWN0IGdlbmV2ZV9kZXYgKnQsICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTk4ODpcdFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Y2ZnLVx1MDAzZWluZm87XG4xOTg5Olx0XHRib29sIHR1bl9jb2xsZWN0X21kLCB0dW5fb25fc2FtZV9wb3J0O1xuMTk5MDpcdFx0c3RydWN0IGdlbmV2ZV9jb25maWcgKm5ld19jZmc7XG4xOTkxOlx0XHRpbnQgZXJyLCBlbmNhcF9sZW47XG4xOTkyOlx0XG4xOTkzOlx0XHRpZiAoY2ZnLVx1MDAzZWNvbGxlY3RfbWQgXHUwMDI2XHUwMDI2ICFpc190bmxfaW5mb196ZXJvKGluZm8pKSB7XG4xOTk0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbjE5OTU6XHRcdFx0XHQgICAgICAgXCYjMzQ7RGV2aWNlIGlzIGV4dGVybmFsbHkgY29udHJvbGxlZCwgc28gYXR0cmlidXRlcyAoVk5JLCBQb3J0LCBhbmQgc28gb24pIG11c3Qgbm90IGJlIHNwZWNpZmllZFwmIzM0Oyk7XG4xOTk2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTk5NzpcdFx0fVxuMTk5ODpcdFxuMTk5OTpcdFx0Z2VuZXZlLVx1MDAzZW5ldCA9IG5ldDtcbjIwMDA6XHRcdGdlbmV2ZS1cdTAwM2VkZXYgPSBkZXY7XG4yMDAxOlx0XG4yMDAyOlx0XHR0ID0gZ2VuZXZlX2ZpbmRfZGV2KGduLCBjZmcsIGluZm8sIFx1MDAyNnR1bl9vbl9zYW1lX3BvcnQsIFx1MDAyNnR1bl9jb2xsZWN0X21kKTtcbjIwMDM6XHRcdGlmICh0KVxuMjAwNDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjAwNTpcdFxuMjAwNjpcdFx0LyogbWFrZSBlbm91Z2ggaGVhZHJvb20gZm9yIGJhc2ljIHNjZW5hcmlvICovXG4yMDA3Olx0XHRlbmNhcF9sZW4gPSBHRU5FVkVfQkFTRV9ITEVOICYjNDM7IEVUSF9ITEVOO1xuMjAwODpcdFx0aWYgKCFjZmctXHUwMDNlY29sbGVjdF9tZCBcdTAwMjZcdTAwMjYgaXBfdHVubmVsX2luZm9fYWYoaW5mbykgPT0gQUZfSU5FVCkge1xuMjAwOTpcdFx0XHRlbmNhcF9sZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuMjAxMDpcdFx0XHRkZXYtXHUwMDNlbWF4X210dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbjIwMTE6XHRcdH0gZWxzZSB7XG4yMDEyOlx0XHRcdGVuY2FwX2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbjIwMTM6XHRcdFx0ZGV2LVx1MDAzZW1heF9tdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbjIwMTQ6XHRcdH1cbjIwMTU6XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBlbmNhcF9sZW4gJiM0MzsgRVRIX0hMRU47XG4yMDE2Olx0XG4yMDE3Olx0XHRpZiAoY2ZnLVx1MDAzZWNvbGxlY3RfbWQpIHtcbjIwMTg6XHRcdFx0aWYgKHR1bl9vbl9zYW1lX3BvcnQpIHtcbjIwMTk6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4yMDIwOlx0XHRcdFx0XHQgICAgICAgXCYjMzQ7VGhlcmUgY2FuIGJlIG9ubHkgb25lIGV4dGVybmFsbHkgY29udHJvbGxlZCBkZXZpY2Ugb24gYSBkZXN0aW5hdGlvbiBwb3J0IGFuZCBhIHNvdXJjZSBhZGRyZXNzXCYjMzQ7KTtcbjIwMjE6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjAyMjpcdFx0XHR9XG4yMDIzOlx0XHR9IGVsc2Uge1xuMjAyNDpcdFx0XHRpZiAodHVuX2NvbGxlY3RfbWQpIHtcbjIwMjU6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4yMDI2Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7VGhlcmUgYWxyZWFkeSBleGlzdHMgYW4gZXh0ZXJuYWxseSBjb250cm9sbGVkIGRldmljZSBvbiB0aGlzIGRlc3RpbmF0aW9uIHBvcnQgYW5kIHRoZSBzb3VyY2UgYWRkcmVzc1wmIzM0Oyk7XG4yMDI3Olx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjIwMjg6XHRcdFx0fVxuMjAyOTpcdFx0fVxuMjAzMDpcdFxuMjAzMTpcdFx0bmV3X2NmZyA9IGdlbmV2ZV9jb25maWdfYWxsb2MoY2ZnKTtcbjIwMzI6XHRcdGlmIChJU19FUlIobmV3X2NmZykpXG4yMDMzOlx0XHRcdHJldHVybiBQVFJfRVJSKG5ld19jZmcpO1xuMjAzNDpcdFxuMjAzNTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cdTAwM2VjZmcsIG5ld19jZmcpO1xuMjAzNjpcdFxuMjAzNzpcdFx0aWYgKGNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSB7XG4yMDM4Olx0XHRcdGRldi1cdTAwM2VoZWFkZXJfb3BzID0gTlVMTDtcbjIwMzk6XHRcdFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTk9ORTtcbjIwNDA6XHRcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IDA7XG4yMDQxOlx0XHRcdGRldi1cdTAwM2VhZGRyX2xlbiA9IDA7XG4yMDQyOlx0XHRcdGRldi1cdTAwM2VmbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDtcbjIwNDM6XHRcdH1cbjIwNDQ6XHRcbjIwNDU6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuMjA0NjpcdFx0aWYgKGVycikge1xuMjA0NzpcdFx0XHRnZW5ldmVfZnJlZV9kZXYoZGV2KTtcbjIwNDg6XHRcdFx0cmV0dXJuIGVycjtcbjIwNDk6XHRcdH1cbjIwNTA6XHRcbjIwNTE6XHRcdGxpc3RfYWRkKFx1MDAyNmdlbmV2ZS1cdTAwM2VuZXh0LCBcdTAwMjZnbi1cdTAwM2VnZW5ldmVfbGlzdCk7XG4yMDUyOlx0XHRyZXR1cm4gMDtcbjIwNTM6XHR9XG4yMDU0Olx0XG4yMDU1Olx0c3RhdGljIHZvaWQgaW5pdF90bmxfaW5mbyhzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sIF9fdTE2IGRzdF9wb3J0KVxuMjA1NjpcdHtcbjIwNTc6XHRcdG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTtcbjIwNTg6XHRcdGluZm8tXHUwMDNla2V5LnRwX2RzdCA9IGh0b25zKGRzdF9wb3J0KTtcbjIwNTk6XHR9XG4yMDYwOlx0XG4yMDYxOlx0c3RhdGljIGludCBnZW5ldmVfbmwyaW5mbyhzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4yMDYyOlx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4yMDYzOlx0XHRcdFx0ICBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGNoYW5nZWxpbmspXG4yMDY0Olx0e1xuMjA2NTpcdFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Y2ZnLVx1MDAzZWluZm87XG4yMDY2Olx0XHRpbnQgYXR0cnR5cGU7XG4yMDY3Olx0XG4yMDY4Olx0XHRpZiAoZGF0YVtJRkxBX0dFTkVWRV9DT0xMRUNUX01FVEFEQVRBXSkge1xuMjA2OTpcdFx0XHRpZiAoY2hhbmdlbGluaykge1xuMjA3MDpcdFx0XHRcdGF0dHJ0eXBlID0gSUZMQV9HRU5FVkVfQ09MTEVDVF9NRVRBREFUQTtcbjIwNzE6XHRcdFx0XHRnb3RvIGNoYW5nZV9ub3RzdXA7XG4yMDcyOlx0XHRcdH1cbjIwNzM6XHRcbjIwNzQ6XHRcdFx0Y2ZnLVx1MDAzZWNvbGxlY3RfbWQgPSB0cnVlO1xuMjA3NTpcdFx0XHRjZmctXHUwMDNlZHVhbHN0YWNrID0gdHJ1ZTtcbjIwNzY6XHRcdH1cbjIwNzc6XHRcbjIwNzg6XHRcdGlmICgoZGF0YVtJRkxBX0dFTkVWRV9MT0NBTF0gfHwgZGF0YVtJRkxBX0dFTkVWRV9SRU1PVEVdKSBcdTAwMjZcdTAwMjZcbjIwNzk6XHRcdCAgICAoZGF0YVtJRkxBX0dFTkVWRV9MT0NBTDZdIHx8IGRhdGFbSUZMQV9HRU5FVkVfUkVNT1RFNl0pKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIGNydXggb2YgdGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLgoKKipIYW5kbGluZyBOZXR3b3JrIERldmljZSBSZWdpc3RyYXRpb24gRmFpbHVyZSoqCgpTbywgaWYgYHJlZ2lzdGVyX25ldGRldmljZWAgYml0ZXMgdGhlIGR1c3QsIHRoZSBmdW5jdGlvbiBgZ2VuZXZlX2NvbmZpZ3VyZWAgaW1tZWRpYXRlbHkgcmV0dXJucyBhbiBlcnJvci4gTm8gc3VycHJpc2VzIHRoZXJlOyB0aGF0JiMzOTtzIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBmYWlsdXJlIHNjZW5hcmlvIGNvbXBsZXRlbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSB0aGlzIGVycm9yIG9yaWdpbmF0ZXMsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBnZW5ldmVfZGV2X2NyZWF0ZV9mYmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHNlZSBleGFjdGx5IGhvdyBhbmQgd2h5IGBnZW5ldmVfY29uZmlndXJlYCBpcyBiZWluZyBzdG9wcGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGNhdXNpbmcgdGhhdCBpbml0aWFsIHJlZ2lzdHJhdGlvbiB0byBmYWx0ZXIgYW5kIHByb3BhZ2F0ZSB0aGUgZXJyb3IgdGhyb3VnaCB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2dlbmV2ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU5MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTkyOlx0c3RydWN0IG5ldF9kZXZpY2UgKmdlbmV2ZV9kZXZfY3JlYXRlX2ZiKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcbjI1OTM6XHRcdFx0XHRcdFx0dTggbmFtZV9hc3NpZ25fdHlwZSwgdTE2IGRzdF9wb3J0KVxuMjU5NDpcdHtcbjI1OTU6XHRcdHN0cnVjdCBubGF0dHIgKnRiW0lGTEFfTUFYICYjNDM7IDFdO1xuMjU5NjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjI1OTc6XHRcdExJU1RfSEVBRChsaXN0X2tpbGwpO1xuMjU5ODpcdFx0aW50IGVycjtcbjI1OTk6XHRcdHN0cnVjdCBnZW5ldmVfY29uZmlnIGNmZyA9IHtcbjI2MDA6XHRcdFx0LmRmID0gR0VORVZFX0RGX1VOU0VULFxuMjYwMTpcdFx0XHQudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gdHJ1ZSxcbjI2MDI6XHRcdFx0LnR0bF9pbmhlcml0ID0gZmFsc2UsXG4yNjAzOlx0XHRcdC5jb2xsZWN0X21kID0gdHJ1ZSxcbjI2MDQ6XHRcdFx0LmR1YWxzdGFjayA9IHRydWUsXG4yNjA1Olx0XHRcdC5wb3J0X21pbiA9IDEsXG4yNjA2Olx0XHRcdC5wb3J0X21heCA9IFVTSFJUX01BWCxcbjI2MDc6XHRcdH07XG4yNjA4Olx0XG4yNjA5Olx0XHRtZW1zZXQodGIsIDAsIHNpemVvZih0YikpO1xuMjYxMDpcdFx0ZGV2ID0gcnRubF9jcmVhdGVfbGluayhuZXQsIG5hbWUsIG5hbWVfYXNzaWduX3R5cGUsXG4yNjExOlx0XHRcdFx0ICAgICAgIFx1MDAyNmdlbmV2ZV9saW5rX29wcywgdGIsIE5VTEwpO1xuMjYxMjpcdFx0aWYgKElTX0VSUihkZXYpKVxuMjYxMzpcdFx0XHRyZXR1cm4gZGV2O1xuMjYxNDpcdFxuMjYxNTpcdFx0aW5pdF90bmxfaW5mbyhcdTAwMjZjZmcuaW5mbywgZHN0X3BvcnQpO1xuMjYxNjpcdFx0ZXJyID0gZ2VuZXZlX2NvbmZpZ3VyZShuZXQsIGRldiwgTlVMTCwgXHUwMDI2Y2ZnKTtcbjI2MTc6XHRcdGlmIChlcnIpIHtcbjI2MTg6XHRcdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbjI2MTk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI2MjA6XHRcdH1cbjI2MjE6XHRcbjI2MjI6XHRcdC8qIG9wZW52c3dpdGNoIHVzZXJzIGV4cGVjdCBwYWNrZXQgc2l6ZXMgdG8gYmUgdW5yZXN0cmljdGVkLFxuMjYyMzpcdFx0ICogc28gc2V0IHRoZSBsYXJnZXN0IE1UVSB3ZSBjYW4uXG4yNjI0Olx0XHQgKi9cbjI2MjU6XHRcdGVyciA9IGdlbmV2ZV9jaGFuZ2VfbXR1KGRldiwgSVBfTUFYX01UVSk7XG4yNjI2Olx0XHRpZiAoZXJyKVxuMjYyNzpcdFx0XHRnb3RvIGVycjtcbjI2Mjg6XHRcbjI2Mjk6XHRcdGVyciA9IHJ0bmxfY29uZmlndXJlX2xpbmsoZGV2LCBOVUxMLCAwLCBOVUxMKTtcbjI2MzA6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yNjMxOlx0XHRcdGdvdG8gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2VuZXZlIERldmljZSBMaWZlY3ljbGUgYW5kIFJlc291cmNlIE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGdlbmV2ZV9kZXZfY3JlYXRlX2ZiYCwgaWYgYGdlbmV2ZV9jb25maWd1cmVgIGZhaWxzLCB0aGUgY29kZSBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXM6ICYjMzQ7V2FpdCwgYGZyZWVfbmV0ZGV2YCB3aWxsIGNhbGwgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYCwgd2hpY2ggaXMgYGdlbmV2ZV9mcmVlX2RldmAuJiMzNDsgQnV0IHRoZW4gSSByZW1lbWJlcmVkOiBgZ2VuZXZlX2NvbmZpZ3VyZWAgKml0c2VsZiogY2FsbHMgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBkaXJlY3RseSAqYmVmb3JlKiBgZnJlZV9uZXRkZXZgIHBvdGVudGlhbGx5IGNhbGxzIGl0IGFnYWluLiBJcyB0aGF0IGRvdWJsZS1mcmVlIHNhZmU/IFllcywgYmVjYXVzZSBgZ2VuZXZlX2ZyZWVfZGV2YCBzZXRzIGBnZW5ldmUtJmd0O2NmZ2AgdG8gTlVMTCwgc28gdGhlIHNlY29uZCBjYWxsIGlzIGhhcm1sZXNzLgoKTm93LCB3aHkgd2FzIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgZXZlbiBhZGRlZCBpbiBgZ2VuZXZlX2NvbmZpZ3VyZWA/IFRoZSByZWFzb24gbXVzdCBiZSByZWxhdGVkIHRvIGZhaWx1cmVzIGluIHRoZSBkZXZpY2UgY3JlYXRpb24gcHJvY2Vzcy4gSSBmaWd1cmVkIGl0IG91dC4uLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIGZhaWxzLCBgZnJlZV9uZXRkZXYoZGV2KWAgaXMgY2FsbGVkLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBjb3VsZCBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBpdHNlbGYgY2FsbCBgZnJlZV9uZXRkZXZgIG9uIGZhaWx1cmU/IE5vLCBpdCBkb2VzbiYjMzk7dC4KCk5vdywgaWYgYGdlbmV2ZV9jb25maWd1cmVgIGlzIGNhbGxlZCBmcm9tIGBnZW5ldmVfbmV3bGlua2A6IEkga25vdyB0aGF0IGBnZW5ldmVfbmV3bGlua2AgaXMgaXRzZWxmIGNhbGxlZCBieSBgcnRubF9uZXdsaW5rYC4gSWYgYG5ld2xpbmtgIGZhaWxzLCBgcnRubF9uZXdsaW5rYCBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAuIEkgbmVlZCB0byBiZSBzdXJlLiBJZiBgZnJlZV9uZXRkZXYoZGV2KWAgaXMgY2FsbGVkLCBpdCB3aWxsIGNhbGwgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHNldCB1cCBjb3JyZWN0bHkuIE5vdywgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYCBpcyBhc3NpZ25lZCBpbiBgZ2VuZXZlX3NldHVwYC4KClNwZWNpZmljYWxseSwgYGdlbmV2ZV9zZXR1cGAgc2V0cyBgZGV2LSZndDtwcml2X2Rlc3RydWN0b3IgPSBnZW5ldmVfZnJlZV9kZXY7YCBhbmQgYGRldi0mZ3Q7bmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO2AuIFNvLCBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgYGRldi0mZ3Q7cmVnX3N0YXRlYCBpcyBgTkVUUkVHX1VOSU5JVElBTElaRURgLiBXaGVuIGBmcmVlX25ldGRldmAgaXMgY2FsbGVkLCBpdCBjaGVja3MgYGRldi0mZ3Q7cmVnX3N0YXRlYC4gSWYgYGRldi0mZ3Q7cmVnX3N0YXRlID09IE5FVFJFR19VTklOSVRJQUxJWkVEYCwgaXQgY2FsbHMgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yKGRldilgLiBUaGlzIGhhbmRsZXMgdGhlIGxpZmVjeWNsZSBjb3JyZWN0bHkuCgpPa2F5LCBzbyBpZiBgZGV2LSZndDtwcml2X2Rlc3RydWN0b3JgIGlzIGNhbGxlZCwgaXQgd2lsbCBmcmVlIGBnZW5ldmUtJmd0O2NmZ2AuIFdlIGFyZSBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQuIEJ1dCBub3cgSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmc6IHNvIHdoeSBkaWQgdGhlIHBhdGNoIGFkZCBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGluIGBnZW5ldmVfY29uZmlndXJlYD8gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgZ2VuZXZlX2NvbmZpZ3VyZWAgYWxsb2NhdGVzIGBuZXdfY2ZnYCBhbmQgYXNzaWducyBpdCB0byBgZ2VuZXZlLSZndDtjZmdgLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgYGdlbmV2ZS0mZ3Q7Y2ZnYCAqY291bGQqIGJlIHNldCB0byBhIHZhbGlkIGFkZHJlc3MuIElmIGBnZW5ldmVfY29uZmlndXJlYCBpcyBjYWxsZWQgZnJvbSBgZ2VuZXZlX25ld2xpbmtgLCBhbmQgaXQgZmFpbHMsIGBydG5sX25ld2xpbmtgIHdpbGwgY2FsbCBgZnJlZV9uZXRkZXYoZGV2KWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSWYgYHJ0bmxfbmV3bGlua2AgY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgLCBpdCB3aWxsIGNhbGwgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYCwgd2hpY2ggaXMgYGdlbmV2ZV9mcmVlX2RldmAsIHdoaWNoIHdpbGwgZnJlZSBgZ2VuZXZlLSZndDtjZmdgLiBUaGlzIGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiB0aGUgY29uZmlnIHN0cnVjdC4gTm93IEkgc2VlIHRoYXQgYGdlbmV2ZV9mcmVlX2RldmAgaXMgbmVlZGVkLiBOb3cgSSBzaG91bGQgY2hlY2sgYHJ0bmxfbmV3bGlua2AgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRubF9uZXdsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmM9MzgxND1FWFBPUlRfU1lNQk9MKHJ0bmxfY3JlYXRlX2xpbmspO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzgxNS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjM4MTY6c3RydWN0IHJ0bmxfbmV3bGlua190YnMge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzgxNy1cdHN0cnVjdCBubGF0dHIgKnRiW0lGTEFfTUFYICYjNDM7IDFdO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTM4MjM9c3RhdGljIGludCBydG5sX2NoYW5nZWxpbmsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzgyNS1cdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICp0Z3RfbmV0LFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzgyNjpcdFx0XHQgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3RicyAqdGJzLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzgyNy1cdFx0XHQgICBzdHJ1Y3QgbmxhdHRyICoqZGF0YSxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zODg4PXN0YXRpYyBpbnQgcnRubF9ncm91cF9jaGFuZ2VsaW5rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzkwNy1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjM5MDg6c3RhdGljIGludCBydG5sX25ld2xpbmtfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZmluZm9tc2cgKmlmbSxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5MDktXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzkxNi1cdHVuc2lnbmVkIGNoYXIgbmFtZV9hc3NpZ25fdHlwZSA9IE5FVF9OQU1FX1VTRVI7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzozOTE3Olx0c3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgcGFyYW1zID0ge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzkxOC1cdFx0LnNyY19uZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTM5ODI9c3RhdGljIHN0cnVjdCBuZXQgKnJ0bmxfZ2V0X3BlZXJfbmV0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDAxOS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQwMjA6c3RhdGljIGludCBfX3J0bmxfbmV3bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwMjEtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwMjMtXHRcdFx0ICBzdHJ1Y3QgbmV0ICpwZWVyX25ldCxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQwMjQ6XHRcdFx0ICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3RicyAqdGJzLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDAyNS1cdFx0XHQgIHN0cnVjdCBubGF0dHIgKipkYXRhLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwNzctXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MDc4Olx0cmV0dXJuIHJ0bmxfbmV3bGlua19jcmVhdGUoc2tiLCBpZm0sIG9wcywgdGd0X25ldCwgbGlua19uZXQsIHBlZXJfbmV0LCBubGgsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDc5LVx0XHRcdFx0ICAgdGIsIGRhdGEsIGV4dGFjayk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDA4MS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQwODI6c3RhdGljIGludCBydG5sX25ld2xpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDgzLVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDg3LVx0c3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyA9IE5VTEw7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MDg4Olx0c3RydWN0IHJ0bmxfbmV3bGlua190YnMgKnRicztcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwODktXHRzdHJ1Y3QgcnRubF9uZXRzIHJ0bmxfbmV0cztcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MTk0LVx0cnRubF9uZXRzX2xvY2soXHUwMDI2cnRubF9uZXRzKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQxOTU6XHRyZXQgPSBfX3J0bmxfbmV3bGluayhza2IsIG5saCwgb3BzLCB0Z3RfbmV0LCBsaW5rX25ldCwgcGVlcl9uZXQsIHRicywgZGF0YSwgZXh0YWNrKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQxOTYtXHRydG5sX25ldHNfdW5sb2NrKFx1MDAyNnJ0bmxfbmV0cyk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDQwMj1zdGF0aWMgaW50IHJ0bmxfbGlua3Byb3AoaW50IGNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDQ0OS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ0NTA6c3RhdGljIGludCBydG5sX25ld2xpbmtwcm9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDQ1MS1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTcyMTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzIxNTpcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LLCAuZG9pdCA9IHJ0bmxfbmV3bGluayxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyMTYtXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfUEVSTkVUfSxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjMxLVx0ey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjcyMzI6XHR7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjMzLVx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcyMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBydG5sX25ld2xpbmtfY3JlYXRlYCoqCgpPa2F5LCBzbyB0aGUgbWVudGFsIGZvY3VzIGhlcmUgaXMgdG8gZXhhbWluZSB0aGUgYHJ0bmxfbmV3bGlua19jcmVhdGVgIGZ1bmN0aW9uLiBJIGltbWVkaWF0ZWx5IGtub3cgdGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIG5ldyBuZXR3b3JrIGxpbmtzIHZpYSB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZS4gVGhlIGNob2ljZSBvZiBgcnRubF9uZXdsaW5rX2NyZWF0ZWAgZnJvbSB0aGUgYG5ldC9jb3JlL3J0bmV0bGluay5jYCBmaWxlIGlzIHRlbGxpbmc7IGl0IHNpZ25hbHMgYSBkZXNpcmUgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBtZWNoYW5pc20gZm9yIGJyaW5naW5nIHVwIGEgbmV3IGludGVyZmFjZSwgbGlrZWx5IHRvIHRyb3VibGVzaG9vdCBvciBhbmFseXplIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGNvbXBvbmVudHMuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCB0aGUgZGF0YSBwYXJzaW5nLCB2YWxpZGF0aW9uLCBhbmQgdWx0aW1hdGVseSwgdGhlIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24gdGhhdCB0YWtlcyBwbGFjZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCwgZXJyb3IgY29uZGl0aW9ucywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgYW55IG5ldyBidWdzIGhhdmUgY3JlcHQgaW4gcmVjZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5MDg6XHRzdGF0aWMgaW50IHJ0bmxfbmV3bGlua19jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlmaW5mb21zZyAqaWZtLFxuMzkwOTpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzLFxuMzkxMDpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0ICp0Z3RfbmV0LCBzdHJ1Y3QgbmV0ICpsaW5rX25ldCxcbjM5MTE6XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldCAqcGVlcl9uZXQsXG4zOTEyOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuMzkxMzpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKipkYXRhLFxuMzkxNDpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4zOTE1Olx0e1xuMzkxNjpcdFx0dW5zaWduZWQgY2hhciBuYW1lX2Fzc2lnbl90eXBlID0gTkVUX05BTUVfVVNFUjtcbjM5MTc6XHRcdHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zIHBhcmFtcyA9IHtcbjM5MTg6XHRcdFx0LnNyY19uZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spLFxuMzkxOTpcdFx0XHQubGlua19uZXQgPSBsaW5rX25ldCxcbjM5MjA6XHRcdFx0LnBlZXJfbmV0ID0gcGVlcl9uZXQsXG4zOTIxOlx0XHRcdC50YiA9IHRiLFxuMzkyMjpcdFx0XHQuZGF0YSA9IGRhdGEsXG4zOTIzOlx0XHR9O1xuMzkyNDpcdFx0dTMyIHBvcnRpZCA9IE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQ7XG4zOTI1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuMzkyNjpcdFx0Y2hhciBpZm5hbWVbSUZOQU1TSVpdO1xuMzkyNzpcdFx0aW50IGVycjtcbjM5Mjg6XHRcbjM5Mjk6XHRcdGlmICghb3BzLVx1MDAzZWFsbG9jIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZXNldHVwKVxuMzkzMDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4zOTMxOlx0XG4zOTMyOlx0XHRpZiAodGJbSUZMQV9JRk5BTUVdKSB7XG4zOTMzOlx0XHRcdG5sYV9zdHJzY3B5KGlmbmFtZSwgdGJbSUZMQV9JRk5BTUVdLCBJRk5BTVNJWik7XG4zOTM0Olx0XHR9IGVsc2Uge1xuMzkzNTpcdFx0XHRzbnByaW50ZihpZm5hbWUsIElGTkFNU0laLCBcJiMzNDslcyUlZFwmIzM0Oywgb3BzLVx1MDAzZWtpbmQpO1xuMzkzNjpcdFx0XHRuYW1lX2Fzc2lnbl90eXBlID0gTkVUX05BTUVfRU5VTTtcbjM5Mzc6XHRcdH1cbjM5Mzg6XHRcbjM5Mzk6XHRcdGRldiA9IHJ0bmxfY3JlYXRlX2xpbmsodGd0X25ldCwgaWZuYW1lLCBuYW1lX2Fzc2lnbl90eXBlLCBvcHMsIHRiLFxuMzk0MDpcdFx0XHRcdCAgICAgICBleHRhY2spO1xuMzk0MTpcdFx0aWYgKElTX0VSUihkZXYpKSB7XG4zOTQyOlx0XHRcdGVyciA9IFBUUl9FUlIoZGV2KTtcbjM5NDM6XHRcdFx0Z290byBvdXQ7XG4zOTQ0Olx0XHR9XG4zOTQ1Olx0XG4zOTQ2Olx0XHRkZXYtXHUwMDNlaWZpbmRleCA9IGlmbS1cdTAwM2VpZmlfaW5kZXg7XG4zOTQ3Olx0XG4zOTQ4Olx0XHRpZiAob3BzLVx1MDAzZW5ld2xpbmspXG4zOTQ5Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZXdsaW5rKGRldiwgXHUwMDI2cGFyYW1zLCBleHRhY2spO1xuMzk1MDpcdFx0ZWxzZVxuMzk1MTpcdFx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbjM5NTI6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjM5NTM6XHRcdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbjM5NTQ6XHRcdFx0Z290byBvdXQ7XG4zOTU1Olx0XHR9XG4zOTU2Olx0XG4zOTU3Olx0XHRlcnIgPSBydG5sX2NvbmZpZ3VyZV9saW5rKGRldiwgaWZtLCBwb3J0aWQsIG5saCk7XG4zOTU4Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMzk1OTpcdFx0XHRnb3RvIG91dF91bnJlZ2lzdGVyO1xuMzk2MDpcdFx0aWYgKHRiW0lGTEFfTUFTVEVSXSkge1xuMzk2MTpcdFx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbjM5NjI6XHRcdFx0ZXJyID0gZG9fc2V0X21hc3RlcihkZXYsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTUFTVEVSXSksIGV4dGFjayk7XG4zOTYzOlx0XHRcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4zOTY0Olx0XHRcdGlmIChlcnIpXG4zOTY1Olx0XHRcdFx0Z290byBvdXRfdW5yZWdpc3RlcjtcbjM5NjY6XHRcdH1cbjM5Njc6XHRcbjM5Njg6XHRvdXQ6XG4zOTY5Olx0XHRyZXR1cm4gZXJyO1xuMzk3MDpcdG91dF91bnJlZ2lzdGVyOlxuMzk3MTpcdFx0aWYgKG9wcy1cdTAwM2VuZXdsaW5rKSB7XG4zOTcyOlx0XHRcdExJU1RfSEVBRChsaXN0X2tpbGwpO1xuMzk3MzpcdFxuMzk3NDpcdFx0XHRvcHMtXHUwMDNlZGVsbGluayhkZXYsIFx1MDAyNmxpc3Rfa2lsbCk7XG4zOTc1Olx0XHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2bGlzdF9raWxsKTtcbjM5NzY6XHRcdH0gZWxzZSB7XG4zOTc3Olx0XHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkdlbmV2ZSBEZXZpY2UgQ3JlYXRpb24gYW5kIENsZWFudXA6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IEdlbmV2ZSBkZXZpY2VzIGFyZSBjcmVhdGVkIGFuZCBzdWJzZXF1ZW50bHkgY2xlYW5lZCB1cCBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuIFJpZ2h0LCBzbyBgcnRubF9uZXdsaW5rX2NyZWF0ZWAgY2FsbHMgdGhlIGBuZXdsaW5rYCBvcGVyYXRpb24sIHdoaWNoIGluIG91ciBjYXNlIGlzIGBnZW5ldmVfbmV3bGlua2AuIElmIGBnZW5ldmVfbmV3bGlua2AgcnVucyBpbnRvIHRyb3VibGUsIGl0IHJldHVybnMgYW4gZXJyb3IgYW5kIHRoZSBrZXJuZWwgY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgLiBUaGF0IG1ha2VzIHNlbnNlLgoKTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIElmIGBnZW5ldmVfY29uZmlndXJlYCBmYWlscywgaXQgY2FsbHMgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBkaXJlY3RseSBhbmQgcmV0dXJucyBhbiBlcnJvci4gVGhpcyBwcm9wYWdhdGVzIHVwIHRvIGBnZW5ldmVfbmV3bGlua2AsIHdoaWNoIHRoZW4gYWxzbyByZXR1cm5zIGFuIGVycm9yLCBhbmQgZmluYWxseSBgcnRubF9uZXdsaW5rX2NyZWF0ZWAgY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgLiBTbywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUgZmFpbHVyZSBpcywgYGZyZWVfbmV0ZGV2KGRldilgIGdldHMgY2FsbGVkIGV2ZW50dWFsbHkuCgpgZnJlZV9uZXRkZXYoZGV2KWAgdGhlbiBjYWxscyBgZGV2LSZndDtwcml2X2Rlc3RydWN0b3IoZGV2KWAsIHdoaWNoIGluIG91ciBjYXNlICppcyogYGdlbmV2ZV9mcmVlX2RldihkZXYpYC4gQnV0IHdhaXQsIGRvZXMgdGhpcyBtZWFuIGBnZW5ldmVfZnJlZV9kZXZgIGNvdWxkIGJlIGNhbGxlZCB0d2ljZSBpbiBzb21lIHNjZW5hcmlvcz8gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHNhZmUuCgpBaCwgSSBzZWUhIGBnZW5ldmVfZnJlZV9kZXZgIHVzZXMgYFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLSZndDtjZmcsIE5VTEwpO2AgYW5kIGBnZW5ldmVfY29uZmlnX2ZyZWVgIGNoZWNrcyBmb3IgTlVMTC4gVGhhdCBzaG91bGQgcHJldmVudCBhbnkgZG91YmxlLWZyZWUgaXNzdWVzLCBldmVuIGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCgpCdXQgKndoeSogd2FzIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgYWRkZWQgaW4gYGdlbmV2ZV9jb25maWd1cmVgIGluIHRoZSBmaXJzdCBwbGFjZT8gTGV0IG1lIHJldHJhY2UgbXkgc3RlcHMuIE9oLCByaWdodCwgYGdlbmV2ZV9jb25maWd1cmVgIHVzZXMgYHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtJmd0O2NmZywgbmV3X2NmZyk7YCBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIGZhaWxzLCBgZ2VuZXZlX2NvbmZpZ3VyZWAgcmV0dXJucyBhbiBlcnJvci4gSWYgd2UgY2FsbCBpdCBmcm9tIGBnZW5ldmVfZGV2X2NyZWF0ZV9mYmAsIGl0IGFsc28gY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgIG9uIGVycm9yLiBTbyB0aGUgbmV0IGVmZmVjdCBpcywgaW4gZWl0aGVyIGVycm9yIHBhdGggYGZyZWVfbmV0ZGV2KGRldilgIGdldHMgY2FsbGVkLiBUaGlzIG1lYW5zIHRoYXQgKnJlZ2FyZGxlc3MqIG9mIHdoZXRoZXIgdGhlIGVycm9yIG9yaWdpbmF0ZXMgZHVyaW5nIGNvbmZpZ3VyYXRpb24gb3IgZHVyaW5nIHRoZSBpbml0aWFsIGRldmljZSBzZXR1cCwgd2UmIzM5O3JlIGd1YXJhbnRlZWQgdG8gZnJlZSB0aGUgZGV2aWNlIGNvcnJlY3RseS4KCk9rYXksIHNvIGBmcmVlX25ldGRldihkZXYpYCBjYWxscyBgZGV2LSZndDtwcml2X2Rlc3RydWN0b3JgLCB3aGljaCBpcyBgZ2VuZXZlX2ZyZWVfZGV2YC4gQWxyaWdodCwgSSB0aGluayBJJiMzOTt2ZSBnb3QgaXQuIEkgbmVlZCB0byByZXZpc2l0IGBnZW5ldmVfZnJlZV9kZXZgIG5vdywgYW5kIG1ha2Ugc3VyZSB0aGF0IGFueSBSQ1UgaXNzdWVzIGFyZSBhY2NvdW50ZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2dlbmV2ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzY1Olx0LyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi9cbjE3NjY6XHRzdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjE3Njc6XHR7XG4xNzY4Olx0XHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjE3Njk6XHRcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGdlbmV2ZS1cdTAwM2VjZmcsIDEpO1xuMTc3MDpcdFxuMTc3MTpcdFx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XG4xNzcyOlx0XHRSQ1VfSU5JVF9QT0lOVEVSKGdlbmV2ZS1cdTAwM2VjZmcsIE5VTEwpO1xuMTc3MzpcdH1cbjE3NzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqR2VuZXZlIERldmljZSBMaWZlY3ljbGUgLSBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBHZW5ldmUgZGV2aWNlIGRyaXZlciBhbmQgc29tZXRoaW5nIGlzbiYjMzk7dCBxdWl0ZSBjbGlja2luZy4gSWYgYGdlbmV2ZV9mcmVlX2RldmAgaXMgY2FsbGVkIGZyb20gYGZyZWVfbmV0ZGV2YCwgd2hpY2ggaXQgaXMsIHRoZW4gaXQgKnNob3VsZCogZnJlZSBgZ2VuZXZlLSZndDtjZmdgLiBTbywgd2h5IHdhcyBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGFkZGVkIGluIGBnZW5ldmVfY29uZmlndXJlYD8gU29tZXRoaW5nIHNlZW1zIHJlZHVuZGFudCBoZXJlLgoKTGV0IG1lIHF1aWNrbHkgY2hlY2sgYHJlZ2lzdGVyX25ldGRldmljZWAuLi4gZG9lcyBpdCB0cmlnZ2VyIGEgY2FsbCB0byBgZnJlZV9uZXRkZXZgPyBBaCwgbm8sIGl0IGRvZXNuJiMzOTt0IGRpcmVjdGx5IGNhbGwgYGZyZWVfbmV0ZGV2YC4gT2theSwgc28gd2UgbmVlZCB0byBsb29rIGRlZXBlci4gV2FpdCBhIG1pbnV0ZeKApiBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgdGhlIGBkZXYtJmd0O3JlZ19zdGF0ZWAgaXMgc2V0IHRvIGBORVRSRUdfVU5JTklUSUFMSVpFRGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50ISBJZiBgZGV2LSZndDtyZWdfc3RhdGVgICppcyogYE5FVFJFR19VTklOSVRJQUxJWkVEYCwgdGhlbiBgZnJlZV9uZXRkZXZgICp3aWxsKiBjYWxsIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAuIFRoYXQmIzM5O3Mgd2hlcmUgaXQgaGFwcGVucy4KClNvIHRoZSBkZXN0cnVjdG9yIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCB0aGUgYGdlbmV2ZS0mZ3Q7Y2ZnYCBidXQgdGhlIGZ1bmN0aW9uIGBnZW5ldmVfZnJlZV9kZXZgIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgYXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgoKSGFuZyBvbuKApiB3aGF0IGlmIGBkZXYtJmd0O25lZWRzX2ZyZWVfbmV0ZGV2YCBpcyBzZXQgdG8gdHJ1ZT8gVGhpcyBjb3VsZCBiZSBhIGZhY3Rvci4gTmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZnJlZV9uZXRkZXZgIGluIGBuZXQvY29yZS9kZXYuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmVlX25ldGRldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTExMzMyPWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTQ5Mi1cdGlmIChyZXQpIHtcbm5ldC9jb3JlL2Rldi5jOjExNDkzOlx0XHQvKiBFeHBlY3QgZXhwbGljaXQgZnJlZV9uZXRkZXYoKSBvbiBmYWlsdXJlICovXG5uZXQvY29yZS9kZXYuYzoxMTQ5NDpcdFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gZmFsc2U7XG5uZXQvY29yZS9kZXYuYy0xMTQ5NS1cdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBOVUxMKTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTYwNT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTE2ODgtICpcdHJ0bmxfdW5sb2NrKCk7XG5uZXQvY29yZS9kZXYuYzoxMTY4OTogKlx0ZnJlZV9uZXRkZXYoeTEpO1xubmV0L2NvcmUvZGV2LmM6MTE2OTA6ICpcdGZyZWVfbmV0ZGV2KHkyKTtcbm5ldC9jb3JlL2Rldi5jLTExNjkxLSAqXG4tLVxubmV0L2NvcmUvZGV2LmM9MTE3MDI9dm9pZCBuZXRkZXZfcnVuX3RvZG8odm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTc1OC1cdFx0XHRkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yKGRldik7XG5uZXQvY29yZS9kZXYuYzoxMTc1OTpcdFx0aWYgKGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldilcbm5ldC9jb3JlL2Rldi5jOjExNzYwOlx0XHRcdGZyZWVfbmV0ZGV2KGRldik7XG5uZXQvY29yZS9kZXYuYy0xMTc2MS1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMjA0MT1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIxNjYtZnJlZV9hbGw6XG5uZXQvY29yZS9kZXYuYzoxMjE2NzpcdGZyZWVfbmV0ZGV2KGRldik7XG5uZXQvY29yZS9kZXYuYy0xMjE2OC1cdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyMTgwPXN0YXRpYyB2b2lkIG5ldGRldl9uYXBpX2V4aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjE5Ni0vKipcbm5ldC9jb3JlL2Rldi5jOjEyMTk3OiAqIGZyZWVfbmV0ZGV2IC0gZnJlZSBuZXR3b3JrIGRldmljZVxubmV0L2NvcmUvZGV2LmMtMTIxOTgtICogQGRldjogZGV2aWNlXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIyMDQtICovXG5uZXQvY29yZS9kZXYuYzoxMjIwNTp2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXYuYy0xMjIwNi17XG4tLVxubmV0L2NvcmUvZGV2LmMtMTIyMTQtXHRcdEFTU0VSVF9SVE5MKCk7XG5uZXQvY29yZS9kZXYuYzoxMjIxNTpcdFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbm5ldC9jb3JlL2Rldi5jLTEyMjE2LVx0XHRyZXR1cm47XG4tLVxubmV0L2NvcmUvZGV2LmMtMTIyNjItfVxubmV0L2NvcmUvZGV2LmM6MTIyNjM6RVhQT1JUX1NZTUJPTChmcmVlX25ldGRldik7XG5uZXQvY29yZS9kZXYuYy0xMjI2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGByZWdpc3Rlcl9uZXRkZXZpY2VgIEZhaWx1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHJlZ2lzdGVyX25ldGRldmljZWAgZnVuY3Rpb24gYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyYjMzk7cyBjYXRjaGluZyBteSBleWUuIElmIGl0IHJldHVybnMgYW4gZXJyb3IsIGl0IHNldHMgYGRldi0mZ3Q7bmVlZHNfZnJlZV9uZXRkZXYgPSBmYWxzZTtgIGFuZCB0aGVuIGNhbGxzIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZWAuIFRoYXQgc2VlbXMgY291bnRlcmludHVpdGl2ZSBhdCBmaXJzdCwgZG9lc24mIzM5O3QgaXQ/IEl0IGltcGxpZXMgdGhhdCBpZiBpdCBmYWlscywgdGhlIGRldmljZSBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGZyZWVkIGJ5IHRoZSBzdGFuZGFyZCBtZWFucy4gQnV0IHRoZW4sIEkgcmVtZW1iZXIgdGhhdCBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBjYW4gZmFpbCAqYWZ0ZXIqIHNvbWUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGhhcyBhbHJlYWR5IG9jY3VycmVkLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIGlzIGJlaW5nIHBhcnRpYWxseSB1bmRvbmUuCgpIb3dldmVyLCBhIGZ1cnRoZXIgdGhvdWdodCBzdHJpa2VzIG1lLiBJZiBgZGV2LSZndDtuZWVkc19mcmVlX25ldGRldmAgaXMgZmFsc2UsIGFuZCB0aGVuIGEgY2FsbCB0byBgZnJlZV9uZXRkZXZgIGlzIG1hZGUsIHdpbGwgdGhhdCBzdGlsbCBmcmVlIHRoZSBkZXZpY2U/IEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZmxhZy4gSXQgc2VlbXMgSSBuZWVkIHRvIHJlYWQgdGhlIGBmcmVlX25ldGRldmAgY29kZSB0byBmdWxseSBjb21wcmVoZW5kIHRoZSBsb2dpYy4gSSBjYW4gbWFrZSBzb21lIGluZmVyZW5jZXMsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA1Olx0dm9pZCBmcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuMTIyMDY6XHR7XG4xMjIwNzpcdFx0bWlnaHRfc2xlZXAoKTtcbjEyMjA4Olx0XG4xMjIwOTpcdFx0LyogV2hlbiBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgZmFpbGVkIHRoZSB1bndpbmRcbjEyMjEwOlx0XHQgKiBoYW5kbGluZyBtYXkgc3RpbGwgYmUgZGlzbWFudGxpbmcgdGhlIGRldmljZS4gSGFuZGxlIHRoYXQgY2FzZSBieVxuMTIyMTE6XHRcdCAqIGRlZmVycmluZyB0aGUgZnJlZS5cbjEyMjEyOlx0XHQgKi9cbjEyMjEzOlx0XHRpZiAoZGV2LVx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5SRUdJU1RFUklORykge1xuMTIyMTQ6XHRcdFx0QVNTRVJUX1JUTkwoKTtcbjEyMjE1Olx0XHRcdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4xMjIxNjpcdFx0XHRyZXR1cm47XG4xMjIxNzpcdFx0fVxuMTIyMTg6XHRcbjEyMjE5Olx0XHRXQVJOX09OKGRldi1cdTAwM2VjZmcgIT0gZGV2LVx1MDAzZWNmZ19wZW5kaW5nKTtcbjEyMjIwOlx0XHRrZnJlZShkZXYtXHUwMDNlY2ZnKTtcbjEyMjIxOlx0XHRrZnJlZShkZXYtXHUwMDNlZXRodG9vbCk7XG4xMjIyMjpcdFx0bmV0aWZfZnJlZV90eF9xdWV1ZXMoZGV2KTtcbjEyMjIzOlx0XHRuZXRpZl9mcmVlX3J4X3F1ZXVlcyhkZXYpO1xuMTIyMjQ6XHRcbjEyMjI1Olx0XHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGRldi1cdTAwM2VpbmdyZXNzX3F1ZXVlLCAxKSk7XG4xMjIyNjpcdFxuMTIyMjc6XHRcdF9faHdfYWRkcl9mbHVzaChcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9hZGRyX2NhY2hlKTtcbjEyMjI4Olx0XG4xMjIyOTpcdFx0LyogRmx1c2ggZGV2aWNlIGFkZHJlc3NlcyAqL1xuMTIyMzA6XHRcdGRldl9hZGRyX2ZsdXNoKGRldik7XG4xMjIzMTpcdFxuMTIyMzI6XHRcdG5ldGRldl9uYXBpX2V4aXQoZGV2KTtcbjEyMjMzOlx0XG4xMjIzNDpcdFx0bmV0aWZfZGVsX2NwdV9ybWFwKGRldik7XG4xMjIzNTpcdFxuMTIyMzY6XHRcdHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlcik7XG4xMjIzNzpcdCNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4xMjIzODpcdFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbjEyMjM5Olx0XHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBOVUxMO1xuMTIyNDA6XHQjZW5kaWZcbjEyMjQxOlx0XHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlY29yZV9zdGF0cyk7XG4xMjI0MjpcdFx0ZGV2LVx1MDAzZWNvcmVfc3RhdHMgPSBOVUxMO1xuMTIyNDM6XHRcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2V4ZHBfYnVsa3EpO1xuMTIyNDQ6XHRcdGRldi1cdTAwM2V4ZHBfYnVsa3EgPSBOVUxMO1xuMTIyNDU6XHRcbjEyMjQ2Olx0XHRuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShkZXYpO1xuMTIyNDc6XHRcbjEyMjQ4Olx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbjEyMjQ5Olx0XG4xMjI1MDpcdFx0LyogIENvbXBhdGliaWxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzICovXG4xMjI1MTpcdFx0aWYgKGRldi1cdTAwM2VyZWdfc3RhdGUgPT0gTkVUUkVHX1VOSU5JVElBTElaRUQgfHxcbjEyMjUyOlx0XHQgICAgZGV2LVx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfRFVNTVkpIHtcbjEyMjUzOlx0XHRcdGt2ZnJlZShkZXYpO1xuMTIyNTQ6XHRcdFx0cmV0dXJuO1xuMTIyNTU6XHRcdH1cbjEyMjU2Olx0XG4xMjI1NzpcdFx0QlVHX09OKGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1VOUkVHSVNURVJFRCk7XG4xMjI1ODpcdFx0V1JJVEVfT05DRShkZXYtXHUwMDNlcmVnX3N0YXRlLCBORVRSRUdfUkVMRUFTRUQpO1xuMTIyNTk6XHRcbjEyMjYwOlx0XHQvKiB3aWxsIGZyZWUgdmlhIGRldmljZSByZWxlYXNlICovXG4xMjI2MTpcdFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbjEyMjYyOlx0fVxuMTIyNjM6XHRFWFBPUlRfU1lNQk9MKGZyZWVfbmV0ZGV2KTtcbjEyMjY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTUyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKlJlYWxpemluZyBhIENyaXRpY2FsIERpc2NyZXBhbmN5IGluIERldmljZSBEZS1pbml0aWFsaXphdGlvbioqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIG5ldHdvcmsgZGV2aWNlIHRlYXJkb3duIHNlcXVlbmNlLCBhbmQgaXQmIzM5O3Mgc3VkZGVubHkgaGl0dGluZyBtZS4gKmBmcmVlX25ldGRldmAgY2xlYXJseSBkb2VzbiYjMzk7dCBpbnZva2UgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYCBkaXJlY3RseSEqIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgcHJvYmxlbSwgYSBzaWduaWZpY2FudCBvdmVyc2lnaHQgaWYgd2UmIzM5O3JlIHJlbHlpbmcgb24gdGhhdCBkZXN0cnVjdG9yIGZvciBjbGVhbnVwLiBJIGFsd2F5cyBhc3N1bWVkIGl0IHdhcyBjYWxsZWQgdGhlcmUsIGFzIHRoZSBuZXQgZGV2aWNlIGlzIGZyZWVkLgoKV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGVyZSAqaXMqIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAgYWN0dWFsbHkgY2FsbGVkPyBBaCwgb2YgY291cnNlISAqSXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbmV0ZGV2X3J1bl90b2RvYCEqIE9rYXksIHRoYXQgbWVhbnMgaXQgaXMgY2FsbGVkLCBidXQgdW5kZXIgYSBzcGVjaWZpYyBjb25kaXRpb24uLi4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZnJlZV9uZXRkZXZgIGFuZCBgbmV0ZGV2X3J1bl90b2RvYCwgYW5kIG1ha2Ugc3VyZSB0aGUgbGF0dGVyICphbHdheXMqIHJ1bnMgd2hlbiBpdCBuZWVkcyB0by4gVGhpcyBpcyBzb21ldGhpbmcgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGxvb2sgY2xvc2VyIGF0LCBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbXBsZXRlIGNsZWFudXAgaWYgdGhhdCBleGVjdXRpb24gcGF0aCBpcyBub3QgY29uc2lzdGVudC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgYG5ldGRldl9ydW5fdG9kb2AgZ2V0cyBzY2hlZHVsZWQgYW5kIGV4ZWN1dGVkIHRvIG1ha2Ugc3VyZSB0aGUgcHJpdmF0ZSBkYXRhIGlzIGNsZWFuZWQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTc0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTc0MDpcdFx0fVxuMTE3NDE6XHRcbjExNzQyOlx0XHRjbnQgPSAwO1xuMTE3NDM6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZsaXN0KSkge1xuMTE3NDQ6XHRcdFx0ZGV2ID0gbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoXHUwMDI2bGlzdCk7XG4xMTc0NTpcdFx0XHRsaXN0X2RlbChcdTAwMjZkZXYtXHUwMDNldG9kb19saXN0KTtcbjExNzQ2Olx0XG4xMTc0NzpcdFx0XHQvKiBwYXJhbm9pYSAqL1xuMTE3NDg6XHRcdFx0QlVHX09OKG5ldGRldl9yZWZjbnRfcmVhZChkZXYpICE9IDEpO1xuMTE3NDk6XHRcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VwdHlwZV9hbGwpKTtcbjExNzUwOlx0XHRcdEJVR19PTighbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNlcHR5cGVfc3BlY2lmaWMpKTtcbjExNzUxOlx0XHRcdFdBUk5fT04ocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VpcF9wdHIpKTtcbjExNzUyOlx0XHRcdFdBUk5fT04ocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VpcDZfcHRyKSk7XG4xMTc1MzpcdFxuMTE3NTQ6XHRcdFx0bmV0ZGV2X25hbWVfbm9kZV9hbHRfZmx1c2goZGV2KTtcbjExNzU1Olx0XHRcdG5ldGRldl9uYW1lX25vZGVfZnJlZShkZXYtXHUwMDNlbmFtZV9ub2RlKTtcbjExNzU2Olx0XHRcdG5ldGRldl9kb19mcmVlX3BjcHVfc3RhdHMoZGV2KTtcbjExNzU3Olx0XHRcdGlmIChkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yKVxuMTE3NTg6XHRcdFx0XHRkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yKGRldik7XG4xMTc1OTpcdFx0XHRpZiAoZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2KVxuMTE3NjA6XHRcdFx0XHRmcmVlX25ldGRldihkZXYpO1xuMTE3NjE6XHRcbjExNzYyOlx0XHRcdGNudCYjNDM7JiM0Mzs7XG4xMTc2MzpcdFxuMTE3NjQ6XHRcdFx0LyogRnJlZSBuZXR3b3JrIGRldmljZSAqL1xuMTE3NjU6XHRcdFx0a29iamVjdF9wdXQoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqKTtcbjExNzY2Olx0XHR9XG4xMTc2NzpcdFx0aWYgKGNudCBcdTAwMjZcdTAwMjYgYXRvbWljX3N1Yl9hbmRfdGVzdChjbnQsIFx1MDAyNmRldl91bnJlZ19jb3VudCkpXG4xMTc2ODpcdFx0XHR3YWtlX3VwKFx1MDAyNm5ldGRldl91bnJlZ2lzdGVyaW5nX3dxKTtcbjExNzY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgxOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDc1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IExlYWsgRml4KioKCk9rYXksIHNvIHRoZSBgZGV2LSZndDtwcml2X2Rlc3RydWN0b3JgIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGluIGBuZXRkZXZfcnVuX3RvZG9gLCB3aGljaCBoYXBwZW5zICphZnRlciogYSBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgdGhlIGRldmljZSBpc24mIzM5O3QgYWN0dWFsbHkgcmVnaXN0ZXJlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIHRodXMgaXQmIzM5O3MgbmV2ZXIgdW5yZWdpc3RlcmVkLCB3aGljaCBtZWFucyBgbmV0ZGV2X3J1bl90b2RvYCBpcyBuZXZlciBjYWxsZWQgZm9yIGl0LiBUaGF0IG1lYW5zIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAgKm5ldmVyKiBnZXRzIGNhbGxlZCBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscy4gIFRoYXQgaXMgYSBwcm9ibGVtIGJlY2F1c2UgaWYgYHJlZ2lzdGVyX25ldGRldmljZWAgZmFpbHMsIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGJlZm9yZSBpdCB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBmcmVlZCBpbiBgcHJpdl9kZXN0cnVjdG9yYCB3aWxsIG5vdyBsZWFrLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBnZW5ldmVfY29uZmlndXJlYCBmdW5jdGlvbi4gSXQgYWxsb2NhdGVzIGBuZXdfY2ZnYCBhbmQgYXNzaWducyBpdCB0byBgZ2VuZXZlLSZndDtjZmdgLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscyBpbiB0aGlzIHNjZW5hcmlvLCBgZ2VuZXZlX2NvbmZpZ3VyZWAgcmV0dXJucyBhbiBlcnJvciwgYW5kIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBzdWNoIGFzIGBydG5sX25ld2xpbmtfY3JlYXRlYCwgdGhlbiBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAuIEhvd2V2ZXIsIGBmcmVlX25ldGRldmAgKmRvZXNuJiMzOTt0KiBjYWxsIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAg4oCTIGl0IGp1c3QgZnJlZXMgdGhlIGRldmljZSBtZW1vcnkgaXRzZWxmLiAgU28sIGBnZW5ldmUtJmd0O2NmZ2AgaXMgYmVpbmcgbGVha2VkIQoKVGhpcyBwYXRjaCBpcyBhZGRpbmcgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgZ2VuZXZlX2NvbmZpZ3VyZWAuIEl0IG1ha2VzIHRvdGFsIHNlbnNlIG5vdzogYGdlbmV2ZV9mcmVlX2RldmAgZnJlZXMgdGhlIGBnZW5ldmUtJmd0O2NmZ2AuCgpMZXQmIzM5O3MgdmVyaWZ5IHRoaXMuIElmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzLCBgZ2VuZXZlX2NvbmZpZ3VyZWAgY2FsbHMgYGdlbmV2ZV9mcmVlX2RldihkZXYpYC4gYGdlbmV2ZV9mcmVlX2RldmAgdGhlbiBmcmVlcyBgZ2VuZXZlLSZndDtjZmdgIGFuZCBzZXRzIGl0IHRvIE5VTEwuIFRoZW4gdGhlIGVycm9yIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsIGFuZCBmaW5hbGx5IGBmcmVlX25ldGRldihkZXYpYCBpcyBjYWxsZWQgdG8gZnJlZSB0aGUgZGV2aWNlIG1lbW9yeS4gIFRoZSBsZWFrIGlzIGZpeGVkLiBFeGNlbGxlbnQhCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBJdCBkZWZpbml0ZWx5IGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgYGdlbmV2ZV9jb25maWd1cmVgLCBidXQgdGhlIGZ1enppbmcgZ3VpZGFuY2Ugc3RhdGVzIHRvIGRldGVybWluZSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmOgotICBUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIGRvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvZGUgY29tbWVudHMuCi0gIFB1cmVseSBsb2dnaW5nIG9yIHRyYWNlcG9pbnQgY2hhbmdlcy4KLSAgQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24mIzM5O3QgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gIENvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLgoKVGhpcyBkZWZpbml0ZWx5ICpkb2VzbiYjMzk7dCogZml0IHRob3NlIGNyaXRlcmlhLiBUaGlzIG1vZGlmaWVzIGEgcmVhY2hhYmxlIGRyaXZlciAoYGRyaXZlcnMvbmV0L2dlbmV2ZS5jYCksIGl0IGZpeGVzIGEgbWVtb3J5IGxlYWsgYW5kIGFsdGVycyBleGVjdXRpb24gZmxvdyAoY2FsbHMgYGdlbmV2ZV9mcmVlX2RldmApLCBhbmQgaXQgaXMgcmVhY2hhYmxlLiBXZSBjYW4gdHJpZ2dlciB0aGlzIGxlYWsgYnkgY3JlYXRpbmcgYSBnZW5ldmUgZGV2aWNlIHdpdGggaW52YWxpZCBwYXJhbWV0ZXJzLCBvciBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscyBmb3IgYW55IHJlYXNvbjsgZm9yIGV4YW1wbGUsIGlmIHdlIHJ1biBvdXQgb2YgbWVtb3J5IG9yIHRoZXJlIGlzIGEgZHVwbGljYXRlIG5hbWUgY29uZmxpY3QuIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGNhbiBhbHNvIGZhaWwgaWYgdGhlIGRldmljZSBuYW1lIGlzIGFscmVhZHkgdGFrZW4gb3IgaWYgYW5vdGhlciBpbml0aWFsaXphdGlvbiBzdGVwIGZhaWxzLgoKU28sIHllcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgcmVhY2hhYmxlIGVycm9yIHBhdGggd2l0aCBhIG1lbW9yeSBsZWFrIGZpeC4gVGltZSB0byBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdFTkVWRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTIzMD1jb25maWcgVlhMQU5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MjQ1OmNvbmZpZyBHRU5FVkVcbmRyaXZlcnMvbmV0L0tjb25maWctMjQ2LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIEVuY2Fwc3VsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgc3lzdGVtJiMzOTtzIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBleHBsaWNpdGx5IHNldCB0byBgR0VORVZFYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcGVyZm9ybSBhIHRob3JvdWdoIGNoZWNrLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciAqdGhpcyogaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uLCBvciBpZiB0aGVyZSBhcmUgb3RoZXJzIGRlZmluZWQgdGhhdCBhcmUgYWxzbyBhY3RpdmVseSBpbiBwbGF5LCBwZXJoYXBzIHRocm91Z2ggYW4gYWx0ZXJuYXRpdmUgY29uZmlndXJhdGlvbiBjaGFpbiwgYW4gb3ZlcnJpZGUsIG9yIGV2ZW4gd2l0aGluIGEgc2VwYXJhdGUgbW9kdWxlIG9yIHByb2Nlc3MuIEl0JiMzOTtzIGNydWNpYWwgdG8gY29uZmlybSB0aGF0IGBHRU5FVkVgIGlzbiYjMzk7dCBqdXN0IG9uZSBjb21wb25lbnQgb2YgYSBicm9hZGVyLCBhbmQgcG90ZW50aWFsbHkgY29uZmxpY3RpbmcsIGNvbmZpZ3VyYXRpb24gc2V0LiBMZWF2aW5nIG5vIHN0b25lIHVudHVybmVkIGlzIHRoZSBrZXkgdG8gbWFpbnRhaW5pbmcgYSByb2J1c3QgbmV0d29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRjb25maWcgR0VORVZFXG4gMjQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblwmIzM0O1xuIDI0NzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gMjQ4Olx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAyNDk6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAyNTA6XHRcdGhlbHBcbiAyNTE6XHRcdCAgVGhpcyBhbGxvd3Mgb25lIHRvIGNyZWF0ZSBnZW5ldmUgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgcHJvdmlkZVxuIDI1MjpcdFx0ICBMYXllciAyIE5ldHdvcmtzIG92ZXIgTGF5ZXIgMyBOZXR3b3Jrcy4gR0VORVZFIGlzIG9mdGVuIHVzZWRcbiAyNTM6XHRcdCAgdG8gdHVubmVsIHZpcnR1YWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG4gMjU0Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MjcKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkdlbmV2ZSBDb25maWd1cmF0aW9uIC0gQ29yZSBGb2N1cyoqCgpSaWdodCwgc28gYEdFTkVWRWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGNvbXBvbmVudCBoZXJlLCB0aGUgdGhpbmcgdG8gcmVhbGx5IHplcm8gaW4gb24uIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IG1lc3Npbmcgd2l0aCB0aGUgYGdlbmV2ZV9jb25maWd1cmVgIGZ1bmN0aW9uLCBhbmQgdGhhdCYjMzk7cyBmb3VuZCBpbiBgZHJpdmVycy9uZXQvZ2VuZXZlLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBob3cgdGhlIGVudGlyZSBHZW5ldmUgc3RhY2sgaXMgc2V0IHVwLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gQmV5b25kIGBnZW5ldmVfY29uZmlndXJlYCwgSSBuZWVkIHRvIHBheSBleHRyYSBhdHRlbnRpb24gdG8gYGdlbmV2ZV9uZXdsaW5rYCwgYW5kIGBnZW5ldmVfZGV2X2NyZWF0ZV9mYmAuIFRoZXNlIGFyZSBhbGwgY29yZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBHZW5ldmUgZHJpdmVyLCBhbmQgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGlzIHBhdGNoIGltcGFjdHMgaG93IG5ldyBHZW5ldmUgbGlua3MgYXJlIGNyZWF0ZWQsIGNvbmZpZ3VyZWQsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgZm9yd2FyZGluZyBwbGFuZSBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBmbG93IHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgcGljdHVyZSBvZiB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7R0VORVZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXZlX2NvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtnZW5ldmVfbmV3bGluayYjMzQ7LAogICAgJiMzNDtnZW5ldmVfZGV2X2NyZWF0ZV9mYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIGdlbmV2ZV9jb25maWd1cmUuIElmIHJlZ2lzdGVyX25ldGRldmljZSgpIGZhaWxzLCB0aGUgZGV2aWNlJiMzOTtzIHByaXZfZGVzdHJ1Y3RvciBpcyBub3QgY2FsbGVkIGJ5IGZyZWVfbmV0ZGV2KCksIGxlYWRpbmcgdG8gYSBsZWFrIG9mIHRoZSBnZW5ldmVfY29uZmlnIHN0cnVjdC4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgY2FsbHMgZ2VuZXZlX2ZyZWVfZGV2KCkgdG8gZnJlZSBpdC4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dFTkVWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmV2ZV9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7Z2VuZXZlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2Rldl9jcmVhdGVfZmImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBnZW5ldmVfY29uZmlndXJlLiBJZiByZWdpc3Rlcl9uZXRkZXZpY2UoKSBmYWlscywgdGhlIGRldmljZSYjMzk7cyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTU6MDguMzU5MjY3MDE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDczMjc4MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jb25maWd1cmVcIixcbiAgICBcImdlbmV2ZV9uZXdsaW5rXCIsXG4gICAgXCJnZW5ldmVfZGV2X2NyZWF0ZV9mYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgZ2VuZXZlX2NvbmZpZ3VyZS4gSWYgcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgZmFpbHMsIHRoZSBkZXZpY2UncyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTowOC4zNTkyNzQ4MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzNTcwMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGE1ZTlhNzJiMGUwMzQ4MTRmYzUzMTI1OGJjMjE4NDRkY2JmYmFjZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyMiAxMTo1NTowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9nZW5ldmUuYyBiL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXFxuaW5kZXggMTdiZDM1NDNkNTg3YTkuLmViMTU2ZjMzYjYyNzUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZ2VuZXZlLmNcXG5AQCAtMjA0Myw4ICsyMDQzLDEwIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xcbi1cXHRpZiAoZXJyKVxcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGdlbmV2ZV9mcmVlX2RldihkZXYpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuIFxcbiBcXHRsaXN0X2FkZChcXHUwMDI2Z2VuZXZlLVxcdTAwM2VuZXh0LCBcXHUwMDI2Z24tXFx1MDAzZWdlbmV2ZV9saXN0KTtcXG4gXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjA4Ljc0MzUwODg4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTk1MDg5MDI3OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jb25maWd1cmVcIixcbiAgICBcImdlbmV2ZV9uZXdsaW5rXCIsXG4gICAgXCJnZW5ldmVfZGV2X2NyZWF0ZV9mYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgZ2VuZXZlX2NvbmZpZ3VyZS4gSWYgcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgZmFpbHMsIHRoZSBkZXZpY2UncyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBhNWU5YTcyYjBlMDM0ODE0ZmM1MzEyNThiYzIxODQ0ZGNiZmJhY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAxMTo1NTowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jIGIvZHJpdmVycy9uZXQvZ2VuZXZlLmNcbmluZGV4IDE3YmQzNTQzZDU4N2E5Li5lYjE1NmYzM2I2Mjc1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXG4rKysgYi9kcml2ZXJzL25ldC9nZW5ldmUuY1xuQEAgLTIwNDMsOCArMjA0MywxMCBAQCBzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XG4tXHRpZiAoZXJyKVxuK1x0aWYgKGVycikge1xuK1x0XHRnZW5ldmVfZnJlZV9kZXYoZGV2KTtcbiBcdFx0cmV0dXJuIGVycjtcbitcdH1cbiBcbiBcdGxpc3RfYWRkKFx1MDAyNmdlbmV2ZS1cdTAwM2VuZXh0LCBcdTAwMjZnbi1cdTAwM2VnZW5ldmVfbGlzdCk7XG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjA4Ljc0MzUxMDYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5OTEzMTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZXJlJ3MgYSBwYXRjaCBmbG9hdGluZyBhcm91bmQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBkcml2ZXJzL25ldC9nZW5ldmUuY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGFuIGVycm9yIGhhbmRsaW5nIGlzc3VlIHdpdGhpbiB0aGUgYGdlbmV2ZV9jb25maWd1cmVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgYGdlbmV2ZV9mcmVlX2RldihkZXYpO2AgY2FsbCB0byB0aGUgZXJyb3IgcGF0aCBvZiBgZ2VuZXZlX2NvbmZpZ3VyZWAuIFRoaXMgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KWAgZnVuY3Rpb24gZmFpbHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgYWRkaXRpb24gaXMgbGlrZWx5IGludGVuZGVkIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgdGhlIGBkZXZgIHN0cnVjdCB3b3VsZCBiZSBsZWZ0IGFsbG9jYXRlZCwgYnV0IG5vdCByZWdpc3RlcmVkLCBhbmQgcG90ZW50aWFsbHkgY2F1c2UgaXNzdWVzIGRvd24gdGhlIGxpbmUuIFdlIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBkZXZpY2UgaXMgZnJlZWQgc28gd2UgZG9uJ3QgbGVhayByZXNvdXJjZXMuIE5vdyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgZ2VuZXZlX2NvbmZpZ3VyZWAgZnVuY3Rpb24gaXRzZWxmIHRvIHNlZSB0aGUgY29udGV4dCBvZiB0aGlzIGFkZGl0aW9uIGFuZCB3aGV0aGVyIGl0J3MgdGhlIGNvcnJlY3QgYXBwcm9hY2guIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjEyLjA0MjY0NTcyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzM5MTYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldmVfY29uZmlndXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jPTE5NzM9c3RhdGljIGJvb2wgZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqYSxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE5ODEtXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTk4MjpzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE5ODMtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTIzNjU9c3RhdGljIGludCBnZW5ldmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjM4Ny1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyMzg4OlxcdGVyciA9IGdlbmV2ZV9jb25maWd1cmUobGlua19uZXQsIGRldiwgZXh0YWNrLCBcXHUwMDI2Y2ZnKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzg5LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0yNTkyPXN0cnVjdCBuZXRfZGV2aWNlICpnZW5ldmVfZGV2X2NyZWF0ZV9mYihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjE1LVxcdGluaXRfdG5sX2luZm8oXFx1MDAyNmNmZy5pbmZvLCBkc3RfcG9ydCk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjYxNjpcXHRlcnIgPSBnZW5ldmVfY29uZmlndXJlKG5ldCwgZGV2LCBOVUxMLCBcXHUwMDI2Y2ZnKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjE3LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTU6MTIuMTAwMDQyODg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzMjk0MDI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGZ1bmN0aW9uczpcblxuKipBbmFseXppbmcgR2VuZXZlIERldmljZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBhbmQgYGdlbmV2ZV9jb25maWd1cmVgLiBOYXR1cmFsbHksIHRoZSBmaXJzdCBmdW5jdGlvbiwgYGdlbmV2ZV9mcmVlX2RldmAsIGhhcyB0byBiZSB0aGUgY2xlYW51cCByb3V0aW5lLiBJdCdzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgYW55IHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBHZW5ldmUgZGV2aWNlIGlkZW50aWZpZWQgYnkgYGRldmAuIFRoaXMgY291bGQgaW5jbHVkZSBmcmVlaW5nIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGRhdGEgc3RydWN0dXJlcywgY2xvc2luZyBmaWxlIGRlc2NyaXB0b3JzLCB1bnJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UgZnJvbSB0aGUgbmV0d29yayBzdGFjayDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBkZXZpY2UgdGVhcmRvd24uIEkgbmVlZCB0byBiZSBzdXJlIGl0J3MgaGFuZGxpbmcgYWxsIGFzcGVjdHMgb2YgZGV2aWNlIGRlYWxsb2NhdGlvbiB0byBhdm9pZCBsZWFrcyBvciBkYW5nbGluZyByZWZlcmVuY2VzLiBJIHNob3VsZCBwcm9iYWJseSB0cmFjZSBpdHMgY2FsbHMsIGVuc3VyaW5nIGl0IHNhZmVseSBoYW5kbGVzIHJlc291cmNlcyBhbmQgZG9lc27igJl0IGNvcnJ1cHQgbWVtb3J5LlxuXG5UaGVuLCB0aGVyZSdzIGBnZW5ldmVfY29uZmlndXJlYC4gVGhhdCdzIHRoZSBvbmUgSSBuZWVkIHRvIHBheSBhIGxvdCBvZiBhdHRlbnRpb24gdG8uIFRoaXMgZnVuY3Rpb24gYWxtb3N0IGNlcnRhaW5seSBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIG9yIG1vZGlmaWNhdGlvbiBvZiBhIEdlbmV2ZSBkZXZpY2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgYWNjZXB0ZWQsIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUgb3IgdmlydHVhbCBpbnRlcmZhY2VzIGR1cmluZyB0aGlzIHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQsIGFzIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gZGV0ZXJtaW5lcyB0aGUgcGVyZm9ybWFuY2UgYW5kIGJlaGF2aW9yIG9mIHRoZSBHZW5ldmUgdHVubmVsLiBBcmUgd2UgaGFuZGxpbmcgTVRVLCBJUCBhZGRyZXNzZXMsIFVEUCBwb3J0cywgVkxBTiB0YWdzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgaXQgdmFsaWRhdGVzIHRoZSBpbnB1dCB0byBhdm9pZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBkdWUgdG8gaW5jb3JyZWN0IHBhcmFtZXRlciBzZXR0aW5ncy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3Igd2hlcmUgdGhpbmdzIGdvIHRlcnJpYmx5IHdyb25nLiBUaGlzIHdpbGwgZGVmaW5pdGVseSBiZSB3aGVyZSB0aGUgYnVsayBvZiBteSBlZmZvcnQgZ29lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjE1LjkzMjk4NTMzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk3MTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldmVfZnJlZV9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc1OD1zdGF0aWMgdm9pZCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NjUtLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi9cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzY2OnN0YXRpYyB2b2lkIGdlbmV2ZV9mcmVlX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3Njcte1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc3NT1zdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3ODEtXFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTc4MjpcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IGdlbmV2ZV9mcmVlX2RldjtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzgzLVxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTk4Mj1zdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjA0Ni1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjA0NzpcXHRcXHRnZW5ldmVfZnJlZV9kZXYoZGV2KTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMDQ4LVxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjE1Ljk4ODk2MDE0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzgwMzYxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5ldmUgRGV2aWNlIFNldHVwKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZ2VuZXZlX3NldHVwYCBmdW5jdGlvbiwgYW5kIEknbSBmb2N1c2luZyBvbiBob3cgZGV2aWNlIGNsZWFudXAgaXMgaGFuZGxlZC4gSSBzZWUgdGhhdCB0aGUgYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgIGlzIGFzc2lnbmVkIHRvIGBnZW5ldmVfZnJlZV9kZXZgLiBUaGF0J3MgdGhlIGtleS4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIHdoYXQgaGFwcGVucyBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscz8gSSByZW1lbWJlciB0aGF0IHR5cGljYWxseSwgd2hlbiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBiYWlscyBvdXQsIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwLCBhbmQgaXQgZG9lcyBzbyBieSBjYWxsaW5nIGBmcmVlX25ldGRldmAuIEFuZCAqdGhhdCogaXMgd2hhdCBzaG91bGQgdHJpZ2dlciBteSBgcHJpdl9kZXN0cnVjdG9yYCEgU28gYGdlbmV2ZV9mcmVlX2RldmAgc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGF0IGZhaWx1cmUgc2NlbmFyaW8sIGFuZCBmcmVlIHRoZSBkZXZpY2UuIEJ1dCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB3aGVyZSBgZ2VuZXZlX2NvbmZpZ3VyZWAgaXMgY2FsbGVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLiBXZSBoYXZlIHRvIGJlIHRob3JvdWdoIGFib3V0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NToxOS4zMjY5OTg3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUxNzc1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VuZXZlX25ld2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjMxOT1zdGF0aWMgdm9pZCBnZW5ldmVfbGlua19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzNjQtXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjM2NTpzdGF0aWMgaW50IGdlbmV2ZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjM2Ni1cXHRcXHRcXHQgIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0yNTc4PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBnZW5ldmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI1ODQtXFx0LnZhbGlkYXRlXFx0PSBnZW5ldmVfdmFsaWRhdGUsXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjU4NTpcXHQubmV3bGlua1xcdD0gZ2VuZXZlX25ld2xpbmssXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4Ni1cXHQuY2hhbmdlbGlua1xcdD0gZ2VuZXZlX2NoYW5nZWxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjE5LjQ4MjE4MDY0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzYxNzQwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRG91YmxlIEZyZWUgQ29uY2VybiBpbiBHZW5ldmUgRGV2aWNlIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgR2VuZXZlIGRldmljZSBjcmVhdGlvbiBwcm9jZXNzIGFuZCBJJ3ZlIGhpdCBhIHBvdGVudGlhbCBzbmFnLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgdGhpczogaWYgYGdlbmV2ZV9jb25maWd1cmVgIGZhaWxzLCBkb2VzIGBnZW5ldmVfbmV3bGlua2AgcHJvcGVybHkgaGFuZGxlIHRoZSBjbGVhbnVwPyBJIGtub3cgYGdlbmV2ZV9uZXdsaW5rYCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gYHJ0bmxfbmV3bGlua2AsIGFuZCBgcnRubF9uZXdsaW5rYCAqaXRzZWxmKiBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAgaWYgdGhlIGxpbmsgY3JlYXRpb24gZmFpbHMuIFxuXG5CdXQgaGVyZSdzIHRoZSBraWNrZXIsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGlmIGBnZW5ldmVfY29uZmlndXJlYCBoYXMgYWxyZWFkeSBkb25lIHNvbWUgY2xlYW51cCwgc3BlY2lmaWNhbGx5IGJ5IGNhbGxpbmcgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBleHBsaWNpdGx5IGJlZm9yZSB0aGUgZmFpbHVyZSwgYW5kICp0aGVuKiBgZnJlZV9uZXRkZXYoZGV2KWAgaXMgc3Vic2VxdWVudGx5IGNhbGxlZCBieSBgcnRubF9uZXdsaW5rYCBkdWUgdG8gdGhlIGBnZW5ldmVfbmV3bGlua2AgZmFpbHVyZSwgd2UgY291bGQgaGF2ZSBhIGRvdWJsZSBmcmVlIHNpdHVhdGlvbi4gVGhpcyBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBzb21ldGhpbmcgbGlrZSBgZ2VuZXZlLVx1MDAzZWluZm9gLCBvciB3aGF0ZXZlciByZXNvdXJjZXMgYGdlbmV2ZV9mcmVlX2RldmAgbWFuYWdlcy5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGdlbmV2ZV9mcmVlX2RldmAgdG8gdW5kZXJzdGFuZCBpdHMgb3BlcmF0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgYWN0dWFsbHkgZGVhbGluZyB3aXRoLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTU6MjMuOTU4MzU2NzEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzYwOlxcdFxcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGdlbmV2ZV9jb25maWcsIHJjdSk7XFxuMTc2MTpcXHRcXG4xNzYyOlxcdFxcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xcbjE3NjM6XFx0fVxcbjE3NjQ6XFx0XFxuMTc2NTpcXHQvKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqL1xcbjE3NjY6XFx0c3RhdGljIHZvaWQgZ2VuZXZlX2ZyZWVfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuMTc2NzpcXHR7XFxuMTc2ODpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xNzY5OlxcdFxcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGdlbmV2ZS1cXHUwMDNlY2ZnLCAxKTtcXG4xNzcwOlxcdFxcbjE3NzE6XFx0XFx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XFxuMTc3MjpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGdlbmV2ZS1cXHUwMDNlY2ZnLCBOVUxMKTtcXG4xNzczOlxcdH1cXG4xNzc0OlxcdFxcbjE3NzU6XFx0c3RhdGljIHZvaWQgZ2VuZXZlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuMTc3NjpcXHR7XFxuMTc3NzpcXHRcXHRldGhlcl9zZXR1cChkZXYpO1xcbjE3Nzg6XFx0XFxuMTc3OTpcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2Z2VuZXZlX25ldGRldl9vcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjIzLjk1ODQ4MTA3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkxNzI1NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRvdWJsZS1GcmVlIENvbmNlcm5zIGluIEdlbmV2ZSBEZXZpY2UgQ2xlYW51cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGdlbmV2ZV9mcmVlX2RldmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0IGZyZWVzIHRoZSBgY2ZnYCBzdHJ1Y3R1cmUgYW5kIHRoZW4gbnVsbHMgb3V0IGBnZW5ldmUtXHUwMDNlY2ZnYC4gU2ltcGxlIGVub3VnaC4gQnV0IHdhaXQsIHRoaXMgaXMgc2V0dGluZyBvZmYgYWxhcm0gYmVsbHMuIElmIGBnZW5ldmVfZnJlZV9kZXZgIGlzIGNhbGxlZCBleHBsaWNpdGx5ICphbmQgdGhlbiogbGF0ZXIgYGZyZWVfbmV0ZGV2YCBjYWxscyBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAsIHdoaWNoIGhhcHBlbnMgdG8gKmFsc28qIGJlIGBnZW5ldmVfZnJlZV9kZXZgLi4uIHdlIGhhdmUgYSBkb3VibGUtZnJlZSBzaXR1YXRpb24gYnJld2luZywgcmlnaHQ/IFdlJ3JlIGZyZWVpbmcgdGhlIHNhbWUgbWVtb3J5IHR3aWNlLiBUaGF0J3MgbmV2ZXIgZ29vZC5cblxuQW5kIHRoYXQgbWFrZXMgbWUgdGhpbmssIGV2ZW4gaWYgYGNmZ2AgKmlzKiBOVUxMIGluIHRoZSBzZWNvbmQgY2FsbCwgaXMgYGdlbmV2ZV9jb25maWdfZnJlZWAgc2FmZSBpZiBpdCdzIGNhbGxlZCB0d2ljZT8gSSBjYW4ndCBpbW1lZGlhdGVseSByZWNhbGwuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2VuZXZlX2NvbmZpZ19mcmVlYCB0byBiZSBzdXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgZ29pbmcgdG8gY2F1c2UgYW55IG1lbW9yeSBjb3JydXB0aW9uIGRvd24gdGhlIGxpbmUuIFdlIG5lZWQgdG8gYmUgYWlydGlnaHQgb24gdGhpcy4gVGhpcyBmZWVscyBsaWtlIGl0IGNvdWxkIGJlIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1ODcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NToyNy44NTAyMDg5MTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjYyODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmV2ZV9jb25maWdfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuYz0xNzMxPXN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqZ2VuZXZlX2NvbmZpZ19hbGxvYyhjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqc3JjKVxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc0OS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzUwOnN0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZShzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnKVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NTEte1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc1Ny1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzU4OnN0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc2MS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzYyOlxcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc2Nj1zdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NzAtXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTc3MTpcXHRnZW5ldmVfY29uZmlnX2ZyZWUoY2ZnKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzcyLVxcdFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVxcdTAwM2VjZmcsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjQwMT1zdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDI5LVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI0MzA6XFx0Y2FsbF9yY3VfaHVycnkoXFx1MDAyNm9sZF9jZmctXFx1MDAzZXJjdSwgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdSk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQzMS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI0MzMtZXJyX2ZyZWVfY2ZnOlxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI0MzQ6XFx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQzNS1cXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NToyNy45MDc0NzY0MTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0MjgzNTE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgZ2VuZXZlX2NvbmZpZ19mcmVlYCBmdW5jdGlvbjpcblxuKipBbmFseXppbmcgdGhlIGBnZW5ldmVfY29uZmlnX2ZyZWVgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBkaXNzZWN0IHRoaXMgYGdlbmV2ZV9jb25maWdfZnJlZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIHB1cnBvc2UgaXMuIEJhc2VkIG9uIHRoZSBuYW1lLCBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIGZyZWVpbmcgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYSBHZW5ldmUgY29uZmlndXJhdGlvbi4gSXTigJlzIGxpa2VseSBhIGNsZWFudXAgZnVuY3Rpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgR2VuZXZlIGlzIGxpa2VseSBhIHByb3RvY29sIGludm9sdmVkIGluIHR1bm5lbGluZyBvciBuZXR3b3JrIHZpcnR1YWxpemF0aW9uLCBzbyBmcmVlaW5nIHRoZSBjb25maWd1cmF0aW9uIHByb2JhYmx5IHByZXZlbnRzIG1lbW9yeSBsZWFrcyBhbmQgZW5zdXJlcyByZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGhhbmRsZWQgY29ycmVjdGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFydCBvZiB0aGF0IGNvbmZpZ3VyYXRpb24uIEkgZXhwZWN0IGl0IGhhbmRsZXMgYWxsb2NhdGVkIHBvaW50ZXJzIHRvIHN0cnVjdHVyZXMgY29udGFpbmluZyBkZXRhaWxzIGxpa2Ugc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3NlcywgVkxBTiBpbmZvcm1hdGlvbiwgb3IgcGVyaGFwcyBzb21lIGVuY2Fwc3VsYXRpb24gcGFyYW1ldGVycy5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCBhbnkgb3RoZXIgcmVsYXRlZCBHZW5ldmUgZnVuY3Rpb25zLiBEb2VzIGl0IGNhbGwgb3RoZXIgY2xlYW51cCBvciBkZWFsbG9jYXRpb24gcm91dGluZXM/IEFyZSB0aGVyZSBhbnkgcHJlY29uZGl0aW9ucyBpdCBleHBlY3RzLCBsaWtlIHRoZSBjb25maWd1cmF0aW9uIGJlaW5nIHByb3Blcmx5IGluaXRpYWxpemVkIG9yIHRoYXQgbm8gb3RoZXIgcHJvY2VzcyBpcyBzdGlsbCB1dGlsaXppbmcgdGhlIGNvbmZpZz8gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gSXMgaXQgc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gb24gYSBudWxsIHBvaW50ZXIsIG9yIHNob3VsZCB0aGUgY2FsbGVyIGhhbmRsZSB0aGF0IHNjZW5hcmlvPyBUaGUgc3BlY2lmaWMgZXJyb3IgY29kZXMgd291bGQgYmUgcmVhbGx5IHVzZWZ1bCB0byBtZS5cbk15IGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgaXRzIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyB0byBjb3JyZWN0bHkgdXNlIGl0IHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBzYWZlbHkgYW5kIHByZXZlbnQgZXJyb3JzLiBJIG5lZWQgdG8gZ3Jhc3AgdGhpcyBmdW5jdGlvbiBsaWtlIEkgZ3Jhc3AgYW55IG90aGVyIGNydWNpYWwgcGllY2Ugb2YgaW5mcmFzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTozMS43NTAzMTM4NjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NDUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NDU6XFx0XFx0fVxcbjE3NDY6XFx0XFxuMTc0NzpcXHRcXHRyZXR1cm4gY2ZnO1xcbjE3NDg6XFx0fVxcbjE3NDk6XFx0XFxuMTc1MDpcXHRzdGF0aWMgdm9pZCBnZW5ldmVfY29uZmlnX2ZyZWUoc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZylcXG4xNzUxOlxcdHtcXG4xNzUyOlxcdFxcdGlmIChjZmcpIHtcXG4xNzUzOlxcdFxcdFxcdGRzdF9jYWNoZV9kZXN0cm95KFxcdTAwMjZjZmctXFx1MDAzZWluZm8uZHN0X2NhY2hlKTtcXG4xNzU0OlxcdFxcdFxcdGtmcmVlKGNmZyk7XFxuMTc1NTpcXHRcXHR9XFxuMTc1NjpcXHR9XFxuMTc1NzpcXHRcXG4xNzU4OlxcdHN0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbjE3NTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTozMS43NTA0MzY1NjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMTEzNjQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdlbmV2ZSBEcml2ZXIncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBnZW5ldmVfY29uZmlnX2ZyZWVgIGlzIGRvaW5nIHRoZSByaWdodCB0aGluZywgY2hlY2tpbmcgaWYgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnRlciBgY2ZnYCBpcyBub24tTlVMTCBiZWZvcmUgZnJlZWluZyBpdC4gU21hcnQuIEFuZCBJIHNlZSB0aGF0IGBnZW5ldmVfZnJlZV9kZXZgIGV4cGxpY2l0bHkgdXNlcyBgUkNVX0lOSVRfUE9JTlRFUihnZW5ldmUtXHUwMDNlY2ZnLCBOVUxMKTtgIHRvIHNldCB0aGUgY29uZmlndXJhdGlvbiBwb2ludGVyIHRvIE5VTEwuIFRoYXQgbWVhbnMgY2FsbGluZyBgZ2VuZXZlX2ZyZWVfZGV2YCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBkZXZpY2UgaXMgcGVyZmVjdGx5IHNhZmUsIHdoaWNoIGlzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBCdXQgaG9sZCBvbi4uLiB3aHkgZGlkIHRoYXQgcGF0Y2ggaW5jbHVkZSBhIGNhbGwgdG8gYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBpbnNpZGUgYGdlbmV2ZV9jb25maWd1cmVgPyBUaGF0IHNlZW1zIHBvdGVudGlhbGx5IHJlZHVuZGFudCBvciBldmVuLi4uIHJpc2t5PyBMZXQgbWUgcXVpY2tseSByZS1leGFtaW5lIHRoZSBgZ2VuZXZlX2NvbmZpZ3VyZWAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgdGhhdCBhcmUgYmVpbmcgaW50cm9kdWNlZCBvciBpbmFkdmVydGVudGx5IHJlc29sdmVkIGJ5IHRoYXQgYWRkaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNzMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTozNS40ODE1ODAyNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5ODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTgwOlxcdH1cXG4xOTgxOlxcdFxcbjE5ODI6XFx0c3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4xOTgzOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuMTk4NDpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZylcXG4xOTg1OlxcdHtcXG4xOTg2OlxcdFxcdHN0cnVjdCBnZW5ldmVfbmV0ICpnbiA9IG5ldF9nZW5lcmljKG5ldCwgZ2VuZXZlX25ldF9pZCk7XFxuMTk4NzpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqdCwgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XFxuMTk4ODpcXHRcXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvO1xcbjE5ODk6XFx0XFx0Ym9vbCB0dW5fY29sbGVjdF9tZCwgdHVuX29uX3NhbWVfcG9ydDtcXG4xOTkwOlxcdFxcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpuZXdfY2ZnO1xcbjE5OTE6XFx0XFx0aW50IGVyciwgZW5jYXBfbGVuO1xcbjE5OTI6XFx0XFxuMTk5MzpcXHRcXHRpZiAoY2ZnLVxcdTAwM2Vjb2xsZWN0X21kIFxcdTAwMjZcXHUwMDI2ICFpc190bmxfaW5mb196ZXJvKGluZm8pKSB7XFxuMTk5NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuMTk5NTpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkRldmljZSBpcyBleHRlcm5hbGx5IGNvbnRyb2xsZWQsIHNvIGF0dHJpYnV0ZXMgKFZOSSwgUG9ydCwgYW5kIHNvIG9uKSBtdXN0IG5vdCBiZSBzcGVjaWZpZWRcXFwiKTtcXG4xOTk2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE5OTc6XFx0XFx0fVxcbjE5OTg6XFx0XFxuMTk5OTpcXHRcXHRnZW5ldmUtXFx1MDAzZW5ldCA9IG5ldDtcXG4yMDAwOlxcdFxcdGdlbmV2ZS1cXHUwMDNlZGV2ID0gZGV2O1xcbjIwMDE6XFx0XFxuMjAwMjpcXHRcXHR0ID0gZ2VuZXZlX2ZpbmRfZGV2KGduLCBjZmcsIGluZm8sIFxcdTAwMjZ0dW5fb25fc2FtZV9wb3J0LCBcXHUwMDI2dHVuX2NvbGxlY3RfbWQpO1xcbjIwMDM6XFx0XFx0aWYgKHQpXFxuMjAwNDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjIwMDU6XFx0XFxuMjAwNjpcXHRcXHQvKiBtYWtlIGVub3VnaCBoZWFkcm9vbSBmb3IgYmFzaWMgc2NlbmFyaW8gKi9cXG4yMDA3OlxcdFxcdGVuY2FwX2xlbiA9IEdFTkVWRV9CQVNFX0hMRU4gKyBFVEhfSExFTjtcXG4yMDA4OlxcdFxcdGlmICghY2ZnLVxcdTAwM2Vjb2xsZWN0X21kIFxcdTAwMjZcXHUwMDI2IGlwX3R1bm5lbF9pbmZvX2FmKGluZm8pID09IEFGX0lORVQpIHtcXG4yMDA5OlxcdFxcdFxcdGVuY2FwX2xlbiArPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcXG4yMDEwOlxcdFxcdFxcdGRldi1cXHUwMDNlbWF4X210dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcXG4yMDExOlxcdFxcdH0gZWxzZSB7XFxuMjAxMjpcXHRcXHRcXHRlbmNhcF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4yMDEzOlxcdFxcdFxcdGRldi1cXHUwMDNlbWF4X210dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xcbjIwMTQ6XFx0XFx0fVxcbjIwMTU6XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBlbmNhcF9sZW4gKyBFVEhfSExFTjtcXG4yMDE2OlxcdFxcbjIwMTc6XFx0XFx0aWYgKGNmZy1cXHUwMDNlY29sbGVjdF9tZCkge1xcbjIwMTg6XFx0XFx0XFx0aWYgKHR1bl9vbl9zYW1lX3BvcnQpIHtcXG4yMDE5OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4yMDIwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiVGhlcmUgY2FuIGJlIG9ubHkgb25lIGV4dGVybmFsbHkgY29udHJvbGxlZCBkZXZpY2Ugb24gYSBkZXN0aW5hdGlvbiBwb3J0IGFuZCBhIHNvdXJjZSBhZGRyZXNzXFxcIik7XFxuMjAyMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjIwMjI6XFx0XFx0XFx0fVxcbjIwMjM6XFx0XFx0fSBlbHNlIHtcXG4yMDI0OlxcdFxcdFxcdGlmICh0dW5fY29sbGVjdF9tZCkge1xcbjIwMjU6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjIwMjY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJUaGVyZSBhbHJlYWR5IGV4aXN0cyBhbiBleHRlcm5hbGx5IGNvbnRyb2xsZWQgZGV2aWNlIG9uIHRoaXMgZGVzdGluYXRpb24gcG9ydCBhbmQgdGhlIHNvdXJjZSBhZGRyZXNzXFxcIik7XFxuMjAyNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjIwMjg6XFx0XFx0XFx0fVxcbjIwMjk6XFx0XFx0fVxcbjIwMzA6XFx0XFxuMjAzMTpcXHRcXHRuZXdfY2ZnID0gZ2VuZXZlX2NvbmZpZ19hbGxvYyhjZmcpO1xcbjIwMzI6XFx0XFx0aWYgKElTX0VSUihuZXdfY2ZnKSlcXG4yMDMzOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG5ld19jZmcpO1xcbjIwMzQ6XFx0XFxuMjAzNTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVxcdTAwM2VjZmcsIG5ld19jZmcpO1xcbjIwMzY6XFx0XFxuMjAzNzpcXHRcXHRpZiAoY2ZnLVxcdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSB7XFxuMjAzODpcXHRcXHRcXHRkZXYtXFx1MDAzZWhlYWRlcl9vcHMgPSBOVUxMO1xcbjIwMzk6XFx0XFx0XFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XFxuMjA0MDpcXHRcXHRcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IDA7XFxuMjA0MTpcXHRcXHRcXHRkZXYtXFx1MDAzZWFkZHJfbGVuID0gMDtcXG4yMDQyOlxcdFxcdFxcdGRldi1cXHUwMDNlZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7XFxuMjA0MzpcXHRcXHR9XFxuMjA0NDpcXHRcXG4yMDQ1OlxcdFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xcbjIwNDY6XFx0XFx0aWYgKGVycikge1xcbjIwNDc6XFx0XFx0XFx0Z2VuZXZlX2ZyZWVfZGV2KGRldik7XFxuMjA0ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIwNDk6XFx0XFx0fVxcbjIwNTA6XFx0XFxuMjA1MTpcXHRcXHRsaXN0X2FkZChcXHUwMDI2Z2VuZXZlLVxcdTAwM2VuZXh0LCBcXHUwMDI2Z24tXFx1MDAzZWdlbmV2ZV9saXN0KTtcXG4yMDUyOlxcdFxcdHJldHVybiAwO1xcbjIwNTM6XFx0fVxcbjIwNTQ6XFx0XFxuMjA1NTpcXHRzdGF0aWMgdm9pZCBpbml0X3RubF9pbmZvKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbywgX191MTYgZHN0X3BvcnQpXFxuMjA1NjpcXHR7XFxuMjA1NzpcXHRcXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XFxuMjA1ODpcXHRcXHRpbmZvLVxcdTAwM2VrZXkudHBfZHN0ID0gaHRvbnMoZHN0X3BvcnQpO1xcbjIwNTk6XFx0fVxcbjIwNjA6XFx0XFxuMjA2MTpcXHRzdGF0aWMgaW50IGdlbmV2ZV9ubDJpbmZvKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4yMDYyOlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbjIwNjM6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGNoYW5nZWxpbmspXFxuMjA2NDpcXHR7XFxuMjA2NTpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvO1xcbjIwNjY6XFx0XFx0aW50IGF0dHJ0eXBlO1xcbjIwNjc6XFx0XFxuMjA2ODpcXHRcXHRpZiAoZGF0YVtJRkxBX0dFTkVWRV9DT0xMRUNUX01FVEFEQVRBXSkge1xcbjIwNjk6XFx0XFx0XFx0aWYgKGNoYW5nZWxpbmspIHtcXG4yMDcwOlxcdFxcdFxcdFxcdGF0dHJ0eXBlID0gSUZMQV9HRU5FVkVfQ09MTEVDVF9NRVRBREFUQTtcXG4yMDcxOlxcdFxcdFxcdFxcdGdvdG8gY2hhbmdlX25vdHN1cDtcXG4yMDcyOlxcdFxcdFxcdH1cXG4yMDczOlxcdFxcbjIwNzQ6XFx0XFx0XFx0Y2ZnLVxcdTAwM2Vjb2xsZWN0X21kID0gdHJ1ZTtcXG4yMDc1OlxcdFxcdFxcdGNmZy1cXHUwMDNlZHVhbHN0YWNrID0gdHJ1ZTtcXG4yMDc2OlxcdFxcdH1cXG4yMDc3OlxcdFxcbjIwNzg6XFx0XFx0aWYgKChkYXRhW0lGTEFfR0VORVZFX0xPQ0FMXSB8fCBkYXRhW0lGTEFfR0VORVZFX1JFTU9URV0pIFxcdTAwMjZcXHUwMDI2XFxuMjA3OTpcXHRcXHQgICAgKGRhdGFbSUZMQV9HRU5FVkVfTE9DQUw2XSB8fCBkYXRhW0lGTEFfR0VORVZFX1JFTU9URTZdKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTozNS40ODE3OTE1MjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMjc4Mzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCB0aGUgY3J1eCBvZiB0aGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuXG5cbioqSGFuZGxpbmcgTmV0d29yayBEZXZpY2UgUmVnaXN0cmF0aW9uIEZhaWx1cmUqKlxuXG5TbywgaWYgYHJlZ2lzdGVyX25ldGRldmljZWAgYml0ZXMgdGhlIGR1c3QsIHRoZSBmdW5jdGlvbiBgZ2VuZXZlX2NvbmZpZ3VyZWAgaW1tZWRpYXRlbHkgcmV0dXJucyBhbiBlcnJvci4gTm8gc3VycHJpc2VzIHRoZXJlOyB0aGF0J3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGZhaWx1cmUgc2NlbmFyaW8gY29tcGxldGVseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIHRoaXMgZXJyb3Igb3JpZ2luYXRlcywgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgZ2VuZXZlX2Rldl9jcmVhdGVfZmJgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHNlZSBleGFjdGx5IGhvdyBhbmQgd2h5IGBnZW5ldmVfY29uZmlndXJlYCBpcyBiZWluZyBzdG9wcGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgY2F1c2luZyB0aGF0IGluaXRpYWwgcmVnaXN0cmF0aW9uIHRvIGZhbHRlciBhbmQgcHJvcGFnYXRlIHRoZSBlcnJvciB0aHJvdWdoIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjM4Ljc4NDU3ODkwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU5MixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU5MjpcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZ2VuZXZlX2Rldl9jcmVhdGVfZmIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbjI1OTM6XFx0XFx0XFx0XFx0XFx0XFx0dTggbmFtZV9hc3NpZ25fdHlwZSwgdTE2IGRzdF9wb3J0KVxcbjI1OTQ6XFx0e1xcbjI1OTU6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9NQVggKyAxXTtcXG4yNTk2OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuMjU5NzpcXHRcXHRMSVNUX0hFQUQobGlzdF9raWxsKTtcXG4yNTk4OlxcdFxcdGludCBlcnI7XFxuMjU5OTpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBjZmcgPSB7XFxuMjYwMDpcXHRcXHRcXHQuZGYgPSBHRU5FVkVfREZfVU5TRVQsXFxuMjYwMTpcXHRcXHRcXHQudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gdHJ1ZSxcXG4yNjAyOlxcdFxcdFxcdC50dGxfaW5oZXJpdCA9IGZhbHNlLFxcbjI2MDM6XFx0XFx0XFx0LmNvbGxlY3RfbWQgPSB0cnVlLFxcbjI2MDQ6XFx0XFx0XFx0LmR1YWxzdGFjayA9IHRydWUsXFxuMjYwNTpcXHRcXHRcXHQucG9ydF9taW4gPSAxLFxcbjI2MDY6XFx0XFx0XFx0LnBvcnRfbWF4ID0gVVNIUlRfTUFYLFxcbjI2MDc6XFx0XFx0fTtcXG4yNjA4OlxcdFxcbjI2MDk6XFx0XFx0bWVtc2V0KHRiLCAwLCBzaXplb2YodGIpKTtcXG4yNjEwOlxcdFxcdGRldiA9IHJ0bmxfY3JlYXRlX2xpbmsobmV0LCBuYW1lLCBuYW1lX2Fzc2lnbl90eXBlLFxcbjI2MTE6XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZnZW5ldmVfbGlua19vcHMsIHRiLCBOVUxMKTtcXG4yNjEyOlxcdFxcdGlmIChJU19FUlIoZGV2KSlcXG4yNjEzOlxcdFxcdFxcdHJldHVybiBkZXY7XFxuMjYxNDpcXHRcXG4yNjE1OlxcdFxcdGluaXRfdG5sX2luZm8oXFx1MDAyNmNmZy5pbmZvLCBkc3RfcG9ydCk7XFxuMjYxNjpcXHRcXHRlcnIgPSBnZW5ldmVfY29uZmlndXJlKG5ldCwgZGV2LCBOVUxMLCBcXHUwMDI2Y2ZnKTtcXG4yNjE3OlxcdFxcdGlmIChlcnIpIHtcXG4yNjE4OlxcdFxcdFxcdGZyZWVfbmV0ZGV2KGRldik7XFxuMjYxOTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjI2MjA6XFx0XFx0fVxcbjI2MjE6XFx0XFxuMjYyMjpcXHRcXHQvKiBvcGVudnN3aXRjaCB1c2VycyBleHBlY3QgcGFja2V0IHNpemVzIHRvIGJlIHVucmVzdHJpY3RlZCxcXG4yNjIzOlxcdFxcdCAqIHNvIHNldCB0aGUgbGFyZ2VzdCBNVFUgd2UgY2FuLlxcbjI2MjQ6XFx0XFx0ICovXFxuMjYyNTpcXHRcXHRlcnIgPSBnZW5ldmVfY2hhbmdlX210dShkZXYsIElQX01BWF9NVFUpO1xcbjI2MjY6XFx0XFx0aWYgKGVycilcXG4yNjI3OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjI2Mjg6XFx0XFxuMjYyOTpcXHRcXHRlcnIgPSBydG5sX2NvbmZpZ3VyZV9saW5rKGRldiwgTlVMTCwgMCwgTlVMTCk7XFxuMjYzMDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4yNjMxOlxcdFxcdFxcdGdvdG8gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTozOC43ODQ4NjAxODRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkxNzA2MzQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdlbmV2ZSBEZXZpY2UgTGlmZWN5Y2xlIGFuZCBSZXNvdXJjZSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZ2VuZXZlX2Rldl9jcmVhdGVfZmJgLCBpZiBgZ2VuZXZlX2NvbmZpZ3VyZWAgZmFpbHMsIHRoZSBjb2RlIGNhbGxzIGBmcmVlX25ldGRldihkZXYpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogXCJXYWl0LCBgZnJlZV9uZXRkZXZgIHdpbGwgY2FsbCBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAsIHdoaWNoIGlzIGBnZW5ldmVfZnJlZV9kZXZgLlwiIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZDogYGdlbmV2ZV9jb25maWd1cmVgICppdHNlbGYqIGNhbGxzIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgZGlyZWN0bHkgKmJlZm9yZSogYGZyZWVfbmV0ZGV2YCBwb3RlbnRpYWxseSBjYWxscyBpdCBhZ2Fpbi4gSXMgdGhhdCBkb3VibGUtZnJlZSBzYWZlPyBZZXMsIGJlY2F1c2UgYGdlbmV2ZV9mcmVlX2RldmAgc2V0cyBgZ2VuZXZlLVx1MDAzZWNmZ2AgdG8gTlVMTCwgc28gdGhlIHNlY29uZCBjYWxsIGlzIGhhcm1sZXNzLlxuXG5Ob3csIHdoeSB3YXMgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBldmVuIGFkZGVkIGluIGBnZW5ldmVfY29uZmlndXJlYD8gVGhlIHJlYXNvbiBtdXN0IGJlIHJlbGF0ZWQgdG8gZmFpbHVyZXMgaW4gdGhlIGRldmljZSBjcmVhdGlvbiBwcm9jZXNzLiBJIGZpZ3VyZWQgaXQgb3V0Li4uIElmIGByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KWAgZmFpbHMsIGBmcmVlX25ldGRldihkZXYpYCBpcyBjYWxsZWQuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGNvdWxkIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGl0c2VsZiBjYWxsIGBmcmVlX25ldGRldmAgb24gZmFpbHVyZT8gTm8sIGl0IGRvZXNuJ3QuXG5cbk5vdywgaWYgYGdlbmV2ZV9jb25maWd1cmVgIGlzIGNhbGxlZCBmcm9tIGBnZW5ldmVfbmV3bGlua2A6IEkga25vdyB0aGF0IGBnZW5ldmVfbmV3bGlua2AgaXMgaXRzZWxmIGNhbGxlZCBieSBgcnRubF9uZXdsaW5rYC4gSWYgYG5ld2xpbmtgIGZhaWxzLCBgcnRubF9uZXdsaW5rYCBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAuIEkgbmVlZCB0byBiZSBzdXJlLiBJZiBgZnJlZV9uZXRkZXYoZGV2KWAgaXMgY2FsbGVkLCBpdCB3aWxsIGNhbGwgYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgc2V0IHVwIGNvcnJlY3RseS4gTm93LCBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAgaXMgYXNzaWduZWQgaW4gYGdlbmV2ZV9zZXR1cGAuXG5cblNwZWNpZmljYWxseSwgYGdlbmV2ZV9zZXR1cGAgc2V0cyBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IGdlbmV2ZV9mcmVlX2RldjtgIGFuZCBgZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtgLiBTbywgaWYgYHJlZ2lzdGVyX25ldGRldmljZWAgZmFpbHMsIGBkZXYtXHUwMDNlcmVnX3N0YXRlYCBpcyBgTkVUUkVHX1VOSU5JVElBTElaRURgLiBXaGVuIGBmcmVlX25ldGRldmAgaXMgY2FsbGVkLCBpdCBjaGVja3MgYGRldi1cdTAwM2VyZWdfc3RhdGVgLiBJZiBgZGV2LVx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5JTklUSUFMSVpFRGAsIGl0IGNhbGxzIGBkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yKGRldilgLiBUaGlzIGhhbmRsZXMgdGhlIGxpZmVjeWNsZSBjb3JyZWN0bHkuXG5cbk9rYXksIHNvIGlmIGBkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yYCBpcyBjYWxsZWQsIGl0IHdpbGwgZnJlZSBgZ2VuZXZlLVx1MDAzZWNmZ2AuIFdlIGFyZSBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQuIEJ1dCBub3cgSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmc6IHNvIHdoeSBkaWQgdGhlIHBhdGNoIGFkZCBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGluIGBnZW5ldmVfY29uZmlndXJlYD8gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgZ2VuZXZlX2NvbmZpZ3VyZWAgYWxsb2NhdGVzIGBuZXdfY2ZnYCBhbmQgYXNzaWducyBpdCB0byBgZ2VuZXZlLVx1MDAzZWNmZ2AuIElmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzLCBgZ2VuZXZlLVx1MDAzZWNmZ2AgKmNvdWxkKiBiZSBzZXQgdG8gYSB2YWxpZCBhZGRyZXNzLiBJZiBgZ2VuZXZlX2NvbmZpZ3VyZWAgaXMgY2FsbGVkIGZyb20gYGdlbmV2ZV9uZXdsaW5rYCwgYW5kIGl0IGZhaWxzLCBgcnRubF9uZXdsaW5rYCB3aWxsIGNhbGwgYGZyZWVfbmV0ZGV2KGRldilgLiBUaGF0J3MgdGhlIGtleS4gSWYgYHJ0bmxfbmV3bGlua2AgY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgLCBpdCB3aWxsIGNhbGwgYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgLCB3aGljaCBpcyBgZ2VuZXZlX2ZyZWVfZGV2YCwgd2hpY2ggd2lsbCBmcmVlIGBnZW5ldmUtXHUwMDNlY2ZnYC4gVGhpcyBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgdGhlIGNvbmZpZyBzdHJ1Y3QuIE5vdyBJIHNlZSB0aGF0IGBnZW5ldmVfZnJlZV9kZXZgIGlzIG5lZWRlZC4gTm93IEkgc2hvdWxkIGNoZWNrIGBydG5sX25ld2xpbmtgIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTo0OC43MDE5MjY2MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzE4MDg2OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRubF9uZXdsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTM4MTQ9RVhQT1JUX1NZTUJPTChydG5sX2NyZWF0ZV9saW5rKTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zODE1LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjM4MTY6c3RydWN0IHJ0bmxfbmV3bGlua190YnMge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM4MTctXFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9NQVggKyAxXTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTM4MjM9c3RhdGljIGludCBydG5sX2NoYW5nZWxpbmsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zODI1LVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKnRndF9uZXQsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzgyNjpcXHRcXHRcXHQgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3RicyAqdGJzLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM4MjctXFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqKmRhdGEsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zODg4PXN0YXRpYyBpbnQgcnRubF9ncm91cF9jaGFuZ2VsaW5rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zOTA3LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjM5MDg6c3RhdGljIGludCBydG5sX25ld2xpbmtfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZmluZm9tc2cgKmlmbSxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zOTA5LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzkxNi1cXHR1bnNpZ25lZCBjaGFyIG5hbWVfYXNzaWduX3R5cGUgPSBORVRfTkFNRV9VU0VSO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjM5MTc6XFx0c3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgcGFyYW1zID0ge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5MTgtXFx0XFx0LnNyY19uZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKSxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTM5ODI9c3RhdGljIHN0cnVjdCBuZXQgKnJ0bmxfZ2V0X3BlZXJfbmV0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDE5LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQwMjA6c3RhdGljIGludCBfX3J0bmxfbmV3bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDIxLVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwMjMtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ICpwZWVyX25ldCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MDI0OlxcdFxcdFxcdCAgc3RydWN0IHJ0bmxfbmV3bGlua190YnMgKnRicyxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDI1LVxcdFxcdFxcdCAgc3RydWN0IG5sYXR0ciAqKmRhdGEsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDc3LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQwNzg6XFx0cmV0dXJuIHJ0bmxfbmV3bGlua19jcmVhdGUoc2tiLCBpZm0sIG9wcywgdGd0X25ldCwgbGlua19uZXQsIHBlZXJfbmV0LCBubGgsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDA3OS1cXHRcXHRcXHRcXHQgICB0YiwgZGF0YSwgZXh0YWNrKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwODEtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDA4MjpzdGF0aWMgaW50IHJ0bmxfbmV3bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDgzLVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwODctXFx0c3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyA9IE5VTEw7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDA4ODpcXHRzdHJ1Y3QgcnRubF9uZXdsaW5rX3RicyAqdGJzO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwODktXFx0c3RydWN0IHJ0bmxfbmV0cyBydG5sX25ldHM7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MTk0LVxcdHJ0bmxfbmV0c19sb2NrKFxcdTAwMjZydG5sX25ldHMpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQxOTU6XFx0cmV0ID0gX19ydG5sX25ld2xpbmsoc2tiLCBubGgsIG9wcywgdGd0X25ldCwgbGlua19uZXQsIHBlZXJfbmV0LCB0YnMsIGRhdGEsIGV4dGFjayk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDE5Ni1cXHRydG5sX25ldHNfdW5sb2NrKFxcdTAwMjZydG5sX25ldHMpO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDQwMj1zdGF0aWMgaW50IHJ0bmxfbGlua3Byb3AoaW50IGNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NDQ5LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ0NTA6c3RhdGljIGludCBydG5sX25ld2xpbmtwcm9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ0NTEtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTcyMTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjcyMTU6XFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTkssIC5kb2l0ID0gcnRubF9uZXdsaW5rLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyMTYtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjMxLVxcdHsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzIzMjpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzIzMy1cXHR7Lm1zZ3R5cGUgPSBSVE1fREVMTElOS1BST1AsIC5kb2l0ID0gcnRubF9kZWxsaW5rcHJvcH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjQ5Ljc3Mzc0MTQ3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzMTI4MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgcnRubF9uZXdsaW5rX2NyZWF0ZWAqKlxuXG5Pa2F5LCBzbyB0aGUgbWVudGFsIGZvY3VzIGhlcmUgaXMgdG8gZXhhbWluZSB0aGUgYHJ0bmxfbmV3bGlua19jcmVhdGVgIGZ1bmN0aW9uLiBJIGltbWVkaWF0ZWx5IGtub3cgdGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIG5ldyBuZXR3b3JrIGxpbmtzIHZpYSB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZS4gVGhlIGNob2ljZSBvZiBgcnRubF9uZXdsaW5rX2NyZWF0ZWAgZnJvbSB0aGUgYG5ldC9jb3JlL3J0bmV0bGluay5jYCBmaWxlIGlzIHRlbGxpbmc7IGl0IHNpZ25hbHMgYSBkZXNpcmUgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBtZWNoYW5pc20gZm9yIGJyaW5naW5nIHVwIGEgbmV3IGludGVyZmFjZSwgbGlrZWx5IHRvIHRyb3VibGVzaG9vdCBvciBhbmFseXplIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGNvbXBvbmVudHMuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBkYXRhIHBhcnNpbmcsIHZhbGlkYXRpb24sIGFuZCB1bHRpbWF0ZWx5LCB0aGUgZGV2aWNlIGRyaXZlciBpbnRlcmFjdGlvbiB0aGF0IHRha2VzIHBsYWNlLiBMZXQncyBzZWUgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQsIGVycm9yIGNvbmRpdGlvbnMsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJ20ga2VlbiB0byBzZWUgaWYgYW55IG5ldyBidWdzIGhhdmUgY3JlcHQgaW4gcmVjZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzIzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTU6NTIuNzk2ODcyNDc3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Njk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTA4LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTA4OlxcdHN0YXRpYyBpbnQgcnRubF9uZXdsaW5rX2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWZpbmZvbXNnICppZm0sXFxuMzkwOTpcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyxcXG4zOTEwOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0ICp0Z3RfbmV0LCBzdHJ1Y3QgbmV0ICpsaW5rX25ldCxcXG4zOTExOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0ICpwZWVyX25ldCxcXG4zOTEyOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4zOTEzOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKipkYXRhLFxcbjM5MTQ6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4zOTE1OlxcdHtcXG4zOTE2OlxcdFxcdHVuc2lnbmVkIGNoYXIgbmFtZV9hc3NpZ25fdHlwZSA9IE5FVF9OQU1FX1VTRVI7XFxuMzkxNzpcXHRcXHRzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyBwYXJhbXMgPSB7XFxuMzkxODpcXHRcXHRcXHQuc3JjX25ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLFxcbjM5MTk6XFx0XFx0XFx0LmxpbmtfbmV0ID0gbGlua19uZXQsXFxuMzkyMDpcXHRcXHRcXHQucGVlcl9uZXQgPSBwZWVyX25ldCxcXG4zOTIxOlxcdFxcdFxcdC50YiA9IHRiLFxcbjM5MjI6XFx0XFx0XFx0LmRhdGEgPSBkYXRhLFxcbjM5MjM6XFx0XFx0fTtcXG4zOTI0OlxcdFxcdHUzMiBwb3J0aWQgPSBORVRMSU5LX0NCKHNrYikucG9ydGlkO1xcbjM5MjU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4zOTI2OlxcdFxcdGNoYXIgaWZuYW1lW0lGTkFNU0laXTtcXG4zOTI3OlxcdFxcdGludCBlcnI7XFxuMzkyODpcXHRcXG4zOTI5OlxcdFxcdGlmICghb3BzLVxcdTAwM2VhbGxvYyBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VzZXR1cClcXG4zOTMwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4zOTMxOlxcdFxcbjM5MzI6XFx0XFx0aWYgKHRiW0lGTEFfSUZOQU1FXSkge1xcbjM5MzM6XFx0XFx0XFx0bmxhX3N0cnNjcHkoaWZuYW1lLCB0YltJRkxBX0lGTkFNRV0sIElGTkFNU0laKTtcXG4zOTM0OlxcdFxcdH0gZWxzZSB7XFxuMzkzNTpcXHRcXHRcXHRzbnByaW50ZihpZm5hbWUsIElGTkFNU0laLCBcXFwiJXMlJWRcXFwiLCBvcHMtXFx1MDAzZWtpbmQpO1xcbjM5MzY6XFx0XFx0XFx0bmFtZV9hc3NpZ25fdHlwZSA9IE5FVF9OQU1FX0VOVU07XFxuMzkzNzpcXHRcXHR9XFxuMzkzODpcXHRcXG4zOTM5OlxcdFxcdGRldiA9IHJ0bmxfY3JlYXRlX2xpbmsodGd0X25ldCwgaWZuYW1lLCBuYW1lX2Fzc2lnbl90eXBlLCBvcHMsIHRiLFxcbjM5NDA6XFx0XFx0XFx0XFx0ICAgICAgIGV4dGFjayk7XFxuMzk0MTpcXHRcXHRpZiAoSVNfRVJSKGRldikpIHtcXG4zOTQyOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoZGV2KTtcXG4zOTQzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjM5NDQ6XFx0XFx0fVxcbjM5NDU6XFx0XFxuMzk0NjpcXHRcXHRkZXYtXFx1MDAzZWlmaW5kZXggPSBpZm0tXFx1MDAzZWlmaV9pbmRleDtcXG4zOTQ3OlxcdFxcbjM5NDg6XFx0XFx0aWYgKG9wcy1cXHUwMDNlbmV3bGluaylcXG4zOTQ5OlxcdFxcdFxcdGVyciA9IG9wcy1cXHUwMDNlbmV3bGluayhkZXYsIFxcdTAwMjZwYXJhbXMsIGV4dGFjayk7XFxuMzk1MDpcXHRcXHRlbHNlXFxuMzk1MTpcXHRcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4zOTUyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzk1MzpcXHRcXHRcXHRmcmVlX25ldGRldihkZXYpO1xcbjM5NTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzk1NTpcXHRcXHR9XFxuMzk1NjpcXHRcXG4zOTU3OlxcdFxcdGVyciA9IHJ0bmxfY29uZmlndXJlX2xpbmsoZGV2LCBpZm0sIHBvcnRpZCwgbmxoKTtcXG4zOTU4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjM5NTk6XFx0XFx0XFx0Z290byBvdXRfdW5yZWdpc3RlcjtcXG4zOTYwOlxcdFxcdGlmICh0YltJRkxBX01BU1RFUl0pIHtcXG4zOTYxOlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbjM5NjI6XFx0XFx0XFx0ZXJyID0gZG9fc2V0X21hc3RlcihkZXYsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTUFTVEVSXSksIGV4dGFjayk7XFxuMzk2MzpcXHRcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbjM5NjQ6XFx0XFx0XFx0aWYgKGVycilcXG4zOTY1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VucmVnaXN0ZXI7XFxuMzk2NjpcXHRcXHR9XFxuMzk2NzpcXHRcXG4zOTY4OlxcdG91dDpcXG4zOTY5OlxcdFxcdHJldHVybiBlcnI7XFxuMzk3MDpcXHRvdXRfdW5yZWdpc3RlcjpcXG4zOTcxOlxcdFxcdGlmIChvcHMtXFx1MDAzZW5ld2xpbmspIHtcXG4zOTcyOlxcdFxcdFxcdExJU1RfSEVBRChsaXN0X2tpbGwpO1xcbjM5NzM6XFx0XFxuMzk3NDpcXHRcXHRcXHRvcHMtXFx1MDAzZWRlbGxpbmsoZGV2LCBcXHUwMDI2bGlzdF9raWxsKTtcXG4zOTc1OlxcdFxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXFx1MDAyNmxpc3Rfa2lsbCk7XFxuMzk3NjpcXHRcXHR9IGVsc2Uge1xcbjM5Nzc6XFx0XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTU6NTIuNzk3MTUyNTQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzgwODE2ODQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipHZW5ldmUgRGV2aWNlIENyZWF0aW9uIGFuZCBDbGVhbnVwOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgR2VuZXZlIGRldmljZXMgYXJlIGNyZWF0ZWQgYW5kIHN1YnNlcXVlbnRseSBjbGVhbmVkIHVwIGluIHRoZSBmYWNlIG9mIGVycm9ycy4gUmlnaHQsIHNvIGBydG5sX25ld2xpbmtfY3JlYXRlYCBjYWxscyB0aGUgYG5ld2xpbmtgIG9wZXJhdGlvbiwgd2hpY2ggaW4gb3VyIGNhc2UgaXMgYGdlbmV2ZV9uZXdsaW5rYC4gSWYgYGdlbmV2ZV9uZXdsaW5rYCBydW5zIGludG8gdHJvdWJsZSwgaXQgcmV0dXJucyBhbiBlcnJvciBhbmQgdGhlIGtlcm5lbCBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIElmIGBnZW5ldmVfY29uZmlndXJlYCBmYWlscywgaXQgY2FsbHMgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBkaXJlY3RseSBhbmQgcmV0dXJucyBhbiBlcnJvci4gVGhpcyBwcm9wYWdhdGVzIHVwIHRvIGBnZW5ldmVfbmV3bGlua2AsIHdoaWNoIHRoZW4gYWxzbyByZXR1cm5zIGFuIGVycm9yLCBhbmQgZmluYWxseSBgcnRubF9uZXdsaW5rX2NyZWF0ZWAgY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgLiBTbywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUgZmFpbHVyZSBpcywgYGZyZWVfbmV0ZGV2KGRldilgIGdldHMgY2FsbGVkIGV2ZW50dWFsbHkuXG5cbmBmcmVlX25ldGRldihkZXYpYCB0aGVuIGNhbGxzIGBkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yKGRldilgLCB3aGljaCBpbiBvdXIgY2FzZSAqaXMqIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAuIEJ1dCB3YWl0LCBkb2VzIHRoaXMgbWVhbiBgZ2VuZXZlX2ZyZWVfZGV2YCBjb3VsZCBiZSBjYWxsZWQgdHdpY2UgaW4gc29tZSBzY2VuYXJpb3M/IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBzYWZlLlxuXG5BaCwgSSBzZWUhIGBnZW5ldmVfZnJlZV9kZXZgIHVzZXMgYFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVx1MDAzZWNmZywgTlVMTCk7YCBhbmQgYGdlbmV2ZV9jb25maWdfZnJlZWAgY2hlY2tzIGZvciBOVUxMLiBUaGF0IHNob3VsZCBwcmV2ZW50IGFueSBkb3VibGUtZnJlZSBpc3N1ZXMsIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cblxuQnV0ICp3aHkqIHdhcyBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGFkZGVkIGluIGBnZW5ldmVfY29uZmlndXJlYCBpbiB0aGUgZmlyc3QgcGxhY2U/IExldCBtZSByZXRyYWNlIG15IHN0ZXBzLiBPaCwgcmlnaHQsIGBnZW5ldmVfY29uZmlndXJlYCB1c2VzIGByY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVx1MDAzZWNmZywgbmV3X2NmZyk7YCBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIGZhaWxzLCBgZ2VuZXZlX2NvbmZpZ3VyZWAgcmV0dXJucyBhbiBlcnJvci4gSWYgd2UgY2FsbCBpdCBmcm9tIGBnZW5ldmVfZGV2X2NyZWF0ZV9mYmAsIGl0IGFsc28gY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgIG9uIGVycm9yLiBTbyB0aGUgbmV0IGVmZmVjdCBpcywgaW4gZWl0aGVyIGVycm9yIHBhdGggYGZyZWVfbmV0ZGV2KGRldilgIGdldHMgY2FsbGVkLiBUaGlzIG1lYW5zIHRoYXQgKnJlZ2FyZGxlc3MqIG9mIHdoZXRoZXIgdGhlIGVycm9yIG9yaWdpbmF0ZXMgZHVyaW5nIGNvbmZpZ3VyYXRpb24gb3IgZHVyaW5nIHRoZSBpbml0aWFsIGRldmljZSBzZXR1cCwgd2UncmUgZ3VhcmFudGVlZCB0byBmcmVlIHRoZSBkZXZpY2UgY29ycmVjdGx5LlxuXG5Pa2F5LCBzbyBgZnJlZV9uZXRkZXYoZGV2KWAgY2FsbHMgYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgLCB3aGljaCBpcyBgZ2VuZXZlX2ZyZWVfZGV2YC4gQWxyaWdodCwgSSB0aGluayBJJ3ZlIGdvdCBpdC4gSSBuZWVkIHRvIHJldmlzaXQgYGdlbmV2ZV9mcmVlX2RldmAgbm93LCBhbmQgbWFrZSBzdXJlIHRoYXQgYW55IFJDVSBpc3N1ZXMgYXJlIGFjY291bnRlZCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTc6NDYuNjA1MzI0NjU1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzY1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzY1OlxcdC8qIEluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovXFxuMTc2NjpcXHRzdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xNzY3OlxcdHtcXG4xNzY4OlxcdFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjE3Njk6XFx0XFx0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2VuZXZlLVxcdTAwM2VjZmcsIDEpO1xcbjE3NzA6XFx0XFxuMTc3MTpcXHRcXHRnZW5ldmVfY29uZmlnX2ZyZWUoY2ZnKTtcXG4xNzcyOlxcdFxcdFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVxcdTAwM2VjZmcsIE5VTEwpO1xcbjE3NzM6XFx0fVxcbjE3NzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU3OjQ2LjYwNTQ2MDYwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzEzMzMxNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkdlbmV2ZSBEZXZpY2UgTGlmZWN5Y2xlIC0gQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEdlbmV2ZSBkZXZpY2UgZHJpdmVyIGFuZCBzb21ldGhpbmcgaXNuJ3QgcXVpdGUgY2xpY2tpbmcuIElmIGBnZW5ldmVfZnJlZV9kZXZgIGlzIGNhbGxlZCBmcm9tIGBmcmVlX25ldGRldmAsIHdoaWNoIGl0IGlzLCB0aGVuIGl0ICpzaG91bGQqIGZyZWUgYGdlbmV2ZS1cdTAwM2VjZmdgLiBTbywgd2h5IHdhcyBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGFkZGVkIGluIGBnZW5ldmVfY29uZmlndXJlYD8gU29tZXRoaW5nIHNlZW1zIHJlZHVuZGFudCBoZXJlLlxuXG5MZXQgbWUgcXVpY2tseSBjaGVjayBgcmVnaXN0ZXJfbmV0ZGV2aWNlYC4uLiBkb2VzIGl0IHRyaWdnZXIgYSBjYWxsIHRvIGBmcmVlX25ldGRldmA/IEFoLCBubywgaXQgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBmcmVlX25ldGRldmAuIE9rYXksIHNvIHdlIG5lZWQgdG8gbG9vayBkZWVwZXIuIFdhaXQgYSBtaW51dGXigKYgaWYgYHJlZ2lzdGVyX25ldGRldmljZWAgZmFpbHMsIHRoZSBgZGV2LVx1MDAzZXJlZ19zdGF0ZWAgaXMgc2V0IHRvIGBORVRSRUdfVU5JTklUSUFMSVpFRGAuIFRoYXQncyBpbXBvcnRhbnQhIElmIGBkZXYtXHUwMDNlcmVnX3N0YXRlYCAqaXMqIGBORVRSRUdfVU5JTklUSUFMSVpFRGAsIHRoZW4gYGZyZWVfbmV0ZGV2YCAqd2lsbCogY2FsbCBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAuIFRoYXQncyB3aGVyZSBpdCBoYXBwZW5zLlxuXG5TbyB0aGUgZGVzdHJ1Y3RvciBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgdGhlIGBnZW5ldmUtXHUwMDNlY2ZnYCBidXQgdGhlIGZ1bmN0aW9uIGBnZW5ldmVfZnJlZV9kZXZgIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgYXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLlxuXG5IYW5nIG9u4oCmIHdoYXQgaWYgYGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldmAgaXMgc2V0IHRvIHRydWU/IFRoaXMgY291bGQgYmUgYSBmYWN0b3IuIE5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGZyZWVfbmV0ZGV2YCBpbiBgbmV0L2NvcmUvZGV2LmNgIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI1NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU3OjUxLjMxODc5NDc2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NTg4NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyZWVfbmV0ZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTExMzMyPWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTExNDkyLVxcdGlmIChyZXQpIHtcXG5uZXQvY29yZS9kZXYuYzoxMTQ5MzpcXHRcXHQvKiBFeHBlY3QgZXhwbGljaXQgZnJlZV9uZXRkZXYoKSBvbiBmYWlsdXJlICovXFxubmV0L2NvcmUvZGV2LmM6MTE0OTQ6XFx0XFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IGZhbHNlO1xcbm5ldC9jb3JlL2Rldi5jLTExNDk1LVxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgTlVMTCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMTYwNT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTY4OC0gKlxcdHJ0bmxfdW5sb2NrKCk7XFxubmV0L2NvcmUvZGV2LmM6MTE2ODk6ICpcXHRmcmVlX25ldGRldih5MSk7XFxubmV0L2NvcmUvZGV2LmM6MTE2OTA6ICpcXHRmcmVlX25ldGRldih5Mik7XFxubmV0L2NvcmUvZGV2LmMtMTE2OTEtICpcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExNzAyPXZvaWQgbmV0ZGV2X3J1bl90b2RvKHZvaWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTc1OC1cXHRcXHRcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvcihkZXYpO1xcbm5ldC9jb3JlL2Rldi5jOjExNzU5OlxcdFxcdGlmIChkZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2KVxcbm5ldC9jb3JlL2Rldi5jOjExNzYwOlxcdFxcdFxcdGZyZWVfbmV0ZGV2KGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTE3NjEtXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjA0MT1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjE2Ni1mcmVlX2FsbDpcXG5uZXQvY29yZS9kZXYuYzoxMjE2NzpcXHRmcmVlX25ldGRldihkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTEyMTY4LVxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIxODA9c3RhdGljIHZvaWQgbmV0ZGV2X25hcGlfZXhpdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIxOTYtLyoqXFxubmV0L2NvcmUvZGV2LmM6MTIxOTc6ICogZnJlZV9uZXRkZXYgLSBmcmVlIG5ldHdvcmsgZGV2aWNlXFxubmV0L2NvcmUvZGV2LmMtMTIxOTgtICogQGRldjogZGV2aWNlXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjIwNC0gKi9cXG5uZXQvY29yZS9kZXYuYzoxMjIwNTp2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2LmMtMTIyMDYte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIyMTQtXFx0XFx0QVNTRVJUX1JUTkwoKTtcXG5uZXQvY29yZS9kZXYuYzoxMjIxNTpcXHRcXHRkZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcXG5uZXQvY29yZS9kZXYuYy0xMjIxNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjI2Mi19XFxubmV0L2NvcmUvZGV2LmM6MTIyNjM6RVhQT1JUX1NZTUJPTChmcmVlX25ldGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTIyNjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU3OjUxLjQzNTM5MTIxMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU0NDYyOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBGYWlsdXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nJ3MgY2F0Y2hpbmcgbXkgZXllLiBJZiBpdCByZXR1cm5zIGFuIGVycm9yLCBpdCBzZXRzIGBkZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSBmYWxzZTtgIGFuZCB0aGVuIGNhbGxzIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZWAuIFRoYXQgc2VlbXMgY291bnRlcmludHVpdGl2ZSBhdCBmaXJzdCwgZG9lc24ndCBpdD8gSXQgaW1wbGllcyB0aGF0IGlmIGl0IGZhaWxzLCB0aGUgZGV2aWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBmcmVlZCBieSB0aGUgc3RhbmRhcmQgbWVhbnMuIEJ1dCB0aGVuLCBJIHJlbWVtYmVyIHRoYXQgYHJlZ2lzdGVyX25ldGRldmljZWAgY2FuIGZhaWwgKmFmdGVyKiBzb21lIGRldmljZSBpbml0aWFsaXphdGlvbiBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBpcyBiZWluZyBwYXJ0aWFsbHkgdW5kb25lLlxuXG5Ib3dldmVyLCBhIGZ1cnRoZXIgdGhvdWdodCBzdHJpa2VzIG1lLiBJZiBgZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2YCBpcyBmYWxzZSwgYW5kIHRoZW4gYSBjYWxsIHRvIGBmcmVlX25ldGRldmAgaXMgbWFkZSwgd2lsbCB0aGF0IHN0aWxsIGZyZWUgdGhlIGRldmljZT8gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZsYWcuIEl0IHNlZW1zIEkgbmVlZCB0byByZWFkIHRoZSBgZnJlZV9uZXRkZXZgIGNvZGUgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGUgbG9naWMuIEkgY2FuIG1ha2Ugc29tZSBpbmZlcmVuY2VzLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU3OjU5LjA4OTg1Nzk0NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDQyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIyMDUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjA1OlxcdHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xMjIwNjpcXHR7XFxuMTIyMDc6XFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4xMjIwODpcXHRcXG4xMjIwOTpcXHRcXHQvKiBXaGVuIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciByZWdpc3Rlcl9uZXRkZXZpY2UoKSBmYWlsZWQgdGhlIHVud2luZFxcbjEyMjEwOlxcdFxcdCAqIGhhbmRsaW5nIG1heSBzdGlsbCBiZSBkaXNtYW50bGluZyB0aGUgZGV2aWNlLiBIYW5kbGUgdGhhdCBjYXNlIGJ5XFxuMTIyMTE6XFx0XFx0ICogZGVmZXJyaW5nIHRoZSBmcmVlLlxcbjEyMjEyOlxcdFxcdCAqL1xcbjEyMjEzOlxcdFxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5SRUdJU1RFUklORykge1xcbjEyMjE0OlxcdFxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuMTIyMTU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuMTIyMTY6XFx0XFx0XFx0cmV0dXJuO1xcbjEyMjE3OlxcdFxcdH1cXG4xMjIxODpcXHRcXG4xMjIxOTpcXHRcXHRXQVJOX09OKGRldi1cXHUwMDNlY2ZnICE9IGRldi1cXHUwMDNlY2ZnX3BlbmRpbmcpO1xcbjEyMjIwOlxcdFxcdGtmcmVlKGRldi1cXHUwMDNlY2ZnKTtcXG4xMjIyMTpcXHRcXHRrZnJlZShkZXYtXFx1MDAzZWV0aHRvb2wpO1xcbjEyMjIyOlxcdFxcdG5ldGlmX2ZyZWVfdHhfcXVldWVzKGRldik7XFxuMTIyMjM6XFx0XFx0bmV0aWZfZnJlZV9yeF9xdWV1ZXMoZGV2KTtcXG4xMjIyNDpcXHRcXG4xMjIyNTpcXHRcXHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGRldi1cXHUwMDNlaW5ncmVzc19xdWV1ZSwgMSkpO1xcbjEyMjI2OlxcdFxcbjEyMjI3OlxcdFxcdF9faHdfYWRkcl9mbHVzaChcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xcbjEyMjI4OlxcdFxcbjEyMjI5OlxcdFxcdC8qIEZsdXNoIGRldmljZSBhZGRyZXNzZXMgKi9cXG4xMjIzMDpcXHRcXHRkZXZfYWRkcl9mbHVzaChkZXYpO1xcbjEyMjMxOlxcdFxcbjEyMjMyOlxcdFxcdG5ldGRldl9uYXBpX2V4aXQoZGV2KTtcXG4xMjIzMzpcXHRcXG4xMjIzNDpcXHRcXHRuZXRpZl9kZWxfY3B1X3JtYXAoZGV2KTtcXG4xMjIzNTpcXHRcXG4xMjIzNjpcXHRcXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcXHUwMDI2ZGV2LVxcdTAwM2VyZWZjbnRfdHJhY2tlcik7XFxuMTIyMzc6XFx0I2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcXG4xMjIzODpcXHRcXHRmcmVlX3BlcmNwdShkZXYtXFx1MDAzZXBjcHVfcmVmY250KTtcXG4xMjIzOTpcXHRcXHRkZXYtXFx1MDAzZXBjcHVfcmVmY250ID0gTlVMTDtcXG4xMjI0MDpcXHQjZW5kaWZcXG4xMjI0MTpcXHRcXHRmcmVlX3BlcmNwdShkZXYtXFx1MDAzZWNvcmVfc3RhdHMpO1xcbjEyMjQyOlxcdFxcdGRldi1cXHUwMDNlY29yZV9zdGF0cyA9IE5VTEw7XFxuMTIyNDM6XFx0XFx0ZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2V4ZHBfYnVsa3EpO1xcbjEyMjQ0OlxcdFxcdGRldi1cXHUwMDNleGRwX2J1bGtxID0gTlVMTDtcXG4xMjI0NTpcXHRcXG4xMjI0NjpcXHRcXHRuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShkZXYpO1xcbjEyMjQ3OlxcdFxcbjEyMjQ4OlxcdFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuMTIyNDk6XFx0XFxuMTIyNTA6XFx0XFx0LyogIENvbXBhdGliaWxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzICovXFxuMTIyNTE6XFx0XFx0aWYgKGRldi1cXHUwMDNlcmVnX3N0YXRlID09IE5FVFJFR19VTklOSVRJQUxJWkVEIHx8XFxuMTIyNTI6XFx0XFx0ICAgIGRldi1cXHUwMDNlcmVnX3N0YXRlID09IE5FVFJFR19EVU1NWSkge1xcbjEyMjUzOlxcdFxcdFxcdGt2ZnJlZShkZXYpO1xcbjEyMjU0OlxcdFxcdFxcdHJldHVybjtcXG4xMjI1NTpcXHRcXHR9XFxuMTIyNTY6XFx0XFxuMTIyNTc6XFx0XFx0QlVHX09OKGRldi1cXHUwMDNlcmVnX3N0YXRlICE9IE5FVFJFR19VTlJFR0lTVEVSRUQpO1xcbjEyMjU4OlxcdFxcdFdSSVRFX09OQ0UoZGV2LVxcdTAwM2VyZWdfc3RhdGUsIE5FVFJFR19SRUxFQVNFRCk7XFxuMTIyNTk6XFx0XFxuMTIyNjA6XFx0XFx0Lyogd2lsbCBmcmVlIHZpYSBkZXZpY2UgcmVsZWFzZSAqL1xcbjEyMjYxOlxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmRldi1cXHUwMDNlZGV2KTtcXG4xMjI2MjpcXHR9XFxuMTIyNjM6XFx0RVhQT1JUX1NZTUJPTChmcmVlX25ldGRldik7XFxuMTIyNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU3OjU5LjA5MDUwMzg2NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDA2OTM5OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipSZWFsaXppbmcgYSBDcml0aWNhbCBEaXNjcmVwYW5jeSBpbiBEZXZpY2UgRGUtaW5pdGlhbGl6YXRpb24qKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGUgbmV0d29yayBkZXZpY2UgdGVhcmRvd24gc2VxdWVuY2UsIGFuZCBpdCdzIHN1ZGRlbmx5IGhpdHRpbmcgbWUuICpgZnJlZV9uZXRkZXZgIGNsZWFybHkgZG9lc24ndCBpbnZva2UgYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgIGRpcmVjdGx5ISogVGhhdCdzIGEgcG90ZW50aWFsIHByb2JsZW0sIGEgc2lnbmlmaWNhbnQgb3ZlcnNpZ2h0IGlmIHdlJ3JlIHJlbHlpbmcgb24gdGhhdCBkZXN0cnVjdG9yIGZvciBjbGVhbnVwLiBJIGFsd2F5cyBhc3N1bWVkIGl0IHdhcyBjYWxsZWQgdGhlcmUsIGFzIHRoZSBuZXQgZGV2aWNlIGlzIGZyZWVkLlxuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoZXJlICppcyogYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgIGFjdHVhbGx5IGNhbGxlZD8gQWgsIG9mIGNvdXJzZSEgKkl0J3MgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbmV0ZGV2X3J1bl90b2RvYCEqIE9rYXksIHRoYXQgbWVhbnMgaXQgaXMgY2FsbGVkLCBidXQgdW5kZXIgYSBzcGVjaWZpYyBjb25kaXRpb24uLi4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZnJlZV9uZXRkZXZgIGFuZCBgbmV0ZGV2X3J1bl90b2RvYCwgYW5kIG1ha2Ugc3VyZSB0aGUgbGF0dGVyICphbHdheXMqIHJ1bnMgd2hlbiBpdCBuZWVkcyB0by4gVGhpcyBpcyBzb21ldGhpbmcgSSdtIGdvaW5nIHRvIGhhdmUgdG8gbG9vayBjbG9zZXIgYXQsIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGluY29tcGxldGUgY2xlYW51cCBpZiB0aGF0IGV4ZWN1dGlvbiBwYXRoIGlzIG5vdCBjb25zaXN0ZW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGBuZXRkZXZfcnVuX3RvZG9gIGdldHMgc2NoZWR1bGVkIGFuZCBleGVjdXRlZCB0byBtYWtlIHN1cmUgdGhlIHByaXZhdGUgZGF0YSBpcyBjbGVhbmVkIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk1MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTg6MDQuNDk3NDQ4MTc4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjgyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3NDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNzQwOlxcdFxcdH1cXG4xMTc0MTpcXHRcXG4xMTc0MjpcXHRcXHRjbnQgPSAwO1xcbjExNzQzOlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2bGlzdCkpIHtcXG4xMTc0NDpcXHRcXHRcXHRkZXYgPSBuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShcXHUwMDI2bGlzdCk7XFxuMTE3NDU6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmRldi1cXHUwMDNldG9kb19saXN0KTtcXG4xMTc0NjpcXHRcXG4xMTc0NzpcXHRcXHRcXHQvKiBwYXJhbm9pYSAqL1xcbjExNzQ4OlxcdFxcdFxcdEJVR19PTihuZXRkZXZfcmVmY250X3JlYWQoZGV2KSAhPSAxKTtcXG4xMTc0OTpcXHRcXHRcXHRCVUdfT04oIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNlcHR5cGVfYWxsKSk7XFxuMTE3NTA6XFx0XFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZXB0eXBlX3NwZWNpZmljKSk7XFxuMTE3NTE6XFx0XFx0XFx0V0FSTl9PTihyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VpcF9wdHIpKTtcXG4xMTc1MjpcXHRcXHRcXHRXQVJOX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXFx1MDAzZWlwNl9wdHIpKTtcXG4xMTc1MzpcXHRcXG4xMTc1NDpcXHRcXHRcXHRuZXRkZXZfbmFtZV9ub2RlX2FsdF9mbHVzaChkZXYpO1xcbjExNzU1OlxcdFxcdFxcdG5ldGRldl9uYW1lX25vZGVfZnJlZShkZXYtXFx1MDAzZW5hbWVfbm9kZSk7XFxuMTE3NTY6XFx0XFx0XFx0bmV0ZGV2X2RvX2ZyZWVfcGNwdV9zdGF0cyhkZXYpO1xcbjExNzU3OlxcdFxcdFxcdGlmIChkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvcilcXG4xMTc1ODpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvcihkZXYpO1xcbjExNzU5OlxcdFxcdFxcdGlmIChkZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2KVxcbjExNzYwOlxcdFxcdFxcdFxcdGZyZWVfbmV0ZGV2KGRldik7XFxuMTE3NjE6XFx0XFxuMTE3NjI6XFx0XFx0XFx0Y250Kys7XFxuMTE3NjM6XFx0XFxuMTE3NjQ6XFx0XFx0XFx0LyogRnJlZSBuZXR3b3JrIGRldmljZSAqL1xcbjExNzY1OlxcdFxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZkZXYtXFx1MDAzZWRldi5rb2JqKTtcXG4xMTc2NjpcXHRcXHR9XFxuMTE3Njc6XFx0XFx0aWYgKGNudCBcXHUwMDI2XFx1MDAyNiBhdG9taWNfc3ViX2FuZF90ZXN0KGNudCwgXFx1MDAyNmRldl91bnJlZ19jb3VudCkpXFxuMTE3Njg6XFx0XFx0XFx0d2FrZV91cChcXHUwMDI2bmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EpO1xcbjExNzY5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTg6MDQuNDk4NDgwMTk4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MTIxNTU0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBMZWFrIEZpeCoqXG5cbk9rYXksIHNvIHRoZSBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaW4gYG5ldGRldl9ydW5fdG9kb2AsIHdoaWNoIGhhcHBlbnMgKmFmdGVyKiBhIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuIElmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzLCB0aGUgZGV2aWNlIGlzbid0IGFjdHVhbGx5IHJlZ2lzdGVyZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCB0aHVzIGl0J3MgbmV2ZXIgdW5yZWdpc3RlcmVkLCB3aGljaCBtZWFucyBgbmV0ZGV2X3J1bl90b2RvYCBpcyBuZXZlciBjYWxsZWQgZm9yIGl0LiBUaGF0IG1lYW5zIGBkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yYCAqbmV2ZXIqIGdldHMgY2FsbGVkIGlmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzLiAgVGhhdCBpcyBhIHByb2JsZW0gYmVjYXVzZSBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgYmVmb3JlIGl0IHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGZyZWVkIGluIGBwcml2X2Rlc3RydWN0b3JgIHdpbGwgbm93IGxlYWsuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGBnZW5ldmVfY29uZmlndXJlYCBmdW5jdGlvbi4gSXQgYWxsb2NhdGVzIGBuZXdfY2ZnYCBhbmQgYXNzaWducyBpdCB0byBgZ2VuZXZlLVx1MDAzZWNmZ2AuIElmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzIGluIHRoaXMgc2NlbmFyaW8sIGBnZW5ldmVfY29uZmlndXJlYCByZXR1cm5zIGFuIGVycm9yLCBhbmQgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIHN1Y2ggYXMgYHJ0bmxfbmV3bGlua19jcmVhdGVgLCB0aGVuIGNhbGxzIGBmcmVlX25ldGRldihkZXYpYC4gSG93ZXZlciwgYGZyZWVfbmV0ZGV2YCAqZG9lc24ndCogY2FsbCBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAg4oCTIGl0IGp1c3QgZnJlZXMgdGhlIGRldmljZSBtZW1vcnkgaXRzZWxmLiAgU28sIGBnZW5ldmUtXHUwMDNlY2ZnYCBpcyBiZWluZyBsZWFrZWQhXG5cblRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgaW4gdGhlIGVycm9yIHBhdGggb2YgYGdlbmV2ZV9jb25maWd1cmVgLiBJdCBtYWtlcyB0b3RhbCBzZW5zZSBub3c6IGBnZW5ldmVfZnJlZV9kZXZgIGZyZWVzIHRoZSBgZ2VuZXZlLVx1MDAzZWNmZ2AuXG5cbkxldCdzIHZlcmlmeSB0aGlzLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgYGdlbmV2ZV9jb25maWd1cmVgIGNhbGxzIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAuIGBnZW5ldmVfZnJlZV9kZXZgIHRoZW4gZnJlZXMgYGdlbmV2ZS1cdTAwM2VjZmdgIGFuZCBzZXRzIGl0IHRvIE5VTEwuIFRoZW4gdGhlIGVycm9yIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsIGFuZCBmaW5hbGx5IGBmcmVlX25ldGRldihkZXYpYCBpcyBjYWxsZWQgdG8gZnJlZSB0aGUgZGV2aWNlIG1lbW9yeS4gIFRoZSBsZWFrIGlzIGZpeGVkLiBFeGNlbGxlbnQhXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEl0IGRlZmluaXRlbHkgZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgZ2VuZXZlX2NvbmZpZ3VyZWAsIGJ1dCB0aGUgZnV6emluZyBndWlkYW5jZSBzdGF0ZXMgdG8gZGV0ZXJtaW5lIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWY6XG4tICBUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIGRvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvZGUgY29tbWVudHMuXG4tICBQdXJlbHkgbG9nZ2luZyBvciB0cmFjZXBvaW50IGNoYW5nZXMuXG4tICBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSAgQ29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuXG5cblRoaXMgZGVmaW5pdGVseSAqZG9lc24ndCogZml0IHRob3NlIGNyaXRlcmlhLiBUaGlzIG1vZGlmaWVzIGEgcmVhY2hhYmxlIGRyaXZlciAoYGRyaXZlcnMvbmV0L2dlbmV2ZS5jYCksIGl0IGZpeGVzIGEgbWVtb3J5IGxlYWsgYW5kIGFsdGVycyBleGVjdXRpb24gZmxvdyAoY2FsbHMgYGdlbmV2ZV9mcmVlX2RldmApLCBhbmQgaXQgaXMgcmVhY2hhYmxlLiBXZSBjYW4gdHJpZ2dlciB0aGlzIGxlYWsgYnkgY3JlYXRpbmcgYSBnZW5ldmUgZGV2aWNlIHdpdGggaW52YWxpZCBwYXJhbWV0ZXJzLCBvciBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscyBmb3IgYW55IHJlYXNvbjsgZm9yIGV4YW1wbGUsIGlmIHdlIHJ1biBvdXQgb2YgbWVtb3J5IG9yIHRoZXJlIGlzIGEgZHVwbGljYXRlIG5hbWUgY29uZmxpY3QuIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGNhbiBhbHNvIGZhaWwgaWYgdGhlIGRldmljZSBuYW1lIGlzIGFscmVhZHkgdGFrZW4gb3IgaWYgYW5vdGhlciBpbml0aWFsaXphdGlvbiBzdGVwIGZhaWxzLlxuXG5TbywgeWVzLCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIHJlYWNoYWJsZSBlcnJvciBwYXRoIHdpdGggYSBtZW1vcnkgbGVhayBmaXguIFRpbWUgdG8gbW92ZSBmb3J3YXJkIHdpdGggdGhlIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODE5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTg6MTQuNDEwNjM4NzU2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzU3NzUzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdFTkVWRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjI0NTpjb25maWcgR0VORVZFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDYtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgTmV0d29yayBWaXJ0dWFsaXphdGlvbiBFbmNhcHN1bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1ODoxNC45NDY0MjA0NzNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNjgxNzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgc3lzdGVtJ3MgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBHRU5FVkVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBwZXJmb3JtIGEgdGhvcm91Z2ggY2hlY2suIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyICp0aGlzKiBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24sIG9yIGlmIHRoZXJlIGFyZSBvdGhlcnMgZGVmaW5lZCB0aGF0IGFyZSBhbHNvIGFjdGl2ZWx5IGluIHBsYXksIHBlcmhhcHMgdGhyb3VnaCBhbiBhbHRlcm5hdGl2ZSBjb25maWd1cmF0aW9uIGNoYWluLCBhbiBvdmVycmlkZSwgb3IgZXZlbiB3aXRoaW4gYSBzZXBhcmF0ZSBtb2R1bGUgb3IgcHJvY2Vzcy4gSXQncyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhhdCBgR0VORVZFYCBpc24ndCBqdXN0IG9uZSBjb21wb25lbnQgb2YgYSBicm9hZGVyLCBhbmQgcG90ZW50aWFsbHkgY29uZmxpY3RpbmcsIGNvbmZpZ3VyYXRpb24gc2V0LiBMZWF2aW5nIG5vIHN0b25lIHVudHVybmVkIGlzIHRoZSBrZXkgdG8gbWFpbnRhaW5pbmcgYSByb2J1c3QgbmV0d29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1ODoxOS42NzMyNDAyNzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdGNvbmZpZyBHRU5FVkVcXG4gMjQ2OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblxcXCJcXG4gMjQ3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAyNDg6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDI0OTpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuIDI1MDpcXHRcXHRoZWxwXFxuIDI1MTpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ2VuZXZlIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjUyOlxcdFxcdCAgTGF5ZXIgMiBOZXR3b3JrcyBvdmVyIExheWVyIDMgTmV0d29ya3MuIEdFTkVWRSBpcyBvZnRlbiB1c2VkXFxuIDI1MzpcXHRcXHQgIHRvIHR1bm5lbCB2aXJ0dWFsIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxcbiAyNTQ6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU4OjE5LjY3MzM1NjY4NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkxNjE3ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqR2VuZXZlIENvbmZpZ3VyYXRpb24gLSBDb3JlIEZvY3VzKipcblxuUmlnaHQsIHNvIGBHRU5FVkVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBjb21wb25lbnQgaGVyZSwgdGhlIHRoaW5nIHRvIHJlYWxseSB6ZXJvIGluIG9uLiBUaGUgcGF0Y2ggaXMgZGVmaW5pdGVseSBtZXNzaW5nIHdpdGggdGhlIGBnZW5ldmVfY29uZmlndXJlYCBmdW5jdGlvbiwgYW5kIHRoYXQncyBmb3VuZCBpbiBgZHJpdmVycy9uZXQvZ2VuZXZlLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBob3cgdGhlIGVudGlyZSBHZW5ldmUgc3RhY2sgaXMgc2V0IHVwLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBCZXlvbmQgYGdlbmV2ZV9jb25maWd1cmVgLCBJIG5lZWQgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byBgZ2VuZXZlX25ld2xpbmtgLCBhbmQgYGdlbmV2ZV9kZXZfY3JlYXRlX2ZiYC4gVGhlc2UgYXJlIGFsbCBjb3JlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEdlbmV2ZSBkcml2ZXIsIGFuZCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhpcyBwYXRjaCBpbXBhY3RzIGhvdyBuZXcgR2VuZXZlIGxpbmtzIGFyZSBjcmVhdGVkLCBjb25maWd1cmVkLCBhbmQgaG93IHRoZSB1bmRlcmx5aW5nIGZvcndhcmRpbmcgcGxhbmUgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhdGNoIGFsdGVycyB0aGUgZmxvdyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIHBpY3R1cmUgb2YgdGhlIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MjcsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1ODoyMy42NjQ5NzgzNzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1NDk4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jb25maWd1cmVcIixcbiAgICBcImdlbmV2ZV9uZXdsaW5rXCIsXG4gICAgXCJnZW5ldmVfZGV2X2NyZWF0ZV9mYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgZ2VuZXZlX2NvbmZpZ3VyZS4gSWYgcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgZmFpbHMsIHRoZSBkZXZpY2UncyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jb25maWd1cmVcIixcbiAgICBcImdlbmV2ZV9uZXdsaW5rXCIsXG4gICAgXCJnZW5ldmVfZGV2X2NyZWF0ZV9mYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgZ2VuZXZlX2NvbmZpZ3VyZS4gSWYgcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgZmFpbHMsIHRoZSBkZXZpY2UncyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow5tgwq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 11:19:34 +0000 UTC FinishedAt: 2026-07-22 11:58:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "df13c1df8147675470213ffff29dd5762fa321f5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GENEVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "df13c1df8147675470213ffff29dd5762fa321f5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GENEVE" ], "series_id": "e4bd9c22-7e30-4b0a-b7cb-e829efbd0662" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "geneve_configure", "geneve_newlink", "geneve_dev_create_fb" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dFTkVWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmV2ZV9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7Z2VuZXZlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2Rldl9jcmVhdGVfZmImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBnZW5ldmVfY29uZmlndXJlLiBJZiByZWdpc3Rlcl9uZXRkZXZpY2UoKSBmYWlscywgdGhlIGRldmljZSYjMzk7cyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGE1ZTlhNzJiMGUwMzQ4MTRmYzUzMTI1OGJjMjE4NDRkY2JmYmFjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDExOjU1OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jIGIvZHJpdmVycy9uZXQvZ2VuZXZlLmNcbmluZGV4IDE3YmQzNTQzZDU4N2E5Li5lYjE1NmYzM2I2Mjc1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9nZW5ldmUuY1xuQEAgLTIwNDMsOCAmIzQzOzIwNDMsMTAgQEAgc3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcbiBcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuLVx0aWYgKGVycilcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRnZW5ldmVfZnJlZV9kZXYoZGV2KTtcbiBcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXG4gXHRsaXN0X2FkZChcdTAwMjZnZW5ldmUtXHUwMDNlbmV4dCwgXHUwMDI2Z24tXHUwMDNlZ2VuZXZlX2xpc3QpO1xuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dFTkVWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmV2ZV9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7Z2VuZXZlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2Rldl9jcmVhdGVfZmImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBnZW5ldmVfY29uZmlndXJlLiBJZiByZWdpc3Rlcl9uZXRkZXZpY2UoKSBmYWlscywgdGhlIGRldmljZSYjMzk7cyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYTVlOWE3MmIwZTAzNDgxNGZjNTMxMjU4YmMyMTg0NGRjYmZiYWNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMTE6NTU6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9nZW5ldmUuYyBiL2RyaXZlcnMvbmV0L2dlbmV2ZS5jCmluZGV4IDE3YmQzNTQzZDU4N2E5Li5lYjE1NmYzM2I2Mjc1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2VuZXZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ2VuZXZlLmMKQEAgLTIwNDMsOCAmIzQzOzIwNDMsMTAgQEAgc3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKLQlpZiAoZXJyKQomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlnZW5ldmVfZnJlZV9kZXYoZGV2KTsKIAkJcmV0dXJuIGVycjsKJiM0MzsJfQogCiAJbGlzdF9hZGQoJmFtcDtnZW5ldmUtJmd0O25leHQsICZhbXA7Z24tJmd0O2dlbmV2ZV9saXN0KTsKIAlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBwYXRjaCBmbG9hdGluZyBhcm91bmQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBkcml2ZXJzL25ldC9nZW5ldmUuY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGFuIGVycm9yIGhhbmRsaW5nIGlzc3VlIHdpdGhpbiB0aGUgYGdlbmV2ZV9jb25maWd1cmVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBhIGBnZW5ldmVfZnJlZV9kZXYoZGV2KTtgIGNhbGwgdG8gdGhlIGVycm9yIHBhdGggb2YgYGdlbmV2ZV9jb25maWd1cmVgLiBUaGlzIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIGZ1bmN0aW9uIGZhaWxzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGFkZGl0aW9uIGlzIGxpa2VseSBpbnRlbmRlZCB0byBwcmV2ZW50IGEgcmVzb3VyY2UgbGVhay4gSWYgYHJlZ2lzdGVyX25ldGRldmljZWAgZmFpbHMsIHRoZSBgZGV2YCBzdHJ1Y3Qgd291bGQgYmUgbGVmdCBhbGxvY2F0ZWQsIGJ1dCBub3QgcmVnaXN0ZXJlZCwgYW5kIHBvdGVudGlhbGx5IGNhdXNlIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgZGV2aWNlIGlzIGZyZWVkIHNvIHdlIGRvbiYjMzk7dCBsZWFrIHJlc291cmNlcy4gTm93IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBnZW5ldmVfY29uZmlndXJlYCBmdW5jdGlvbiBpdHNlbGYgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgYWRkaXRpb24gYW5kIHdoZXRoZXIgaXQmIzM5O3MgdGhlIGNvcnJlY3QgYXBwcm9hY2guIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5ldmVfY29uZmlndXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTk3Mz1zdGF0aWMgYm9vbCBnZW5ldmVfZHN0X2FkZHJfZXF1YWwoc3RydWN0IGlwX3R1bm5lbF9pbmZvICphLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE5ODEtXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxOTgyOnN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xOTgzLVx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjM2NT1zdGF0aWMgaW50IGdlbmV2ZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjM4Ny1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjIzODg6XHRlcnIgPSBnZW5ldmVfY29uZmlndXJlKGxpbmtfbmV0LCBkZXYsIGV4dGFjaywgXHUwMDI2Y2ZnKTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzODktXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI1OTI9c3RydWN0IG5ldF9kZXZpY2UgKmdlbmV2ZV9kZXZfY3JlYXRlX2ZiKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjE1LVx0aW5pdF90bmxfaW5mbyhcdTAwMjZjZmcuaW5mbywgZHN0X3BvcnQpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjYxNjpcdGVyciA9IGdlbmV2ZV9jb25maWd1cmUobmV0LCBkZXYsIE5VTEwsIFx1MDAyNmNmZyk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjE3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBmdW5jdGlvbnM6CgoqKkFuYWx5emluZyBHZW5ldmUgRGV2aWNlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgYW5kIGBnZW5ldmVfY29uZmlndXJlYC4gTmF0dXJhbGx5LCB0aGUgZmlyc3QgZnVuY3Rpb24sIGBnZW5ldmVfZnJlZV9kZXZgLCBoYXMgdG8gYmUgdGhlIGNsZWFudXAgcm91dGluZS4gSXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIEdlbmV2ZSBkZXZpY2UgaWRlbnRpZmllZCBieSBgZGV2YC4gVGhpcyBjb3VsZCBpbmNsdWRlIGZyZWVpbmcgbWVtb3J5IGFsbG9jYXRlZCBmb3IgZGF0YSBzdHJ1Y3R1cmVzLCBjbG9zaW5nIGZpbGUgZGVzY3JpcHRvcnMsIHVucmVnaXN0ZXJpbmcgdGhlIGRldmljZSBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIGRldmljZSB0ZWFyZG93bi4gSSBuZWVkIHRvIGJlIHN1cmUgaXQmIzM5O3MgaGFuZGxpbmcgYWxsIGFzcGVjdHMgb2YgZGV2aWNlIGRlYWxsb2NhdGlvbiB0byBhdm9pZCBsZWFrcyBvciBkYW5nbGluZyByZWZlcmVuY2VzLiBJIHNob3VsZCBwcm9iYWJseSB0cmFjZSBpdHMgY2FsbHMsIGVuc3VyaW5nIGl0IHNhZmVseSBoYW5kbGVzIHJlc291cmNlcyBhbmQgZG9lc27igJl0IGNvcnJ1cHQgbWVtb3J5LgoKVGhlbiwgdGhlcmUmIzM5O3MgYGdlbmV2ZV9jb25maWd1cmVgLiBUaGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIHBheSBhIGxvdCBvZiBhdHRlbnRpb24gdG8uIFRoaXMgZnVuY3Rpb24gYWxtb3N0IGNlcnRhaW5seSBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIG9yIG1vZGlmaWNhdGlvbiBvZiBhIEdlbmV2ZSBkZXZpY2UuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIGFjY2VwdGVkLCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlIG9yIHZpcnR1YWwgaW50ZXJmYWNlcyBkdXJpbmcgdGhpcyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gaXMgcGFyYW1vdW50LCBhcyB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIGRldGVybWluZXMgdGhlIHBlcmZvcm1hbmNlIGFuZCBiZWhhdmlvciBvZiB0aGUgR2VuZXZlIHR1bm5lbC4gQXJlIHdlIGhhbmRsaW5nIE1UVSwgSVAgYWRkcmVzc2VzLCBVRFAgcG9ydHMsIFZMQU4gdGFncz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGl0IHZhbGlkYXRlcyB0aGUgaW5wdXQgdG8gYXZvaWQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVlIHRvIGluY29ycmVjdCBwYXJhbWV0ZXIgc2V0dGluZ3MuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIHdoZXJlIHRoaW5ncyBnbyB0ZXJyaWJseSB3cm9uZy4gVGhpcyB3aWxsIGRlZmluaXRlbHkgYmUgd2hlcmUgdGhlIGJ1bGsgb2YgbXkgZWZmb3J0IGdvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXZlX2ZyZWVfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc1OD1zdGF0aWMgdm9pZCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzY1LS8qIEluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzY2OnN0YXRpYyB2b2lkIGdlbmV2ZV9mcmVlX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc2Ny17XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc3NT1zdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzgxLVx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjE3ODI6XHRkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yID0gZ2VuZXZlX2ZyZWVfZGV2O1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc4My1cbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0xOTgyPXN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjA0Ni1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjIwNDc6XHRcdGdlbmV2ZV9mcmVlX2RldihkZXYpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjA0OC1cdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZW5ldmUgRGV2aWNlIFNldHVwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBnZW5ldmVfc2V0dXBgIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgZGV2aWNlIGNsZWFudXAgaXMgaGFuZGxlZC4gSSBzZWUgdGhhdCB0aGUgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYCBpcyBhc3NpZ25lZCB0byBgZ2VuZXZlX2ZyZWVfZGV2YC4gVGhhdCYjMzk7cyB0aGUga2V5LiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgd2hhdCBoYXBwZW5zIGlmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzPyBJIHJlbWVtYmVyIHRoYXQgdHlwaWNhbGx5LCB3aGVuIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGJhaWxzIG91dCwgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAsIGFuZCBpdCBkb2VzIHNvIGJ5IGNhbGxpbmcgYGZyZWVfbmV0ZGV2YC4gQW5kICp0aGF0KiBpcyB3aGF0IHNob3VsZCB0cmlnZ2VyIG15IGBwcml2X2Rlc3RydWN0b3JgISBTbyBgZ2VuZXZlX2ZyZWVfZGV2YCBzaG91bGQgYmUgY2FsbGVkIGluIHRoYXQgZmFpbHVyZSBzY2VuYXJpbywgYW5kIGZyZWUgdGhlIGRldmljZS4gQnV0IEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB3aGVyZSBgZ2VuZXZlX2NvbmZpZ3VyZWAgaXMgY2FsbGVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLiBXZSBoYXZlIHRvIGJlIHRob3JvdWdoIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXZlX25ld2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYz0yMzE5PXN0YXRpYyB2b2lkIGdlbmV2ZV9saW5rX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzNjQtXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyMzY1OnN0YXRpYyBpbnQgZ2VuZXZlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzNjYtXHRcdFx0ICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI1Nzg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGdlbmV2ZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI1ODQtXHQudmFsaWRhdGVcdD0gZ2VuZXZlX3ZhbGlkYXRlLFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjU4NTpcdC5uZXdsaW5rXHQ9IGdlbmV2ZV9uZXdsaW5rLFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4Ni1cdC5jaGFuZ2VsaW5rXHQ9IGdlbmV2ZV9jaGFuZ2VsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRG91YmxlIEZyZWUgQ29uY2VybiBpbiBHZW5ldmUgRGV2aWNlIENyZWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBHZW5ldmUgZGV2aWNlIGNyZWF0aW9uIHByb2Nlc3MgYW5kIEkmIzM5O3ZlIGhpdCBhIHBvdGVudGlhbCBzbmFnLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgdGhpczogaWYgYGdlbmV2ZV9jb25maWd1cmVgIGZhaWxzLCBkb2VzIGBnZW5ldmVfbmV3bGlua2AgcHJvcGVybHkgaGFuZGxlIHRoZSBjbGVhbnVwPyBJIGtub3cgYGdlbmV2ZV9uZXdsaW5rYCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gYHJ0bmxfbmV3bGlua2AsIGFuZCBgcnRubF9uZXdsaW5rYCAqaXRzZWxmKiBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAgaWYgdGhlIGxpbmsgY3JlYXRpb24gZmFpbHMuIAoKQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlciwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogaWYgYGdlbmV2ZV9jb25maWd1cmVgIGhhcyBhbHJlYWR5IGRvbmUgc29tZSBjbGVhbnVwLCBzcGVjaWZpY2FsbHkgYnkgY2FsbGluZyBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGV4cGxpY2l0bHkgYmVmb3JlIHRoZSBmYWlsdXJlLCBhbmQgKnRoZW4qIGBmcmVlX25ldGRldihkZXYpYCBpcyBzdWJzZXF1ZW50bHkgY2FsbGVkIGJ5IGBydG5sX25ld2xpbmtgIGR1ZSB0byB0aGUgYGdlbmV2ZV9uZXdsaW5rYCBmYWlsdXJlLCB3ZSBjb3VsZCBoYXZlIGEgZG91YmxlIGZyZWUgc2l0dWF0aW9uLiBUaGlzIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNvbWV0aGluZyBsaWtlIGBnZW5ldmUtJmd0O2luZm9gLCBvciB3aGF0ZXZlciByZXNvdXJjZXMgYGdlbmV2ZV9mcmVlX2RldmAgbWFuYWdlcy4KCkkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZ2VuZXZlX2ZyZWVfZGV2YCB0byB1bmRlcnN0YW5kIGl0cyBvcGVyYXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGFjdHVhbGx5IGRlYWxpbmcgd2l0aC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2dlbmV2ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzYwOlx0XHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBnZW5ldmVfY29uZmlnLCByY3UpO1xuMTc2MTpcdFxuMTc2MjpcdFx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XG4xNzYzOlx0fVxuMTc2NDpcdFxuMTc2NTpcdC8qIEluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovXG4xNzY2Olx0c3RhdGljIHZvaWQgZ2VuZXZlX2ZyZWVfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNzY3Olx0e1xuMTc2ODpcdFx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4xNzY5Olx0XHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnZW5ldmUtXHUwMDNlY2ZnLCAxKTtcbjE3NzA6XHRcbjE3NzE6XHRcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuMTc3MjpcdFx0UkNVX0lOSVRfUE9JTlRFUihnZW5ldmUtXHUwMDNlY2ZnLCBOVUxMKTtcbjE3NzM6XHR9XG4xNzc0Olx0XG4xNzc1Olx0c3RhdGljIHZvaWQgZ2VuZXZlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNzc2Olx0e1xuMTc3NzpcdFx0ZXRoZXJfc2V0dXAoZGV2KTtcbjE3Nzg6XHRcbjE3Nzk6XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2Z2VuZXZlX25ldGRldl9vcHM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1ODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRG91YmxlLUZyZWUgQ29uY2VybnMgaW4gR2VuZXZlIERldmljZSBDbGVhbnVwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBnZW5ldmVfZnJlZV9kZXZgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCBmcmVlcyB0aGUgYGNmZ2Agc3RydWN0dXJlIGFuZCB0aGVuIG51bGxzIG91dCBgZ2VuZXZlLSZndDtjZmdgLiBTaW1wbGUgZW5vdWdoLiBCdXQgd2FpdCwgdGhpcyBpcyBzZXR0aW5nIG9mZiBhbGFybSBiZWxscy4gSWYgYGdlbmV2ZV9mcmVlX2RldmAgaXMgY2FsbGVkIGV4cGxpY2l0bHkgKmFuZCB0aGVuKiBsYXRlciBgZnJlZV9uZXRkZXZgIGNhbGxzIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAsIHdoaWNoIGhhcHBlbnMgdG8gKmFsc28qIGJlIGBnZW5ldmVfZnJlZV9kZXZgLi4uIHdlIGhhdmUgYSBkb3VibGUtZnJlZSBzaXR1YXRpb24gYnJld2luZywgcmlnaHQ/IFdlJiMzOTtyZSBmcmVlaW5nIHRoZSBzYW1lIG1lbW9yeSB0d2ljZS4gVGhhdCYjMzk7cyBuZXZlciBnb29kLgoKQW5kIHRoYXQgbWFrZXMgbWUgdGhpbmssIGV2ZW4gaWYgYGNmZ2AgKmlzKiBOVUxMIGluIHRoZSBzZWNvbmQgY2FsbCwgaXMgYGdlbmV2ZV9jb25maWdfZnJlZWAgc2FmZSBpZiBpdCYjMzk7cyBjYWxsZWQgdHdpY2U/IEkgY2FuJiMzOTt0IGltbWVkaWF0ZWx5IHJlY2FsbC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2VuZXZlX2NvbmZpZ19mcmVlYCB0byBiZSBzdXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGdvaW5nIHRvIGNhdXNlIGFueSBtZW1vcnkgY29ycnVwdGlvbiBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIGFpcnRpZ2h0IG9uIHRoaXMuIFRoaXMgZmVlbHMgbGlrZSBpdCBjb3VsZCBiZSBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5ldmVfY29uZmlnX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYz0xNzMxPXN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqZ2VuZXZlX2NvbmZpZ19hbGxvYyhjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqc3JjKVxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NDktXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzUwOnN0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZShzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnKVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc1MS17XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc1Ny1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjE3NTg6c3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzU5LXtcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzYxLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTc2MjpcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc2My19XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc2Nj1zdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzcwLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTc3MTpcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc3Mi1cdFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVx1MDAzZWNmZywgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjQwMT1zdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQyOS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI0MzA6XHRjYWxsX3JjdV9odXJyeShcdTAwMjZvbGRfY2ZnLVx1MDAzZXJjdSwgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdSk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDMxLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQzMy1lcnJfZnJlZV9jZmc6XG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyNDM0Olx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDM1LVx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgYGdlbmV2ZV9jb25maWdfZnJlZWAgZnVuY3Rpb246CgoqKkFuYWx5emluZyB0aGUgYGdlbmV2ZV9jb25maWdfZnJlZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBkaXNzZWN0IHRoaXMgYGdlbmV2ZV9jb25maWdfZnJlZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIHB1cnBvc2UgaXMuIEJhc2VkIG9uIHRoZSBuYW1lLCBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gZnJlZWluZyBtZW1vcnkgYWxsb2NhdGVkIGZvciBhIEdlbmV2ZSBjb25maWd1cmF0aW9uLiBJdOKAmXMgbGlrZWx5IGEgY2xlYW51cCBmdW5jdGlvbi4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBHZW5ldmUgaXMgbGlrZWx5IGEgcHJvdG9jb2wgaW52b2x2ZWQgaW4gdHVubmVsaW5nIG9yIG5ldHdvcmsgdmlydHVhbGl6YXRpb24sIHNvIGZyZWVpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcHJvYmFibHkgcHJldmVudHMgbWVtb3J5IGxlYWtzIGFuZCBlbnN1cmVzIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXJ0IG9mIHRoYXQgY29uZmlndXJhdGlvbi4gSSBleHBlY3QgaXQgaGFuZGxlcyBhbGxvY2F0ZWQgcG9pbnRlcnMgdG8gc3RydWN0dXJlcyBjb250YWluaW5nIGRldGFpbHMgbGlrZSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzc2VzLCBWTEFOIGluZm9ybWF0aW9uLCBvciBwZXJoYXBzIHNvbWUgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzLgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIGFueSBvdGhlciByZWxhdGVkIEdlbmV2ZSBmdW5jdGlvbnMuIERvZXMgaXQgY2FsbCBvdGhlciBjbGVhbnVwIG9yIGRlYWxsb2NhdGlvbiByb3V0aW5lcz8gQXJlIHRoZXJlIGFueSBwcmVjb25kaXRpb25zIGl0IGV4cGVjdHMsIGxpa2UgdGhlIGNvbmZpZ3VyYXRpb24gYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgdGhhdCBubyBvdGhlciBwcm9jZXNzIGlzIHN0aWxsIHV0aWxpemluZyB0aGUgY29uZmlnPyBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBJcyBpdCBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBvbiBhIG51bGwgcG9pbnRlciwgb3Igc2hvdWxkIHRoZSBjYWxsZXIgaGFuZGxlIHRoYXQgc2NlbmFyaW8/IFRoZSBzcGVjaWZpYyBlcnJvciBjb2RlcyB3b3VsZCBiZSByZWFsbHkgdXNlZnVsIHRvIG1lLgpNeSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBob3cgdG8gY29ycmVjdGx5IHVzZSBpdCB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIHNhZmVseSBhbmQgcHJldmVudCBlcnJvcnMuIEkgbmVlZCB0byBncmFzcCB0aGlzIGZ1bmN0aW9uIGxpa2UgSSBncmFzcCBhbnkgb3RoZXIgY3J1Y2lhbCBwaWVjZSBvZiBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc0NTpcdFx0fVxuMTc0NjpcdFxuMTc0NzpcdFx0cmV0dXJuIGNmZztcbjE3NDg6XHR9XG4xNzQ5Olx0XG4xNzUwOlx0c3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlKHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcpXG4xNzUxOlx0e1xuMTc1MjpcdFx0aWYgKGNmZykge1xuMTc1MzpcdFx0XHRkc3RfY2FjaGVfZGVzdHJveShcdTAwMjZjZmctXHUwMDNlaW5mby5kc3RfY2FjaGUpO1xuMTc1NDpcdFx0XHRrZnJlZShjZmcpO1xuMTc1NTpcdFx0fVxuMTc1NjpcdH1cbjE3NTc6XHRcbjE3NTg6XHRzdGF0aWMgdm9pZCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbjE3NTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZW5ldmUgRHJpdmVyJiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBnZW5ldmVfY29uZmlnX2ZyZWVgIGlzIGRvaW5nIHRoZSByaWdodCB0aGluZywgY2hlY2tpbmcgaWYgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnRlciBgY2ZnYCBpcyBub24tTlVMTCBiZWZvcmUgZnJlZWluZyBpdC4gU21hcnQuIEFuZCBJIHNlZSB0aGF0IGBnZW5ldmVfZnJlZV9kZXZgIGV4cGxpY2l0bHkgdXNlcyBgUkNVX0lOSVRfUE9JTlRFUihnZW5ldmUtJmd0O2NmZywgTlVMTCk7YCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnRlciB0byBOVUxMLiBUaGF0IG1lYW5zIGNhbGxpbmcgYGdlbmV2ZV9mcmVlX2RldmAgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgZGV2aWNlIGlzIHBlcmZlY3RseSBzYWZlLCB3aGljaCBpcyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gQnV0IGhvbGQgb24uLi4gd2h5IGRpZCB0aGF0IHBhdGNoIGluY2x1ZGUgYSBjYWxsIHRvIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgaW5zaWRlIGBnZW5ldmVfY29uZmlndXJlYD8gVGhhdCBzZWVtcyBwb3RlbnRpYWxseSByZWR1bmRhbnQgb3IgZXZlbi4uLiByaXNreT8gTGV0IG1lIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgYGdlbmV2ZV9jb25maWd1cmVgIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgdGhhdCBhcmUgYmVpbmcgaW50cm9kdWNlZCBvciBpbmFkdmVydGVudGx5IHJlc29sdmVkIGJ5IHRoYXQgYWRkaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTgwOlx0fVxuMTk4MTpcdFxuMTk4MjpcdHN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4xOTgzOlx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbjE5ODQ6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZylcbjE5ODU6XHR7XG4xOTg2Olx0XHRzdHJ1Y3QgZ2VuZXZlX25ldCAqZ24gPSBuZXRfZ2VuZXJpYyhuZXQsIGdlbmV2ZV9uZXRfaWQpO1xuMTk4NzpcdFx0c3RydWN0IGdlbmV2ZV9kZXYgKnQsICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTk4ODpcdFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Y2ZnLVx1MDAzZWluZm87XG4xOTg5Olx0XHRib29sIHR1bl9jb2xsZWN0X21kLCB0dW5fb25fc2FtZV9wb3J0O1xuMTk5MDpcdFx0c3RydWN0IGdlbmV2ZV9jb25maWcgKm5ld19jZmc7XG4xOTkxOlx0XHRpbnQgZXJyLCBlbmNhcF9sZW47XG4xOTkyOlx0XG4xOTkzOlx0XHRpZiAoY2ZnLVx1MDAzZWNvbGxlY3RfbWQgXHUwMDI2XHUwMDI2ICFpc190bmxfaW5mb196ZXJvKGluZm8pKSB7XG4xOTk0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbjE5OTU6XHRcdFx0XHQgICAgICAgXCYjMzQ7RGV2aWNlIGlzIGV4dGVybmFsbHkgY29udHJvbGxlZCwgc28gYXR0cmlidXRlcyAoVk5JLCBQb3J0LCBhbmQgc28gb24pIG11c3Qgbm90IGJlIHNwZWNpZmllZFwmIzM0Oyk7XG4xOTk2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTk5NzpcdFx0fVxuMTk5ODpcdFxuMTk5OTpcdFx0Z2VuZXZlLVx1MDAzZW5ldCA9IG5ldDtcbjIwMDA6XHRcdGdlbmV2ZS1cdTAwM2VkZXYgPSBkZXY7XG4yMDAxOlx0XG4yMDAyOlx0XHR0ID0gZ2VuZXZlX2ZpbmRfZGV2KGduLCBjZmcsIGluZm8sIFx1MDAyNnR1bl9vbl9zYW1lX3BvcnQsIFx1MDAyNnR1bl9jb2xsZWN0X21kKTtcbjIwMDM6XHRcdGlmICh0KVxuMjAwNDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjAwNTpcdFxuMjAwNjpcdFx0LyogbWFrZSBlbm91Z2ggaGVhZHJvb20gZm9yIGJhc2ljIHNjZW5hcmlvICovXG4yMDA3Olx0XHRlbmNhcF9sZW4gPSBHRU5FVkVfQkFTRV9ITEVOICYjNDM7IEVUSF9ITEVOO1xuMjAwODpcdFx0aWYgKCFjZmctXHUwMDNlY29sbGVjdF9tZCBcdTAwMjZcdTAwMjYgaXBfdHVubmVsX2luZm9fYWYoaW5mbykgPT0gQUZfSU5FVCkge1xuMjAwOTpcdFx0XHRlbmNhcF9sZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuMjAxMDpcdFx0XHRkZXYtXHUwMDNlbWF4X210dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbjIwMTE6XHRcdH0gZWxzZSB7XG4yMDEyOlx0XHRcdGVuY2FwX2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbjIwMTM6XHRcdFx0ZGV2LVx1MDAzZW1heF9tdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbjIwMTQ6XHRcdH1cbjIwMTU6XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBlbmNhcF9sZW4gJiM0MzsgRVRIX0hMRU47XG4yMDE2Olx0XG4yMDE3Olx0XHRpZiAoY2ZnLVx1MDAzZWNvbGxlY3RfbWQpIHtcbjIwMTg6XHRcdFx0aWYgKHR1bl9vbl9zYW1lX3BvcnQpIHtcbjIwMTk6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4yMDIwOlx0XHRcdFx0XHQgICAgICAgXCYjMzQ7VGhlcmUgY2FuIGJlIG9ubHkgb25lIGV4dGVybmFsbHkgY29udHJvbGxlZCBkZXZpY2Ugb24gYSBkZXN0aW5hdGlvbiBwb3J0IGFuZCBhIHNvdXJjZSBhZGRyZXNzXCYjMzQ7KTtcbjIwMjE6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjAyMjpcdFx0XHR9XG4yMDIzOlx0XHR9IGVsc2Uge1xuMjAyNDpcdFx0XHRpZiAodHVuX2NvbGxlY3RfbWQpIHtcbjIwMjU6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4yMDI2Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7VGhlcmUgYWxyZWFkeSBleGlzdHMgYW4gZXh0ZXJuYWxseSBjb250cm9sbGVkIGRldmljZSBvbiB0aGlzIGRlc3RpbmF0aW9uIHBvcnQgYW5kIHRoZSBzb3VyY2UgYWRkcmVzc1wmIzM0Oyk7XG4yMDI3Olx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjIwMjg6XHRcdFx0fVxuMjAyOTpcdFx0fVxuMjAzMDpcdFxuMjAzMTpcdFx0bmV3X2NmZyA9IGdlbmV2ZV9jb25maWdfYWxsb2MoY2ZnKTtcbjIwMzI6XHRcdGlmIChJU19FUlIobmV3X2NmZykpXG4yMDMzOlx0XHRcdHJldHVybiBQVFJfRVJSKG5ld19jZmcpO1xuMjAzNDpcdFxuMjAzNTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cdTAwM2VjZmcsIG5ld19jZmcpO1xuMjAzNjpcdFxuMjAzNzpcdFx0aWYgKGNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSB7XG4yMDM4Olx0XHRcdGRldi1cdTAwM2VoZWFkZXJfb3BzID0gTlVMTDtcbjIwMzk6XHRcdFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTk9ORTtcbjIwNDA6XHRcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IDA7XG4yMDQxOlx0XHRcdGRldi1cdTAwM2VhZGRyX2xlbiA9IDA7XG4yMDQyOlx0XHRcdGRldi1cdTAwM2VmbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDtcbjIwNDM6XHRcdH1cbjIwNDQ6XHRcbjIwNDU6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuMjA0NjpcdFx0aWYgKGVycikge1xuMjA0NzpcdFx0XHRnZW5ldmVfZnJlZV9kZXYoZGV2KTtcbjIwNDg6XHRcdFx0cmV0dXJuIGVycjtcbjIwNDk6XHRcdH1cbjIwNTA6XHRcbjIwNTE6XHRcdGxpc3RfYWRkKFx1MDAyNmdlbmV2ZS1cdTAwM2VuZXh0LCBcdTAwMjZnbi1cdTAwM2VnZW5ldmVfbGlzdCk7XG4yMDUyOlx0XHRyZXR1cm4gMDtcbjIwNTM6XHR9XG4yMDU0Olx0XG4yMDU1Olx0c3RhdGljIHZvaWQgaW5pdF90bmxfaW5mbyhzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sIF9fdTE2IGRzdF9wb3J0KVxuMjA1NjpcdHtcbjIwNTc6XHRcdG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTtcbjIwNTg6XHRcdGluZm8tXHUwMDNla2V5LnRwX2RzdCA9IGh0b25zKGRzdF9wb3J0KTtcbjIwNTk6XHR9XG4yMDYwOlx0XG4yMDYxOlx0c3RhdGljIGludCBnZW5ldmVfbmwyaW5mbyhzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4yMDYyOlx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4yMDYzOlx0XHRcdFx0ICBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGNoYW5nZWxpbmspXG4yMDY0Olx0e1xuMjA2NTpcdFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Y2ZnLVx1MDAzZWluZm87XG4yMDY2Olx0XHRpbnQgYXR0cnR5cGU7XG4yMDY3Olx0XG4yMDY4Olx0XHRpZiAoZGF0YVtJRkxBX0dFTkVWRV9DT0xMRUNUX01FVEFEQVRBXSkge1xuMjA2OTpcdFx0XHRpZiAoY2hhbmdlbGluaykge1xuMjA3MDpcdFx0XHRcdGF0dHJ0eXBlID0gSUZMQV9HRU5FVkVfQ09MTEVDVF9NRVRBREFUQTtcbjIwNzE6XHRcdFx0XHRnb3RvIGNoYW5nZV9ub3RzdXA7XG4yMDcyOlx0XHRcdH1cbjIwNzM6XHRcbjIwNzQ6XHRcdFx0Y2ZnLVx1MDAzZWNvbGxlY3RfbWQgPSB0cnVlO1xuMjA3NTpcdFx0XHRjZmctXHUwMDNlZHVhbHN0YWNrID0gdHJ1ZTtcbjIwNzY6XHRcdH1cbjIwNzc6XHRcbjIwNzg6XHRcdGlmICgoZGF0YVtJRkxBX0dFTkVWRV9MT0NBTF0gfHwgZGF0YVtJRkxBX0dFTkVWRV9SRU1PVEVdKSBcdTAwMjZcdTAwMjZcbjIwNzk6XHRcdCAgICAoZGF0YVtJRkxBX0dFTkVWRV9MT0NBTDZdIHx8IGRhdGFbSUZMQV9HRU5FVkVfUkVNT1RFNl0pKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIGNydXggb2YgdGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLgoKKipIYW5kbGluZyBOZXR3b3JrIERldmljZSBSZWdpc3RyYXRpb24gRmFpbHVyZSoqCgpTbywgaWYgYHJlZ2lzdGVyX25ldGRldmljZWAgYml0ZXMgdGhlIGR1c3QsIHRoZSBmdW5jdGlvbiBgZ2VuZXZlX2NvbmZpZ3VyZWAgaW1tZWRpYXRlbHkgcmV0dXJucyBhbiBlcnJvci4gTm8gc3VycHJpc2VzIHRoZXJlOyB0aGF0JiMzOTtzIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBmYWlsdXJlIHNjZW5hcmlvIGNvbXBsZXRlbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSB0aGlzIGVycm9yIG9yaWdpbmF0ZXMsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBnZW5ldmVfZGV2X2NyZWF0ZV9mYmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHNlZSBleGFjdGx5IGhvdyBhbmQgd2h5IGBnZW5ldmVfY29uZmlndXJlYCBpcyBiZWluZyBzdG9wcGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGNhdXNpbmcgdGhhdCBpbml0aWFsIHJlZ2lzdHJhdGlvbiB0byBmYWx0ZXIgYW5kIHByb3BhZ2F0ZSB0aGUgZXJyb3IgdGhyb3VnaCB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2dlbmV2ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU5MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTkyOlx0c3RydWN0IG5ldF9kZXZpY2UgKmdlbmV2ZV9kZXZfY3JlYXRlX2ZiKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcbjI1OTM6XHRcdFx0XHRcdFx0dTggbmFtZV9hc3NpZ25fdHlwZSwgdTE2IGRzdF9wb3J0KVxuMjU5NDpcdHtcbjI1OTU6XHRcdHN0cnVjdCBubGF0dHIgKnRiW0lGTEFfTUFYICYjNDM7IDFdO1xuMjU5NjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjI1OTc6XHRcdExJU1RfSEVBRChsaXN0X2tpbGwpO1xuMjU5ODpcdFx0aW50IGVycjtcbjI1OTk6XHRcdHN0cnVjdCBnZW5ldmVfY29uZmlnIGNmZyA9IHtcbjI2MDA6XHRcdFx0LmRmID0gR0VORVZFX0RGX1VOU0VULFxuMjYwMTpcdFx0XHQudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gdHJ1ZSxcbjI2MDI6XHRcdFx0LnR0bF9pbmhlcml0ID0gZmFsc2UsXG4yNjAzOlx0XHRcdC5jb2xsZWN0X21kID0gdHJ1ZSxcbjI2MDQ6XHRcdFx0LmR1YWxzdGFjayA9IHRydWUsXG4yNjA1Olx0XHRcdC5wb3J0X21pbiA9IDEsXG4yNjA2Olx0XHRcdC5wb3J0X21heCA9IFVTSFJUX01BWCxcbjI2MDc6XHRcdH07XG4yNjA4Olx0XG4yNjA5Olx0XHRtZW1zZXQodGIsIDAsIHNpemVvZih0YikpO1xuMjYxMDpcdFx0ZGV2ID0gcnRubF9jcmVhdGVfbGluayhuZXQsIG5hbWUsIG5hbWVfYXNzaWduX3R5cGUsXG4yNjExOlx0XHRcdFx0ICAgICAgIFx1MDAyNmdlbmV2ZV9saW5rX29wcywgdGIsIE5VTEwpO1xuMjYxMjpcdFx0aWYgKElTX0VSUihkZXYpKVxuMjYxMzpcdFx0XHRyZXR1cm4gZGV2O1xuMjYxNDpcdFxuMjYxNTpcdFx0aW5pdF90bmxfaW5mbyhcdTAwMjZjZmcuaW5mbywgZHN0X3BvcnQpO1xuMjYxNjpcdFx0ZXJyID0gZ2VuZXZlX2NvbmZpZ3VyZShuZXQsIGRldiwgTlVMTCwgXHUwMDI2Y2ZnKTtcbjI2MTc6XHRcdGlmIChlcnIpIHtcbjI2MTg6XHRcdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbjI2MTk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI2MjA6XHRcdH1cbjI2MjE6XHRcbjI2MjI6XHRcdC8qIG9wZW52c3dpdGNoIHVzZXJzIGV4cGVjdCBwYWNrZXQgc2l6ZXMgdG8gYmUgdW5yZXN0cmljdGVkLFxuMjYyMzpcdFx0ICogc28gc2V0IHRoZSBsYXJnZXN0IE1UVSB3ZSBjYW4uXG4yNjI0Olx0XHQgKi9cbjI2MjU6XHRcdGVyciA9IGdlbmV2ZV9jaGFuZ2VfbXR1KGRldiwgSVBfTUFYX01UVSk7XG4yNjI2Olx0XHRpZiAoZXJyKVxuMjYyNzpcdFx0XHRnb3RvIGVycjtcbjI2Mjg6XHRcbjI2Mjk6XHRcdGVyciA9IHJ0bmxfY29uZmlndXJlX2xpbmsoZGV2LCBOVUxMLCAwLCBOVUxMKTtcbjI2MzA6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yNjMxOlx0XHRcdGdvdG8gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2VuZXZlIERldmljZSBMaWZlY3ljbGUgYW5kIFJlc291cmNlIE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGdlbmV2ZV9kZXZfY3JlYXRlX2ZiYCwgaWYgYGdlbmV2ZV9jb25maWd1cmVgIGZhaWxzLCB0aGUgY29kZSBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXM6ICYjMzQ7V2FpdCwgYGZyZWVfbmV0ZGV2YCB3aWxsIGNhbGwgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYCwgd2hpY2ggaXMgYGdlbmV2ZV9mcmVlX2RldmAuJiMzNDsgQnV0IHRoZW4gSSByZW1lbWJlcmVkOiBgZ2VuZXZlX2NvbmZpZ3VyZWAgKml0c2VsZiogY2FsbHMgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBkaXJlY3RseSAqYmVmb3JlKiBgZnJlZV9uZXRkZXZgIHBvdGVudGlhbGx5IGNhbGxzIGl0IGFnYWluLiBJcyB0aGF0IGRvdWJsZS1mcmVlIHNhZmU/IFllcywgYmVjYXVzZSBgZ2VuZXZlX2ZyZWVfZGV2YCBzZXRzIGBnZW5ldmUtJmd0O2NmZ2AgdG8gTlVMTCwgc28gdGhlIHNlY29uZCBjYWxsIGlzIGhhcm1sZXNzLgoKTm93LCB3aHkgd2FzIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgZXZlbiBhZGRlZCBpbiBgZ2VuZXZlX2NvbmZpZ3VyZWA/IFRoZSByZWFzb24gbXVzdCBiZSByZWxhdGVkIHRvIGZhaWx1cmVzIGluIHRoZSBkZXZpY2UgY3JlYXRpb24gcHJvY2Vzcy4gSSBmaWd1cmVkIGl0IG91dC4uLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIGZhaWxzLCBgZnJlZV9uZXRkZXYoZGV2KWAgaXMgY2FsbGVkLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBjb3VsZCBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBpdHNlbGYgY2FsbCBgZnJlZV9uZXRkZXZgIG9uIGZhaWx1cmU/IE5vLCBpdCBkb2VzbiYjMzk7dC4KCk5vdywgaWYgYGdlbmV2ZV9jb25maWd1cmVgIGlzIGNhbGxlZCBmcm9tIGBnZW5ldmVfbmV3bGlua2A6IEkga25vdyB0aGF0IGBnZW5ldmVfbmV3bGlua2AgaXMgaXRzZWxmIGNhbGxlZCBieSBgcnRubF9uZXdsaW5rYC4gSWYgYG5ld2xpbmtgIGZhaWxzLCBgcnRubF9uZXdsaW5rYCBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAuIEkgbmVlZCB0byBiZSBzdXJlLiBJZiBgZnJlZV9uZXRkZXYoZGV2KWAgaXMgY2FsbGVkLCBpdCB3aWxsIGNhbGwgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHNldCB1cCBjb3JyZWN0bHkuIE5vdywgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYCBpcyBhc3NpZ25lZCBpbiBgZ2VuZXZlX3NldHVwYC4KClNwZWNpZmljYWxseSwgYGdlbmV2ZV9zZXR1cGAgc2V0cyBgZGV2LSZndDtwcml2X2Rlc3RydWN0b3IgPSBnZW5ldmVfZnJlZV9kZXY7YCBhbmQgYGRldi0mZ3Q7bmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO2AuIFNvLCBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgYGRldi0mZ3Q7cmVnX3N0YXRlYCBpcyBgTkVUUkVHX1VOSU5JVElBTElaRURgLiBXaGVuIGBmcmVlX25ldGRldmAgaXMgY2FsbGVkLCBpdCBjaGVja3MgYGRldi0mZ3Q7cmVnX3N0YXRlYC4gSWYgYGRldi0mZ3Q7cmVnX3N0YXRlID09IE5FVFJFR19VTklOSVRJQUxJWkVEYCwgaXQgY2FsbHMgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yKGRldilgLiBUaGlzIGhhbmRsZXMgdGhlIGxpZmVjeWNsZSBjb3JyZWN0bHkuCgpPa2F5LCBzbyBpZiBgZGV2LSZndDtwcml2X2Rlc3RydWN0b3JgIGlzIGNhbGxlZCwgaXQgd2lsbCBmcmVlIGBnZW5ldmUtJmd0O2NmZ2AuIFdlIGFyZSBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQuIEJ1dCBub3cgSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmc6IHNvIHdoeSBkaWQgdGhlIHBhdGNoIGFkZCBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGluIGBnZW5ldmVfY29uZmlndXJlYD8gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgZ2VuZXZlX2NvbmZpZ3VyZWAgYWxsb2NhdGVzIGBuZXdfY2ZnYCBhbmQgYXNzaWducyBpdCB0byBgZ2VuZXZlLSZndDtjZmdgLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgYGdlbmV2ZS0mZ3Q7Y2ZnYCAqY291bGQqIGJlIHNldCB0byBhIHZhbGlkIGFkZHJlc3MuIElmIGBnZW5ldmVfY29uZmlndXJlYCBpcyBjYWxsZWQgZnJvbSBgZ2VuZXZlX25ld2xpbmtgLCBhbmQgaXQgZmFpbHMsIGBydG5sX25ld2xpbmtgIHdpbGwgY2FsbCBgZnJlZV9uZXRkZXYoZGV2KWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSWYgYHJ0bmxfbmV3bGlua2AgY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgLCBpdCB3aWxsIGNhbGwgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYCwgd2hpY2ggaXMgYGdlbmV2ZV9mcmVlX2RldmAsIHdoaWNoIHdpbGwgZnJlZSBgZ2VuZXZlLSZndDtjZmdgLiBUaGlzIGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiB0aGUgY29uZmlnIHN0cnVjdC4gTm93IEkgc2VlIHRoYXQgYGdlbmV2ZV9mcmVlX2RldmAgaXMgbmVlZGVkLiBOb3cgSSBzaG91bGQgY2hlY2sgYHJ0bmxfbmV3bGlua2AgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRubF9uZXdsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmM9MzgxND1FWFBPUlRfU1lNQk9MKHJ0bmxfY3JlYXRlX2xpbmspO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzgxNS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjM4MTY6c3RydWN0IHJ0bmxfbmV3bGlua190YnMge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzgxNy1cdHN0cnVjdCBubGF0dHIgKnRiW0lGTEFfTUFYICYjNDM7IDFdO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTM4MjM9c3RhdGljIGludCBydG5sX2NoYW5nZWxpbmsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzgyNS1cdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICp0Z3RfbmV0LFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzgyNjpcdFx0XHQgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3RicyAqdGJzLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzgyNy1cdFx0XHQgICBzdHJ1Y3QgbmxhdHRyICoqZGF0YSxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zODg4PXN0YXRpYyBpbnQgcnRubF9ncm91cF9jaGFuZ2VsaW5rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzkwNy1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjM5MDg6c3RhdGljIGludCBydG5sX25ld2xpbmtfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZmluZm9tc2cgKmlmbSxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5MDktXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzkxNi1cdHVuc2lnbmVkIGNoYXIgbmFtZV9hc3NpZ25fdHlwZSA9IE5FVF9OQU1FX1VTRVI7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzozOTE3Olx0c3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgcGFyYW1zID0ge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzkxOC1cdFx0LnNyY19uZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTM5ODI9c3RhdGljIHN0cnVjdCBuZXQgKnJ0bmxfZ2V0X3BlZXJfbmV0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDAxOS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQwMjA6c3RhdGljIGludCBfX3J0bmxfbmV3bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwMjEtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwMjMtXHRcdFx0ICBzdHJ1Y3QgbmV0ICpwZWVyX25ldCxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQwMjQ6XHRcdFx0ICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3RicyAqdGJzLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDAyNS1cdFx0XHQgIHN0cnVjdCBubGF0dHIgKipkYXRhLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwNzctXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MDc4Olx0cmV0dXJuIHJ0bmxfbmV3bGlua19jcmVhdGUoc2tiLCBpZm0sIG9wcywgdGd0X25ldCwgbGlua19uZXQsIHBlZXJfbmV0LCBubGgsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDc5LVx0XHRcdFx0ICAgdGIsIGRhdGEsIGV4dGFjayk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDA4MS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQwODI6c3RhdGljIGludCBydG5sX25ld2xpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDgzLVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDg3LVx0c3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyA9IE5VTEw7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MDg4Olx0c3RydWN0IHJ0bmxfbmV3bGlua190YnMgKnRicztcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwODktXHRzdHJ1Y3QgcnRubF9uZXRzIHJ0bmxfbmV0cztcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MTk0LVx0cnRubF9uZXRzX2xvY2soXHUwMDI2cnRubF9uZXRzKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQxOTU6XHRyZXQgPSBfX3J0bmxfbmV3bGluayhza2IsIG5saCwgb3BzLCB0Z3RfbmV0LCBsaW5rX25ldCwgcGVlcl9uZXQsIHRicywgZGF0YSwgZXh0YWNrKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQxOTYtXHRydG5sX25ldHNfdW5sb2NrKFx1MDAyNnJ0bmxfbmV0cyk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDQwMj1zdGF0aWMgaW50IHJ0bmxfbGlua3Byb3AoaW50IGNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDQ0OS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ0NTA6c3RhdGljIGludCBydG5sX25ld2xpbmtwcm9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDQ1MS1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTcyMTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzIxNTpcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LLCAuZG9pdCA9IHJ0bmxfbmV3bGluayxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyMTYtXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfUEVSTkVUfSxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjMxLVx0ey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjcyMzI6XHR7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjMzLVx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcyMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBydG5sX25ld2xpbmtfY3JlYXRlYCoqCgpPa2F5LCBzbyB0aGUgbWVudGFsIGZvY3VzIGhlcmUgaXMgdG8gZXhhbWluZSB0aGUgYHJ0bmxfbmV3bGlua19jcmVhdGVgIGZ1bmN0aW9uLiBJIGltbWVkaWF0ZWx5IGtub3cgdGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIG5ldyBuZXR3b3JrIGxpbmtzIHZpYSB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZS4gVGhlIGNob2ljZSBvZiBgcnRubF9uZXdsaW5rX2NyZWF0ZWAgZnJvbSB0aGUgYG5ldC9jb3JlL3J0bmV0bGluay5jYCBmaWxlIGlzIHRlbGxpbmc7IGl0IHNpZ25hbHMgYSBkZXNpcmUgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBtZWNoYW5pc20gZm9yIGJyaW5naW5nIHVwIGEgbmV3IGludGVyZmFjZSwgbGlrZWx5IHRvIHRyb3VibGVzaG9vdCBvciBhbmFseXplIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGNvbXBvbmVudHMuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCB0aGUgZGF0YSBwYXJzaW5nLCB2YWxpZGF0aW9uLCBhbmQgdWx0aW1hdGVseSwgdGhlIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24gdGhhdCB0YWtlcyBwbGFjZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCwgZXJyb3IgY29uZGl0aW9ucywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgYW55IG5ldyBidWdzIGhhdmUgY3JlcHQgaW4gcmVjZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5MDg6XHRzdGF0aWMgaW50IHJ0bmxfbmV3bGlua19jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlmaW5mb21zZyAqaWZtLFxuMzkwOTpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzLFxuMzkxMDpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0ICp0Z3RfbmV0LCBzdHJ1Y3QgbmV0ICpsaW5rX25ldCxcbjM5MTE6XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldCAqcGVlcl9uZXQsXG4zOTEyOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuMzkxMzpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKipkYXRhLFxuMzkxNDpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4zOTE1Olx0e1xuMzkxNjpcdFx0dW5zaWduZWQgY2hhciBuYW1lX2Fzc2lnbl90eXBlID0gTkVUX05BTUVfVVNFUjtcbjM5MTc6XHRcdHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zIHBhcmFtcyA9IHtcbjM5MTg6XHRcdFx0LnNyY19uZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spLFxuMzkxOTpcdFx0XHQubGlua19uZXQgPSBsaW5rX25ldCxcbjM5MjA6XHRcdFx0LnBlZXJfbmV0ID0gcGVlcl9uZXQsXG4zOTIxOlx0XHRcdC50YiA9IHRiLFxuMzkyMjpcdFx0XHQuZGF0YSA9IGRhdGEsXG4zOTIzOlx0XHR9O1xuMzkyNDpcdFx0dTMyIHBvcnRpZCA9IE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQ7XG4zOTI1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuMzkyNjpcdFx0Y2hhciBpZm5hbWVbSUZOQU1TSVpdO1xuMzkyNzpcdFx0aW50IGVycjtcbjM5Mjg6XHRcbjM5Mjk6XHRcdGlmICghb3BzLVx1MDAzZWFsbG9jIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZXNldHVwKVxuMzkzMDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4zOTMxOlx0XG4zOTMyOlx0XHRpZiAodGJbSUZMQV9JRk5BTUVdKSB7XG4zOTMzOlx0XHRcdG5sYV9zdHJzY3B5KGlmbmFtZSwgdGJbSUZMQV9JRk5BTUVdLCBJRk5BTVNJWik7XG4zOTM0Olx0XHR9IGVsc2Uge1xuMzkzNTpcdFx0XHRzbnByaW50ZihpZm5hbWUsIElGTkFNU0laLCBcJiMzNDslcyUlZFwmIzM0Oywgb3BzLVx1MDAzZWtpbmQpO1xuMzkzNjpcdFx0XHRuYW1lX2Fzc2lnbl90eXBlID0gTkVUX05BTUVfRU5VTTtcbjM5Mzc6XHRcdH1cbjM5Mzg6XHRcbjM5Mzk6XHRcdGRldiA9IHJ0bmxfY3JlYXRlX2xpbmsodGd0X25ldCwgaWZuYW1lLCBuYW1lX2Fzc2lnbl90eXBlLCBvcHMsIHRiLFxuMzk0MDpcdFx0XHRcdCAgICAgICBleHRhY2spO1xuMzk0MTpcdFx0aWYgKElTX0VSUihkZXYpKSB7XG4zOTQyOlx0XHRcdGVyciA9IFBUUl9FUlIoZGV2KTtcbjM5NDM6XHRcdFx0Z290byBvdXQ7XG4zOTQ0Olx0XHR9XG4zOTQ1Olx0XG4zOTQ2Olx0XHRkZXYtXHUwMDNlaWZpbmRleCA9IGlmbS1cdTAwM2VpZmlfaW5kZXg7XG4zOTQ3Olx0XG4zOTQ4Olx0XHRpZiAob3BzLVx1MDAzZW5ld2xpbmspXG4zOTQ5Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZXdsaW5rKGRldiwgXHUwMDI2cGFyYW1zLCBleHRhY2spO1xuMzk1MDpcdFx0ZWxzZVxuMzk1MTpcdFx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbjM5NTI6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjM5NTM6XHRcdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbjM5NTQ6XHRcdFx0Z290byBvdXQ7XG4zOTU1Olx0XHR9XG4zOTU2Olx0XG4zOTU3Olx0XHRlcnIgPSBydG5sX2NvbmZpZ3VyZV9saW5rKGRldiwgaWZtLCBwb3J0aWQsIG5saCk7XG4zOTU4Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMzk1OTpcdFx0XHRnb3RvIG91dF91bnJlZ2lzdGVyO1xuMzk2MDpcdFx0aWYgKHRiW0lGTEFfTUFTVEVSXSkge1xuMzk2MTpcdFx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbjM5NjI6XHRcdFx0ZXJyID0gZG9fc2V0X21hc3RlcihkZXYsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTUFTVEVSXSksIGV4dGFjayk7XG4zOTYzOlx0XHRcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4zOTY0Olx0XHRcdGlmIChlcnIpXG4zOTY1Olx0XHRcdFx0Z290byBvdXRfdW5yZWdpc3RlcjtcbjM5NjY6XHRcdH1cbjM5Njc6XHRcbjM5Njg6XHRvdXQ6XG4zOTY5Olx0XHRyZXR1cm4gZXJyO1xuMzk3MDpcdG91dF91bnJlZ2lzdGVyOlxuMzk3MTpcdFx0aWYgKG9wcy1cdTAwM2VuZXdsaW5rKSB7XG4zOTcyOlx0XHRcdExJU1RfSEVBRChsaXN0X2tpbGwpO1xuMzk3MzpcdFxuMzk3NDpcdFx0XHRvcHMtXHUwMDNlZGVsbGluayhkZXYsIFx1MDAyNmxpc3Rfa2lsbCk7XG4zOTc1Olx0XHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2bGlzdF9raWxsKTtcbjM5NzY6XHRcdH0gZWxzZSB7XG4zOTc3Olx0XHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkdlbmV2ZSBEZXZpY2UgQ3JlYXRpb24gYW5kIENsZWFudXA6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IEdlbmV2ZSBkZXZpY2VzIGFyZSBjcmVhdGVkIGFuZCBzdWJzZXF1ZW50bHkgY2xlYW5lZCB1cCBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuIFJpZ2h0LCBzbyBgcnRubF9uZXdsaW5rX2NyZWF0ZWAgY2FsbHMgdGhlIGBuZXdsaW5rYCBvcGVyYXRpb24sIHdoaWNoIGluIG91ciBjYXNlIGlzIGBnZW5ldmVfbmV3bGlua2AuIElmIGBnZW5ldmVfbmV3bGlua2AgcnVucyBpbnRvIHRyb3VibGUsIGl0IHJldHVybnMgYW4gZXJyb3IgYW5kIHRoZSBrZXJuZWwgY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgLiBUaGF0IG1ha2VzIHNlbnNlLgoKTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIElmIGBnZW5ldmVfY29uZmlndXJlYCBmYWlscywgaXQgY2FsbHMgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBkaXJlY3RseSBhbmQgcmV0dXJucyBhbiBlcnJvci4gVGhpcyBwcm9wYWdhdGVzIHVwIHRvIGBnZW5ldmVfbmV3bGlua2AsIHdoaWNoIHRoZW4gYWxzbyByZXR1cm5zIGFuIGVycm9yLCBhbmQgZmluYWxseSBgcnRubF9uZXdsaW5rX2NyZWF0ZWAgY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgLiBTbywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUgZmFpbHVyZSBpcywgYGZyZWVfbmV0ZGV2KGRldilgIGdldHMgY2FsbGVkIGV2ZW50dWFsbHkuCgpgZnJlZV9uZXRkZXYoZGV2KWAgdGhlbiBjYWxscyBgZGV2LSZndDtwcml2X2Rlc3RydWN0b3IoZGV2KWAsIHdoaWNoIGluIG91ciBjYXNlICppcyogYGdlbmV2ZV9mcmVlX2RldihkZXYpYC4gQnV0IHdhaXQsIGRvZXMgdGhpcyBtZWFuIGBnZW5ldmVfZnJlZV9kZXZgIGNvdWxkIGJlIGNhbGxlZCB0d2ljZSBpbiBzb21lIHNjZW5hcmlvcz8gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHNhZmUuCgpBaCwgSSBzZWUhIGBnZW5ldmVfZnJlZV9kZXZgIHVzZXMgYFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLSZndDtjZmcsIE5VTEwpO2AgYW5kIGBnZW5ldmVfY29uZmlnX2ZyZWVgIGNoZWNrcyBmb3IgTlVMTC4gVGhhdCBzaG91bGQgcHJldmVudCBhbnkgZG91YmxlLWZyZWUgaXNzdWVzLCBldmVuIGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCgpCdXQgKndoeSogd2FzIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgYWRkZWQgaW4gYGdlbmV2ZV9jb25maWd1cmVgIGluIHRoZSBmaXJzdCBwbGFjZT8gTGV0IG1lIHJldHJhY2UgbXkgc3RlcHMuIE9oLCByaWdodCwgYGdlbmV2ZV9jb25maWd1cmVgIHVzZXMgYHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtJmd0O2NmZywgbmV3X2NmZyk7YCBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIGZhaWxzLCBgZ2VuZXZlX2NvbmZpZ3VyZWAgcmV0dXJucyBhbiBlcnJvci4gSWYgd2UgY2FsbCBpdCBmcm9tIGBnZW5ldmVfZGV2X2NyZWF0ZV9mYmAsIGl0IGFsc28gY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgIG9uIGVycm9yLiBTbyB0aGUgbmV0IGVmZmVjdCBpcywgaW4gZWl0aGVyIGVycm9yIHBhdGggYGZyZWVfbmV0ZGV2KGRldilgIGdldHMgY2FsbGVkLiBUaGlzIG1lYW5zIHRoYXQgKnJlZ2FyZGxlc3MqIG9mIHdoZXRoZXIgdGhlIGVycm9yIG9yaWdpbmF0ZXMgZHVyaW5nIGNvbmZpZ3VyYXRpb24gb3IgZHVyaW5nIHRoZSBpbml0aWFsIGRldmljZSBzZXR1cCwgd2UmIzM5O3JlIGd1YXJhbnRlZWQgdG8gZnJlZSB0aGUgZGV2aWNlIGNvcnJlY3RseS4KCk9rYXksIHNvIGBmcmVlX25ldGRldihkZXYpYCBjYWxscyBgZGV2LSZndDtwcml2X2Rlc3RydWN0b3JgLCB3aGljaCBpcyBgZ2VuZXZlX2ZyZWVfZGV2YC4gQWxyaWdodCwgSSB0aGluayBJJiMzOTt2ZSBnb3QgaXQuIEkgbmVlZCB0byByZXZpc2l0IGBnZW5ldmVfZnJlZV9kZXZgIG5vdywgYW5kIG1ha2Ugc3VyZSB0aGF0IGFueSBSQ1UgaXNzdWVzIGFyZSBhY2NvdW50ZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2dlbmV2ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzY1Olx0LyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi9cbjE3NjY6XHRzdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjE3Njc6XHR7XG4xNzY4Olx0XHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjE3Njk6XHRcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGdlbmV2ZS1cdTAwM2VjZmcsIDEpO1xuMTc3MDpcdFxuMTc3MTpcdFx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XG4xNzcyOlx0XHRSQ1VfSU5JVF9QT0lOVEVSKGdlbmV2ZS1cdTAwM2VjZmcsIE5VTEwpO1xuMTc3MzpcdH1cbjE3NzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqR2VuZXZlIERldmljZSBMaWZlY3ljbGUgLSBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBHZW5ldmUgZGV2aWNlIGRyaXZlciBhbmQgc29tZXRoaW5nIGlzbiYjMzk7dCBxdWl0ZSBjbGlja2luZy4gSWYgYGdlbmV2ZV9mcmVlX2RldmAgaXMgY2FsbGVkIGZyb20gYGZyZWVfbmV0ZGV2YCwgd2hpY2ggaXQgaXMsIHRoZW4gaXQgKnNob3VsZCogZnJlZSBgZ2VuZXZlLSZndDtjZmdgLiBTbywgd2h5IHdhcyBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGFkZGVkIGluIGBnZW5ldmVfY29uZmlndXJlYD8gU29tZXRoaW5nIHNlZW1zIHJlZHVuZGFudCBoZXJlLgoKTGV0IG1lIHF1aWNrbHkgY2hlY2sgYHJlZ2lzdGVyX25ldGRldmljZWAuLi4gZG9lcyBpdCB0cmlnZ2VyIGEgY2FsbCB0byBgZnJlZV9uZXRkZXZgPyBBaCwgbm8sIGl0IGRvZXNuJiMzOTt0IGRpcmVjdGx5IGNhbGwgYGZyZWVfbmV0ZGV2YC4gT2theSwgc28gd2UgbmVlZCB0byBsb29rIGRlZXBlci4gV2FpdCBhIG1pbnV0ZeKApiBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgdGhlIGBkZXYtJmd0O3JlZ19zdGF0ZWAgaXMgc2V0IHRvIGBORVRSRUdfVU5JTklUSUFMSVpFRGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50ISBJZiBgZGV2LSZndDtyZWdfc3RhdGVgICppcyogYE5FVFJFR19VTklOSVRJQUxJWkVEYCwgdGhlbiBgZnJlZV9uZXRkZXZgICp3aWxsKiBjYWxsIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAuIFRoYXQmIzM5O3Mgd2hlcmUgaXQgaGFwcGVucy4KClNvIHRoZSBkZXN0cnVjdG9yIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCB0aGUgYGdlbmV2ZS0mZ3Q7Y2ZnYCBidXQgdGhlIGZ1bmN0aW9uIGBnZW5ldmVfZnJlZV9kZXZgIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgYXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgoKSGFuZyBvbuKApiB3aGF0IGlmIGBkZXYtJmd0O25lZWRzX2ZyZWVfbmV0ZGV2YCBpcyBzZXQgdG8gdHJ1ZT8gVGhpcyBjb3VsZCBiZSBhIGZhY3Rvci4gTmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZnJlZV9uZXRkZXZgIGluIGBuZXQvY29yZS9kZXYuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmVlX25ldGRldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTExMzMyPWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTQ5Mi1cdGlmIChyZXQpIHtcbm5ldC9jb3JlL2Rldi5jOjExNDkzOlx0XHQvKiBFeHBlY3QgZXhwbGljaXQgZnJlZV9uZXRkZXYoKSBvbiBmYWlsdXJlICovXG5uZXQvY29yZS9kZXYuYzoxMTQ5NDpcdFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gZmFsc2U7XG5uZXQvY29yZS9kZXYuYy0xMTQ5NS1cdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBOVUxMKTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTYwNT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTE2ODgtICpcdHJ0bmxfdW5sb2NrKCk7XG5uZXQvY29yZS9kZXYuYzoxMTY4OTogKlx0ZnJlZV9uZXRkZXYoeTEpO1xubmV0L2NvcmUvZGV2LmM6MTE2OTA6ICpcdGZyZWVfbmV0ZGV2KHkyKTtcbm5ldC9jb3JlL2Rldi5jLTExNjkxLSAqXG4tLVxubmV0L2NvcmUvZGV2LmM9MTE3MDI9dm9pZCBuZXRkZXZfcnVuX3RvZG8odm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTc1OC1cdFx0XHRkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yKGRldik7XG5uZXQvY29yZS9kZXYuYzoxMTc1OTpcdFx0aWYgKGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldilcbm5ldC9jb3JlL2Rldi5jOjExNzYwOlx0XHRcdGZyZWVfbmV0ZGV2KGRldik7XG5uZXQvY29yZS9kZXYuYy0xMTc2MS1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMjA0MT1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIxNjYtZnJlZV9hbGw6XG5uZXQvY29yZS9kZXYuYzoxMjE2NzpcdGZyZWVfbmV0ZGV2KGRldik7XG5uZXQvY29yZS9kZXYuYy0xMjE2OC1cdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyMTgwPXN0YXRpYyB2b2lkIG5ldGRldl9uYXBpX2V4aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjE5Ni0vKipcbm5ldC9jb3JlL2Rldi5jOjEyMTk3OiAqIGZyZWVfbmV0ZGV2IC0gZnJlZSBuZXR3b3JrIGRldmljZVxubmV0L2NvcmUvZGV2LmMtMTIxOTgtICogQGRldjogZGV2aWNlXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIyMDQtICovXG5uZXQvY29yZS9kZXYuYzoxMjIwNTp2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXYuYy0xMjIwNi17XG4tLVxubmV0L2NvcmUvZGV2LmMtMTIyMTQtXHRcdEFTU0VSVF9SVE5MKCk7XG5uZXQvY29yZS9kZXYuYzoxMjIxNTpcdFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbm5ldC9jb3JlL2Rldi5jLTEyMjE2LVx0XHRyZXR1cm47XG4tLVxubmV0L2NvcmUvZGV2LmMtMTIyNjItfVxubmV0L2NvcmUvZGV2LmM6MTIyNjM6RVhQT1JUX1NZTUJPTChmcmVlX25ldGRldik7XG5uZXQvY29yZS9kZXYuYy0xMjI2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGByZWdpc3Rlcl9uZXRkZXZpY2VgIEZhaWx1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHJlZ2lzdGVyX25ldGRldmljZWAgZnVuY3Rpb24gYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyYjMzk7cyBjYXRjaGluZyBteSBleWUuIElmIGl0IHJldHVybnMgYW4gZXJyb3IsIGl0IHNldHMgYGRldi0mZ3Q7bmVlZHNfZnJlZV9uZXRkZXYgPSBmYWxzZTtgIGFuZCB0aGVuIGNhbGxzIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZWAuIFRoYXQgc2VlbXMgY291bnRlcmludHVpdGl2ZSBhdCBmaXJzdCwgZG9lc24mIzM5O3QgaXQ/IEl0IGltcGxpZXMgdGhhdCBpZiBpdCBmYWlscywgdGhlIGRldmljZSBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGZyZWVkIGJ5IHRoZSBzdGFuZGFyZCBtZWFucy4gQnV0IHRoZW4sIEkgcmVtZW1iZXIgdGhhdCBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBjYW4gZmFpbCAqYWZ0ZXIqIHNvbWUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGhhcyBhbHJlYWR5IG9jY3VycmVkLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIGlzIGJlaW5nIHBhcnRpYWxseSB1bmRvbmUuCgpIb3dldmVyLCBhIGZ1cnRoZXIgdGhvdWdodCBzdHJpa2VzIG1lLiBJZiBgZGV2LSZndDtuZWVkc19mcmVlX25ldGRldmAgaXMgZmFsc2UsIGFuZCB0aGVuIGEgY2FsbCB0byBgZnJlZV9uZXRkZXZgIGlzIG1hZGUsIHdpbGwgdGhhdCBzdGlsbCBmcmVlIHRoZSBkZXZpY2U/IEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZmxhZy4gSXQgc2VlbXMgSSBuZWVkIHRvIHJlYWQgdGhlIGBmcmVlX25ldGRldmAgY29kZSB0byBmdWxseSBjb21wcmVoZW5kIHRoZSBsb2dpYy4gSSBjYW4gbWFrZSBzb21lIGluZmVyZW5jZXMsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA1Olx0dm9pZCBmcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuMTIyMDY6XHR7XG4xMjIwNzpcdFx0bWlnaHRfc2xlZXAoKTtcbjEyMjA4Olx0XG4xMjIwOTpcdFx0LyogV2hlbiBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgZmFpbGVkIHRoZSB1bndpbmRcbjEyMjEwOlx0XHQgKiBoYW5kbGluZyBtYXkgc3RpbGwgYmUgZGlzbWFudGxpbmcgdGhlIGRldmljZS4gSGFuZGxlIHRoYXQgY2FzZSBieVxuMTIyMTE6XHRcdCAqIGRlZmVycmluZyB0aGUgZnJlZS5cbjEyMjEyOlx0XHQgKi9cbjEyMjEzOlx0XHRpZiAoZGV2LVx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5SRUdJU1RFUklORykge1xuMTIyMTQ6XHRcdFx0QVNTRVJUX1JUTkwoKTtcbjEyMjE1Olx0XHRcdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4xMjIxNjpcdFx0XHRyZXR1cm47XG4xMjIxNzpcdFx0fVxuMTIyMTg6XHRcbjEyMjE5Olx0XHRXQVJOX09OKGRldi1cdTAwM2VjZmcgIT0gZGV2LVx1MDAzZWNmZ19wZW5kaW5nKTtcbjEyMjIwOlx0XHRrZnJlZShkZXYtXHUwMDNlY2ZnKTtcbjEyMjIxOlx0XHRrZnJlZShkZXYtXHUwMDNlZXRodG9vbCk7XG4xMjIyMjpcdFx0bmV0aWZfZnJlZV90eF9xdWV1ZXMoZGV2KTtcbjEyMjIzOlx0XHRuZXRpZl9mcmVlX3J4X3F1ZXVlcyhkZXYpO1xuMTIyMjQ6XHRcbjEyMjI1Olx0XHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGRldi1cdTAwM2VpbmdyZXNzX3F1ZXVlLCAxKSk7XG4xMjIyNjpcdFxuMTIyMjc6XHRcdF9faHdfYWRkcl9mbHVzaChcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9hZGRyX2NhY2hlKTtcbjEyMjI4Olx0XG4xMjIyOTpcdFx0LyogRmx1c2ggZGV2aWNlIGFkZHJlc3NlcyAqL1xuMTIyMzA6XHRcdGRldl9hZGRyX2ZsdXNoKGRldik7XG4xMjIzMTpcdFxuMTIyMzI6XHRcdG5ldGRldl9uYXBpX2V4aXQoZGV2KTtcbjEyMjMzOlx0XG4xMjIzNDpcdFx0bmV0aWZfZGVsX2NwdV9ybWFwKGRldik7XG4xMjIzNTpcdFxuMTIyMzY6XHRcdHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlcik7XG4xMjIzNzpcdCNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4xMjIzODpcdFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbjEyMjM5Olx0XHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBOVUxMO1xuMTIyNDA6XHQjZW5kaWZcbjEyMjQxOlx0XHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlY29yZV9zdGF0cyk7XG4xMjI0MjpcdFx0ZGV2LVx1MDAzZWNvcmVfc3RhdHMgPSBOVUxMO1xuMTIyNDM6XHRcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2V4ZHBfYnVsa3EpO1xuMTIyNDQ6XHRcdGRldi1cdTAwM2V4ZHBfYnVsa3EgPSBOVUxMO1xuMTIyNDU6XHRcbjEyMjQ2Olx0XHRuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShkZXYpO1xuMTIyNDc6XHRcbjEyMjQ4Olx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbjEyMjQ5Olx0XG4xMjI1MDpcdFx0LyogIENvbXBhdGliaWxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzICovXG4xMjI1MTpcdFx0aWYgKGRldi1cdTAwM2VyZWdfc3RhdGUgPT0gTkVUUkVHX1VOSU5JVElBTElaRUQgfHxcbjEyMjUyOlx0XHQgICAgZGV2LVx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfRFVNTVkpIHtcbjEyMjUzOlx0XHRcdGt2ZnJlZShkZXYpO1xuMTIyNTQ6XHRcdFx0cmV0dXJuO1xuMTIyNTU6XHRcdH1cbjEyMjU2Olx0XG4xMjI1NzpcdFx0QlVHX09OKGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1VOUkVHSVNURVJFRCk7XG4xMjI1ODpcdFx0V1JJVEVfT05DRShkZXYtXHUwMDNlcmVnX3N0YXRlLCBORVRSRUdfUkVMRUFTRUQpO1xuMTIyNTk6XHRcbjEyMjYwOlx0XHQvKiB3aWxsIGZyZWUgdmlhIGRldmljZSByZWxlYXNlICovXG4xMjI2MTpcdFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbjEyMjYyOlx0fVxuMTIyNjM6XHRFWFBPUlRfU1lNQk9MKGZyZWVfbmV0ZGV2KTtcbjEyMjY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTUyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKlJlYWxpemluZyBhIENyaXRpY2FsIERpc2NyZXBhbmN5IGluIERldmljZSBEZS1pbml0aWFsaXphdGlvbioqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIG5ldHdvcmsgZGV2aWNlIHRlYXJkb3duIHNlcXVlbmNlLCBhbmQgaXQmIzM5O3Mgc3VkZGVubHkgaGl0dGluZyBtZS4gKmBmcmVlX25ldGRldmAgY2xlYXJseSBkb2VzbiYjMzk7dCBpbnZva2UgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yYCBkaXJlY3RseSEqIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgcHJvYmxlbSwgYSBzaWduaWZpY2FudCBvdmVyc2lnaHQgaWYgd2UmIzM5O3JlIHJlbHlpbmcgb24gdGhhdCBkZXN0cnVjdG9yIGZvciBjbGVhbnVwLiBJIGFsd2F5cyBhc3N1bWVkIGl0IHdhcyBjYWxsZWQgdGhlcmUsIGFzIHRoZSBuZXQgZGV2aWNlIGlzIGZyZWVkLgoKV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGVyZSAqaXMqIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAgYWN0dWFsbHkgY2FsbGVkPyBBaCwgb2YgY291cnNlISAqSXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbmV0ZGV2X3J1bl90b2RvYCEqIE9rYXksIHRoYXQgbWVhbnMgaXQgaXMgY2FsbGVkLCBidXQgdW5kZXIgYSBzcGVjaWZpYyBjb25kaXRpb24uLi4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZnJlZV9uZXRkZXZgIGFuZCBgbmV0ZGV2X3J1bl90b2RvYCwgYW5kIG1ha2Ugc3VyZSB0aGUgbGF0dGVyICphbHdheXMqIHJ1bnMgd2hlbiBpdCBuZWVkcyB0by4gVGhpcyBpcyBzb21ldGhpbmcgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGxvb2sgY2xvc2VyIGF0LCBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbXBsZXRlIGNsZWFudXAgaWYgdGhhdCBleGVjdXRpb24gcGF0aCBpcyBub3QgY29uc2lzdGVudC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgYG5ldGRldl9ydW5fdG9kb2AgZ2V0cyBzY2hlZHVsZWQgYW5kIGV4ZWN1dGVkIHRvIG1ha2Ugc3VyZSB0aGUgcHJpdmF0ZSBkYXRhIGlzIGNsZWFuZWQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDExOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTc0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTc0MDpcdFx0fVxuMTE3NDE6XHRcbjExNzQyOlx0XHRjbnQgPSAwO1xuMTE3NDM6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZsaXN0KSkge1xuMTE3NDQ6XHRcdFx0ZGV2ID0gbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoXHUwMDI2bGlzdCk7XG4xMTc0NTpcdFx0XHRsaXN0X2RlbChcdTAwMjZkZXYtXHUwMDNldG9kb19saXN0KTtcbjExNzQ2Olx0XG4xMTc0NzpcdFx0XHQvKiBwYXJhbm9pYSAqL1xuMTE3NDg6XHRcdFx0QlVHX09OKG5ldGRldl9yZWZjbnRfcmVhZChkZXYpICE9IDEpO1xuMTE3NDk6XHRcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VwdHlwZV9hbGwpKTtcbjExNzUwOlx0XHRcdEJVR19PTighbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNlcHR5cGVfc3BlY2lmaWMpKTtcbjExNzUxOlx0XHRcdFdBUk5fT04ocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VpcF9wdHIpKTtcbjExNzUyOlx0XHRcdFdBUk5fT04ocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VpcDZfcHRyKSk7XG4xMTc1MzpcdFxuMTE3NTQ6XHRcdFx0bmV0ZGV2X25hbWVfbm9kZV9hbHRfZmx1c2goZGV2KTtcbjExNzU1Olx0XHRcdG5ldGRldl9uYW1lX25vZGVfZnJlZShkZXYtXHUwMDNlbmFtZV9ub2RlKTtcbjExNzU2Olx0XHRcdG5ldGRldl9kb19mcmVlX3BjcHVfc3RhdHMoZGV2KTtcbjExNzU3Olx0XHRcdGlmIChkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yKVxuMTE3NTg6XHRcdFx0XHRkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yKGRldik7XG4xMTc1OTpcdFx0XHRpZiAoZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2KVxuMTE3NjA6XHRcdFx0XHRmcmVlX25ldGRldihkZXYpO1xuMTE3NjE6XHRcbjExNzYyOlx0XHRcdGNudCYjNDM7JiM0Mzs7XG4xMTc2MzpcdFxuMTE3NjQ6XHRcdFx0LyogRnJlZSBuZXR3b3JrIGRldmljZSAqL1xuMTE3NjU6XHRcdFx0a29iamVjdF9wdXQoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqKTtcbjExNzY2Olx0XHR9XG4xMTc2NzpcdFx0aWYgKGNudCBcdTAwMjZcdTAwMjYgYXRvbWljX3N1Yl9hbmRfdGVzdChjbnQsIFx1MDAyNmRldl91bnJlZ19jb3VudCkpXG4xMTc2ODpcdFx0XHR3YWtlX3VwKFx1MDAyNm5ldGRldl91bnJlZ2lzdGVyaW5nX3dxKTtcbjExNzY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgxOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDc1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IExlYWsgRml4KioKCk9rYXksIHNvIHRoZSBgZGV2LSZndDtwcml2X2Rlc3RydWN0b3JgIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGluIGBuZXRkZXZfcnVuX3RvZG9gLCB3aGljaCBoYXBwZW5zICphZnRlciogYSBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgdGhlIGRldmljZSBpc24mIzM5O3QgYWN0dWFsbHkgcmVnaXN0ZXJlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIHRodXMgaXQmIzM5O3MgbmV2ZXIgdW5yZWdpc3RlcmVkLCB3aGljaCBtZWFucyBgbmV0ZGV2X3J1bl90b2RvYCBpcyBuZXZlciBjYWxsZWQgZm9yIGl0LiBUaGF0IG1lYW5zIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAgKm5ldmVyKiBnZXRzIGNhbGxlZCBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscy4gIFRoYXQgaXMgYSBwcm9ibGVtIGJlY2F1c2UgaWYgYHJlZ2lzdGVyX25ldGRldmljZWAgZmFpbHMsIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGJlZm9yZSBpdCB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBmcmVlZCBpbiBgcHJpdl9kZXN0cnVjdG9yYCB3aWxsIG5vdyBsZWFrLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBnZW5ldmVfY29uZmlndXJlYCBmdW5jdGlvbi4gSXQgYWxsb2NhdGVzIGBuZXdfY2ZnYCBhbmQgYXNzaWducyBpdCB0byBgZ2VuZXZlLSZndDtjZmdgLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscyBpbiB0aGlzIHNjZW5hcmlvLCBgZ2VuZXZlX2NvbmZpZ3VyZWAgcmV0dXJucyBhbiBlcnJvciwgYW5kIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBzdWNoIGFzIGBydG5sX25ld2xpbmtfY3JlYXRlYCwgdGhlbiBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAuIEhvd2V2ZXIsIGBmcmVlX25ldGRldmAgKmRvZXNuJiMzOTt0KiBjYWxsIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAg4oCTIGl0IGp1c3QgZnJlZXMgdGhlIGRldmljZSBtZW1vcnkgaXRzZWxmLiAgU28sIGBnZW5ldmUtJmd0O2NmZ2AgaXMgYmVpbmcgbGVha2VkIQoKVGhpcyBwYXRjaCBpcyBhZGRpbmcgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgZ2VuZXZlX2NvbmZpZ3VyZWAuIEl0IG1ha2VzIHRvdGFsIHNlbnNlIG5vdzogYGdlbmV2ZV9mcmVlX2RldmAgZnJlZXMgdGhlIGBnZW5ldmUtJmd0O2NmZ2AuCgpMZXQmIzM5O3MgdmVyaWZ5IHRoaXMuIElmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzLCBgZ2VuZXZlX2NvbmZpZ3VyZWAgY2FsbHMgYGdlbmV2ZV9mcmVlX2RldihkZXYpYC4gYGdlbmV2ZV9mcmVlX2RldmAgdGhlbiBmcmVlcyBgZ2VuZXZlLSZndDtjZmdgIGFuZCBzZXRzIGl0IHRvIE5VTEwuIFRoZW4gdGhlIGVycm9yIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsIGFuZCBmaW5hbGx5IGBmcmVlX25ldGRldihkZXYpYCBpcyBjYWxsZWQgdG8gZnJlZSB0aGUgZGV2aWNlIG1lbW9yeS4gIFRoZSBsZWFrIGlzIGZpeGVkLiBFeGNlbGxlbnQhCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBJdCBkZWZpbml0ZWx5IGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgYGdlbmV2ZV9jb25maWd1cmVgLCBidXQgdGhlIGZ1enppbmcgZ3VpZGFuY2Ugc3RhdGVzIHRvIGRldGVybWluZSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmOgotICBUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIGRvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvZGUgY29tbWVudHMuCi0gIFB1cmVseSBsb2dnaW5nIG9yIHRyYWNlcG9pbnQgY2hhbmdlcy4KLSAgQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24mIzM5O3QgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gIENvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLgoKVGhpcyBkZWZpbml0ZWx5ICpkb2VzbiYjMzk7dCogZml0IHRob3NlIGNyaXRlcmlhLiBUaGlzIG1vZGlmaWVzIGEgcmVhY2hhYmxlIGRyaXZlciAoYGRyaXZlcnMvbmV0L2dlbmV2ZS5jYCksIGl0IGZpeGVzIGEgbWVtb3J5IGxlYWsgYW5kIGFsdGVycyBleGVjdXRpb24gZmxvdyAoY2FsbHMgYGdlbmV2ZV9mcmVlX2RldmApLCBhbmQgaXQgaXMgcmVhY2hhYmxlLiBXZSBjYW4gdHJpZ2dlciB0aGlzIGxlYWsgYnkgY3JlYXRpbmcgYSBnZW5ldmUgZGV2aWNlIHdpdGggaW52YWxpZCBwYXJhbWV0ZXJzLCBvciBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscyBmb3IgYW55IHJlYXNvbjsgZm9yIGV4YW1wbGUsIGlmIHdlIHJ1biBvdXQgb2YgbWVtb3J5IG9yIHRoZXJlIGlzIGEgZHVwbGljYXRlIG5hbWUgY29uZmxpY3QuIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGNhbiBhbHNvIGZhaWwgaWYgdGhlIGRldmljZSBuYW1lIGlzIGFscmVhZHkgdGFrZW4gb3IgaWYgYW5vdGhlciBpbml0aWFsaXphdGlvbiBzdGVwIGZhaWxzLgoKU28sIHllcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgcmVhY2hhYmxlIGVycm9yIHBhdGggd2l0aCBhIG1lbW9yeSBsZWFrIGZpeC4gVGltZSB0byBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdFTkVWRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTIzMD1jb25maWcgVlhMQU5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MjQ1OmNvbmZpZyBHRU5FVkVcbmRyaXZlcnMvbmV0L0tjb25maWctMjQ2LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIEVuY2Fwc3VsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgc3lzdGVtJiMzOTtzIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBleHBsaWNpdGx5IHNldCB0byBgR0VORVZFYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcGVyZm9ybSBhIHRob3JvdWdoIGNoZWNrLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciAqdGhpcyogaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uLCBvciBpZiB0aGVyZSBhcmUgb3RoZXJzIGRlZmluZWQgdGhhdCBhcmUgYWxzbyBhY3RpdmVseSBpbiBwbGF5LCBwZXJoYXBzIHRocm91Z2ggYW4gYWx0ZXJuYXRpdmUgY29uZmlndXJhdGlvbiBjaGFpbiwgYW4gb3ZlcnJpZGUsIG9yIGV2ZW4gd2l0aGluIGEgc2VwYXJhdGUgbW9kdWxlIG9yIHByb2Nlc3MuIEl0JiMzOTtzIGNydWNpYWwgdG8gY29uZmlybSB0aGF0IGBHRU5FVkVgIGlzbiYjMzk7dCBqdXN0IG9uZSBjb21wb25lbnQgb2YgYSBicm9hZGVyLCBhbmQgcG90ZW50aWFsbHkgY29uZmxpY3RpbmcsIGNvbmZpZ3VyYXRpb24gc2V0LiBMZWF2aW5nIG5vIHN0b25lIHVudHVybmVkIGlzIHRoZSBrZXkgdG8gbWFpbnRhaW5pbmcgYSByb2J1c3QgbmV0d29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRjb25maWcgR0VORVZFXG4gMjQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblwmIzM0O1xuIDI0NzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gMjQ4Olx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAyNDk6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAyNTA6XHRcdGhlbHBcbiAyNTE6XHRcdCAgVGhpcyBhbGxvd3Mgb25lIHRvIGNyZWF0ZSBnZW5ldmUgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgcHJvdmlkZVxuIDI1MjpcdFx0ICBMYXllciAyIE5ldHdvcmtzIG92ZXIgTGF5ZXIgMyBOZXR3b3Jrcy4gR0VORVZFIGlzIG9mdGVuIHVzZWRcbiAyNTM6XHRcdCAgdG8gdHVubmVsIHZpcnR1YWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG4gMjU0Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MjcKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkdlbmV2ZSBDb25maWd1cmF0aW9uIC0gQ29yZSBGb2N1cyoqCgpSaWdodCwgc28gYEdFTkVWRWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGNvbXBvbmVudCBoZXJlLCB0aGUgdGhpbmcgdG8gcmVhbGx5IHplcm8gaW4gb24uIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IG1lc3Npbmcgd2l0aCB0aGUgYGdlbmV2ZV9jb25maWd1cmVgIGZ1bmN0aW9uLCBhbmQgdGhhdCYjMzk7cyBmb3VuZCBpbiBgZHJpdmVycy9uZXQvZ2VuZXZlLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBob3cgdGhlIGVudGlyZSBHZW5ldmUgc3RhY2sgaXMgc2V0IHVwLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gQmV5b25kIGBnZW5ldmVfY29uZmlndXJlYCwgSSBuZWVkIHRvIHBheSBleHRyYSBhdHRlbnRpb24gdG8gYGdlbmV2ZV9uZXdsaW5rYCwgYW5kIGBnZW5ldmVfZGV2X2NyZWF0ZV9mYmAuIFRoZXNlIGFyZSBhbGwgY29yZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBHZW5ldmUgZHJpdmVyLCBhbmQgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGlzIHBhdGNoIGltcGFjdHMgaG93IG5ldyBHZW5ldmUgbGlua3MgYXJlIGNyZWF0ZWQsIGNvbmZpZ3VyZWQsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgZm9yd2FyZGluZyBwbGFuZSBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBmbG93IHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgcGljdHVyZSBvZiB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7R0VORVZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXZlX2NvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtnZW5ldmVfbmV3bGluayYjMzQ7LAogICAgJiMzNDtnZW5ldmVfZGV2X2NyZWF0ZV9mYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIGdlbmV2ZV9jb25maWd1cmUuIElmIHJlZ2lzdGVyX25ldGRldmljZSgpIGZhaWxzLCB0aGUgZGV2aWNlJiMzOTtzIHByaXZfZGVzdHJ1Y3RvciBpcyBub3QgY2FsbGVkIGJ5IGZyZWVfbmV0ZGV2KCksIGxlYWRpbmcgdG8gYSBsZWFrIG9mIHRoZSBnZW5ldmVfY29uZmlnIHN0cnVjdC4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgY2FsbHMgZ2VuZXZlX2ZyZWVfZGV2KCkgdG8gZnJlZSBpdC4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dFTkVWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmV2ZV9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7Z2VuZXZlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2Rldl9jcmVhdGVfZmImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBnZW5ldmVfY29uZmlndXJlLiBJZiByZWdpc3Rlcl9uZXRkZXZpY2UoKSBmYWlscywgdGhlIGRldmljZSYjMzk7cyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTU6MDguMzU5MjY3MDE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDczMjc4MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jb25maWd1cmVcIixcbiAgICBcImdlbmV2ZV9uZXdsaW5rXCIsXG4gICAgXCJnZW5ldmVfZGV2X2NyZWF0ZV9mYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgZ2VuZXZlX2NvbmZpZ3VyZS4gSWYgcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgZmFpbHMsIHRoZSBkZXZpY2UncyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTowOC4zNTkyNzQ4MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzNTcwMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGE1ZTlhNzJiMGUwMzQ4MTRmYzUzMTI1OGJjMjE4NDRkY2JmYmFjZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyMiAxMTo1NTowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9nZW5ldmUuYyBiL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXFxuaW5kZXggMTdiZDM1NDNkNTg3YTkuLmViMTU2ZjMzYjYyNzUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZ2VuZXZlLmNcXG5AQCAtMjA0Myw4ICsyMDQzLDEwIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xcbi1cXHRpZiAoZXJyKVxcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGdlbmV2ZV9mcmVlX2RldihkZXYpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuIFxcbiBcXHRsaXN0X2FkZChcXHUwMDI2Z2VuZXZlLVxcdTAwM2VuZXh0LCBcXHUwMDI2Z24tXFx1MDAzZWdlbmV2ZV9saXN0KTtcXG4gXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjA4Ljc0MzUwODg4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTk1MDg5MDI3OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jb25maWd1cmVcIixcbiAgICBcImdlbmV2ZV9uZXdsaW5rXCIsXG4gICAgXCJnZW5ldmVfZGV2X2NyZWF0ZV9mYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgZ2VuZXZlX2NvbmZpZ3VyZS4gSWYgcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgZmFpbHMsIHRoZSBkZXZpY2UncyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBhNWU5YTcyYjBlMDM0ODE0ZmM1MzEyNThiYzIxODQ0ZGNiZmJhY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAxMTo1NTowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jIGIvZHJpdmVycy9uZXQvZ2VuZXZlLmNcbmluZGV4IDE3YmQzNTQzZDU4N2E5Li5lYjE1NmYzM2I2Mjc1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXG4rKysgYi9kcml2ZXJzL25ldC9nZW5ldmUuY1xuQEAgLTIwNDMsOCArMjA0MywxMCBAQCBzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XG4tXHRpZiAoZXJyKVxuK1x0aWYgKGVycikge1xuK1x0XHRnZW5ldmVfZnJlZV9kZXYoZGV2KTtcbiBcdFx0cmV0dXJuIGVycjtcbitcdH1cbiBcbiBcdGxpc3RfYWRkKFx1MDAyNmdlbmV2ZS1cdTAwM2VuZXh0LCBcdTAwMjZnbi1cdTAwM2VnZW5ldmVfbGlzdCk7XG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjA4Ljc0MzUxMDYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5OTEzMTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZXJlJ3MgYSBwYXRjaCBmbG9hdGluZyBhcm91bmQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBkcml2ZXJzL25ldC9nZW5ldmUuY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGFuIGVycm9yIGhhbmRsaW5nIGlzc3VlIHdpdGhpbiB0aGUgYGdlbmV2ZV9jb25maWd1cmVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgYGdlbmV2ZV9mcmVlX2RldihkZXYpO2AgY2FsbCB0byB0aGUgZXJyb3IgcGF0aCBvZiBgZ2VuZXZlX2NvbmZpZ3VyZWAuIFRoaXMgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KWAgZnVuY3Rpb24gZmFpbHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgYWRkaXRpb24gaXMgbGlrZWx5IGludGVuZGVkIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgdGhlIGBkZXZgIHN0cnVjdCB3b3VsZCBiZSBsZWZ0IGFsbG9jYXRlZCwgYnV0IG5vdCByZWdpc3RlcmVkLCBhbmQgcG90ZW50aWFsbHkgY2F1c2UgaXNzdWVzIGRvd24gdGhlIGxpbmUuIFdlIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBkZXZpY2UgaXMgZnJlZWQgc28gd2UgZG9uJ3QgbGVhayByZXNvdXJjZXMuIE5vdyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgZ2VuZXZlX2NvbmZpZ3VyZWAgZnVuY3Rpb24gaXRzZWxmIHRvIHNlZSB0aGUgY29udGV4dCBvZiB0aGlzIGFkZGl0aW9uIGFuZCB3aGV0aGVyIGl0J3MgdGhlIGNvcnJlY3QgYXBwcm9hY2guIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjEyLjA0MjY0NTcyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzM5MTYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldmVfY29uZmlndXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jPTE5NzM9c3RhdGljIGJvb2wgZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqYSxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE5ODEtXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTk4MjpzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE5ODMtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTIzNjU9c3RhdGljIGludCBnZW5ldmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjM4Ny1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyMzg4OlxcdGVyciA9IGdlbmV2ZV9jb25maWd1cmUobGlua19uZXQsIGRldiwgZXh0YWNrLCBcXHUwMDI2Y2ZnKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzg5LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0yNTkyPXN0cnVjdCBuZXRfZGV2aWNlICpnZW5ldmVfZGV2X2NyZWF0ZV9mYihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjE1LVxcdGluaXRfdG5sX2luZm8oXFx1MDAyNmNmZy5pbmZvLCBkc3RfcG9ydCk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjYxNjpcXHRlcnIgPSBnZW5ldmVfY29uZmlndXJlKG5ldCwgZGV2LCBOVUxMLCBcXHUwMDI2Y2ZnKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjE3LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTU6MTIuMTAwMDQyODg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzMjk0MDI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGZ1bmN0aW9uczpcblxuKipBbmFseXppbmcgR2VuZXZlIERldmljZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBhbmQgYGdlbmV2ZV9jb25maWd1cmVgLiBOYXR1cmFsbHksIHRoZSBmaXJzdCBmdW5jdGlvbiwgYGdlbmV2ZV9mcmVlX2RldmAsIGhhcyB0byBiZSB0aGUgY2xlYW51cCByb3V0aW5lLiBJdCdzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgYW55IHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBHZW5ldmUgZGV2aWNlIGlkZW50aWZpZWQgYnkgYGRldmAuIFRoaXMgY291bGQgaW5jbHVkZSBmcmVlaW5nIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGRhdGEgc3RydWN0dXJlcywgY2xvc2luZyBmaWxlIGRlc2NyaXB0b3JzLCB1bnJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UgZnJvbSB0aGUgbmV0d29yayBzdGFjayDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBkZXZpY2UgdGVhcmRvd24uIEkgbmVlZCB0byBiZSBzdXJlIGl0J3MgaGFuZGxpbmcgYWxsIGFzcGVjdHMgb2YgZGV2aWNlIGRlYWxsb2NhdGlvbiB0byBhdm9pZCBsZWFrcyBvciBkYW5nbGluZyByZWZlcmVuY2VzLiBJIHNob3VsZCBwcm9iYWJseSB0cmFjZSBpdHMgY2FsbHMsIGVuc3VyaW5nIGl0IHNhZmVseSBoYW5kbGVzIHJlc291cmNlcyBhbmQgZG9lc27igJl0IGNvcnJ1cHQgbWVtb3J5LlxuXG5UaGVuLCB0aGVyZSdzIGBnZW5ldmVfY29uZmlndXJlYC4gVGhhdCdzIHRoZSBvbmUgSSBuZWVkIHRvIHBheSBhIGxvdCBvZiBhdHRlbnRpb24gdG8uIFRoaXMgZnVuY3Rpb24gYWxtb3N0IGNlcnRhaW5seSBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIG9yIG1vZGlmaWNhdGlvbiBvZiBhIEdlbmV2ZSBkZXZpY2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgYWNjZXB0ZWQsIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUgb3IgdmlydHVhbCBpbnRlcmZhY2VzIGR1cmluZyB0aGlzIHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQsIGFzIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gZGV0ZXJtaW5lcyB0aGUgcGVyZm9ybWFuY2UgYW5kIGJlaGF2aW9yIG9mIHRoZSBHZW5ldmUgdHVubmVsLiBBcmUgd2UgaGFuZGxpbmcgTVRVLCBJUCBhZGRyZXNzZXMsIFVEUCBwb3J0cywgVkxBTiB0YWdzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgaXQgdmFsaWRhdGVzIHRoZSBpbnB1dCB0byBhdm9pZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBkdWUgdG8gaW5jb3JyZWN0IHBhcmFtZXRlciBzZXR0aW5ncy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3Igd2hlcmUgdGhpbmdzIGdvIHRlcnJpYmx5IHdyb25nLiBUaGlzIHdpbGwgZGVmaW5pdGVseSBiZSB3aGVyZSB0aGUgYnVsayBvZiBteSBlZmZvcnQgZ29lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjE1LjkzMjk4NTMzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk3MTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldmVfZnJlZV9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc1OD1zdGF0aWMgdm9pZCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NjUtLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi9cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzY2OnN0YXRpYyB2b2lkIGdlbmV2ZV9mcmVlX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3Njcte1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc3NT1zdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3ODEtXFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTc4MjpcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IGdlbmV2ZV9mcmVlX2RldjtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzgzLVxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTk4Mj1zdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjA0Ni1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjA0NzpcXHRcXHRnZW5ldmVfZnJlZV9kZXYoZGV2KTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMDQ4LVxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjE1Ljk4ODk2MDE0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzgwMzYxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5ldmUgRGV2aWNlIFNldHVwKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZ2VuZXZlX3NldHVwYCBmdW5jdGlvbiwgYW5kIEknbSBmb2N1c2luZyBvbiBob3cgZGV2aWNlIGNsZWFudXAgaXMgaGFuZGxlZC4gSSBzZWUgdGhhdCB0aGUgYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgIGlzIGFzc2lnbmVkIHRvIGBnZW5ldmVfZnJlZV9kZXZgLiBUaGF0J3MgdGhlIGtleS4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIHdoYXQgaGFwcGVucyBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscz8gSSByZW1lbWJlciB0aGF0IHR5cGljYWxseSwgd2hlbiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBiYWlscyBvdXQsIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwLCBhbmQgaXQgZG9lcyBzbyBieSBjYWxsaW5nIGBmcmVlX25ldGRldmAuIEFuZCAqdGhhdCogaXMgd2hhdCBzaG91bGQgdHJpZ2dlciBteSBgcHJpdl9kZXN0cnVjdG9yYCEgU28gYGdlbmV2ZV9mcmVlX2RldmAgc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGF0IGZhaWx1cmUgc2NlbmFyaW8sIGFuZCBmcmVlIHRoZSBkZXZpY2UuIEJ1dCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB3aGVyZSBgZ2VuZXZlX2NvbmZpZ3VyZWAgaXMgY2FsbGVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLiBXZSBoYXZlIHRvIGJlIHRob3JvdWdoIGFib3V0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NToxOS4zMjY5OTg3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUxNzc1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VuZXZlX25ld2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjMxOT1zdGF0aWMgdm9pZCBnZW5ldmVfbGlua19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzNjQtXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjM2NTpzdGF0aWMgaW50IGdlbmV2ZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjM2Ni1cXHRcXHRcXHQgIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0yNTc4PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBnZW5ldmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI1ODQtXFx0LnZhbGlkYXRlXFx0PSBnZW5ldmVfdmFsaWRhdGUsXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjU4NTpcXHQubmV3bGlua1xcdD0gZ2VuZXZlX25ld2xpbmssXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4Ni1cXHQuY2hhbmdlbGlua1xcdD0gZ2VuZXZlX2NoYW5nZWxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjE5LjQ4MjE4MDY0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzYxNzQwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRG91YmxlIEZyZWUgQ29uY2VybiBpbiBHZW5ldmUgRGV2aWNlIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgR2VuZXZlIGRldmljZSBjcmVhdGlvbiBwcm9jZXNzIGFuZCBJJ3ZlIGhpdCBhIHBvdGVudGlhbCBzbmFnLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgdGhpczogaWYgYGdlbmV2ZV9jb25maWd1cmVgIGZhaWxzLCBkb2VzIGBnZW5ldmVfbmV3bGlua2AgcHJvcGVybHkgaGFuZGxlIHRoZSBjbGVhbnVwPyBJIGtub3cgYGdlbmV2ZV9uZXdsaW5rYCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gYHJ0bmxfbmV3bGlua2AsIGFuZCBgcnRubF9uZXdsaW5rYCAqaXRzZWxmKiBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAgaWYgdGhlIGxpbmsgY3JlYXRpb24gZmFpbHMuIFxuXG5CdXQgaGVyZSdzIHRoZSBraWNrZXIsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGlmIGBnZW5ldmVfY29uZmlndXJlYCBoYXMgYWxyZWFkeSBkb25lIHNvbWUgY2xlYW51cCwgc3BlY2lmaWNhbGx5IGJ5IGNhbGxpbmcgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBleHBsaWNpdGx5IGJlZm9yZSB0aGUgZmFpbHVyZSwgYW5kICp0aGVuKiBgZnJlZV9uZXRkZXYoZGV2KWAgaXMgc3Vic2VxdWVudGx5IGNhbGxlZCBieSBgcnRubF9uZXdsaW5rYCBkdWUgdG8gdGhlIGBnZW5ldmVfbmV3bGlua2AgZmFpbHVyZSwgd2UgY291bGQgaGF2ZSBhIGRvdWJsZSBmcmVlIHNpdHVhdGlvbi4gVGhpcyBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBzb21ldGhpbmcgbGlrZSBgZ2VuZXZlLVx1MDAzZWluZm9gLCBvciB3aGF0ZXZlciByZXNvdXJjZXMgYGdlbmV2ZV9mcmVlX2RldmAgbWFuYWdlcy5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGdlbmV2ZV9mcmVlX2RldmAgdG8gdW5kZXJzdGFuZCBpdHMgb3BlcmF0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgYWN0dWFsbHkgZGVhbGluZyB3aXRoLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTU6MjMuOTU4MzU2NzEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzYwOlxcdFxcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGdlbmV2ZV9jb25maWcsIHJjdSk7XFxuMTc2MTpcXHRcXG4xNzYyOlxcdFxcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xcbjE3NjM6XFx0fVxcbjE3NjQ6XFx0XFxuMTc2NTpcXHQvKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqL1xcbjE3NjY6XFx0c3RhdGljIHZvaWQgZ2VuZXZlX2ZyZWVfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuMTc2NzpcXHR7XFxuMTc2ODpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xNzY5OlxcdFxcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGdlbmV2ZS1cXHUwMDNlY2ZnLCAxKTtcXG4xNzcwOlxcdFxcbjE3NzE6XFx0XFx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XFxuMTc3MjpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGdlbmV2ZS1cXHUwMDNlY2ZnLCBOVUxMKTtcXG4xNzczOlxcdH1cXG4xNzc0OlxcdFxcbjE3NzU6XFx0c3RhdGljIHZvaWQgZ2VuZXZlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuMTc3NjpcXHR7XFxuMTc3NzpcXHRcXHRldGhlcl9zZXR1cChkZXYpO1xcbjE3Nzg6XFx0XFxuMTc3OTpcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2Z2VuZXZlX25ldGRldl9vcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjIzLjk1ODQ4MTA3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkxNzI1NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRvdWJsZS1GcmVlIENvbmNlcm5zIGluIEdlbmV2ZSBEZXZpY2UgQ2xlYW51cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGdlbmV2ZV9mcmVlX2RldmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0IGZyZWVzIHRoZSBgY2ZnYCBzdHJ1Y3R1cmUgYW5kIHRoZW4gbnVsbHMgb3V0IGBnZW5ldmUtXHUwMDNlY2ZnYC4gU2ltcGxlIGVub3VnaC4gQnV0IHdhaXQsIHRoaXMgaXMgc2V0dGluZyBvZmYgYWxhcm0gYmVsbHMuIElmIGBnZW5ldmVfZnJlZV9kZXZgIGlzIGNhbGxlZCBleHBsaWNpdGx5ICphbmQgdGhlbiogbGF0ZXIgYGZyZWVfbmV0ZGV2YCBjYWxscyBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAsIHdoaWNoIGhhcHBlbnMgdG8gKmFsc28qIGJlIGBnZW5ldmVfZnJlZV9kZXZgLi4uIHdlIGhhdmUgYSBkb3VibGUtZnJlZSBzaXR1YXRpb24gYnJld2luZywgcmlnaHQ/IFdlJ3JlIGZyZWVpbmcgdGhlIHNhbWUgbWVtb3J5IHR3aWNlLiBUaGF0J3MgbmV2ZXIgZ29vZC5cblxuQW5kIHRoYXQgbWFrZXMgbWUgdGhpbmssIGV2ZW4gaWYgYGNmZ2AgKmlzKiBOVUxMIGluIHRoZSBzZWNvbmQgY2FsbCwgaXMgYGdlbmV2ZV9jb25maWdfZnJlZWAgc2FmZSBpZiBpdCdzIGNhbGxlZCB0d2ljZT8gSSBjYW4ndCBpbW1lZGlhdGVseSByZWNhbGwuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2VuZXZlX2NvbmZpZ19mcmVlYCB0byBiZSBzdXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgZ29pbmcgdG8gY2F1c2UgYW55IG1lbW9yeSBjb3JydXB0aW9uIGRvd24gdGhlIGxpbmUuIFdlIG5lZWQgdG8gYmUgYWlydGlnaHQgb24gdGhpcy4gVGhpcyBmZWVscyBsaWtlIGl0IGNvdWxkIGJlIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1ODcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NToyNy44NTAyMDg5MTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjYyODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmV2ZV9jb25maWdfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuYz0xNzMxPXN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqZ2VuZXZlX2NvbmZpZ19hbGxvYyhjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqc3JjKVxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc0OS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzUwOnN0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZShzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnKVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NTEte1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc1Ny1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzU4OnN0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTc2MS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxNzYyOlxcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTc2Nj1zdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE3NzAtXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTc3MTpcXHRnZW5ldmVfY29uZmlnX2ZyZWUoY2ZnKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xNzcyLVxcdFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVxcdTAwM2VjZmcsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjQwMT1zdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDI5LVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI0MzA6XFx0Y2FsbF9yY3VfaHVycnkoXFx1MDAyNm9sZF9jZmctXFx1MDAzZXJjdSwgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdSk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQzMS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI0MzMtZXJyX2ZyZWVfY2ZnOlxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI0MzQ6XFx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQzNS1cXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NToyNy45MDc0NzY0MTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0MjgzNTE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgZ2VuZXZlX2NvbmZpZ19mcmVlYCBmdW5jdGlvbjpcblxuKipBbmFseXppbmcgdGhlIGBnZW5ldmVfY29uZmlnX2ZyZWVgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBkaXNzZWN0IHRoaXMgYGdlbmV2ZV9jb25maWdfZnJlZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIHB1cnBvc2UgaXMuIEJhc2VkIG9uIHRoZSBuYW1lLCBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIGZyZWVpbmcgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYSBHZW5ldmUgY29uZmlndXJhdGlvbi4gSXTigJlzIGxpa2VseSBhIGNsZWFudXAgZnVuY3Rpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgR2VuZXZlIGlzIGxpa2VseSBhIHByb3RvY29sIGludm9sdmVkIGluIHR1bm5lbGluZyBvciBuZXR3b3JrIHZpcnR1YWxpemF0aW9uLCBzbyBmcmVlaW5nIHRoZSBjb25maWd1cmF0aW9uIHByb2JhYmx5IHByZXZlbnRzIG1lbW9yeSBsZWFrcyBhbmQgZW5zdXJlcyByZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGhhbmRsZWQgY29ycmVjdGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFydCBvZiB0aGF0IGNvbmZpZ3VyYXRpb24uIEkgZXhwZWN0IGl0IGhhbmRsZXMgYWxsb2NhdGVkIHBvaW50ZXJzIHRvIHN0cnVjdHVyZXMgY29udGFpbmluZyBkZXRhaWxzIGxpa2Ugc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3NlcywgVkxBTiBpbmZvcm1hdGlvbiwgb3IgcGVyaGFwcyBzb21lIGVuY2Fwc3VsYXRpb24gcGFyYW1ldGVycy5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCBhbnkgb3RoZXIgcmVsYXRlZCBHZW5ldmUgZnVuY3Rpb25zLiBEb2VzIGl0IGNhbGwgb3RoZXIgY2xlYW51cCBvciBkZWFsbG9jYXRpb24gcm91dGluZXM/IEFyZSB0aGVyZSBhbnkgcHJlY29uZGl0aW9ucyBpdCBleHBlY3RzLCBsaWtlIHRoZSBjb25maWd1cmF0aW9uIGJlaW5nIHByb3Blcmx5IGluaXRpYWxpemVkIG9yIHRoYXQgbm8gb3RoZXIgcHJvY2VzcyBpcyBzdGlsbCB1dGlsaXppbmcgdGhlIGNvbmZpZz8gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gSXMgaXQgc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gb24gYSBudWxsIHBvaW50ZXIsIG9yIHNob3VsZCB0aGUgY2FsbGVyIGhhbmRsZSB0aGF0IHNjZW5hcmlvPyBUaGUgc3BlY2lmaWMgZXJyb3IgY29kZXMgd291bGQgYmUgcmVhbGx5IHVzZWZ1bCB0byBtZS5cbk15IGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgaXRzIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyB0byBjb3JyZWN0bHkgdXNlIGl0IHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBzYWZlbHkgYW5kIHByZXZlbnQgZXJyb3JzLiBJIG5lZWQgdG8gZ3Jhc3AgdGhpcyBmdW5jdGlvbiBsaWtlIEkgZ3Jhc3AgYW55IG90aGVyIGNydWNpYWwgcGllY2Ugb2YgaW5mcmFzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTozMS43NTAzMTM4NjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NDUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NDU6XFx0XFx0fVxcbjE3NDY6XFx0XFxuMTc0NzpcXHRcXHRyZXR1cm4gY2ZnO1xcbjE3NDg6XFx0fVxcbjE3NDk6XFx0XFxuMTc1MDpcXHRzdGF0aWMgdm9pZCBnZW5ldmVfY29uZmlnX2ZyZWUoc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZylcXG4xNzUxOlxcdHtcXG4xNzUyOlxcdFxcdGlmIChjZmcpIHtcXG4xNzUzOlxcdFxcdFxcdGRzdF9jYWNoZV9kZXN0cm95KFxcdTAwMjZjZmctXFx1MDAzZWluZm8uZHN0X2NhY2hlKTtcXG4xNzU0OlxcdFxcdFxcdGtmcmVlKGNmZyk7XFxuMTc1NTpcXHRcXHR9XFxuMTc1NjpcXHR9XFxuMTc1NzpcXHRcXG4xNzU4OlxcdHN0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbjE3NTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTozMS43NTA0MzY1NjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMTEzNjQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdlbmV2ZSBEcml2ZXIncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBnZW5ldmVfY29uZmlnX2ZyZWVgIGlzIGRvaW5nIHRoZSByaWdodCB0aGluZywgY2hlY2tpbmcgaWYgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnRlciBgY2ZnYCBpcyBub24tTlVMTCBiZWZvcmUgZnJlZWluZyBpdC4gU21hcnQuIEFuZCBJIHNlZSB0aGF0IGBnZW5ldmVfZnJlZV9kZXZgIGV4cGxpY2l0bHkgdXNlcyBgUkNVX0lOSVRfUE9JTlRFUihnZW5ldmUtXHUwMDNlY2ZnLCBOVUxMKTtgIHRvIHNldCB0aGUgY29uZmlndXJhdGlvbiBwb2ludGVyIHRvIE5VTEwuIFRoYXQgbWVhbnMgY2FsbGluZyBgZ2VuZXZlX2ZyZWVfZGV2YCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBkZXZpY2UgaXMgcGVyZmVjdGx5IHNhZmUsIHdoaWNoIGlzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBCdXQgaG9sZCBvbi4uLiB3aHkgZGlkIHRoYXQgcGF0Y2ggaW5jbHVkZSBhIGNhbGwgdG8gYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBpbnNpZGUgYGdlbmV2ZV9jb25maWd1cmVgPyBUaGF0IHNlZW1zIHBvdGVudGlhbGx5IHJlZHVuZGFudCBvciBldmVuLi4uIHJpc2t5PyBMZXQgbWUgcXVpY2tseSByZS1leGFtaW5lIHRoZSBgZ2VuZXZlX2NvbmZpZ3VyZWAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgdGhhdCBhcmUgYmVpbmcgaW50cm9kdWNlZCBvciBpbmFkdmVydGVudGx5IHJlc29sdmVkIGJ5IHRoYXQgYWRkaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNzMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTozNS40ODE1ODAyNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5ODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTgwOlxcdH1cXG4xOTgxOlxcdFxcbjE5ODI6XFx0c3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4xOTgzOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuMTk4NDpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZylcXG4xOTg1OlxcdHtcXG4xOTg2OlxcdFxcdHN0cnVjdCBnZW5ldmVfbmV0ICpnbiA9IG5ldF9nZW5lcmljKG5ldCwgZ2VuZXZlX25ldF9pZCk7XFxuMTk4NzpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqdCwgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XFxuMTk4ODpcXHRcXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvO1xcbjE5ODk6XFx0XFx0Ym9vbCB0dW5fY29sbGVjdF9tZCwgdHVuX29uX3NhbWVfcG9ydDtcXG4xOTkwOlxcdFxcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpuZXdfY2ZnO1xcbjE5OTE6XFx0XFx0aW50IGVyciwgZW5jYXBfbGVuO1xcbjE5OTI6XFx0XFxuMTk5MzpcXHRcXHRpZiAoY2ZnLVxcdTAwM2Vjb2xsZWN0X21kIFxcdTAwMjZcXHUwMDI2ICFpc190bmxfaW5mb196ZXJvKGluZm8pKSB7XFxuMTk5NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuMTk5NTpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkRldmljZSBpcyBleHRlcm5hbGx5IGNvbnRyb2xsZWQsIHNvIGF0dHJpYnV0ZXMgKFZOSSwgUG9ydCwgYW5kIHNvIG9uKSBtdXN0IG5vdCBiZSBzcGVjaWZpZWRcXFwiKTtcXG4xOTk2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE5OTc6XFx0XFx0fVxcbjE5OTg6XFx0XFxuMTk5OTpcXHRcXHRnZW5ldmUtXFx1MDAzZW5ldCA9IG5ldDtcXG4yMDAwOlxcdFxcdGdlbmV2ZS1cXHUwMDNlZGV2ID0gZGV2O1xcbjIwMDE6XFx0XFxuMjAwMjpcXHRcXHR0ID0gZ2VuZXZlX2ZpbmRfZGV2KGduLCBjZmcsIGluZm8sIFxcdTAwMjZ0dW5fb25fc2FtZV9wb3J0LCBcXHUwMDI2dHVuX2NvbGxlY3RfbWQpO1xcbjIwMDM6XFx0XFx0aWYgKHQpXFxuMjAwNDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjIwMDU6XFx0XFxuMjAwNjpcXHRcXHQvKiBtYWtlIGVub3VnaCBoZWFkcm9vbSBmb3IgYmFzaWMgc2NlbmFyaW8gKi9cXG4yMDA3OlxcdFxcdGVuY2FwX2xlbiA9IEdFTkVWRV9CQVNFX0hMRU4gKyBFVEhfSExFTjtcXG4yMDA4OlxcdFxcdGlmICghY2ZnLVxcdTAwM2Vjb2xsZWN0X21kIFxcdTAwMjZcXHUwMDI2IGlwX3R1bm5lbF9pbmZvX2FmKGluZm8pID09IEFGX0lORVQpIHtcXG4yMDA5OlxcdFxcdFxcdGVuY2FwX2xlbiArPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcXG4yMDEwOlxcdFxcdFxcdGRldi1cXHUwMDNlbWF4X210dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcXG4yMDExOlxcdFxcdH0gZWxzZSB7XFxuMjAxMjpcXHRcXHRcXHRlbmNhcF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4yMDEzOlxcdFxcdFxcdGRldi1cXHUwMDNlbWF4X210dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xcbjIwMTQ6XFx0XFx0fVxcbjIwMTU6XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBlbmNhcF9sZW4gKyBFVEhfSExFTjtcXG4yMDE2OlxcdFxcbjIwMTc6XFx0XFx0aWYgKGNmZy1cXHUwMDNlY29sbGVjdF9tZCkge1xcbjIwMTg6XFx0XFx0XFx0aWYgKHR1bl9vbl9zYW1lX3BvcnQpIHtcXG4yMDE5OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4yMDIwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiVGhlcmUgY2FuIGJlIG9ubHkgb25lIGV4dGVybmFsbHkgY29udHJvbGxlZCBkZXZpY2Ugb24gYSBkZXN0aW5hdGlvbiBwb3J0IGFuZCBhIHNvdXJjZSBhZGRyZXNzXFxcIik7XFxuMjAyMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjIwMjI6XFx0XFx0XFx0fVxcbjIwMjM6XFx0XFx0fSBlbHNlIHtcXG4yMDI0OlxcdFxcdFxcdGlmICh0dW5fY29sbGVjdF9tZCkge1xcbjIwMjU6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjIwMjY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJUaGVyZSBhbHJlYWR5IGV4aXN0cyBhbiBleHRlcm5hbGx5IGNvbnRyb2xsZWQgZGV2aWNlIG9uIHRoaXMgZGVzdGluYXRpb24gcG9ydCBhbmQgdGhlIHNvdXJjZSBhZGRyZXNzXFxcIik7XFxuMjAyNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjIwMjg6XFx0XFx0XFx0fVxcbjIwMjk6XFx0XFx0fVxcbjIwMzA6XFx0XFxuMjAzMTpcXHRcXHRuZXdfY2ZnID0gZ2VuZXZlX2NvbmZpZ19hbGxvYyhjZmcpO1xcbjIwMzI6XFx0XFx0aWYgKElTX0VSUihuZXdfY2ZnKSlcXG4yMDMzOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG5ld19jZmcpO1xcbjIwMzQ6XFx0XFxuMjAzNTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVxcdTAwM2VjZmcsIG5ld19jZmcpO1xcbjIwMzY6XFx0XFxuMjAzNzpcXHRcXHRpZiAoY2ZnLVxcdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSB7XFxuMjAzODpcXHRcXHRcXHRkZXYtXFx1MDAzZWhlYWRlcl9vcHMgPSBOVUxMO1xcbjIwMzk6XFx0XFx0XFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XFxuMjA0MDpcXHRcXHRcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IDA7XFxuMjA0MTpcXHRcXHRcXHRkZXYtXFx1MDAzZWFkZHJfbGVuID0gMDtcXG4yMDQyOlxcdFxcdFxcdGRldi1cXHUwMDNlZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7XFxuMjA0MzpcXHRcXHR9XFxuMjA0NDpcXHRcXG4yMDQ1OlxcdFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xcbjIwNDY6XFx0XFx0aWYgKGVycikge1xcbjIwNDc6XFx0XFx0XFx0Z2VuZXZlX2ZyZWVfZGV2KGRldik7XFxuMjA0ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIwNDk6XFx0XFx0fVxcbjIwNTA6XFx0XFxuMjA1MTpcXHRcXHRsaXN0X2FkZChcXHUwMDI2Z2VuZXZlLVxcdTAwM2VuZXh0LCBcXHUwMDI2Z24tXFx1MDAzZWdlbmV2ZV9saXN0KTtcXG4yMDUyOlxcdFxcdHJldHVybiAwO1xcbjIwNTM6XFx0fVxcbjIwNTQ6XFx0XFxuMjA1NTpcXHRzdGF0aWMgdm9pZCBpbml0X3RubF9pbmZvKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbywgX191MTYgZHN0X3BvcnQpXFxuMjA1NjpcXHR7XFxuMjA1NzpcXHRcXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XFxuMjA1ODpcXHRcXHRpbmZvLVxcdTAwM2VrZXkudHBfZHN0ID0gaHRvbnMoZHN0X3BvcnQpO1xcbjIwNTk6XFx0fVxcbjIwNjA6XFx0XFxuMjA2MTpcXHRzdGF0aWMgaW50IGdlbmV2ZV9ubDJpbmZvKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4yMDYyOlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbjIwNjM6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGNoYW5nZWxpbmspXFxuMjA2NDpcXHR7XFxuMjA2NTpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvO1xcbjIwNjY6XFx0XFx0aW50IGF0dHJ0eXBlO1xcbjIwNjc6XFx0XFxuMjA2ODpcXHRcXHRpZiAoZGF0YVtJRkxBX0dFTkVWRV9DT0xMRUNUX01FVEFEQVRBXSkge1xcbjIwNjk6XFx0XFx0XFx0aWYgKGNoYW5nZWxpbmspIHtcXG4yMDcwOlxcdFxcdFxcdFxcdGF0dHJ0eXBlID0gSUZMQV9HRU5FVkVfQ09MTEVDVF9NRVRBREFUQTtcXG4yMDcxOlxcdFxcdFxcdFxcdGdvdG8gY2hhbmdlX25vdHN1cDtcXG4yMDcyOlxcdFxcdFxcdH1cXG4yMDczOlxcdFxcbjIwNzQ6XFx0XFx0XFx0Y2ZnLVxcdTAwM2Vjb2xsZWN0X21kID0gdHJ1ZTtcXG4yMDc1OlxcdFxcdFxcdGNmZy1cXHUwMDNlZHVhbHN0YWNrID0gdHJ1ZTtcXG4yMDc2OlxcdFxcdH1cXG4yMDc3OlxcdFxcbjIwNzg6XFx0XFx0aWYgKChkYXRhW0lGTEFfR0VORVZFX0xPQ0FMXSB8fCBkYXRhW0lGTEFfR0VORVZFX1JFTU9URV0pIFxcdTAwMjZcXHUwMDI2XFxuMjA3OTpcXHRcXHQgICAgKGRhdGFbSUZMQV9HRU5FVkVfTE9DQUw2XSB8fCBkYXRhW0lGTEFfR0VORVZFX1JFTU9URTZdKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTozNS40ODE3OTE1MjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMjc4Mzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCB0aGUgY3J1eCBvZiB0aGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuXG5cbioqSGFuZGxpbmcgTmV0d29yayBEZXZpY2UgUmVnaXN0cmF0aW9uIEZhaWx1cmUqKlxuXG5TbywgaWYgYHJlZ2lzdGVyX25ldGRldmljZWAgYml0ZXMgdGhlIGR1c3QsIHRoZSBmdW5jdGlvbiBgZ2VuZXZlX2NvbmZpZ3VyZWAgaW1tZWRpYXRlbHkgcmV0dXJucyBhbiBlcnJvci4gTm8gc3VycHJpc2VzIHRoZXJlOyB0aGF0J3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGZhaWx1cmUgc2NlbmFyaW8gY29tcGxldGVseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIHRoaXMgZXJyb3Igb3JpZ2luYXRlcywgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgZ2VuZXZlX2Rldl9jcmVhdGVfZmJgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHNlZSBleGFjdGx5IGhvdyBhbmQgd2h5IGBnZW5ldmVfY29uZmlndXJlYCBpcyBiZWluZyBzdG9wcGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgY2F1c2luZyB0aGF0IGluaXRpYWwgcmVnaXN0cmF0aW9uIHRvIGZhbHRlciBhbmQgcHJvcGFnYXRlIHRoZSBlcnJvciB0aHJvdWdoIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjM4Ljc4NDU3ODkwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU5MixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU5MjpcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZ2VuZXZlX2Rldl9jcmVhdGVfZmIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbjI1OTM6XFx0XFx0XFx0XFx0XFx0XFx0dTggbmFtZV9hc3NpZ25fdHlwZSwgdTE2IGRzdF9wb3J0KVxcbjI1OTQ6XFx0e1xcbjI1OTU6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9NQVggKyAxXTtcXG4yNTk2OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuMjU5NzpcXHRcXHRMSVNUX0hFQUQobGlzdF9raWxsKTtcXG4yNTk4OlxcdFxcdGludCBlcnI7XFxuMjU5OTpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBjZmcgPSB7XFxuMjYwMDpcXHRcXHRcXHQuZGYgPSBHRU5FVkVfREZfVU5TRVQsXFxuMjYwMTpcXHRcXHRcXHQudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gdHJ1ZSxcXG4yNjAyOlxcdFxcdFxcdC50dGxfaW5oZXJpdCA9IGZhbHNlLFxcbjI2MDM6XFx0XFx0XFx0LmNvbGxlY3RfbWQgPSB0cnVlLFxcbjI2MDQ6XFx0XFx0XFx0LmR1YWxzdGFjayA9IHRydWUsXFxuMjYwNTpcXHRcXHRcXHQucG9ydF9taW4gPSAxLFxcbjI2MDY6XFx0XFx0XFx0LnBvcnRfbWF4ID0gVVNIUlRfTUFYLFxcbjI2MDc6XFx0XFx0fTtcXG4yNjA4OlxcdFxcbjI2MDk6XFx0XFx0bWVtc2V0KHRiLCAwLCBzaXplb2YodGIpKTtcXG4yNjEwOlxcdFxcdGRldiA9IHJ0bmxfY3JlYXRlX2xpbmsobmV0LCBuYW1lLCBuYW1lX2Fzc2lnbl90eXBlLFxcbjI2MTE6XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZnZW5ldmVfbGlua19vcHMsIHRiLCBOVUxMKTtcXG4yNjEyOlxcdFxcdGlmIChJU19FUlIoZGV2KSlcXG4yNjEzOlxcdFxcdFxcdHJldHVybiBkZXY7XFxuMjYxNDpcXHRcXG4yNjE1OlxcdFxcdGluaXRfdG5sX2luZm8oXFx1MDAyNmNmZy5pbmZvLCBkc3RfcG9ydCk7XFxuMjYxNjpcXHRcXHRlcnIgPSBnZW5ldmVfY29uZmlndXJlKG5ldCwgZGV2LCBOVUxMLCBcXHUwMDI2Y2ZnKTtcXG4yNjE3OlxcdFxcdGlmIChlcnIpIHtcXG4yNjE4OlxcdFxcdFxcdGZyZWVfbmV0ZGV2KGRldik7XFxuMjYxOTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjI2MjA6XFx0XFx0fVxcbjI2MjE6XFx0XFxuMjYyMjpcXHRcXHQvKiBvcGVudnN3aXRjaCB1c2VycyBleHBlY3QgcGFja2V0IHNpemVzIHRvIGJlIHVucmVzdHJpY3RlZCxcXG4yNjIzOlxcdFxcdCAqIHNvIHNldCB0aGUgbGFyZ2VzdCBNVFUgd2UgY2FuLlxcbjI2MjQ6XFx0XFx0ICovXFxuMjYyNTpcXHRcXHRlcnIgPSBnZW5ldmVfY2hhbmdlX210dShkZXYsIElQX01BWF9NVFUpO1xcbjI2MjY6XFx0XFx0aWYgKGVycilcXG4yNjI3OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjI2Mjg6XFx0XFxuMjYyOTpcXHRcXHRlcnIgPSBydG5sX2NvbmZpZ3VyZV9saW5rKGRldiwgTlVMTCwgMCwgTlVMTCk7XFxuMjYzMDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4yNjMxOlxcdFxcdFxcdGdvdG8gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTozOC43ODQ4NjAxODRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkxNzA2MzQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdlbmV2ZSBEZXZpY2UgTGlmZWN5Y2xlIGFuZCBSZXNvdXJjZSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZ2VuZXZlX2Rldl9jcmVhdGVfZmJgLCBpZiBgZ2VuZXZlX2NvbmZpZ3VyZWAgZmFpbHMsIHRoZSBjb2RlIGNhbGxzIGBmcmVlX25ldGRldihkZXYpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogXCJXYWl0LCBgZnJlZV9uZXRkZXZgIHdpbGwgY2FsbCBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAsIHdoaWNoIGlzIGBnZW5ldmVfZnJlZV9kZXZgLlwiIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZDogYGdlbmV2ZV9jb25maWd1cmVgICppdHNlbGYqIGNhbGxzIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgZGlyZWN0bHkgKmJlZm9yZSogYGZyZWVfbmV0ZGV2YCBwb3RlbnRpYWxseSBjYWxscyBpdCBhZ2Fpbi4gSXMgdGhhdCBkb3VibGUtZnJlZSBzYWZlPyBZZXMsIGJlY2F1c2UgYGdlbmV2ZV9mcmVlX2RldmAgc2V0cyBgZ2VuZXZlLVx1MDAzZWNmZ2AgdG8gTlVMTCwgc28gdGhlIHNlY29uZCBjYWxsIGlzIGhhcm1sZXNzLlxuXG5Ob3csIHdoeSB3YXMgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBldmVuIGFkZGVkIGluIGBnZW5ldmVfY29uZmlndXJlYD8gVGhlIHJlYXNvbiBtdXN0IGJlIHJlbGF0ZWQgdG8gZmFpbHVyZXMgaW4gdGhlIGRldmljZSBjcmVhdGlvbiBwcm9jZXNzLiBJIGZpZ3VyZWQgaXQgb3V0Li4uIElmIGByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KWAgZmFpbHMsIGBmcmVlX25ldGRldihkZXYpYCBpcyBjYWxsZWQuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGNvdWxkIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGl0c2VsZiBjYWxsIGBmcmVlX25ldGRldmAgb24gZmFpbHVyZT8gTm8sIGl0IGRvZXNuJ3QuXG5cbk5vdywgaWYgYGdlbmV2ZV9jb25maWd1cmVgIGlzIGNhbGxlZCBmcm9tIGBnZW5ldmVfbmV3bGlua2A6IEkga25vdyB0aGF0IGBnZW5ldmVfbmV3bGlua2AgaXMgaXRzZWxmIGNhbGxlZCBieSBgcnRubF9uZXdsaW5rYC4gSWYgYG5ld2xpbmtgIGZhaWxzLCBgcnRubF9uZXdsaW5rYCBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAuIEkgbmVlZCB0byBiZSBzdXJlLiBJZiBgZnJlZV9uZXRkZXYoZGV2KWAgaXMgY2FsbGVkLCBpdCB3aWxsIGNhbGwgYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgc2V0IHVwIGNvcnJlY3RseS4gTm93LCBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAgaXMgYXNzaWduZWQgaW4gYGdlbmV2ZV9zZXR1cGAuXG5cblNwZWNpZmljYWxseSwgYGdlbmV2ZV9zZXR1cGAgc2V0cyBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IGdlbmV2ZV9mcmVlX2RldjtgIGFuZCBgZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtgLiBTbywgaWYgYHJlZ2lzdGVyX25ldGRldmljZWAgZmFpbHMsIGBkZXYtXHUwMDNlcmVnX3N0YXRlYCBpcyBgTkVUUkVHX1VOSU5JVElBTElaRURgLiBXaGVuIGBmcmVlX25ldGRldmAgaXMgY2FsbGVkLCBpdCBjaGVja3MgYGRldi1cdTAwM2VyZWdfc3RhdGVgLiBJZiBgZGV2LVx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5JTklUSUFMSVpFRGAsIGl0IGNhbGxzIGBkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yKGRldilgLiBUaGlzIGhhbmRsZXMgdGhlIGxpZmVjeWNsZSBjb3JyZWN0bHkuXG5cbk9rYXksIHNvIGlmIGBkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yYCBpcyBjYWxsZWQsIGl0IHdpbGwgZnJlZSBgZ2VuZXZlLVx1MDAzZWNmZ2AuIFdlIGFyZSBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQuIEJ1dCBub3cgSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmc6IHNvIHdoeSBkaWQgdGhlIHBhdGNoIGFkZCBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGluIGBnZW5ldmVfY29uZmlndXJlYD8gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgZ2VuZXZlX2NvbmZpZ3VyZWAgYWxsb2NhdGVzIGBuZXdfY2ZnYCBhbmQgYXNzaWducyBpdCB0byBgZ2VuZXZlLVx1MDAzZWNmZ2AuIElmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzLCBgZ2VuZXZlLVx1MDAzZWNmZ2AgKmNvdWxkKiBiZSBzZXQgdG8gYSB2YWxpZCBhZGRyZXNzLiBJZiBgZ2VuZXZlX2NvbmZpZ3VyZWAgaXMgY2FsbGVkIGZyb20gYGdlbmV2ZV9uZXdsaW5rYCwgYW5kIGl0IGZhaWxzLCBgcnRubF9uZXdsaW5rYCB3aWxsIGNhbGwgYGZyZWVfbmV0ZGV2KGRldilgLiBUaGF0J3MgdGhlIGtleS4gSWYgYHJ0bmxfbmV3bGlua2AgY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgLCBpdCB3aWxsIGNhbGwgYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgLCB3aGljaCBpcyBgZ2VuZXZlX2ZyZWVfZGV2YCwgd2hpY2ggd2lsbCBmcmVlIGBnZW5ldmUtXHUwMDNlY2ZnYC4gVGhpcyBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgdGhlIGNvbmZpZyBzdHJ1Y3QuIE5vdyBJIHNlZSB0aGF0IGBnZW5ldmVfZnJlZV9kZXZgIGlzIG5lZWRlZC4gTm93IEkgc2hvdWxkIGNoZWNrIGBydG5sX25ld2xpbmtgIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1NTo0OC43MDE5MjY2MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzE4MDg2OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRubF9uZXdsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTM4MTQ9RVhQT1JUX1NZTUJPTChydG5sX2NyZWF0ZV9saW5rKTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zODE1LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjM4MTY6c3RydWN0IHJ0bmxfbmV3bGlua190YnMge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM4MTctXFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9NQVggKyAxXTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTM4MjM9c3RhdGljIGludCBydG5sX2NoYW5nZWxpbmsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zODI1LVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKnRndF9uZXQsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzgyNjpcXHRcXHRcXHQgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3RicyAqdGJzLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM4MjctXFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqKmRhdGEsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zODg4PXN0YXRpYyBpbnQgcnRubF9ncm91cF9jaGFuZ2VsaW5rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zOTA3LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjM5MDg6c3RhdGljIGludCBydG5sX25ld2xpbmtfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZmluZm9tc2cgKmlmbSxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zOTA5LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzkxNi1cXHR1bnNpZ25lZCBjaGFyIG5hbWVfYXNzaWduX3R5cGUgPSBORVRfTkFNRV9VU0VSO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjM5MTc6XFx0c3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgcGFyYW1zID0ge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5MTgtXFx0XFx0LnNyY19uZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKSxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTM5ODI9c3RhdGljIHN0cnVjdCBuZXQgKnJ0bmxfZ2V0X3BlZXJfbmV0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDE5LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQwMjA6c3RhdGljIGludCBfX3J0bmxfbmV3bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDIxLVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwMjMtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ICpwZWVyX25ldCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MDI0OlxcdFxcdFxcdCAgc3RydWN0IHJ0bmxfbmV3bGlua190YnMgKnRicyxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDI1LVxcdFxcdFxcdCAgc3RydWN0IG5sYXR0ciAqKmRhdGEsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDc3LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQwNzg6XFx0cmV0dXJuIHJ0bmxfbmV3bGlua19jcmVhdGUoc2tiLCBpZm0sIG9wcywgdGd0X25ldCwgbGlua19uZXQsIHBlZXJfbmV0LCBubGgsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDA3OS1cXHRcXHRcXHRcXHQgICB0YiwgZGF0YSwgZXh0YWNrKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwODEtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDA4MjpzdGF0aWMgaW50IHJ0bmxfbmV3bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MDgzLVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwODctXFx0c3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyA9IE5VTEw7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDA4ODpcXHRzdHJ1Y3QgcnRubF9uZXdsaW5rX3RicyAqdGJzO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQwODktXFx0c3RydWN0IHJ0bmxfbmV0cyBydG5sX25ldHM7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MTk0LVxcdHJ0bmxfbmV0c19sb2NrKFxcdTAwMjZydG5sX25ldHMpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQxOTU6XFx0cmV0ID0gX19ydG5sX25ld2xpbmsoc2tiLCBubGgsIG9wcywgdGd0X25ldCwgbGlua19uZXQsIHBlZXJfbmV0LCB0YnMsIGRhdGEsIGV4dGFjayk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDE5Ni1cXHRydG5sX25ldHNfdW5sb2NrKFxcdTAwMjZydG5sX25ldHMpO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDQwMj1zdGF0aWMgaW50IHJ0bmxfbGlua3Byb3AoaW50IGNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NDQ5LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ0NTA6c3RhdGljIGludCBydG5sX25ld2xpbmtwcm9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ0NTEtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTcyMTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjcyMTU6XFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTkssIC5kb2l0ID0gcnRubF9uZXdsaW5rLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyMTYtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjMxLVxcdHsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzIzMjpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzIzMy1cXHR7Lm1zZ3R5cGUgPSBSVE1fREVMTElOS1BST1AsIC5kb2l0ID0gcnRubF9kZWxsaW5rcHJvcH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU1OjQ5Ljc3Mzc0MTQ3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzMTI4MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgcnRubF9uZXdsaW5rX2NyZWF0ZWAqKlxuXG5Pa2F5LCBzbyB0aGUgbWVudGFsIGZvY3VzIGhlcmUgaXMgdG8gZXhhbWluZSB0aGUgYHJ0bmxfbmV3bGlua19jcmVhdGVgIGZ1bmN0aW9uLiBJIGltbWVkaWF0ZWx5IGtub3cgdGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIG5ldyBuZXR3b3JrIGxpbmtzIHZpYSB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZS4gVGhlIGNob2ljZSBvZiBgcnRubF9uZXdsaW5rX2NyZWF0ZWAgZnJvbSB0aGUgYG5ldC9jb3JlL3J0bmV0bGluay5jYCBmaWxlIGlzIHRlbGxpbmc7IGl0IHNpZ25hbHMgYSBkZXNpcmUgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBtZWNoYW5pc20gZm9yIGJyaW5naW5nIHVwIGEgbmV3IGludGVyZmFjZSwgbGlrZWx5IHRvIHRyb3VibGVzaG9vdCBvciBhbmFseXplIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGNvbXBvbmVudHMuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBkYXRhIHBhcnNpbmcsIHZhbGlkYXRpb24sIGFuZCB1bHRpbWF0ZWx5LCB0aGUgZGV2aWNlIGRyaXZlciBpbnRlcmFjdGlvbiB0aGF0IHRha2VzIHBsYWNlLiBMZXQncyBzZWUgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQsIGVycm9yIGNvbmRpdGlvbnMsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJ20ga2VlbiB0byBzZWUgaWYgYW55IG5ldyBidWdzIGhhdmUgY3JlcHQgaW4gcmVjZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzIzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTU6NTIuNzk2ODcyNDc3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Njk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTA4LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTA4OlxcdHN0YXRpYyBpbnQgcnRubF9uZXdsaW5rX2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWZpbmZvbXNnICppZm0sXFxuMzkwOTpcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyxcXG4zOTEwOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0ICp0Z3RfbmV0LCBzdHJ1Y3QgbmV0ICpsaW5rX25ldCxcXG4zOTExOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0ICpwZWVyX25ldCxcXG4zOTEyOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4zOTEzOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKipkYXRhLFxcbjM5MTQ6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4zOTE1OlxcdHtcXG4zOTE2OlxcdFxcdHVuc2lnbmVkIGNoYXIgbmFtZV9hc3NpZ25fdHlwZSA9IE5FVF9OQU1FX1VTRVI7XFxuMzkxNzpcXHRcXHRzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyBwYXJhbXMgPSB7XFxuMzkxODpcXHRcXHRcXHQuc3JjX25ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLFxcbjM5MTk6XFx0XFx0XFx0LmxpbmtfbmV0ID0gbGlua19uZXQsXFxuMzkyMDpcXHRcXHRcXHQucGVlcl9uZXQgPSBwZWVyX25ldCxcXG4zOTIxOlxcdFxcdFxcdC50YiA9IHRiLFxcbjM5MjI6XFx0XFx0XFx0LmRhdGEgPSBkYXRhLFxcbjM5MjM6XFx0XFx0fTtcXG4zOTI0OlxcdFxcdHUzMiBwb3J0aWQgPSBORVRMSU5LX0NCKHNrYikucG9ydGlkO1xcbjM5MjU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4zOTI2OlxcdFxcdGNoYXIgaWZuYW1lW0lGTkFNU0laXTtcXG4zOTI3OlxcdFxcdGludCBlcnI7XFxuMzkyODpcXHRcXG4zOTI5OlxcdFxcdGlmICghb3BzLVxcdTAwM2VhbGxvYyBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VzZXR1cClcXG4zOTMwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4zOTMxOlxcdFxcbjM5MzI6XFx0XFx0aWYgKHRiW0lGTEFfSUZOQU1FXSkge1xcbjM5MzM6XFx0XFx0XFx0bmxhX3N0cnNjcHkoaWZuYW1lLCB0YltJRkxBX0lGTkFNRV0sIElGTkFNU0laKTtcXG4zOTM0OlxcdFxcdH0gZWxzZSB7XFxuMzkzNTpcXHRcXHRcXHRzbnByaW50ZihpZm5hbWUsIElGTkFNU0laLCBcXFwiJXMlJWRcXFwiLCBvcHMtXFx1MDAzZWtpbmQpO1xcbjM5MzY6XFx0XFx0XFx0bmFtZV9hc3NpZ25fdHlwZSA9IE5FVF9OQU1FX0VOVU07XFxuMzkzNzpcXHRcXHR9XFxuMzkzODpcXHRcXG4zOTM5OlxcdFxcdGRldiA9IHJ0bmxfY3JlYXRlX2xpbmsodGd0X25ldCwgaWZuYW1lLCBuYW1lX2Fzc2lnbl90eXBlLCBvcHMsIHRiLFxcbjM5NDA6XFx0XFx0XFx0XFx0ICAgICAgIGV4dGFjayk7XFxuMzk0MTpcXHRcXHRpZiAoSVNfRVJSKGRldikpIHtcXG4zOTQyOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoZGV2KTtcXG4zOTQzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjM5NDQ6XFx0XFx0fVxcbjM5NDU6XFx0XFxuMzk0NjpcXHRcXHRkZXYtXFx1MDAzZWlmaW5kZXggPSBpZm0tXFx1MDAzZWlmaV9pbmRleDtcXG4zOTQ3OlxcdFxcbjM5NDg6XFx0XFx0aWYgKG9wcy1cXHUwMDNlbmV3bGluaylcXG4zOTQ5OlxcdFxcdFxcdGVyciA9IG9wcy1cXHUwMDNlbmV3bGluayhkZXYsIFxcdTAwMjZwYXJhbXMsIGV4dGFjayk7XFxuMzk1MDpcXHRcXHRlbHNlXFxuMzk1MTpcXHRcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4zOTUyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzk1MzpcXHRcXHRcXHRmcmVlX25ldGRldihkZXYpO1xcbjM5NTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMzk1NTpcXHRcXHR9XFxuMzk1NjpcXHRcXG4zOTU3OlxcdFxcdGVyciA9IHJ0bmxfY29uZmlndXJlX2xpbmsoZGV2LCBpZm0sIHBvcnRpZCwgbmxoKTtcXG4zOTU4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjM5NTk6XFx0XFx0XFx0Z290byBvdXRfdW5yZWdpc3RlcjtcXG4zOTYwOlxcdFxcdGlmICh0YltJRkxBX01BU1RFUl0pIHtcXG4zOTYxOlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbjM5NjI6XFx0XFx0XFx0ZXJyID0gZG9fc2V0X21hc3RlcihkZXYsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTUFTVEVSXSksIGV4dGFjayk7XFxuMzk2MzpcXHRcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbjM5NjQ6XFx0XFx0XFx0aWYgKGVycilcXG4zOTY1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VucmVnaXN0ZXI7XFxuMzk2NjpcXHRcXHR9XFxuMzk2NzpcXHRcXG4zOTY4OlxcdG91dDpcXG4zOTY5OlxcdFxcdHJldHVybiBlcnI7XFxuMzk3MDpcXHRvdXRfdW5yZWdpc3RlcjpcXG4zOTcxOlxcdFxcdGlmIChvcHMtXFx1MDAzZW5ld2xpbmspIHtcXG4zOTcyOlxcdFxcdFxcdExJU1RfSEVBRChsaXN0X2tpbGwpO1xcbjM5NzM6XFx0XFxuMzk3NDpcXHRcXHRcXHRvcHMtXFx1MDAzZWRlbGxpbmsoZGV2LCBcXHUwMDI2bGlzdF9raWxsKTtcXG4zOTc1OlxcdFxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXFx1MDAyNmxpc3Rfa2lsbCk7XFxuMzk3NjpcXHRcXHR9IGVsc2Uge1xcbjM5Nzc6XFx0XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTU6NTIuNzk3MTUyNTQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzgwODE2ODQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipHZW5ldmUgRGV2aWNlIENyZWF0aW9uIGFuZCBDbGVhbnVwOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgR2VuZXZlIGRldmljZXMgYXJlIGNyZWF0ZWQgYW5kIHN1YnNlcXVlbnRseSBjbGVhbmVkIHVwIGluIHRoZSBmYWNlIG9mIGVycm9ycy4gUmlnaHQsIHNvIGBydG5sX25ld2xpbmtfY3JlYXRlYCBjYWxscyB0aGUgYG5ld2xpbmtgIG9wZXJhdGlvbiwgd2hpY2ggaW4gb3VyIGNhc2UgaXMgYGdlbmV2ZV9uZXdsaW5rYC4gSWYgYGdlbmV2ZV9uZXdsaW5rYCBydW5zIGludG8gdHJvdWJsZSwgaXQgcmV0dXJucyBhbiBlcnJvciBhbmQgdGhlIGtlcm5lbCBjYWxscyBgZnJlZV9uZXRkZXYoZGV2KWAuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIElmIGBnZW5ldmVfY29uZmlndXJlYCBmYWlscywgaXQgY2FsbHMgYGdlbmV2ZV9mcmVlX2RldihkZXYpYCBkaXJlY3RseSBhbmQgcmV0dXJucyBhbiBlcnJvci4gVGhpcyBwcm9wYWdhdGVzIHVwIHRvIGBnZW5ldmVfbmV3bGlua2AsIHdoaWNoIHRoZW4gYWxzbyByZXR1cm5zIGFuIGVycm9yLCBhbmQgZmluYWxseSBgcnRubF9uZXdsaW5rX2NyZWF0ZWAgY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgLiBTbywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUgZmFpbHVyZSBpcywgYGZyZWVfbmV0ZGV2KGRldilgIGdldHMgY2FsbGVkIGV2ZW50dWFsbHkuXG5cbmBmcmVlX25ldGRldihkZXYpYCB0aGVuIGNhbGxzIGBkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yKGRldilgLCB3aGljaCBpbiBvdXIgY2FzZSAqaXMqIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAuIEJ1dCB3YWl0LCBkb2VzIHRoaXMgbWVhbiBgZ2VuZXZlX2ZyZWVfZGV2YCBjb3VsZCBiZSBjYWxsZWQgdHdpY2UgaW4gc29tZSBzY2VuYXJpb3M/IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBzYWZlLlxuXG5BaCwgSSBzZWUhIGBnZW5ldmVfZnJlZV9kZXZgIHVzZXMgYFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVx1MDAzZWNmZywgTlVMTCk7YCBhbmQgYGdlbmV2ZV9jb25maWdfZnJlZWAgY2hlY2tzIGZvciBOVUxMLiBUaGF0IHNob3VsZCBwcmV2ZW50IGFueSBkb3VibGUtZnJlZSBpc3N1ZXMsIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cblxuQnV0ICp3aHkqIHdhcyBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGFkZGVkIGluIGBnZW5ldmVfY29uZmlndXJlYCBpbiB0aGUgZmlyc3QgcGxhY2U/IExldCBtZSByZXRyYWNlIG15IHN0ZXBzLiBPaCwgcmlnaHQsIGBnZW5ldmVfY29uZmlndXJlYCB1c2VzIGByY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVx1MDAzZWNmZywgbmV3X2NmZyk7YCBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIGZhaWxzLCBgZ2VuZXZlX2NvbmZpZ3VyZWAgcmV0dXJucyBhbiBlcnJvci4gSWYgd2UgY2FsbCBpdCBmcm9tIGBnZW5ldmVfZGV2X2NyZWF0ZV9mYmAsIGl0IGFsc28gY2FsbHMgYGZyZWVfbmV0ZGV2KGRldilgIG9uIGVycm9yLiBTbyB0aGUgbmV0IGVmZmVjdCBpcywgaW4gZWl0aGVyIGVycm9yIHBhdGggYGZyZWVfbmV0ZGV2KGRldilgIGdldHMgY2FsbGVkLiBUaGlzIG1lYW5zIHRoYXQgKnJlZ2FyZGxlc3MqIG9mIHdoZXRoZXIgdGhlIGVycm9yIG9yaWdpbmF0ZXMgZHVyaW5nIGNvbmZpZ3VyYXRpb24gb3IgZHVyaW5nIHRoZSBpbml0aWFsIGRldmljZSBzZXR1cCwgd2UncmUgZ3VhcmFudGVlZCB0byBmcmVlIHRoZSBkZXZpY2UgY29ycmVjdGx5LlxuXG5Pa2F5LCBzbyBgZnJlZV9uZXRkZXYoZGV2KWAgY2FsbHMgYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgLCB3aGljaCBpcyBgZ2VuZXZlX2ZyZWVfZGV2YC4gQWxyaWdodCwgSSB0aGluayBJJ3ZlIGdvdCBpdC4gSSBuZWVkIHRvIHJldmlzaXQgYGdlbmV2ZV9mcmVlX2RldmAgbm93LCBhbmQgbWFrZSBzdXJlIHRoYXQgYW55IFJDVSBpc3N1ZXMgYXJlIGFjY291bnRlZCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTc6NDYuNjA1MzI0NjU1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzY1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzY1OlxcdC8qIEluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovXFxuMTc2NjpcXHRzdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xNzY3OlxcdHtcXG4xNzY4OlxcdFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjE3Njk6XFx0XFx0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2VuZXZlLVxcdTAwM2VjZmcsIDEpO1xcbjE3NzA6XFx0XFxuMTc3MTpcXHRcXHRnZW5ldmVfY29uZmlnX2ZyZWUoY2ZnKTtcXG4xNzcyOlxcdFxcdFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVxcdTAwM2VjZmcsIE5VTEwpO1xcbjE3NzM6XFx0fVxcbjE3NzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU3OjQ2LjYwNTQ2MDYwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzEzMzMxNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkdlbmV2ZSBEZXZpY2UgTGlmZWN5Y2xlIC0gQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEdlbmV2ZSBkZXZpY2UgZHJpdmVyIGFuZCBzb21ldGhpbmcgaXNuJ3QgcXVpdGUgY2xpY2tpbmcuIElmIGBnZW5ldmVfZnJlZV9kZXZgIGlzIGNhbGxlZCBmcm9tIGBmcmVlX25ldGRldmAsIHdoaWNoIGl0IGlzLCB0aGVuIGl0ICpzaG91bGQqIGZyZWUgYGdlbmV2ZS1cdTAwM2VjZmdgLiBTbywgd2h5IHdhcyBgZ2VuZXZlX2ZyZWVfZGV2KGRldilgIGFkZGVkIGluIGBnZW5ldmVfY29uZmlndXJlYD8gU29tZXRoaW5nIHNlZW1zIHJlZHVuZGFudCBoZXJlLlxuXG5MZXQgbWUgcXVpY2tseSBjaGVjayBgcmVnaXN0ZXJfbmV0ZGV2aWNlYC4uLiBkb2VzIGl0IHRyaWdnZXIgYSBjYWxsIHRvIGBmcmVlX25ldGRldmA/IEFoLCBubywgaXQgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBmcmVlX25ldGRldmAuIE9rYXksIHNvIHdlIG5lZWQgdG8gbG9vayBkZWVwZXIuIFdhaXQgYSBtaW51dGXigKYgaWYgYHJlZ2lzdGVyX25ldGRldmljZWAgZmFpbHMsIHRoZSBgZGV2LVx1MDAzZXJlZ19zdGF0ZWAgaXMgc2V0IHRvIGBORVRSRUdfVU5JTklUSUFMSVpFRGAuIFRoYXQncyBpbXBvcnRhbnQhIElmIGBkZXYtXHUwMDNlcmVnX3N0YXRlYCAqaXMqIGBORVRSRUdfVU5JTklUSUFMSVpFRGAsIHRoZW4gYGZyZWVfbmV0ZGV2YCAqd2lsbCogY2FsbCBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAuIFRoYXQncyB3aGVyZSBpdCBoYXBwZW5zLlxuXG5TbyB0aGUgZGVzdHJ1Y3RvciBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgdGhlIGBnZW5ldmUtXHUwMDNlY2ZnYCBidXQgdGhlIGZ1bmN0aW9uIGBnZW5ldmVfZnJlZV9kZXZgIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgYXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLlxuXG5IYW5nIG9u4oCmIHdoYXQgaWYgYGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldmAgaXMgc2V0IHRvIHRydWU/IFRoaXMgY291bGQgYmUgYSBmYWN0b3IuIE5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGZyZWVfbmV0ZGV2YCBpbiBgbmV0L2NvcmUvZGV2LmNgIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI1NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU3OjUxLjMxODc5NDc2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NTg4NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyZWVfbmV0ZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTExMzMyPWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTExNDkyLVxcdGlmIChyZXQpIHtcXG5uZXQvY29yZS9kZXYuYzoxMTQ5MzpcXHRcXHQvKiBFeHBlY3QgZXhwbGljaXQgZnJlZV9uZXRkZXYoKSBvbiBmYWlsdXJlICovXFxubmV0L2NvcmUvZGV2LmM6MTE0OTQ6XFx0XFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IGZhbHNlO1xcbm5ldC9jb3JlL2Rldi5jLTExNDk1LVxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgTlVMTCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMTYwNT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTY4OC0gKlxcdHJ0bmxfdW5sb2NrKCk7XFxubmV0L2NvcmUvZGV2LmM6MTE2ODk6ICpcXHRmcmVlX25ldGRldih5MSk7XFxubmV0L2NvcmUvZGV2LmM6MTE2OTA6ICpcXHRmcmVlX25ldGRldih5Mik7XFxubmV0L2NvcmUvZGV2LmMtMTE2OTEtICpcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExNzAyPXZvaWQgbmV0ZGV2X3J1bl90b2RvKHZvaWQpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTc1OC1cXHRcXHRcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvcihkZXYpO1xcbm5ldC9jb3JlL2Rldi5jOjExNzU5OlxcdFxcdGlmIChkZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2KVxcbm5ldC9jb3JlL2Rldi5jOjExNzYwOlxcdFxcdFxcdGZyZWVfbmV0ZGV2KGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTE3NjEtXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjA0MT1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjE2Ni1mcmVlX2FsbDpcXG5uZXQvY29yZS9kZXYuYzoxMjE2NzpcXHRmcmVlX25ldGRldihkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTEyMTY4LVxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIxODA9c3RhdGljIHZvaWQgbmV0ZGV2X25hcGlfZXhpdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIxOTYtLyoqXFxubmV0L2NvcmUvZGV2LmM6MTIxOTc6ICogZnJlZV9uZXRkZXYgLSBmcmVlIG5ldHdvcmsgZGV2aWNlXFxubmV0L2NvcmUvZGV2LmMtMTIxOTgtICogQGRldjogZGV2aWNlXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjIwNC0gKi9cXG5uZXQvY29yZS9kZXYuYzoxMjIwNTp2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2LmMtMTIyMDYte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIyMTQtXFx0XFx0QVNTRVJUX1JUTkwoKTtcXG5uZXQvY29yZS9kZXYuYzoxMjIxNTpcXHRcXHRkZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcXG5uZXQvY29yZS9kZXYuYy0xMjIxNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjI2Mi19XFxubmV0L2NvcmUvZGV2LmM6MTIyNjM6RVhQT1JUX1NZTUJPTChmcmVlX25ldGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTIyNjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU3OjUxLjQzNTM5MTIxMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU0NDYyOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBGYWlsdXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nJ3MgY2F0Y2hpbmcgbXkgZXllLiBJZiBpdCByZXR1cm5zIGFuIGVycm9yLCBpdCBzZXRzIGBkZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSBmYWxzZTtgIGFuZCB0aGVuIGNhbGxzIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZWAuIFRoYXQgc2VlbXMgY291bnRlcmludHVpdGl2ZSBhdCBmaXJzdCwgZG9lc24ndCBpdD8gSXQgaW1wbGllcyB0aGF0IGlmIGl0IGZhaWxzLCB0aGUgZGV2aWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBmcmVlZCBieSB0aGUgc3RhbmRhcmQgbWVhbnMuIEJ1dCB0aGVuLCBJIHJlbWVtYmVyIHRoYXQgYHJlZ2lzdGVyX25ldGRldmljZWAgY2FuIGZhaWwgKmFmdGVyKiBzb21lIGRldmljZSBpbml0aWFsaXphdGlvbiBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBpcyBiZWluZyBwYXJ0aWFsbHkgdW5kb25lLlxuXG5Ib3dldmVyLCBhIGZ1cnRoZXIgdGhvdWdodCBzdHJpa2VzIG1lLiBJZiBgZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2YCBpcyBmYWxzZSwgYW5kIHRoZW4gYSBjYWxsIHRvIGBmcmVlX25ldGRldmAgaXMgbWFkZSwgd2lsbCB0aGF0IHN0aWxsIGZyZWUgdGhlIGRldmljZT8gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZsYWcuIEl0IHNlZW1zIEkgbmVlZCB0byByZWFkIHRoZSBgZnJlZV9uZXRkZXZgIGNvZGUgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGUgbG9naWMuIEkgY2FuIG1ha2Ugc29tZSBpbmZlcmVuY2VzLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU3OjU5LjA4OTg1Nzk0NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDQyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIyMDUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjA1OlxcdHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xMjIwNjpcXHR7XFxuMTIyMDc6XFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4xMjIwODpcXHRcXG4xMjIwOTpcXHRcXHQvKiBXaGVuIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciByZWdpc3Rlcl9uZXRkZXZpY2UoKSBmYWlsZWQgdGhlIHVud2luZFxcbjEyMjEwOlxcdFxcdCAqIGhhbmRsaW5nIG1heSBzdGlsbCBiZSBkaXNtYW50bGluZyB0aGUgZGV2aWNlLiBIYW5kbGUgdGhhdCBjYXNlIGJ5XFxuMTIyMTE6XFx0XFx0ICogZGVmZXJyaW5nIHRoZSBmcmVlLlxcbjEyMjEyOlxcdFxcdCAqL1xcbjEyMjEzOlxcdFxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5SRUdJU1RFUklORykge1xcbjEyMjE0OlxcdFxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuMTIyMTU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuMTIyMTY6XFx0XFx0XFx0cmV0dXJuO1xcbjEyMjE3OlxcdFxcdH1cXG4xMjIxODpcXHRcXG4xMjIxOTpcXHRcXHRXQVJOX09OKGRldi1cXHUwMDNlY2ZnICE9IGRldi1cXHUwMDNlY2ZnX3BlbmRpbmcpO1xcbjEyMjIwOlxcdFxcdGtmcmVlKGRldi1cXHUwMDNlY2ZnKTtcXG4xMjIyMTpcXHRcXHRrZnJlZShkZXYtXFx1MDAzZWV0aHRvb2wpO1xcbjEyMjIyOlxcdFxcdG5ldGlmX2ZyZWVfdHhfcXVldWVzKGRldik7XFxuMTIyMjM6XFx0XFx0bmV0aWZfZnJlZV9yeF9xdWV1ZXMoZGV2KTtcXG4xMjIyNDpcXHRcXG4xMjIyNTpcXHRcXHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGRldi1cXHUwMDNlaW5ncmVzc19xdWV1ZSwgMSkpO1xcbjEyMjI2OlxcdFxcbjEyMjI3OlxcdFxcdF9faHdfYWRkcl9mbHVzaChcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xcbjEyMjI4OlxcdFxcbjEyMjI5OlxcdFxcdC8qIEZsdXNoIGRldmljZSBhZGRyZXNzZXMgKi9cXG4xMjIzMDpcXHRcXHRkZXZfYWRkcl9mbHVzaChkZXYpO1xcbjEyMjMxOlxcdFxcbjEyMjMyOlxcdFxcdG5ldGRldl9uYXBpX2V4aXQoZGV2KTtcXG4xMjIzMzpcXHRcXG4xMjIzNDpcXHRcXHRuZXRpZl9kZWxfY3B1X3JtYXAoZGV2KTtcXG4xMjIzNTpcXHRcXG4xMjIzNjpcXHRcXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcXHUwMDI2ZGV2LVxcdTAwM2VyZWZjbnRfdHJhY2tlcik7XFxuMTIyMzc6XFx0I2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcXG4xMjIzODpcXHRcXHRmcmVlX3BlcmNwdShkZXYtXFx1MDAzZXBjcHVfcmVmY250KTtcXG4xMjIzOTpcXHRcXHRkZXYtXFx1MDAzZXBjcHVfcmVmY250ID0gTlVMTDtcXG4xMjI0MDpcXHQjZW5kaWZcXG4xMjI0MTpcXHRcXHRmcmVlX3BlcmNwdShkZXYtXFx1MDAzZWNvcmVfc3RhdHMpO1xcbjEyMjQyOlxcdFxcdGRldi1cXHUwMDNlY29yZV9zdGF0cyA9IE5VTEw7XFxuMTIyNDM6XFx0XFx0ZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2V4ZHBfYnVsa3EpO1xcbjEyMjQ0OlxcdFxcdGRldi1cXHUwMDNleGRwX2J1bGtxID0gTlVMTDtcXG4xMjI0NTpcXHRcXG4xMjI0NjpcXHRcXHRuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShkZXYpO1xcbjEyMjQ3OlxcdFxcbjEyMjQ4OlxcdFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuMTIyNDk6XFx0XFxuMTIyNTA6XFx0XFx0LyogIENvbXBhdGliaWxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzICovXFxuMTIyNTE6XFx0XFx0aWYgKGRldi1cXHUwMDNlcmVnX3N0YXRlID09IE5FVFJFR19VTklOSVRJQUxJWkVEIHx8XFxuMTIyNTI6XFx0XFx0ICAgIGRldi1cXHUwMDNlcmVnX3N0YXRlID09IE5FVFJFR19EVU1NWSkge1xcbjEyMjUzOlxcdFxcdFxcdGt2ZnJlZShkZXYpO1xcbjEyMjU0OlxcdFxcdFxcdHJldHVybjtcXG4xMjI1NTpcXHRcXHR9XFxuMTIyNTY6XFx0XFxuMTIyNTc6XFx0XFx0QlVHX09OKGRldi1cXHUwMDNlcmVnX3N0YXRlICE9IE5FVFJFR19VTlJFR0lTVEVSRUQpO1xcbjEyMjU4OlxcdFxcdFdSSVRFX09OQ0UoZGV2LVxcdTAwM2VyZWdfc3RhdGUsIE5FVFJFR19SRUxFQVNFRCk7XFxuMTIyNTk6XFx0XFxuMTIyNjA6XFx0XFx0Lyogd2lsbCBmcmVlIHZpYSBkZXZpY2UgcmVsZWFzZSAqL1xcbjEyMjYxOlxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmRldi1cXHUwMDNlZGV2KTtcXG4xMjI2MjpcXHR9XFxuMTIyNjM6XFx0RVhQT1JUX1NZTUJPTChmcmVlX25ldGRldik7XFxuMTIyNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU3OjU5LjA5MDUwMzg2NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDA2OTM5OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipSZWFsaXppbmcgYSBDcml0aWNhbCBEaXNjcmVwYW5jeSBpbiBEZXZpY2UgRGUtaW5pdGlhbGl6YXRpb24qKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGUgbmV0d29yayBkZXZpY2UgdGVhcmRvd24gc2VxdWVuY2UsIGFuZCBpdCdzIHN1ZGRlbmx5IGhpdHRpbmcgbWUuICpgZnJlZV9uZXRkZXZgIGNsZWFybHkgZG9lc24ndCBpbnZva2UgYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgIGRpcmVjdGx5ISogVGhhdCdzIGEgcG90ZW50aWFsIHByb2JsZW0sIGEgc2lnbmlmaWNhbnQgb3ZlcnNpZ2h0IGlmIHdlJ3JlIHJlbHlpbmcgb24gdGhhdCBkZXN0cnVjdG9yIGZvciBjbGVhbnVwLiBJIGFsd2F5cyBhc3N1bWVkIGl0IHdhcyBjYWxsZWQgdGhlcmUsIGFzIHRoZSBuZXQgZGV2aWNlIGlzIGZyZWVkLlxuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoZXJlICppcyogYGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3JgIGFjdHVhbGx5IGNhbGxlZD8gQWgsIG9mIGNvdXJzZSEgKkl0J3MgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbmV0ZGV2X3J1bl90b2RvYCEqIE9rYXksIHRoYXQgbWVhbnMgaXQgaXMgY2FsbGVkLCBidXQgdW5kZXIgYSBzcGVjaWZpYyBjb25kaXRpb24uLi4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZnJlZV9uZXRkZXZgIGFuZCBgbmV0ZGV2X3J1bl90b2RvYCwgYW5kIG1ha2Ugc3VyZSB0aGUgbGF0dGVyICphbHdheXMqIHJ1bnMgd2hlbiBpdCBuZWVkcyB0by4gVGhpcyBpcyBzb21ldGhpbmcgSSdtIGdvaW5nIHRvIGhhdmUgdG8gbG9vayBjbG9zZXIgYXQsIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGluY29tcGxldGUgY2xlYW51cCBpZiB0aGF0IGV4ZWN1dGlvbiBwYXRoIGlzIG5vdCBjb25zaXN0ZW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGBuZXRkZXZfcnVuX3RvZG9gIGdldHMgc2NoZWR1bGVkIGFuZCBleGVjdXRlZCB0byBtYWtlIHN1cmUgdGhlIHByaXZhdGUgZGF0YSBpcyBjbGVhbmVkIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk1MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTg6MDQuNDk3NDQ4MTc4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjgyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3NDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNzQwOlxcdFxcdH1cXG4xMTc0MTpcXHRcXG4xMTc0MjpcXHRcXHRjbnQgPSAwO1xcbjExNzQzOlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2bGlzdCkpIHtcXG4xMTc0NDpcXHRcXHRcXHRkZXYgPSBuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShcXHUwMDI2bGlzdCk7XFxuMTE3NDU6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmRldi1cXHUwMDNldG9kb19saXN0KTtcXG4xMTc0NjpcXHRcXG4xMTc0NzpcXHRcXHRcXHQvKiBwYXJhbm9pYSAqL1xcbjExNzQ4OlxcdFxcdFxcdEJVR19PTihuZXRkZXZfcmVmY250X3JlYWQoZGV2KSAhPSAxKTtcXG4xMTc0OTpcXHRcXHRcXHRCVUdfT04oIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNlcHR5cGVfYWxsKSk7XFxuMTE3NTA6XFx0XFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZXB0eXBlX3NwZWNpZmljKSk7XFxuMTE3NTE6XFx0XFx0XFx0V0FSTl9PTihyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VpcF9wdHIpKTtcXG4xMTc1MjpcXHRcXHRcXHRXQVJOX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXFx1MDAzZWlwNl9wdHIpKTtcXG4xMTc1MzpcXHRcXG4xMTc1NDpcXHRcXHRcXHRuZXRkZXZfbmFtZV9ub2RlX2FsdF9mbHVzaChkZXYpO1xcbjExNzU1OlxcdFxcdFxcdG5ldGRldl9uYW1lX25vZGVfZnJlZShkZXYtXFx1MDAzZW5hbWVfbm9kZSk7XFxuMTE3NTY6XFx0XFx0XFx0bmV0ZGV2X2RvX2ZyZWVfcGNwdV9zdGF0cyhkZXYpO1xcbjExNzU3OlxcdFxcdFxcdGlmIChkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvcilcXG4xMTc1ODpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvcihkZXYpO1xcbjExNzU5OlxcdFxcdFxcdGlmIChkZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2KVxcbjExNzYwOlxcdFxcdFxcdFxcdGZyZWVfbmV0ZGV2KGRldik7XFxuMTE3NjE6XFx0XFxuMTE3NjI6XFx0XFx0XFx0Y250Kys7XFxuMTE3NjM6XFx0XFxuMTE3NjQ6XFx0XFx0XFx0LyogRnJlZSBuZXR3b3JrIGRldmljZSAqL1xcbjExNzY1OlxcdFxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZkZXYtXFx1MDAzZWRldi5rb2JqKTtcXG4xMTc2NjpcXHRcXHR9XFxuMTE3Njc6XFx0XFx0aWYgKGNudCBcXHUwMDI2XFx1MDAyNiBhdG9taWNfc3ViX2FuZF90ZXN0KGNudCwgXFx1MDAyNmRldl91bnJlZ19jb3VudCkpXFxuMTE3Njg6XFx0XFx0XFx0d2FrZV91cChcXHUwMDI2bmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EpO1xcbjExNzY5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTg6MDQuNDk4NDgwMTk4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MTIxNTU0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBMZWFrIEZpeCoqXG5cbk9rYXksIHNvIHRoZSBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaW4gYG5ldGRldl9ydW5fdG9kb2AsIHdoaWNoIGhhcHBlbnMgKmFmdGVyKiBhIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuIElmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzLCB0aGUgZGV2aWNlIGlzbid0IGFjdHVhbGx5IHJlZ2lzdGVyZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCB0aHVzIGl0J3MgbmV2ZXIgdW5yZWdpc3RlcmVkLCB3aGljaCBtZWFucyBgbmV0ZGV2X3J1bl90b2RvYCBpcyBuZXZlciBjYWxsZWQgZm9yIGl0LiBUaGF0IG1lYW5zIGBkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yYCAqbmV2ZXIqIGdldHMgY2FsbGVkIGlmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzLiAgVGhhdCBpcyBhIHByb2JsZW0gYmVjYXVzZSBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgYmVmb3JlIGl0IHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGZyZWVkIGluIGBwcml2X2Rlc3RydWN0b3JgIHdpbGwgbm93IGxlYWsuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGBnZW5ldmVfY29uZmlndXJlYCBmdW5jdGlvbi4gSXQgYWxsb2NhdGVzIGBuZXdfY2ZnYCBhbmQgYXNzaWducyBpdCB0byBgZ2VuZXZlLVx1MDAzZWNmZ2AuIElmIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGZhaWxzIGluIHRoaXMgc2NlbmFyaW8sIGBnZW5ldmVfY29uZmlndXJlYCByZXR1cm5zIGFuIGVycm9yLCBhbmQgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIHN1Y2ggYXMgYHJ0bmxfbmV3bGlua19jcmVhdGVgLCB0aGVuIGNhbGxzIGBmcmVlX25ldGRldihkZXYpYC4gSG93ZXZlciwgYGZyZWVfbmV0ZGV2YCAqZG9lc24ndCogY2FsbCBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAg4oCTIGl0IGp1c3QgZnJlZXMgdGhlIGRldmljZSBtZW1vcnkgaXRzZWxmLiAgU28sIGBnZW5ldmUtXHUwMDNlY2ZnYCBpcyBiZWluZyBsZWFrZWQhXG5cblRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAgaW4gdGhlIGVycm9yIHBhdGggb2YgYGdlbmV2ZV9jb25maWd1cmVgLiBJdCBtYWtlcyB0b3RhbCBzZW5zZSBub3c6IGBnZW5ldmVfZnJlZV9kZXZgIGZyZWVzIHRoZSBgZ2VuZXZlLVx1MDAzZWNmZ2AuXG5cbkxldCdzIHZlcmlmeSB0aGlzLiBJZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscywgYGdlbmV2ZV9jb25maWd1cmVgIGNhbGxzIGBnZW5ldmVfZnJlZV9kZXYoZGV2KWAuIGBnZW5ldmVfZnJlZV9kZXZgIHRoZW4gZnJlZXMgYGdlbmV2ZS1cdTAwM2VjZmdgIGFuZCBzZXRzIGl0IHRvIE5VTEwuIFRoZW4gdGhlIGVycm9yIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsIGFuZCBmaW5hbGx5IGBmcmVlX25ldGRldihkZXYpYCBpcyBjYWxsZWQgdG8gZnJlZSB0aGUgZGV2aWNlIG1lbW9yeS4gIFRoZSBsZWFrIGlzIGZpeGVkLiBFeGNlbGxlbnQhXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEl0IGRlZmluaXRlbHkgZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgZ2VuZXZlX2NvbmZpZ3VyZWAsIGJ1dCB0aGUgZnV6emluZyBndWlkYW5jZSBzdGF0ZXMgdG8gZGV0ZXJtaW5lIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWY6XG4tICBUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIGRvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvZGUgY29tbWVudHMuXG4tICBQdXJlbHkgbG9nZ2luZyBvciB0cmFjZXBvaW50IGNoYW5nZXMuXG4tICBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSAgQ29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuXG5cblRoaXMgZGVmaW5pdGVseSAqZG9lc24ndCogZml0IHRob3NlIGNyaXRlcmlhLiBUaGlzIG1vZGlmaWVzIGEgcmVhY2hhYmxlIGRyaXZlciAoYGRyaXZlcnMvbmV0L2dlbmV2ZS5jYCksIGl0IGZpeGVzIGEgbWVtb3J5IGxlYWsgYW5kIGFsdGVycyBleGVjdXRpb24gZmxvdyAoY2FsbHMgYGdlbmV2ZV9mcmVlX2RldmApLCBhbmQgaXQgaXMgcmVhY2hhYmxlLiBXZSBjYW4gdHJpZ2dlciB0aGlzIGxlYWsgYnkgY3JlYXRpbmcgYSBnZW5ldmUgZGV2aWNlIHdpdGggaW52YWxpZCBwYXJhbWV0ZXJzLCBvciBpZiBgcmVnaXN0ZXJfbmV0ZGV2aWNlYCBmYWlscyBmb3IgYW55IHJlYXNvbjsgZm9yIGV4YW1wbGUsIGlmIHdlIHJ1biBvdXQgb2YgbWVtb3J5IG9yIHRoZXJlIGlzIGEgZHVwbGljYXRlIG5hbWUgY29uZmxpY3QuIGByZWdpc3Rlcl9uZXRkZXZpY2VgIGNhbiBhbHNvIGZhaWwgaWYgdGhlIGRldmljZSBuYW1lIGlzIGFscmVhZHkgdGFrZW4gb3IgaWYgYW5vdGhlciBpbml0aWFsaXphdGlvbiBzdGVwIGZhaWxzLlxuXG5TbywgeWVzLCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIHJlYWNoYWJsZSBlcnJvciBwYXRoIHdpdGggYSBtZW1vcnkgbGVhayBmaXguIFRpbWUgdG8gbW92ZSBmb3J3YXJkIHdpdGggdGhlIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODE5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTE6NTg6MTQuNDEwNjM4NzU2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzU3NzUzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdFTkVWRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjI0NTpjb25maWcgR0VORVZFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDYtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgTmV0d29yayBWaXJ0dWFsaXphdGlvbiBFbmNhcHN1bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1ODoxNC45NDY0MjA0NzNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNjgxNzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgc3lzdGVtJ3MgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBHRU5FVkVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBwZXJmb3JtIGEgdGhvcm91Z2ggY2hlY2suIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyICp0aGlzKiBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24sIG9yIGlmIHRoZXJlIGFyZSBvdGhlcnMgZGVmaW5lZCB0aGF0IGFyZSBhbHNvIGFjdGl2ZWx5IGluIHBsYXksIHBlcmhhcHMgdGhyb3VnaCBhbiBhbHRlcm5hdGl2ZSBjb25maWd1cmF0aW9uIGNoYWluLCBhbiBvdmVycmlkZSwgb3IgZXZlbiB3aXRoaW4gYSBzZXBhcmF0ZSBtb2R1bGUgb3IgcHJvY2Vzcy4gSXQncyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhhdCBgR0VORVZFYCBpc24ndCBqdXN0IG9uZSBjb21wb25lbnQgb2YgYSBicm9hZGVyLCBhbmQgcG90ZW50aWFsbHkgY29uZmxpY3RpbmcsIGNvbmZpZ3VyYXRpb24gc2V0LiBMZWF2aW5nIG5vIHN0b25lIHVudHVybmVkIGlzIHRoZSBrZXkgdG8gbWFpbnRhaW5pbmcgYSByb2J1c3QgbmV0d29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1ODoxOS42NzMyNDAyNzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdGNvbmZpZyBHRU5FVkVcXG4gMjQ2OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblxcXCJcXG4gMjQ3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAyNDg6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDI0OTpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuIDI1MDpcXHRcXHRoZWxwXFxuIDI1MTpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ2VuZXZlIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjUyOlxcdFxcdCAgTGF5ZXIgMiBOZXR3b3JrcyBvdmVyIExheWVyIDMgTmV0d29ya3MuIEdFTkVWRSBpcyBvZnRlbiB1c2VkXFxuIDI1MzpcXHRcXHQgIHRvIHR1bm5lbCB2aXJ0dWFsIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxcbiAyNTQ6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDExOjU4OjE5LjY3MzM1NjY4NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkxNjE3ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqR2VuZXZlIENvbmZpZ3VyYXRpb24gLSBDb3JlIEZvY3VzKipcblxuUmlnaHQsIHNvIGBHRU5FVkVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBjb21wb25lbnQgaGVyZSwgdGhlIHRoaW5nIHRvIHJlYWxseSB6ZXJvIGluIG9uLiBUaGUgcGF0Y2ggaXMgZGVmaW5pdGVseSBtZXNzaW5nIHdpdGggdGhlIGBnZW5ldmVfY29uZmlndXJlYCBmdW5jdGlvbiwgYW5kIHRoYXQncyBmb3VuZCBpbiBgZHJpdmVycy9uZXQvZ2VuZXZlLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBob3cgdGhlIGVudGlyZSBHZW5ldmUgc3RhY2sgaXMgc2V0IHVwLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBCZXlvbmQgYGdlbmV2ZV9jb25maWd1cmVgLCBJIG5lZWQgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byBgZ2VuZXZlX25ld2xpbmtgLCBhbmQgYGdlbmV2ZV9kZXZfY3JlYXRlX2ZiYC4gVGhlc2UgYXJlIGFsbCBjb3JlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEdlbmV2ZSBkcml2ZXIsIGFuZCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhpcyBwYXRjaCBpbXBhY3RzIGhvdyBuZXcgR2VuZXZlIGxpbmtzIGFyZSBjcmVhdGVkLCBjb25maWd1cmVkLCBhbmQgaG93IHRoZSB1bmRlcmx5aW5nIGZvcndhcmRpbmcgcGxhbmUgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhdGNoIGFsdGVycyB0aGUgZmxvdyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIHBpY3R1cmUgb2YgdGhlIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MjcsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMTo1ODoyMy42NjQ5NzgzNzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1NDk4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jb25maWd1cmVcIixcbiAgICBcImdlbmV2ZV9uZXdsaW5rXCIsXG4gICAgXCJnZW5ldmVfZGV2X2NyZWF0ZV9mYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgZ2VuZXZlX2NvbmZpZ3VyZS4gSWYgcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgZmFpbHMsIHRoZSBkZXZpY2UncyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jb25maWd1cmVcIixcbiAgICBcImdlbmV2ZV9uZXdsaW5rXCIsXG4gICAgXCJnZW5ldmVfZGV2X2NyZWF0ZV9mYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgZ2VuZXZlX2NvbmZpZ3VyZS4gSWYgcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgZmFpbHMsIHRoZSBkZXZpY2UncyBwcml2X2Rlc3RydWN0b3IgaXMgbm90IGNhbGxlZCBieSBmcmVlX25ldGRldigpLCBsZWFkaW5nIHRvIGEgbGVhayBvZiB0aGUgZ2VuZXZlX2NvbmZpZyBzdHJ1Y3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGNhbGxzIGdlbmV2ZV9mcmVlX2RldigpIHRvIGZyZWUgaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow5tgwq[1] Phase: Succeeded StartedAt: 2026-07-22 11:58:35 +0000 UTC FinishedAt: 2026-07-22 11:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-22 11:58:35 +0000 UTC FinishedAt: 2026-07-22 11:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2] Phase: Succeeded StartedAt: 2026-07-22 11:58:35 +0000 UTC FinishedAt: 2026-07-22 16:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-22 11:58:35 +0000 UTC FinishedAt: 2026-07-22 16:25:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-22 11:58:35 +0000 UTC FinishedAt: 2026-07-22 11:58:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-22 11:58:35 +0000 UTC FinishedAt: 2026-07-22 11:58:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5tgwq/series-workflow5tgwq-convert-artifact-1300633481/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-22 11:58:45 +0000 UTC FinishedAt: 2026-07-22 12:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-22 11:58:45 +0000 UTC FinishedAt: 2026-07-22 12:37:55 +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:*fd3b7a4d-bc83-4e85-87dd-2e2e5e7648e4,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-workflow5tgwq/series-workflow5tgwq-convert-artifact-1300633481/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": "81609a40-9650-4c89-a5f7-1d026d15b33f", "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-workflow5tgwq/series-workflow5tgwq-build-action-1377751143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-22 11:58:45 +0000 UTC FinishedAt: 2026-07-22 12:37:45 +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:*fd3b7a4d-bc83-4e85-87dd-2e2e5e7648e4,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-workflow5tgwq/series-workflow5tgwq-convert-artifact-1300633481/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": "81609a40-9650-4c89-a5f7-1d026d15b33f", "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-workflow5tgwq/series-workflow5tgwq-build-action-1377751143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-22 12:37:55 +0000 UTC FinishedAt: 2026-07-22 12:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-22 12:37:55 +0000 UTC FinishedAt: 2026-07-22 12:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-22 12:37:55 +0000 UTC FinishedAt: 2026-07-22 12:38:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-22 12:37:55 +0000 UTC FinishedAt: 2026-07-22 12:38:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5tgwq/series-workflow5tgwq-convert-artifact-400597660/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-22 12:38:05 +0000 UTC FinishedAt: 2026-07-22 12:40:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-22 12:38:05 +0000 UTC FinishedAt: 2026-07-22 12:39:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*81609a40-9650-4c89-a5f7-1d026d15b33f,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-workflow5tgwq/series-workflow5tgwq-build-action-1377751143/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-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-22 12:40:01 +0000 UTC FinishedAt: 2026-07-22 12:40:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-22 12:40:01 +0000 UTC FinishedAt: 2026-07-22 12:40:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-22 12:40:01 +0000 UTC FinishedAt: 2026-07-22 13:20:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-22 12:40:01 +0000 UTC FinishedAt: 2026-07-22 13:20:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fd3b7a4d-bc83-4e85-87dd-2e2e5e7648e4,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-workflow5tgwq/series-workflow5tgwq-convert-artifact-400597660/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": "bbae67a1-1c67-4510-990d-64b21303e8ad", "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-workflow5tgwq/series-workflow5tgwq-build-action-2278966776/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-22 12:40:01 +0000 UTC FinishedAt: 2026-07-22 13:20:27 +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:*fd3b7a4d-bc83-4e85-87dd-2e2e5e7648e4,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-workflow5tgwq/series-workflow5tgwq-convert-artifact-400597660/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": "bbae67a1-1c67-4510-990d-64b21303e8ad", "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-workflow5tgwq/series-workflow5tgwq-build-action-2278966776/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-22 13:20:37 +0000 UTC FinishedAt: 2026-07-22 13:20:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-22 13:20:37 +0000 UTC FinishedAt: 2026-07-22 13:20:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-22 13:20:37 +0000 UTC FinishedAt: 2026-07-22 13:22:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-22 13:20:37 +0000 UTC FinishedAt: 2026-07-22 13:22:19 +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:*bbae67a1-1c67-4510-990d-64b21303e8ad,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-workflow5tgwq/series-workflow5tgwq-build-action-2278966776/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-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-22 13:22:29 +0000 UTC FinishedAt: 2026-07-22 16:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-22 13:22:29 +0000 UTC FinishedAt: 2026-07-22 16:25:29 +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":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"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:*81609a40-9650-4c89-a5f7-1d026d15b33f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bbae67a1-1c67-4510-990d-64b21303e8ad,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-workflow5tgwq/series-workflow5tgwq-build-action-1377751143/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-workflow5tgwq/series-workflow5tgwq-build-action-2278966776/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-22 13:22:29 +0000 UTC FinishedAt: 2026-07-22 13:22:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-22 13:22:29 +0000 UTC FinishedAt: 2026-07-22 13:22:34 +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":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"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-workflow5tgwq/series-workflow5tgwq-convert-artifact-2605259365/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-22 13:22:29 +0000 UTC FinishedAt: 2026-07-22 13:22:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-22 13:22:29 +0000 UTC FinishedAt: 2026-07-22 13:22:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-22 13:22:29 +0000 UTC FinishedAt: 2026-07-22 13:22:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-22 13:22:39 +0000 UTC FinishedAt: 2026-07-22 16:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tgwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["geneve_configure","geneve_newlink","geneve_dev_create_fb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"e4bd9c22-7e30-4b0a-b7cb-e829efbd0662","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-22 13:22:39 +0000 UTC FinishedAt: 2026-07-22 16:25:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*81609a40-9650-4c89-a5f7-1d026d15b33f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bbae67a1-1c67-4510-990d-64b21303e8ad,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-workflow5tgwq/series-workflow5tgwq-build-action-1377751143/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-workflow5tgwq/series-workflow5tgwq-build-action-2278966776/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-workflow5tgwq/series-workflow5tgwq-convert-artifact-2605259365/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,}