Name: series-workflow8crnf Phase: Succeeded StartedAt: 2026-07-26 15:24:15 +0000 UTC FinishedAt: 2026-07-26 19:58:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[0] Phase: Succeeded StartedAt: 2026-07-26 15:24:15 +0000 UTC FinishedAt: 2026-07-26 15:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 15:24:15 +0000 UTC FinishedAt: 2026-07-26 15:40:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PCI_IOV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PCI_IOV" ], "series_id": "3cf09ad5-0299-4aef-a514-6c0bfd30e47a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtnl_fill_vf", "rtnl_getlink", "rtnl_dump_ifinfo" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9maWxsX3ZmJiMzNDssCiAgICAmIzM0O3J0bmxfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfaWZpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjODNmMmVkZmZiZmQyZmUyYzUyNmFmOTM0MzE0MzBlMzVmODEwMTc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMTU6Mzk6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggMTJhYTNhYTE2ODhiMTMuLmJkMWQ2NWRjZjQyZmQ1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtMTY4NywxMCAmIzQzOzE2ODcsMjIgQEAgc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgY2hhciAqbWFyayA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTtcbiYjNDM7XG4gXHRcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XG4gXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbiBcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogQW4gYXR0cmlidXRlIGxlbmd0aCBpcyBhIHUxNiwgc28gdGhlIG5lc3QgY2Fubm90IGRlc2NyaWJlXG4mIzQzO1x0XHQgKiBtb3JlIHRoYW4gVTE2X01BWCBieXRlcy4gRHJvcCB0aGUgVkYgdGhhdCB3b3VsZCBvdmVyZmxvdyBpdFxuJiM0MztcdFx0ICogYW5kIHN0b3A6IGEgdHJ1bmNhdGVkIGxpc3Qga2VlcHMgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2VcbiYjNDM7XHRcdCAqIHBhcnNhYmxlLCB3aGVyZWFzIGEgd3JhcHBlZCBuZXN0IGxlbmd0aCBkb2VzIG5vdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopdmZpbmZvIFx1MDAzZSBVMTZfTUFYKSB7XG4mIzQzO1x0XHRcdG5sbXNnX3RyaW0oc2tiLCBtYXJrKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRubGFfbmVzdF9lbmQoc2tiLCB2ZmluZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZmlsbF92ZiYjMzQ7LAogICAgJiMzNDtydG5sX2dldGxpbmsmIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX2lmaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBuZXRsaW5rIGF0dHJpYnV0ZSBsZW5ndGggb3ZlcmZsb3cgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGhhcyBhIGxhcmdlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdXNpbmcgbmV0ZGV2c2ltIHRvIGNyZWF0ZSBtYW55IFZGcyBhbmQgcXVlcnlpbmcgdGhlbSB2aWEgUlRNX0dFVExJTkspLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzgzZjJlZGZmYmZkMmZlMmM1MjZhZjkzNDMxNDMwZTM1ZjgxMDE3NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDE1OjM5OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCAxMmFhM2FhMTY4OGIxMy4uYmQxZDY1ZGNmNDJmZDUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xNjg3LDEwICYjNDM7MTY4NywyMiBAQCBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fdmZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdW5zaWduZWQgY2hhciAqbWFyayA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKJiM0MzsKIAkJaWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHsKIAkJCW5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7CiAJCQlyZXR1cm4gLUVNU0dTSVpFOwogCQl9CiYjNDM7CiYjNDM7CQkvKiBBbiBhdHRyaWJ1dGUgbGVuZ3RoIGlzIGEgdTE2LCBzbyB0aGUgbmVzdCBjYW5ub3QgZGVzY3JpYmUKJiM0MzsJCSAqIG1vcmUgdGhhbiBVMTZfTUFYIGJ5dGVzLiBEcm9wIHRoZSBWRiB0aGF0IHdvdWxkIG92ZXJmbG93IGl0CiYjNDM7CQkgKiBhbmQgc3RvcDogYSB0cnVuY2F0ZWQgbGlzdCBrZWVwcyB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZQomIzQzOwkJICogcGFyc2FibGUsIHdoZXJlYXMgYSB3cmFwcGVkIG5lc3QgbGVuZ3RoIGRvZXMgbm90LgomIzQzOwkJICovCiYjNDM7CQlpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKil2ZmluZm8gJmd0OyBVMTZfTUFYKSB7CiYjNDM7CQkJbmxtc2dfdHJpbShza2IsIG1hcmspOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCX0KIAogCW5sYV9uZXN0X2VuZChza2IsIHZmaW5mbyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBydG5ldGxpbmsuYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBydG5sX2ZpbGxfdmYoKWAgZnVuY3Rpb24uIFRoZSBnaXN0IGlzLCBpdCYjMzk7cyBhZGRpbmcgYSBzYWZlZ3VhcmQgYWdhaW5zdCBzb21lIGtpbmQgb2YgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aXRoaW4gdGhlIGB2ZmluZm9gIG5lc3QuIFRoZXkmIzM5O3JlIGRvaW5nIHRoaXMgYnkgY2hlY2tpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVudCB0YWlsIG9mIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIGB2ZmluZm9gLiBJZiB0aGlzIGRpZmZlcmVuY2UsIHdoaWNoIHJlcHJlc2VudHMgdGhlIHVzZWQgc3BhY2UsIGV4Y2VlZHMgYFUxNl9NQVhgLCBpdCB0cmltcyB0aGUgc29ja2V0IGJ1ZmZlciBhbmQgYnJlYWtzIHRoZSBsb29wLiBTb3VuZHMgbGlrZSBhIGdvb2QgZGVmZW5zZSBhZ2FpbnN0IGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIEl0JiMzOTtzIHRoZSByaWdodCBraW5kIG9mIGRlZmVuc2l2ZSBjb2RpbmcuIE5vdyBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJ0bmxfZmlsbF92ZmAgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX2ZpbGxfdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0xNDk3PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjAtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNTIxOnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjItXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NjctXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNjY4OnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTY2OS1cdFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjkxLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTY5MjpcdFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2OTMtXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMDcxPXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMTg3Olx0aWYgKHJ0bmxfZmlsbF92Zihza2IsIGRldiwgZXh0X2ZpbHRlcl9tYXNrKSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODgtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIE5ldGxpbmsgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhpcyBgcnRubF9maWxsX3ZmYCBmdW5jdGlvbi4gSXQmIzM5O3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gYHJ0bmxfZmlsbF9pZmluZm9gLCB3aGljaCBJIGtub3cgaXMgYSBjb3JlIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBuZXRsaW5rIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gbmV0d29yayBpbnRlcmZhY2VzLiBUaGF0IHRlbGxzIG1lIHRoaXMgYHJ0bmxfZmlsbF92ZmAgY29kZSBwYXRoIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkIOKAkyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBpbnRlcmZhY2UgaW5mb3JtYXRpb24gZ2F0aGVyaW5nLiBJIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiBmb2N1c2VzIG9uIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIChWRikgYXNwZWN0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdmlydHVhbGl6YXRpb24uCgpOb3csIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiByZWxhdGVkIHNwZWNpZmljYWxseSB0byBWRnMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHJpZXZlcyBhbmQgcmVwb3J0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIGV4dHJhY3RpbmcuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHJ0bmxfZmlsbF92ZmAgaXRzZWxmIGFuZCBzZWUgZXhhY3RseSB3aGF0IGluZm9ybWF0aW9uIGl0JiMzOTtzIHBhY2tpbmcgaW50byB0aG9zZSBuZXRsaW5rIG1lc3NhZ2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX2ZpbGxfdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0xNDk3PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjAtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNTIxOnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjItXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NjctXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNjY4OnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTY2OS1cdFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjkxLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTY5MjpcdFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2OTMtXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMDcxPXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMTg3Olx0aWYgKHJ0bmxfZmlsbF92Zihza2IsIGRldiwgZXh0X2ZpbHRlcl9tYXNrKSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODgtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gYHJ0bmxfZmlsbF92ZmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBndXRzIG9mIGBydG5sX2ZpbGxfdmZgIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIChWRikgaW5mb3JtYXRpb24gaXMgYmVpbmcgaGFuZGxlZCB3aXRoaW4gdGhlIFJUTmV0bGluayBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIHNlZSB0aGUgdHlwaWNhbCBSVE5ldGxpbmsgYXR0cmlidXRlIHBvcHVsYXRpb24gcHJvY2VzcyBoZXJlLiBJdCYjMzk7bGwgcHJvYmFibHkgaW52b2x2ZSBhbGxvY2F0aW5nIGEgc2tiLCBwb3B1bGF0aW5nIGl0IHdpdGggdGhlIFZGLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGluZm9ybWF0aW9uLCBhbmQgdGhlbiBhdHRhY2hpbmcgaXQgdG8gdGhlIG5ldGxpbmsgbWVzc2FnZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljcyBvZiB3aGF0IGRhdGEgaXMgYmVpbmcgcmV0cmlldmVkIHRvIGZpbGwgdGhlIG1lc3NhZ2UuIElzIHRoaXMgYWxsIHRoZSBWRiYjMzk7cyBjb25maWd1cmF0aW9uIG9yIGEgc3Vic2V0PyBBcmUgdGhlcmUgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIG9yIHRyaWNrcyBiZWluZyB1c2VkPyBBcmUgd2UgdGFsa2luZyBhYm91dCBwZXItVkYgY29uZmlndXJhdGlvbiBvciBpcyB0aGlzIG1vcmUgZ2VuZXJhbCwgbWF5YmUgZGVzY3JpYmluZyB0aGUgVkYmIzM5O3MgcmVsYXRpb25zaGlwIHRvIHRoZSBQRj8gSSBhbHNvIHdhbnQgdG8gc2VlIGhvdyBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZC4gQXJlIHRoZXJlIGNsZWFyIGNoZWNrcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXM/IEhvdyBhcmUgZXJyb3JzIGNvbW11bmljYXRlZCBiYWNrIHRvIHRoZSByZXF1ZXN0aW5nIHByb2Nlc3M/IEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIGl0IGVmZmljaWVudGx5IGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBhIFZGIG1pZ2h0IG5vdCBiZSBwcmVzZW50IG9yIG5vdCBjb25maWd1cmVkLiBIb3BlZnVsbHksIGl0IGlzIHJvYnVzdCBhbmQgY2xlYW4uIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGlzIGRvaW5nIHdoYXQgSSBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY2ODpcdHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTY2OTpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuMTY3MDpcdFx0XHRcdFx0XHQgICB1MzIgZXh0X2ZpbHRlcl9tYXNrKVxuMTY3MTpcdHtcbjE2NzI6XHRcdHN0cnVjdCBubGF0dHIgKnZmaW5mbztcbjE2NzM6XHRcdGludCBpLCBudW1fdmZzO1xuMTY3NDpcdFxuMTY3NTpcdFx0aWYgKCFkZXYtXHUwMDNlZGV2LnBhcmVudCB8fCAoKGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1ZGKSA9PSAwKSlcbjE2NzY6XHRcdFx0cmV0dXJuIDA7XG4xNjc3Olx0XG4xNjc4Olx0XHRudW1fdmZzID0gZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG4xNjc5Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9WRiwgbnVtX3ZmcykpXG4xNjgwOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4xNjgxOlx0XG4xNjgyOlx0XHRpZiAoIWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19nZXRfdmZfY29uZmlnKVxuMTY4MzpcdFx0XHRyZXR1cm4gMDtcbjE2ODQ6XHRcbjE2ODU6XHRcdHZmaW5mbyA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElGTEFfVkZJTkZPX0xJU1QpO1xuMTY4NjpcdFx0aWYgKCF2ZmluZm8pXG4xNjg3Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4xNjg4Olx0XG4xNjg5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpJiM0MzsmIzQzOykge1xuMTY5MDpcdFx0XHR1bnNpZ25lZCBjaGFyICptYXJrID0gc2tiX3RhaWxfcG9pbnRlcihza2IpO1xuMTY5MTpcdFxuMTY5MjpcdFx0XHRpZiAocnRubF9maWxsX3ZmaW5mbyhza2IsIGRldiwgaSwgZXh0X2ZpbHRlcl9tYXNrKSkge1xuMTY5MzpcdFx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7XG4xNjk0Olx0XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjE2OTU6XHRcdFx0fVxuMTY5NjpcdFxuMTY5NzpcdFx0XHQvKiBBbiBhdHRyaWJ1dGUgbGVuZ3RoIGlzIGEgdTE2LCBzbyB0aGUgbmVzdCBjYW5ub3QgZGVzY3JpYmVcbjE2OTg6XHRcdFx0ICogbW9yZSB0aGFuIFUxNl9NQVggYnl0ZXMuIERyb3AgdGhlIFZGIHRoYXQgd291bGQgb3ZlcmZsb3cgaXRcbjE2OTk6XHRcdFx0ICogYW5kIHN0b3A6IGEgdHJ1bmNhdGVkIGxpc3Qga2VlcHMgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2VcbjE3MDA6XHRcdFx0ICogcGFyc2FibGUsIHdoZXJlYXMgYSB3cmFwcGVkIG5lc3QgbGVuZ3RoIGRvZXMgbm90LlxuMTcwMTpcdFx0XHQgKi9cbjE3MDI6XHRcdFx0aWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopdmZpbmZvIFx1MDAzZSBVMTZfTUFYKSB7XG4xNzAzOlx0XHRcdFx0bmxtc2dfdHJpbShza2IsIG1hcmspO1xuMTcwNDpcdFx0XHRcdGJyZWFrO1xuMTcwNTpcdFx0XHR9XG4xNzA2Olx0XHR9XG4xNzA3Olx0XG4xNzA4Olx0XHRubGFfbmVzdF9lbmQoc2tiLCB2ZmluZm8pO1xuMTcwOTpcdFx0cmV0dXJuIDA7XG4xNzEwOlx0fVxuMTcxMTpcdFxuMTcxMjpcdHN0YXRpYyBpbnQgcnRubF9maWxsX2xpbmtfaWZtYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE3MTM6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNzE0Olx0e1xuMTcxNTpcdFx0c3RydWN0IHJ0bmxfbGlua19pZm1hcCBtYXA7XG4xNzE2Olx0XG4xNzE3Olx0XHRtZW1zZXQoXHUwMDI2bWFwLCAwLCBzaXplb2YobWFwKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgyOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZpcnR1YWwgRnVuY3Rpb24gTmV0bGluayBNZXNzYWdlIENvbnN0cnVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgaXNzdWUsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjdWxwcml0IGlzIHJlc2lkaW5nIHdpdGhpbiBgcnRubF9maWxsX3ZmYC4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHRoZSBkZXRhaWxzIGFib3V0IFZpcnR1YWwgRnVuY3Rpb25zIGFyZSBnZXR0aW5nIGFkZGVkIHRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCBpcyB0cmlnZ2VyZWQgYnkgY29tbWFuZHMgbGlrZSBgaXAgbGluayBzaG93YC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGJlIGEgcHJvYmxlbSBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1hbnkgVmlydHVhbCBGdW5jdGlvbnMuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IG5ldGxpbmsgbWVzc2FnZXMgYXJlIGNvbnN0cnVjdGVkLiBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhbiBpbnRlcm5hbCBidWZmZXIgb3ZlcmZsb3cgb3Igc29tZXRoaW5nIHNpbWlsYXIgaGFwcGVuaW5nIHdoZW4gd2UgaGF2ZSBhIGhpZ2ggbnVtYmVyIG9mIFZGcy4gVG8gcmVwbGljYXRlIHRoaXMsIEkmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCBhIGBuZXRfZGV2aWNlYCB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGluZmx1ZW5jZSB0aGUgbnVtYmVyIG9mIFZGcyBwb3NzaWJsZSwgSSBzaG91bGQgY2hlY2sgdGhlIGBDT05GSUdfUENJX0lPVmAgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBsb29rIGF0IGBkZXZfbnVtX3ZmYCB0byBzZWUgaG93IHRoYXQmIzM5O3MgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X251bV92ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby92aXJ0aW8uYz00MDQ9c3RhdGljIHZvaWQgdmlydGlvX2Rldl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpfZClcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00MzctXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0Mzg6c3RhdGljIGludCB2aXJ0aW9fZGV2X251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00Mzkte1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ0MS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ0MjpcdHJldHVybiBkZXZfbnVtX3ZmKHZkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00NDMtfVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQ0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlIHZpcnRpb19idXMgPSB7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDU0LVx0LnNodXRkb3duID0gdmlydGlvX2Rldl9zaHV0ZG93bixcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ1NTpcdC5udW1fdmYgPSB2aXJ0aW9fZGV2X251bV92ZixcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ1Ni19O1xuLS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmg9MTI3Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X29mX25vZGUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI3OS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmg6MTI4MDpzdGF0aWMgaW5saW5lIGludCBkZXZfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI4MS17XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTE0Nz1zdGF0aWMgaW5saW5lIGludCBydG5sX3ZmaW5mb19zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE1MC1cdGlmIChkZXYtXHUwMDNlZGV2LnBhcmVudCBcdTAwMjZcdTAwMjYgKGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1ZGKSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTE1MTpcdFx0aW50IG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cdTAwM2VkZXYucGFyZW50KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTExNTItXHRcdHNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoMCk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTE5NT1zdGF0aWMgc2l6ZV90IHJ0bmxfcG9ydF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTIxMi1cdFx0cmV0dXJuIDA7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMjEzOlx0aWYgKGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpKVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTIxNC1cdFx0cmV0dXJuIHBvcnRfc2VsZl9zaXplICYjNDM7IHZmX3BvcnRzX3NpemUgJiM0Mztcbm5ldC9jb3JlL3J0bmV0bGluay5jOjEyMTU6XHRcdFx0dmZfcG9ydF9zaXplICogZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMjE2LVx0ZWxzZVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTEzNjU9c3RhdGljIGludCBydG5sX3ZmX3BvcnRzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzc1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTM3NjpcdGZvciAodmYgPSAwOyB2ZiBcdTAwM2MgZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCk7IHZmJiM0MzsmIzQzOykge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTM3Ny1cdFx0dmZfcG9ydCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElGTEFfVkZfUE9SVCk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTQyMT1zdGF0aWMgaW50IHJ0bmxfcG9ydF9maWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTQzMy1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE0MzQ6XHRpZiAoZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCkpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0MzUtXHRcdGVyciA9IHJ0bmxfdmZfcG9ydHNfZmlsbChza2IsIGRldik7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTY2OD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjc3LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTY3ODpcdG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cdTAwM2VkZXYucGFyZW50KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NzktXHRpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9WRiwgbnVtX3ZmcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEZXZpY2UgVmlydHVhbCBGdW5jdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgZGV2X251bV92ZmAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGRldmljZSBtb2RlbCwgc3BlY2lmaWNhbGx5IHdoZXJlIHRoZSBjb3JlIGRldmljZSBzdHJ1Y3R1cmUgbGl2ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZGV2X251bV92ZmAgdmFyaWFibGUgaXMgYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBNeSBmaXJzdCBzdG9wIHdpbGwgYmUgYGluY2x1ZGUvbGludXgvZGV2aWNlLmhgLiBUaGF0IGhlYWRlciBmaWxlIGlzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgdGhlIGNvcmUgYGRldmljZWAgc3RydWN0dXJlIGFuZCBhc3NvY2lhdGVkIGZpZWxkcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24gb2YgYGRldl9udW1fdmZgIHRoZXJlLCBwcm9iYWJseSBhcyBhIG1lbWJlciBvZiBhIHN0cnVjdHVyZSBvciBwZXJoYXBzIGFzIGEgbWFjcm8gcmVsYXRlZCB0byB2aXJ0dWFsIGZ1bmN0aW9ucy4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvbW1lbnRzLCBhcyB0aGV5IHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIHB1cnBvc2UgYW5kIHVzYWdlIG9mIHRoaXMgdmFyaWFibGUsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdmlydHVhbCBmdW5jdGlvbnMuIFRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpbiB0aGlzIGhlYWRlciBmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgbG93ZXN0IGxldmVsIGFuZCwgZnJvbSB0aGF0IHBvaW50LCBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG15IGN1cnJlbnQgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RldmljZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjcwOlx0dm9pZCBkZXZpY2Vfc2V0X29mX25vZGVfZnJvbV9kZXYoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYyKTtcbjEyNzE6XHRzdHJ1Y3QgZGV2aWNlICpnZXRfZGV2X2Zyb21fZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpO1xuMTI3MjpcdFxuMTI3MzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICpkZXZfb2Zfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4xMjc0Olx0e1xuMTI3NTpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19PRikgfHwgIWRldilcbjEyNzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMjc3Olx0XHRyZXR1cm4gZGV2LVx1MDAzZW9mX25vZGU7XG4xMjc4Olx0fVxuMTI3OTpcdFxuMTI4MDpcdHN0YXRpYyBpbmxpbmUgaW50IGRldl9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxuMTI4MTpcdHtcbjEyODI6XHRcdGlmIChkZXYtXHUwMDNlYnVzIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlYnVzLVx1MDAzZW51bV92ZilcbjEyODM6XHRcdFx0cmV0dXJuIGRldi1cdTAwM2VidXMtXHUwMDNlbnVtX3ZmKGRldik7XG4xMjg0Olx0XHRyZXR1cm4gMDtcbjEyODU6XHR9XG4xMjg2Olx0XG4xMjg3Olx0LypcbjEyODg6XHQgKiBSb290IGRldmljZSBvYmplY3RzIGZvciBncm91cGluZyB1bmRlciAvc3lzL2RldmljZXNcbjEyODk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmlydHVhbCBGdW5jdGlvbiBOdW1iZXIgUmV0cmlldmFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkZXZfbnVtX3ZmYCBmdW5jdGlvbiBjYWxsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBnb2luZyB0aHJvdWdoIHRoZSBkZXZpY2UmIzM5O3MgYnVzIHRvIGdldCB0aGUgbnVtYmVyIG9mIHZpcnR1YWwgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGUga2V5IGlzIGluIGhvdyB0aGUgYnVzIGhhbmRsZXMgdGhpcyByZXF1ZXN0LiBJdCYjMzk7cyBjYWxsaW5nIGBkZXYtJmd0O2J1cy0mZ3Q7bnVtX3ZmKGRldilgLiBTaW5jZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBQQ0kgZGV2aWNlcywgYW5kIGtub3dpbmcgUENJIGJ1c3NlcyBhcmUgYSBjb21tb24gdHlwZSBvZiBkZXZpY2UsIGBwY2lfYnVzX3R5cGVgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLiAgSSBuZWVkIHRvIGNoZWNrIGhvdyBgbnVtX3ZmYCBpcyBpbXBsZW1lbnRlZCBmb3IgYHBjaV9idXNfdHlwZWAuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jYCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudW1fdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYz00Nj1zdGF0aWMgaW50IGRpc2FibGVfc2xvdChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QpXG4tLVxuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYy01OS1cdHBkZXYgPSBwY2lfZ2V0X3Nsb3QoemRldi1cdTAwM2V6YnVzLVx1MDAzZWJ1cywgemRldi1cdTAwM2VkZXZmbik7XG5kcml2ZXJzL3BjaS9ob3RwbHVnL3MzOTBfcGNpX2hwYy5jOjYwOlx0aWYgKHBkZXYgXHUwMDI2XHUwMDI2IHBjaV9udW1fdmYocGRldikpIHtcbmRyaXZlcnMvcGNpL2hvdHBsdWcvczM5MF9wY2lfaHBjLmMtNjEtXHRcdHJjID0gLUVCVVNZO1xuLS1cbmRyaXZlcnMvcGNpL2lkZS5jPTIzOT1zdHJ1Y3QgcGNpX2lkZSAqcGNpX2lkZV9zdHJlYW1fYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9wY2kvaWRlLmMtMjQ3LVx0c3RydWN0IHBjaV9kZXYgKnJwLCAqYnI7XG5kcml2ZXJzL3BjaS9pZGUuYzoyNDg6XHRpbnQgbnVtX3ZmLCByaWRfZW5kO1xuZHJpdmVycy9wY2kvaWRlLmMtMjQ5LVxuLS1cbmRyaXZlcnMvcGNpL2lkZS5jLTI4MC1cdC8qIGZvciBTUi1JT1YgY2FzZSwgY292ZXIgYWxsIFZGcyAqL1xuZHJpdmVycy9wY2kvaWRlLmM6MjgxOlx0bnVtX3ZmID0gcGNpX251bV92ZihwZGV2KTtcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MjpcdGlmIChudW1fdmYpXG5kcml2ZXJzL3BjaS9pZGUuYzoyODM6XHRcdHJpZF9lbmQgPSBQQ0lfREVWSUQocGNpX2lvdl92aXJ0Zm5fYnVzKHBkZXYsIG51bV92ZiAtIDEpLFxuZHJpdmVycy9wY2kvaWRlLmM6Mjg0Olx0XHRcdFx0ICAgIHBjaV9pb3ZfdmlydGZuX2RldmZuKHBkZXYsIG51bV92ZiAtIDEpKTtcbmRyaXZlcnMvcGNpL2lkZS5jLTI4NS1cdGVsc2Vcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYz00NDE9c3RhdGljIHNzaXplX3Qgc3Jpb3ZfbnVtdmZzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ0NS1cdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpO1xuZHJpdmVycy9wY2kvaW92LmM6NDQ2Olx0dTE2IG51bV92ZnM7XG5kcml2ZXJzL3BjaS9pb3YuYy00NDctXG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNDQ5LVx0ZGV2aWNlX2xvY2soXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9wY2kvaW92LmM6NDUwOlx0bnVtX3ZmcyA9IHBkZXYtXHUwMDNlc3Jpb3YtXHUwMDNlbnVtX1ZGcztcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1MS1cdGRldmljZV91bmxvY2soXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9wY2kvaW92LmMtNDUyLVxuZHJpdmVycy9wY2kvaW92LmM6NDUzOlx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0OywgbnVtX3Zmcyk7XG5kcml2ZXJzL3BjaS9pb3YuYy00NTQtfVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ1Ni0vKlxuZHJpdmVycy9wY2kvaW92LmM6NDU3OiAqIG51bV92ZnMgXHUwMDNlIDA7IG51bWJlciBvZiBWRnMgdG8gZW5hYmxlXG5kcml2ZXJzL3BjaS9pb3YuYzo0NTg6ICogbnVtX3ZmcyA9IDA7IGRpc2FibGUgYWxsIFZGc1xuZHJpdmVycy9wY2kvaW92LmMtNDU5LSAqXG4tLVxuZHJpdmVycy9wY2kvaW92LmM9NDYzPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNDY4LVx0aW50IHJldCA9IDA7XG5kcml2ZXJzL3BjaS9pb3YuYzo0Njk6XHR1MTYgbnVtX3ZmcztcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3MC1cbmRyaXZlcnMvcGNpL2lvdi5jOjQ3MTpcdGlmIChrc3RydG91MTYoYnVmLCAwLCBcdTAwMjZudW1fdmZzKSBcdTAwM2MgMClcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL3BjaS9pb3YuYy00NzMtXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzQ6XHRpZiAobnVtX3ZmcyBcdTAwM2UgcGNpX3NyaW92X2dldF90b3RhbHZmcyhwZGV2KSlcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3NS1cdFx0cmV0dXJuIC1FUkFOR0U7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNDc4LVxuZHJpdmVycy9wY2kvaW92LmM6NDc5Olx0aWYgKG51bV92ZnMgPT0gcGRldi1cdTAwM2Vzcmlvdi1cdTAwM2VudW1fVkZzKVxuZHJpdmVycy9wY2kvaW92LmMtNDgwLVx0XHRnb3RvIGV4aXQ7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNDk1LVxuZHJpdmVycy9wY2kvaW92LmM6NDk2Olx0aWYgKG51bV92ZnMgPT0gMCkge1xuZHJpdmVycy9wY2kvaW92LmMtNDk3LVx0XHQvKiBkaXNhYmxlIFZGcyAqL1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTUwNi1cdFx0cGNpX3dhcm4ocGRldiwgXCYjMzQ7JWQgVkZzIGFscmVhZHkgZW5hYmxlZC4gRGlzYWJsZSBiZWZvcmUgZW5hYmxpbmcgJWQgVkZzXFxuXCYjMzQ7LFxuZHJpdmVycy9wY2kvaW92LmM6NTA3Olx0XHRcdCBwZGV2LVx1MDAzZXNyaW92LVx1MDAzZW51bV9WRnMsIG51bV92ZnMpO1xuZHJpdmVycy9wY2kvaW92LmMtNTA4LVx0XHRyZXQgPSAtRUJVU1k7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNTEyLVx0cGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpO1xuZHJpdmVycy9wY2kvaW92LmM6NTEzOlx0cmV0ID0gcGRldi1cdTAwM2Vkcml2ZXItXHUwMDNlc3Jpb3ZfY29uZmlndXJlKHBkZXYsIG51bV92ZnMpO1xuZHJpdmVycy9wY2kvaW92LmMtNTE0LVx0cGNpX3VubG9ja19yZXNjYW5fcmVtb3ZlKCk7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNTE3LVxuZHJpdmVycy9wY2kvaW92LmM6NTE4Olx0aWYgKHJldCAhPSBudW1fdmZzKVxuZHJpdmVycy9wY2kvaW92LmMtNTE5LVx0XHRwY2lfd2FybihwZGV2LCBcJiMzNDslZCBWRnMgcmVxdWVzdGVkOyBvbmx5ICVkIGVuYWJsZWRcXG5cJiMzNDssXG5kcml2ZXJzL3BjaS9pb3YuYzo1MjA6XHRcdFx0IG51bV92ZnMsIHJldCk7XG5kcml2ZXJzL3BjaS9pb3YuYy01MjEtXG4tLVxuZHJpdmVycy9wY2kvaW92LmM9NjEzPWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc3Jpb3ZfcGZfZGV2X2F0dHJfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNjE3LVxuZHJpdmVycy9wY2kvaW92LmM6NjE4OmludCBfX3dlYWsgcGNpYmlvc19zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBudW1fdmZzKVxuZHJpdmVycy9wY2kvaW92LmMtNjE5LXtcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYz02MjM9aW50IF9fd2VhayBwY2liaW9zX3NyaW92X2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNjI3LVxuZHJpdmVycy9wY2kvaW92LmM6NjI4OnN0YXRpYyBpbnQgc3Jpb3ZfYWRkX3ZmcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgbnVtX3ZmcylcbmRyaXZlcnMvcGNpL2lvdi5jLTYyOS17XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNjM1LVxuZHJpdmVycy9wY2kvaW92LmM6NjM2Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZmczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvcGNpL2lvdi5jLTYzNy1cdFx0cmMgPSBwY2lfaW92X2FkZF92aXJ0Zm4oZGV2LCBpKTtcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYz0xMTkwPUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9kaXNhYmxlX3NyaW92KTtcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTkyLS8qKlxuZHJpdmVycy9wY2kvaW92LmM6MTE5MzogKiBwY2lfbnVtX3ZmIC0gcmV0dXJuIG51bWJlciBvZiBWRnMgYXNzb2NpYXRlZCB3aXRoIGEgUEYgZGV2aWNlX3JlbGVhc2VfZHJpdmVyXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk0LSAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlXG4tLVxuZHJpdmVycy9wY2kvaW92LmMtMTE5Ny0gKi9cbmRyaXZlcnMvcGNpL2lvdi5jOjExOTg6aW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldilcbmRyaXZlcnMvcGNpL2lvdi5jLTExOTkte1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTEyMDQtfVxuZHJpdmVycy9wY2kvaW92LmM6MTIwNTpFWFBPUlRfU1lNQk9MX0dQTChwY2lfbnVtX3ZmKTtcbmRyaXZlcnMvcGNpL2lvdi5jLTEyMDYtXG4tLVxuZHJpdmVycy9wY2kvaW92LmM9MTM1OD1FWFBPUlRfU1lNQk9MX0dQTChwY2lfaW92X3ZmX2Jhcl9zZXRfc2l6ZSk7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtMTM2MC0vKipcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNjE6ICogcGNpX2lvdl92Zl9iYXJfZ2V0X3NpemVzIC0gZ2V0IFZGIEJBUiBzaXplcyBhbGxvd2luZyB0byBjcmVhdGUgdXAgdG8gbnVtX3Zmc1xuZHJpdmVycy9wY2kvaW92LmMtMTM2Mi0gKiBAZGV2OiB0aGUgUENJIGRldmljZVxuZHJpdmVycy9wY2kvaW92LmMtMTM2My0gKiBAcmVzbm86IHRoZSByZXNvdXJjZSBudW1iZXJcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNjQ6ICogQG51bV92ZnM6IG51bWJlciBvZiBWRnNcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNjUtICpcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNjY6ICogR2V0IHRoZSBzaXplcyBvZiBhIFZGIHJlc2l6YWJsZSBCQVIgdGhhdCBjYW4gYWNjb21tb2RhdGUgQG51bV92ZnMgd2l0aGluXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzY3LSAqIHRoZSBjdXJyZW50bHkgYXNzaWduZWQgc2l6ZSBvZiB0aGUgcmVzb3VyY2UgQHJlc25vLlxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzEtICovXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzcyOnUzMiBwY2lfaW92X3ZmX2Jhcl9nZXRfc2l6ZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vLCBpbnQgbnVtX3ZmcylcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzMte1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzYtXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzc3Olx0aWYgKCFudW1fdmZzKVxuZHJpdmVycy9wY2kvaW92LmMtMTM3OC1cdFx0cmV0dXJuIDA7XG5kcml2ZXJzL3BjaS9pb3YuYy0xMzc5LVxuZHJpdmVycy9wY2kvaW92LmM6MTM4MDpcdGRvX2Rpdih2Zl9sZW4sIG51bV92ZnMpO1xuZHJpdmVycy9wY2kvaW92LmMtMTM4MS1cdHNpemVzID0gKHJvdW5kdXBfcG93X29mX3R3byh2Zl9sZW4gJiM0MzsgMSkgLSAxKSBcdTAwM2VcdTAwM2UgaWxvZzIoU1pfMU0pO1xuLS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYz0xNjI1PXZvaWQgcGNpX3VldmVudF9lcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gcGNpX2Vyc19yZXN1bHQgZXJyX3R5cGUpXG4tLVxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTE2NTUtXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTY1NjpzdGF0aWMgaW50IHBjaV9idXNfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU3LXtcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNjU4Olx0cmV0dXJuIHBjaV9udW1fdmYodG9fcGNpX2RldihkZXYpKTtcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU5LX1cbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM9MTcyNj1jb25zdCBzdHJ1Y3QgYnVzX3R5cGUgcGNpX2J1c190eXBlID0ge1xuLS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzM4LVx0LnBtXHRcdD0gUENJX1BNX09QU19QVFIsXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTczOTpcdC5udW1fdmZcdFx0PSBwY2lfYnVzX251bV92ZixcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzQwLVx0LmRtYV9jb25maWd1cmVcdD0gcGNpX2RtYV9jb25maWd1cmUsXG4tLVxuZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmM9MTY4MT1zdGF0aWMgc3NpemVfdCBfX3Jlc291cmNlX3Jlc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBuLFxuLS1cbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jLTE2OTYtXHRkZXZpY2VfbG9jayhkZXYpO1xuZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmM6MTY5NzpcdGlmIChkZXYtXHUwMDNlZHJpdmVyIHx8IHBjaV9udW1fdmYocGRldikpIHtcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jLTE2OTgtXHRcdHJldCA9IC1FQlVTWTtcbi0tXG5kcml2ZXJzL3BjaS90c20uYz03OT1zdGF0aWMgdm9pZCBwY2lfdHNtX3dhbGtfZm5zKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvcGNpL3RzbS5jLTk1LVx0XHQvKiB3YWxrIHZpcnR1YWwgZnVuY3Rpb25zIG9mIGVhY2ggcGYgKi9cbmRyaXZlcnMvcGNpL3RzbS5jOjk2Olx0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgcGNpX251bV92ZihwZik7IGomIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3BjaS90c20uYy05Ny1cdFx0XHRzdHJ1Y3QgcGNpX2RldiAqdmYgX19mcmVlKHBjaV9kZXZfcHV0KSA9XG4tLVxuZHJpdmVycy9wY2kvdHNtLmM9MTE4PXN0YXRpYyB2b2lkIHBjaV90c21fd2Fsa19mbnNfcmV2ZXJzZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL3BjaS90c20uYy0xMzUtXHRcdC8qIHJldmVyc2Ugd2FsayB2aXJ0dWFsIGZ1bmN0aW9ucyAqL1xuZHJpdmVycy9wY2kvdHNtLmM6MTM2Olx0XHRmb3IgKGludCBqID0gcGNpX251bV92ZihwZikgLSAxOyBqIFx1MDAzZT0gMDsgai0tKSB7XG5kcml2ZXJzL3BjaS90c20uYy0xMzctXHRcdFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMyMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gVmlydHVhbCBGdW5jdGlvbiBFbnVtZXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGF2YWlsYWJsZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBwY2lfbnVtX3ZmYC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIHVsdGltYXRlbHkgcHVsbGluZyB0aGUgdmFsdWUgZnJvbSBgcGRldi0mZ3Q7c3Jpb3YtJmd0O251bV9WRnNgLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gc3RvcmUgdGhhdCBpbmZvcm1hdGlvbiB3aGVuIFNSLUlPViBpcyBhY3RpdmUgb24gYSBQQ0kgZGV2aWNlLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaG93IGRvIHdlIHRyaWdnZXIgdGhpcyBiZWhhdmlvciBpbiBvdXIgUUVNVSBlbnZpcm9ubWVudCBmb3IgdGVzdGluZz8gVGhhbmtmdWxseSwgUUVNVSBpcyBwcmV0dHkgZ29vZCBhYm91dCBzdXBwb3J0aW5nIFNSLUlPViBlbXVsYXRpb24sIGVzcGVjaWFsbHkgZm9yIGRldmljZXMgbGlrZSB0aGUgYGlnYmAgYW5kIGBudm1lYCBlbXVsYXRlZCBOSUNzLiBXZSBjYW4gZGVmaW5pdGVseSBleHBsb3JlIHRob3NlIGFzIHRlc3QgY2FuZGlkYXRlcy4gQW5kLCBvZiBjb3Vyc2UsIHdlIGhhdmUgZGV2aWNlcyBsaWtlIHZpcnRpbywgd2hpY2ggYXJlIGFsc28gdmlydHVhbCwgYW5kIHRodXMgbW9yZSBkaXJlY3RseSBjb250cm9sbGVkIGJ5IHRoZSBoeXBlcnZpc29yLgoKSG1tLCBsZXQgbWUgZG91YmxlLWNoZWNrIGhvdyB2aXJ0aW8gaGFuZGxlcyBWRiBlbnVtZXJhdGlvbuKApkFoLCB5ZXMsIGB2aXJ0aW9fZGV2X251bV92ZmAgaXMgc2ltcGx5IHJldHVybmluZyBgZGV2X251bV92Zih2ZGV2LSZndDtkZXYucGFyZW50KWAuIFRoaXMgY2xhcmlmaWVzIGl0IHBlcmZlY3RseTogdGhlIHZpcnRpbyBkZXZpY2UgaW5oZXJpdHMgdGhlIFZGIGNhcGFiaWxpdHkgZnJvbSBpdHMgcGFyZW50IFBDSSBkZXZpY2UuIFNvLCBpZiB0aGUgcGFyZW50IChlbXVsYXRlZCBQQ0kgZGV2aWNlKSBoYXMgU1ItSU9WIGVuYWJsZWQsIHZpcnRpbyBleHBvc2VzIFZGcyBhcyBhIGNoaWxkIGRldmljZS4KCk5vdywgYW4gaW50ZXJlc3RpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgaXMgYG5ldGRldnNpbWAuIERvZXMgYG5ldGRldnNpbWAsIGFzIGEgZnVsbHkgc29mdHdhcmUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlLCBleHBvc2UgdmlydHVhbCBmdW5jdGlvbnM/IFRoYXQmIzM5O3MgdGhlIG5leHQgYXZlbnVlIHRvIGV4cGxvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NyaW92X251bXZmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTYwPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBuc2ltX2J1c19kZXZfbnVtdmZzX2F0dHIgPVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjYxOlx0X19BVFRSKHNyaW92X251bXZmcywgMDY2NCwgbnNpbV9idXNfZGV2X251bXZmc19zaG93LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTYyLVx0ICAgICAgIG5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqU1ItSU9WIEludmVzdGlnYXRpb24qKgoKUmlnaHQsICpuZXRkZXZzaW0qLi4uIEkgcmVjYWxsIHRoYXQgZHJpdmVyIGhhdmluZyBzb21lIGludGVyZXN0aW5nIHByb3BlcnRpZXMuIEFoLCB5ZXMhIFRoZSBgc3Jpb3ZfbnVtdmZzYCBhdHRyaWJ1dGUuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBTUi1JT1YgZnVuY3Rpb25hbGl0eSBpcyBoYW5kbGVkIHdpdGhpbiB0aGF0IGRyaXZlci4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBNeSBuZXh0IHN0b3AgaXMgZGVmaW5pdGVseSBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jYC4gSSBleHBlY3QgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIHNpbXVsYXRlZCBidXMgYW5kLCBjb25zZXF1ZW50bHksIHRoZSBTUi1JT1YgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHZpcnR1YWwgZnVuY3Rpb25zIHdpbGwgcmVzaWRlLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBhdHRyaWJ1dGUgaXMgZXhwb3NlZCwgc2V0LCBhbmQgdXNlZCB3aXRoaW4gdGhlIHNpbXVsYXRpb24gY29udGV4dC4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gZm9ybXVsYXRlIGEgcGxhbiB0byBkZXRlcm1pbmUgaG93IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhdHRyaWJ1dGVzIHdpdGhpbiBuZXRkZXZzaW0gd2lsbCBhZmZlY3QgdGhlIHJlc3VsdGFudCBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O251bV92ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTMxPW5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtMzQtXHRzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYgPSB0b19uc2ltX2J1c19kZXYoZGV2KTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzozNTpcdHVuc2lnbmVkIGludCBudW1fdmZzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM2LVx0aW50IHJldDtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy0zNy1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzozODpcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcdTAwMjZudW1fdmZzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy0zOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ0LVx0aWYgKGRldl9nZXRfZHJ2ZGF0YShkZXYpKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjQ1Olx0XHRyZXQgPSBuc2ltX2Rydl9jb25maWd1cmVfdmZzKG5zaW1fYnVzX2RldiwgbnVtX3Zmcyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDYtXHRkZXZpY2VfdW5sb2NrKGRldik7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTUyPW5zaW1fYnVzX2Rldl9udW12ZnNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTU2LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjU3Olx0cmV0dXJuIHNwcmludGYoYnVmLCBcJiMzNDsldVxcblwmIzM0OywgbnNpbV9idXNfZGV2LVx1MDAzZW51bV92ZnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTU4LX1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM9NDIzPXN0YXRpYyB2b2lkIG5zaW1fYnVzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQyOS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0MzA6c3RhdGljIGludCBuc2ltX251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDMxLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDMzLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjQzNDpcdHJldHVybiBuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MzUtfVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz00Mzc9c3RhdGljIGNvbnN0IHN0cnVjdCBidXNfdHlwZSBuc2ltX2J1cyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDQyLVx0LnJlbW92ZVx0XHQ9IG5zaW1fYnVzX3JlbW92ZSxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0NDM6XHQubnVtX3ZmXHRcdD0gbnNpbV9udW1fdmYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDQ0LX07XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTYwPXVuc2lnbmVkIGludCBuc2ltX2Rldl9nZXRfdmZzKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTY0LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjY1Olx0cmV0dXJuIG5zaW1fZGV2LVx1MDAzZW5zaW1fYnVzX2Rldi1cdTAwM2VudW1fdmZzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTY2LX1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9Njg9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2OTpuc2ltX2J1c19kZXZfc2V0X3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsIHVuc2lnbmVkIGludCBudW1fdmZzKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTcwLXtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03MS1cdHJ0bmxfbG9jaygpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjcyOlx0bnNpbV9idXNfZGV2LVx1MDAzZW51bV92ZnMgPSBudW1fdmZzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTczLVx0cnRubF91bmxvY2soKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTg2MT1pbnQgbnNpbV9kcnZfY29uZmlndXJlX3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg2MjpcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3ZmcylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODYzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg2OC1cdGRldmxfbG9jayhkZXZsaW5rKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODY5Olx0aWYgKG5zaW1fYnVzX2Rldi1cdTAwM2VudW1fdmZzID09IG51bV92ZnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3MC1cdFx0Z290byBleGl0X3VubG9jaztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODcxOlx0aWYgKG5zaW1fYnVzX2Rldi1cdTAwM2VudW1fdmZzIFx1MDAyNlx1MDAyNiBudW1fdmZzKSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3Mi1cdFx0cmV0ID0gLUVCVVNZO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODc0LVx0fVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4NzU6XHRpZiAobnNpbV9idXNfZGV2LVx1MDAzZW1heF92ZnMgXHUwMDNjIG51bV92ZnMpIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODc2LVx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODc5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4ODA6XHRuc2ltX2J1c19kZXZfc2V0X3Zmcyhuc2ltX2J1c19kZXYsIG51bV92ZnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4ODEtXHRpZiAobnNpbV9lc3dfbW9kZV9pc19zd2l0Y2hkZXYobnNpbV9kZXYpKSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg4MjpcdFx0aWYgKG51bV92ZnMpIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODgzLVx0XHRcdHJldCA9IG5zaW1fZXN3X3N3aXRjaGRldl9lbmFibGUobnNpbV9kZXYsIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0zOTk9aW50IG5zaW1fZHJ2X2NvbmZpZ3VyZV92ZnMoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQwMDpcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3Zmcyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDAxLVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NzU9c3RydWN0IG5zaW1fYnVzX2RldiB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4My1cdHVuc2lnbmVkIGludCBtYXhfdmZzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ4NDpcdHVuc2lnbmVkIGludCBudW1fdmZzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4NS1cdGJvb2wgaW5pdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZGV2c2ltIFZGIENyZWF0aW9uIGFuZCB0aGUgUmVsYXRlZCBQYXRjaCoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBuZXRkZXZzaW1gIHByb3ZpZGVzIGEgcmVhbGx5IGNvbnZlbmllbnQgd2F5IHRvIHNwaW4gdXAgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykhIFRoYXQmIzM5O3MgZXhjZWxsZW50LiBJIGNhbiBqdXN0IHdyaXRlIHRvIGAvc3lzL2J1cy9uZXRkZXZzaW0vZGV2aWNlcy9uZXRkZXZzaW1YL3NyaW92X251bXZmc2AgYW5kIGluc3RhbnRpYXRlIHRoZW0uIFBlcmZlY3QgZm9yIHF1aWNrIHRlc3RpbmcuCgpUaGVuLCB0aGUgYXBwcm9hY2ggaXMgdG8gaGl0IHRoZSBzeXN0ZW0gd2l0aCBhIG5ldGxpbmsgYFJUTV9HRVRMSU5LYCB0byB0cmlnZ2VyIGBydG5sX2ZpbGxfdmZgLiBUaGlzIHNob3VsZCBiZSBlYXNpbHkgYWNoaWV2YWJsZSBhbmQgdGVzdGFibGUgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgd2hpY2ggaXMgZmFudGFzdGljIGZvciBpdGVyYXRpbmcgcXVpY2tseS4KCk5vdywgbGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhhdCBgcnRubF9maWxsX3ZmYCBmdW5jdGlvbi4uLgpgYGBjCglmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKCQl1bnNpZ25lZCBjaGFyICptYXJrID0gc2tiX3RhaWxfcG9pbnRlcihza2IpOwoKCQlpZiAocnRubF9maWxsX3ZmaW5mbyhza2IsIGRldiwgaSwgZXh0X2ZpbHRlcl9tYXNrKSkgewoJCQlubGFfbmVzdF9jYW5jZWwoc2tiLCB2ZmluZm8pOwoJCQlyZXR1cm4gLUVNU0dTSVpFOwoJCX0KCgkJLyogQW4gYXR0cmlidXRlIGxlbmd0aCBpcyBhIHUxNiwgc28gdGhlIG5lc3QgY2Fubm90IGRlc2NyaWJlCgkJICogbW9yZSB0aGFuIFUxNl9NQVggYnl0ZXMuIERyb3AgdGhlIFZGIHRoYXQgd291bGQgb3ZlcmZsb3cgaXQKCQkgKiBhbmQgc3RvcDogYSB0cnVuY2F0ZWQgbGlzdCBrZWVwcyB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZQoJCSAqIHBhcnNhYmxlLCB3aGVyZWFzIGEgd3JhcHBlZCBuZXN0IGxlbmd0aCBkb2VzIG5vdC4KCQkgKi8KCQlpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKil2ZmluZm8gJmd0OyBVMTZfTUFYKSB7CgkJCW5sbXNnX3RyaW0oc2tiLCBtYXJrKTsKCQkJYnJlYWs7CgkJfQoJfQpgYGAKQWgsIHNvIHRoZSBwYXRjaCBpcyBmb2N1c2luZyBvbiBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG92ZXJmbG93IGlzc3VlIHdpdGggdGhlIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCwgd2hpY2ggaXMgYSBgdTE2YC4gSXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBwcmV2ZW50cyBhIG5hc3R5IGJ1ZyB3aGVyZSB0aGUgYHZmaW5mb2AgbmVzdCBsZW5ndGggd3JhcHMgYXJvdW5kLiBQcmV2ZW50aW5nIHRoZSBjcmFzaCBkdWUgdG8gdGhlIG92ZXJmbG93IGlzIGdvb2QuCgpBcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIGBDT05GSUdfTkVUREVWU0lNYCBpcyB0aGUga2V5IGZvciB0ZXN0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgb2J2aW91c2x5LiBJZiBJIHdhbnRlZCB0byBnZXQgZmFuY3kgYW5kIGluY29ycG9yYXRlIHJlYWwgb3IgZW11bGF0ZWQgUENJIGRldmljZXMgaW50byB0aGUgdGVzdHMsIGBDT05GSUdfUENJX0lPVmAgKm1pZ2h0KiBiZSByZWxldmFudCwgYnV0IGBuZXRkZXZzaW1gIGl0c2VsZiBkb2VzbiYjMzk7dCBkZXBlbmQgb24gaXQsIHNvIGl0JiMzOTtzIG5vdCBhIGhhcmQgcmVxdWlyZW1lbnQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0ZGV2c2ltYCBLY29uZmlnIGFuZCBjb25maXJtIGFsbCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRERVZTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERpcmVjdGx5IGludG8gdGhlIEtjb25maWcqKgoKQWxyaWdodCwgaW5zdGVhZCBvZiBndWVzc2luZyBvciByZWx5aW5nIG9uIGluZGlyZWN0IHBhdGhzLCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBiZSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZ2AuIEl0JiMzOTtzIHRoZSBtb3N0IGRlZmluaXRpdmUgcGxhY2UgdG8gZ2V0IHRoZSByZWFsIHN0b3J5LiBBbnkgcXVlc3Rpb25zIGFib3V0IHRoZSBuZXRkZXZzaW0gZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgYmUgYW5zd2VyZWQgaGVyZSwgZmlyc3QuIFRoaXMgS2NvbmZpZyBmaWxlICpoYXMqIHRvIGhvbGQgdGhlIG1hc3RlciBkZWZpbml0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF04oCZcyBkZWZpbmVkLCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBsb29rIGxpa2UuIFdlIGNhbiBsaWtlbHkgZGVkdWNlIGEgZ3JlYXQgZGVhbCBhYm91dCB0aGUgYmVoYXZpb3IgYW5kIHBvc3NpYmxlIGlzc3VlcyBmcm9tIGEgdGhvcm91Z2ggZXhhbWluYXRpb24gb2YgdGhhdCBvbmUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZmlsZSBkb2VzIG5vdCBleGlzdDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZpbGUgZG9lcyBub3QgZXhpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTQwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgcHJvamVjdCwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGEgc2ltcGxlIG9uZSwgeWV0IGNydWNpYWw6ICp3aGVyZSogaXMgdGhlIEtjb25maWcgZmlsZSBmb3IgYG5ldGRldnNpbWA/IEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIG1hcCwgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGFuZCBjb25maWd1cmluZyB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzLCB0cmFjayBkb3duIHRoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLiBUaW1lIHRvIGJlZ2luIHRoZSBodW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUREVWU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NjAyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MDMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gc2l0dWF0aW9uLiBNeSBpbnR1aXRpb24gc3VnZ2VzdHMgdGhlIGlzc3VlIG1pZ2h0IGJlIHJvb3RlZCBpbiBob3cgdGhlIGRyaXZlcnMgYXJlIGJ1aWx0IG9yIGVuYWJsZWQuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgdGhhdCBhcm91bmQgbGluZSA2MDQgbWlnaHQgY29udGFpbiB0aGUgcmVsZXZhbnQgbG9naWMgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDA6XHRcbiA2MDE6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvS2NvbmZpZ1wmIzM0O1xuIDYwMjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuIDYwMzpcdFxuIDYwNDpcdGNvbmZpZyBORVRERVZTSU1cbiA2MDU6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuIDYwNjpcdFx0ZGVwZW5kcyBvbiBERUJVR19GU1xuIDYwNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gNjA4Olx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXG4gNjA5Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG4gNjEwOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiA2MTE6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiA2MTI6XHRcdHNlbGVjdCBORVRfU0hBUEVSXG4gNjEzOlx0XHRoZWxwXG4gNjE0Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCBhbmQgc29mdHdhcmUgbW9kZWwgdGhhdCBjYW5cbiA2MTU6XHRcdCAgYmUgdXNlZCB0byB0ZXN0IHZhcmlvdXMgY29udHJvbCBwYXRoIG5ldHdvcmtpbmcgQVBJcywgZXNwZWNpYWxseVxuIDYxNjpcdFx0ICBIVy1vZmZsb2FkIHJlbGF0ZWQuXG4gNjE3Olx0XG4gNjE4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiA2MTk6XHRcdCAgd2lsbCBiZSBjYWxsZWQgbmV0ZGV2c2ltLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGlzIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBUaGF0JiMzOTtzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayDigJMgc3VwZXIgY29yZSBzdHVmZi4gSSBhbHJlYWR5IGtub3cgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGlsZWQgaWYgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGFsd2F5cyB0aGUgY2FzZS4KClRoZSBzcGVjaWZpYyBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCwgYHJ0bmxfZmlsbF92ZmAsIGlzIGNhbGxlZCBmcm9tIGBydG5sX2ZpbGxfaWZpbmZvYC4gVG8gYWN0dWFsbHkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCwgSSYjMzk7bGwgbmVlZCBhIGRldmljZSB0aGF0IGhhcyBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKS4gTGV0IG1lIHNlZeKApiB5ZXAsIGBORVRERVZTSU1gIGxvb2tzIGxpa2UgdGhlIHBlcmZlY3QgY2FuZGlkYXRlIGZvciB0aGF0LiBJIGRvbiYjMzk7dCB0aGluayBJIG5lZWQgdG8gd29ycnkgYWJvdXQgYW55IG90aGVyIGNvbmZpZ3MgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgdGhlIGtleSBzeW1ib2xzIGFyZSBoZXJlLiBPYnZpb3VzbHksIGBydG5sX2ZpbGxfdmZgIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgc28gdGhhdCYjMzk7cyBhIHByaW1lIHN1c3BlY3QuIEl0JiMzOTtzIGNhbGxlZCBieSBgcnRubF9maWxsX2lmaW5mb2AsIHdoaWNoIGl0c2VsZiBpcyBpbnZva2VkIGJ5IGBydG5sX2R1bXBfaWZpbmZvYCBhbmQgYHJ0bmxfZ2V0bGlua2AsIHNvIGBydG5sX2ZpbGxfaWZpbmZvYCBsb29rcyBsaWtlIGFub3RoZXIgaW1wb3J0YW50IHN5bWJvbCB0byBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBjaGVjayB3aGF0IGBydG5sX2ZpbGxfdmZpbmZvYCBpcyBiZWluZyBjYWxsZWQgZm9yIHRvby4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIFllcCwgYHJ0bmxfZmlsbF92ZmAgaXMgYHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50YC4gVGhlIGBub2lubGluZV9mb3Jfc3RhY2tgIGF0dHJpYnV0ZSBpcyBpbXBvcnRhbnQuIFRoYXQgbWVhbnMgaXQgd29uJiMzOTt0IGJlIGlubGluZWQsIHNvIGl0JiMzOTtsbCBoYXZlIGEgZGlzdGluY3QgYWRkcmVzcywgd2hpY2ggaXMgZ29vZCBmb3IgYW5hbHlzaXMuIFRoYXQgbWFrZXMgYHJ0bmxfZmlsbF92ZmAgYSBncmVhdCBmb2N1cyBzeW1ib2wuIEFuZCBgcnRubF9maWxsX2lmaW5mb2AgaXMgYWxzbyBzdGF0aWMsIGJ1dCBub3QgaW5saW5lZCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgbGFyZ2UgZnVuY3Rpb24uIEFscmlnaHQsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGZvciBgcnRubF9maWxsX2lmaW5mb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfZmlsbF9pZmluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0yMDQ5PXN0YXRpYyBpbnQgcnRubF9maWxsX2RwbGxfcGluKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA3MC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNzE6c3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDcyLVx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpzcmNfbmV0LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTI1MDU9c3RhdGljIGludCBydG5sX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTgwLVx0XHRcdGNvbnRpbnVlO1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjU4MTpcdFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgbmV0LCBSVE1fTkVXTElOSyxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1ODItXHRcdFx0XHQgICAgICAgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00MjMyPXN0YXRpYyBpbnQgcnRubF9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQzMDQtXHRpZiAobnNrYilcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzMDU6XHRcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8obnNrYiwgZGV2LCBuZXQsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzA2LVx0XHRcdFx0ICAgICAgIFJUTV9ORVdMSU5LLCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1MjU9c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU0NC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1NDU6XHRlcnIgPSBydG5sX2ZpbGxfaWZpbmZvKHNrYiwgZGV2LCBkZXZfbmV0KGRldiksXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTQ2LVx0XHRcdCAgICAgICB0eXBlLCBwb3J0aWQsIHNlcSwgY2hhbmdlLCAwLCAwLCBldmVudCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxOTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZ1bG5lcmFiaWxpdHkgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdywgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIG9uIGEgbmV0d29yayBkZXZpY2UuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBoaXRzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBhbmQgdGhlIHRyaWdnZXIgaW52b2x2ZXMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBmdXp6IHRoaXMuCgpGaXJzdCwgSSBpZGVudGlmaWVkIHNvbWUga2V5IHN5bWJvbHM6IGBydG5sX2ZpbGxfaWZpbmZvYCAoc3RhdGljKSwgYHJ0bmxfZ2V0bGlua2AgKHRoZSBuZXRsaW5rIGhhbmRsZXIgZm9yIGBSVE1fR0VUTElOS2ApLCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gICh0aGUgbmV0bGluayBkdW1wIGhhbmRsZXIgZm9yIGBSVE1fR0VUTElOS2ApLiBUaG9zZSB0d28gbmV0bGluayBoYW5kbGVycyBhcmUgcHJvYmFibHkgZ29pbmcgdG8gYmUgZ29vZCBwb2ludHMgdG8gZm9jdXMgb24uIEJ1dCB3YWl0LCBgcnRubF9maWxsX3ZmYCBpcyB0aGUgYWN0dWFsIGZ1bmN0aW9uIHRoYXQgZ290IG1vZGlmaWVkIGluIHRoZSBwYXRjaCwgc28gKnRoYXQmIzM5O3MqIHRoZSByZWFsIHRhcmdldC4gSXQmIzM5O3Mgc3RhdGljLCBidXQgdGhhdCYjMzk7cyBmaW5lIOKAkyB3ZSBjYW4gdXNlIGBub2lubGluZV9mb3Jfc3RhY2tgIHRvIHByZXZlbnQgaW5saW5pbmcuIFRoaXMgbWVhbnMgYHJ0bmxfZmlsbF92ZmAgaXMgcHJvYmFibHkgbXkgYmVzdCBmb2N1cyBzeW1ib2wuCgpPa2F5LCBsZXQmIzM5O3Mgc3VtbWFyaXplIHdoYXQgd2Uga25vdyBzbyBmYXI6CgoqICAgKipXb3J0aEZ1enppbmc6IFRydWUqKiAoRGVmaW5pdGVseSwgY29yZSBuZXR3b3JraW5nIHdpdGggYSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXMgYWx3YXlzIHdvcnRoIGNoZWNraW5nLikKKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBmaXhlcyBhIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB0aGF0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIG1hbnkgVmlydHVhbCBGdW5jdGlvbnMuIEl0JiMzOTtzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0JiMzOTtzIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgcnRubF9maWxsX3ZmYCwgYHJ0bmxfZ2V0bGlua2AsIGBydG5sX2R1bXBfaWZpbmZvYCAod2l0aCBgcnRubF9maWxsX3ZmYCBiZWluZyB0aGUgbW9zdCBpbXBvcnRhbnQpLgoqICAgKipFbmFibGVDb25maWdzOioqIGBORVRERVZTSU1gIChCZWNhdXNlIHRoYXQmIzM5O3MgYW4gb2J2aW91cyB3YXkgdG8gY3JlYXRlIG1hbnkgVkZzKS4KCkJ1dCBob2xkIG9uLiBBcmUgdGhlcmUgb3RoZXIgd2F5cyB0byBjcmVhdGUgVkZzIGJlc2lkZXMgdXNpbmcgYE5FVERFVlNJTWA/IFllcywgb2YgY291cnNlLCB0aGUgc3RhbmRhcmQgd2F5IGlzIHRocm91Z2ggYENPTkZJR19QQ0lfSU9WYCBmb3IgUENJIGRldmljZXMgd2l0aCBTUi1JT1Ygc3VwcG9ydC4gUUVNVSBzdXBwb3J0cyBTUi1JT1YgZm9yIGBpZ2JgIGFuZCBgbnZtZWAsIHNvIHRoaXMgaXMgYSBncmVhdCBhZGRpdGlvbi4KCkkmIzM5O2xsIGNoZWNrIGBDT05GSUdfUENJX0lPVmAgaW4gS2NvbmZpZyB0byBtYWtlIHN1cmUgaXQmIzM5O3MgdmFsaWQuIFRoaXMgYWRkcyBhbiBpbXBvcnRhbnQgY29uZmlnIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDSV9JT1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvS2NvbmZpZz0xNTQ9Y29uZmlnIFBDSV9CUklER0VfRU1VTFxuLS1cbmRyaXZlcnMvcGNpL0tjb25maWctMTU2LVxuZHJpdmVycy9wY2kvS2NvbmZpZzoxNTc6Y29uZmlnIFBDSV9JT1ZcbmRyaXZlcnMvcGNpL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtQQ0kgSU9WIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDAKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogNzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWaXJ0dWFsIEZ1bmN0aW9uIFJlcG9ydGluZyBpbiBOZXRsaW5rKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFuZCBOZXRsaW5rLiBGaXJzdCB0aGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIGBQQ0lfSU9WYCBpcyBhIGJvb2xlYW4sIHNvIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBJJiMzOTtsbCBhZGQgYm90aCBgUENJX0lPVmAgYW5kIGBORVRERVZTSU1gIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB0byBiZSBzdXJlLgoKSSYjMzk7bSBjaGVja2luZyB0aGUgYHJ0bmxfZmlsbF92ZmAgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gSXQmIzM5O3MgbWFya2VkIGFzIGBub2lubGluZV9mb3Jfc3RhY2tgLiBUaGUgZnVuY3Rpb25zIGBydG5sX2dldGxpbmtgIGFuZCBgcnRubF9kdW1wX2lmaW5mb2AgYXJlIHN0YXRpYywgYnV0IHJlZ2lzdGVyZWQgYXMgbmV0bGluayBoYW5kbGVycywgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSBub3QgaW5saW5lZCBlaXRoZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFZGIGluZm9ybWF0aW9uIGlzIHBvcHVsYXRlZCBhbmQgdHJhbnNtaXR0ZWQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBgQ09ORklHX05FVGAgaXMgYW4gb2J2aW91cyBiYXNlLiBgQ09ORklHX05FVERFVlNJTWAgaXMgdHJpc3RhdGUsIGFuZCBgQ09ORklHX1BDSV9JT1ZgIGlzIGEgYm9vbGVhbi4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYW55IG90aGVyIGRyaXZlcnMsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgc3VwcG9ydCBWRnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHZpcnRpb19uZXRgLCBidXQgdGhlbiBJIHJlY2FsbCB0aGF0IGB2aXJ0aW9fbmV0YCBpdHNlbGYgZG9lc24mIzM5O3QgaGF2ZSBWRnMuIEl0IGFjdHMgYXMgYSBWRiBvZiBhIHZpcnRpbyBQQ0kgZGV2aWNlLiBUaGUgZnVuY3Rpb24gYHZpcnRpb19kZXZfbnVtX3ZmYCByZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBWRnMgZnJvbSB0aGUgcGFyZW50IFBDSSBkZXZpY2UsIHdoaWNoIGlzIGFuIGltcG9ydGFudCBkZXRhaWwuIEJ1dCBgbmV0ZGV2c2ltYCBpcyB0aGUgbW9zdCBkaXJlY3QgbWV0aG9kIHRvIHRlc3QgdGhpcyBWRiBoYW5kbGluZy4KCkJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gVGhpcyBjb2RlIGluY2x1ZGVzIGEgbmV3IGNoZWNrIHdpdGhpbiB0aGUgVkYgbG9vcDoKYGBgYwppZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKil2ZmluZm8gJmd0OyBVMTZfTUFYKSB7CiAgICBubG1zZ190cmltKHNrYiwgbWFyayk7CiAgICBicmVhazsKfQpgYGAKVGhpcyBpcyBhIGNsZWFuLCBmdW5jdGlvbmFsIGNoYW5nZSBhaW1lZCBhdCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIG1hbGZvcm1lZCBOZXRsaW5rIG1lc3NhZ2VzIGJ5IGNoZWNraW5nIHRoZSBsZW5ndGggb2YgdGhlIGF0dHJpYnV0ZSBuZXN0LiBUaGlzIGFsc28gcHJldmVudHMgYSB0cnVuY2F0ZWQgbGlzdCBieSByZW1vdmluZyB0aGUgaXRlbSBjYXVzaW5nIHRoZSBpc3N1ZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHJvYnVzdG5lc3MuCgpNeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9sczogYHJ0bmxfZmlsbF92ZmAsIGBydG5sX2dldGxpbmtgLCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gLgoKQW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgYXJlOiBgTkVUREVWU0lNYCBhbmQgYFBDSV9JT1ZgLgoKSSYjMzk7bGwgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9maWxsX3ZmJiMzNDssCiAgICAmIzM0O3J0bmxfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfaWZpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9maWxsX3ZmJiMzNDssCiAgICAmIzM0O3J0bmxfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfaWZpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOTowNi44Mjg0MzcxNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDYzMjg4NDMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2ZpbGxfdmZcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjA2LjgyODQ0OTg0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2MTQzOTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzgzZjJlZGZmYmZkMmZlMmM1MjZhZjkzNDMxNDMwZTM1ZjgxMDE3NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNTozOTowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXFxuaW5kZXggMTJhYTNhYTE2ODhiMTMuLmJkMWQ2NWRjZjQyZmQ1IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXFxuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG5AQCAtMTY4NywxMCArMTY4NywyMiBAQCBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdmZzOyBpKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgY2hhciAqbWFyayA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTtcXG4rXFxuIFxcdFxcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XFxuIFxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEFuIGF0dHJpYnV0ZSBsZW5ndGggaXMgYSB1MTYsIHNvIHRoZSBuZXN0IGNhbm5vdCBkZXNjcmliZVxcbitcXHRcXHQgKiBtb3JlIHRoYW4gVTE2X01BWCBieXRlcy4gRHJvcCB0aGUgVkYgdGhhdCB3b3VsZCBvdmVyZmxvdyBpdFxcbitcXHRcXHQgKiBhbmQgc3RvcDogYSB0cnVuY2F0ZWQgbGlzdCBrZWVwcyB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZVxcbitcXHRcXHQgKiBwYXJzYWJsZSwgd2hlcmVhcyBhIHdyYXBwZWQgbmVzdCBsZW5ndGggZG9lcyBub3QuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKil2ZmluZm8gXFx1MDAzZSBVMTZfTUFYKSB7XFxuK1xcdFxcdFxcdG5sbXNnX3RyaW0oc2tiLCBtYXJrKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0bmxhX25lc3RfZW5kKHNrYiwgdmZpbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MDcuNDc1NzQzMjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3OTk4NTUwNDUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2ZpbGxfdmZcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4M2YyZWRmZmJmZDJmZTJjNTI2YWY5MzQzMTQzMGUzNWY4MTAxNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNTozOTowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDEyYWEzYWExNjg4YjEzLi5iZDFkNjVkY2Y0MmZkNSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTE2ODcsMTAgKzE2ODcsMjIgQEAgc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpKyspIHtcbitcdFx0dW5zaWduZWQgY2hhciAqbWFyayA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTtcbitcbiBcdFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcbiBcdFx0XHRubGFfbmVzdF9jYW5jZWwoc2tiLCB2ZmluZm8pO1xuIFx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXHRcdH1cbitcbitcdFx0LyogQW4gYXR0cmlidXRlIGxlbmd0aCBpcyBhIHUxNiwgc28gdGhlIG5lc3QgY2Fubm90IGRlc2NyaWJlXG4rXHRcdCAqIG1vcmUgdGhhbiBVMTZfTUFYIGJ5dGVzLiBEcm9wIHRoZSBWRiB0aGF0IHdvdWxkIG92ZXJmbG93IGl0XG4rXHRcdCAqIGFuZCBzdG9wOiBhIHRydW5jYXRlZCBsaXN0IGtlZXBzIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlXG4rXHRcdCAqIHBhcnNhYmxlLCB3aGVyZWFzIGEgd3JhcHBlZCBuZXN0IGxlbmd0aCBkb2VzIG5vdC5cbitcdFx0ICovXG4rXHRcdGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKXZmaW5mbyBcdTAwM2UgVTE2X01BWCkge1xuK1x0XHRcdG5sbXNnX3RyaW0oc2tiLCBtYXJrKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0fVxuIFxuIFx0bmxhX25lc3RfZW5kKHNrYiwgdmZpbmZvKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjA3LjQ3NTc0NjcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0ODMyNjIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHJ0bmV0bGluay5jIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBydG5sX2ZpbGxfdmYoKWAgZnVuY3Rpb24uIFRoZSBnaXN0IGlzLCBpdCdzIGFkZGluZyBhIHNhZmVndWFyZCBhZ2FpbnN0IHNvbWUga2luZCBvZiBhdHRyaWJ1dGUgbGVuZ3RoIG92ZXJmbG93IHdpdGhpbiB0aGUgYHZmaW5mb2AgbmVzdC4gVGhleSdyZSBkb2luZyB0aGlzIGJ5IGNoZWNraW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgdGFpbCBvZiB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIGFuZCB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiBgdmZpbmZvYC4gSWYgdGhpcyBkaWZmZXJlbmNlLCB3aGljaCByZXByZXNlbnRzIHRoZSB1c2VkIHNwYWNlLCBleGNlZWRzIGBVMTZfTUFYYCwgaXQgdHJpbXMgdGhlIHNvY2tldCBidWZmZXIgYW5kIGJyZWFrcyB0aGUgbG9vcC4gU291bmRzIGxpa2UgYSBnb29kIGRlZmVuc2UgYWdhaW5zdCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBJdCdzIHRoZSByaWdodCBraW5kIG9mIGRlZmVuc2l2ZSBjb2RpbmcuIE5vdyBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJ0bmxfZmlsbF92ZmAgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjEwLjgyNDA3Njg1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyMDk0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRubF9maWxsX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTE0OTc9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNTIwLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjE1MjE6c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjItXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjY3LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjE2Njg6c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTY2OS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTY5MS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNjkyOlxcdFxcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTY5My1cXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCB2ZmluZm8pO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjA3MT1zdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODYtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjE4NzpcXHRpZiAocnRubF9maWxsX3ZmKHNrYiwgZGV2LCBleHRfZmlsdGVyX21hc2spKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODgtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjEwLjkyODI5NTMyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzY5OTU4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBOZXRsaW5rIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIGBydG5sX2ZpbGxfdmZgIGZ1bmN0aW9uLiBJdCdzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBydG5sX2ZpbGxfaWZpbmZvYCwgd2hpY2ggSSBrbm93IGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgbmV0bGluayBtZXNzYWdlcyByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGhhdCB0ZWxscyBtZSB0aGlzIGBydG5sX2ZpbGxfdmZgIGNvZGUgcGF0aCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZCDigJMgaXQncyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBpbnRlcmZhY2UgaW5mb3JtYXRpb24gZ2F0aGVyaW5nLiBJIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiBmb2N1c2VzIG9uIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIChWRikgYXNwZWN0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdmlydHVhbGl6YXRpb24uXG5cbk5vdywgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiByZWxhdGVkIHNwZWNpZmljYWxseSB0byBWRnMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHJpZXZlcyBhbmQgcmVwb3J0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGl0J3MgZXh0cmFjdGluZy4gVGltZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgcnRubF9maWxsX3ZmYCBpdHNlbGYgYW5kIHNlZSBleGFjdGx5IHdoYXQgaW5mb3JtYXRpb24gaXQncyBwYWNraW5nIGludG8gdGhvc2UgbmV0bGluayBtZXNzYWdlcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTYzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MTQuNTY1Mjk0NjQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTI3NzgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5sX2ZpbGxfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmM9MTQ5Nz1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjAtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTUyMTpzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTUyMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NjctXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTY2ODpzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjY5LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjkxLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjE2OTI6XFx0XFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjkzLVxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMDcxPXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjE4Ni1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMTg3OlxcdGlmIChydG5sX2ZpbGxfdmYoc2tiLCBkZXYsIGV4dF9maWx0ZXJfbWFzaykpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjE4OC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MTQuNzA2NTgyNzM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NDEwNDQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYHJ0bmxfZmlsbF92ZmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgZ3V0cyBvZiBgcnRubF9maWxsX3ZmYCBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgdmlydHVhbCBmdW5jdGlvbiAoVkYpIGluZm9ybWF0aW9uIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoZSBSVE5ldGxpbmsgZnJhbWV3b3JrLiBJIGV4cGVjdCB0byBzZWUgdGhlIHR5cGljYWwgUlROZXRsaW5rIGF0dHJpYnV0ZSBwb3B1bGF0aW9uIHByb2Nlc3MgaGVyZS4gSXQnbGwgcHJvYmFibHkgaW52b2x2ZSBhbGxvY2F0aW5nIGEgc2tiLCBwb3B1bGF0aW5nIGl0IHdpdGggdGhlIFZGLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGluZm9ybWF0aW9uLCBhbmQgdGhlbiBhdHRhY2hpbmcgaXQgdG8gdGhlIG5ldGxpbmsgbWVzc2FnZS4gSSdtIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWNzIG9mIHdoYXQgZGF0YSBpcyBiZWluZyByZXRyaWV2ZWQgdG8gZmlsbCB0aGUgbWVzc2FnZS4gSXMgdGhpcyBhbGwgdGhlIFZGJ3MgY29uZmlndXJhdGlvbiBvciBhIHN1YnNldD8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyBvciB0cmlja3MgYmVpbmcgdXNlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcGVyLVZGIGNvbmZpZ3VyYXRpb24gb3IgaXMgdGhpcyBtb3JlIGdlbmVyYWwsIG1heWJlIGRlc2NyaWJpbmcgdGhlIFZGJ3MgcmVsYXRpb25zaGlwIHRvIHRoZSBQRj8gSSBhbHNvIHdhbnQgdG8gc2VlIGhvdyBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZC4gQXJlIHRoZXJlIGNsZWFyIGNoZWNrcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXM/IEhvdyBhcmUgZXJyb3JzIGNvbW11bmljYXRlZCBiYWNrIHRvIHRoZSByZXF1ZXN0aW5nIHByb2Nlc3M/IEknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgaXQgZWZmaWNpZW50bHkgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIGEgVkYgbWlnaHQgbm90IGJlIHByZXNlbnQgb3Igbm90IGNvbmZpZ3VyZWQuIEhvcGVmdWxseSwgaXQgaXMgcm9idXN0IGFuZCBjbGVhbi4gTGV0J3Mgc2VlIGlmIHRoaXMgY29kZSBpcyBkb2luZyB3aGF0IEkgZXhwZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjkxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MTguMzgwNjkwNzY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjY4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjY4OlxcdHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE2Njk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4xNjcwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHUzMiBleHRfZmlsdGVyX21hc2spXFxuMTY3MTpcXHR7XFxuMTY3MjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp2ZmluZm87XFxuMTY3MzpcXHRcXHRpbnQgaSwgbnVtX3ZmcztcXG4xNjc0OlxcdFxcbjE2NzU6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWRldi5wYXJlbnQgfHwgKChleHRfZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfVkYpID09IDApKVxcbjE2NzY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTY3NzpcXHRcXG4xNjc4OlxcdFxcdG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cXHUwMDNlZGV2LnBhcmVudCk7XFxuMTY3OTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9WRiwgbnVtX3ZmcykpXFxuMTY4MDpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjE2ODE6XFx0XFxuMTY4MjpcXHRcXHRpZiAoIWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2dldF92Zl9jb25maWcpXFxuMTY4MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNjg0OlxcdFxcbjE2ODU6XFx0XFx0dmZpbmZvID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgSUZMQV9WRklORk9fTElTVCk7XFxuMTY4NjpcXHRcXHRpZiAoIXZmaW5mbylcXG4xNjg3OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMTY4ODpcXHRcXG4xNjg5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdmZzOyBpKyspIHtcXG4xNjkwOlxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKm1hcmsgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XFxuMTY5MTpcXHRcXG4xNjkyOlxcdFxcdFxcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XFxuMTY5MzpcXHRcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCB2ZmluZm8pO1xcbjE2OTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4xNjk1OlxcdFxcdFxcdH1cXG4xNjk2OlxcdFxcbjE2OTc6XFx0XFx0XFx0LyogQW4gYXR0cmlidXRlIGxlbmd0aCBpcyBhIHUxNiwgc28gdGhlIG5lc3QgY2Fubm90IGRlc2NyaWJlXFxuMTY5ODpcXHRcXHRcXHQgKiBtb3JlIHRoYW4gVTE2X01BWCBieXRlcy4gRHJvcCB0aGUgVkYgdGhhdCB3b3VsZCBvdmVyZmxvdyBpdFxcbjE2OTk6XFx0XFx0XFx0ICogYW5kIHN0b3A6IGEgdHJ1bmNhdGVkIGxpc3Qga2VlcHMgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2VcXG4xNzAwOlxcdFxcdFxcdCAqIHBhcnNhYmxlLCB3aGVyZWFzIGEgd3JhcHBlZCBuZXN0IGxlbmd0aCBkb2VzIG5vdC5cXG4xNzAxOlxcdFxcdFxcdCAqL1xcbjE3MDI6XFx0XFx0XFx0aWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopdmZpbmZvIFxcdTAwM2UgVTE2X01BWCkge1xcbjE3MDM6XFx0XFx0XFx0XFx0bmxtc2dfdHJpbShza2IsIG1hcmspO1xcbjE3MDQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTcwNTpcXHRcXHRcXHR9XFxuMTcwNjpcXHRcXHR9XFxuMTcwNzpcXHRcXG4xNzA4OlxcdFxcdG5sYV9uZXN0X2VuZChza2IsIHZmaW5mbyk7XFxuMTcwOTpcXHRcXHRyZXR1cm4gMDtcXG4xNzEwOlxcdH1cXG4xNzExOlxcdFxcbjE3MTI6XFx0c3RhdGljIGludCBydG5sX2ZpbGxfbGlua19pZm1hcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE3MTM6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xNzE0OlxcdHtcXG4xNzE1OlxcdFxcdHN0cnVjdCBydG5sX2xpbmtfaWZtYXAgbWFwO1xcbjE3MTY6XFx0XFxuMTcxNzpcXHRcXHRtZW1zZXQoXFx1MDAyNm1hcCwgMCwgc2l6ZW9mKG1hcCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOToxOC4zODIyOTkyMTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk0NjY3MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmlydHVhbCBGdW5jdGlvbiBOZXRsaW5rIE1lc3NhZ2UgQ29uc3RydWN0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgaXNzdWUsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjdWxwcml0IGlzIHJlc2lkaW5nIHdpdGhpbiBgcnRubF9maWxsX3ZmYC4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhlIGRldGFpbHMgYWJvdXQgVmlydHVhbCBGdW5jdGlvbnMgYXJlIGdldHRpbmcgYWRkZWQgdG8gdGhlIG5ldGxpbmsgbWVzc2FnZSwgd2hpY2gsIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIGlzIHRyaWdnZXJlZCBieSBjb21tYW5kcyBsaWtlIGBpcCBsaW5rIHNob3dgLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdG8gYmUgYSBwcm9ibGVtIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWFueSBWaXJ0dWFsIEZ1bmN0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgY2VudGVyZWQgYXJvdW5kIGhvdyBuZXRsaW5rIG1lc3NhZ2VzIGFyZSBjb25zdHJ1Y3RlZC4gSSB3b25kZXIgaWYgdGhlcmUncyBhbiBpbnRlcm5hbCBidWZmZXIgb3ZlcmZsb3cgb3Igc29tZXRoaW5nIHNpbWlsYXIgaGFwcGVuaW5nIHdoZW4gd2UgaGF2ZSBhIGhpZ2ggbnVtYmVyIG9mIFZGcy4gVG8gcmVwbGljYXRlIHRoaXMsIEknbGwgZGVmaW5pdGVseSBuZWVkIGEgYG5ldF9kZXZpY2VgIHdpdGggYSBsYXJnZSBudW1iZXIgb2YgVmlydHVhbCBGdW5jdGlvbnMuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhlIG51bWJlciBvZiBWRnMgcG9zc2libGUsIEkgc2hvdWxkIGNoZWNrIHRoZSBgQ09ORklHX1BDSV9JT1ZgIGNvbmZpZ3VyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gbG9vayBhdCBgZGV2X251bV92ZmAgdG8gc2VlIGhvdyB0aGF0J3MgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjIyLjM3Njk2OTg3MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyODg3MzE5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfbnVtX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW8uYz00MDQ9c3RhdGljIHZvaWQgdmlydGlvX2Rldl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpfZClcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQzNy1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0Mzg6c3RhdGljIGludCB2aXJ0aW9fZGV2X251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDM5LXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ0MS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0NDI6XFx0cmV0dXJuIGRldl9udW1fdmYodmRldi1cXHUwMDNlZGV2LnBhcmVudCk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDQzLX1cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQ0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlIHZpcnRpb19idXMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00NTQtXFx0LnNodXRkb3duID0gdmlydGlvX2Rldl9zaHV0ZG93bixcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0NTU6XFx0Lm51bV92ZiA9IHZpcnRpb19kZXZfbnVtX3ZmLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ1Ni19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9kZXZpY2UuaD0xMjczPXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICpkZXZfb2Zfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RldmljZS5oLTEyNzktXFxuaW5jbHVkZS9saW51eC9kZXZpY2UuaDoxMjgwOnN0YXRpYyBpbmxpbmUgaW50IGRldl9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI4MS17XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xMTQ3PXN0YXRpYyBpbmxpbmUgaW50IHJ0bmxfdmZpbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTExNTAtXFx0aWYgKGRldi1cXHUwMDNlZGV2LnBhcmVudCBcXHUwMDI2XFx1MDAyNiAoZXh0X2ZpbHRlcl9tYXNrIFxcdTAwMjYgUlRFWFRfRklMVEVSX1ZGKSkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjExNTE6XFx0XFx0aW50IG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cXHUwMDNlZGV2LnBhcmVudCk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE1Mi1cXHRcXHRzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKDApO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTE5NT1zdGF0aWMgc2l6ZV90IHJ0bmxfcG9ydF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMjEyLVxcdFxcdHJldHVybiAwO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjEyMTM6XFx0aWYgKGRldl9udW1fdmYoZGV2LVxcdTAwM2VkZXYucGFyZW50KSlcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMjE0LVxcdFxcdHJldHVybiBwb3J0X3NlbGZfc2l6ZSArIHZmX3BvcnRzX3NpemUgK1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjEyMTU6XFx0XFx0XFx0dmZfcG9ydF9zaXplICogZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEyMTYtXFx0ZWxzZVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTM2NT1zdGF0aWMgaW50IHJ0bmxfdmZfcG9ydHNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTM3NS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMzc2OlxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIGRldl9udW1fdmYoZGV2LVxcdTAwM2VkZXYucGFyZW50KTsgdmYrKykge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzNzctXFx0XFx0dmZfcG9ydCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElGTEFfVkZfUE9SVCk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xNDIxPXN0YXRpYyBpbnQgcnRubF9wb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0MzMtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTQzNDpcXHRpZiAoZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTQzNS1cXHRcXHRlcnIgPSBydG5sX3ZmX3BvcnRzX2ZpbGwoc2tiLCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTY2OD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NzctXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTY3ODpcXHRudW1fdmZzID0gZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NzktXFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fVkYsIG51bV92ZnMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOToyNS4yMDU4NTY4NTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMjc0NjYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIERldmljZSBWaXJ0dWFsIEZ1bmN0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgZGV2X251bV92ZmAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiB0aGUga2VybmVsJ3MgZGV2aWNlIG1vZGVsLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhlIGNvcmUgZGV2aWNlIHN0cnVjdHVyZSBsaXZlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBkZXZfbnVtX3ZmYCB2YXJpYWJsZSBpcyBhbmQgaG93IGl0J3MgZGVmaW5lZC4gTXkgZmlyc3Qgc3RvcCB3aWxsIGJlIGBpbmNsdWRlL2xpbnV4L2RldmljZS5oYC4gVGhhdCBoZWFkZXIgZmlsZSBpcyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIHRoZSBjb3JlIGBkZXZpY2VgIHN0cnVjdHVyZSBhbmQgYXNzb2NpYXRlZCBmaWVsZHMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24gb2YgYGRldl9udW1fdmZgIHRoZXJlLCBwcm9iYWJseSBhcyBhIG1lbWJlciBvZiBhIHN0cnVjdHVyZSBvciBwZXJoYXBzIGFzIGEgbWFjcm8gcmVsYXRlZCB0byB2aXJ0dWFsIGZ1bmN0aW9ucy4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvbW1lbnRzLCBhcyB0aGV5IHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIHB1cnBvc2UgYW5kIHVzYWdlIG9mIHRoaXMgdmFyaWFibGUsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdmlydHVhbCBmdW5jdGlvbnMuIFRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpbiB0aGlzIGhlYWRlciBmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgbG93ZXN0IGxldmVsIGFuZCwgZnJvbSB0aGF0IHBvaW50LCBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG15IGN1cnJlbnQgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjI4LjYzODYwNzg4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg1MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZGV2aWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI3MDpcXHR2b2lkIGRldmljZV9zZXRfb2Zfbm9kZV9mcm9tX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldjIpO1xcbjEyNzE6XFx0c3RydWN0IGRldmljZSAqZ2V0X2Rldl9mcm9tX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG4xMjcyOlxcdFxcbjEyNzM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9vZl9ub2RlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4xMjc0OlxcdHtcXG4xMjc1OlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfT0YpIHx8ICFkZXYpXFxuMTI3NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMjc3OlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZW9mX25vZGU7XFxuMTI3ODpcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdHN0YXRpYyBpbmxpbmUgaW50IGRldl9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbjEyODE6XFx0e1xcbjEyODI6XFx0XFx0aWYgKGRldi1cXHUwMDNlYnVzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlYnVzLVxcdTAwM2VudW1fdmYpXFxuMTI4MzpcXHRcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VidXMtXFx1MDAzZW51bV92ZihkZXYpO1xcbjEyODQ6XFx0XFx0cmV0dXJuIDA7XFxuMTI4NTpcXHR9XFxuMTI4NjpcXHRcXG4xMjg3OlxcdC8qXFxuMTI4ODpcXHQgKiBSb290IGRldmljZSBvYmplY3RzIGZvciBncm91cGluZyB1bmRlciAvc3lzL2RldmljZXNcXG4xMjg5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOToyOC42NDA1OTg1MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTkxNTA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnR1YWwgRnVuY3Rpb24gTnVtYmVyIFJldHJpZXZhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRldl9udW1fdmZgIGZ1bmN0aW9uIGNhbGwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyBnb2luZyB0aHJvdWdoIHRoZSBkZXZpY2UncyBidXMgdG8gZ2V0IHRoZSBudW1iZXIgb2YgdmlydHVhbCBmdW5jdGlvbnMuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoZSBrZXkgaXMgaW4gaG93IHRoZSBidXMgaGFuZGxlcyB0aGlzIHJlcXVlc3QuIEl0J3MgY2FsbGluZyBgZGV2LVx1MDAzZWJ1cy1cdTAwM2VudW1fdmYoZGV2KWAuIFNpbmNlIHdlIGFyZSB0YWxraW5nIGFib3V0IFBDSSBkZXZpY2VzLCBhbmQga25vd2luZyBQQ0kgYnVzc2VzIGFyZSBhIGNvbW1vbiB0eXBlIG9mIGRldmljZSwgYHBjaV9idXNfdHlwZWAgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUuICBJIG5lZWQgdG8gY2hlY2sgaG93IGBudW1fdmZgIGlzIGltcGxlbWVudGVkIGZvciBgcGNpX2J1c190eXBlYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmNgIGZpbGUgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhhdCBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjMyLjU0MjUxODI2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5MTY4MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bV92ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYz00Nj1zdGF0aWMgaW50IGRpc2FibGVfc2xvdChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QpXFxuLS1cXG5kcml2ZXJzL3BjaS9ob3RwbHVnL3MzOTBfcGNpX2hwYy5jLTU5LVxcdHBkZXYgPSBwY2lfZ2V0X3Nsb3QoemRldi1cXHUwMDNlemJ1cy1cXHUwMDNlYnVzLCB6ZGV2LVxcdTAwM2VkZXZmbik7XFxuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYzo2MDpcXHRpZiAocGRldiBcXHUwMDI2XFx1MDAyNiBwY2lfbnVtX3ZmKHBkZXYpKSB7XFxuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYy02MS1cXHRcXHRyYyA9IC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lkZS5jPTIzOT1zdHJ1Y3QgcGNpX2lkZSAqcGNpX2lkZV9zdHJlYW1fYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS9pZGUuYy0yNDctXFx0c3RydWN0IHBjaV9kZXYgKnJwLCAqYnI7XFxuZHJpdmVycy9wY2kvaWRlLmM6MjQ4OlxcdGludCBudW1fdmYsIHJpZF9lbmQ7XFxuZHJpdmVycy9wY2kvaWRlLmMtMjQ5LVxcbi0tXFxuZHJpdmVycy9wY2kvaWRlLmMtMjgwLVxcdC8qIGZvciBTUi1JT1YgY2FzZSwgY292ZXIgYWxsIFZGcyAqL1xcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MTpcXHRudW1fdmYgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MjpcXHRpZiAobnVtX3ZmKVxcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MzpcXHRcXHRyaWRfZW5kID0gUENJX0RFVklEKHBjaV9pb3ZfdmlydGZuX2J1cyhwZGV2LCBudW1fdmYgLSAxKSxcXG5kcml2ZXJzL3BjaS9pZGUuYzoyODQ6XFx0XFx0XFx0XFx0ICAgIHBjaV9pb3ZfdmlydGZuX2RldmZuKHBkZXYsIG51bV92ZiAtIDEpKTtcXG5kcml2ZXJzL3BjaS9pZGUuYy0yODUtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmM9NDQxPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ0NS1cXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcXG5kcml2ZXJzL3BjaS9pb3YuYzo0NDY6XFx0dTE2IG51bV92ZnM7XFxuZHJpdmVycy9wY2kvaW92LmMtNDQ3LVxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtNDQ5LVxcdGRldmljZV9sb2NrKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MDpcXHRudW1fdmZzID0gcGRldi1cXHUwMDNlc3Jpb3YtXFx1MDAzZW51bV9WRnM7XFxuZHJpdmVycy9wY2kvaW92LmMtNDUxLVxcdGRldmljZV91bmxvY2soXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9wY2kvaW92LmMtNDUyLVxcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MzpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgbnVtX3Zmcyk7XFxuZHJpdmVycy9wY2kvaW92LmMtNDU0LX1cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1Ni0vKlxcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1NzogKiBudW1fdmZzIFxcdTAwM2UgMDsgbnVtYmVyIG9mIFZGcyB0byBlbmFibGVcXG5kcml2ZXJzL3BjaS9pb3YuYzo0NTg6ICogbnVtX3ZmcyA9IDA7IGRpc2FibGUgYWxsIFZGc1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1OS0gKlxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmM9NDYzPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy00NjgtXFx0aW50IHJldCA9IDA7XFxuZHJpdmVycy9wY2kvaW92LmM6NDY5OlxcdHUxNiBudW1fdmZzO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3MC1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzE6XFx0aWYgKGtzdHJ0b3UxNihidWYsIDAsIFxcdTAwMjZudW1fdmZzKSBcXHUwMDNjIDApXFxuZHJpdmVycy9wY2kvaW92LmMtNDcyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3My1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzQ6XFx0aWYgKG51bV92ZnMgXFx1MDAzZSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3NS1cXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3OC1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0Nzk6XFx0aWYgKG51bV92ZnMgPT0gcGRldi1cXHUwMDNlc3Jpb3YtXFx1MDAzZW51bV9WRnMpXFxuZHJpdmVycy9wY2kvaW92LmMtNDgwLVxcdFxcdGdvdG8gZXhpdDtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ5NS1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0OTY6XFx0aWYgKG51bV92ZnMgPT0gMCkge1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ5Ny1cXHRcXHQvKiBkaXNhYmxlIFZGcyAqL1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtNTA2LVxcdFxcdHBjaV93YXJuKHBkZXYsIFxcXCIlZCBWRnMgYWxyZWFkeSBlbmFibGVkLiBEaXNhYmxlIGJlZm9yZSBlbmFibGluZyAlZCBWRnNcXFxcblxcXCIsXFxuZHJpdmVycy9wY2kvaW92LmM6NTA3OlxcdFxcdFxcdCBwZGV2LVxcdTAwM2Vzcmlvdi1cXHUwMDNlbnVtX1ZGcywgbnVtX3Zmcyk7XFxuZHJpdmVycy9wY2kvaW92LmMtNTA4LVxcdFxcdHJldCA9IC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxMi1cXHRwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk7XFxuZHJpdmVycy9wY2kvaW92LmM6NTEzOlxcdHJldCA9IHBkZXYtXFx1MDAzZWRyaXZlci1cXHUwMDNlc3Jpb3ZfY29uZmlndXJlKHBkZXYsIG51bV92ZnMpO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTUxNC1cXHRwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo1MTg6XFx0aWYgKHJldCAhPSBudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxOS1cXHRcXHRwY2lfd2FybihwZGV2LCBcXFwiJWQgVkZzIHJlcXVlc3RlZDsgb25seSAlZCBlbmFibGVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvcGNpL2lvdi5jOjUyMDpcXHRcXHRcXHQgbnVtX3ZmcywgcmV0KTtcXG5kcml2ZXJzL3BjaS9pb3YuYy01MjEtXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYz02MTM9Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzcmlvdl9wZl9kZXZfYXR0cl9ncm91cCA9IHtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYxNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo2MTg6aW50IF9fd2VhayBwY2liaW9zX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXFxuZHJpdmVycy9wY2kvaW92LmMtNjE5LXtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTYyMz1pbnQgX193ZWFrIHBjaWJpb3Nfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYyNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo2Mjg6c3RhdGljIGludCBzcmlvdl9hZGRfdmZzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYyOS17XFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy02MzUtXFxuZHJpdmVycy9wY2kvaW92LmM6NjM2OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdmZzOyBpKyspIHtcXG5kcml2ZXJzL3BjaS9pb3YuYy02MzctXFx0XFx0cmMgPSBwY2lfaW92X2FkZF92aXJ0Zm4oZGV2LCBpKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTExOTA9RVhQT1JUX1NZTUJPTF9HUEwocGNpX2Rpc2FibGVfc3Jpb3YpO1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtMTE5Mi0vKipcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMTkzOiAqIHBjaV9udW1fdmYgLSByZXR1cm4gbnVtYmVyIG9mIFZGcyBhc3NvY2lhdGVkIHdpdGggYSBQRiBkZXZpY2VfcmVsZWFzZV9kcml2ZXJcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk0LSAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk3LSAqL1xcbmRyaXZlcnMvcGNpL2lvdi5jOjExOTg6aW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldilcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk5LXtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEyMDQtfVxcbmRyaXZlcnMvcGNpL2lvdi5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwocGNpX251bV92Zik7XFxuZHJpdmVycy9wY2kvaW92LmMtMTIwNi1cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTEzNTg9RVhQT1JUX1NZTUJPTF9HUEwocGNpX2lvdl92Zl9iYXJfc2V0X3NpemUpO1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2MC0vKipcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzYxOiAqIHBjaV9pb3ZfdmZfYmFyX2dldF9zaXplcyAtIGdldCBWRiBCQVIgc2l6ZXMgYWxsb3dpbmcgdG8gY3JlYXRlIHVwIHRvIG51bV92ZnNcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzYyLSAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2My0gKiBAcmVzbm86IHRoZSByZXNvdXJjZSBudW1iZXJcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzY0OiAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2NS0gKlxcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNjY6ICogR2V0IHRoZSBzaXplcyBvZiBhIFZGIHJlc2l6YWJsZSBCQVIgdGhhdCBjYW4gYWNjb21tb2RhdGUgQG51bV92ZnMgd2l0aGluXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2Ny0gKiB0aGUgY3VycmVudGx5IGFzc2lnbmVkIHNpemUgb2YgdGhlIHJlc291cmNlIEByZXNuby5cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzEtICovXFxuZHJpdmVycy9wY2kvaW92LmM6MTM3Mjp1MzIgcGNpX2lvdl92Zl9iYXJfZ2V0X3NpemVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubywgaW50IG51bV92ZnMpXFxuZHJpdmVycy9wY2kvaW92LmMtMTM3My17XFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzc2LVxcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNzc6XFx0aWYgKCFudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzgtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9wY2kvaW92LmMtMTM3OS1cXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzgwOlxcdGRvX2Rpdih2Zl9sZW4sIG51bV92ZnMpO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTEzODEtXFx0c2l6ZXMgPSAocm91bmR1cF9wb3dfb2ZfdHdvKHZmX2xlbiArIDEpIC0gMSkgXFx1MDAzZVxcdTAwM2UgaWxvZzIoU1pfMU0pO1xcbi0tXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jPTE2MjU9dm9pZCBwY2lfdWV2ZW50X2VycyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBwY2lfZXJzX3Jlc3VsdCBlcnJfdHlwZSlcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU1LVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNjU2OnN0YXRpYyBpbnQgcGNpX2J1c19udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU3LXtcXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTY1ODpcXHRyZXR1cm4gcGNpX251bV92Zih0b19wY2lfZGV2KGRldikpO1xcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU5LX1cXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYz0xNzI2PWNvbnN0IHN0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTczOC1cXHQucG1cXHRcXHQ9IFBDSV9QTV9PUFNfUFRSLFxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNzM5OlxcdC5udW1fdmZcXHRcXHQ9IHBjaV9idXNfbnVtX3ZmLFxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzQwLVxcdC5kbWFfY29uZmlndXJlXFx0PSBwY2lfZG1hX2NvbmZpZ3VyZSxcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jPTE2ODE9c3RhdGljIHNzaXplX3QgX19yZXNvdXJjZV9yZXNpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbixcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jLTE2OTYtXFx0ZGV2aWNlX2xvY2soZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYzoxNjk3OlxcdGlmIChkZXYtXFx1MDAzZWRyaXZlciB8fCBwY2lfbnVtX3ZmKHBkZXYpKSB7XFxuZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMtMTY5OC1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL3BjaS90c20uYz03OT1zdGF0aWMgdm9pZCBwY2lfdHNtX3dhbGtfZm5zKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9wY2kvdHNtLmMtOTUtXFx0XFx0Lyogd2FsayB2aXJ0dWFsIGZ1bmN0aW9ucyBvZiBlYWNoIHBmICovXFxuZHJpdmVycy9wY2kvdHNtLmM6OTY6XFx0XFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyBwY2lfbnVtX3ZmKHBmKTsgaisrKSB7XFxuZHJpdmVycy9wY2kvdHNtLmMtOTctXFx0XFx0XFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxcbi0tXFxuZHJpdmVycy9wY2kvdHNtLmM9MTE4PXN0YXRpYyB2b2lkIHBjaV90c21fd2Fsa19mbnNfcmV2ZXJzZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvcGNpL3RzbS5jLTEzNS1cXHRcXHQvKiByZXZlcnNlIHdhbGsgdmlydHVhbCBmdW5jdGlvbnMgKi9cXG5kcml2ZXJzL3BjaS90c20uYzoxMzY6XFx0XFx0Zm9yIChpbnQgaiA9IHBjaV9udW1fdmYocGYpIC0gMTsgaiBcXHUwMDNlPSAwOyBqLS0pIHtcXG5kcml2ZXJzL3BjaS90c20uYy0xMzctXFx0XFx0XFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOTozMy4xMDE2OTI3NTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4NjIyMzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gVmlydHVhbCBGdW5jdGlvbiBFbnVtZXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKSBhdmFpbGFibGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgcGNpX251bV92ZmAuIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyB1bHRpbWF0ZWx5IHB1bGxpbmcgdGhlIHZhbHVlIGZyb20gYHBkZXYtXHUwMDNlc3Jpb3YtXHUwMDNlbnVtX1ZGc2AuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIHN0b3JlIHRoYXQgaW5mb3JtYXRpb24gd2hlbiBTUi1JT1YgaXMgYWN0aXZlIG9uIGEgUENJIGRldmljZS5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaG93IGRvIHdlIHRyaWdnZXIgdGhpcyBiZWhhdmlvciBpbiBvdXIgUUVNVSBlbnZpcm9ubWVudCBmb3IgdGVzdGluZz8gVGhhbmtmdWxseSwgUUVNVSBpcyBwcmV0dHkgZ29vZCBhYm91dCBzdXBwb3J0aW5nIFNSLUlPViBlbXVsYXRpb24sIGVzcGVjaWFsbHkgZm9yIGRldmljZXMgbGlrZSB0aGUgYGlnYmAgYW5kIGBudm1lYCBlbXVsYXRlZCBOSUNzLiBXZSBjYW4gZGVmaW5pdGVseSBleHBsb3JlIHRob3NlIGFzIHRlc3QgY2FuZGlkYXRlcy4gQW5kLCBvZiBjb3Vyc2UsIHdlIGhhdmUgZGV2aWNlcyBsaWtlIHZpcnRpbywgd2hpY2ggYXJlIGFsc28gdmlydHVhbCwgYW5kIHRodXMgbW9yZSBkaXJlY3RseSBjb250cm9sbGVkIGJ5IHRoZSBoeXBlcnZpc29yLlxuXG5IbW0sIGxldCBtZSBkb3VibGUtY2hlY2sgaG93IHZpcnRpbyBoYW5kbGVzIFZGIGVudW1lcmF0aW9u4oCmQWgsIHllcywgYHZpcnRpb19kZXZfbnVtX3ZmYCBpcyBzaW1wbHkgcmV0dXJuaW5nIGBkZXZfbnVtX3ZmKHZkZXYtXHUwMDNlZGV2LnBhcmVudClgLiBUaGlzIGNsYXJpZmllcyBpdCBwZXJmZWN0bHk6IHRoZSB2aXJ0aW8gZGV2aWNlIGluaGVyaXRzIHRoZSBWRiBjYXBhYmlsaXR5IGZyb20gaXRzIHBhcmVudCBQQ0kgZGV2aWNlLiBTbywgaWYgdGhlIHBhcmVudCAoZW11bGF0ZWQgUENJIGRldmljZSkgaGFzIFNSLUlPViBlbmFibGVkLCB2aXJ0aW8gZXhwb3NlcyBWRnMgYXMgYSBjaGlsZCBkZXZpY2UuXG5cbk5vdywgYW4gaW50ZXJlc3RpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgaXMgYG5ldGRldnNpbWAuIERvZXMgYG5ldGRldnNpbWAsIGFzIGEgZnVsbHkgc29mdHdhcmUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlLCBleHBvc2UgdmlydHVhbCBmdW5jdGlvbnM/IFRoYXQncyB0aGUgbmV4dCBhdmVudWUgdG8gZXhwbG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MzcuNzg3OTE5OTEyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwMjYyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3Jpb3ZfbnVtdmZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTYwPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBuc2ltX2J1c19kZXZfbnVtdmZzX2F0dHIgPVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo2MTpcXHRfX0FUVFIoc3Jpb3ZfbnVtdmZzLCAwNjY0LCBuc2ltX2J1c19kZXZfbnVtdmZzX3Nob3csXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTYyLVxcdCAgICAgICBuc2ltX2J1c19kZXZfbnVtdmZzX3N0b3JlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MzcuODkxOTU0ODgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTc1ODE0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqU1ItSU9WIEludmVzdGlnYXRpb24qKlxuXG5SaWdodCwgKm5ldGRldnNpbSouLi4gSSByZWNhbGwgdGhhdCBkcml2ZXIgaGF2aW5nIHNvbWUgaW50ZXJlc3RpbmcgcHJvcGVydGllcy4gQWgsIHllcyEgVGhlIGBzcmlvdl9udW12ZnNgIGF0dHJpYnV0ZS4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU1ItSU9WIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZCB3aXRoaW4gdGhhdCBkcml2ZXIuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBNeSBuZXh0IHN0b3AgaXMgZGVmaW5pdGVseSBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jYC4gSSBleHBlY3QgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgc2ltdWxhdGVkIGJ1cyBhbmQsIGNvbnNlcXVlbnRseSwgdGhlIFNSLUlPViBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdmlydHVhbCBmdW5jdGlvbnMgd2lsbCByZXNpZGUuIEnigJlsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGF0dHJpYnV0ZSBpcyBleHBvc2VkLCBzZXQsIGFuZCB1c2VkIHdpdGhpbiB0aGUgc2ltdWxhdGlvbiBjb250ZXh0LiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBmb3JtdWxhdGUgYSBwbGFuIHRvIGRldGVybWluZSBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGF0dHJpYnV0ZXMgd2l0aGluIG5ldGRldnNpbSB3aWxsIGFmZmVjdCB0aGUgcmVzdWx0YW50IGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOTo0MS41ODk1MzkzNTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODUyNjAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudW1fdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM9MzE9bnNpbV9idXNfZGV2X251bXZmc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM0LVxcdHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiA9IHRvX25zaW1fYnVzX2RldihkZXYpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzozNTpcXHR1bnNpZ25lZCBpbnQgbnVtX3ZmcztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtMzYtXFx0aW50IHJldDtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtMzctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjM4OlxcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcXHUwMDI2bnVtX3Zmcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDQtXFx0aWYgKGRldl9nZXRfZHJ2ZGF0YShkZXYpKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0NTpcXHRcXHRyZXQgPSBuc2ltX2Rydl9jb25maWd1cmVfdmZzKG5zaW1fYnVzX2RldiwgbnVtX3Zmcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ2LVxcdGRldmljZV91bmxvY2soZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz01Mj1uc2ltX2J1c19kZXZfbnVtdmZzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTU2LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo1NzpcXHRyZXR1cm4gc3ByaW50ZihidWYsIFxcXCIldVxcXFxuXFxcIiwgbnNpbV9idXNfZGV2LVxcdTAwM2VudW1fdmZzKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNTgtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTQyMz1zdGF0aWMgdm9pZCBuc2ltX2J1c19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQyOS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDMwOnN0YXRpYyBpbnQgbnNpbV9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MzEte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQzMy1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDM0OlxcdHJldHVybiBuc2ltX2J1c19kZXYtXFx1MDAzZW51bV92ZnM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQzNS19XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM9NDM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgbnNpbV9idXMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDQyLVxcdC5yZW1vdmVcXHRcXHQ9IG5zaW1fYnVzX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDQzOlxcdC5udW1fdmZcXHRcXHQ9IG5zaW1fbnVtX3ZmLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00NDQtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz02MD11bnNpZ25lZCBpbnQgbnNpbV9kZXZfZ2V0X3ZmcyhzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTY0LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2NTpcXHRyZXR1cm4gbnNpbV9kZXYtXFx1MDAzZW5zaW1fYnVzX2Rldi1cXHUwMDNlbnVtX3ZmcztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNjYtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTY4PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjY5Om5zaW1fYnVzX2Rldl9zZXRfdmZzKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiwgdW5zaWduZWQgaW50IG51bV92ZnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTcwLXtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNzEtXFx0cnRubF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjcyOlxcdG5zaW1fYnVzX2Rldi1cXHUwMDNlbnVtX3ZmcyA9IG51bV92ZnM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTczLVxcdHJ0bmxfdW5sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTg2MT1pbnQgbnNpbV9kcnZfY29uZmlndXJlX3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4NjI6XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG51bV92ZnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NjMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NjgtXFx0ZGV2bF9sb2NrKGRldmxpbmspO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODY5OlxcdGlmIChuc2ltX2J1c19kZXYtXFx1MDAzZW51bV92ZnMgPT0gbnVtX3ZmcylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3MC1cXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODcxOlxcdGlmIChuc2ltX2J1c19kZXYtXFx1MDAzZW51bV92ZnMgXFx1MDAyNlxcdTAwMjYgbnVtX3Zmcykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODcyLVxcdFxcdHJldCA9IC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODc0LVxcdH1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg3NTpcXHRpZiAobnNpbV9idXNfZGV2LVxcdTAwM2VtYXhfdmZzIFxcdTAwM2MgbnVtX3Zmcykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODc2LVxcdFxcdHJldCA9IC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3OS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg4MDpcXHRuc2ltX2J1c19kZXZfc2V0X3Zmcyhuc2ltX2J1c19kZXYsIG51bV92ZnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODgxLVxcdGlmIChuc2ltX2Vzd19tb2RlX2lzX3N3aXRjaGRldihuc2ltX2RldikpIHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg4MjpcXHRcXHRpZiAobnVtX3Zmcykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODgzLVxcdFxcdFxcdHJldCA9IG5zaW1fZXN3X3N3aXRjaGRldl9lbmFibGUobnNpbV9kZXYsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTM5OT1pbnQgbnNpbV9kcnZfY29uZmlndXJlX3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQwMDpcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3Zmcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NzU9c3RydWN0IG5zaW1fYnVzX2RldiB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDgzLVxcdHVuc2lnbmVkIGludCBtYXhfdmZzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0ODQ6XFx0dW5zaWduZWQgaW50IG51bV92ZnM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4NS1cXHRib29sIGluaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjQxLjcwODA3NjYyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjM4NzUyODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGRldnNpbSBWRiBDcmVhdGlvbiBhbmQgdGhlIFJlbGF0ZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBuZXRkZXZzaW1gIHByb3ZpZGVzIGEgcmVhbGx5IGNvbnZlbmllbnQgd2F5IHRvIHNwaW4gdXAgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykhIFRoYXQncyBleGNlbGxlbnQuIEkgY2FuIGp1c3Qgd3JpdGUgdG8gYC9zeXMvYnVzL25ldGRldnNpbS9kZXZpY2VzL25ldGRldnNpbVgvc3Jpb3ZfbnVtdmZzYCBhbmQgaW5zdGFudGlhdGUgdGhlbS4gUGVyZmVjdCBmb3IgcXVpY2sgdGVzdGluZy5cblxuVGhlbiwgdGhlIGFwcHJvYWNoIGlzIHRvIGhpdCB0aGUgc3lzdGVtIHdpdGggYSBuZXRsaW5rIGBSVE1fR0VUTElOS2AgdG8gdHJpZ2dlciBgcnRubF9maWxsX3ZmYC4gVGhpcyBzaG91bGQgYmUgZWFzaWx5IGFjaGlldmFibGUgYW5kIHRlc3RhYmxlIHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcsIHdoaWNoIGlzIGZhbnRhc3RpYyBmb3IgaXRlcmF0aW5nIHF1aWNrbHkuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGF0IGBydG5sX2ZpbGxfdmZgIGZ1bmN0aW9uLi4uXG5gYGBjXG5cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV92ZnM7IGkrKykge1xuXHRcdHVuc2lnbmVkIGNoYXIgKm1hcmsgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XG5cblx0XHRpZiAocnRubF9maWxsX3ZmaW5mbyhza2IsIGRldiwgaSwgZXh0X2ZpbHRlcl9tYXNrKSkge1xuXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcblx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG5cdFx0fVxuXG5cdFx0LyogQW4gYXR0cmlidXRlIGxlbmd0aCBpcyBhIHUxNiwgc28gdGhlIG5lc3QgY2Fubm90IGRlc2NyaWJlXG5cdFx0ICogbW9yZSB0aGFuIFUxNl9NQVggYnl0ZXMuIERyb3AgdGhlIFZGIHRoYXQgd291bGQgb3ZlcmZsb3cgaXRcblx0XHQgKiBhbmQgc3RvcDogYSB0cnVuY2F0ZWQgbGlzdCBrZWVwcyB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZVxuXHRcdCAqIHBhcnNhYmxlLCB3aGVyZWFzIGEgd3JhcHBlZCBuZXN0IGxlbmd0aCBkb2VzIG5vdC5cblx0XHQgKi9cblx0XHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKil2ZmluZm8gXHUwMDNlIFUxNl9NQVgpIHtcblx0XHRcdG5sbXNnX3RyaW0oc2tiLCBtYXJrKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuYGBgXG5BaCwgc28gdGhlIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWUgd2l0aCB0aGUgbmV0bGluayBhdHRyaWJ1dGUgbGVuZ3RoLCB3aGljaCBpcyBhIGB1MTZgLiBJdCdzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoaXMgcHJldmVudHMgYSBuYXN0eSBidWcgd2hlcmUgdGhlIGB2ZmluZm9gIG5lc3QgbGVuZ3RoIHdyYXBzIGFyb3VuZC4gUHJldmVudGluZyB0aGUgY3Jhc2ggZHVlIHRvIHRoZSBvdmVyZmxvdyBpcyBnb29kLlxuXG5BcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIGBDT05GSUdfTkVUREVWU0lNYCBpcyB0aGUga2V5IGZvciB0ZXN0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgb2J2aW91c2x5LiBJZiBJIHdhbnRlZCB0byBnZXQgZmFuY3kgYW5kIGluY29ycG9yYXRlIHJlYWwgb3IgZW11bGF0ZWQgUENJIGRldmljZXMgaW50byB0aGUgdGVzdHMsIGBDT05GSUdfUENJX0lPVmAgKm1pZ2h0KiBiZSByZWxldmFudCwgYnV0IGBuZXRkZXZzaW1gIGl0c2VsZiBkb2Vzbid0IGRlcGVuZCBvbiBpdCwgc28gaXQncyBub3QgYSBoYXJkIHJlcXVpcmVtZW50LiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0ZGV2c2ltYCBLY29uZmlnIGFuZCBjb25maXJtIGFsbCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOTo0OC45NDY4MzM3NDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDQyMjUwMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVERFVlNJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6NDkuMDQ3MjczMzI5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODk5NzE3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEaXJlY3RseSBpbnRvIHRoZSBLY29uZmlnKipcblxuQWxyaWdodCwgaW5zdGVhZCBvZiBndWVzc2luZyBvciByZWx5aW5nIG9uIGluZGlyZWN0IHBhdGhzLCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IGJlIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9LY29uZmlnYC4gSXQncyB0aGUgbW9zdCBkZWZpbml0aXZlIHBsYWNlIHRvIGdldCB0aGUgcmVhbCBzdG9yeS4gQW55IHF1ZXN0aW9ucyBhYm91dCB0aGUgbmV0ZGV2c2ltIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgYmUgYW5zd2VyZWQgaGVyZSwgZmlyc3QuIFRoaXMgS2NvbmZpZyBmaWxlICpoYXMqIHRvIGhvbGQgdGhlIG1hc3RlciBkZWZpbml0aW9ucy4gTGV0J3Mgc2VlIHdoYXTigJlzIGRlZmluZWQsIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGxvb2sgbGlrZS4gV2UgY2FuIGxpa2VseSBkZWR1Y2UgYSBncmVhdCBkZWFsIGFib3V0IHRoZSBiZWhhdmlvciBhbmQgcG9zc2libGUgaXNzdWVzIGZyb20gYSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiB0aGF0IG9uZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjUyLjMzNzI1MDE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjU5LCJFcnJvciI6InRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZpbGUgZG9lcyBub3QgZXhpc3RcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6NTIuMzM3MzQ3OTk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjQxODI2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTGFieXJpbnRoIG9mIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBiYWNrIGludG8gdGhpcyBwcm9qZWN0LCBhbmQgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgYSBzaW1wbGUgb25lLCB5ZXQgY3J1Y2lhbDogKndoZXJlKiBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciBgbmV0ZGV2c2ltYD8gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBtYXAsIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhbmQgY29uZmlndXJpbmcgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncywgdHJhY2sgZG93biB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGltZSB0byBiZWdpbiB0aGUgaHVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNDAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjU1LjE2MTUzNjE3M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0NTQzNDQzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUREVWU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOTo1OC4xMDY5ODg0NzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5OTgwMDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gc2l0dWF0aW9uLiBNeSBpbnR1aXRpb24gc3VnZ2VzdHMgdGhlIGlzc3VlIG1pZ2h0IGJlIHJvb3RlZCBpbiBob3cgdGhlIGRyaXZlcnMgYXJlIGJ1aWx0IG9yIGVuYWJsZWQuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSdtIHNwZWNpZmljYWxseSB0aGlua2luZyB0aGF0IGFyb3VuZCBsaW5lIDYwNCBtaWdodCBjb250YWluIHRoZSByZWxldmFudCBsb2dpYyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MDAuODA2NzkzNjYyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXG4gNjAxOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvS2NvbmZpZ1xcXCJcXG4gNjAyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcXFwiXFxuIDYwMzpcXHRcXG4gNjA0OlxcdGNvbmZpZyBORVRERVZTSU1cXG4gNjA1OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuIDYwNjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDYwNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNjA4OlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG4gNjA5OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cXG4gNjEwOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiA2MTE6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA2MTI6XFx0XFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4gNjEzOlxcdFxcdGhlbHBcXG4gNjE0OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIGFuZCBzb2Z0d2FyZSBtb2RlbCB0aGF0IGNhblxcbiA2MTU6XFx0XFx0ICBiZSB1c2VkIHRvIHRlc3QgdmFyaW91cyBjb250cm9sIHBhdGggbmV0d29ya2luZyBBUElzLCBlc3BlY2lhbGx5XFxuIDYxNjpcXHRcXHQgIEhXLW9mZmxvYWQgcmVsYXRlZC5cXG4gNjE3OlxcdFxcbiA2MTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDYxOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MDAuODA2OTE3NTQyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Nzk1MTAyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBOZXR3b3JraW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gVGhhdCdzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayDigJMgc3VwZXIgY29yZSBzdHVmZi4gSSBhbHJlYWR5IGtub3cgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGlsZWQgaWYgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGFsd2F5cyB0aGUgY2FzZS5cblxuVGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkLCBgcnRubF9maWxsX3ZmYCwgaXMgY2FsbGVkIGZyb20gYHJ0bmxfZmlsbF9pZmluZm9gLiBUbyBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLCBJJ2xsIG5lZWQgYSBkZXZpY2UgdGhhdCBoYXMgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykuIExldCBtZSBzZWXigKYgeWVwLCBgTkVUREVWU0lNYCBsb29rcyBsaWtlIHRoZSBwZXJmZWN0IGNhbmRpZGF0ZSBmb3IgdGhhdC4gSSBkb24ndCB0aGluayBJIG5lZWQgdG8gd29ycnkgYWJvdXQgYW55IG90aGVyIGNvbmZpZ3MgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB3aGF0IHRoZSBrZXkgc3ltYm9scyBhcmUgaGVyZS4gT2J2aW91c2x5LCBgcnRubF9maWxsX3ZmYCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIHNvIHRoYXQncyBhIHByaW1lIHN1c3BlY3QuIEl0J3MgY2FsbGVkIGJ5IGBydG5sX2ZpbGxfaWZpbmZvYCwgd2hpY2ggaXRzZWxmIGlzIGludm9rZWQgYnkgYHJ0bmxfZHVtcF9pZmluZm9gIGFuZCBgcnRubF9nZXRsaW5rYCwgc28gYHJ0bmxfZmlsbF9pZmluZm9gIGxvb2tzIGxpa2UgYW5vdGhlciBpbXBvcnRhbnQgc3ltYm9sIHRvIGtlZXAgYW4gZXllIG9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIHdoYXQgYHJ0bmxfZmlsbF92ZmluZm9gIGlzIGJlaW5nIGNhbGxlZCBmb3IgdG9vLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIFllcCwgYHJ0bmxfZmlsbF92ZmAgaXMgYHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50YC4gVGhlIGBub2lubGluZV9mb3Jfc3RhY2tgIGF0dHJpYnV0ZSBpcyBpbXBvcnRhbnQuIFRoYXQgbWVhbnMgaXQgd29uJ3QgYmUgaW5saW5lZCwgc28gaXQnbGwgaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MsIHdoaWNoIGlzIGdvb2QgZm9yIGFuYWx5c2lzLiBUaGF0IG1ha2VzIGBydG5sX2ZpbGxfdmZgIGEgZ3JlYXQgZm9jdXMgc3ltYm9sLiBBbmQgYHJ0bmxfZmlsbF9pZmluZm9gIGlzIGFsc28gc3RhdGljLCBidXQgbm90IGlubGluZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgaXQncyBhIHJlbGF0aXZlbHkgbGFyZ2UgZnVuY3Rpb24uIEFscmlnaHQsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gZm9yIGBydG5sX2ZpbGxfaWZpbmZvYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTo0MDowNy41ODY0MzExMDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjAxMjcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5sX2ZpbGxfaWZpbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTIwNDk9c3RhdGljIGludCBydG5sX2ZpbGxfZHBsbF9waW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNzAtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjA3MTpzdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDcyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpzcmNfbmV0LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjUwNT1zdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU4MC1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNTgxOlxcdFxcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8oc2tiLCBkZXYsIG5ldCwgUlRNX05FV0xJTkssXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU4Mi1cXHRcXHRcXHRcXHQgICAgICAgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00MjMyPXN0YXRpYyBpbnQgcnRubF9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDMwNC1cXHRpZiAobnNrYilcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MzA1OlxcdFxcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8obnNrYiwgZGV2LCBuZXQsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDMwNi1cXHRcXHRcXHRcXHQgICAgICAgUlRNX05FV0xJTkssIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NTI1PXN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU0NC1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTQ1OlxcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8oc2tiLCBkZXYsIGRldl9uZXQoZGV2KSxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTQ2LVxcdFxcdFxcdCAgICAgICB0eXBlLCBwb3J0aWQsIHNlcSwgY2hhbmdlLCAwLCAwLCBldmVudCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MDcuNzA4NDU0MDE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTcxNzk3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFZ1bG5lcmFiaWxpdHkgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdywgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIG9uIGEgbmV0d29yayBkZXZpY2UuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBoaXRzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBhbmQgdGhlIHRyaWdnZXIgaW52b2x2ZXMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBmdXp6IHRoaXMuXG5cbkZpcnN0LCBJIGlkZW50aWZpZWQgc29tZSBrZXkgc3ltYm9sczogYHJ0bmxfZmlsbF9pZmluZm9gIChzdGF0aWMpLCBgcnRubF9nZXRsaW5rYCAodGhlIG5ldGxpbmsgaGFuZGxlciBmb3IgYFJUTV9HRVRMSU5LYCksIGFuZCBgcnRubF9kdW1wX2lmaW5mb2AgKHRoZSBuZXRsaW5rIGR1bXAgaGFuZGxlciBmb3IgYFJUTV9HRVRMSU5LYCkuIFRob3NlIHR3byBuZXRsaW5rIGhhbmRsZXJzIGFyZSBwcm9iYWJseSBnb2luZyB0byBiZSBnb29kIHBvaW50cyB0byBmb2N1cyBvbi4gQnV0IHdhaXQsIGBydG5sX2ZpbGxfdmZgIGlzIHRoZSBhY3R1YWwgZnVuY3Rpb24gdGhhdCBnb3QgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLCBzbyAqdGhhdCdzKiB0aGUgcmVhbCB0YXJnZXQuIEl0J3Mgc3RhdGljLCBidXQgdGhhdCdzIGZpbmUg4oCTIHdlIGNhbiB1c2UgYG5vaW5saW5lX2Zvcl9zdGFja2AgdG8gcHJldmVudCBpbmxpbmluZy4gVGhpcyBtZWFucyBgcnRubF9maWxsX3ZmYCBpcyBwcm9iYWJseSBteSBiZXN0IGZvY3VzIHN5bWJvbC5cblxuT2theSwgbGV0J3Mgc3VtbWFyaXplIHdoYXQgd2Uga25vdyBzbyBmYXI6XG5cbiogICAqKldvcnRoRnV6emluZzogVHJ1ZSoqIChEZWZpbml0ZWx5LCBjb3JlIG5ldHdvcmtpbmcgd2l0aCBhIHBvdGVudGlhbCBvdmVyZmxvdyBpcyBhbHdheXMgd29ydGggY2hlY2tpbmcuKVxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBmaXhlcyBhIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB0aGF0J3MgdHJpZ2dlcmVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBoYXMgbWFueSBWaXJ0dWFsIEZ1bmN0aW9ucy4gSXQncyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCdzIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYHJ0bmxfZmlsbF92ZmAsIGBydG5sX2dldGxpbmtgLCBgcnRubF9kdW1wX2lmaW5mb2AgKHdpdGggYHJ0bmxfZmlsbF92ZmAgYmVpbmcgdGhlIG1vc3QgaW1wb3J0YW50KS5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE5FVERFVlNJTWAgKEJlY2F1c2UgdGhhdCdzIGFuIG9idmlvdXMgd2F5IHRvIGNyZWF0ZSBtYW55IFZGcykuXG5cbkJ1dCBob2xkIG9uLiBBcmUgdGhlcmUgb3RoZXIgd2F5cyB0byBjcmVhdGUgVkZzIGJlc2lkZXMgdXNpbmcgYE5FVERFVlNJTWA/IFllcywgb2YgY291cnNlLCB0aGUgc3RhbmRhcmQgd2F5IGlzIHRocm91Z2ggYENPTkZJR19QQ0lfSU9WYCBmb3IgUENJIGRldmljZXMgd2l0aCBTUi1JT1Ygc3VwcG9ydC4gUUVNVSBzdXBwb3J0cyBTUi1JT1YgZm9yIGBpZ2JgIGFuZCBgbnZtZWAsIHNvIHRoaXMgaXMgYSBncmVhdCBhZGRpdGlvbi5cblxuSSdsbCBjaGVjayBgQ09ORklHX1BDSV9JT1ZgIGluIEtjb25maWcgdG8gbWFrZSBzdXJlIGl0J3MgdmFsaWQuIFRoaXMgYWRkcyBhbiBpbXBvcnRhbnQgY29uZmlnIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MTQuNzA1NjM3OTMxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU2NzA0OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfSU9WXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE1ND1jb25maWcgUENJX0JSSURHRV9FTVVMXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE1Ni1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE1Nzpjb25maWcgUENJX0lPVlxcbmRyaXZlcnMvcGNpL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIlBDSSBJT1Ygc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MTcuNjYyMzUzMTY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2Mzc4OTM5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZpcnR1YWwgRnVuY3Rpb24gUmVwb3J0aW5nIGluIE5ldGxpbmsqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFuZCBOZXRsaW5rLiBGaXJzdCB0aGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIGBQQ0lfSU9WYCBpcyBhIGJvb2xlYW4sIHNvIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEknbGwgYWRkIGJvdGggYFBDSV9JT1ZgIGFuZCBgTkVUREVWU0lNYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgdG8gYmUgc3VyZS5cblxuSSdtIGNoZWNraW5nIHRoZSBgcnRubF9maWxsX3ZmYCBmdW5jdGlvbiBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBJdCdzIG1hcmtlZCBhcyBgbm9pbmxpbmVfZm9yX3N0YWNrYC4gVGhlIGZ1bmN0aW9ucyBgcnRubF9nZXRsaW5rYCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gIGFyZSBzdGF0aWMsIGJ1dCByZWdpc3RlcmVkIGFzIG5ldGxpbmsgaGFuZGxlcnMsIHNvIHRoZXkncmUgZGVmaW5pdGVseSBub3QgaW5saW5lZCBlaXRoZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFZGIGluZm9ybWF0aW9uIGlzIHBvcHVsYXRlZCBhbmQgdHJhbnNtaXR0ZWQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gYENPTkZJR19ORVRgIGlzIGFuIG9idmlvdXMgYmFzZS4gYENPTkZJR19ORVRERVZTSU1gIGlzIHRyaXN0YXRlLCBhbmQgYENPTkZJR19QQ0lfSU9WYCBpcyBhIGJvb2xlYW4uIEknbSB3b25kZXJpbmcgaWYgYW55IG90aGVyIGRyaXZlcnMsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgc3VwcG9ydCBWRnMuIEknbSB0aGlua2luZyBhYm91dCBgdmlydGlvX25ldGAsIGJ1dCB0aGVuIEkgcmVjYWxsIHRoYXQgYHZpcnRpb19uZXRgIGl0c2VsZiBkb2Vzbid0IGhhdmUgVkZzLiBJdCBhY3RzIGFzIGEgVkYgb2YgYSB2aXJ0aW8gUENJIGRldmljZS4gVGhlIGZ1bmN0aW9uIGB2aXJ0aW9fZGV2X251bV92ZmAgcmV0cmlldmVzIHRoZSBudW1iZXIgb2YgVkZzIGZyb20gdGhlIHBhcmVudCBQQ0kgZGV2aWNlLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBCdXQgYG5ldGRldnNpbWAgaXMgdGhlIG1vc3QgZGlyZWN0IG1ldGhvZCB0byB0ZXN0IHRoaXMgVkYgaGFuZGxpbmcuXG5cbkJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gVGhpcyBjb2RlIGluY2x1ZGVzIGEgbmV3IGNoZWNrIHdpdGhpbiB0aGUgVkYgbG9vcDpcbmBgYGNcbmlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKXZmaW5mbyBcdTAwM2UgVTE2X01BWCkge1xuICAgIG5sbXNnX3RyaW0oc2tiLCBtYXJrKTtcbiAgICBicmVhaztcbn1cbmBgYFxuVGhpcyBpcyBhIGNsZWFuLCBmdW5jdGlvbmFsIGNoYW5nZSBhaW1lZCBhdCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIG1hbGZvcm1lZCBOZXRsaW5rIG1lc3NhZ2VzIGJ5IGNoZWNraW5nIHRoZSBsZW5ndGggb2YgdGhlIGF0dHJpYnV0ZSBuZXN0LiBUaGlzIGFsc28gcHJldmVudHMgYSB0cnVuY2F0ZWQgbGlzdCBieSByZW1vdmluZyB0aGUgaXRlbSBjYXVzaW5nIHRoZSBpc3N1ZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHJvYnVzdG5lc3MuXG5cbk15IG1haW4gZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgcnRubF9maWxsX3ZmYCwgYHJ0bmxfZ2V0bGlua2AsIGFuZCBgcnRubF9kdW1wX2lmaW5mb2AuXG5cbkFuZCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZTogYE5FVERFVlNJTWAgYW5kIGBQQ0lfSU9WYC5cblxuSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIwMCwiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MjcuMzAwMjUxNjg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwOTg1MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2ZpbGxfdmZcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9maWxsX3ZmXCIsXG4gICAgXCJydG5sX2dldGxpbmtcIixcbiAgICBcInJ0bmxfZHVtcF9pZmluZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBuZXRsaW5rIGF0dHJpYnV0ZSBsZW5ndGggb3ZlcmZsb3cgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGhhcyBhIGxhcmdlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdXNpbmcgbmV0ZGV2c2ltIHRvIGNyZWF0ZSBtYW55IFZGcyBhbmQgcXVlcnlpbmcgdGhlbSB2aWEgUlRNX0dFVExJTkspLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow8crnf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 15:24:15 +0000 UTC FinishedAt: 2026-07-26 15:40:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PCI_IOV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PCI_IOV" ], "series_id": "3cf09ad5-0299-4aef-a514-6c0bfd30e47a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtnl_fill_vf", "rtnl_getlink", "rtnl_dump_ifinfo" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9maWxsX3ZmJiMzNDssCiAgICAmIzM0O3J0bmxfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfaWZpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjODNmMmVkZmZiZmQyZmUyYzUyNmFmOTM0MzE0MzBlMzVmODEwMTc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMTU6Mzk6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggMTJhYTNhYTE2ODhiMTMuLmJkMWQ2NWRjZjQyZmQ1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtMTY4NywxMCAmIzQzOzE2ODcsMjIgQEAgc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgY2hhciAqbWFyayA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTtcbiYjNDM7XG4gXHRcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XG4gXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbiBcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogQW4gYXR0cmlidXRlIGxlbmd0aCBpcyBhIHUxNiwgc28gdGhlIG5lc3QgY2Fubm90IGRlc2NyaWJlXG4mIzQzO1x0XHQgKiBtb3JlIHRoYW4gVTE2X01BWCBieXRlcy4gRHJvcCB0aGUgVkYgdGhhdCB3b3VsZCBvdmVyZmxvdyBpdFxuJiM0MztcdFx0ICogYW5kIHN0b3A6IGEgdHJ1bmNhdGVkIGxpc3Qga2VlcHMgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2VcbiYjNDM7XHRcdCAqIHBhcnNhYmxlLCB3aGVyZWFzIGEgd3JhcHBlZCBuZXN0IGxlbmd0aCBkb2VzIG5vdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopdmZpbmZvIFx1MDAzZSBVMTZfTUFYKSB7XG4mIzQzO1x0XHRcdG5sbXNnX3RyaW0oc2tiLCBtYXJrKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRubGFfbmVzdF9lbmQoc2tiLCB2ZmluZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZmlsbF92ZiYjMzQ7LAogICAgJiMzNDtydG5sX2dldGxpbmsmIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX2lmaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBuZXRsaW5rIGF0dHJpYnV0ZSBsZW5ndGggb3ZlcmZsb3cgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGhhcyBhIGxhcmdlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdXNpbmcgbmV0ZGV2c2ltIHRvIGNyZWF0ZSBtYW55IFZGcyBhbmQgcXVlcnlpbmcgdGhlbSB2aWEgUlRNX0dFVExJTkspLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzgzZjJlZGZmYmZkMmZlMmM1MjZhZjkzNDMxNDMwZTM1ZjgxMDE3NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDE1OjM5OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCAxMmFhM2FhMTY4OGIxMy4uYmQxZDY1ZGNmNDJmZDUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xNjg3LDEwICYjNDM7MTY4NywyMiBAQCBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fdmZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdW5zaWduZWQgY2hhciAqbWFyayA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKJiM0MzsKIAkJaWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHsKIAkJCW5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7CiAJCQlyZXR1cm4gLUVNU0dTSVpFOwogCQl9CiYjNDM7CiYjNDM7CQkvKiBBbiBhdHRyaWJ1dGUgbGVuZ3RoIGlzIGEgdTE2LCBzbyB0aGUgbmVzdCBjYW5ub3QgZGVzY3JpYmUKJiM0MzsJCSAqIG1vcmUgdGhhbiBVMTZfTUFYIGJ5dGVzLiBEcm9wIHRoZSBWRiB0aGF0IHdvdWxkIG92ZXJmbG93IGl0CiYjNDM7CQkgKiBhbmQgc3RvcDogYSB0cnVuY2F0ZWQgbGlzdCBrZWVwcyB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZQomIzQzOwkJICogcGFyc2FibGUsIHdoZXJlYXMgYSB3cmFwcGVkIG5lc3QgbGVuZ3RoIGRvZXMgbm90LgomIzQzOwkJICovCiYjNDM7CQlpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKil2ZmluZm8gJmd0OyBVMTZfTUFYKSB7CiYjNDM7CQkJbmxtc2dfdHJpbShza2IsIG1hcmspOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCX0KIAogCW5sYV9uZXN0X2VuZChza2IsIHZmaW5mbyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBydG5ldGxpbmsuYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBydG5sX2ZpbGxfdmYoKWAgZnVuY3Rpb24uIFRoZSBnaXN0IGlzLCBpdCYjMzk7cyBhZGRpbmcgYSBzYWZlZ3VhcmQgYWdhaW5zdCBzb21lIGtpbmQgb2YgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aXRoaW4gdGhlIGB2ZmluZm9gIG5lc3QuIFRoZXkmIzM5O3JlIGRvaW5nIHRoaXMgYnkgY2hlY2tpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVudCB0YWlsIG9mIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIGB2ZmluZm9gLiBJZiB0aGlzIGRpZmZlcmVuY2UsIHdoaWNoIHJlcHJlc2VudHMgdGhlIHVzZWQgc3BhY2UsIGV4Y2VlZHMgYFUxNl9NQVhgLCBpdCB0cmltcyB0aGUgc29ja2V0IGJ1ZmZlciBhbmQgYnJlYWtzIHRoZSBsb29wLiBTb3VuZHMgbGlrZSBhIGdvb2QgZGVmZW5zZSBhZ2FpbnN0IGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIEl0JiMzOTtzIHRoZSByaWdodCBraW5kIG9mIGRlZmVuc2l2ZSBjb2RpbmcuIE5vdyBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJ0bmxfZmlsbF92ZmAgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX2ZpbGxfdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0xNDk3PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjAtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNTIxOnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjItXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NjctXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNjY4OnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTY2OS1cdFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjkxLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTY5MjpcdFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2OTMtXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMDcxPXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMTg3Olx0aWYgKHJ0bmxfZmlsbF92Zihza2IsIGRldiwgZXh0X2ZpbHRlcl9tYXNrKSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODgtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIE5ldGxpbmsgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhpcyBgcnRubF9maWxsX3ZmYCBmdW5jdGlvbi4gSXQmIzM5O3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gYHJ0bmxfZmlsbF9pZmluZm9gLCB3aGljaCBJIGtub3cgaXMgYSBjb3JlIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBuZXRsaW5rIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gbmV0d29yayBpbnRlcmZhY2VzLiBUaGF0IHRlbGxzIG1lIHRoaXMgYHJ0bmxfZmlsbF92ZmAgY29kZSBwYXRoIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkIOKAkyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBpbnRlcmZhY2UgaW5mb3JtYXRpb24gZ2F0aGVyaW5nLiBJIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiBmb2N1c2VzIG9uIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIChWRikgYXNwZWN0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdmlydHVhbGl6YXRpb24uCgpOb3csIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiByZWxhdGVkIHNwZWNpZmljYWxseSB0byBWRnMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHJpZXZlcyBhbmQgcmVwb3J0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIGV4dHJhY3RpbmcuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHJ0bmxfZmlsbF92ZmAgaXRzZWxmIGFuZCBzZWUgZXhhY3RseSB3aGF0IGluZm9ybWF0aW9uIGl0JiMzOTtzIHBhY2tpbmcgaW50byB0aG9zZSBuZXRsaW5rIG1lc3NhZ2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX2ZpbGxfdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0xNDk3PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjAtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNTIxOnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjItXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NjctXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNjY4OnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTY2OS1cdFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjkxLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTY5MjpcdFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2OTMtXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMDcxPXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMTg3Olx0aWYgKHJ0bmxfZmlsbF92Zihza2IsIGRldiwgZXh0X2ZpbHRlcl9tYXNrKSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODgtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gYHJ0bmxfZmlsbF92ZmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBndXRzIG9mIGBydG5sX2ZpbGxfdmZgIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIChWRikgaW5mb3JtYXRpb24gaXMgYmVpbmcgaGFuZGxlZCB3aXRoaW4gdGhlIFJUTmV0bGluayBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIHNlZSB0aGUgdHlwaWNhbCBSVE5ldGxpbmsgYXR0cmlidXRlIHBvcHVsYXRpb24gcHJvY2VzcyBoZXJlLiBJdCYjMzk7bGwgcHJvYmFibHkgaW52b2x2ZSBhbGxvY2F0aW5nIGEgc2tiLCBwb3B1bGF0aW5nIGl0IHdpdGggdGhlIFZGLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGluZm9ybWF0aW9uLCBhbmQgdGhlbiBhdHRhY2hpbmcgaXQgdG8gdGhlIG5ldGxpbmsgbWVzc2FnZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljcyBvZiB3aGF0IGRhdGEgaXMgYmVpbmcgcmV0cmlldmVkIHRvIGZpbGwgdGhlIG1lc3NhZ2UuIElzIHRoaXMgYWxsIHRoZSBWRiYjMzk7cyBjb25maWd1cmF0aW9uIG9yIGEgc3Vic2V0PyBBcmUgdGhlcmUgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIG9yIHRyaWNrcyBiZWluZyB1c2VkPyBBcmUgd2UgdGFsa2luZyBhYm91dCBwZXItVkYgY29uZmlndXJhdGlvbiBvciBpcyB0aGlzIG1vcmUgZ2VuZXJhbCwgbWF5YmUgZGVzY3JpYmluZyB0aGUgVkYmIzM5O3MgcmVsYXRpb25zaGlwIHRvIHRoZSBQRj8gSSBhbHNvIHdhbnQgdG8gc2VlIGhvdyBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZC4gQXJlIHRoZXJlIGNsZWFyIGNoZWNrcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXM/IEhvdyBhcmUgZXJyb3JzIGNvbW11bmljYXRlZCBiYWNrIHRvIHRoZSByZXF1ZXN0aW5nIHByb2Nlc3M/IEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIGl0IGVmZmljaWVudGx5IGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBhIFZGIG1pZ2h0IG5vdCBiZSBwcmVzZW50IG9yIG5vdCBjb25maWd1cmVkLiBIb3BlZnVsbHksIGl0IGlzIHJvYnVzdCBhbmQgY2xlYW4uIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGlzIGRvaW5nIHdoYXQgSSBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY2ODpcdHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTY2OTpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuMTY3MDpcdFx0XHRcdFx0XHQgICB1MzIgZXh0X2ZpbHRlcl9tYXNrKVxuMTY3MTpcdHtcbjE2NzI6XHRcdHN0cnVjdCBubGF0dHIgKnZmaW5mbztcbjE2NzM6XHRcdGludCBpLCBudW1fdmZzO1xuMTY3NDpcdFxuMTY3NTpcdFx0aWYgKCFkZXYtXHUwMDNlZGV2LnBhcmVudCB8fCAoKGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1ZGKSA9PSAwKSlcbjE2NzY6XHRcdFx0cmV0dXJuIDA7XG4xNjc3Olx0XG4xNjc4Olx0XHRudW1fdmZzID0gZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG4xNjc5Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9WRiwgbnVtX3ZmcykpXG4xNjgwOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4xNjgxOlx0XG4xNjgyOlx0XHRpZiAoIWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19nZXRfdmZfY29uZmlnKVxuMTY4MzpcdFx0XHRyZXR1cm4gMDtcbjE2ODQ6XHRcbjE2ODU6XHRcdHZmaW5mbyA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElGTEFfVkZJTkZPX0xJU1QpO1xuMTY4NjpcdFx0aWYgKCF2ZmluZm8pXG4xNjg3Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4xNjg4Olx0XG4xNjg5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpJiM0MzsmIzQzOykge1xuMTY5MDpcdFx0XHR1bnNpZ25lZCBjaGFyICptYXJrID0gc2tiX3RhaWxfcG9pbnRlcihza2IpO1xuMTY5MTpcdFxuMTY5MjpcdFx0XHRpZiAocnRubF9maWxsX3ZmaW5mbyhza2IsIGRldiwgaSwgZXh0X2ZpbHRlcl9tYXNrKSkge1xuMTY5MzpcdFx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7XG4xNjk0Olx0XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjE2OTU6XHRcdFx0fVxuMTY5NjpcdFxuMTY5NzpcdFx0XHQvKiBBbiBhdHRyaWJ1dGUgbGVuZ3RoIGlzIGEgdTE2LCBzbyB0aGUgbmVzdCBjYW5ub3QgZGVzY3JpYmVcbjE2OTg6XHRcdFx0ICogbW9yZSB0aGFuIFUxNl9NQVggYnl0ZXMuIERyb3AgdGhlIFZGIHRoYXQgd291bGQgb3ZlcmZsb3cgaXRcbjE2OTk6XHRcdFx0ICogYW5kIHN0b3A6IGEgdHJ1bmNhdGVkIGxpc3Qga2VlcHMgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2VcbjE3MDA6XHRcdFx0ICogcGFyc2FibGUsIHdoZXJlYXMgYSB3cmFwcGVkIG5lc3QgbGVuZ3RoIGRvZXMgbm90LlxuMTcwMTpcdFx0XHQgKi9cbjE3MDI6XHRcdFx0aWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopdmZpbmZvIFx1MDAzZSBVMTZfTUFYKSB7XG4xNzAzOlx0XHRcdFx0bmxtc2dfdHJpbShza2IsIG1hcmspO1xuMTcwNDpcdFx0XHRcdGJyZWFrO1xuMTcwNTpcdFx0XHR9XG4xNzA2Olx0XHR9XG4xNzA3Olx0XG4xNzA4Olx0XHRubGFfbmVzdF9lbmQoc2tiLCB2ZmluZm8pO1xuMTcwOTpcdFx0cmV0dXJuIDA7XG4xNzEwOlx0fVxuMTcxMTpcdFxuMTcxMjpcdHN0YXRpYyBpbnQgcnRubF9maWxsX2xpbmtfaWZtYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE3MTM6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNzE0Olx0e1xuMTcxNTpcdFx0c3RydWN0IHJ0bmxfbGlua19pZm1hcCBtYXA7XG4xNzE2Olx0XG4xNzE3Olx0XHRtZW1zZXQoXHUwMDI2bWFwLCAwLCBzaXplb2YobWFwKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgyOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZpcnR1YWwgRnVuY3Rpb24gTmV0bGluayBNZXNzYWdlIENvbnN0cnVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgaXNzdWUsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjdWxwcml0IGlzIHJlc2lkaW5nIHdpdGhpbiBgcnRubF9maWxsX3ZmYC4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHRoZSBkZXRhaWxzIGFib3V0IFZpcnR1YWwgRnVuY3Rpb25zIGFyZSBnZXR0aW5nIGFkZGVkIHRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCBpcyB0cmlnZ2VyZWQgYnkgY29tbWFuZHMgbGlrZSBgaXAgbGluayBzaG93YC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGJlIGEgcHJvYmxlbSBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1hbnkgVmlydHVhbCBGdW5jdGlvbnMuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IG5ldGxpbmsgbWVzc2FnZXMgYXJlIGNvbnN0cnVjdGVkLiBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhbiBpbnRlcm5hbCBidWZmZXIgb3ZlcmZsb3cgb3Igc29tZXRoaW5nIHNpbWlsYXIgaGFwcGVuaW5nIHdoZW4gd2UgaGF2ZSBhIGhpZ2ggbnVtYmVyIG9mIFZGcy4gVG8gcmVwbGljYXRlIHRoaXMsIEkmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCBhIGBuZXRfZGV2aWNlYCB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGluZmx1ZW5jZSB0aGUgbnVtYmVyIG9mIFZGcyBwb3NzaWJsZSwgSSBzaG91bGQgY2hlY2sgdGhlIGBDT05GSUdfUENJX0lPVmAgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBsb29rIGF0IGBkZXZfbnVtX3ZmYCB0byBzZWUgaG93IHRoYXQmIzM5O3MgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X251bV92ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby92aXJ0aW8uYz00MDQ9c3RhdGljIHZvaWQgdmlydGlvX2Rldl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpfZClcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00MzctXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0Mzg6c3RhdGljIGludCB2aXJ0aW9fZGV2X251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00Mzkte1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ0MS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ0MjpcdHJldHVybiBkZXZfbnVtX3ZmKHZkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00NDMtfVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQ0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlIHZpcnRpb19idXMgPSB7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDU0LVx0LnNodXRkb3duID0gdmlydGlvX2Rldl9zaHV0ZG93bixcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ1NTpcdC5udW1fdmYgPSB2aXJ0aW9fZGV2X251bV92ZixcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ1Ni19O1xuLS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmg9MTI3Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X29mX25vZGUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI3OS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmg6MTI4MDpzdGF0aWMgaW5saW5lIGludCBkZXZfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI4MS17XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTE0Nz1zdGF0aWMgaW5saW5lIGludCBydG5sX3ZmaW5mb19zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE1MC1cdGlmIChkZXYtXHUwMDNlZGV2LnBhcmVudCBcdTAwMjZcdTAwMjYgKGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1ZGKSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTE1MTpcdFx0aW50IG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cdTAwM2VkZXYucGFyZW50KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTExNTItXHRcdHNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoMCk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTE5NT1zdGF0aWMgc2l6ZV90IHJ0bmxfcG9ydF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTIxMi1cdFx0cmV0dXJuIDA7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMjEzOlx0aWYgKGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpKVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTIxNC1cdFx0cmV0dXJuIHBvcnRfc2VsZl9zaXplICYjNDM7IHZmX3BvcnRzX3NpemUgJiM0Mztcbm5ldC9jb3JlL3J0bmV0bGluay5jOjEyMTU6XHRcdFx0dmZfcG9ydF9zaXplICogZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMjE2LVx0ZWxzZVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTEzNjU9c3RhdGljIGludCBydG5sX3ZmX3BvcnRzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzc1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTM3NjpcdGZvciAodmYgPSAwOyB2ZiBcdTAwM2MgZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCk7IHZmJiM0MzsmIzQzOykge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTM3Ny1cdFx0dmZfcG9ydCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElGTEFfVkZfUE9SVCk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTQyMT1zdGF0aWMgaW50IHJ0bmxfcG9ydF9maWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTQzMy1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE0MzQ6XHRpZiAoZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCkpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0MzUtXHRcdGVyciA9IHJ0bmxfdmZfcG9ydHNfZmlsbChza2IsIGRldik7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTY2OD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjc3LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTY3ODpcdG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cdTAwM2VkZXYucGFyZW50KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NzktXHRpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9WRiwgbnVtX3ZmcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEZXZpY2UgVmlydHVhbCBGdW5jdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgZGV2X251bV92ZmAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGRldmljZSBtb2RlbCwgc3BlY2lmaWNhbGx5IHdoZXJlIHRoZSBjb3JlIGRldmljZSBzdHJ1Y3R1cmUgbGl2ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZGV2X251bV92ZmAgdmFyaWFibGUgaXMgYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBNeSBmaXJzdCBzdG9wIHdpbGwgYmUgYGluY2x1ZGUvbGludXgvZGV2aWNlLmhgLiBUaGF0IGhlYWRlciBmaWxlIGlzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgdGhlIGNvcmUgYGRldmljZWAgc3RydWN0dXJlIGFuZCBhc3NvY2lhdGVkIGZpZWxkcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24gb2YgYGRldl9udW1fdmZgIHRoZXJlLCBwcm9iYWJseSBhcyBhIG1lbWJlciBvZiBhIHN0cnVjdHVyZSBvciBwZXJoYXBzIGFzIGEgbWFjcm8gcmVsYXRlZCB0byB2aXJ0dWFsIGZ1bmN0aW9ucy4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvbW1lbnRzLCBhcyB0aGV5IHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIHB1cnBvc2UgYW5kIHVzYWdlIG9mIHRoaXMgdmFyaWFibGUsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdmlydHVhbCBmdW5jdGlvbnMuIFRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpbiB0aGlzIGhlYWRlciBmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgbG93ZXN0IGxldmVsIGFuZCwgZnJvbSB0aGF0IHBvaW50LCBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG15IGN1cnJlbnQgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RldmljZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjcwOlx0dm9pZCBkZXZpY2Vfc2V0X29mX25vZGVfZnJvbV9kZXYoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYyKTtcbjEyNzE6XHRzdHJ1Y3QgZGV2aWNlICpnZXRfZGV2X2Zyb21fZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpO1xuMTI3MjpcdFxuMTI3MzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICpkZXZfb2Zfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4xMjc0Olx0e1xuMTI3NTpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19PRikgfHwgIWRldilcbjEyNzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMjc3Olx0XHRyZXR1cm4gZGV2LVx1MDAzZW9mX25vZGU7XG4xMjc4Olx0fVxuMTI3OTpcdFxuMTI4MDpcdHN0YXRpYyBpbmxpbmUgaW50IGRldl9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxuMTI4MTpcdHtcbjEyODI6XHRcdGlmIChkZXYtXHUwMDNlYnVzIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlYnVzLVx1MDAzZW51bV92ZilcbjEyODM6XHRcdFx0cmV0dXJuIGRldi1cdTAwM2VidXMtXHUwMDNlbnVtX3ZmKGRldik7XG4xMjg0Olx0XHRyZXR1cm4gMDtcbjEyODU6XHR9XG4xMjg2Olx0XG4xMjg3Olx0LypcbjEyODg6XHQgKiBSb290IGRldmljZSBvYmplY3RzIGZvciBncm91cGluZyB1bmRlciAvc3lzL2RldmljZXNcbjEyODk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmlydHVhbCBGdW5jdGlvbiBOdW1iZXIgUmV0cmlldmFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkZXZfbnVtX3ZmYCBmdW5jdGlvbiBjYWxsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBnb2luZyB0aHJvdWdoIHRoZSBkZXZpY2UmIzM5O3MgYnVzIHRvIGdldCB0aGUgbnVtYmVyIG9mIHZpcnR1YWwgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGUga2V5IGlzIGluIGhvdyB0aGUgYnVzIGhhbmRsZXMgdGhpcyByZXF1ZXN0LiBJdCYjMzk7cyBjYWxsaW5nIGBkZXYtJmd0O2J1cy0mZ3Q7bnVtX3ZmKGRldilgLiBTaW5jZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBQQ0kgZGV2aWNlcywgYW5kIGtub3dpbmcgUENJIGJ1c3NlcyBhcmUgYSBjb21tb24gdHlwZSBvZiBkZXZpY2UsIGBwY2lfYnVzX3R5cGVgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLiAgSSBuZWVkIHRvIGNoZWNrIGhvdyBgbnVtX3ZmYCBpcyBpbXBsZW1lbnRlZCBmb3IgYHBjaV9idXNfdHlwZWAuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jYCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudW1fdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYz00Nj1zdGF0aWMgaW50IGRpc2FibGVfc2xvdChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QpXG4tLVxuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYy01OS1cdHBkZXYgPSBwY2lfZ2V0X3Nsb3QoemRldi1cdTAwM2V6YnVzLVx1MDAzZWJ1cywgemRldi1cdTAwM2VkZXZmbik7XG5kcml2ZXJzL3BjaS9ob3RwbHVnL3MzOTBfcGNpX2hwYy5jOjYwOlx0aWYgKHBkZXYgXHUwMDI2XHUwMDI2IHBjaV9udW1fdmYocGRldikpIHtcbmRyaXZlcnMvcGNpL2hvdHBsdWcvczM5MF9wY2lfaHBjLmMtNjEtXHRcdHJjID0gLUVCVVNZO1xuLS1cbmRyaXZlcnMvcGNpL2lkZS5jPTIzOT1zdHJ1Y3QgcGNpX2lkZSAqcGNpX2lkZV9zdHJlYW1fYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9wY2kvaWRlLmMtMjQ3LVx0c3RydWN0IHBjaV9kZXYgKnJwLCAqYnI7XG5kcml2ZXJzL3BjaS9pZGUuYzoyNDg6XHRpbnQgbnVtX3ZmLCByaWRfZW5kO1xuZHJpdmVycy9wY2kvaWRlLmMtMjQ5LVxuLS1cbmRyaXZlcnMvcGNpL2lkZS5jLTI4MC1cdC8qIGZvciBTUi1JT1YgY2FzZSwgY292ZXIgYWxsIFZGcyAqL1xuZHJpdmVycy9wY2kvaWRlLmM6MjgxOlx0bnVtX3ZmID0gcGNpX251bV92ZihwZGV2KTtcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MjpcdGlmIChudW1fdmYpXG5kcml2ZXJzL3BjaS9pZGUuYzoyODM6XHRcdHJpZF9lbmQgPSBQQ0lfREVWSUQocGNpX2lvdl92aXJ0Zm5fYnVzKHBkZXYsIG51bV92ZiAtIDEpLFxuZHJpdmVycy9wY2kvaWRlLmM6Mjg0Olx0XHRcdFx0ICAgIHBjaV9pb3ZfdmlydGZuX2RldmZuKHBkZXYsIG51bV92ZiAtIDEpKTtcbmRyaXZlcnMvcGNpL2lkZS5jLTI4NS1cdGVsc2Vcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYz00NDE9c3RhdGljIHNzaXplX3Qgc3Jpb3ZfbnVtdmZzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ0NS1cdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpO1xuZHJpdmVycy9wY2kvaW92LmM6NDQ2Olx0dTE2IG51bV92ZnM7XG5kcml2ZXJzL3BjaS9pb3YuYy00NDctXG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNDQ5LVx0ZGV2aWNlX2xvY2soXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9wY2kvaW92LmM6NDUwOlx0bnVtX3ZmcyA9IHBkZXYtXHUwMDNlc3Jpb3YtXHUwMDNlbnVtX1ZGcztcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1MS1cdGRldmljZV91bmxvY2soXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9wY2kvaW92LmMtNDUyLVxuZHJpdmVycy9wY2kvaW92LmM6NDUzOlx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0OywgbnVtX3Zmcyk7XG5kcml2ZXJzL3BjaS9pb3YuYy00NTQtfVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ1Ni0vKlxuZHJpdmVycy9wY2kvaW92LmM6NDU3OiAqIG51bV92ZnMgXHUwMDNlIDA7IG51bWJlciBvZiBWRnMgdG8gZW5hYmxlXG5kcml2ZXJzL3BjaS9pb3YuYzo0NTg6ICogbnVtX3ZmcyA9IDA7IGRpc2FibGUgYWxsIFZGc1xuZHJpdmVycy9wY2kvaW92LmMtNDU5LSAqXG4tLVxuZHJpdmVycy9wY2kvaW92LmM9NDYzPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNDY4LVx0aW50IHJldCA9IDA7XG5kcml2ZXJzL3BjaS9pb3YuYzo0Njk6XHR1MTYgbnVtX3ZmcztcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3MC1cbmRyaXZlcnMvcGNpL2lvdi5jOjQ3MTpcdGlmIChrc3RydG91MTYoYnVmLCAwLCBcdTAwMjZudW1fdmZzKSBcdTAwM2MgMClcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL3BjaS9pb3YuYy00NzMtXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzQ6XHRpZiAobnVtX3ZmcyBcdTAwM2UgcGNpX3NyaW92X2dldF90b3RhbHZmcyhwZGV2KSlcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3NS1cdFx0cmV0dXJuIC1FUkFOR0U7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNDc4LVxuZHJpdmVycy9wY2kvaW92LmM6NDc5Olx0aWYgKG51bV92ZnMgPT0gcGRldi1cdTAwM2Vzcmlvdi1cdTAwM2VudW1fVkZzKVxuZHJpdmVycy9wY2kvaW92LmMtNDgwLVx0XHRnb3RvIGV4aXQ7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNDk1LVxuZHJpdmVycy9wY2kvaW92LmM6NDk2Olx0aWYgKG51bV92ZnMgPT0gMCkge1xuZHJpdmVycy9wY2kvaW92LmMtNDk3LVx0XHQvKiBkaXNhYmxlIFZGcyAqL1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTUwNi1cdFx0cGNpX3dhcm4ocGRldiwgXCYjMzQ7JWQgVkZzIGFscmVhZHkgZW5hYmxlZC4gRGlzYWJsZSBiZWZvcmUgZW5hYmxpbmcgJWQgVkZzXFxuXCYjMzQ7LFxuZHJpdmVycy9wY2kvaW92LmM6NTA3Olx0XHRcdCBwZGV2LVx1MDAzZXNyaW92LVx1MDAzZW51bV9WRnMsIG51bV92ZnMpO1xuZHJpdmVycy9wY2kvaW92LmMtNTA4LVx0XHRyZXQgPSAtRUJVU1k7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNTEyLVx0cGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpO1xuZHJpdmVycy9wY2kvaW92LmM6NTEzOlx0cmV0ID0gcGRldi1cdTAwM2Vkcml2ZXItXHUwMDNlc3Jpb3ZfY29uZmlndXJlKHBkZXYsIG51bV92ZnMpO1xuZHJpdmVycy9wY2kvaW92LmMtNTE0LVx0cGNpX3VubG9ja19yZXNjYW5fcmVtb3ZlKCk7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNTE3LVxuZHJpdmVycy9wY2kvaW92LmM6NTE4Olx0aWYgKHJldCAhPSBudW1fdmZzKVxuZHJpdmVycy9wY2kvaW92LmMtNTE5LVx0XHRwY2lfd2FybihwZGV2LCBcJiMzNDslZCBWRnMgcmVxdWVzdGVkOyBvbmx5ICVkIGVuYWJsZWRcXG5cJiMzNDssXG5kcml2ZXJzL3BjaS9pb3YuYzo1MjA6XHRcdFx0IG51bV92ZnMsIHJldCk7XG5kcml2ZXJzL3BjaS9pb3YuYy01MjEtXG4tLVxuZHJpdmVycy9wY2kvaW92LmM9NjEzPWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc3Jpb3ZfcGZfZGV2X2F0dHJfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNjE3LVxuZHJpdmVycy9wY2kvaW92LmM6NjE4OmludCBfX3dlYWsgcGNpYmlvc19zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBudW1fdmZzKVxuZHJpdmVycy9wY2kvaW92LmMtNjE5LXtcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYz02MjM9aW50IF9fd2VhayBwY2liaW9zX3NyaW92X2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNjI3LVxuZHJpdmVycy9wY2kvaW92LmM6NjI4OnN0YXRpYyBpbnQgc3Jpb3ZfYWRkX3ZmcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgbnVtX3ZmcylcbmRyaXZlcnMvcGNpL2lvdi5jLTYyOS17XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtNjM1LVxuZHJpdmVycy9wY2kvaW92LmM6NjM2Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZmczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvcGNpL2lvdi5jLTYzNy1cdFx0cmMgPSBwY2lfaW92X2FkZF92aXJ0Zm4oZGV2LCBpKTtcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYz0xMTkwPUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9kaXNhYmxlX3NyaW92KTtcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTkyLS8qKlxuZHJpdmVycy9wY2kvaW92LmM6MTE5MzogKiBwY2lfbnVtX3ZmIC0gcmV0dXJuIG51bWJlciBvZiBWRnMgYXNzb2NpYXRlZCB3aXRoIGEgUEYgZGV2aWNlX3JlbGVhc2VfZHJpdmVyXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk0LSAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlXG4tLVxuZHJpdmVycy9wY2kvaW92LmMtMTE5Ny0gKi9cbmRyaXZlcnMvcGNpL2lvdi5jOjExOTg6aW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldilcbmRyaXZlcnMvcGNpL2lvdi5jLTExOTkte1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTEyMDQtfVxuZHJpdmVycy9wY2kvaW92LmM6MTIwNTpFWFBPUlRfU1lNQk9MX0dQTChwY2lfbnVtX3ZmKTtcbmRyaXZlcnMvcGNpL2lvdi5jLTEyMDYtXG4tLVxuZHJpdmVycy9wY2kvaW92LmM9MTM1OD1FWFBPUlRfU1lNQk9MX0dQTChwY2lfaW92X3ZmX2Jhcl9zZXRfc2l6ZSk7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtMTM2MC0vKipcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNjE6ICogcGNpX2lvdl92Zl9iYXJfZ2V0X3NpemVzIC0gZ2V0IFZGIEJBUiBzaXplcyBhbGxvd2luZyB0byBjcmVhdGUgdXAgdG8gbnVtX3Zmc1xuZHJpdmVycy9wY2kvaW92LmMtMTM2Mi0gKiBAZGV2OiB0aGUgUENJIGRldmljZVxuZHJpdmVycy9wY2kvaW92LmMtMTM2My0gKiBAcmVzbm86IHRoZSByZXNvdXJjZSBudW1iZXJcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNjQ6ICogQG51bV92ZnM6IG51bWJlciBvZiBWRnNcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNjUtICpcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNjY6ICogR2V0IHRoZSBzaXplcyBvZiBhIFZGIHJlc2l6YWJsZSBCQVIgdGhhdCBjYW4gYWNjb21tb2RhdGUgQG51bV92ZnMgd2l0aGluXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzY3LSAqIHRoZSBjdXJyZW50bHkgYXNzaWduZWQgc2l6ZSBvZiB0aGUgcmVzb3VyY2UgQHJlc25vLlxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzEtICovXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzcyOnUzMiBwY2lfaW92X3ZmX2Jhcl9nZXRfc2l6ZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vLCBpbnQgbnVtX3ZmcylcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzMte1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzYtXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzc3Olx0aWYgKCFudW1fdmZzKVxuZHJpdmVycy9wY2kvaW92LmMtMTM3OC1cdFx0cmV0dXJuIDA7XG5kcml2ZXJzL3BjaS9pb3YuYy0xMzc5LVxuZHJpdmVycy9wY2kvaW92LmM6MTM4MDpcdGRvX2Rpdih2Zl9sZW4sIG51bV92ZnMpO1xuZHJpdmVycy9wY2kvaW92LmMtMTM4MS1cdHNpemVzID0gKHJvdW5kdXBfcG93X29mX3R3byh2Zl9sZW4gJiM0MzsgMSkgLSAxKSBcdTAwM2VcdTAwM2UgaWxvZzIoU1pfMU0pO1xuLS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYz0xNjI1PXZvaWQgcGNpX3VldmVudF9lcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gcGNpX2Vyc19yZXN1bHQgZXJyX3R5cGUpXG4tLVxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTE2NTUtXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTY1NjpzdGF0aWMgaW50IHBjaV9idXNfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU3LXtcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNjU4Olx0cmV0dXJuIHBjaV9udW1fdmYodG9fcGNpX2RldihkZXYpKTtcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU5LX1cbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM9MTcyNj1jb25zdCBzdHJ1Y3QgYnVzX3R5cGUgcGNpX2J1c190eXBlID0ge1xuLS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzM4LVx0LnBtXHRcdD0gUENJX1BNX09QU19QVFIsXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTczOTpcdC5udW1fdmZcdFx0PSBwY2lfYnVzX251bV92ZixcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzQwLVx0LmRtYV9jb25maWd1cmVcdD0gcGNpX2RtYV9jb25maWd1cmUsXG4tLVxuZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmM9MTY4MT1zdGF0aWMgc3NpemVfdCBfX3Jlc291cmNlX3Jlc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBuLFxuLS1cbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jLTE2OTYtXHRkZXZpY2VfbG9jayhkZXYpO1xuZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmM6MTY5NzpcdGlmIChkZXYtXHUwMDNlZHJpdmVyIHx8IHBjaV9udW1fdmYocGRldikpIHtcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jLTE2OTgtXHRcdHJldCA9IC1FQlVTWTtcbi0tXG5kcml2ZXJzL3BjaS90c20uYz03OT1zdGF0aWMgdm9pZCBwY2lfdHNtX3dhbGtfZm5zKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvcGNpL3RzbS5jLTk1LVx0XHQvKiB3YWxrIHZpcnR1YWwgZnVuY3Rpb25zIG9mIGVhY2ggcGYgKi9cbmRyaXZlcnMvcGNpL3RzbS5jOjk2Olx0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgcGNpX251bV92ZihwZik7IGomIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3BjaS90c20uYy05Ny1cdFx0XHRzdHJ1Y3QgcGNpX2RldiAqdmYgX19mcmVlKHBjaV9kZXZfcHV0KSA9XG4tLVxuZHJpdmVycy9wY2kvdHNtLmM9MTE4PXN0YXRpYyB2b2lkIHBjaV90c21fd2Fsa19mbnNfcmV2ZXJzZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL3BjaS90c20uYy0xMzUtXHRcdC8qIHJldmVyc2Ugd2FsayB2aXJ0dWFsIGZ1bmN0aW9ucyAqL1xuZHJpdmVycy9wY2kvdHNtLmM6MTM2Olx0XHRmb3IgKGludCBqID0gcGNpX251bV92ZihwZikgLSAxOyBqIFx1MDAzZT0gMDsgai0tKSB7XG5kcml2ZXJzL3BjaS90c20uYy0xMzctXHRcdFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMyMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gVmlydHVhbCBGdW5jdGlvbiBFbnVtZXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGF2YWlsYWJsZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBwY2lfbnVtX3ZmYC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIHVsdGltYXRlbHkgcHVsbGluZyB0aGUgdmFsdWUgZnJvbSBgcGRldi0mZ3Q7c3Jpb3YtJmd0O251bV9WRnNgLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gc3RvcmUgdGhhdCBpbmZvcm1hdGlvbiB3aGVuIFNSLUlPViBpcyBhY3RpdmUgb24gYSBQQ0kgZGV2aWNlLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaG93IGRvIHdlIHRyaWdnZXIgdGhpcyBiZWhhdmlvciBpbiBvdXIgUUVNVSBlbnZpcm9ubWVudCBmb3IgdGVzdGluZz8gVGhhbmtmdWxseSwgUUVNVSBpcyBwcmV0dHkgZ29vZCBhYm91dCBzdXBwb3J0aW5nIFNSLUlPViBlbXVsYXRpb24sIGVzcGVjaWFsbHkgZm9yIGRldmljZXMgbGlrZSB0aGUgYGlnYmAgYW5kIGBudm1lYCBlbXVsYXRlZCBOSUNzLiBXZSBjYW4gZGVmaW5pdGVseSBleHBsb3JlIHRob3NlIGFzIHRlc3QgY2FuZGlkYXRlcy4gQW5kLCBvZiBjb3Vyc2UsIHdlIGhhdmUgZGV2aWNlcyBsaWtlIHZpcnRpbywgd2hpY2ggYXJlIGFsc28gdmlydHVhbCwgYW5kIHRodXMgbW9yZSBkaXJlY3RseSBjb250cm9sbGVkIGJ5IHRoZSBoeXBlcnZpc29yLgoKSG1tLCBsZXQgbWUgZG91YmxlLWNoZWNrIGhvdyB2aXJ0aW8gaGFuZGxlcyBWRiBlbnVtZXJhdGlvbuKApkFoLCB5ZXMsIGB2aXJ0aW9fZGV2X251bV92ZmAgaXMgc2ltcGx5IHJldHVybmluZyBgZGV2X251bV92Zih2ZGV2LSZndDtkZXYucGFyZW50KWAuIFRoaXMgY2xhcmlmaWVzIGl0IHBlcmZlY3RseTogdGhlIHZpcnRpbyBkZXZpY2UgaW5oZXJpdHMgdGhlIFZGIGNhcGFiaWxpdHkgZnJvbSBpdHMgcGFyZW50IFBDSSBkZXZpY2UuIFNvLCBpZiB0aGUgcGFyZW50IChlbXVsYXRlZCBQQ0kgZGV2aWNlKSBoYXMgU1ItSU9WIGVuYWJsZWQsIHZpcnRpbyBleHBvc2VzIFZGcyBhcyBhIGNoaWxkIGRldmljZS4KCk5vdywgYW4gaW50ZXJlc3RpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgaXMgYG5ldGRldnNpbWAuIERvZXMgYG5ldGRldnNpbWAsIGFzIGEgZnVsbHkgc29mdHdhcmUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlLCBleHBvc2UgdmlydHVhbCBmdW5jdGlvbnM/IFRoYXQmIzM5O3MgdGhlIG5leHQgYXZlbnVlIHRvIGV4cGxvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NyaW92X251bXZmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTYwPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBuc2ltX2J1c19kZXZfbnVtdmZzX2F0dHIgPVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjYxOlx0X19BVFRSKHNyaW92X251bXZmcywgMDY2NCwgbnNpbV9idXNfZGV2X251bXZmc19zaG93LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTYyLVx0ICAgICAgIG5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqU1ItSU9WIEludmVzdGlnYXRpb24qKgoKUmlnaHQsICpuZXRkZXZzaW0qLi4uIEkgcmVjYWxsIHRoYXQgZHJpdmVyIGhhdmluZyBzb21lIGludGVyZXN0aW5nIHByb3BlcnRpZXMuIEFoLCB5ZXMhIFRoZSBgc3Jpb3ZfbnVtdmZzYCBhdHRyaWJ1dGUuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBTUi1JT1YgZnVuY3Rpb25hbGl0eSBpcyBoYW5kbGVkIHdpdGhpbiB0aGF0IGRyaXZlci4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBNeSBuZXh0IHN0b3AgaXMgZGVmaW5pdGVseSBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jYC4gSSBleHBlY3QgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIHNpbXVsYXRlZCBidXMgYW5kLCBjb25zZXF1ZW50bHksIHRoZSBTUi1JT1YgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHZpcnR1YWwgZnVuY3Rpb25zIHdpbGwgcmVzaWRlLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBhdHRyaWJ1dGUgaXMgZXhwb3NlZCwgc2V0LCBhbmQgdXNlZCB3aXRoaW4gdGhlIHNpbXVsYXRpb24gY29udGV4dC4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gZm9ybXVsYXRlIGEgcGxhbiB0byBkZXRlcm1pbmUgaG93IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhdHRyaWJ1dGVzIHdpdGhpbiBuZXRkZXZzaW0gd2lsbCBhZmZlY3QgdGhlIHJlc3VsdGFudCBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O251bV92ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTMxPW5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtMzQtXHRzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYgPSB0b19uc2ltX2J1c19kZXYoZGV2KTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzozNTpcdHVuc2lnbmVkIGludCBudW1fdmZzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM2LVx0aW50IHJldDtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy0zNy1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzozODpcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcdTAwMjZudW1fdmZzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy0zOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ0LVx0aWYgKGRldl9nZXRfZHJ2ZGF0YShkZXYpKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjQ1Olx0XHRyZXQgPSBuc2ltX2Rydl9jb25maWd1cmVfdmZzKG5zaW1fYnVzX2RldiwgbnVtX3Zmcyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDYtXHRkZXZpY2VfdW5sb2NrKGRldik7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTUyPW5zaW1fYnVzX2Rldl9udW12ZnNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTU2LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjU3Olx0cmV0dXJuIHNwcmludGYoYnVmLCBcJiMzNDsldVxcblwmIzM0OywgbnNpbV9idXNfZGV2LVx1MDAzZW51bV92ZnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTU4LX1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM9NDIzPXN0YXRpYyB2b2lkIG5zaW1fYnVzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQyOS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0MzA6c3RhdGljIGludCBuc2ltX251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDMxLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDMzLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjQzNDpcdHJldHVybiBuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MzUtfVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz00Mzc9c3RhdGljIGNvbnN0IHN0cnVjdCBidXNfdHlwZSBuc2ltX2J1cyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDQyLVx0LnJlbW92ZVx0XHQ9IG5zaW1fYnVzX3JlbW92ZSxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0NDM6XHQubnVtX3ZmXHRcdD0gbnNpbV9udW1fdmYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDQ0LX07XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTYwPXVuc2lnbmVkIGludCBuc2ltX2Rldl9nZXRfdmZzKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTY0LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjY1Olx0cmV0dXJuIG5zaW1fZGV2LVx1MDAzZW5zaW1fYnVzX2Rldi1cdTAwM2VudW1fdmZzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTY2LX1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9Njg9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2OTpuc2ltX2J1c19kZXZfc2V0X3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsIHVuc2lnbmVkIGludCBudW1fdmZzKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTcwLXtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03MS1cdHJ0bmxfbG9jaygpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjcyOlx0bnNpbV9idXNfZGV2LVx1MDAzZW51bV92ZnMgPSBudW1fdmZzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTczLVx0cnRubF91bmxvY2soKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTg2MT1pbnQgbnNpbV9kcnZfY29uZmlndXJlX3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg2MjpcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3ZmcylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODYzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg2OC1cdGRldmxfbG9jayhkZXZsaW5rKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODY5Olx0aWYgKG5zaW1fYnVzX2Rldi1cdTAwM2VudW1fdmZzID09IG51bV92ZnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3MC1cdFx0Z290byBleGl0X3VubG9jaztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODcxOlx0aWYgKG5zaW1fYnVzX2Rldi1cdTAwM2VudW1fdmZzIFx1MDAyNlx1MDAyNiBudW1fdmZzKSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3Mi1cdFx0cmV0ID0gLUVCVVNZO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODc0LVx0fVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4NzU6XHRpZiAobnNpbV9idXNfZGV2LVx1MDAzZW1heF92ZnMgXHUwMDNjIG51bV92ZnMpIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODc2LVx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODc5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4ODA6XHRuc2ltX2J1c19kZXZfc2V0X3Zmcyhuc2ltX2J1c19kZXYsIG51bV92ZnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4ODEtXHRpZiAobnNpbV9lc3dfbW9kZV9pc19zd2l0Y2hkZXYobnNpbV9kZXYpKSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg4MjpcdFx0aWYgKG51bV92ZnMpIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODgzLVx0XHRcdHJldCA9IG5zaW1fZXN3X3N3aXRjaGRldl9lbmFibGUobnNpbV9kZXYsIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0zOTk9aW50IG5zaW1fZHJ2X2NvbmZpZ3VyZV92ZnMoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQwMDpcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3Zmcyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDAxLVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NzU9c3RydWN0IG5zaW1fYnVzX2RldiB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4My1cdHVuc2lnbmVkIGludCBtYXhfdmZzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ4NDpcdHVuc2lnbmVkIGludCBudW1fdmZzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4NS1cdGJvb2wgaW5pdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZGV2c2ltIFZGIENyZWF0aW9uIGFuZCB0aGUgUmVsYXRlZCBQYXRjaCoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBuZXRkZXZzaW1gIHByb3ZpZGVzIGEgcmVhbGx5IGNvbnZlbmllbnQgd2F5IHRvIHNwaW4gdXAgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykhIFRoYXQmIzM5O3MgZXhjZWxsZW50LiBJIGNhbiBqdXN0IHdyaXRlIHRvIGAvc3lzL2J1cy9uZXRkZXZzaW0vZGV2aWNlcy9uZXRkZXZzaW1YL3NyaW92X251bXZmc2AgYW5kIGluc3RhbnRpYXRlIHRoZW0uIFBlcmZlY3QgZm9yIHF1aWNrIHRlc3RpbmcuCgpUaGVuLCB0aGUgYXBwcm9hY2ggaXMgdG8gaGl0IHRoZSBzeXN0ZW0gd2l0aCBhIG5ldGxpbmsgYFJUTV9HRVRMSU5LYCB0byB0cmlnZ2VyIGBydG5sX2ZpbGxfdmZgLiBUaGlzIHNob3VsZCBiZSBlYXNpbHkgYWNoaWV2YWJsZSBhbmQgdGVzdGFibGUgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgd2hpY2ggaXMgZmFudGFzdGljIGZvciBpdGVyYXRpbmcgcXVpY2tseS4KCk5vdywgbGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhhdCBgcnRubF9maWxsX3ZmYCBmdW5jdGlvbi4uLgpgYGBjCglmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKCQl1bnNpZ25lZCBjaGFyICptYXJrID0gc2tiX3RhaWxfcG9pbnRlcihza2IpOwoKCQlpZiAocnRubF9maWxsX3ZmaW5mbyhza2IsIGRldiwgaSwgZXh0X2ZpbHRlcl9tYXNrKSkgewoJCQlubGFfbmVzdF9jYW5jZWwoc2tiLCB2ZmluZm8pOwoJCQlyZXR1cm4gLUVNU0dTSVpFOwoJCX0KCgkJLyogQW4gYXR0cmlidXRlIGxlbmd0aCBpcyBhIHUxNiwgc28gdGhlIG5lc3QgY2Fubm90IGRlc2NyaWJlCgkJICogbW9yZSB0aGFuIFUxNl9NQVggYnl0ZXMuIERyb3AgdGhlIFZGIHRoYXQgd291bGQgb3ZlcmZsb3cgaXQKCQkgKiBhbmQgc3RvcDogYSB0cnVuY2F0ZWQgbGlzdCBrZWVwcyB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZQoJCSAqIHBhcnNhYmxlLCB3aGVyZWFzIGEgd3JhcHBlZCBuZXN0IGxlbmd0aCBkb2VzIG5vdC4KCQkgKi8KCQlpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKil2ZmluZm8gJmd0OyBVMTZfTUFYKSB7CgkJCW5sbXNnX3RyaW0oc2tiLCBtYXJrKTsKCQkJYnJlYWs7CgkJfQoJfQpgYGAKQWgsIHNvIHRoZSBwYXRjaCBpcyBmb2N1c2luZyBvbiBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG92ZXJmbG93IGlzc3VlIHdpdGggdGhlIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCwgd2hpY2ggaXMgYSBgdTE2YC4gSXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBwcmV2ZW50cyBhIG5hc3R5IGJ1ZyB3aGVyZSB0aGUgYHZmaW5mb2AgbmVzdCBsZW5ndGggd3JhcHMgYXJvdW5kLiBQcmV2ZW50aW5nIHRoZSBjcmFzaCBkdWUgdG8gdGhlIG92ZXJmbG93IGlzIGdvb2QuCgpBcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIGBDT05GSUdfTkVUREVWU0lNYCBpcyB0aGUga2V5IGZvciB0ZXN0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgb2J2aW91c2x5LiBJZiBJIHdhbnRlZCB0byBnZXQgZmFuY3kgYW5kIGluY29ycG9yYXRlIHJlYWwgb3IgZW11bGF0ZWQgUENJIGRldmljZXMgaW50byB0aGUgdGVzdHMsIGBDT05GSUdfUENJX0lPVmAgKm1pZ2h0KiBiZSByZWxldmFudCwgYnV0IGBuZXRkZXZzaW1gIGl0c2VsZiBkb2VzbiYjMzk7dCBkZXBlbmQgb24gaXQsIHNvIGl0JiMzOTtzIG5vdCBhIGhhcmQgcmVxdWlyZW1lbnQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0ZGV2c2ltYCBLY29uZmlnIGFuZCBjb25maXJtIGFsbCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRERVZTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERpcmVjdGx5IGludG8gdGhlIEtjb25maWcqKgoKQWxyaWdodCwgaW5zdGVhZCBvZiBndWVzc2luZyBvciByZWx5aW5nIG9uIGluZGlyZWN0IHBhdGhzLCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBiZSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZ2AuIEl0JiMzOTtzIHRoZSBtb3N0IGRlZmluaXRpdmUgcGxhY2UgdG8gZ2V0IHRoZSByZWFsIHN0b3J5LiBBbnkgcXVlc3Rpb25zIGFib3V0IHRoZSBuZXRkZXZzaW0gZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgYmUgYW5zd2VyZWQgaGVyZSwgZmlyc3QuIFRoaXMgS2NvbmZpZyBmaWxlICpoYXMqIHRvIGhvbGQgdGhlIG1hc3RlciBkZWZpbml0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF04oCZcyBkZWZpbmVkLCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBsb29rIGxpa2UuIFdlIGNhbiBsaWtlbHkgZGVkdWNlIGEgZ3JlYXQgZGVhbCBhYm91dCB0aGUgYmVoYXZpb3IgYW5kIHBvc3NpYmxlIGlzc3VlcyBmcm9tIGEgdGhvcm91Z2ggZXhhbWluYXRpb24gb2YgdGhhdCBvbmUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZmlsZSBkb2VzIG5vdCBleGlzdDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZpbGUgZG9lcyBub3QgZXhpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTQwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgcHJvamVjdCwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGEgc2ltcGxlIG9uZSwgeWV0IGNydWNpYWw6ICp3aGVyZSogaXMgdGhlIEtjb25maWcgZmlsZSBmb3IgYG5ldGRldnNpbWA/IEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIG1hcCwgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGFuZCBjb25maWd1cmluZyB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzLCB0cmFjayBkb3duIHRoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLiBUaW1lIHRvIGJlZ2luIHRoZSBodW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUREVWU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NjAyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MDMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gc2l0dWF0aW9uLiBNeSBpbnR1aXRpb24gc3VnZ2VzdHMgdGhlIGlzc3VlIG1pZ2h0IGJlIHJvb3RlZCBpbiBob3cgdGhlIGRyaXZlcnMgYXJlIGJ1aWx0IG9yIGVuYWJsZWQuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgdGhhdCBhcm91bmQgbGluZSA2MDQgbWlnaHQgY29udGFpbiB0aGUgcmVsZXZhbnQgbG9naWMgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDA6XHRcbiA2MDE6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvS2NvbmZpZ1wmIzM0O1xuIDYwMjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuIDYwMzpcdFxuIDYwNDpcdGNvbmZpZyBORVRERVZTSU1cbiA2MDU6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuIDYwNjpcdFx0ZGVwZW5kcyBvbiBERUJVR19GU1xuIDYwNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gNjA4Olx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXG4gNjA5Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG4gNjEwOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiA2MTE6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiA2MTI6XHRcdHNlbGVjdCBORVRfU0hBUEVSXG4gNjEzOlx0XHRoZWxwXG4gNjE0Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCBhbmQgc29mdHdhcmUgbW9kZWwgdGhhdCBjYW5cbiA2MTU6XHRcdCAgYmUgdXNlZCB0byB0ZXN0IHZhcmlvdXMgY29udHJvbCBwYXRoIG5ldHdvcmtpbmcgQVBJcywgZXNwZWNpYWxseVxuIDYxNjpcdFx0ICBIVy1vZmZsb2FkIHJlbGF0ZWQuXG4gNjE3Olx0XG4gNjE4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiA2MTk6XHRcdCAgd2lsbCBiZSBjYWxsZWQgbmV0ZGV2c2ltLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGlzIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBUaGF0JiMzOTtzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayDigJMgc3VwZXIgY29yZSBzdHVmZi4gSSBhbHJlYWR5IGtub3cgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGlsZWQgaWYgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGFsd2F5cyB0aGUgY2FzZS4KClRoZSBzcGVjaWZpYyBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCwgYHJ0bmxfZmlsbF92ZmAsIGlzIGNhbGxlZCBmcm9tIGBydG5sX2ZpbGxfaWZpbmZvYC4gVG8gYWN0dWFsbHkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCwgSSYjMzk7bGwgbmVlZCBhIGRldmljZSB0aGF0IGhhcyBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKS4gTGV0IG1lIHNlZeKApiB5ZXAsIGBORVRERVZTSU1gIGxvb2tzIGxpa2UgdGhlIHBlcmZlY3QgY2FuZGlkYXRlIGZvciB0aGF0LiBJIGRvbiYjMzk7dCB0aGluayBJIG5lZWQgdG8gd29ycnkgYWJvdXQgYW55IG90aGVyIGNvbmZpZ3MgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgdGhlIGtleSBzeW1ib2xzIGFyZSBoZXJlLiBPYnZpb3VzbHksIGBydG5sX2ZpbGxfdmZgIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgc28gdGhhdCYjMzk7cyBhIHByaW1lIHN1c3BlY3QuIEl0JiMzOTtzIGNhbGxlZCBieSBgcnRubF9maWxsX2lmaW5mb2AsIHdoaWNoIGl0c2VsZiBpcyBpbnZva2VkIGJ5IGBydG5sX2R1bXBfaWZpbmZvYCBhbmQgYHJ0bmxfZ2V0bGlua2AsIHNvIGBydG5sX2ZpbGxfaWZpbmZvYCBsb29rcyBsaWtlIGFub3RoZXIgaW1wb3J0YW50IHN5bWJvbCB0byBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBjaGVjayB3aGF0IGBydG5sX2ZpbGxfdmZpbmZvYCBpcyBiZWluZyBjYWxsZWQgZm9yIHRvby4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIFllcCwgYHJ0bmxfZmlsbF92ZmAgaXMgYHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50YC4gVGhlIGBub2lubGluZV9mb3Jfc3RhY2tgIGF0dHJpYnV0ZSBpcyBpbXBvcnRhbnQuIFRoYXQgbWVhbnMgaXQgd29uJiMzOTt0IGJlIGlubGluZWQsIHNvIGl0JiMzOTtsbCBoYXZlIGEgZGlzdGluY3QgYWRkcmVzcywgd2hpY2ggaXMgZ29vZCBmb3IgYW5hbHlzaXMuIFRoYXQgbWFrZXMgYHJ0bmxfZmlsbF92ZmAgYSBncmVhdCBmb2N1cyBzeW1ib2wuIEFuZCBgcnRubF9maWxsX2lmaW5mb2AgaXMgYWxzbyBzdGF0aWMsIGJ1dCBub3QgaW5saW5lZCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgbGFyZ2UgZnVuY3Rpb24uIEFscmlnaHQsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGZvciBgcnRubF9maWxsX2lmaW5mb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfZmlsbF9pZmluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0yMDQ5PXN0YXRpYyBpbnQgcnRubF9maWxsX2RwbGxfcGluKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA3MC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNzE6c3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDcyLVx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpzcmNfbmV0LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTI1MDU9c3RhdGljIGludCBydG5sX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTgwLVx0XHRcdGNvbnRpbnVlO1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjU4MTpcdFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgbmV0LCBSVE1fTkVXTElOSyxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1ODItXHRcdFx0XHQgICAgICAgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00MjMyPXN0YXRpYyBpbnQgcnRubF9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQzMDQtXHRpZiAobnNrYilcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzMDU6XHRcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8obnNrYiwgZGV2LCBuZXQsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzA2LVx0XHRcdFx0ICAgICAgIFJUTV9ORVdMSU5LLCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1MjU9c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU0NC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1NDU6XHRlcnIgPSBydG5sX2ZpbGxfaWZpbmZvKHNrYiwgZGV2LCBkZXZfbmV0KGRldiksXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTQ2LVx0XHRcdCAgICAgICB0eXBlLCBwb3J0aWQsIHNlcSwgY2hhbmdlLCAwLCAwLCBldmVudCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxOTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZ1bG5lcmFiaWxpdHkgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdywgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIG9uIGEgbmV0d29yayBkZXZpY2UuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBoaXRzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBhbmQgdGhlIHRyaWdnZXIgaW52b2x2ZXMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBmdXp6IHRoaXMuCgpGaXJzdCwgSSBpZGVudGlmaWVkIHNvbWUga2V5IHN5bWJvbHM6IGBydG5sX2ZpbGxfaWZpbmZvYCAoc3RhdGljKSwgYHJ0bmxfZ2V0bGlua2AgKHRoZSBuZXRsaW5rIGhhbmRsZXIgZm9yIGBSVE1fR0VUTElOS2ApLCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gICh0aGUgbmV0bGluayBkdW1wIGhhbmRsZXIgZm9yIGBSVE1fR0VUTElOS2ApLiBUaG9zZSB0d28gbmV0bGluayBoYW5kbGVycyBhcmUgcHJvYmFibHkgZ29pbmcgdG8gYmUgZ29vZCBwb2ludHMgdG8gZm9jdXMgb24uIEJ1dCB3YWl0LCBgcnRubF9maWxsX3ZmYCBpcyB0aGUgYWN0dWFsIGZ1bmN0aW9uIHRoYXQgZ290IG1vZGlmaWVkIGluIHRoZSBwYXRjaCwgc28gKnRoYXQmIzM5O3MqIHRoZSByZWFsIHRhcmdldC4gSXQmIzM5O3Mgc3RhdGljLCBidXQgdGhhdCYjMzk7cyBmaW5lIOKAkyB3ZSBjYW4gdXNlIGBub2lubGluZV9mb3Jfc3RhY2tgIHRvIHByZXZlbnQgaW5saW5pbmcuIFRoaXMgbWVhbnMgYHJ0bmxfZmlsbF92ZmAgaXMgcHJvYmFibHkgbXkgYmVzdCBmb2N1cyBzeW1ib2wuCgpPa2F5LCBsZXQmIzM5O3Mgc3VtbWFyaXplIHdoYXQgd2Uga25vdyBzbyBmYXI6CgoqICAgKipXb3J0aEZ1enppbmc6IFRydWUqKiAoRGVmaW5pdGVseSwgY29yZSBuZXR3b3JraW5nIHdpdGggYSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXMgYWx3YXlzIHdvcnRoIGNoZWNraW5nLikKKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBmaXhlcyBhIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB0aGF0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIG1hbnkgVmlydHVhbCBGdW5jdGlvbnMuIEl0JiMzOTtzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0JiMzOTtzIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgcnRubF9maWxsX3ZmYCwgYHJ0bmxfZ2V0bGlua2AsIGBydG5sX2R1bXBfaWZpbmZvYCAod2l0aCBgcnRubF9maWxsX3ZmYCBiZWluZyB0aGUgbW9zdCBpbXBvcnRhbnQpLgoqICAgKipFbmFibGVDb25maWdzOioqIGBORVRERVZTSU1gIChCZWNhdXNlIHRoYXQmIzM5O3MgYW4gb2J2aW91cyB3YXkgdG8gY3JlYXRlIG1hbnkgVkZzKS4KCkJ1dCBob2xkIG9uLiBBcmUgdGhlcmUgb3RoZXIgd2F5cyB0byBjcmVhdGUgVkZzIGJlc2lkZXMgdXNpbmcgYE5FVERFVlNJTWA/IFllcywgb2YgY291cnNlLCB0aGUgc3RhbmRhcmQgd2F5IGlzIHRocm91Z2ggYENPTkZJR19QQ0lfSU9WYCBmb3IgUENJIGRldmljZXMgd2l0aCBTUi1JT1Ygc3VwcG9ydC4gUUVNVSBzdXBwb3J0cyBTUi1JT1YgZm9yIGBpZ2JgIGFuZCBgbnZtZWAsIHNvIHRoaXMgaXMgYSBncmVhdCBhZGRpdGlvbi4KCkkmIzM5O2xsIGNoZWNrIGBDT05GSUdfUENJX0lPVmAgaW4gS2NvbmZpZyB0byBtYWtlIHN1cmUgaXQmIzM5O3MgdmFsaWQuIFRoaXMgYWRkcyBhbiBpbXBvcnRhbnQgY29uZmlnIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDSV9JT1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvS2NvbmZpZz0xNTQ9Y29uZmlnIFBDSV9CUklER0VfRU1VTFxuLS1cbmRyaXZlcnMvcGNpL0tjb25maWctMTU2LVxuZHJpdmVycy9wY2kvS2NvbmZpZzoxNTc6Y29uZmlnIFBDSV9JT1ZcbmRyaXZlcnMvcGNpL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtQQ0kgSU9WIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDAKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogNzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWaXJ0dWFsIEZ1bmN0aW9uIFJlcG9ydGluZyBpbiBOZXRsaW5rKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFuZCBOZXRsaW5rLiBGaXJzdCB0aGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIGBQQ0lfSU9WYCBpcyBhIGJvb2xlYW4sIHNvIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBJJiMzOTtsbCBhZGQgYm90aCBgUENJX0lPVmAgYW5kIGBORVRERVZTSU1gIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB0byBiZSBzdXJlLgoKSSYjMzk7bSBjaGVja2luZyB0aGUgYHJ0bmxfZmlsbF92ZmAgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gSXQmIzM5O3MgbWFya2VkIGFzIGBub2lubGluZV9mb3Jfc3RhY2tgLiBUaGUgZnVuY3Rpb25zIGBydG5sX2dldGxpbmtgIGFuZCBgcnRubF9kdW1wX2lmaW5mb2AgYXJlIHN0YXRpYywgYnV0IHJlZ2lzdGVyZWQgYXMgbmV0bGluayBoYW5kbGVycywgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSBub3QgaW5saW5lZCBlaXRoZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFZGIGluZm9ybWF0aW9uIGlzIHBvcHVsYXRlZCBhbmQgdHJhbnNtaXR0ZWQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBgQ09ORklHX05FVGAgaXMgYW4gb2J2aW91cyBiYXNlLiBgQ09ORklHX05FVERFVlNJTWAgaXMgdHJpc3RhdGUsIGFuZCBgQ09ORklHX1BDSV9JT1ZgIGlzIGEgYm9vbGVhbi4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYW55IG90aGVyIGRyaXZlcnMsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgc3VwcG9ydCBWRnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHZpcnRpb19uZXRgLCBidXQgdGhlbiBJIHJlY2FsbCB0aGF0IGB2aXJ0aW9fbmV0YCBpdHNlbGYgZG9lc24mIzM5O3QgaGF2ZSBWRnMuIEl0IGFjdHMgYXMgYSBWRiBvZiBhIHZpcnRpbyBQQ0kgZGV2aWNlLiBUaGUgZnVuY3Rpb24gYHZpcnRpb19kZXZfbnVtX3ZmYCByZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBWRnMgZnJvbSB0aGUgcGFyZW50IFBDSSBkZXZpY2UsIHdoaWNoIGlzIGFuIGltcG9ydGFudCBkZXRhaWwuIEJ1dCBgbmV0ZGV2c2ltYCBpcyB0aGUgbW9zdCBkaXJlY3QgbWV0aG9kIHRvIHRlc3QgdGhpcyBWRiBoYW5kbGluZy4KCkJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gVGhpcyBjb2RlIGluY2x1ZGVzIGEgbmV3IGNoZWNrIHdpdGhpbiB0aGUgVkYgbG9vcDoKYGBgYwppZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKil2ZmluZm8gJmd0OyBVMTZfTUFYKSB7CiAgICBubG1zZ190cmltKHNrYiwgbWFyayk7CiAgICBicmVhazsKfQpgYGAKVGhpcyBpcyBhIGNsZWFuLCBmdW5jdGlvbmFsIGNoYW5nZSBhaW1lZCBhdCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIG1hbGZvcm1lZCBOZXRsaW5rIG1lc3NhZ2VzIGJ5IGNoZWNraW5nIHRoZSBsZW5ndGggb2YgdGhlIGF0dHJpYnV0ZSBuZXN0LiBUaGlzIGFsc28gcHJldmVudHMgYSB0cnVuY2F0ZWQgbGlzdCBieSByZW1vdmluZyB0aGUgaXRlbSBjYXVzaW5nIHRoZSBpc3N1ZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHJvYnVzdG5lc3MuCgpNeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9sczogYHJ0bmxfZmlsbF92ZmAsIGBydG5sX2dldGxpbmtgLCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gLgoKQW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgYXJlOiBgTkVUREVWU0lNYCBhbmQgYFBDSV9JT1ZgLgoKSSYjMzk7bGwgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTU6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9maWxsX3ZmJiMzNDssCiAgICAmIzM0O3J0bmxfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfaWZpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9maWxsX3ZmJiMzNDssCiAgICAmIzM0O3J0bmxfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfaWZpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOTowNi44Mjg0MzcxNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDYzMjg4NDMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2ZpbGxfdmZcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjA2LjgyODQ0OTg0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2MTQzOTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzgzZjJlZGZmYmZkMmZlMmM1MjZhZjkzNDMxNDMwZTM1ZjgxMDE3NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNTozOTowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXFxuaW5kZXggMTJhYTNhYTE2ODhiMTMuLmJkMWQ2NWRjZjQyZmQ1IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXFxuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG5AQCAtMTY4NywxMCArMTY4NywyMiBAQCBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdmZzOyBpKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgY2hhciAqbWFyayA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTtcXG4rXFxuIFxcdFxcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XFxuIFxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEFuIGF0dHJpYnV0ZSBsZW5ndGggaXMgYSB1MTYsIHNvIHRoZSBuZXN0IGNhbm5vdCBkZXNjcmliZVxcbitcXHRcXHQgKiBtb3JlIHRoYW4gVTE2X01BWCBieXRlcy4gRHJvcCB0aGUgVkYgdGhhdCB3b3VsZCBvdmVyZmxvdyBpdFxcbitcXHRcXHQgKiBhbmQgc3RvcDogYSB0cnVuY2F0ZWQgbGlzdCBrZWVwcyB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZVxcbitcXHRcXHQgKiBwYXJzYWJsZSwgd2hlcmVhcyBhIHdyYXBwZWQgbmVzdCBsZW5ndGggZG9lcyBub3QuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKil2ZmluZm8gXFx1MDAzZSBVMTZfTUFYKSB7XFxuK1xcdFxcdFxcdG5sbXNnX3RyaW0oc2tiLCBtYXJrKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0bmxhX25lc3RfZW5kKHNrYiwgdmZpbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MDcuNDc1NzQzMjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3OTk4NTUwNDUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2ZpbGxfdmZcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4M2YyZWRmZmJmZDJmZTJjNTI2YWY5MzQzMTQzMGUzNWY4MTAxNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNTozOTowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDEyYWEzYWExNjg4YjEzLi5iZDFkNjVkY2Y0MmZkNSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTE2ODcsMTAgKzE2ODcsMjIgQEAgc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpKyspIHtcbitcdFx0dW5zaWduZWQgY2hhciAqbWFyayA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTtcbitcbiBcdFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcbiBcdFx0XHRubGFfbmVzdF9jYW5jZWwoc2tiLCB2ZmluZm8pO1xuIFx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXHRcdH1cbitcbitcdFx0LyogQW4gYXR0cmlidXRlIGxlbmd0aCBpcyBhIHUxNiwgc28gdGhlIG5lc3QgY2Fubm90IGRlc2NyaWJlXG4rXHRcdCAqIG1vcmUgdGhhbiBVMTZfTUFYIGJ5dGVzLiBEcm9wIHRoZSBWRiB0aGF0IHdvdWxkIG92ZXJmbG93IGl0XG4rXHRcdCAqIGFuZCBzdG9wOiBhIHRydW5jYXRlZCBsaXN0IGtlZXBzIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlXG4rXHRcdCAqIHBhcnNhYmxlLCB3aGVyZWFzIGEgd3JhcHBlZCBuZXN0IGxlbmd0aCBkb2VzIG5vdC5cbitcdFx0ICovXG4rXHRcdGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKXZmaW5mbyBcdTAwM2UgVTE2X01BWCkge1xuK1x0XHRcdG5sbXNnX3RyaW0oc2tiLCBtYXJrKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0fVxuIFxuIFx0bmxhX25lc3RfZW5kKHNrYiwgdmZpbmZvKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjA3LjQ3NTc0NjcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0ODMyNjIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHJ0bmV0bGluay5jIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBydG5sX2ZpbGxfdmYoKWAgZnVuY3Rpb24uIFRoZSBnaXN0IGlzLCBpdCdzIGFkZGluZyBhIHNhZmVndWFyZCBhZ2FpbnN0IHNvbWUga2luZCBvZiBhdHRyaWJ1dGUgbGVuZ3RoIG92ZXJmbG93IHdpdGhpbiB0aGUgYHZmaW5mb2AgbmVzdC4gVGhleSdyZSBkb2luZyB0aGlzIGJ5IGNoZWNraW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgdGFpbCBvZiB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIGFuZCB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiBgdmZpbmZvYC4gSWYgdGhpcyBkaWZmZXJlbmNlLCB3aGljaCByZXByZXNlbnRzIHRoZSB1c2VkIHNwYWNlLCBleGNlZWRzIGBVMTZfTUFYYCwgaXQgdHJpbXMgdGhlIHNvY2tldCBidWZmZXIgYW5kIGJyZWFrcyB0aGUgbG9vcC4gU291bmRzIGxpa2UgYSBnb29kIGRlZmVuc2UgYWdhaW5zdCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBJdCdzIHRoZSByaWdodCBraW5kIG9mIGRlZmVuc2l2ZSBjb2RpbmcuIE5vdyBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJ0bmxfZmlsbF92ZmAgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjEwLjgyNDA3Njg1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyMDk0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRubF9maWxsX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTE0OTc9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNTIwLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjE1MjE6c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjItXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjY3LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjE2Njg6c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTY2OS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTY5MS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNjkyOlxcdFxcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTY5My1cXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCB2ZmluZm8pO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjA3MT1zdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODYtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjE4NzpcXHRpZiAocnRubF9maWxsX3ZmKHNrYiwgZGV2LCBleHRfZmlsdGVyX21hc2spKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxODgtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjEwLjkyODI5NTMyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzY5OTU4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBOZXRsaW5rIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIGBydG5sX2ZpbGxfdmZgIGZ1bmN0aW9uLiBJdCdzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBydG5sX2ZpbGxfaWZpbmZvYCwgd2hpY2ggSSBrbm93IGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgbmV0bGluayBtZXNzYWdlcyByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGhhdCB0ZWxscyBtZSB0aGlzIGBydG5sX2ZpbGxfdmZgIGNvZGUgcGF0aCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZCDigJMgaXQncyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBpbnRlcmZhY2UgaW5mb3JtYXRpb24gZ2F0aGVyaW5nLiBJIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiBmb2N1c2VzIG9uIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIChWRikgYXNwZWN0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdmlydHVhbGl6YXRpb24uXG5cbk5vdywgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiByZWxhdGVkIHNwZWNpZmljYWxseSB0byBWRnMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHJpZXZlcyBhbmQgcmVwb3J0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGl0J3MgZXh0cmFjdGluZy4gVGltZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgcnRubF9maWxsX3ZmYCBpdHNlbGYgYW5kIHNlZSBleGFjdGx5IHdoYXQgaW5mb3JtYXRpb24gaXQncyBwYWNraW5nIGludG8gdGhvc2UgbmV0bGluayBtZXNzYWdlcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTYzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MTQuNTY1Mjk0NjQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTI3NzgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5sX2ZpbGxfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmM9MTQ5Nz1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE1MjAtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTUyMTpzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTUyMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NjctXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTY2ODpzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjY5LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjkxLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjE2OTI6XFx0XFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNjkzLVxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMDcxPXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjE4Ni1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMTg3OlxcdGlmIChydG5sX2ZpbGxfdmYoc2tiLCBkZXYsIGV4dF9maWx0ZXJfbWFzaykpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjE4OC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MTQuNzA2NTgyNzM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NDEwNDQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYHJ0bmxfZmlsbF92ZmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgZ3V0cyBvZiBgcnRubF9maWxsX3ZmYCBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgdmlydHVhbCBmdW5jdGlvbiAoVkYpIGluZm9ybWF0aW9uIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoZSBSVE5ldGxpbmsgZnJhbWV3b3JrLiBJIGV4cGVjdCB0byBzZWUgdGhlIHR5cGljYWwgUlROZXRsaW5rIGF0dHJpYnV0ZSBwb3B1bGF0aW9uIHByb2Nlc3MgaGVyZS4gSXQnbGwgcHJvYmFibHkgaW52b2x2ZSBhbGxvY2F0aW5nIGEgc2tiLCBwb3B1bGF0aW5nIGl0IHdpdGggdGhlIFZGLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGluZm9ybWF0aW9uLCBhbmQgdGhlbiBhdHRhY2hpbmcgaXQgdG8gdGhlIG5ldGxpbmsgbWVzc2FnZS4gSSdtIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWNzIG9mIHdoYXQgZGF0YSBpcyBiZWluZyByZXRyaWV2ZWQgdG8gZmlsbCB0aGUgbWVzc2FnZS4gSXMgdGhpcyBhbGwgdGhlIFZGJ3MgY29uZmlndXJhdGlvbiBvciBhIHN1YnNldD8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyBvciB0cmlja3MgYmVpbmcgdXNlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcGVyLVZGIGNvbmZpZ3VyYXRpb24gb3IgaXMgdGhpcyBtb3JlIGdlbmVyYWwsIG1heWJlIGRlc2NyaWJpbmcgdGhlIFZGJ3MgcmVsYXRpb25zaGlwIHRvIHRoZSBQRj8gSSBhbHNvIHdhbnQgdG8gc2VlIGhvdyBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZC4gQXJlIHRoZXJlIGNsZWFyIGNoZWNrcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXM/IEhvdyBhcmUgZXJyb3JzIGNvbW11bmljYXRlZCBiYWNrIHRvIHRoZSByZXF1ZXN0aW5nIHByb2Nlc3M/IEknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgaXQgZWZmaWNpZW50bHkgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIGEgVkYgbWlnaHQgbm90IGJlIHByZXNlbnQgb3Igbm90IGNvbmZpZ3VyZWQuIEhvcGVmdWxseSwgaXQgaXMgcm9idXN0IGFuZCBjbGVhbi4gTGV0J3Mgc2VlIGlmIHRoaXMgY29kZSBpcyBkb2luZyB3aGF0IEkgZXhwZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjkxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MTguMzgwNjkwNzY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjY4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjY4OlxcdHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE2Njk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4xNjcwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHUzMiBleHRfZmlsdGVyX21hc2spXFxuMTY3MTpcXHR7XFxuMTY3MjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp2ZmluZm87XFxuMTY3MzpcXHRcXHRpbnQgaSwgbnVtX3ZmcztcXG4xNjc0OlxcdFxcbjE2NzU6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWRldi5wYXJlbnQgfHwgKChleHRfZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfVkYpID09IDApKVxcbjE2NzY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTY3NzpcXHRcXG4xNjc4OlxcdFxcdG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cXHUwMDNlZGV2LnBhcmVudCk7XFxuMTY3OTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9WRiwgbnVtX3ZmcykpXFxuMTY4MDpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjE2ODE6XFx0XFxuMTY4MjpcXHRcXHRpZiAoIWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2dldF92Zl9jb25maWcpXFxuMTY4MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNjg0OlxcdFxcbjE2ODU6XFx0XFx0dmZpbmZvID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgSUZMQV9WRklORk9fTElTVCk7XFxuMTY4NjpcXHRcXHRpZiAoIXZmaW5mbylcXG4xNjg3OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMTY4ODpcXHRcXG4xNjg5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdmZzOyBpKyspIHtcXG4xNjkwOlxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKm1hcmsgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XFxuMTY5MTpcXHRcXG4xNjkyOlxcdFxcdFxcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XFxuMTY5MzpcXHRcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCB2ZmluZm8pO1xcbjE2OTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4xNjk1OlxcdFxcdFxcdH1cXG4xNjk2OlxcdFxcbjE2OTc6XFx0XFx0XFx0LyogQW4gYXR0cmlidXRlIGxlbmd0aCBpcyBhIHUxNiwgc28gdGhlIG5lc3QgY2Fubm90IGRlc2NyaWJlXFxuMTY5ODpcXHRcXHRcXHQgKiBtb3JlIHRoYW4gVTE2X01BWCBieXRlcy4gRHJvcCB0aGUgVkYgdGhhdCB3b3VsZCBvdmVyZmxvdyBpdFxcbjE2OTk6XFx0XFx0XFx0ICogYW5kIHN0b3A6IGEgdHJ1bmNhdGVkIGxpc3Qga2VlcHMgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2VcXG4xNzAwOlxcdFxcdFxcdCAqIHBhcnNhYmxlLCB3aGVyZWFzIGEgd3JhcHBlZCBuZXN0IGxlbmd0aCBkb2VzIG5vdC5cXG4xNzAxOlxcdFxcdFxcdCAqL1xcbjE3MDI6XFx0XFx0XFx0aWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopdmZpbmZvIFxcdTAwM2UgVTE2X01BWCkge1xcbjE3MDM6XFx0XFx0XFx0XFx0bmxtc2dfdHJpbShza2IsIG1hcmspO1xcbjE3MDQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTcwNTpcXHRcXHRcXHR9XFxuMTcwNjpcXHRcXHR9XFxuMTcwNzpcXHRcXG4xNzA4OlxcdFxcdG5sYV9uZXN0X2VuZChza2IsIHZmaW5mbyk7XFxuMTcwOTpcXHRcXHRyZXR1cm4gMDtcXG4xNzEwOlxcdH1cXG4xNzExOlxcdFxcbjE3MTI6XFx0c3RhdGljIGludCBydG5sX2ZpbGxfbGlua19pZm1hcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE3MTM6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xNzE0OlxcdHtcXG4xNzE1OlxcdFxcdHN0cnVjdCBydG5sX2xpbmtfaWZtYXAgbWFwO1xcbjE3MTY6XFx0XFxuMTcxNzpcXHRcXHRtZW1zZXQoXFx1MDAyNm1hcCwgMCwgc2l6ZW9mKG1hcCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOToxOC4zODIyOTkyMTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk0NjY3MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmlydHVhbCBGdW5jdGlvbiBOZXRsaW5rIE1lc3NhZ2UgQ29uc3RydWN0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgaXNzdWUsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjdWxwcml0IGlzIHJlc2lkaW5nIHdpdGhpbiBgcnRubF9maWxsX3ZmYC4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhlIGRldGFpbHMgYWJvdXQgVmlydHVhbCBGdW5jdGlvbnMgYXJlIGdldHRpbmcgYWRkZWQgdG8gdGhlIG5ldGxpbmsgbWVzc2FnZSwgd2hpY2gsIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIGlzIHRyaWdnZXJlZCBieSBjb21tYW5kcyBsaWtlIGBpcCBsaW5rIHNob3dgLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdG8gYmUgYSBwcm9ibGVtIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWFueSBWaXJ0dWFsIEZ1bmN0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgY2VudGVyZWQgYXJvdW5kIGhvdyBuZXRsaW5rIG1lc3NhZ2VzIGFyZSBjb25zdHJ1Y3RlZC4gSSB3b25kZXIgaWYgdGhlcmUncyBhbiBpbnRlcm5hbCBidWZmZXIgb3ZlcmZsb3cgb3Igc29tZXRoaW5nIHNpbWlsYXIgaGFwcGVuaW5nIHdoZW4gd2UgaGF2ZSBhIGhpZ2ggbnVtYmVyIG9mIFZGcy4gVG8gcmVwbGljYXRlIHRoaXMsIEknbGwgZGVmaW5pdGVseSBuZWVkIGEgYG5ldF9kZXZpY2VgIHdpdGggYSBsYXJnZSBudW1iZXIgb2YgVmlydHVhbCBGdW5jdGlvbnMuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhlIG51bWJlciBvZiBWRnMgcG9zc2libGUsIEkgc2hvdWxkIGNoZWNrIHRoZSBgQ09ORklHX1BDSV9JT1ZgIGNvbmZpZ3VyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gbG9vayBhdCBgZGV2X251bV92ZmAgdG8gc2VlIGhvdyB0aGF0J3MgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjIyLjM3Njk2OTg3MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyODg3MzE5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfbnVtX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW8uYz00MDQ9c3RhdGljIHZvaWQgdmlydGlvX2Rldl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpfZClcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQzNy1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0Mzg6c3RhdGljIGludCB2aXJ0aW9fZGV2X251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDM5LXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ0MS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0NDI6XFx0cmV0dXJuIGRldl9udW1fdmYodmRldi1cXHUwMDNlZGV2LnBhcmVudCk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDQzLX1cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQ0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlIHZpcnRpb19idXMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00NTQtXFx0LnNodXRkb3duID0gdmlydGlvX2Rldl9zaHV0ZG93bixcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0NTU6XFx0Lm51bV92ZiA9IHZpcnRpb19kZXZfbnVtX3ZmLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ1Ni19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9kZXZpY2UuaD0xMjczPXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICpkZXZfb2Zfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RldmljZS5oLTEyNzktXFxuaW5jbHVkZS9saW51eC9kZXZpY2UuaDoxMjgwOnN0YXRpYyBpbmxpbmUgaW50IGRldl9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI4MS17XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xMTQ3PXN0YXRpYyBpbmxpbmUgaW50IHJ0bmxfdmZpbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTExNTAtXFx0aWYgKGRldi1cXHUwMDNlZGV2LnBhcmVudCBcXHUwMDI2XFx1MDAyNiAoZXh0X2ZpbHRlcl9tYXNrIFxcdTAwMjYgUlRFWFRfRklMVEVSX1ZGKSkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjExNTE6XFx0XFx0aW50IG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cXHUwMDNlZGV2LnBhcmVudCk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE1Mi1cXHRcXHRzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKDApO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTE5NT1zdGF0aWMgc2l6ZV90IHJ0bmxfcG9ydF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMjEyLVxcdFxcdHJldHVybiAwO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjEyMTM6XFx0aWYgKGRldl9udW1fdmYoZGV2LVxcdTAwM2VkZXYucGFyZW50KSlcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMjE0LVxcdFxcdHJldHVybiBwb3J0X3NlbGZfc2l6ZSArIHZmX3BvcnRzX3NpemUgK1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjEyMTU6XFx0XFx0XFx0dmZfcG9ydF9zaXplICogZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEyMTYtXFx0ZWxzZVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTM2NT1zdGF0aWMgaW50IHJ0bmxfdmZfcG9ydHNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTM3NS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMzc2OlxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIGRldl9udW1fdmYoZGV2LVxcdTAwM2VkZXYucGFyZW50KTsgdmYrKykge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzNzctXFx0XFx0dmZfcG9ydCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElGTEFfVkZfUE9SVCk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xNDIxPXN0YXRpYyBpbnQgcnRubF9wb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0MzMtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTQzNDpcXHRpZiAoZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTQzNS1cXHRcXHRlcnIgPSBydG5sX3ZmX3BvcnRzX2ZpbGwoc2tiLCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTY2OD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NzctXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTY3ODpcXHRudW1fdmZzID0gZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE2NzktXFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fVkYsIG51bV92ZnMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOToyNS4yMDU4NTY4NTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMjc0NjYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIERldmljZSBWaXJ0dWFsIEZ1bmN0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgZGV2X251bV92ZmAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiB0aGUga2VybmVsJ3MgZGV2aWNlIG1vZGVsLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhlIGNvcmUgZGV2aWNlIHN0cnVjdHVyZSBsaXZlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBkZXZfbnVtX3ZmYCB2YXJpYWJsZSBpcyBhbmQgaG93IGl0J3MgZGVmaW5lZC4gTXkgZmlyc3Qgc3RvcCB3aWxsIGJlIGBpbmNsdWRlL2xpbnV4L2RldmljZS5oYC4gVGhhdCBoZWFkZXIgZmlsZSBpcyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIHRoZSBjb3JlIGBkZXZpY2VgIHN0cnVjdHVyZSBhbmQgYXNzb2NpYXRlZCBmaWVsZHMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24gb2YgYGRldl9udW1fdmZgIHRoZXJlLCBwcm9iYWJseSBhcyBhIG1lbWJlciBvZiBhIHN0cnVjdHVyZSBvciBwZXJoYXBzIGFzIGEgbWFjcm8gcmVsYXRlZCB0byB2aXJ0dWFsIGZ1bmN0aW9ucy4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvbW1lbnRzLCBhcyB0aGV5IHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIHB1cnBvc2UgYW5kIHVzYWdlIG9mIHRoaXMgdmFyaWFibGUsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdmlydHVhbCBmdW5jdGlvbnMuIFRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpbiB0aGlzIGhlYWRlciBmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgbG93ZXN0IGxldmVsIGFuZCwgZnJvbSB0aGF0IHBvaW50LCBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG15IGN1cnJlbnQgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjI4LjYzODYwNzg4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg1MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZGV2aWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI3MDpcXHR2b2lkIGRldmljZV9zZXRfb2Zfbm9kZV9mcm9tX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldjIpO1xcbjEyNzE6XFx0c3RydWN0IGRldmljZSAqZ2V0X2Rldl9mcm9tX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG4xMjcyOlxcdFxcbjEyNzM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9vZl9ub2RlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4xMjc0OlxcdHtcXG4xMjc1OlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfT0YpIHx8ICFkZXYpXFxuMTI3NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMjc3OlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZW9mX25vZGU7XFxuMTI3ODpcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdHN0YXRpYyBpbmxpbmUgaW50IGRldl9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbjEyODE6XFx0e1xcbjEyODI6XFx0XFx0aWYgKGRldi1cXHUwMDNlYnVzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlYnVzLVxcdTAwM2VudW1fdmYpXFxuMTI4MzpcXHRcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VidXMtXFx1MDAzZW51bV92ZihkZXYpO1xcbjEyODQ6XFx0XFx0cmV0dXJuIDA7XFxuMTI4NTpcXHR9XFxuMTI4NjpcXHRcXG4xMjg3OlxcdC8qXFxuMTI4ODpcXHQgKiBSb290IGRldmljZSBvYmplY3RzIGZvciBncm91cGluZyB1bmRlciAvc3lzL2RldmljZXNcXG4xMjg5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOToyOC42NDA1OTg1MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTkxNTA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnR1YWwgRnVuY3Rpb24gTnVtYmVyIFJldHJpZXZhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRldl9udW1fdmZgIGZ1bmN0aW9uIGNhbGwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyBnb2luZyB0aHJvdWdoIHRoZSBkZXZpY2UncyBidXMgdG8gZ2V0IHRoZSBudW1iZXIgb2YgdmlydHVhbCBmdW5jdGlvbnMuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoZSBrZXkgaXMgaW4gaG93IHRoZSBidXMgaGFuZGxlcyB0aGlzIHJlcXVlc3QuIEl0J3MgY2FsbGluZyBgZGV2LVx1MDAzZWJ1cy1cdTAwM2VudW1fdmYoZGV2KWAuIFNpbmNlIHdlIGFyZSB0YWxraW5nIGFib3V0IFBDSSBkZXZpY2VzLCBhbmQga25vd2luZyBQQ0kgYnVzc2VzIGFyZSBhIGNvbW1vbiB0eXBlIG9mIGRldmljZSwgYHBjaV9idXNfdHlwZWAgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUuICBJIG5lZWQgdG8gY2hlY2sgaG93IGBudW1fdmZgIGlzIGltcGxlbWVudGVkIGZvciBgcGNpX2J1c190eXBlYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmNgIGZpbGUgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhhdCBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjMyLjU0MjUxODI2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5MTY4MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bV92ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYz00Nj1zdGF0aWMgaW50IGRpc2FibGVfc2xvdChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QpXFxuLS1cXG5kcml2ZXJzL3BjaS9ob3RwbHVnL3MzOTBfcGNpX2hwYy5jLTU5LVxcdHBkZXYgPSBwY2lfZ2V0X3Nsb3QoemRldi1cXHUwMDNlemJ1cy1cXHUwMDNlYnVzLCB6ZGV2LVxcdTAwM2VkZXZmbik7XFxuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYzo2MDpcXHRpZiAocGRldiBcXHUwMDI2XFx1MDAyNiBwY2lfbnVtX3ZmKHBkZXYpKSB7XFxuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYy02MS1cXHRcXHRyYyA9IC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lkZS5jPTIzOT1zdHJ1Y3QgcGNpX2lkZSAqcGNpX2lkZV9zdHJlYW1fYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS9pZGUuYy0yNDctXFx0c3RydWN0IHBjaV9kZXYgKnJwLCAqYnI7XFxuZHJpdmVycy9wY2kvaWRlLmM6MjQ4OlxcdGludCBudW1fdmYsIHJpZF9lbmQ7XFxuZHJpdmVycy9wY2kvaWRlLmMtMjQ5LVxcbi0tXFxuZHJpdmVycy9wY2kvaWRlLmMtMjgwLVxcdC8qIGZvciBTUi1JT1YgY2FzZSwgY292ZXIgYWxsIFZGcyAqL1xcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MTpcXHRudW1fdmYgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MjpcXHRpZiAobnVtX3ZmKVxcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MzpcXHRcXHRyaWRfZW5kID0gUENJX0RFVklEKHBjaV9pb3ZfdmlydGZuX2J1cyhwZGV2LCBudW1fdmYgLSAxKSxcXG5kcml2ZXJzL3BjaS9pZGUuYzoyODQ6XFx0XFx0XFx0XFx0ICAgIHBjaV9pb3ZfdmlydGZuX2RldmZuKHBkZXYsIG51bV92ZiAtIDEpKTtcXG5kcml2ZXJzL3BjaS9pZGUuYy0yODUtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmM9NDQxPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ0NS1cXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcXG5kcml2ZXJzL3BjaS9pb3YuYzo0NDY6XFx0dTE2IG51bV92ZnM7XFxuZHJpdmVycy9wY2kvaW92LmMtNDQ3LVxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtNDQ5LVxcdGRldmljZV9sb2NrKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MDpcXHRudW1fdmZzID0gcGRldi1cXHUwMDNlc3Jpb3YtXFx1MDAzZW51bV9WRnM7XFxuZHJpdmVycy9wY2kvaW92LmMtNDUxLVxcdGRldmljZV91bmxvY2soXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9wY2kvaW92LmMtNDUyLVxcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MzpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgbnVtX3Zmcyk7XFxuZHJpdmVycy9wY2kvaW92LmMtNDU0LX1cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1Ni0vKlxcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1NzogKiBudW1fdmZzIFxcdTAwM2UgMDsgbnVtYmVyIG9mIFZGcyB0byBlbmFibGVcXG5kcml2ZXJzL3BjaS9pb3YuYzo0NTg6ICogbnVtX3ZmcyA9IDA7IGRpc2FibGUgYWxsIFZGc1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1OS0gKlxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmM9NDYzPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy00NjgtXFx0aW50IHJldCA9IDA7XFxuZHJpdmVycy9wY2kvaW92LmM6NDY5OlxcdHUxNiBudW1fdmZzO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3MC1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzE6XFx0aWYgKGtzdHJ0b3UxNihidWYsIDAsIFxcdTAwMjZudW1fdmZzKSBcXHUwMDNjIDApXFxuZHJpdmVycy9wY2kvaW92LmMtNDcyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3My1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzQ6XFx0aWYgKG51bV92ZnMgXFx1MDAzZSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3NS1cXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3OC1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0Nzk6XFx0aWYgKG51bV92ZnMgPT0gcGRldi1cXHUwMDNlc3Jpb3YtXFx1MDAzZW51bV9WRnMpXFxuZHJpdmVycy9wY2kvaW92LmMtNDgwLVxcdFxcdGdvdG8gZXhpdDtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ5NS1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0OTY6XFx0aWYgKG51bV92ZnMgPT0gMCkge1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ5Ny1cXHRcXHQvKiBkaXNhYmxlIFZGcyAqL1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtNTA2LVxcdFxcdHBjaV93YXJuKHBkZXYsIFxcXCIlZCBWRnMgYWxyZWFkeSBlbmFibGVkLiBEaXNhYmxlIGJlZm9yZSBlbmFibGluZyAlZCBWRnNcXFxcblxcXCIsXFxuZHJpdmVycy9wY2kvaW92LmM6NTA3OlxcdFxcdFxcdCBwZGV2LVxcdTAwM2Vzcmlvdi1cXHUwMDNlbnVtX1ZGcywgbnVtX3Zmcyk7XFxuZHJpdmVycy9wY2kvaW92LmMtNTA4LVxcdFxcdHJldCA9IC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxMi1cXHRwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk7XFxuZHJpdmVycy9wY2kvaW92LmM6NTEzOlxcdHJldCA9IHBkZXYtXFx1MDAzZWRyaXZlci1cXHUwMDNlc3Jpb3ZfY29uZmlndXJlKHBkZXYsIG51bV92ZnMpO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTUxNC1cXHRwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo1MTg6XFx0aWYgKHJldCAhPSBudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxOS1cXHRcXHRwY2lfd2FybihwZGV2LCBcXFwiJWQgVkZzIHJlcXVlc3RlZDsgb25seSAlZCBlbmFibGVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvcGNpL2lvdi5jOjUyMDpcXHRcXHRcXHQgbnVtX3ZmcywgcmV0KTtcXG5kcml2ZXJzL3BjaS9pb3YuYy01MjEtXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYz02MTM9Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzcmlvdl9wZl9kZXZfYXR0cl9ncm91cCA9IHtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYxNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo2MTg6aW50IF9fd2VhayBwY2liaW9zX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXFxuZHJpdmVycy9wY2kvaW92LmMtNjE5LXtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTYyMz1pbnQgX193ZWFrIHBjaWJpb3Nfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYyNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo2Mjg6c3RhdGljIGludCBzcmlvdl9hZGRfdmZzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYyOS17XFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy02MzUtXFxuZHJpdmVycy9wY2kvaW92LmM6NjM2OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdmZzOyBpKyspIHtcXG5kcml2ZXJzL3BjaS9pb3YuYy02MzctXFx0XFx0cmMgPSBwY2lfaW92X2FkZF92aXJ0Zm4oZGV2LCBpKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTExOTA9RVhQT1JUX1NZTUJPTF9HUEwocGNpX2Rpc2FibGVfc3Jpb3YpO1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtMTE5Mi0vKipcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMTkzOiAqIHBjaV9udW1fdmYgLSByZXR1cm4gbnVtYmVyIG9mIFZGcyBhc3NvY2lhdGVkIHdpdGggYSBQRiBkZXZpY2VfcmVsZWFzZV9kcml2ZXJcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk0LSAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk3LSAqL1xcbmRyaXZlcnMvcGNpL2lvdi5jOjExOTg6aW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldilcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk5LXtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEyMDQtfVxcbmRyaXZlcnMvcGNpL2lvdi5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwocGNpX251bV92Zik7XFxuZHJpdmVycy9wY2kvaW92LmMtMTIwNi1cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTEzNTg9RVhQT1JUX1NZTUJPTF9HUEwocGNpX2lvdl92Zl9iYXJfc2V0X3NpemUpO1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2MC0vKipcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzYxOiAqIHBjaV9pb3ZfdmZfYmFyX2dldF9zaXplcyAtIGdldCBWRiBCQVIgc2l6ZXMgYWxsb3dpbmcgdG8gY3JlYXRlIHVwIHRvIG51bV92ZnNcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzYyLSAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2My0gKiBAcmVzbm86IHRoZSByZXNvdXJjZSBudW1iZXJcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzY0OiAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2NS0gKlxcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNjY6ICogR2V0IHRoZSBzaXplcyBvZiBhIFZGIHJlc2l6YWJsZSBCQVIgdGhhdCBjYW4gYWNjb21tb2RhdGUgQG51bV92ZnMgd2l0aGluXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2Ny0gKiB0aGUgY3VycmVudGx5IGFzc2lnbmVkIHNpemUgb2YgdGhlIHJlc291cmNlIEByZXNuby5cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzEtICovXFxuZHJpdmVycy9wY2kvaW92LmM6MTM3Mjp1MzIgcGNpX2lvdl92Zl9iYXJfZ2V0X3NpemVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubywgaW50IG51bV92ZnMpXFxuZHJpdmVycy9wY2kvaW92LmMtMTM3My17XFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzc2LVxcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNzc6XFx0aWYgKCFudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzgtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9wY2kvaW92LmMtMTM3OS1cXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzgwOlxcdGRvX2Rpdih2Zl9sZW4sIG51bV92ZnMpO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTEzODEtXFx0c2l6ZXMgPSAocm91bmR1cF9wb3dfb2ZfdHdvKHZmX2xlbiArIDEpIC0gMSkgXFx1MDAzZVxcdTAwM2UgaWxvZzIoU1pfMU0pO1xcbi0tXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jPTE2MjU9dm9pZCBwY2lfdWV2ZW50X2VycyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBwY2lfZXJzX3Jlc3VsdCBlcnJfdHlwZSlcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU1LVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNjU2OnN0YXRpYyBpbnQgcGNpX2J1c19udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU3LXtcXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTY1ODpcXHRyZXR1cm4gcGNpX251bV92Zih0b19wY2lfZGV2KGRldikpO1xcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU5LX1cXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYz0xNzI2PWNvbnN0IHN0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTczOC1cXHQucG1cXHRcXHQ9IFBDSV9QTV9PUFNfUFRSLFxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNzM5OlxcdC5udW1fdmZcXHRcXHQ9IHBjaV9idXNfbnVtX3ZmLFxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzQwLVxcdC5kbWFfY29uZmlndXJlXFx0PSBwY2lfZG1hX2NvbmZpZ3VyZSxcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jPTE2ODE9c3RhdGljIHNzaXplX3QgX19yZXNvdXJjZV9yZXNpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbixcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jLTE2OTYtXFx0ZGV2aWNlX2xvY2soZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYzoxNjk3OlxcdGlmIChkZXYtXFx1MDAzZWRyaXZlciB8fCBwY2lfbnVtX3ZmKHBkZXYpKSB7XFxuZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMtMTY5OC1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL3BjaS90c20uYz03OT1zdGF0aWMgdm9pZCBwY2lfdHNtX3dhbGtfZm5zKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9wY2kvdHNtLmMtOTUtXFx0XFx0Lyogd2FsayB2aXJ0dWFsIGZ1bmN0aW9ucyBvZiBlYWNoIHBmICovXFxuZHJpdmVycy9wY2kvdHNtLmM6OTY6XFx0XFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyBwY2lfbnVtX3ZmKHBmKTsgaisrKSB7XFxuZHJpdmVycy9wY2kvdHNtLmMtOTctXFx0XFx0XFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxcbi0tXFxuZHJpdmVycy9wY2kvdHNtLmM9MTE4PXN0YXRpYyB2b2lkIHBjaV90c21fd2Fsa19mbnNfcmV2ZXJzZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvcGNpL3RzbS5jLTEzNS1cXHRcXHQvKiByZXZlcnNlIHdhbGsgdmlydHVhbCBmdW5jdGlvbnMgKi9cXG5kcml2ZXJzL3BjaS90c20uYzoxMzY6XFx0XFx0Zm9yIChpbnQgaiA9IHBjaV9udW1fdmYocGYpIC0gMTsgaiBcXHUwMDNlPSAwOyBqLS0pIHtcXG5kcml2ZXJzL3BjaS90c20uYy0xMzctXFx0XFx0XFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOTozMy4xMDE2OTI3NTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4NjIyMzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gVmlydHVhbCBGdW5jdGlvbiBFbnVtZXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKSBhdmFpbGFibGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgcGNpX251bV92ZmAuIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyB1bHRpbWF0ZWx5IHB1bGxpbmcgdGhlIHZhbHVlIGZyb20gYHBkZXYtXHUwMDNlc3Jpb3YtXHUwMDNlbnVtX1ZGc2AuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIHN0b3JlIHRoYXQgaW5mb3JtYXRpb24gd2hlbiBTUi1JT1YgaXMgYWN0aXZlIG9uIGEgUENJIGRldmljZS5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaG93IGRvIHdlIHRyaWdnZXIgdGhpcyBiZWhhdmlvciBpbiBvdXIgUUVNVSBlbnZpcm9ubWVudCBmb3IgdGVzdGluZz8gVGhhbmtmdWxseSwgUUVNVSBpcyBwcmV0dHkgZ29vZCBhYm91dCBzdXBwb3J0aW5nIFNSLUlPViBlbXVsYXRpb24sIGVzcGVjaWFsbHkgZm9yIGRldmljZXMgbGlrZSB0aGUgYGlnYmAgYW5kIGBudm1lYCBlbXVsYXRlZCBOSUNzLiBXZSBjYW4gZGVmaW5pdGVseSBleHBsb3JlIHRob3NlIGFzIHRlc3QgY2FuZGlkYXRlcy4gQW5kLCBvZiBjb3Vyc2UsIHdlIGhhdmUgZGV2aWNlcyBsaWtlIHZpcnRpbywgd2hpY2ggYXJlIGFsc28gdmlydHVhbCwgYW5kIHRodXMgbW9yZSBkaXJlY3RseSBjb250cm9sbGVkIGJ5IHRoZSBoeXBlcnZpc29yLlxuXG5IbW0sIGxldCBtZSBkb3VibGUtY2hlY2sgaG93IHZpcnRpbyBoYW5kbGVzIFZGIGVudW1lcmF0aW9u4oCmQWgsIHllcywgYHZpcnRpb19kZXZfbnVtX3ZmYCBpcyBzaW1wbHkgcmV0dXJuaW5nIGBkZXZfbnVtX3ZmKHZkZXYtXHUwMDNlZGV2LnBhcmVudClgLiBUaGlzIGNsYXJpZmllcyBpdCBwZXJmZWN0bHk6IHRoZSB2aXJ0aW8gZGV2aWNlIGluaGVyaXRzIHRoZSBWRiBjYXBhYmlsaXR5IGZyb20gaXRzIHBhcmVudCBQQ0kgZGV2aWNlLiBTbywgaWYgdGhlIHBhcmVudCAoZW11bGF0ZWQgUENJIGRldmljZSkgaGFzIFNSLUlPViBlbmFibGVkLCB2aXJ0aW8gZXhwb3NlcyBWRnMgYXMgYSBjaGlsZCBkZXZpY2UuXG5cbk5vdywgYW4gaW50ZXJlc3RpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgaXMgYG5ldGRldnNpbWAuIERvZXMgYG5ldGRldnNpbWAsIGFzIGEgZnVsbHkgc29mdHdhcmUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlLCBleHBvc2UgdmlydHVhbCBmdW5jdGlvbnM/IFRoYXQncyB0aGUgbmV4dCBhdmVudWUgdG8gZXhwbG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MzcuNzg3OTE5OTEyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwMjYyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3Jpb3ZfbnVtdmZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTYwPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBuc2ltX2J1c19kZXZfbnVtdmZzX2F0dHIgPVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo2MTpcXHRfX0FUVFIoc3Jpb3ZfbnVtdmZzLCAwNjY0LCBuc2ltX2J1c19kZXZfbnVtdmZzX3Nob3csXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTYyLVxcdCAgICAgICBuc2ltX2J1c19kZXZfbnVtdmZzX3N0b3JlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6MzcuODkxOTU0ODgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTc1ODE0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqU1ItSU9WIEludmVzdGlnYXRpb24qKlxuXG5SaWdodCwgKm5ldGRldnNpbSouLi4gSSByZWNhbGwgdGhhdCBkcml2ZXIgaGF2aW5nIHNvbWUgaW50ZXJlc3RpbmcgcHJvcGVydGllcy4gQWgsIHllcyEgVGhlIGBzcmlvdl9udW12ZnNgIGF0dHJpYnV0ZS4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU1ItSU9WIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZCB3aXRoaW4gdGhhdCBkcml2ZXIuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBNeSBuZXh0IHN0b3AgaXMgZGVmaW5pdGVseSBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jYC4gSSBleHBlY3QgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgc2ltdWxhdGVkIGJ1cyBhbmQsIGNvbnNlcXVlbnRseSwgdGhlIFNSLUlPViBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdmlydHVhbCBmdW5jdGlvbnMgd2lsbCByZXNpZGUuIEnigJlsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGF0dHJpYnV0ZSBpcyBleHBvc2VkLCBzZXQsIGFuZCB1c2VkIHdpdGhpbiB0aGUgc2ltdWxhdGlvbiBjb250ZXh0LiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBmb3JtdWxhdGUgYSBwbGFuIHRvIGRldGVybWluZSBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGF0dHJpYnV0ZXMgd2l0aGluIG5ldGRldnNpbSB3aWxsIGFmZmVjdCB0aGUgcmVzdWx0YW50IGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOTo0MS41ODk1MzkzNTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODUyNjAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudW1fdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM9MzE9bnNpbV9idXNfZGV2X251bXZmc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM0LVxcdHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiA9IHRvX25zaW1fYnVzX2RldihkZXYpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzozNTpcXHR1bnNpZ25lZCBpbnQgbnVtX3ZmcztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtMzYtXFx0aW50IHJldDtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtMzctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjM4OlxcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcXHUwMDI2bnVtX3Zmcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDQtXFx0aWYgKGRldl9nZXRfZHJ2ZGF0YShkZXYpKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0NTpcXHRcXHRyZXQgPSBuc2ltX2Rydl9jb25maWd1cmVfdmZzKG5zaW1fYnVzX2RldiwgbnVtX3Zmcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ2LVxcdGRldmljZV91bmxvY2soZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz01Mj1uc2ltX2J1c19kZXZfbnVtdmZzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTU2LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo1NzpcXHRyZXR1cm4gc3ByaW50ZihidWYsIFxcXCIldVxcXFxuXFxcIiwgbnNpbV9idXNfZGV2LVxcdTAwM2VudW1fdmZzKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNTgtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTQyMz1zdGF0aWMgdm9pZCBuc2ltX2J1c19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQyOS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDMwOnN0YXRpYyBpbnQgbnNpbV9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MzEte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQzMy1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDM0OlxcdHJldHVybiBuc2ltX2J1c19kZXYtXFx1MDAzZW51bV92ZnM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQzNS19XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM9NDM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgbnNpbV9idXMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDQyLVxcdC5yZW1vdmVcXHRcXHQ9IG5zaW1fYnVzX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDQzOlxcdC5udW1fdmZcXHRcXHQ9IG5zaW1fbnVtX3ZmLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00NDQtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz02MD11bnNpZ25lZCBpbnQgbnNpbV9kZXZfZ2V0X3ZmcyhzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTY0LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2NTpcXHRyZXR1cm4gbnNpbV9kZXYtXFx1MDAzZW5zaW1fYnVzX2Rldi1cXHUwMDNlbnVtX3ZmcztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNjYtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTY4PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjY5Om5zaW1fYnVzX2Rldl9zZXRfdmZzKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiwgdW5zaWduZWQgaW50IG51bV92ZnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTcwLXtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNzEtXFx0cnRubF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjcyOlxcdG5zaW1fYnVzX2Rldi1cXHUwMDNlbnVtX3ZmcyA9IG51bV92ZnM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTczLVxcdHJ0bmxfdW5sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTg2MT1pbnQgbnNpbV9kcnZfY29uZmlndXJlX3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4NjI6XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG51bV92ZnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NjMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NjgtXFx0ZGV2bF9sb2NrKGRldmxpbmspO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODY5OlxcdGlmIChuc2ltX2J1c19kZXYtXFx1MDAzZW51bV92ZnMgPT0gbnVtX3ZmcylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3MC1cXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODcxOlxcdGlmIChuc2ltX2J1c19kZXYtXFx1MDAzZW51bV92ZnMgXFx1MDAyNlxcdTAwMjYgbnVtX3Zmcykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODcyLVxcdFxcdHJldCA9IC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODc0LVxcdH1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg3NTpcXHRpZiAobnNpbV9idXNfZGV2LVxcdTAwM2VtYXhfdmZzIFxcdTAwM2MgbnVtX3Zmcykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODc2LVxcdFxcdHJldCA9IC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3OS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg4MDpcXHRuc2ltX2J1c19kZXZfc2V0X3Zmcyhuc2ltX2J1c19kZXYsIG51bV92ZnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODgxLVxcdGlmIChuc2ltX2Vzd19tb2RlX2lzX3N3aXRjaGRldihuc2ltX2RldikpIHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg4MjpcXHRcXHRpZiAobnVtX3Zmcykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODgzLVxcdFxcdFxcdHJldCA9IG5zaW1fZXN3X3N3aXRjaGRldl9lbmFibGUobnNpbV9kZXYsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTM5OT1pbnQgbnNpbV9kcnZfY29uZmlndXJlX3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQwMDpcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3Zmcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NzU9c3RydWN0IG5zaW1fYnVzX2RldiB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDgzLVxcdHVuc2lnbmVkIGludCBtYXhfdmZzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0ODQ6XFx0dW5zaWduZWQgaW50IG51bV92ZnM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4NS1cXHRib29sIGluaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjQxLjcwODA3NjYyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjM4NzUyODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGRldnNpbSBWRiBDcmVhdGlvbiBhbmQgdGhlIFJlbGF0ZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBuZXRkZXZzaW1gIHByb3ZpZGVzIGEgcmVhbGx5IGNvbnZlbmllbnQgd2F5IHRvIHNwaW4gdXAgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykhIFRoYXQncyBleGNlbGxlbnQuIEkgY2FuIGp1c3Qgd3JpdGUgdG8gYC9zeXMvYnVzL25ldGRldnNpbS9kZXZpY2VzL25ldGRldnNpbVgvc3Jpb3ZfbnVtdmZzYCBhbmQgaW5zdGFudGlhdGUgdGhlbS4gUGVyZmVjdCBmb3IgcXVpY2sgdGVzdGluZy5cblxuVGhlbiwgdGhlIGFwcHJvYWNoIGlzIHRvIGhpdCB0aGUgc3lzdGVtIHdpdGggYSBuZXRsaW5rIGBSVE1fR0VUTElOS2AgdG8gdHJpZ2dlciBgcnRubF9maWxsX3ZmYC4gVGhpcyBzaG91bGQgYmUgZWFzaWx5IGFjaGlldmFibGUgYW5kIHRlc3RhYmxlIHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcsIHdoaWNoIGlzIGZhbnRhc3RpYyBmb3IgaXRlcmF0aW5nIHF1aWNrbHkuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGF0IGBydG5sX2ZpbGxfdmZgIGZ1bmN0aW9uLi4uXG5gYGBjXG5cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV92ZnM7IGkrKykge1xuXHRcdHVuc2lnbmVkIGNoYXIgKm1hcmsgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XG5cblx0XHRpZiAocnRubF9maWxsX3ZmaW5mbyhza2IsIGRldiwgaSwgZXh0X2ZpbHRlcl9tYXNrKSkge1xuXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcblx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG5cdFx0fVxuXG5cdFx0LyogQW4gYXR0cmlidXRlIGxlbmd0aCBpcyBhIHUxNiwgc28gdGhlIG5lc3QgY2Fubm90IGRlc2NyaWJlXG5cdFx0ICogbW9yZSB0aGFuIFUxNl9NQVggYnl0ZXMuIERyb3AgdGhlIFZGIHRoYXQgd291bGQgb3ZlcmZsb3cgaXRcblx0XHQgKiBhbmQgc3RvcDogYSB0cnVuY2F0ZWQgbGlzdCBrZWVwcyB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZVxuXHRcdCAqIHBhcnNhYmxlLCB3aGVyZWFzIGEgd3JhcHBlZCBuZXN0IGxlbmd0aCBkb2VzIG5vdC5cblx0XHQgKi9cblx0XHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKil2ZmluZm8gXHUwMDNlIFUxNl9NQVgpIHtcblx0XHRcdG5sbXNnX3RyaW0oc2tiLCBtYXJrKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuYGBgXG5BaCwgc28gdGhlIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWUgd2l0aCB0aGUgbmV0bGluayBhdHRyaWJ1dGUgbGVuZ3RoLCB3aGljaCBpcyBhIGB1MTZgLiBJdCdzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoaXMgcHJldmVudHMgYSBuYXN0eSBidWcgd2hlcmUgdGhlIGB2ZmluZm9gIG5lc3QgbGVuZ3RoIHdyYXBzIGFyb3VuZC4gUHJldmVudGluZyB0aGUgY3Jhc2ggZHVlIHRvIHRoZSBvdmVyZmxvdyBpcyBnb29kLlxuXG5BcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIGBDT05GSUdfTkVUREVWU0lNYCBpcyB0aGUga2V5IGZvciB0ZXN0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgb2J2aW91c2x5LiBJZiBJIHdhbnRlZCB0byBnZXQgZmFuY3kgYW5kIGluY29ycG9yYXRlIHJlYWwgb3IgZW11bGF0ZWQgUENJIGRldmljZXMgaW50byB0aGUgdGVzdHMsIGBDT05GSUdfUENJX0lPVmAgKm1pZ2h0KiBiZSByZWxldmFudCwgYnV0IGBuZXRkZXZzaW1gIGl0c2VsZiBkb2Vzbid0IGRlcGVuZCBvbiBpdCwgc28gaXQncyBub3QgYSBoYXJkIHJlcXVpcmVtZW50LiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0ZGV2c2ltYCBLY29uZmlnIGFuZCBjb25maXJtIGFsbCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOTo0OC45NDY4MzM3NDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDQyMjUwMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVERFVlNJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6NDkuMDQ3MjczMzI5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODk5NzE3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEaXJlY3RseSBpbnRvIHRoZSBLY29uZmlnKipcblxuQWxyaWdodCwgaW5zdGVhZCBvZiBndWVzc2luZyBvciByZWx5aW5nIG9uIGluZGlyZWN0IHBhdGhzLCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IGJlIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9LY29uZmlnYC4gSXQncyB0aGUgbW9zdCBkZWZpbml0aXZlIHBsYWNlIHRvIGdldCB0aGUgcmVhbCBzdG9yeS4gQW55IHF1ZXN0aW9ucyBhYm91dCB0aGUgbmV0ZGV2c2ltIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgYmUgYW5zd2VyZWQgaGVyZSwgZmlyc3QuIFRoaXMgS2NvbmZpZyBmaWxlICpoYXMqIHRvIGhvbGQgdGhlIG1hc3RlciBkZWZpbml0aW9ucy4gTGV0J3Mgc2VlIHdoYXTigJlzIGRlZmluZWQsIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGxvb2sgbGlrZS4gV2UgY2FuIGxpa2VseSBkZWR1Y2UgYSBncmVhdCBkZWFsIGFib3V0IHRoZSBiZWhhdmlvciBhbmQgcG9zc2libGUgaXNzdWVzIGZyb20gYSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiB0aGF0IG9uZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjUyLjMzNzI1MDE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjU5LCJFcnJvciI6InRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZpbGUgZG9lcyBub3QgZXhpc3RcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6Mzk6NTIuMzM3MzQ3OTk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjQxODI2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTGFieXJpbnRoIG9mIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBiYWNrIGludG8gdGhpcyBwcm9qZWN0LCBhbmQgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgYSBzaW1wbGUgb25lLCB5ZXQgY3J1Y2lhbDogKndoZXJlKiBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciBgbmV0ZGV2c2ltYD8gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBtYXAsIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhbmQgY29uZmlndXJpbmcgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncywgdHJhY2sgZG93biB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGltZSB0byBiZWdpbiB0aGUgaHVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNDAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE1OjM5OjU1LjE2MTUzNjE3M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0NTQzNDQzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUREVWU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTozOTo1OC4xMDY5ODg0NzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5OTgwMDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gc2l0dWF0aW9uLiBNeSBpbnR1aXRpb24gc3VnZ2VzdHMgdGhlIGlzc3VlIG1pZ2h0IGJlIHJvb3RlZCBpbiBob3cgdGhlIGRyaXZlcnMgYXJlIGJ1aWx0IG9yIGVuYWJsZWQuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSdtIHNwZWNpZmljYWxseSB0aGlua2luZyB0aGF0IGFyb3VuZCBsaW5lIDYwNCBtaWdodCBjb250YWluIHRoZSByZWxldmFudCBsb2dpYyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MDAuODA2NzkzNjYyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXG4gNjAxOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvS2NvbmZpZ1xcXCJcXG4gNjAyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcXFwiXFxuIDYwMzpcXHRcXG4gNjA0OlxcdGNvbmZpZyBORVRERVZTSU1cXG4gNjA1OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuIDYwNjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDYwNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNjA4OlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG4gNjA5OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cXG4gNjEwOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiA2MTE6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA2MTI6XFx0XFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4gNjEzOlxcdFxcdGhlbHBcXG4gNjE0OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIGFuZCBzb2Z0d2FyZSBtb2RlbCB0aGF0IGNhblxcbiA2MTU6XFx0XFx0ICBiZSB1c2VkIHRvIHRlc3QgdmFyaW91cyBjb250cm9sIHBhdGggbmV0d29ya2luZyBBUElzLCBlc3BlY2lhbGx5XFxuIDYxNjpcXHRcXHQgIEhXLW9mZmxvYWQgcmVsYXRlZC5cXG4gNjE3OlxcdFxcbiA2MTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDYxOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MDAuODA2OTE3NTQyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Nzk1MTAyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBOZXR3b3JraW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gVGhhdCdzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayDigJMgc3VwZXIgY29yZSBzdHVmZi4gSSBhbHJlYWR5IGtub3cgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGlsZWQgaWYgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGFsd2F5cyB0aGUgY2FzZS5cblxuVGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkLCBgcnRubF9maWxsX3ZmYCwgaXMgY2FsbGVkIGZyb20gYHJ0bmxfZmlsbF9pZmluZm9gLiBUbyBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLCBJJ2xsIG5lZWQgYSBkZXZpY2UgdGhhdCBoYXMgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykuIExldCBtZSBzZWXigKYgeWVwLCBgTkVUREVWU0lNYCBsb29rcyBsaWtlIHRoZSBwZXJmZWN0IGNhbmRpZGF0ZSBmb3IgdGhhdC4gSSBkb24ndCB0aGluayBJIG5lZWQgdG8gd29ycnkgYWJvdXQgYW55IG90aGVyIGNvbmZpZ3MgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB3aGF0IHRoZSBrZXkgc3ltYm9scyBhcmUgaGVyZS4gT2J2aW91c2x5LCBgcnRubF9maWxsX3ZmYCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIHNvIHRoYXQncyBhIHByaW1lIHN1c3BlY3QuIEl0J3MgY2FsbGVkIGJ5IGBydG5sX2ZpbGxfaWZpbmZvYCwgd2hpY2ggaXRzZWxmIGlzIGludm9rZWQgYnkgYHJ0bmxfZHVtcF9pZmluZm9gIGFuZCBgcnRubF9nZXRsaW5rYCwgc28gYHJ0bmxfZmlsbF9pZmluZm9gIGxvb2tzIGxpa2UgYW5vdGhlciBpbXBvcnRhbnQgc3ltYm9sIHRvIGtlZXAgYW4gZXllIG9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIHdoYXQgYHJ0bmxfZmlsbF92ZmluZm9gIGlzIGJlaW5nIGNhbGxlZCBmb3IgdG9vLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIFllcCwgYHJ0bmxfZmlsbF92ZmAgaXMgYHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50YC4gVGhlIGBub2lubGluZV9mb3Jfc3RhY2tgIGF0dHJpYnV0ZSBpcyBpbXBvcnRhbnQuIFRoYXQgbWVhbnMgaXQgd29uJ3QgYmUgaW5saW5lZCwgc28gaXQnbGwgaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MsIHdoaWNoIGlzIGdvb2QgZm9yIGFuYWx5c2lzLiBUaGF0IG1ha2VzIGBydG5sX2ZpbGxfdmZgIGEgZ3JlYXQgZm9jdXMgc3ltYm9sLiBBbmQgYHJ0bmxfZmlsbF9pZmluZm9gIGlzIGFsc28gc3RhdGljLCBidXQgbm90IGlubGluZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgaXQncyBhIHJlbGF0aXZlbHkgbGFyZ2UgZnVuY3Rpb24uIEFscmlnaHQsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gZm9yIGBydG5sX2ZpbGxfaWZpbmZvYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNTo0MDowNy41ODY0MzExMDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjAxMjcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5sX2ZpbGxfaWZpbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTIwNDk9c3RhdGljIGludCBydG5sX2ZpbGxfZHBsbF9waW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNzAtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjA3MTpzdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDcyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpzcmNfbmV0LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjUwNT1zdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU4MC1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNTgxOlxcdFxcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8oc2tiLCBkZXYsIG5ldCwgUlRNX05FV0xJTkssXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU4Mi1cXHRcXHRcXHRcXHQgICAgICAgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00MjMyPXN0YXRpYyBpbnQgcnRubF9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDMwNC1cXHRpZiAobnNrYilcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MzA1OlxcdFxcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8obnNrYiwgZGV2LCBuZXQsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDMwNi1cXHRcXHRcXHRcXHQgICAgICAgUlRNX05FV0xJTkssIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NTI1PXN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU0NC1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTQ1OlxcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8oc2tiLCBkZXYsIGRldl9uZXQoZGV2KSxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTQ2LVxcdFxcdFxcdCAgICAgICB0eXBlLCBwb3J0aWQsIHNlcSwgY2hhbmdlLCAwLCAwLCBldmVudCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MDcuNzA4NDU0MDE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTcxNzk3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFZ1bG5lcmFiaWxpdHkgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdywgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIG9uIGEgbmV0d29yayBkZXZpY2UuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBoaXRzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBhbmQgdGhlIHRyaWdnZXIgaW52b2x2ZXMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBmdXp6IHRoaXMuXG5cbkZpcnN0LCBJIGlkZW50aWZpZWQgc29tZSBrZXkgc3ltYm9sczogYHJ0bmxfZmlsbF9pZmluZm9gIChzdGF0aWMpLCBgcnRubF9nZXRsaW5rYCAodGhlIG5ldGxpbmsgaGFuZGxlciBmb3IgYFJUTV9HRVRMSU5LYCksIGFuZCBgcnRubF9kdW1wX2lmaW5mb2AgKHRoZSBuZXRsaW5rIGR1bXAgaGFuZGxlciBmb3IgYFJUTV9HRVRMSU5LYCkuIFRob3NlIHR3byBuZXRsaW5rIGhhbmRsZXJzIGFyZSBwcm9iYWJseSBnb2luZyB0byBiZSBnb29kIHBvaW50cyB0byBmb2N1cyBvbi4gQnV0IHdhaXQsIGBydG5sX2ZpbGxfdmZgIGlzIHRoZSBhY3R1YWwgZnVuY3Rpb24gdGhhdCBnb3QgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLCBzbyAqdGhhdCdzKiB0aGUgcmVhbCB0YXJnZXQuIEl0J3Mgc3RhdGljLCBidXQgdGhhdCdzIGZpbmUg4oCTIHdlIGNhbiB1c2UgYG5vaW5saW5lX2Zvcl9zdGFja2AgdG8gcHJldmVudCBpbmxpbmluZy4gVGhpcyBtZWFucyBgcnRubF9maWxsX3ZmYCBpcyBwcm9iYWJseSBteSBiZXN0IGZvY3VzIHN5bWJvbC5cblxuT2theSwgbGV0J3Mgc3VtbWFyaXplIHdoYXQgd2Uga25vdyBzbyBmYXI6XG5cbiogICAqKldvcnRoRnV6emluZzogVHJ1ZSoqIChEZWZpbml0ZWx5LCBjb3JlIG5ldHdvcmtpbmcgd2l0aCBhIHBvdGVudGlhbCBvdmVyZmxvdyBpcyBhbHdheXMgd29ydGggY2hlY2tpbmcuKVxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBmaXhlcyBhIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB0aGF0J3MgdHJpZ2dlcmVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBoYXMgbWFueSBWaXJ0dWFsIEZ1bmN0aW9ucy4gSXQncyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCdzIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYHJ0bmxfZmlsbF92ZmAsIGBydG5sX2dldGxpbmtgLCBgcnRubF9kdW1wX2lmaW5mb2AgKHdpdGggYHJ0bmxfZmlsbF92ZmAgYmVpbmcgdGhlIG1vc3QgaW1wb3J0YW50KS5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE5FVERFVlNJTWAgKEJlY2F1c2UgdGhhdCdzIGFuIG9idmlvdXMgd2F5IHRvIGNyZWF0ZSBtYW55IFZGcykuXG5cbkJ1dCBob2xkIG9uLiBBcmUgdGhlcmUgb3RoZXIgd2F5cyB0byBjcmVhdGUgVkZzIGJlc2lkZXMgdXNpbmcgYE5FVERFVlNJTWA/IFllcywgb2YgY291cnNlLCB0aGUgc3RhbmRhcmQgd2F5IGlzIHRocm91Z2ggYENPTkZJR19QQ0lfSU9WYCBmb3IgUENJIGRldmljZXMgd2l0aCBTUi1JT1Ygc3VwcG9ydC4gUUVNVSBzdXBwb3J0cyBTUi1JT1YgZm9yIGBpZ2JgIGFuZCBgbnZtZWAsIHNvIHRoaXMgaXMgYSBncmVhdCBhZGRpdGlvbi5cblxuSSdsbCBjaGVjayBgQ09ORklHX1BDSV9JT1ZgIGluIEtjb25maWcgdG8gbWFrZSBzdXJlIGl0J3MgdmFsaWQuIFRoaXMgYWRkcyBhbiBpbXBvcnRhbnQgY29uZmlnIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MTQuNzA1NjM3OTMxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU2NzA0OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfSU9WXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE1ND1jb25maWcgUENJX0JSSURHRV9FTVVMXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE1Ni1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE1Nzpjb25maWcgUENJX0lPVlxcbmRyaXZlcnMvcGNpL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIlBDSSBJT1Ygc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MTcuNjYyMzUzMTY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2Mzc4OTM5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZpcnR1YWwgRnVuY3Rpb24gUmVwb3J0aW5nIGluIE5ldGxpbmsqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFuZCBOZXRsaW5rLiBGaXJzdCB0aGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIGBQQ0lfSU9WYCBpcyBhIGJvb2xlYW4sIHNvIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEknbGwgYWRkIGJvdGggYFBDSV9JT1ZgIGFuZCBgTkVUREVWU0lNYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgdG8gYmUgc3VyZS5cblxuSSdtIGNoZWNraW5nIHRoZSBgcnRubF9maWxsX3ZmYCBmdW5jdGlvbiBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBJdCdzIG1hcmtlZCBhcyBgbm9pbmxpbmVfZm9yX3N0YWNrYC4gVGhlIGZ1bmN0aW9ucyBgcnRubF9nZXRsaW5rYCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gIGFyZSBzdGF0aWMsIGJ1dCByZWdpc3RlcmVkIGFzIG5ldGxpbmsgaGFuZGxlcnMsIHNvIHRoZXkncmUgZGVmaW5pdGVseSBub3QgaW5saW5lZCBlaXRoZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFZGIGluZm9ybWF0aW9uIGlzIHBvcHVsYXRlZCBhbmQgdHJhbnNtaXR0ZWQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gYENPTkZJR19ORVRgIGlzIGFuIG9idmlvdXMgYmFzZS4gYENPTkZJR19ORVRERVZTSU1gIGlzIHRyaXN0YXRlLCBhbmQgYENPTkZJR19QQ0lfSU9WYCBpcyBhIGJvb2xlYW4uIEknbSB3b25kZXJpbmcgaWYgYW55IG90aGVyIGRyaXZlcnMsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgc3VwcG9ydCBWRnMuIEknbSB0aGlua2luZyBhYm91dCBgdmlydGlvX25ldGAsIGJ1dCB0aGVuIEkgcmVjYWxsIHRoYXQgYHZpcnRpb19uZXRgIGl0c2VsZiBkb2Vzbid0IGhhdmUgVkZzLiBJdCBhY3RzIGFzIGEgVkYgb2YgYSB2aXJ0aW8gUENJIGRldmljZS4gVGhlIGZ1bmN0aW9uIGB2aXJ0aW9fZGV2X251bV92ZmAgcmV0cmlldmVzIHRoZSBudW1iZXIgb2YgVkZzIGZyb20gdGhlIHBhcmVudCBQQ0kgZGV2aWNlLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBCdXQgYG5ldGRldnNpbWAgaXMgdGhlIG1vc3QgZGlyZWN0IG1ldGhvZCB0byB0ZXN0IHRoaXMgVkYgaGFuZGxpbmcuXG5cbkJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gVGhpcyBjb2RlIGluY2x1ZGVzIGEgbmV3IGNoZWNrIHdpdGhpbiB0aGUgVkYgbG9vcDpcbmBgYGNcbmlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKXZmaW5mbyBcdTAwM2UgVTE2X01BWCkge1xuICAgIG5sbXNnX3RyaW0oc2tiLCBtYXJrKTtcbiAgICBicmVhaztcbn1cbmBgYFxuVGhpcyBpcyBhIGNsZWFuLCBmdW5jdGlvbmFsIGNoYW5nZSBhaW1lZCBhdCBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIG1hbGZvcm1lZCBOZXRsaW5rIG1lc3NhZ2VzIGJ5IGNoZWNraW5nIHRoZSBsZW5ndGggb2YgdGhlIGF0dHJpYnV0ZSBuZXN0LiBUaGlzIGFsc28gcHJldmVudHMgYSB0cnVuY2F0ZWQgbGlzdCBieSByZW1vdmluZyB0aGUgaXRlbSBjYXVzaW5nIHRoZSBpc3N1ZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHJvYnVzdG5lc3MuXG5cbk15IG1haW4gZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgcnRubF9maWxsX3ZmYCwgYHJ0bmxfZ2V0bGlua2AsIGFuZCBgcnRubF9kdW1wX2lmaW5mb2AuXG5cbkFuZCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZTogYE5FVERFVlNJTWAgYW5kIGBQQ0lfSU9WYC5cblxuSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIwMCwiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTU6NDA6MjcuMzAwMjUxNjg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwOTg1MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2ZpbGxfdmZcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCBvdmVyZmxvdyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRkZXZzaW0gdG8gY3JlYXRlIG1hbnkgVkZzIGFuZCBxdWVyeWluZyB0aGVtIHZpYSBSVE1fR0VUTElOSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9maWxsX3ZmXCIsXG4gICAgXCJydG5sX2dldGxpbmtcIixcbiAgICBcInJ0bmxfZHVtcF9pZmluZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBuZXRsaW5rIGF0dHJpYnV0ZSBsZW5ndGggb3ZlcmZsb3cgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGhhcyBhIGxhcmdlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdXNpbmcgbmV0ZGV2c2ltIHRvIGNyZWF0ZSBtYW55IFZGcyBhbmQgcXVlcnlpbmcgdGhlbSB2aWEgUlRNX0dFVExJTkspLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow8crnf[1] Phase: Succeeded StartedAt: 2026-07-26 15:40:38 +0000 UTC FinishedAt: 2026-07-26 15:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 15:40:38 +0000 UTC FinishedAt: 2026-07-26 15:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2] Phase: Succeeded StartedAt: 2026-07-26 15:40:38 +0000 UTC FinishedAt: 2026-07-26 19:58:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-26 15:40:38 +0000 UTC FinishedAt: 2026-07-26 19:58:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 15:40:38 +0000 UTC FinishedAt: 2026-07-26 15:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 15:40:38 +0000 UTC FinishedAt: 2026-07-26 15:40:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow8crnf/series-workflow8crnf-convert-artifact-1650174378/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 15:40:48 +0000 UTC FinishedAt: 2026-07-26 16:21:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 15:40:48 +0000 UTC FinishedAt: 2026-07-26 16:21:29 +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:*58e16f97-951a-4085-9c96-3ed0ce965086,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-workflow8crnf/series-workflow8crnf-convert-artifact-1650174378/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": "9ea79afb-2fd7-433e-af9c-3ae1ef25b69f", "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-workflow8crnf/series-workflow8crnf-build-action-3332449048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 15:40:48 +0000 UTC FinishedAt: 2026-07-26 16:21:19 +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:*58e16f97-951a-4085-9c96-3ed0ce965086,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-workflow8crnf/series-workflow8crnf-convert-artifact-1650174378/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": "9ea79afb-2fd7-433e-af9c-3ae1ef25b69f", "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-workflow8crnf/series-workflow8crnf-build-action-3332449048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 16:21:29 +0000 UTC FinishedAt: 2026-07-26 16:21:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 16:21:29 +0000 UTC FinishedAt: 2026-07-26 16:21:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 16:21:29 +0000 UTC FinishedAt: 2026-07-26 16:21:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 16:21:29 +0000 UTC FinishedAt: 2026-07-26 16:21:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow8crnf/series-workflow8crnf-convert-artifact-1078103749/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 16:21:39 +0000 UTC FinishedAt: 2026-07-26 16:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 16:21:39 +0000 UTC FinishedAt: 2026-07-26 16:23:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ea79afb-2fd7-433e-af9c-3ae1ef25b69f,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-workflow8crnf/series-workflow8crnf-build-action-3332449048/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-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 16:23:49 +0000 UTC FinishedAt: 2026-07-26 16:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 16:23:49 +0000 UTC FinishedAt: 2026-07-26 16:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 16:23:49 +0000 UTC FinishedAt: 2026-07-26 16:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 16:23:49 +0000 UTC FinishedAt: 2026-07-26 16:54:32 +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:*58e16f97-951a-4085-9c96-3ed0ce965086,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-workflow8crnf/series-workflow8crnf-convert-artifact-1078103749/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": "d5dbed91-b283-41cb-ae87-e3c682be0f36", "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-workflow8crnf/series-workflow8crnf-build-action-2920149777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 16:23:49 +0000 UTC FinishedAt: 2026-07-26 16:54:22 +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:*58e16f97-951a-4085-9c96-3ed0ce965086,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-workflow8crnf/series-workflow8crnf-convert-artifact-1078103749/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": "d5dbed91-b283-41cb-ae87-e3c682be0f36", "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-workflow8crnf/series-workflow8crnf-build-action-2920149777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 16:54:32 +0000 UTC FinishedAt: 2026-07-26 16:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 16:54:32 +0000 UTC FinishedAt: 2026-07-26 16:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 16:54:32 +0000 UTC FinishedAt: 2026-07-26 16:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 16:54:32 +0000 UTC FinishedAt: 2026-07-26 16:56:26 +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:*d5dbed91-b283-41cb-ae87-e3c682be0f36,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-workflow8crnf/series-workflow8crnf-build-action-2920149777/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-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-26 16:56:36 +0000 UTC FinishedAt: 2026-07-26 19:58:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-26 16:56:36 +0000 UTC FinishedAt: 2026-07-26 19:58:03 +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":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"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:*9ea79afb-2fd7-433e-af9c-3ae1ef25b69f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5dbed91-b283-41cb-ae87-e3c682be0f36,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-workflow8crnf/series-workflow8crnf-build-action-3332449048/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-workflow8crnf/series-workflow8crnf-build-action-2920149777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 16:56:36 +0000 UTC FinishedAt: 2026-07-26 16:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 16:56:36 +0000 UTC FinishedAt: 2026-07-26 16:56:41 +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":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"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-workflow8crnf/series-workflow8crnf-convert-artifact-1805620810/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-26 16:56:36 +0000 UTC FinishedAt: 2026-07-26 16:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 16:56:36 +0000 UTC FinishedAt: 2026-07-26 16:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 16:56:36 +0000 UTC FinishedAt: 2026-07-26 16:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-26 16:56:46 +0000 UTC FinishedAt: 2026-07-26 19:58:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8crnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_vf","rtnl_getlink","rtnl_dump_ifinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"3cf09ad5-0299-4aef-a514-6c0bfd30e47a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-26 16:56:46 +0000 UTC FinishedAt: 2026-07-26 19:57:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ea79afb-2fd7-433e-af9c-3ae1ef25b69f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5dbed91-b283-41cb-ae87-e3c682be0f36,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-workflow8crnf/series-workflow8crnf-build-action-3332449048/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-workflow8crnf/series-workflow8crnf-build-action-2920149777/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-workflow8crnf/series-workflow8crnf-convert-artifact-1805620810/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,}