Name: series-workflow87lh5 Phase: Succeeded StartedAt: 2026-07-11 08:08:57 +0000 UTC FinishedAt: 2026-07-11 12:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[0] Phase: Succeeded StartedAt: 2026-07-11 08:08:57 +0000 UTC FinishedAt: 2026-07-11 08:45:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 08:08:57 +0000 UTC FinishedAt: 2026-07-11 08:45:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS", "NUMA", "ZONE_DEVICE", "DEVICE_PRIVATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS", "NUMA", "ZONE_DEVICE", "DEVICE_PRIVATE" ], "series_id": "2899acbd-5fd5-4e58-90da-ace08e06b42b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_free_huge_pmd", "madvise_cold_or_pageout_pte_range", "queue_folios_pte_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIHdhcyBub3QgY2hlY2tlZCBiZWZvcmUgY2FsbGluZyBgcG1kX2ZvbGlvYCBvciB0cmlnZ2VyaW5nIGEgYFZNX0JVR19PTmAgaW4gYG1hZHZpc2VgIGFuZCBgbWVtcG9saWN5YCBjb2RlIHBhdGhzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgbWFkdmlzZSwgYW5kIG1lbW9yeSBwb2xpY2llcyB3aGVuIGRlYWxpbmcgd2l0aCBub24tcHJlc2VudCBQTURzIChsaWtlIG1pZ3JhdGlvbiBvciBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIGBtYWR2aXNlYCBhbmQgYG1iaW5kYC9gc2V0X21lbXBvbGljeWAgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5N2RkOTQ3MjZjMWUxZTAyMTE3Nzc2NjNlNzcyN2QzNmI5MjFiNzk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDg6NDI6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDI1NjEyYWY3MmRjYTJlLi4wZGQ5ODMwYTdkMzI3MyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yMzMxLDggJiM0MzsyMzMxLDggQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XG4tXHRcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0ICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xuJiM0MztcdFx0Vk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggOTI5MmY2MGIxOWFhN2MuLmM1NTcwMjNjM2ZhZDU1IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC0zODgsOCAmIzQzOzM4OCw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4gXHRcdFx0Z290byBodWdlX3VubG9jaztcbiBcbiBcdFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XG4tXHRcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG4mIzQzO1x0XHRcdFZNX1dBUk5fT05fT05DRSghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0XHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XG4gXHRcdFx0Z290byBodWdlX3VubG9jaztcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDkxNGY4MTg2M2RiNWE2Li42OWEwMGEzMjRlZjUzMSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTY1NCwxMiAmIzQzOzY1NCwxNCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XG4gXG4tXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbi1cdFx0cXAtXHUwMDNlbnJfZmFpbGVkJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XG4mIzQzO1x0XHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKVxuJiM0MztcdFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQmIzQzOyYjNDM7O1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTtcbiYjNDM7XHRmb2xpbyA9IHBtZF9mb2xpbyhwbWR2YWwpO1xuIFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcbiBcdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XG4gXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7cXVldWVfZm9saW9zX3B0ZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCB3YXMgbm90IGNoZWNrZWQgYmVmb3JlIGNhbGxpbmcgYHBtZF9mb2xpb2Agb3IgdHJpZ2dlcmluZyBhIGBWTV9CVUdfT05gIGluIGBtYWR2aXNlYCBhbmQgYG1lbXBvbGljeWAgY29kZSBwYXRocy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIG1hZHZpc2UsIGFuZCBtZW1vcnkgcG9saWNpZXMgd2hlbiBkZWFsaW5nIHdpdGggbm9uLXByZXNlbnQgUE1EcyAobGlrZSBtaWdyYXRpb24gb3IgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBgbWFkdmlzZWAgYW5kIGBtYmluZGAvYHNldF9tZW1wb2xpY3lgIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5N2RkOTQ3MjZjMWUxZTAyMTE3Nzc2NjNlNzcyN2QzNmI5MjFiNzk1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMDg6NDI6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyNTYxMmFmNzJkY2EyZS4uMGRkOTgzMGE3ZDMyNzMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMjMzMSw4ICYjNDM7MjMzMSw4IEBAIGJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQlnb3RvIG91dDsKIAogCWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkgewotCQlWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSAmYW1wOyZhbXA7Ci0JCQkJICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpOwomIzQzOwkJVk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggOTI5MmY2MGIxOWFhN2MuLmM1NTcwMjNjM2ZhZDU1IDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jCkBAIC0zODgsOCAmIzQzOzM4OCw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsCiAJCQlnb3RvIGh1Z2VfdW5sb2NrOwogCiAJCWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkgewotCQkJVk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgJmFtcDsmYW1wOwotCQkJCQkhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpOwomIzQzOwkJCVZNX1dBUk5fT05fT05DRSghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgJmFtcDsmYW1wOwomIzQzOwkJCQkJIXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpOwogCQkJZ290byBodWdlX3VubG9jazsKIAkJfQogCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDkxNGY4MTg2M2RiNWE2Li42OWEwMGEzMjRlZjUzMSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmMKQEAgLTY1NCwxMiAmIzQzOzY1NCwxNCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstJmd0O3ByaXZhdGU7CiYjNDM7CXBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7CiAKLQlpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHsKLQkJcXAtJmd0O25yX2ZhaWxlZCYjNDM7JiM0Mzs7CiYjNDM7CWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQocG1kdmFsKSkpIHsKJiM0MzsJCWlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZHZhbCkpCiYjNDM7CQkJcXAtJmd0O25yX2ZhaWxlZCYjNDM7JiM0Mzs7CiAJCXJldHVybjsKIAl9Ci0JZm9saW8gPSBwbWRfZm9saW8oKnBtZCk7CiYjNDM7CWZvbGlvID0gcG1kX2ZvbGlvKHBtZHZhbCk7CiAJaWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHsKIAkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFOwogCQlyZXR1cm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyB0aHJlZSBmaWxlcyB3aXRoaW4gdGhlIGBtbS9gIGRpcmVjdG9yeTogYGh1Z2VfbWVtb3J5LmNgLCBgbWFkdmlzZS5jYCwgYW5kIGBtZW1wb2xpY3kuY2AuIFNlZW1zIGxpa2UgYSBmb2N1c2VkIHNldCBvZiBtb2RpZmljYXRpb25zLgoKSW4gYGh1Z2VfbWVtb3J5LmNgIGFuZCBgbWFkdmlzZS5jYCwgdGhlIGNvcmUgY2hhbmdlIGlzIHJlcGxhY2luZyBhIGBWTV9CVUdfT05gIHdpdGggYSBgVk1fV0FSTl9PTl9PTkNFYCBhbmQgYWRqdXN0aW5nIHRoZSBjb25kaXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIG1ha2luZyBhIHN0cm9uZyBhc3NlcnRpb24gYWJvdXQgdGhlIHByZXNlbmNlIG9mIGEgbWlncmF0aW9uIGVudHJ5LiBOb3csIGl0JiMzOTtzIHJlcGxhY2VkIHdpdGggYSB3YXJuaW5nIHRoYXQgdHJpZ2dlcnMgb25seSBvbmNlLCBhbmQgaW5jbHVkZXMgYSBjaGVjayBmb3IgZGV2aWNlLXByaXZhdGUgZW50cmllcy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhIHNjZW5hcmlvIHdoZXJlIHRoaXMgYXNzZXJ0aW9uIHdhcyBmaXJpbmcgc3B1cmlvdXNseSwgcGVyaGFwcyBkdWUgdG8gZGV2aWNlLXNwZWNpZmljIG1lbW9yeSBtYXBwaW5ncyBvciBhIG1vcmUgcGVybWlzc2l2ZSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0IGNvbnN0aXR1dGVzIGEgdmFsaWQgUE1ELiBUaGlzIGlzIGxpa2VseSBhIHNhZmV0eSBpbXByb3ZlbWVudCwgcHJldmVudGluZyBwb3RlbnRpYWxseSBkaXNydXB0aXZlIGtlcm5lbCBwYW5pY3MgaW4gbGVzcyBjcml0aWNhbCBzaXR1YXRpb25zLgoKVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgY2hhbmdlIGluIGBtbS9tZW1wb2xpY3kuY2AuIEhlcmUsIHRoZSBgcXVldWVfZm9saW9zX3BtZGAgZnVuY3Rpb24gaXMgYmVpbmcgbW9kaWZpZWQuIFByZXZpb3VzbHksIGl0IGRpcmVjdGx5IGRlcmVmZXJlbmNlZCB0aGUgYHBtZGAgcG9pbnRlciAoYCpwbWRgKSBhbmQgY2hlY2tlZCBpZiBpdCB3YXMgYSBtaWdyYXRpb24gZW50cnkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHBtZHBfZ2V0KHBtZClgIGNhbGwsIGdldHMgdGhlIFBNRCB2YWx1ZSwgYW5kIGNoZWNrcyBpdHMgcHJlc2VuY2UgKmJlZm9yZSogY2hlY2tpbmcgaWYgaXQmIzM5O3MgYSBtaWdyYXRpb24gZW50cnkuIFRoaXMgaXMgYSBjcnVjaWFsIGltcHJvdmVtZW50LiBJdCBhcHBlYXJzIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBidWcgd2hlcmUgYHBtZF9mb2xpbygpYCBjb3VsZCBiZSBjYWxsZWQgb24gYSBQTUQgdGhhdCB3YXNuJiMzOTt0IHByZXNlbnQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5kZWZpbmVkIGJlaGF2aW9yIG9yIGV2ZW4gYSBrZXJuZWwgY3Jhc2guIEJ5IGFkZGluZyB0aGlzIGAhcG1kX3ByZXNlbnQoKWAgY2hlY2sgZmlyc3QsIHRoZSBjb2RlIG5vdyBoYW5kbGVzIGNhc2VzIHdoZXJlIHRoZSBQTUQgbWlnaHQgYmUgYSBzd2FwIGVudHJ5LCBkZXZpY2UtcHJpdmF0ZSwgb3Igb3RoZXJ3aXNlIG5vdCB2YWxpZCBmb3IgZm9saW8gcmV0cmlldmFsLiBJdCYjMzk7cyBhIGNsYXNzaWMgZGVmZW5zZS1pbi1kZXB0aCBhcHByb2FjaCwgcHJldmVudGluZyB0aGUgZnVuY3Rpb24gZnJvbSBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgcG9pbnRlci4gVGhpcyBpcyBhIGdvb2QgY2F0Y2gsIGFuZCBhIHNvbGlkIGV4YW1wbGUgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nIGluIGEgY29tcGxleCBhcmVhLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBjb250ZXh0IG9mIHRoYXQgZnVuY3Rpb24sIGBxdWV1ZV9mb2xpb3NfcG1kYCwgdG8gaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiBgbW0vbWVtcG9saWN5LmNgIGFuZCBpdHMgY2FsbC1jaGFpbiwgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGUgZnVuY3Rpb25hbGl0eS4gRm9jdXNpbmcgb24gc3ltYm9scyBzdWNoIGFzIGBxdWV1ZV9mb2xpb3NfcG1kYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgSSBjYW4gc2VlIGEgY2xlYXJlciBwaWN0dXJlIGluIHRoaXMgYXJlYS4gT2gsIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyBzdGF0aWMuIFRoYXQgbWVhbnMgdW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBpcyBldmVuIG1vcmUgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1wb2xpY3kuYy02NTItXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbm1tL21lbXBvbGljeS5jLTY1NC17XG4tLVxubW0vbWVtcG9saWN5LmM9Njg3PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtcG9saWN5LmMtNzAwLVx0aWYgKHB0bCkge1xubW0vbWVtcG9saWN5LmM6NzAxOlx0XHRxdWV1ZV9mb2xpb3NfcG1kKHBtZCwgd2Fsayk7XG5tbS9tZW1wb2xpY3kuYy03MDItXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4MgoJCQkJCQkJb3V0cHV0OiA1NgoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucywgYHF1ZXVlX2ZvbGlvc19wbWRgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBpbnRlcmFjdCB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHF1ZXVlX2ZvbGlvc19wbWRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LCB0aGF0IHNldHMgdGhlIHJlbGF0aW9uc2hpcCBjbGVhcmx5LiBJIGtub3cgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgcmVzaWRlcyB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgbGl2ZXMgaW4gYG1tL21hZHZpc2UuY2AuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgZm9yIHRob3NlIGZpbGVzIHRvIGdldCBhIGdyaXAgb24gaG93IHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlbS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlncy4gRnJvbSBtZW1vcnksIGBtbS9odWdlX21lbW9yeS5jYCBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRT15YC4gU28gaWYgdGhhdCBpc24mIzM5O3Qgc2V0LCB0aGVuIHRob3NlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IG5vbi1vcGVyYXRpb25hbC4gRm9yIGBtbS9tYWR2aXNlLmNgLCB0aGUgbGlua2FnZSB0byB0aGUgY29tcGlsYXRpb24gaXMgbGVzcyBjbGVhciB0byBtZS4gSSB0aGluayBpdCByZWxpZXMgb24gYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgSSBiZXR0ZXIgdmVyaWZ5IHRoYXQgZGlyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGNvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkLiBLbm93aW5nIHRob3NlIHByZXJlcXVpc2l0ZXMgaXMgY3J1Y2lhbCBmb3IgdGFyZ2V0ZWQgYW5hbHlzaXMgYW5kIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX21lbW9yeS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2UubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmM9MzAxMD1FWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fc21fbWFwX29wc19jcmVhdGUpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYy0zMDEyLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jOjMwMTM6ICogZHJtX2dwdXZtX21hZHZpc2Vfb3BzX2NyZWF0ZSgpIC0gY3JlYXRlcyB0aGUgXHUwMDI2ZHJtX2dwdXZhX29wcyB0byBzcGxpdFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jLTMwMTQtICogQGdwdXZtOiB0aGUgXHUwMDI2ZHJtX2dwdXZtIHJlcHJlc2VudGluZyB0aGUgR1BVIFZBIHNwYWNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jPTMwNDE9c3RydWN0IGRybV9ncHV2YV9vcHMgKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jOjMwNDI6ZHJtX2dwdXZtX21hZHZpc2Vfb3BzX2NyZWF0ZShzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYy0zMDQzLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRybV9ncHV2bV9tYXBfcmVxICpyZXEpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jLTMwNDYtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jOjMwNDc6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX21hZHZpc2Vfb3BzX2NyZWF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmMtMzA0OC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYz03MzE9c3RhdGljIGludCBtc21faW9jdGxfZ2VtX21hZHZpc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYy03NTAtXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYzo3NTE6XHRyZXQgPSBtc21fZ2VtX21hZHZpc2Uob2JqLCBhcmdzLVx1MDAzZW1hZHYpO1xuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMtNzUyLVx0aWYgKHJldCBcdTAwM2U9IDApIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU9MzU9eGUteSAmIzQzOz0geGVfYmIubyBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZS0xNDYtXHR4ZV92bS5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6MTQ3Olx0eGVfdm1fbWFkdmlzZS5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMTQ4LVx0eGVfdnJhbS5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM9NDY5Nj1zdGF0aWMgaW50IHhlX3ZtX2FsbG9jX3ZtYShzdHJ1Y3QgeGVfdm0gKnZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQ3MTEtXHRpZiAoaXNfbWFkdmlzZSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ3MTI6XHRcdG9wcyA9IGRybV9ncHV2bV9tYWR2aXNlX29wc19jcmVhdGUoXHUwMDI2dm0tXHUwMDNlZ3B1dm0sIG1hcF9yZXEpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtNDcxMy1cdGVsc2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00NzU4LVx0XHRcdFx0LypcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ3NTk6XHRcdFx0XHQgKiBJbiBjYXNlIG9mIG1hZHZpc2Ugb3BzIERSTV9HUFVWQV9PUF9NQVAgaXNcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQ3NjAtXHRcdFx0XHQgKiBhbHdheXMgYWZ0ZXIgRFJNX0dQVVZBX09QX1JFTUFQLCBzbyBlbnN1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00Nzk1LVx0XHRcdHZtYSA9IGdwdXZhX3RvX3ZtYShvcC1cdTAwM2ViYXNlLnJlbWFwLnVubWFwLVx1MDAzZXZhKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ3OTY6XHRcdFx0LyogSW4gY2FzZSBvZiBtYWR2aXNlIG9wcyBTdG9yZSBhdHRyaWJ1dGVzIGZvciBSRU1BUCBVTk1BUFBFRFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtNDc5Ny1cdFx0XHQgKiBWTUEsIHNvIHRoZXkgY2FuIGJlIGFzc2lnbmVkIHRvIG5ld2x5IE1BUCBjcmVhdGVkIHZtYS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00ODI2LS8qKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6NDgyNzogKiB4ZV92bV9hbGxvY19tYWR2aXNlX3ZtYSAtIEFsbG9jYXRlIFZNQSYjMzk7cyB3aXRoIG1hZHZpc2Ugb3BzXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00ODI4LSAqIEB2bTogUG9pbnRlciB0byB0aGUgeGVfdm0gc3RydWN0dXJlXG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmg9MTEwNT1zdHJ1Y3QgZHJtX2dwdXZhX29wcyAqXG5pbmNsdWRlL2RybS9kcm1fZ3B1dm0uaDoxMTA2OmRybV9ncHV2bV9tYWR2aXNlX29wc19jcmVhdGUoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sXG5pbmNsdWRlL2RybS9kcm1fZ3B1dm0uaC0xMTA3LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRybV9ncHV2bV9tYXBfcmVxICpyZXEpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTM0NT1zdHJ1Y3QgdGhwc2l6ZSB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzU4LSAqIENoZWNrIHdoZXRoZXIgVEhQcyBhcmUgZXhwbGljaXRseSBkaXNhYmxlZCBmb3IgdGhpcyBWTUEsIGZvciBleGFtcGxlLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzU5OiAqIHRocm91Z2ggbWFkdmlzZSBvciBwcmN0bC5cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM2MC0gKi9cbi0tXG5tbS9NYWtlZmlsZT03ND1pZmRlZiBDT05GSUdfTU1VXG5tbS9NYWtlZmlsZTo3NTpcdG9iai0kKENPTkZJR19BRFZJU0VfU1lTQ0FMTFMpXHQmIzQzOz0gbWFkdmlzZS5vXG5tbS9NYWtlZmlsZS03Ni1lbmRpZlxuLS1cbm1tL21hZHZpc2UuYz0xMjQzPXN0YXRpYyBsb25nIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xMjY1LSNpZmRlZiBDT05GSUdfNjRCSVRcbm1tL21hZHZpc2UuYzoxMjY2Oi8qIERvZXMgdGhlIG1hZHZpc2Ugb3BlcmF0aW9uIHJlc3VsdCBpbiBkaXNjYXJkaW5nIG9mIG1hcHBlZCBkYXRhPyAqL1xubW0vbWFkdmlzZS5jLTEyNjctc3RhdGljIGJvb2wgaXNfZGlzY2FyZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jPTIwMTI9U1lTQ0FMTF9ERUZJTkUzKG1hZHZpc2UsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbl9pbiwgaW50LCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMjAxNi1cbm1tL21hZHZpc2UuYzoyMDE3Oi8qIFBlcmZvcm0gYW4gbWFkdmlzZSBvcGVyYXRpb24gb3ZlciBhIHZlY3RvciBvZiBhZGRyZXNzZXMgYW5kIGxlbmd0aHMuICovXG5tbS9tYWR2aXNlLmMtMjAxOC1zdGF0aWMgc3NpemVfdCB2ZWN0b3JfbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL21hZHZpc2UuYy0yMDQ3LVx0XHQvKlxubW0vbWFkdmlzZS5jOjIwNDg6XHRcdCAqIEFuIG1hZHZpc2Ugb3BlcmF0aW9uIGlzIGF0dGVtcHRpbmcgdG8gcmVzdGFydCB0aGUgc3lzY2FsbCxcbm1tL21hZHZpc2UuYy0yMDQ5LVx0XHQgKiBidXQgd2UgY2Fubm90IHByb2NlZWQgYXMgaXQgd291bGQgbm90IGJlIGNvcnJlY3QgdG8gcmVwZWF0XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM9ODA9c3RhdGljIHZvaWQgbXRlX2tzbV9zY2FuKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmMtOTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYzo5ODpzdGF0aWMgaW50IGNoZWNrX21hZHZpc2Vfb3B0aW9ucyhpbnQgbWVtX3R5cGUsIGludCBtb2RlLCBpbnQgbWFwcGluZylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FybTY0L210ZS9jaGVja19rc21fb3B0aW9ucy5jLTk5LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYz0xMzE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYzoxNTM6XHRldmFsdWF0ZV90ZXN0KGNoZWNrX21hZHZpc2Vfb3B0aW9ucyhVU0VfTU1BUCwgTVRFX1NZTkNfRVJSLCBNQVBfUFJJVkFURSksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTQtXHRcdFwmIzM0O0NoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3IgcHJpdmF0ZSBtYXBwaW5nLCBzeW5jIG1vZGUgYW5kIG1tYXAgbWVtb3J5XFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FybTY0L210ZS9jaGVja19rc21fb3B0aW9ucy5jOjE1NTpcdGV2YWx1YXRlX3Rlc3QoY2hlY2tfbWFkdmlzZV9vcHRpb25zKFVTRV9NTUFQLCBNVEVfQVNZTkNfRVJSLCBNQVBfUFJJVkFURSksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTYtXHRcdFwmIzM0O0NoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3IgcHJpdmF0ZSBtYXBwaW5nLCBhc3luYyBtb2RlIGFuZCBtbWFwIG1lbW9yeVxcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYzoxNTc6XHRldmFsdWF0ZV90ZXN0KGNoZWNrX21hZHZpc2Vfb3B0aW9ucyhVU0VfTU1BUCwgTVRFX1NZTkNfRVJSLCBNQVBfU0hBUkVEKSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FybTY0L210ZS9jaGVja19rc21fb3B0aW9ucy5jLTE1OC1cdFx0XCYjMzQ7Q2hlY2sgS1NNIG10ZSBwYWdlIG1lcmdlIGZvciBzaGFyZWQgbWFwcGluZywgc3luYyBtb2RlIGFuZCBtbWFwIG1lbW9yeVxcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYzoxNTk6XHRldmFsdWF0ZV90ZXN0KGNoZWNrX21hZHZpc2Vfb3B0aW9ucyhVU0VfTU1BUCwgTVRFX0FTWU5DX0VSUiwgTUFQX1NIQVJFRCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNjAtXHRcdFwmIzM0O0NoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3Igc2hhcmVkIG1hcHBpbmcsIGFzeW5jIG1vZGUgYW5kIG1tYXAgbWVtb3J5XFxuXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYz00Nz1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMtMjgxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmM6MjgyOlx0LyogbWFkdmlzZSBvZiBzaGFyZWQgbWFwcGluZyBzaG91bGQgbm90IGZyZWUgYW55IHBhZ2VzICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYy0yODMtXHRpZiAobWFkdmlzZShhZGRyLCBOUl9IVUdFX1BBR0VTICogaHVnZV9wYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jLTI4Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jOjI4ODpcdC8qIG1hZHZpc2Ugb2YgcHJpdmF0ZSBtYXBwaW5nIHNob3VsZCBmcmVlIHByaXZhdGUgcGFnZXMgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jLTI4OS1cdGlmIChtYWR2aXNlKGFkZHIyLCBOUl9IVUdFX1BBR0VTICogaHVnZV9wYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmM9MzM1PXN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMtMzQ0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYzozNDU6XHRtYWR2aXNlKG9uZV9wYWdlLCBsZW4sIE1BRFZfSFVHRVBBR0UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYy0zNDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtcG9saWN5Lm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q9MzQxPXBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIG5vZGUgbG9jYWwgdG8gd2hlcmUgdGhlIHRhc2sgaXMgcnVubmluZyxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0OjM0MjpleGNlcHQgcGVyaGFwcyBhcyBtb2RpZmllZCBieSB0aGUgdGFzayYjMzk7cyBOVU1BIG1lbXBvbGljeSBvciBjcHVzZXRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0LTM0My1jb25maWd1cmF0aW9uLCBzbyBsb25nIGFzIHN1ZmZpY2llbnQgZnJlZSBtZW1vcnkgcGFnZXMgYXJlIGF2YWlsYWJsZS5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdD0zNTI9dGhlaXIgY29udGFpbmluZyB0YXNrJiMzOTtzIG1lbW9yeSBzcHJlYWQgc2V0dGluZ3MuICBJZiBtZW1vcnkgc3ByZWFkaW5nXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdDozNTM6aXMgdHVybmVkIG9mZiwgdGhlbiB0aGUgY3VycmVudGx5IHNwZWNpZmllZCBOVU1BIG1lbXBvbGljeSBvbmNlIGFnYWluXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdC0zNTQtYXBwbGllcyB0byBtZW1vcnkgcGFnZSBhbGxvY2F0aW9ucy5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdD0zODI9cGFnZXMgb24gdGhlIHBhcmVudCBub2RlIHdpbGwgYmUgYWRqdXN0ZWQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSwgaWYgc3VmZmljaWVudFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q6MzgzOnJlc291cmNlcyBleGlzdCwgcmVnYXJkbGVzcyBvZiB0aGUgdGFzayYjMzk7cyBtZW1wb2xpY3kgb3IgY3B1c2V0IGNvbnN0cmFpbnRzLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3QtMzg0LVxuLS1cbm1tL01ha2VmaWxlPTg1PW9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFx0JiM0Mzs9IG1lbXBvbGljeS5vXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVx0JiM0Mzs9IHNwYXJzZS5vXG4tLVxubW0vbWVtcG9saWN5LmM9MzU5PUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoZ2V0X3Rhc2tfcG9saWN5LCBcJiMzNDtrdm1cJiMzNDspO1xubW0vbWVtcG9saWN5LmMtMzYwLVxubW0vbWVtcG9saWN5LmM6MzYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtcG9saWN5X29wZXJhdGlvbnMge1xubW0vbWVtcG9saWN5LmMtMzYyLVx0aW50ICgqY3JlYXRlKShzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVzKTtcbi0tXG5tbS9tZW1wb2xpY3kuYz01NjU9dm9pZCBtcG9sX3JlYmluZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgbm9kZW1hc2tfdCAqbmV3KVxuLS1cbm1tL21lbXBvbGljeS5jLTU3Ny1cbm1tL21lbXBvbGljeS5jOjU3ODpzdGF0aWMgY29uc3Qgc3RydWN0IG1lbXBvbGljeV9vcGVyYXRpb25zIG1wb2xfb3BzW01QT0xfTUFYXSA9IHtcbm1tL21lbXBvbGljeS5jLTU3OS1cdFtNUE9MX0RFRkFVTFRdID0ge1xuLS1cbm1tL21lbXBvbGljeS5jPTIwMjE9c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDM3LSAqIFJldHVybnMgZWZmZWN0aXZlIHBvbGljeSBmb3IgYSBWTUEgYXQgc3BlY2lmaWVkIGFkZHJlc3MuXG5tbS9tZW1wb2xpY3kuYzoyMDM4OiAqIEZhbGxzIGJhY2sgdG8gY3VycmVudC1cdTAwM2VtZW1wb2xpY3kgb3Igc3lzdGVtIGRlZmF1bHQgcG9saWN5LCBhcyBuZWNlc3NhcnkuXG5tbS9tZW1wb2xpY3kuYy0yMDM5LSAqIFNoYXJlZCBwb2xpY2llcyBbdGhvc2UgbWFya2VkIGFzIE1QT0xfRl9TSEFSRURdIHJlcXVpcmUgYW4gZXh0cmEgcmVmZXJlbmNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxNAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRXhhbWluaW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIG1vZHVsZXMgYW5kIHRoZWlyIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSB0aGF0IGBodWdlX21lbW9yeS5vYCBpcyB0aWVkIHRvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIGBtYWR2aXNlLm9gIG5lZWRzIGBBRFZJU0VfU1lTQ0FMTFNgIOKAkyBwcmVkaWN0YWJsZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBgbWFkdmlzZWAuIGBtZW1wb2xpY3kub2AgY2xlYXJseSByZXF1aXJlcyBgTlVNQWAsIGFzIGV4cGVjdGVkLiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBzbGlnaHRseSB0cmlja3kuIEkgc2VlIGBERVZJQ0VfTUlHUkFUSU9OYCBsaXN0ZWQgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgdHJpZ2dlcnMgYSBmbGFnOyBkb2VzbiYjMzk7dCBgREVWSUNFX1BSSVZBVEVgIG9yIGBNSUdSQVRJT05gIG9yIGJvdGggaW1wYWN0IGRldmljZSBwcml2YXRlIGVudHJpZXM/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgY29ubmVjdGlvbi4gQmV0dGVyIHRvIHZlcmlmeSB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzIGJlZm9yZSBJIG1vdmUgb24uIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYm90aCBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBhbmQgYHBtZF9pc19taWdyYXRpb25fZW50cnlgIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGNvbmZpZ3MuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU3ND1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTItLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1OTM6ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTQtICogZW50cnkuXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjAzLSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA0OnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTE6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTIte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjMxND1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIzMzQtXHRcdFZNX1dBUk5fT05fT05DRSghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXHUwMDI2XHUwMDI2XG5tbS9odWdlX21lbW9yeS5jOjIzMzU6XHRcdFx0XHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XG5tbS9odWdlX21lbW9yeS5jLTIzMzYtXHRcdGdvdG8gb3V0O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzA5Nj1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxNzgtXHRcdGRpcnR5ID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmM6MzE3OTpcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSB7XG5tbS9odWdlX21lbW9yeS5jLTMxODAtXHRcdHNvZnRsZWFmX3QgZW50cnk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMzE5LVx0XHR9XG5tbS9odWdlX21lbW9yeS5jOjMzMjA6XHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvbGRfcG1kKSkge1xubW0vaHVnZV9tZW1vcnkuYy0zMzIxLVx0XHRwdGVfdCBlbnRyeTtcbi0tXG5tbS9tYWR2aXNlLmM9MzUzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4tLVxubW0vbWFkdmlzZS5jLTM5MS1cdFx0XHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFx1MDAyNlx1MDAyNlxubW0vbWFkdmlzZS5jOjM5MjpcdFx0XHRcdFx0IXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpO1xubW0vbWFkdmlzZS5jLTM5My1cdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuLS1cbm1tL21lbW9yeS5jPTY1NDg9c3RhdGljIHZtX2ZhdWx0X3QgX19oYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtNjYyMS1cdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQodm1mLm9yaWdfcG1kKSkpIHtcbm1tL21lbW9yeS5jOjY2MjI6XHRcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkodm1mLm9yaWdfcG1kKSlcbm1tL21lbW9yeS5jLTY2MjMtXHRcdFx0cmV0dXJuIGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKFx1MDAyNnZtZik7XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTg2PWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI1My1cdFx0ICAgIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpIHx8XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNTQ6XHRcdCAgICBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpKSB7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTUtXHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2NS1cdFx0XHRcdHJldHVybiB0cnVlO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MjY2Olx0XHRcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSB7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNjctXHRcdFx0XHRzb2Z0bGVhZl90IGVudHJ5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGluIGBsaW51eC9sZWFmb3BzLmhgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZGV2aWNlLXByaXZhdGUgbWFwcGluZ3MsIHNwZWNpZmljYWxseSBhdCB0aGUgcGFnZSBtaWRkbGUgZGlyZWN0b3J5IChQTUQpIGxldmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIEkgcmVjYWxsIHRoaXMgZmlsZSBvZnRlbiBjb250YWlucyBsb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9yIGdlbmVyaWMgaGVscGVyIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24uIEdpdmVuIHRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lLCBJIHN1c3BlY3QgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgaXMgbGlrZWx5IGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uLiBJdCYjMzk7cyBwdXJwb3NlLCBhcyB0aGUgbmFtZSBpbXBsaWVzLCBpcyBwcm9iYWJseSB0byBxdWlja2x5IGFuZCBlZmZpY2llbnRseSBkZXRlcm1pbmUgaWYgYSBnaXZlbiBQTUQgZW50cnkgcmVwcmVzZW50cyBtZW1vcnkgcHJpdmF0ZSB0byBhIGRldmljZSBkcml2ZXIsIGxpa2VseSB1c2VkIGZvciBtZW1vcnktbWFwcGVkIEkvTyBvciBkaXJlY3QgbWVtb3J5IGFjY2Vzcy4gSSBleHBlY3QgaXQgdG8gaW52b2x2ZSBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIGNoZWNrcyBhZ2FpbnN0IHJlc2VydmVkIGJpdHMgd2l0aGluIHRoZSBQTUQmIzM5O3MgZm9ybWF0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNvbmZpcm1zIG15IGFzc3VtcHRpb25zIGFuZCByZXZlYWxzIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgYWxzbyBoYXZlIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkyLS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTkzOiAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTk0LSAqIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwNDpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEwLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjExOnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZSB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24uIFRoaXMgaXNuJiMzOTt0IHNvbWV0aGluZyBJIHN0dW1ibGUgYWNyb3NzIGV2ZXJ5IGRheSwgc28gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIG15IHN0YW5kYXJkIHByb2Nlc3MuIEZpcnN0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZSBmdW5jdGlvbiBpdHNlbGYgaGFzIGFueSBleHBsaWNpdCBgI2lmZGVmYCBjb25kaXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29scyBhbmQgbWV0aG9kIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUga2VybmVsIHNvdXJjZS4gSSYjMzk7bGwgY2hlY2sgaXRzIGRlZmluaXRpb24gdG8gc2VlIGlmIEkgY2FuIGZpbmQgYW4gaW5jbHVkZSBmaWxlIG9yIG1hY3JvIHRoYXQgZ2l2ZXMgbWUgYW55IGhpbnRzLiBUaGVuIEkmIzM5O2xsIHdvcmsgZnJvbSB0aGVyZS4gVGhpcyB3aWxsIGJlIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCwgSSB0aGluay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkwOlx0I2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpXG4gNTkxOlx0XG4gNTkyOlx0LyoqXG4gNTkzOlx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG4gNTk0Olx0ICogZW50cnkuXG4gNTk1Olx0ICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cbiA1OTY6XHQgKlxuIDU5NzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgUE1EIGNvbnRhaW5zIGEgc3dhcCBlbnRyeSB0aGF0IHJlcHJlc2VudHMgYSBkZXZpY2UgcHJpdmF0ZVxuIDU5ODpcdCAqIHBhZ2UgbWFwcGluZy4gVGhpcyBpcyB1c2VkIGZvciB6b25lIGRldmljZSBwcml2YXRlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuXG4gNTk5Olx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxuIDYwMDpcdCAqIG9wZXJhdGlvbnMuXG4gNjAxOlx0ICpcbiA2MDI6XHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcbiA2MDM6XHQgKi9cbiA2MDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbiA2MDU6XHR7XG4gNjA2Olx0XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG4gNjA3Olx0fVxuIDYwODpcdFxuIDYwOTpcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUyAqL1xuIDYxMDpcdFxuIDYxMTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuIDYxMjpcdHtcbiA2MTM6XHRcdHJldHVybiBmYWxzZTtcbiA2MTQ6XHR9XG4gNjE1Olx0XG4gNjE2Olx0I2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXG4gNjE3Olx0XG4gNjE4Olx0LyoqXG4gNjE5Olx0ICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzgwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBQTUQgRW50cnkgTGFuZHNjYXBlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtYXAgb2YgdGhlIFBNRCAoUGFnZSBNYXAgRGlyZWN0b3J5KSBlbnRyeSBsYW5kc2NhcGUgaXMgdGVsbGluZyBtZSB0aGF0LCBmb3IgdGhlIGNvbmRpdGlvbiBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCB0byBldmFsdWF0ZSB0byB0cnVlLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYm90aCBgQ09ORklHX1pPTkVfREVWSUNFYCAqYW5kKiBgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTYCBkZWZpbmVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gc3BhY2UgY29uc2lkZXJhdGlvbi4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgbm93OiBXaGF0IGFib3V0IGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YD8gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gVGhpcyBzZWVtcyBsaWtlIGEgY3JpdGljYWwgYXNwZWN0IHdoZW4gZGVhbGluZyB3aXRoIHBhZ2UgbWlncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYW5kIGFyY2hpdGVjdHVyYWwgYXNzdW1wdGlvbnMgZm9yIGhhbmRsaW5nIGRldmljZS1wcml2YXRlIGVudHJpZXMgaGF2ZSBhbnkgb3ZlcmxhcCBvciBpbXBsaWNhdGlvbnMgZm9yIGRldGVjdGluZyBtaWdyYXRpb24gZW50cmllcy4gQXJlIHRoZXJlIHJlbGF0ZWQgZGVwZW5kZW5jaWVzLCBvciBhcmUgdGhlc2UgY29tcGxldGVseSBvcnRob2dvbmFsIGNvbmNlcm5zPyBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGhlcmUsIG9yIGxhY2sgdGhlcmVvZi4gSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhlIGNvZGViYXNlIGZvciBhbnkgcmVsYXRlZCBhcmVhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjE4Olx0LyoqXG4gNjE5Olx0ICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/XG4gNjIwOlx0ICogQHBtZDogUE1EIGVudHJ5LlxuIDYyMTpcdCAqXG4gNjIyOlx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgUE1EIGVuY29kZXMgYSBtaWdyYXRpb24gZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiA2MjM6XHQgKi9cbiA2MjQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRfdCBwbWQpXG4gNjI1Olx0e1xuIDYyNjpcdFx0cmV0dXJuIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcbiA2Mjc6XHR9XG4gNjI4Olx0XG4gNjI5Olx0LyoqXG4gNjMwOlx0ICogc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KCkgLSBJcyB0aGUgc3BlY2lmaWVkIHNvZnRsZWFmIGVudHJ5IG9idGFpbmVkIGZyb21cbiA2MzE6XHQgKiBhIFBNRCBvbmUgdGhhdCB3ZSBzdXBwb3J0IGF0IFBNRCBsZXZlbD9cbiA2MzI6XHQgKiBAZW50cnk6IEVudHJ5IHRvIGNoZWNrLlxuIDYzMzpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIHNvZnRsZWFmIGVudHJ5IGlzIHZhbGlkIGF0IFBNRCwgb3RoZXJ3aXNlIGZhbHNlLlxuIDYzNDpcdCAqL1xuIDYzNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcbiA2MzY6XHR7XG4gNjM3Olx0XHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xuIDYzODpcdFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxuIDYzOTpcdFx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xuIDY0MDpcdH1cbiA2NDE6XHRcbiA2NDI6XHQvKipcbiA2NDM6XHQgKiBwbWRfaXNfdmFsaWRfc29mdGxlYWYoKSAtIElzIHRoaXMgUE1EIGVudHJ5IGEgdmFsaWQgc29mdGxlYWYgZW50cnk/XG4gNjQ0Olx0ICogQHBtZDogUE1EIGVudHJ5LlxuIDY0NTpcdCAqXG4gNjQ2Olx0ICogUE1EIGxlYWYgZW50cmllcyBhcmUgdmFsaWQgb25seSBpZiB0aGV5IGFyZSBkZXZpY2UgcHJpdmF0ZSBvciBtaWdyYXRpb25cbiA2NDc6XHQgKiBlbnRyaWVzLiBUaGlzIGZ1bmN0aW9uIGFzc2VydHMgdGhhdCBhIFBNRCBsZWFmIGVudHJ5IGlzIHZhbGlkIGluIHRoaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkNoZWNraW5nIHRoZSBNaWdyYXRpb24gRW50cnkgTG9naWMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAgd291bGQgaGF2ZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBsaWtlbHkgYW4gYCNpZmRlZmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHByb3RlY3RpbmcgaXQuIEl0IHNlZW1zIHRvIGJlIHVzZWQgdG8gY2hlY2sgaWYgYW4gZW50cnkgaXMgYSBtaWdyYXRpb24gZW50cnkuIEJ1dCwgSSBkb24mIzM5O3Qgc2VlIG9uZS4gVGhhdOKAmXMgb2RkLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBieSBsb29raW5nIGF0IGhvdyBgc29mdGxlYWZfaXNfbWlncmF0aW9uYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJdCYjMzk7cyBwb3NzaWJsZSBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBvciB0aGF0IHRoZSBpbnRlbmRlZCBwcm90ZWN0aW9uIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBUaGlzIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29mdGxlYWZfaXNfbWlncmF0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0yNjM2PXN0YXRpYyB2b2lkIG1ha2VfdWZmZF93cF9odWdlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY1Mi1cbmZzL3Byb2MvdGFza19tbXUuYzoyNjUzOlx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbmZzL3Byb2MvdGFza19tbXUuYy0yNjU0LVx0XHRzZXRfaHVnZV9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTIwOD1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfc3dhcChzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIxMy0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjIxNDogKiBzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIHdyaXRhYmxlIG1pZ3JhdGlvbiBlbnRyeT9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIxNS0gKiBAZW50cnk6IExlYWYgZW50cnkuXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjE5LSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjIwOnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIyMS17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjI1LS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjI2OiAqIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSByZWFkYWJsZSBtaWdyYXRpb24gZW50cnk/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yMjctICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIzMS0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjIzMjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWQoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIzMy17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjM3LS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjM4OiAqIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkX2V4Y2x1c2l2ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGFuIGV4Y2x1c2l2ZVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjM5LSAqIHJlYWRhYmxlIG1pZ3JhdGlvbiBlbnRyeT9cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNDQtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNDU6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjQ2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTAtLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNTE6ICogc29mdGxlYWZfaXNfbWlncmF0aW9uKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBtaWdyYXRpb24gZW50cnk/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTItICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1NS0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI1NjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTcte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTM1NT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaGFzX3Bmbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM1OS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM2MDpcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYxLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00MDk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc29mdGxlYWZfdG9fcGFnZShzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQxMy1cdFZNX1dBUk5fT05fT05DRSghc29mdGxlYWZfaGFzX3BmbihlbnRyeSkpO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDE0Olx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00MTUtXHRcdHNvZnRsZWFmX21pZ3JhdGlvbl9zeW5jKGVudHJ5LCBwYWdlX2ZvbGlvKHBhZ2UpKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00MjY9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnNvZnRsZWFmX3RvX2ZvbGlvKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDMwLVx0Vk1fV0FSTl9PTl9PTkNFKCFzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0MzE6XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQzMi1cdFx0c29mdGxlYWZfbWlncmF0aW9uX3N5bmMoZW50cnksIGZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00NzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3VmZmRfd3BfbWFya2VyKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDg2LS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDg3OiAqIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl95b3VuZygpIC0gRG9lcyB0aGlzIG1pZ3JhdGlvbiBlbnRyeSBjb250YWluIGFuIGFjY2Vzc2VkXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00ODgtICogYml0P1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ5Ni0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ5NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uX3lvdW5nKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00OTgte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDk5Olx0Vk1fV0FSTl9PTl9PTkNFKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUwMC1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01MDctLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1MDg6ICogc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KCkgLSBEb2VzIHRoaXMgbWlncmF0aW9uIGVudHJ5IGNvbnRhaW4gYSBkaXJ0eSBiaXQ/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01MDktICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUxNS0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjUxNjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01MTcte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTE4Olx0Vk1fV0FSTl9PTl9PTkNFKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUxOS1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01MjctXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1Mjg6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl95b3VuZyhzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTI5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01MzItXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1MzM6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9kaXJ0eShzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTM0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MjQ9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjI1LXtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYyNjpcdHJldHVybiBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MjctfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM4LVx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjM5Olx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjQwLX1cbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9ODQ0PXN0YXRpYyB2b2lkIF9faW5pdCBzd2FwX21pZ3JhdGlvbl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NzAtXHRlbnRyeSA9IG1ha2Vfd3JpdGFibGVfbWlncmF0aW9uX2VudHJ5KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NzE6XHRXQVJOX09OKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKTtcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NzI6XHRXQVJOX09OKCFzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKTtcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NzMtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODc0LVx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX21pZ3JhdGlvbl9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODc1Olx0V0FSTl9PTighc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSk7XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODc2Olx0V0FSTl9PTihzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKTtcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NzctXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODc4LVx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX21pZ3JhdGlvbl9lbnRyeShwYWdlX3RvX3BmbihwYWdlKSk7XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODc5Olx0V0FSTl9PTighc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSk7XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODgwOlx0V0FSTl9PTihzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKTtcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04ODEtXHRfX0NsZWFyUGFnZUxvY2tlZChwYWdlKTtcbi0tXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0yOTAtXG5tbS9obW0uYzoyOTE6XHRcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XG5tbS9obW0uYy0yOTItXHRcdFx0cHRlX3VubWFwKHB0ZXApO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTgwOD1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTgxOC1cbm1tL2h1Z2VfbWVtb3J5LmM6MTgxOTpcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpIHx8XG5tbS9odWdlX21lbW9yeS5jOjE4MjA6XHQgICAgc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KSkge1xubW0vaHVnZV9tZW1vcnkuYy0xODIxLVx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI2MDA9c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjYwNy1cdFZNX1dBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSk7XG5tbS9odWdlX21lbW9yeS5jOjI2MDg6XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSkge1xubW0vaHVnZV9tZW1vcnkuYy0yNjA5LVx0XHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzA5Nj1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxNzMtXG5tbS9odWdlX21lbW9yeS5jOjMxNzQ6XHRcdHdyaXRlID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzE3NS1cdFx0aWYgKFBhZ2VBbm9uKHBhZ2UpKVxubW0vaHVnZV9tZW1vcnkuYzozMTc2Olx0XHRcdGFub25fZXhjbHVzaXZlID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmM6MzE3NzpcdFx0eW91bmcgPSBzb2Z0bGVhZl9pc19taWdyYXRpb25feW91bmcoZW50cnkpO1xubW0vaHVnZV9tZW1vcnkuYzozMTc4Olx0XHRkaXJ0eSA9IHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9kaXJ0eShlbnRyeSk7XG5tbS9odWdlX21lbW9yeS5jLTMxNzktXHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgqcG1kKSkge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NTAyMj12b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwNDAtXHRcdHBtZGUgPSBwbWRfbWtzb2Z0X2RpcnR5KHBtZGUpO1xubW0vaHVnZV9tZW1vcnkuYzo1MDQxOlx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpXG5tbS9odWdlX21lbW9yeS5jLTUwNDItXHRcdHBtZGUgPSBwbWRfbWt3cml0ZShwbWRlLCB2bWEpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTA0OS1cbm1tL2h1Z2VfbWVtb3J5LmM6NTA1MDpcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uX3lvdW5nKGVudHJ5KSlcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1MS1cdFx0cG1kZSA9IHBtZF9ta29sZChwbWRlKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1Mi1cdC8qIE5PVEU6IHRoaXMgbWF5IGNvbnRhaW4gc2V0dGluZyBzb2Z0LWRpcnR5IG9uIHNvbWUgYXJjaHMgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NTA1MzpcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KGVudHJ5KSlcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1NC1cdFx0cG1kZSA9IHBtZF9ta2RpcnR5KHBtZGUpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTA3NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NTA3NjpcdFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb25fcmVhZChlbnRyeSkpXG5tbS9odWdlX21lbW9yeS5jLTUwNzctXHRcdFx0cm1hcF9mbGFncyB8PSBSTUFQX0VYQ0xVU0lWRTtcbi0tXG5tbS9odWdldGxiLmM9NDkwMj1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXG4tLVxubW0vaHVnZXRsYi5jLTQ5NzUtXHRcdFx0c2V0X2h1Z2VfcHRlX2F0KGRzdCwgYWRkciwgZHN0X3B0ZSwgZW50cnksIHN6KTtcbm1tL2h1Z2V0bGIuYzo0OTc2Olx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZikpKSB7XG5tbS9odWdldGxiLmMtNDk3Ny1cdFx0XHRib29sIHVmZmQgPSBwdGVfc3dwX3VmZmQoZW50cnkpO1xubW0vaHVnZXRsYi5jLTQ5NzgtXG5tbS9odWdldGxiLmM6NDk3OTpcdFx0XHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKHNvZnRsZWFmKSBcdTAwMjZcdTAwMjYgY293KSB7XG5tbS9odWdldGxiLmMtNDk4MC1cdFx0XHRcdC8qXG4tLVxubW0vaHVnZXRsYi5jPTYwMTQ9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjA5MC1cbm1tL2h1Z2V0bGIuYzo2MDkxOlx0XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKHNvZnRsZWFmKSkge1xubW0vaHVnZXRsYi5jLTYwOTItXHRcdFx0Lypcbi0tXG5tbS9odWdldGxiLmM9NjQ5OD1sb25nIGh1Z2V0bGJfY2hhbmdlX3Byb3RlY3Rpb24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTY1ODQtXHRcdFx0LyogTm90aGluZyB0byBkby4gKi9cbm1tL2h1Z2V0bGIuYzo2NTg1Olx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpKSB7XG5tbS9odWdldGxiLmMtNjU4Ni1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xuLS1cbm1tL2h1Z2V0bGIuYy02NTg4LVxubW0vaHVnZXRsYi5jOjY1ODk6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpIHtcbm1tL2h1Z2V0bGIuYy02NTkwLVx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXG4tLVxubW0va3NtLmM9NjE2PXN0YXRpYyBpbnQgYnJlYWtfa3NtX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9rc20uYy02NDYtXHRcdFx0ICovXG5tbS9rc20uYzo2NDc6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpXG5tbS9rc20uYy02NDgtXHRcdFx0XHRmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcbi0tXG5tbS9tZW1vcnkuYz0xMDAxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vbWVtb3J5LmMtMTAyMi1cdFx0cnNzW01NX1NXQVBFTlRTXSYjNDM7JiM0Mzs7XG5tbS9tZW1vcnkuYzoxMDIzOlx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XG5tbS9tZW1vcnkuYy0xMDI0LVx0XHRmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcbi0tXG5tbS9tZW1vcnkuYy0xMDI3LVxubW0vbWVtb3J5LmM6MTAyODpcdFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb25fcmVhZChlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9tZW1vcnkuYy0xMDI5LVx0XHRcdFx0aXNfY293X21hcHBpbmcodm1fZmxhZ3MpKSB7XG4tLVxubW0vbWVtb3J5LmM9MTgxMT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTg0NS1cdFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3QoZW50cnksIG5yKTtcbm1tL21lbW9yeS5jOjE4NDY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTE4NDctXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XG4tLVxubW0vbWVtb3J5LmM9NDgyNT12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00ODQ2LVx0aWYgKHVubGlrZWx5KCFzb2Z0bGVhZl9pc19zd2FwKGVudHJ5KSkpIHtcbm1tL21lbW9yeS5jOjQ4NDc6XHRcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XG5tbS9tZW1vcnkuYy00ODQ4LVx0XHRcdG1pZ3JhdGlvbl9lbnRyeV93YWl0KHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCxcbi0tXG5tbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1wb2xpY3kuYy03MTktXG5tbS9tZW1wb2xpY3kuYzo3MjA6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpXG5tbS9tZW1wb2xpY3kuYy03MjEtXHRcdFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQmIzQzOyYjNDM7O1xuLS1cbm1tL21lbXBvbGljeS5jPTc3ND1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtNzkwLVxubW0vbWVtcG9saWN5LmM6NzkxOlx0XHRcdGlmICh1bmxpa2VseShzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSlcbm1tL21lbXBvbGljeS5jLTc5Mi1cdFx0XHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCYjNDM7JiM0Mzs7XG4tLVxubW0vbWlncmF0ZS5jPTM1MT1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0zOTEtXHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUob2xkX3B0ZSk7XG5tbS9taWdyYXRlLmM6MzkyOlx0XHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbl95b3VuZyhlbnRyeSkpXG5tbS9taWdyYXRlLmMtMzkzLVx0XHRcdHB0ZSA9IHB0ZV9ta29sZChwdGUpO1xubW0vbWlncmF0ZS5jOjM5NDpcdFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNiBzb2Z0bGVhZl9pc19taWdyYXRpb25fZGlydHkoZW50cnkpKVxubW0vbWlncmF0ZS5jLTM5NS1cdFx0XHRwdGUgPSBwdGVfbWtkaXJ0eShwdGUpO1xuLS1cbm1tL21pZ3JhdGUuYy00MDAtXG5tbS9taWdyYXRlLmM6NDAxOlx0XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSlcbm1tL21pZ3JhdGUuYy00MDItXHRcdFx0cHRlID0gcHRlX21rd3JpdGUocHRlLCB2bWEpO1xuLS1cbm1tL21pZ3JhdGUuYy00MDktXG5tbS9taWdyYXRlLmM6NDEwOlx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgIXNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKGVudHJ5KSlcbm1tL21pZ3JhdGUuYy00MTEtXHRcdFx0cm1hcF9mbGFncyB8PSBSTUFQX0VYQ0xVU0lWRTtcbi0tXG5tbS9taWdyYXRlLmM9NDk0PXZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4tLVxubW0vbWlncmF0ZS5jLTUxMi1cdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcbm1tL21pZ3JhdGUuYzo1MTM6XHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpXG5tbS9taWdyYXRlLmMtNTE0LVx0XHRnb3RvIG91dDtcbi0tXG5tbS9taWdyYXRlLmM9NTI5PXZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXRfaHVnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbi0tXG5tbS9taWdyYXRlLmMtNTQyLVx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xubW0vbWlncmF0ZS5jOjU0MzpcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XG5tbS9taWdyYXRlLmMtNTQ0LVx0XHQvKlxuLS1cbm1tL21wcm90ZWN0LmM9MjE0PXN0YXRpYyBsb25nIGNoYW5nZV9zb2Z0bGVhZl9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbXByb3RlY3QuYy0yMjItXG5tbS9tcHJvdGVjdC5jOjIyMzpcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKSB7XG5tbS9tcHJvdGVjdC5jLTIyNC1cdFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9jYWNoZWRfd3JpdGFibGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg0LVx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSB8fFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjE4NTpcdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xODYtfVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMjAtXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjE6XHRcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEyMi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xNTAxPXN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTY4My1cbm1tL3VzZXJmYXVsdGZkLmM6MTY4NDpcdFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbm1tL3VzZXJmYXVsdGZkLmMtMTY4NS1cdFx0XHRwdGVfdW5tYXAoc3JjX3B0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBgc29mdGxlYWZfaXNfbWlncmF0aW9uYCBJbmNsdXNpb24qKgoKT2theSwgc28gYHNvZnRsZWFmX2lzX21pZ3JhdGlvbmAgaXMgdW5jb25kaXRpb25hbGx5IGRlZmluZWQuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYHBtZF9pc19taWdyYXRpb25fZW50cnlgIGFzIGFsd2F5cyBhdmFpbGFibGUuIFJpZ2h0LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWFkdmlzZS5jYCwgYW5kIGBtbS9tZW1wb2xpY3kuY2AuIExldCYjMzk7cyBicmVhayBpdCBkb3duLgoKRmlyc3QsIEkgc2VlIHRoZSBtb2RpZmljYXRpb24gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGludm9sdmVzIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBjaGFuZ2UgaW4gYG1tL21hZHZpc2UuY2AgcmVsYXRlZCB0byBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gRmluYWxseSwgYG1tL21lbXBvbGljeS5jYCBtb2RpZmllcyBgcXVldWVfZm9saW9zX3BtZGAuIExldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiwgYHF1ZXVlX2ZvbGlvc19wbWRgLgoKYGBgYwpzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQp7CglzdHJ1Y3QgZm9saW8gKmZvbGlvOwoJc3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstJmd0O3ByaXZhdGU7CglwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwbWQpOwoKCWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQocG1kdmFsKSkpIHsKCQlpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKQoJCQlxcC0mZ3Q7bnJfZmFpbGVkJiM0MzsmIzQzOzsKCQlyZXR1cm47Cgl9Cglmb2xpbyA9IHBtZF9mb2xpbyhwbWR2YWwpOwoJaWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHsKCQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7CgkJcmV0dXJuOwoJfQouLi4KYGBgCgpBaCwgSSBzZWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gUHJldmlvdXNseSwgaWYgdGhlIFBNRCB3YXNuJiMzOTt0IHByZXNlbnQsIHRoZSBjb2RlIGp1c3QgY2hlY2tlZCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKWAuIEhvd2V2ZXIsIGlmIGl0IHdhc24mIzM5O3QgYSBtaWdyYXRpb24gZW50cnkgYW5kIHdhc24mIzM5O3QgcHJlc2VudCDigJMgc2F5IGEgc3dhcCBlbnRyeSwgb3IgYSBkZXZpY2UtcHJpdmF0ZSBlbnRyeSDigJMgdGhlIGNvZGUgd291bGQgaGF2ZSBjYWxsZWQgYHBtZF9mb2xpb2Agb24gYSBub24tcHJlc2VudCBQTUQuIFRoYXQgY291bGQgbGVhZCB0byBhIG5hc3R5IGNyYXNoLCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGNvbXBsZXRlbHkgd3JvbmcgZGF0YS4gVGhleSYjMzk7dmUgZml4ZWQgdGhpcyBub3csIGJ1dCBpdCBpcyBjbGVhciB0aGF0IHRoaXMgbmVlZHMgYSBsb3Qgb2YgdGVzdGluZy4KClNvIHRoZSBwb3RlbnRpYWwgZm9yIHVuZGVmaW5lZCBiZWhhdmlvciBoZXJlIGlzIGNvbmNlcm5pbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNwb3Qgd29ydGggZnV6emluZy4gSSYjMzk7bGwgZm9jdXMgb24gYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBhbmQgc2luY2UgYHF1ZXVlX2ZvbGlvc19wbWRgIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGZyb20gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbGF0dGVyIHRvby4gTGV0JiMzOTtzIHNlZSBob3cgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGxvb2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTY1Mz1zdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbm1tL21lbXBvbGljeS5jLTY4MC0gKlxubW0vbWVtcG9saWN5LmM6NjgxOiAqIHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UoKSBoYXMgdHdvIHBvc3NpYmxlIHJldHVybiB2YWx1ZXM6XG5tbS9tZW1wb2xpY3kuYy02ODItICogMCAtIGNvbnRpbnVlIHdhbGtpbmcgdG8gc2NhbiBmb3IgbW9yZSwgZXZlbiBpZiBhbiBleGlzdGluZyBmb2xpbyBvbiB0aGVcbi0tXG5tbS9tZW1wb2xpY3kuYy02ODYtICovXG5tbS9tZW1wb2xpY3kuYzo2ODc6c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbXBvbGljeS5jLTY4OC1cdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vbWVtcG9saWN5LmM9OTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfd2Fsa19vcHMgPSB7XG5tbS9tZW1wb2xpY3kuYy05NTUtXHQuaHVnZXRsYl9lbnRyeVx0XHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxubW0vbWVtcG9saWN5LmM6OTU2Olx0LnBtZF9lbnRyeVx0XHQ9IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UsXG5tbS9tZW1wb2xpY3kuYy05NTctXHQudGVzdF93YWxrXHRcdD0gcXVldWVfcGFnZXNfdGVzdF93YWxrLFxuLS1cbm1tL21lbXBvbGljeS5jPTk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHF1ZXVlX3BhZ2VzX2xvY2tfdm1hX3dhbGtfb3BzID0ge1xubW0vbWVtcG9saWN5LmMtOTYyLVx0Lmh1Z2V0bGJfZW50cnlcdFx0PSBxdWV1ZV9mb2xpb3NfaHVnZXRsYixcbm1tL21lbXBvbGljeS5jOjk2MzpcdC5wbWRfZW50cnlcdFx0PSBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlLFxubW0vbWVtcG9saWN5LmMtOTY0LVx0LnRlc3Rfd2Fsa1x0XHQ9IHF1ZXVlX3BhZ2VzX3Rlc3Rfd2FsayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IE5hdmlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ29udGV4dHMqKgoKT2theSwgc28gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGlzIGRlZmluaXRlbHkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBgcG1kX2VudHJ5YCB3aXRoaW4gYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVzc2VudGlhbCwgYXMgSSYjMzk7dmUgc2VlbiBpdHMgcm9sZSBpbiBgaHVnZV9tZW1vcnkuY2AgYW5kIHNwZWNpZmljYWxseSB3aXRoIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLiBUaGVuIHRoZXJlJiMzOTtzIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCwgY3J1Y2lhbCBmb3IgYG1hZHZpc2UuY2AsIGFuZCwgb2YgY291cnNlLCBgQ09ORklHX05VTUFgIHdoaWNoIHBsYXlzIGEga2V5IHJvbGUgd2l0aGluIGBtZW1wb2xpY3kuY2AuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24sIGFuZCBJIHNlZSB0aGF0IGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTYCAqbWlnaHQqIGJlIHJlbGV2YW50IGZvciBpdHMgYmVoYXZpb3IuIFRoZSBjb2RlIGdldHMgY29tcGlsZWQgZXZlbiBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCwgYnV0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBIb3dldmVyLCB0byBhY3R1YWxseSAqdGVzdCogdGhlIGRldmljZSBwcml2YXRlIGVudHJ5IHBhdGgsIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGEgbXVzdC4gTXkgaHVuY2ggaXMgdGhhdCB0aGUgb3JpZ2luYWwgYnVnIGhhZCB0byBkbyB3aXRoIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGVycm9uZW91c2x5IHJldHVybmluZyB0cnVlLCBjYXVzaW5nIHNvbWUgZmFpbHVyZSwgb3IgaXQgd2FzIGEgd2FybmluZyB0aGF0IG5lZWRlZCB0byBiZSBhZGRyZXNzZWQuCgpBaCwgaGVyZSYjMzk7cyB0aGUgY3J1Y2lhbCBwYXRjaCBzbmlwcGV0OgoKYGBgYwotCQlWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSAmYW1wOyZhbXA7Ci0JCQkJICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpOwomIzQzOwkJVk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTsKYGBgCgpUaGlzIGlzIGl0ISBCZWZvcmUsIGl0IHdhcyBhIGBWTV9CVUdfT05gIGlmIGl0IHdhc24mIzM5O3QgYSBtaWdyYXRpb24gZW50cnkuIE5vdywgaXQmIzM5O3MgYSBgVk1fV0FSTl9PTl9PTkNFYCBpZiBpdCBpcyBuZWl0aGVyIGEgbWlncmF0aW9uIGVudHJ5IG5vciBhIGRldmljZSBwcml2YXRlIGVudHJ5LiBUaGVyZWZvcmUgdGhlIG9yaWdpbmFsIGJ1ZyBsaWtlbHkgb3JpZ2luYXRlZCBmcm9tIGRldmljZSBwcml2YXRlIGVudHJpZXMgc29tZWhvdyB0cmlnZ2VyaW5nIHRoYXQgYFZNX0JVR19PTmAuIFRvIHRyaWdnZXIgdGhlIGRldmljZSBwcml2YXRlIGVudHJ5IHBhdGggcmVsaWFibHksIEkgd291bGQgbmVlZCB0byBlbmFibGUgYENPTkZJR19aT05FX0RFVklDRWAuIEp1c3QgdG8gY29uZmlybSwgSSBzaG91bGQgaW52ZXN0aWdhdGUgaWYgYENPTkZJR19aT05FX0RFVklDRWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMjM9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjctXG5tbS9LY29uZmlnOjEyMjg6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjktXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2ODIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IE1hbmFnZW1lbnQgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHNpdHVhdGlvbi4gV2UmIzM5O3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIGBaT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgYSBnaXZlbi4gQWxzbywgSSYjMzk7bSBzZWVpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYEFEVklTRV9TWVNDQUxMU2AsIGFuZCBgTlVNQWAgaW4gdGhlIG1peC4gTGV0JiMzOTtzIGdldCB0aGlzIHN0cmFpZ2h0OiB0aGVzZSBhcmUgbXkgZm9jdXMgcG9pbnRzLgoKU28sIGxldCBtZSBzdW1tYXJpemUgbXkgZm9jdXMuIFRoZSBrZXkgc3ltYm9scyB0aGF0IGFyZSBjYXRjaGluZyBteSBhdHRlbnRpb24gYXJlOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGFuZCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAuIFRoZXNlIHNlZW0gY2VudHJhbCB0byB0aGUgYmVoYXZpb3IuCgpBbmQsIG9mIGNvdXJzZSwgdGhlc2UgRW5hYmxlQ29uZmlncyBhcmUgYWxzbyBpbXBvcnRhbnQ6IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBBRFZJU0VfU1lTQ0FMTFNgLCBgTlVNQWAsIGFuZCBgWk9ORV9ERVZJQ0VgLiBUaGVzZSBlbmFibGUgZGlmZmVyZW50IGZlYXR1cmVzIGZvciBtZW1vcnkgbWFuYWdlbWVudC4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSB0aGluayBtb3JlIGNyaXRpY2FsbHkgYWJvdXQgaXQuIEFyZSBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgc3RhdGljIG9yIGV4cG9ydGVkPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVzZSBzeW1ib2xzIGFyZSBjb21pbmcgZnJvbSwgYW5kIHRoZSBzY29wZSBvZiB0aGVzZSBzeW1ib2xzLCBzbyBJIGNhbiBtb3JlIGNsZWFybHkgZGV0ZXJtaW5lIGhvdyB0aGlzIGFsbCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfd3BfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5LVx0XHRcdCAgIHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyMzQ9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMzEzLSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyMzE0OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0yMzE1LVx0XHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcbi0tXG5tbS9tYWR2aXNlLmM9NjUyPXN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWFkdmlzZS5jLTY2OC1cdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kKSlcbm1tL21hZHZpc2UuYzo2Njk6XHRcdGlmIChtYWR2aXNlX2ZyZWVfaHVnZV9wbWQodGxiLCB2bWEsIHBtZCwgYWRkciwgbmV4dCkpXG5tbS9tYWR2aXNlLmMtNjcwLVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUzMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlIHRvIGVhY2ggb3RoZXIgaW4gdGhlIGtlcm5lbC4gYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgaXMgYXZhaWxhYmxlIHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYmVjYXVzZSBpdCYjMzk7cyBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIC0gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBtb2R1bGVzIG9yIGtlcm5lbCBjb21wb25lbnRzLiBJdCYjMzk7cyBub3QgYEVYUE9SVF9TWU1CT0xgLCBidXQgaXQmIzM5O3Mgbm90IGBzdGF0aWNgLCBzbyBpdCYjMzk7cyB2aXNpYmxlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE5vdywgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGRlZmluZWQgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGludGVybmFsIHRvIHRoYXQgcGFydGljdWxhciBmaWxlIGFuZCBub3QgbWVhbnQgZm9yIGV4dGVybmFsIHVzZS4gU2ltaWxhcmx5LCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgaXMgYWxzbyBzdGF0aWMsIHRoaXMgdGltZSB3aXRoaW4gYG1tL21lbXBvbGljeS5jYCwgd2hpY2ggdGVsbHMgbWUgaXQgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIG9ubHkgd2l0aGluIHRoZSBtZW1vcnkgcG9saWN5IG1hbmFnZW1lbnQgY29kZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIHRoZSB1c2FnZSBvZiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCB0byB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBtYWR2aXNlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MzQzPXN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfZm9saW9fcHRlX2JhdGNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWFkdmlzZS5jLTM1Mi1cbm1tL21hZHZpc2UuYzozNTM6c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbm1tL21hZHZpc2UuYy0zNTQtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hZHZpc2UuYz01Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xubW0vbWFkdmlzZS5jOjU2OTpcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXG5tbS9tYWR2aXNlLmMtNTcwLVx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTMxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpcyBhIGNhbGxiYWNrIHJlbGF0ZWQgdG8gYHBtZF9lbnRyeWAsIGdvdCBpdC4gVGhlIGdpc3QgaXMsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2Ugd2VyZW4mIzM5O3QgY2hlY2tpbmcgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgYmVmb3JlIGNhbGxpbmcgYHBtZF9mb2xpb2Agb3IgdHJpZ2dlcmluZyB0aGF0IGBWTV9CVUdfT05gIGNhbGwgd2l0aGluIHRoZSBgbWFkdmlzZWAgYW5kIG1lbW9yeSBwb2xpY3kgY29kZSBwYXRocy4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBhZmZlY3RpbmcgaG93IHdlIGhhbmRsZSBub24tcHJlc2VudCBQTURzLCB3aGljaCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhcyBpbXBhY3RpbmcgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgYG1hZHZpc2VgLCBhbmQgYG1iaW5kYC9gc2V0X21lbXBvbGljeWAgc3lzY2FsbHMg4oCTIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdGllcywgZXNwZWNpYWxseSBpbiBtb2Rlcm4gc3lzdGVtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCByZWFjaGFibGUgdGhyb3VnaCB0aGUgYG1hZHZpc2VgIGFuZCBgbWJpbmRgL2BzZXRfbWVtcG9saWN5YCBzeXNjYWxscyDigJMgdmVyeSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgd2hlbiB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaW1wYWN0cy4KClRoZSBwcmVzZW5jZSBvZiBgV29ydGhGdXp6aW5nOiB0cnVlYCB0ZWxscyBtZSB0aGlzIGlzIHJpcGUgZm9yIHRlc3RpbmcsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgaW4gdGhlc2UgbWVtb3J5LWludGVuc2l2ZSBhcmVhcy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBxdWl0ZSB0ZWxsaW5nOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGFuZCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgYXJlIGFsbCBhcmVhcyB3aGVyZSB0aGlzIG92ZXJzaWdodCBjb3VsZCBtYW5pZmVzdC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2V0IHRvIGZvY3VzIG9uLiBBbmQgdGhlIGBFbmFibGVDb25maWdzYCBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhlIHNjb3BlIOKAkyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgQURWSVNFX1NZU0NBTExTYCwgYE5VTUFgLCBhbmQgYFpPTkVfREVWSUNFYCBhbGwgcG9pbnQgdG8gYWR2YW5jZWQgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW9zLgoKTm93LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gYSBiaXQgY3VyaW91cywgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHdlIG1pZ2h0IGJlIG1pc3Npbmc/IEhtbW0sIGxldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCBgQ09ORklHX0RFVklDRV9QUklWQVRFYD8gWWVhaCwgbGV0JiMzOTtzIHNlYXJjaCBmb3IgdGhhdC4gVGhhdCB3b3VsZCBjZXJ0YWlubHkgaW5mbHVlbmNlIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIE5lZWQgdG8gY2hlY2sgaWYgaXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjU0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNTYtXG5tbS9LY29uZmlnOjEyNTc6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNTgtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg5OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGVidWdnaW5nIGEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgREVWSUNFX1BSSVZBVEVgIHRoaW5nIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIGEgY29uZmlnIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIHJlbGV2YW5jZSwgaWYgYW55LCB0byB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRlbHZlIGludG8gaG93IHRoZXNlIHR3byBjb21wb25lbnRzIGludGVyYWN0LiBJcyB0aGlzIGNvbmZpZyBvcHRpb24gKmFjdHVhbGx5KiB1c2VkIGJ5IHRoYXQgcGFydGljdWxhciBmdW5jdGlvbj8gVGhpcyBpcyB0aGUgY29yZSBxdWVzdGlvbiB0byBhbnN3ZXIgaGVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgaW5jbHVkZXMgdGhlIHVzZSBvZiBgREVWSUNFX1BSSVZBVEVgIHdoZW4gY2FsbGluZyBvciB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTc0PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfdWZmZF9tYXJrZXIocHRlX3QgcHRlKVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5Mi0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU5MzogKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXBcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5NC0gKiBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDMtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMC1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYxMTpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipSZXZpc2l0aW5nIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAqKgoKQWxyaWdodCwgdGltZSB0byBjaXJjbGUgYmFjayB0byBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBsZWFmIG9wZXJhdGlvbnMgYXJlIGN1cnJlbnRseSBoYW5kbGVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSByZWNlbnQgZGlzY3Vzc2lvbnMgb24gW2luc2VydCByZWxldmFudCBjb250ZXh0LCBlLmcuLCB0aGUgcHJvcG9zZWQgb3B0aW1pemF0aW9uIG9yIHRoZSBzcGVjaWZpYyBpc3N1ZSB1bmRlciBpbnZlc3RpZ2F0aW9uXS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIHJlZ2FyZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgbG93LWxldmVsIHJvdXRpbmVzIHdpdGggdGhlIG92ZXJhbGwgcGFnZSBtYW5hZ2VtZW50IHNjaGVtZS4gVGhpcyBmaWxlIGlzIHRoZSBsaW5jaHBpbiwgYW5kIGEgc3VidGxlIGRldGFpbCBvdmVybG9va2VkIGhlcmUgY291bGQgaGF2ZSBzaWduaWZpY2FudCBkb3duc3RyZWFtIGNvbnNlcXVlbmNlcy4gTGV0IG1lIHJlLWV4YW1pbmUgdGhlIG1hY3JvcyBmb3IgYGFkZF90b19wYWdlX2NhY2hlYCwgYHJlbW92ZV9mcm9tX3BhZ2VfY2FjaGVgLCBhbmQgdGhlIGFzc29jaWF0ZWQgbG9jayBzZW1hbnRpY3MsIHBheWluZyBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byB0aGVpciBhdG9taWNpdHkgYW5kIG9yZGVyaW5nIGd1YXJhbnRlZXMgaW4gdGhlIGNvbnRleHQgb2YgW21lbnRpb24gc3BlY2lmaWMgYXJlYXMgb2YgY29uY2VybiwgZS5nLiwgY29uY3VycmVudCBhY2Nlc3MsIE5VTUEgYXJjaGl0ZWN0dXJlcywgb3Igc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXNdLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgc3RpbGwgdGhlIG9wdGltYWwgYXBwcm9hY2ggb3IgaWYgdGhlcmUgaXMgc3BhY2UgZm9yIHNvbWUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4NTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA1ODY6XHRcbiA1ODc6XHRcdHJldHVybiBmYWxzZTtcbiA1ODg6XHR9XG4gNTg5Olx0XG4gNTkwOlx0I2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpXG4gNTkxOlx0XG4gNTkyOlx0LyoqXG4gNTkzOlx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG4gNTk0Olx0ICogZW50cnkuXG4gNTk1Olx0ICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cbiA1OTY6XHQgKlxuIDU5NzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgUE1EIGNvbnRhaW5zIGEgc3dhcCBlbnRyeSB0aGF0IHJlcHJlc2VudHMgYSBkZXZpY2UgcHJpdmF0ZVxuIDU5ODpcdCAqIHBhZ2UgbWFwcGluZy4gVGhpcyBpcyB1c2VkIGZvciB6b25lIGRldmljZSBwcml2YXRlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuXG4gNTk5Olx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxuIDYwMDpcdCAqIG9wZXJhdGlvbnMuXG4gNjAxOlx0ICpcbiA2MDI6XHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcbiA2MDM6XHQgKi9cbiA2MDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbiA2MDU6XHR7XG4gNjA2Olx0XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG4gNjA3Olx0fVxuIDYwODpcdFxuIDYwOTpcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUyAqL1xuIDYxMDpcdFxuIDYxMTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuIDYxMjpcdHtcbiA2MTM6XHRcdHJldHVybiBmYWxzZTtcbiA2MTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk5hdmlnYXRpbmcgdGhlIERldmljZSBDb25maWd1cmF0aW9uIE1hemUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyB0aGUga2V5IGZsYWcgSSBuZWVkIHRvIGZvY3VzIG9uLiBUaGF0IGZlZWxzIHJpZ2h0LCBidXQgaG9sZCBvbiBhIHNlY29uZC4uLiBteSBleHBlcmllbmNlIGlzIHRlbGxpbmcgbWUgSSBuZWVkIHRvIGJlIGNhdXRpb3VzIGFib3V0IGFzc3VtaW5nIHNvbWV0aGluZyBsaWtlIHRoYXQgZGlyZWN0bHkuIFRoZXJlJiMzOTtzIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBtaWdodCBiZSBjb250aW5nZW50IG9uIHRoZSBgREVWSUNFX1BSSVZBVEVgIHNldHRpbmcuIEl0IHdvdWxkIGJlIGEgc2lsbHkgb3ZlcnNpZ2h0IHRvIG92ZXJsb29rIHRoYXQgZGVwZW5kZW5jeS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7bSBhY2NvdW50aW5nIGZvciBhbGwgdGhlIHBvdGVudGlhbCByYW1pZmljYXRpb25zIG9mIGVuYWJsaW5nIGBDT05GSUdfWk9ORV9ERVZJQ0VgIHdpdGggcmVnYXJkIHRvIGRldmljZSBwcml2YWN5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBxdWlja2x5IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MjU2PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjgtLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNjk6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzAtICogd3JpdGFibGUgZW50cnk/XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc1LSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjc2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODEtLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODI6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlIGVudHJ5P1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjgzLSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODYtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODc6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODgte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTM1NT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaGFzX3Bmbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2MS1cdFx0cmV0dXJuIHRydWU7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNjI6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MDQ9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA2Olx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX2Zyb21fcG1kKHBtZCkpO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MzU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3ZhbGlkX3BtZF9lbnRyeShzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzNy1cdC8qIE9ubHkgZGV2aWNlIHByaXZhdGUsIG1pZ3JhdGlvbiBlbnRyaWVzIHZhbGlkIGZvciBQTUQuICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2Mzg6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MzktXHRcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTgwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgU2lnbmlmaWNhbmNlIG9mIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZXhhbWluZSBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiAmIzM0O3NvZnRsZWFmJiMzNDsgc3VnZ2VzdHMgYSBzcGVjaWZpYyBzdWJzeXN0ZW0gb3IgbW9kdWxlLCBsaWtlbHkgcmVsYXRlZCB0byBkZXZpY2UgbWFuYWdlbWVudCwgcG90ZW50aWFsbHkgYSBkcml2ZXIgb3Igc29tZSBhYnN0cmFjdGlvbiBsYXllci4gVGhlICYjMzQ7aXNfZGV2aWNlX3ByaXZhdGUmIzM0OyBzdWZmaXggaXMgdGhlIGtleSDigJMgaXQmIzM5O3MgYSBCb29sZWFuIHZhcmlhYmxlLCBmbGFnLCBvciBwcm9wZXJ0eSwgaW5kaWNhdGluZyBhIGNoYXJhY3RlcmlzdGljIG9mIGEgZGV2aWNlIG9yIGEgcmVsYXRpb25zaGlwIHRvIGEgc3BlY2lmaWMgZGV2aWNlLgoKTXkgbWluZCByYWNlcyB0aHJvdWdoIHRoZSBwb3NzaWJsZSBzY2VuYXJpb3M6IElzIHRoaXMgYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcj8gQSBydW50aW1lIHN0YXRlIHZhcmlhYmxlPyBBIGNvbXBpbGUtdGltZSBjb25zdGFudD8gV2hhdCBwYXJ0IG9mIHRoZSBzeXN0ZW0gaXMgc2V0dGluZyB0aGlzIGZsYWcgYW5kIHdoYXQgcGFydHMgYXJlIHJlYWRpbmcgaXQ/IElzIHRoaXMga2VybmVsLWxldmVsIG9yIHVzZXItc3BhY2U/IEFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGFyZSB0aGUgc2VjdXJpdHkgb3Igb3BlcmF0aW9uYWwgY29uc2VxdWVuY2VzIGlmIHRoaXMgdmFyaWFibGUgaXMgaW5jb3JyZWN0bHkgc2V0IG9yIG1pc2ludGVycHJldGVkPyBJZiBhIGRldmljZSBpcyBtYXJrZWQgJiMzNDtwcml2YXRlJiMzNDsgaXMgaXQgdW5hdmFpbGFibGUgdG8gb3RoZXIgcHJvY2Vzc2VzIG9yIHRoZSBlbnRpcmUgc3lzdGVtPyBJcyB0aGVyZSBhIGxlYWsgcG90ZW50aWFsPyBBcmUgdGhlcmUgYW55IHNlY3VyaXR5IG1pdGlnYXRpb25zIGluIHBsYWNlIHRvIHByb3RlY3QgZGV2aWNlIHN0YXRlPwoKSSYjMzk7bSBzdGFydGluZyB0byBjb25zaWRlciBzcGVjaWZpYyBxdWVzdGlvbnMuIERvZXMgdGhpcyByZWxhdGUgdG8gcGh5c2ljYWwgcmVzb3VyY2UgaXNvbGF0aW9uPyBJcyB0aGlzIGFib3V0IHByZXZlbnRpbmcgdW5hdXRob3JpemVkIGFjY2VzcyB0byBoYXJkd2FyZSByZXNvdXJjZXM/IElzIHRoZSBgc29mdGxlYWZgIG1vZHVsZSByZXNwb25zaWJsZSBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgYWNjZXNzIGNvbnRyb2w/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgaGVyZSB3aWxsIGJlIGltcG9ydGFudC4gSWYgaXQgaXMgc2VjdXJpdHkgcmVsYXRlZCwgSSYjMzk7ZCBpbW1lZGlhdGVseSB3YW50IHRvIGtub3cgd2hvIGhhcyBhY2Nlc3MgdG8gdGhlIGRldmljZSBvciBpbmZvcm1hdGlvbiBhYm91dCBpdC4KCk15IGluc3RpbmN0IGlzIHRvIHN0YXJ0IGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUsIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyBvZiB0aGlzIHZhcmlhYmxlIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIGl0LiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIHRoZSBhc3NpZ25tZW50IGFuZCB1c2FnZXMgb2YgdGhpcyB2YXJpYWJsZSwgZXNwZWNpYWxseSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBzZXQgdG8gdHJ1ZSBvciBmYWxzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLCB0aGUgaW50ZW50LCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgYW55IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBhbHNvIHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbi4gRG9lcyBgc29mdGxlYWZgIHNldCB0aGUgYGlzX2RldmljZV9wcml2YXRlYCBmbGFnIGFuZCB0aGVuIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhlIGRldmljZSYjMzk7cyBzdGF0ZSB0byBhbm90aGVyIGNvbXBvbmVudD8gSXMgdGhpcyBvcGVyYXRpb24gYXRvbWljPyBUaGlzIGlzIGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzU6XHQgKi9cbiAyNzY6XHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcbiAyNzc6XHR7XG4gMjc4Olx0XHRyZXR1cm4gc29mdGxlYWZfdHlwZShlbnRyeSkgPT0gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG4gMjc5Olx0fVxuIDI4MDpcdFxuIDI4MTpcdC8qKlxuIDI4MjpcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cbiAyODM6XHQgKiBAZW50cnk6IExlYWYgZW50cnkuXG4gMjg0Olx0ICpcbiAyODU6XHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiAyODY6XHQgKi9cbiAyODc6XHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcbiAyODg6XHR7XG4gMjg5Olx0XHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XG4gMjkwOlx0XHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxuIDI5MTpcdFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9SRUFEOlxuIDI5MjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyOTM6XHRcdGRlZmF1bHQ6XG4gMjk0Olx0XHRcdHJldHVybiBmYWxzZTtcbiAyOTU6XHRcdH1cbiAyOTY6XHR9XG4gMjk3Olx0XG4gMjk4Olx0LyoqXG4gMjk5Olx0ICogc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeT9cbiAzMDA6XHQgKiBAZW50cnk6IExlYWYgZW50cnkuXG4gMzAxOlx0ICpcbiAzMDI6XHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeSwgb3RoZXJ3aXNlIGZhbHNlLlxuIDMwMzpcdCAqL1xuIDMwNDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKHNvZnRsZWFmX3QgZW50cnkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHNvIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIHRydWUsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBIb3dldmVyLCBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBpcyBhIGxpdHRsZSBtb3JlIGNvbmRpdGlvbmFsLiBJdCBkZXBlbmRzIG9uIHdoZXRoZXIgYENPTkZJR19aT05FX0RFVklDRWAgYW5kIGBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNgIGFyZSBzZXQuIEhtbSwgSSBrbm93IGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIGV4aXN0cyBzb21ld2hlcmUgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0b28sIGFuZCBzaW5jZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgZmxhZ3MsIEkmIzM5O2QgYmV0dGVyIGRvdWJsZSBjaGVjayB3aGVyZSB0aGF0JiMzOTtzIGRlZmluZWQuIFRpbWUgdG8gZ28gbG9vayBhdCBgbW0vS2NvbmZpZ2AgYW5kIHZlcmlmeSBpdHMgaW1wbGljYXRpb25zLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBldmVyeXRoaW5nIHdvcmtzIGFzIGl0IHNob3VsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjUwOlx0Y29uZmlnIEhNTV9NSVJST1JcbjEyNTE6XHRcdGJvb2xcbjEyNTI6XHRcdGRlcGVuZHMgb24gTU1VXG4xMjUzOlx0XG4xMjU0Olx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuMTI1NTpcdFx0Ym9vbFxuMTI1NjpcdFxuMTI1NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI1ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNTk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNjA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNjE6XHRcbjEyNjI6XHRcdGhlbHBcbjEyNjM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNjQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI2NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjY2Olx0XG4xMjY3Olx0Y29uZmlnIFZNQVBfUEZOXG4xMjY4Olx0XHRib29sXG4xMjY5Olx0XG4xMjcwOlx0Y29uZmlnIEFSQ0hfVVNFU19ISUdIX1ZNQV9GTEFHU1xuMTI3MTpcdFx0Ym9vbFxuMTI3MjpcdGNvbmZpZyBBUkNIX0hBU19QS0VZU1xuMTI3MzpcdFx0Ym9vbFxuMTI3NDpcdFxuMTI3NTpcdGNvbmZpZyBBUkNIX1VTRVNfUEdfQVJDSF8yXG4xMjc2Olx0XHRib29sXG4xMjc3Olx0Y29uZmlnIEFSQ0hfVVNFU19QR19BUkNIXzNcbjEyNzg6XHRcdGJvb2xcbjEyNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1OTEKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGhhcyBhIGRlcGVuZGVuY3kgb24gYFpPTkVfREVWSUNFYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHNhZmUgYW5kIGNvdmVyIGFsbCBiYXNlcywgSSB0aGluayBJJiMzOTtsbCBhZGQgYERFVklDRV9QUklWQVRFYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIEl0JiMzOTtzIGJldHRlciB0byBiZSBleHBsaWNpdCwgZXZlbiBpZiBpdCBzZWVtcyByZWR1bmRhbnQgaW5pdGlhbGx5LgoKU28sIGhlcmUmIzM5O3Mgd2hhdCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGN1cnJlbnRseSBsb29rcyBsaWtlLCB3aXRoIHRoZSBhZGRpdGlvbiBJJiMzOTt2ZSBtYWRlOgoKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKKiAgIGBBRFZJU0VfU1lTQ0FMTFNgCiogICBgTlVNQWAKKiAgIGBaT05FX0RFVklDRWAKKiAgIGBERVZJQ0VfUFJJVkFURWAKCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGV5IGFyZToKCiogICBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYAoqICAgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAKKiAgIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYAoKSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgdnVsbmVyYWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2Ygbm9uLXByZXNlbnQgUE1Ecywgc3BlY2lmaWNhbGx5IHRoZSBsYWNrIG9mIGEgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgY2hlY2sgYmVmb3JlIGNhbGxpbmcgYHBtZF9mb2xpb2Agb3IgdHJpZ2dlcmluZyBhIGBWTV9CVUdfT05gLiBUaGlzIGltcGFjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIG1hZHZpc2Ugb3BlcmF0aW9ucywgYW5kIG1lbW9yeSBwb2xpY2llcy4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgdGhpcyBpc3N1ZSBpcyByZWFjaGFibGUgdGhyb3VnaCBgbWFkdmlzZWAgYW5kIHRoZSBgbWJpbmRgL2BzZXRfbWVtcG9saWN5YCBzeXN0ZW0gY2FsbHMuIFRoaXMgbWVhbnMgaXQgaGFzIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLCBzbyBpdCYjMzk7cyBhIGdvb2QgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3F1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgd2FzIG5vdCBjaGVja2VkIGJlZm9yZSBjYWxsaW5nIGBwbWRfZm9saW9gIG9yIHRyaWdnZXJpbmcgYSBgVk1fQlVHX09OYCBpbiBgbWFkdmlzZWAgYW5kIGBtZW1wb2xpY3lgIGNvZGUgcGF0aHMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBtYWR2aXNlLCBhbmQgbWVtb3J5IHBvbGljaWVzIHdoZW4gZGVhbGluZyB3aXRoIG5vbi1wcmVzZW50IFBNRHMgKGxpa2UgbWlncmF0aW9uIG9yIGRldmljZSBwcml2YXRlIGVudHJpZXMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgYG1hZHZpc2VgIGFuZCBgbWJpbmRgL2BzZXRfbWVtcG9saWN5YCBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3F1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgd2FzIG5vdCBjaGVja2VkIGJlZm9yZSBjYWxsaW5nIGBwbWRfZm9saW9gIG9yIHRyaWdnZXJpbmcgYSBgVk1fQlVHX09OYCBpbiBgbWFkdmlzZWAgYW5kIGBtZW1wb2xpY3lgIGNvZGUgcGF0aHMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBtYWR2aXNlLCBhbmQgbWVtb3J5IHBvbGljaWVzIHdoZW4gZGVhbGluZyB3aXRoIG5vbi1wcmVzZW50IFBNRHMgKGxpa2UgbWlncmF0aW9uIG9yIGRldmljZSBwcml2YXRlIGVudHJpZXMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgYG1hZHZpc2VgIGFuZCBgbWJpbmRgL2BzZXRfbWVtcG9saWN5YCBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQyOjIzLjA0MTk2ODI4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTYyNTcwNzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCIsXG4gICAgXCJOVU1BXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiLFxuICAgIFwicXVldWVfZm9saW9zX3B0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIHdhcyBub3QgY2hlY2tlZCBiZWZvcmUgY2FsbGluZyBgcG1kX2ZvbGlvYCBvciB0cmlnZ2VyaW5nIGEgYFZNX0JVR19PTmAgaW4gYG1hZHZpc2VgIGFuZCBgbWVtcG9saWN5YCBjb2RlIHBhdGhzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgbWFkdmlzZSwgYW5kIG1lbW9yeSBwb2xpY2llcyB3aGVuIGRlYWxpbmcgd2l0aCBub24tcHJlc2VudCBQTURzIChsaWtlIG1pZ3JhdGlvbiBvciBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIGBtYWR2aXNlYCBhbmQgYG1iaW5kYC9gc2V0X21lbXBvbGljeWAgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQyOjIzLjA0MTk3NDY1OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMTkwMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTdkZDk0NzI2YzFlMWUwMjExNzc3NjYzZTc3MjdkMzZiOTIxYjc5NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAwODo0MjoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDI1NjEyYWY3MmRjYTJlLi4wZGQ5ODMwYTdkMzI3MyAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC0yMzMxLDggKzIzMzEsOCBAQCBib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4tXFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0ICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xcbitcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xcbmluZGV4IDkyOTJmNjBiMTlhYTdjLi5jNTU3MDIzYzNmYWQ1NSAxMDA2NDRcXG4tLS0gYS9tbS9tYWR2aXNlLmNcXG4rKysgYi9tbS9tYWR2aXNlLmNcXG5AQCAtMzg4LDggKzM4OCw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuIFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4tXFx0XFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0XFx0IXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcXG4rXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XFxuIFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcXG5pbmRleCA5MTRmODE4NjNkYjVhNi4uNjlhMDBhMzI0ZWY1MzEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcXG4rKysgYi9tbS9tZW1wb2xpY3kuY1xcbkBAIC02NTQsMTIgKzY1NCwxNCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiB7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdHN0cnVjdCBxdWV1ZV9wYWdlcyAqcXAgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwbWQpO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KHBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpKSB7XFxuLVxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4rXFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChwbWR2YWwpKSkge1xcbitcXHRcXHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKVxcbitcXHRcXHRcXHRxcC1cXHUwMDNlbnJfZmFpbGVkKys7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTtcXG4rXFx0Zm9saW8gPSBwbWRfZm9saW8ocG1kdmFsKTtcXG4gXFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcXG4gXFx0XFx0d2Fsay1cXHUwMDNlYWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFO1xcbiBcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQyOjIzLjY0NTEwMzI1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxMDIyNTY0MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIixcbiAgICBcIk5VTUFcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gICAgXCJxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgd2FzIG5vdCBjaGVja2VkIGJlZm9yZSBjYWxsaW5nIGBwbWRfZm9saW9gIG9yIHRyaWdnZXJpbmcgYSBgVk1fQlVHX09OYCBpbiBgbWFkdmlzZWAgYW5kIGBtZW1wb2xpY3lgIGNvZGUgcGF0aHMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBtYWR2aXNlLCBhbmQgbWVtb3J5IHBvbGljaWVzIHdoZW4gZGVhbGluZyB3aXRoIG5vbi1wcmVzZW50IFBNRHMgKGxpa2UgbWlncmF0aW9uIG9yIGRldmljZSBwcml2YXRlIGVudHJpZXMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgYG1hZHZpc2VgIGFuZCBgbWJpbmRgL2BzZXRfbWVtcG9saWN5YCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5N2RkOTQ3MjZjMWUxZTAyMTE3Nzc2NjNlNzcyN2QzNmI5MjFiNzk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDg6NDI6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMjU2MTJhZjcyZGNhMmUuLjBkZDk4MzBhN2QzMjczIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTIzMzEsOCArMjMzMSw4IEBAIGJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xuLVx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbitcdFx0Vk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCA5MjkyZjYwYjE5YWE3Yy4uYzU1NzAyM2MzZmFkNTUgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbisrKyBiL21tL21hZHZpc2UuY1xuQEAgLTM4OCw4ICszODgsOCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gXG4gXHRcdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xuLVx0XHRcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xuK1x0XHRcdFZNX1dBUk5fT05fT05DRSghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcbiBcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggOTE0ZjgxODYzZGI1YTYuLjY5YTAwYTMyNGVmNTMxIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbisrKyBiL21tL21lbXBvbGljeS5jXG5AQCAtNjU0LDEyICs2NTQsMTQgQEAgc3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbitcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XG4gXG4tXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbi1cdFx0cXAtXHUwMDNlbnJfZmFpbGVkKys7XG4rXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XG4rXHRcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZHZhbCkpXG4rXHRcdFx0cXAtXHUwMDNlbnJfZmFpbGVkKys7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xuK1x0Zm9saW8gPSBwbWRfZm9saW8ocG1kdmFsKTtcbiBcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XG4gXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFO1xuIFx0XHRyZXR1cm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MjoyMy42NDUxMDU3NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkyNDg3MzM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBpbiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgU3Vic3lzdGVtKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyB0aHJlZSBmaWxlcyB3aXRoaW4gdGhlIGBtbS9gIGRpcmVjdG9yeTogYGh1Z2VfbWVtb3J5LmNgLCBgbWFkdmlzZS5jYCwgYW5kIGBtZW1wb2xpY3kuY2AuIFNlZW1zIGxpa2UgYSBmb2N1c2VkIHNldCBvZiBtb2RpZmljYXRpb25zLlxuXG5JbiBgaHVnZV9tZW1vcnkuY2AgYW5kIGBtYWR2aXNlLmNgLCB0aGUgY29yZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGEgYFZNX0JVR19PTmAgd2l0aCBhIGBWTV9XQVJOX09OX09OQ0VgIGFuZCBhZGp1c3RpbmcgdGhlIGNvbmRpdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSB3YXMgbWFraW5nIGEgc3Ryb25nIGFzc2VydGlvbiBhYm91dCB0aGUgcHJlc2VuY2Ugb2YgYSBtaWdyYXRpb24gZW50cnkuIE5vdywgaXQncyByZXBsYWNlZCB3aXRoIGEgd2FybmluZyB0aGF0IHRyaWdnZXJzIG9ubHkgb25jZSwgYW5kIGluY2x1ZGVzIGEgY2hlY2sgZm9yIGRldmljZS1wcml2YXRlIGVudHJpZXMuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGVyZSBtaWdodCBoYXZlIGJlZW4gYSBzY2VuYXJpbyB3aGVyZSB0aGlzIGFzc2VydGlvbiB3YXMgZmlyaW5nIHNwdXJpb3VzbHksIHBlcmhhcHMgZHVlIHRvIGRldmljZS1zcGVjaWZpYyBtZW1vcnkgbWFwcGluZ3Mgb3IgYSBtb3JlIHBlcm1pc3NpdmUgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBjb25zdGl0dXRlcyBhIHZhbGlkIFBNRC4gVGhpcyBpcyBsaWtlbHkgYSBzYWZldHkgaW1wcm92ZW1lbnQsIHByZXZlbnRpbmcgcG90ZW50aWFsbHkgZGlzcnVwdGl2ZSBrZXJuZWwgcGFuaWNzIGluIGxlc3MgY3JpdGljYWwgc2l0dWF0aW9ucy5cblxuVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgY2hhbmdlIGluIGBtbS9tZW1wb2xpY3kuY2AuIEhlcmUsIHRoZSBgcXVldWVfZm9saW9zX3BtZGAgZnVuY3Rpb24gaXMgYmVpbmcgbW9kaWZpZWQuIFByZXZpb3VzbHksIGl0IGRpcmVjdGx5IGRlcmVmZXJlbmNlZCB0aGUgYHBtZGAgcG9pbnRlciAoYCpwbWRgKSBhbmQgY2hlY2tlZCBpZiBpdCB3YXMgYSBtaWdyYXRpb24gZW50cnkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHBtZHBfZ2V0KHBtZClgIGNhbGwsIGdldHMgdGhlIFBNRCB2YWx1ZSwgYW5kIGNoZWNrcyBpdHMgcHJlc2VuY2UgKmJlZm9yZSogY2hlY2tpbmcgaWYgaXQncyBhIG1pZ3JhdGlvbiBlbnRyeS4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQuIEl0IGFwcGVhcnMgdGhlcmUgd2FzIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSBgcG1kX2ZvbGlvKClgIGNvdWxkIGJlIGNhbGxlZCBvbiBhIFBNRCB0aGF0IHdhc24ndCBwcmVzZW50LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuZGVmaW5lZCBiZWhhdmlvciBvciBldmVuIGEga2VybmVsIGNyYXNoLiBCeSBhZGRpbmcgdGhpcyBgIXBtZF9wcmVzZW50KClgIGNoZWNrIGZpcnN0LCB0aGUgY29kZSBub3cgaGFuZGxlcyBjYXNlcyB3aGVyZSB0aGUgUE1EIG1pZ2h0IGJlIGEgc3dhcCBlbnRyeSwgZGV2aWNlLXByaXZhdGUsIG9yIG90aGVyd2lzZSBub3QgdmFsaWQgZm9yIGZvbGlvIHJldHJpZXZhbC4gSXQncyBhIGNsYXNzaWMgZGVmZW5zZS1pbi1kZXB0aCBhcHByb2FjaCwgcHJldmVudGluZyB0aGUgZnVuY3Rpb24gZnJvbSBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgcG9pbnRlci4gVGhpcyBpcyBhIGdvb2QgY2F0Y2gsIGFuZCBhIHNvbGlkIGV4YW1wbGUgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nIGluIGEgY29tcGxleCBhcmVhLlxuXG5MZXQncyBjaGVjayB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLCBgcXVldWVfZm9saW9zX3BtZGAsIHRvIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4gTGV0J3Mgc2VlIGhvdyBpdCdzIHVzZWQgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AgYW5kIGl0cyBjYWxsLWNoYWluLCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbnMgZW5hYmxlIHRoZSBmdW5jdGlvbmFsaXR5LiBGb2N1c2luZyBvbiBzeW1ib2xzIHN1Y2ggYXMgYHF1ZXVlX2ZvbGlvc19wbWRgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBJIGNhbiBzZWUgYSBjbGVhcmVyIHBpY3R1cmUgaW4gdGhpcyBhcmVhLiBPaCwgYHF1ZXVlX2ZvbGlvc19wbWRgIGlzIHN0YXRpYy4gVGhhdCBtZWFucyB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIGlzIGV2ZW4gbW9yZSBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDI6MzQuNTY5OTgwNjA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTcxNTQ4MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfZm9saW9zX3BtZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz02NDQ9c3RhdGljIGlubGluZSBib29sIHF1ZXVlX2ZvbGlvX3JlcXVpcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy02NTItXFxubW0vbWVtcG9saWN5LmM6NjUzOnN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxubW0vbWVtcG9saWN5LmMtNjU0LXtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTY4Nz1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNzAwLVxcdGlmIChwdGwpIHtcXG5tbS9tZW1wb2xpY3kuYzo3MDE6XFx0XFx0cXVldWVfZm9saW9zX3BtZChwbWQsIHdhbGspO1xcbm1tL21lbXBvbGljeS5jLTcwMi1cXHRcXHRzcGluX3VubG9jayhwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MjozNy4yNjcxNDM4NTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjU5NDg4NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucywgYHF1ZXVlX2ZvbGlvc19wbWRgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBpbnRlcmFjdCB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEl0J3MgY2xlYXIgdGhhdCBgcXVldWVfZm9saW9zX3BtZGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLCB3aGljaCBpcyBnb29kIHRvIGtub3csIHRoYXQgc2V0cyB0aGUgcmVsYXRpb25zaGlwIGNsZWFybHkuIEkga25vdyBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCByZXNpZGVzIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBsaXZlcyBpbiBgbW0vbWFkdmlzZS5jYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyBmb3IgdGhvc2UgZmlsZXMgdG8gZ2V0IGEgZ3JpcCBvbiBob3cgdG8gZWZmZWN0aXZlbHkgdGVzdCB0aGVtLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MuIEZyb20gbWVtb3J5LCBgbW0vaHVnZV9tZW1vcnkuY2AgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0U9eWAuIFNvIGlmIHRoYXQgaXNuJ3Qgc2V0LCB0aGVuIHRob3NlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IG5vbi1vcGVyYXRpb25hbC4gRm9yIGBtbS9tYWR2aXNlLmNgLCB0aGUgbGlua2FnZSB0byB0aGUgY29tcGlsYXRpb24gaXMgbGVzcyBjbGVhciB0byBtZS4gSSB0aGluayBpdCByZWxpZXMgb24gYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgSSBiZXR0ZXIgdmVyaWZ5IHRoYXQgZGlyZWN0bHkuIEknbGwgbmVlZCB0byBsb29rIGF0IGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZXhhY3QgY29uZmlnIG9wdGlvbnMgdGhhdCBnb3Zlcm4gaXRzIGluY2x1c2lvbiBpbiB0aGUgYnVpbGQuIEtub3dpbmcgdGhvc2UgcHJlcmVxdWlzaXRlcyBpcyBjcnVjaWFsIGZvciB0YXJnZXRlZCBhbmFseXNpcyBhbmQgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTgyLCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQyOjQ2LjUyNjYzNDMyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI5OTY5Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5Lm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDI6NDkuMjU2NjA2NjQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDIzNDk3MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYz0zMDEwPUVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2bV9zbV9tYXBfb3BzX2NyZWF0ZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmMtMzAxMi0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmM6MzAxMzogKiBkcm1fZ3B1dm1fbWFkdmlzZV9vcHNfY3JlYXRlKCkgLSBjcmVhdGVzIHRoZSBcXHUwMDI2ZHJtX2dwdXZhX29wcyB0byBzcGxpdFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYy0zMDE0LSAqIEBncHV2bTogdGhlIFxcdTAwMjZkcm1fZ3B1dm0gcmVwcmVzZW50aW5nIHRoZSBHUFUgVkEgc3BhY2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYz0zMDQxPXN0cnVjdCBkcm1fZ3B1dmFfb3BzICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmM6MzA0Mjpkcm1fZ3B1dm1fbWFkdmlzZV9vcHNfY3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYy0zMDQzLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRybV9ncHV2bV9tYXBfcmVxICpyZXEpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmMtMzA0Ni19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jOjMwNDc6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX21hZHZpc2Vfb3BzX2NyZWF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jLTMwNDgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYz03MzE9c3RhdGljIGludCBtc21faW9jdGxfZ2VtX21hZHZpc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jLTc1MC1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYzo3NTE6XFx0cmV0ID0gbXNtX2dlbV9tYWR2aXNlKG9iaiwgYXJncy1cXHUwMDNlbWFkdik7XFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMtNzUyLVxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTM1PXhlLXkgKz0geGVfYmIubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMTQ2LVxcdHhlX3ZtLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZToxNDc6XFx0eGVfdm1fbWFkdmlzZS5vIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMTQ4LVxcdHhlX3ZyYW0ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYz00Njk2PXN0YXRpYyBpbnQgeGVfdm1fYWxsb2Nfdm1hKHN0cnVjdCB4ZV92bSAqdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00NzExLVxcdGlmIChpc19tYWR2aXNlKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ3MTI6XFx0XFx0b3BzID0gZHJtX2dwdXZtX21hZHZpc2Vfb3BzX2NyZWF0ZShcXHUwMDI2dm0tXFx1MDAzZWdwdXZtLCBtYXBfcmVxKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00NzEzLVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQ3NTgtXFx0XFx0XFx0XFx0LypcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYzo0NzU5OlxcdFxcdFxcdFxcdCAqIEluIGNhc2Ugb2YgbWFkdmlzZSBvcHMgRFJNX0dQVVZBX09QX01BUCBpc1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQ3NjAtXFx0XFx0XFx0XFx0ICogYWx3YXlzIGFmdGVyIERSTV9HUFVWQV9PUF9SRU1BUCwgc28gZW5zdXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00Nzk1LVxcdFxcdFxcdHZtYSA9IGdwdXZhX3RvX3ZtYShvcC1cXHUwMDNlYmFzZS5yZW1hcC51bm1hcC1cXHUwMDNldmEpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ3OTY6XFx0XFx0XFx0LyogSW4gY2FzZSBvZiBtYWR2aXNlIG9wcyBTdG9yZSBhdHRyaWJ1dGVzIGZvciBSRU1BUCBVTk1BUFBFRFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQ3OTctXFx0XFx0XFx0ICogVk1BLCBzbyB0aGV5IGNhbiBiZSBhc3NpZ25lZCB0byBuZXdseSBNQVAgY3JlYXRlZCB2bWEuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00ODI2LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ4Mjc6ICogeGVfdm1fYWxsb2NfbWFkdmlzZV92bWEgLSBBbGxvY2F0ZSBWTUEncyB3aXRoIG1hZHZpc2Ugb3BzXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtNDgyOC0gKiBAdm06IFBvaW50ZXIgdG8gdGhlIHhlX3ZtIHN0cnVjdHVyZVxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmg9MTEwNT1zdHJ1Y3QgZHJtX2dwdXZhX29wcyAqXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmg6MTEwNjpkcm1fZ3B1dm1fbWFkdmlzZV9vcHNfY3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLFxcbmluY2x1ZGUvZHJtL2RybV9ncHV2bS5oLTExMDctXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZHJtX2dwdXZtX21hcF9yZXEgKnJlcSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zNDU9c3RydWN0IHRocHNpemUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzU4LSAqIENoZWNrIHdoZXRoZXIgVEhQcyBhcmUgZXhwbGljaXRseSBkaXNhYmxlZCBmb3IgdGhpcyBWTUEsIGZvciBleGFtcGxlLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjM1OTogKiB0aHJvdWdoIG1hZHZpc2Ugb3IgcHJjdGwuXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzYwLSAqL1xcbi0tXFxubW0vTWFrZWZpbGU9NzQ9aWZkZWYgQ09ORklHX01NVVxcbm1tL01ha2VmaWxlOjc1OlxcdG9iai0kKENPTkZJR19BRFZJU0VfU1lTQ0FMTFMpXFx0Kz0gbWFkdmlzZS5vXFxubW0vTWFrZWZpbGUtNzYtZW5kaWZcXG4tLVxcbm1tL21hZHZpc2UuYz0xMjQzPXN0YXRpYyBsb25nIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTEyNjUtI2lmZGVmIENPTkZJR182NEJJVFxcbm1tL21hZHZpc2UuYzoxMjY2Oi8qIERvZXMgdGhlIG1hZHZpc2Ugb3BlcmF0aW9uIHJlc3VsdCBpbiBkaXNjYXJkaW5nIG9mIG1hcHBlZCBkYXRhPyAqL1xcbm1tL21hZHZpc2UuYy0xMjY3LXN0YXRpYyBib29sIGlzX2Rpc2NhcmQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jPTIwMTI9U1lTQ0FMTF9ERUZJTkUzKG1hZHZpc2UsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbl9pbiwgaW50LCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0yMDE2LVxcbm1tL21hZHZpc2UuYzoyMDE3Oi8qIFBlcmZvcm0gYW4gbWFkdmlzZSBvcGVyYXRpb24gb3ZlciBhIHZlY3RvciBvZiBhZGRyZXNzZXMgYW5kIGxlbmd0aHMuICovXFxubW0vbWFkdmlzZS5jLTIwMTgtc3RhdGljIHNzaXplX3QgdmVjdG9yX21hZHZpc2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbm1tL21hZHZpc2UuYy0yMDQ3LVxcdFxcdC8qXFxubW0vbWFkdmlzZS5jOjIwNDg6XFx0XFx0ICogQW4gbWFkdmlzZSBvcGVyYXRpb24gaXMgYXR0ZW1wdGluZyB0byByZXN0YXJ0IHRoZSBzeXNjYWxsLFxcbm1tL21hZHZpc2UuYy0yMDQ5LVxcdFxcdCAqIGJ1dCB3ZSBjYW5ub3QgcHJvY2VlZCBhcyBpdCB3b3VsZCBub3QgYmUgY29ycmVjdCB0byByZXBlYXRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FybTY0L210ZS9jaGVja19rc21fb3B0aW9ucy5jPTgwPXN0YXRpYyB2b2lkIG10ZV9rc21fc2Nhbih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmMtOTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM6OTg6c3RhdGljIGludCBjaGVja19tYWR2aXNlX29wdGlvbnMoaW50IG1lbV90eXBlLCBpbnQgbW9kZSwgaW50IG1hcHBpbmcpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmMtOTkte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM9MTMxPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM6MTUzOlxcdGV2YWx1YXRlX3Rlc3QoY2hlY2tfbWFkdmlzZV9vcHRpb25zKFVTRV9NTUFQLCBNVEVfU1lOQ19FUlIsIE1BUF9QUklWQVRFKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTQtXFx0XFx0XFxcIkNoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3IgcHJpdmF0ZSBtYXBwaW5nLCBzeW5jIG1vZGUgYW5kIG1tYXAgbWVtb3J5XFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYzoxNTU6XFx0ZXZhbHVhdGVfdGVzdChjaGVja19tYWR2aXNlX29wdGlvbnMoVVNFX01NQVAsIE1URV9BU1lOQ19FUlIsIE1BUF9QUklWQVRFKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTYtXFx0XFx0XFxcIkNoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3IgcHJpdmF0ZSBtYXBwaW5nLCBhc3luYyBtb2RlIGFuZCBtbWFwIG1lbW9yeVxcXFxuXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM6MTU3OlxcdGV2YWx1YXRlX3Rlc3QoY2hlY2tfbWFkdmlzZV9vcHRpb25zKFVTRV9NTUFQLCBNVEVfU1lOQ19FUlIsIE1BUF9TSEFSRUQpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FybTY0L210ZS9jaGVja19rc21fb3B0aW9ucy5jLTE1OC1cXHRcXHRcXFwiQ2hlY2sgS1NNIG10ZSBwYWdlIG1lcmdlIGZvciBzaGFyZWQgbWFwcGluZywgc3luYyBtb2RlIGFuZCBtbWFwIG1lbW9yeVxcXFxuXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM6MTU5OlxcdGV2YWx1YXRlX3Rlc3QoY2hlY2tfbWFkdmlzZV9vcHRpb25zKFVTRV9NTUFQLCBNVEVfQVNZTkNfRVJSLCBNQVBfU0hBUkVEKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNjAtXFx0XFx0XFxcIkNoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3Igc2hhcmVkIG1hcHBpbmcsIGFzeW5jIG1vZGUgYW5kIG1tYXAgbWVtb3J5XFxcXG5cXFwiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jPTQ3PWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jLTI4MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYzoyODI6XFx0LyogbWFkdmlzZSBvZiBzaGFyZWQgbWFwcGluZyBzaG91bGQgbm90IGZyZWUgYW55IHBhZ2VzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMtMjgzLVxcdGlmIChtYWR2aXNlKGFkZHIsIE5SX0hVR0VfUEFHRVMgKiBodWdlX3BhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYy0yODctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmM6Mjg4OlxcdC8qIG1hZHZpc2Ugb2YgcHJpdmF0ZSBtYXBwaW5nIHNob3VsZCBmcmVlIHByaXZhdGUgcGFnZXMgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYy0yODktXFx0aWYgKG1hZHZpc2UoYWRkcjIsIE5SX0hVR0VfUEFHRVMgKiBodWdlX3BhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jPTMzNT1zdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMtMzQ0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmM6MzQ1OlxcdG1hZHZpc2Uob25lX3BhZ2UsIGxlbiwgTUFEVl9IVUdFUEFHRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYy0zNDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQyOjUxLjc5ODk2MDQ5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU4OTcyMTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbXBvbGljeS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0PTM0MT1wYWdlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBub2RlIGxvY2FsIHRvIHdoZXJlIHRoZSB0YXNrIGlzIHJ1bm5pbmcsXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q6MzQyOmV4Y2VwdCBwZXJoYXBzIGFzIG1vZGlmaWVkIGJ5IHRoZSB0YXNrJ3MgTlVNQSBtZW1wb2xpY3kgb3IgY3B1c2V0XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3QtMzQzLWNvbmZpZ3VyYXRpb24sIHNvIGxvbmcgYXMgc3VmZmljaWVudCBmcmVlIG1lbW9yeSBwYWdlcyBhcmUgYXZhaWxhYmxlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q9MzUyPXRoZWlyIGNvbnRhaW5pbmcgdGFzaydzIG1lbW9yeSBzcHJlYWQgc2V0dGluZ3MuICBJZiBtZW1vcnkgc3ByZWFkaW5nXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q6MzUzOmlzIHR1cm5lZCBvZmYsIHRoZW4gdGhlIGN1cnJlbnRseSBzcGVjaWZpZWQgTlVNQSBtZW1wb2xpY3kgb25jZSBhZ2FpblxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0LTM1NC1hcHBsaWVzIHRvIG1lbW9yeSBwYWdlIGFsbG9jYXRpb25zLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MzgyPXBhZ2VzIG9uIHRoZSBwYXJlbnQgbm9kZSB3aWxsIGJlIGFkanVzdGVkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUsIGlmIHN1ZmZpY2llbnRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDozODM6cmVzb3VyY2VzIGV4aXN0LCByZWdhcmRsZXNzIG9mIHRoZSB0YXNrJ3MgbWVtcG9saWN5IG9yIGNwdXNldCBjb25zdHJhaW50cy5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0zODQtXFxuLS1cXG5tbS9NYWtlZmlsZT04NT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXFx0Kz0gaHVnZXRsYl92bWVtbWFwLm9cXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXFx0Kz0gbWVtcG9saWN5Lm9cXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVxcdCs9IHNwYXJzZS5vXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNTk9RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhnZXRfdGFza19wb2xpY3ksIFxcXCJrdm1cXFwiKTtcXG5tbS9tZW1wb2xpY3kuYy0zNjAtXFxubW0vbWVtcG9saWN5LmM6MzYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtcG9saWN5X29wZXJhdGlvbnMge1xcbm1tL21lbXBvbGljeS5jLTM2Mi1cXHRpbnQgKCpjcmVhdGUpKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZXMpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9NTY1PXZvaWQgbXBvbF9yZWJpbmRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIG5vZGVtYXNrX3QgKm5ldylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTU3Ny1cXG5tbS9tZW1wb2xpY3kuYzo1Nzg6c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1wb2xpY3lfb3BlcmF0aW9ucyBtcG9sX29wc1tNUE9MX01BWF0gPSB7XFxubW0vbWVtcG9saWN5LmMtNTc5LVxcdFtNUE9MX0RFRkFVTFRdID0ge1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjAyMT1zdHJ1Y3QgbWVtcG9saWN5ICpfX2dldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjAzNy0gKiBSZXR1cm5zIGVmZmVjdGl2ZSBwb2xpY3kgZm9yIGEgVk1BIGF0IHNwZWNpZmllZCBhZGRyZXNzLlxcbm1tL21lbXBvbGljeS5jOjIwMzg6ICogRmFsbHMgYmFjayB0byBjdXJyZW50LVxcdTAwM2VtZW1wb2xpY3kgb3Igc3lzdGVtIGRlZmF1bHQgcG9saWN5LCBhcyBuZWNlc3NhcnkuXFxubW0vbWVtcG9saWN5LmMtMjAzOS0gKiBTaGFyZWQgcG9saWNpZXMgW3Rob3NlIG1hcmtlZCBhcyBNUE9MX0ZfU0hBUkVEXSByZXF1aXJlIGFuIGV4dHJhIHJlZmVyZW5jZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0Mjo1NC4zNTc5Mzg3MjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ5MzQ4NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRXhhbWluaW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBtb2R1bGVzIGFuZCB0aGVpciByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCBgaHVnZV9tZW1vcnkub2AgaXMgdGllZCB0byBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiBgbWFkdmlzZS5vYCBuZWVkcyBgQURWSVNFX1NZU0NBTExTYCDigJMgcHJlZGljdGFibGUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgYG1hZHZpc2VgLiBgbWVtcG9saWN5Lm9gIGNsZWFybHkgcmVxdWlyZXMgYE5VTUFgLCBhcyBleHBlY3RlZC4gTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBzbGlnaHRseSB0cmlja3kuIEkgc2VlIGBERVZJQ0VfTUlHUkFUSU9OYCBsaXN0ZWQgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgdHJpZ2dlcnMgYSBmbGFnOyBkb2Vzbid0IGBERVZJQ0VfUFJJVkFURWAgb3IgYE1JR1JBVElPTmAgb3IgYm90aCBpbXBhY3QgZGV2aWNlIHByaXZhdGUgZW50cmllcz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBjb25uZWN0aW9uLiBCZXR0ZXIgdG8gdmVyaWZ5IHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgbW92ZSBvbi4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBib3RoIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGFuZCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgY29uZmlncy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDI6NTguNTA3Mjg5ODQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyMTE3Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTItLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTkzOiAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5NC0gKiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTE6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEyLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjMxND1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMzNC1cXHRcXHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFxcdTAwMjZcXHUwMDI2XFxubW0vaHVnZV9tZW1vcnkuYzoyMzM1OlxcdFxcdFxcdFxcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcXG5tbS9odWdlX21lbW9yeS5jLTIzMzYtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwOTY9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxNzgtXFx0XFx0ZGlydHkgPSBzb2Z0bGVhZl9pc19taWdyYXRpb25fZGlydHkoZW50cnkpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzE3OTpcXHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgqcG1kKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzE4MC1cXHRcXHRzb2Z0bGVhZl90IGVudHJ5O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMzE5LVxcdFxcdH1cXG5tbS9odWdlX21lbW9yeS5jOjMzMjA6XFx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob2xkX3BtZCkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTMzMjEtXFx0XFx0cHRlX3QgZW50cnk7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MzUzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMzkxLVxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tYWR2aXNlLmM6MzkyOlxcdFxcdFxcdFxcdFxcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcXG5tbS9tYWR2aXNlLmMtMzkzLVxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuLS1cXG5tbS9tZW1vcnkuYz02NTQ4PXN0YXRpYyB2bV9mYXVsdF90IF9faGFuZGxlX21tX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtNjYyMS1cXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHZtZi5vcmlnX3BtZCkpKSB7XFxubW0vbWVtb3J5LmM6NjYyMjpcXHRcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHZtZi5vcmlnX3BtZCkpXFxubW0vbWVtb3J5LmMtNjYyMy1cXHRcXHRcXHRyZXR1cm4gZG9faHVnZV9wbWRfZGV2aWNlX3ByaXZhdGUoXFx1MDAyNnZtZik7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODY9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTMtXFx0XFx0ICAgIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpIHx8XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjU0OlxcdFxcdCAgICBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU1LVxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjY1LVxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI2NjpcXHRcXHRcXHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkge1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2Ny1cXHRcXHRcXHRcXHRzb2Z0bGVhZl90IGVudHJ5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzowMC44OTk0MTMwMDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2NjY0MjQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGluIGBsaW51eC9sZWFmb3BzLmhgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBkZXZpY2UtcHJpdmF0ZSBtYXBwaW5ncywgc3BlY2lmaWNhbGx5IGF0IHRoZSBwYWdlIG1pZGRsZSBkaXJlY3RvcnkgKFBNRCkgbGV2ZWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gSSByZWNhbGwgdGhpcyBmaWxlIG9mdGVuIGNvbnRhaW5zIGxvdy1sZXZlbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3IgZ2VuZXJpYyBoZWxwZXIgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbi4gR2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZSwgSSBzdXNwZWN0IGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGlzIGxpa2VseSBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbi4gSXQncyBwdXJwb3NlLCBhcyB0aGUgbmFtZSBpbXBsaWVzLCBpcyBwcm9iYWJseSB0byBxdWlja2x5IGFuZCBlZmZpY2llbnRseSBkZXRlcm1pbmUgaWYgYSBnaXZlbiBQTUQgZW50cnkgcmVwcmVzZW50cyBtZW1vcnkgcHJpdmF0ZSB0byBhIGRldmljZSBkcml2ZXIsIGxpa2VseSB1c2VkIGZvciBtZW1vcnktbWFwcGVkIEkvTyBvciBkaXJlY3QgbWVtb3J5IGFjY2Vzcy4gSSBleHBlY3QgaXQgdG8gaW52b2x2ZSBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIGNoZWNrcyBhZ2FpbnN0IHJlc2VydmVkIGJpdHMgd2l0aGluIHRoZSBQTUQncyBmb3JtYXQuIExldCdzIHNlZSBpZiB0aGUgY29kZSBjb25maXJtcyBteSBhc3N1bXB0aW9ucyBhbmQgcmV2ZWFscyB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIGFsc28gaGF2ZSB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBiYXNlZCBvbiB0aGUgY29udGV4dCBvZiB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQzOjA2Ljg2NjA1NzU1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgxMDMyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU3ND1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5Mi0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1OTM6ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTk0LSAqIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjAzLSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwNDpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEwLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYxMTpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzowNi45NjQxNjYwMTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU0NTYwODU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZSB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24uIFRoaXMgaXNuJ3Qgc29tZXRoaW5nIEkgc3R1bWJsZSBhY3Jvc3MgZXZlcnkgZGF5LCBzbyBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCBteSBzdGFuZGFyZCBwcm9jZXNzLiBGaXJzdCwgbGV0J3Mgc2VlIGlmIHRoZSBmdW5jdGlvbiBpdHNlbGYgaGFzIGFueSBleHBsaWNpdCBgI2lmZGVmYCBjb25kaXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdC4gSSdsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgc2VhcmNoIHRvb2xzIGFuZCBtZXRob2QgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEknbGwgZm9jdXMgb24gdGhlIGtlcm5lbCBzb3VyY2UuIEknbGwgY2hlY2sgaXRzIGRlZmluaXRpb24gdG8gc2VlIGlmIEkgY2FuIGZpbmQgYW4gaW5jbHVkZSBmaWxlIG9yIG1hY3JvIHRoYXQgZ2l2ZXMgbWUgYW55IGhpbnRzLiBUaGVuIEknbGwgd29yayBmcm9tIHRoZXJlLiBUaGlzIHdpbGwgYmUgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoLCBJIHRoaW5rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQzOjEzLjUwOTc3NzM2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTkwOlxcdCNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpXFxuIDU5MTpcXHRcXG4gNTkyOlxcdC8qKlxcbiA1OTM6XFx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuIDU5NDpcXHQgKiBlbnRyeS5cXG4gNTk1OlxcdCAqIEBwbWQ6IFRoZSBQTUQgdG8gY2hlY2suXFxuIDU5NjpcXHQgKlxcbiA1OTc6XFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBQTUQgY29udGFpbnMgYSBzd2FwIGVudHJ5IHRoYXQgcmVwcmVzZW50cyBhIGRldmljZSBwcml2YXRlXFxuIDU5ODpcXHQgKiBwYWdlIG1hcHBpbmcuIFRoaXMgaXMgdXNlZCBmb3Igem9uZSBkZXZpY2UgcHJpdmF0ZSBwYWdlcyB0aGF0IGhhdmUgYmVlblxcbiA1OTk6XFx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxcbiA2MDA6XFx0ICogb3BlcmF0aW9ucy5cXG4gNjAxOlxcdCAqXFxuIDYwMjpcXHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcXG4gNjAzOlxcdCAqL1xcbiA2MDQ6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDYwNTpcXHR7XFxuIDYwNjpcXHRcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIDYwNzpcXHR9XFxuIDYwODpcXHRcXG4gNjA5OlxcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXFxuIDYxMDpcXHRcXG4gNjExOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbiA2MTI6XFx0e1xcbiA2MTM6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA2MTQ6XFx0fVxcbiA2MTU6XFx0XFxuIDYxNjpcXHQjZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUyAqL1xcbiA2MTc6XFx0XFxuIDYxODpcXHQvKipcXG4gNjE5OlxcdCAqIHBtZF9pc19taWdyYXRpb25fZW50cnkoKSAtIERvZXMgdGhpcyBQTUQgZW50cnkgZW5jb2RlIGEgbWlncmF0aW9uIGVudHJ5P1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzoxMy41MDk5NTAyMTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMDg2ODY5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgUE1EIEVudHJ5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIG1hcCBvZiB0aGUgUE1EIChQYWdlIE1hcCBEaXJlY3RvcnkpIGVudHJ5IGxhbmRzY2FwZSBpcyB0ZWxsaW5nIG1lIHRoYXQsIGZvciB0aGUgY29uZGl0aW9uIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIHRvIGV2YWx1YXRlIHRvIHRydWUsIEknbSBnb2luZyB0byBuZWVkIGJvdGggYENPTkZJR19aT05FX0RFVklDRWAgKmFuZCogYENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU2AgZGVmaW5lZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoYXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gc3BhY2UgY29uc2lkZXJhdGlvbi4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyBub3c6IFdoYXQgYWJvdXQgYHBtZF9pc19taWdyYXRpb25fZW50cnlgPyBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBhc3BlY3Qgd2hlbiBkZWFsaW5nIHdpdGggcGFnZSBtaWdyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhbmQgYXJjaGl0ZWN0dXJhbCBhc3N1bXB0aW9ucyBmb3IgaGFuZGxpbmcgZGV2aWNlLXByaXZhdGUgZW50cmllcyBoYXZlIGFueSBvdmVybGFwIG9yIGltcGxpY2F0aW9ucyBmb3IgZGV0ZWN0aW5nIG1pZ3JhdGlvbiBlbnRyaWVzLiBBcmUgdGhlcmUgcmVsYXRlZCBkZXBlbmRlbmNpZXMsIG9yIGFyZSB0aGVzZSBjb21wbGV0ZWx5IG9ydGhvZ29uYWwgY29uY2VybnM/IEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBoZXJlLCBvciBsYWNrIHRoZXJlb2YuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoZSBjb2RlYmFzZSBmb3IgYW55IHJlbGF0ZWQgYXJlYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzoyNC41MTg2Mzk2NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxOCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxODpcXHQvKipcXG4gNjE5OlxcdCAqIHBtZF9pc19taWdyYXRpb25fZW50cnkoKSAtIERvZXMgdGhpcyBQTUQgZW50cnkgZW5jb2RlIGEgbWlncmF0aW9uIGVudHJ5P1xcbiA2MjA6XFx0ICogQHBtZDogUE1EIGVudHJ5LlxcbiA2MjE6XFx0ICpcXG4gNjIyOlxcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIFBNRCBlbmNvZGVzIGEgbWlncmF0aW9uIGVudHJ5LCBvdGhlcndpc2UgZmFsc2UuXFxuIDYyMzpcXHQgKi9cXG4gNjI0OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZF90IHBtZClcXG4gNjI1OlxcdHtcXG4gNjI2OlxcdFxcdHJldHVybiBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIDYyNzpcXHR9XFxuIDYyODpcXHRcXG4gNjI5OlxcdC8qKlxcbiA2MzA6XFx0ICogc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KCkgLSBJcyB0aGUgc3BlY2lmaWVkIHNvZnRsZWFmIGVudHJ5IG9idGFpbmVkIGZyb21cXG4gNjMxOlxcdCAqIGEgUE1EIG9uZSB0aGF0IHdlIHN1cHBvcnQgYXQgUE1EIGxldmVsP1xcbiA2MzI6XFx0ICogQGVudHJ5OiBFbnRyeSB0byBjaGVjay5cXG4gNjMzOlxcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIHNvZnRsZWFmIGVudHJ5IGlzIHZhbGlkIGF0IFBNRCwgb3RoZXJ3aXNlIGZhbHNlLlxcbiA2MzQ6XFx0ICovXFxuIDYzNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXFxuIDYzNjpcXHR7XFxuIDYzNzpcXHRcXHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xcbiA2Mzg6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbiA2Mzk6XFx0XFx0XFx0c29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KTtcXG4gNjQwOlxcdH1cXG4gNjQxOlxcdFxcbiA2NDI6XFx0LyoqXFxuIDY0MzpcXHQgKiBwbWRfaXNfdmFsaWRfc29mdGxlYWYoKSAtIElzIHRoaXMgUE1EIGVudHJ5IGEgdmFsaWQgc29mdGxlYWYgZW50cnk/XFxuIDY0NDpcXHQgKiBAcG1kOiBQTUQgZW50cnkuXFxuIDY0NTpcXHQgKlxcbiA2NDY6XFx0ICogUE1EIGxlYWYgZW50cmllcyBhcmUgdmFsaWQgb25seSBpZiB0aGV5IGFyZSBkZXZpY2UgcHJpdmF0ZSBvciBtaWdyYXRpb25cXG4gNjQ3OlxcdCAqIGVudHJpZXMuIFRoaXMgZnVuY3Rpb24gYXNzZXJ0cyB0aGF0IGEgUE1EIGxlYWYgZW50cnkgaXMgdmFsaWQgaW4gdGhpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzoyNC41MTg3OTM3NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwOTY3Mjg5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqQ2hlY2tpbmcgdGhlIE1pZ3JhdGlvbiBFbnRyeSBMb2dpYyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHBtZF9pc19taWdyYXRpb25fZW50cnlgIHdvdWxkIGhhdmUgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgbGlrZWx5IGFuIGAjaWZkZWZgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBwcm90ZWN0aW5nIGl0LiBJdCBzZWVtcyB0byBiZSB1c2VkIHRvIGNoZWNrIGlmIGFuIGVudHJ5IGlzIGEgbWlncmF0aW9uIGVudHJ5LiBCdXQsIEkgZG9uJ3Qgc2VlIG9uZS4gVGhhdOKAmXMgb2RkLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBieSBsb29raW5nIGF0IGhvdyBgc29mdGxlYWZfaXNfbWlncmF0aW9uYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJdCdzIHBvc3NpYmxlIEknbSBtaXNzaW5nIHNvbWV0aGluZywgb3IgdGhhdCB0aGUgaW50ZW5kZWQgcHJvdGVjdGlvbiBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzozNy42MTU1MjUzNjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTU1NzQzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdGxlYWZfaXNfbWlncmF0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0yNjM2PXN0YXRpYyB2b2lkIG1ha2VfdWZmZF93cF9odWdlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNjUyLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyNjUzOlxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI2NTQtXFx0XFx0c2V0X2h1Z2VfcHRlX2F0KHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yMDg9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3N3YXAoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIxMy0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyMTQ6ICogc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSB3cml0YWJsZSBtaWdyYXRpb24gZW50cnk/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjE1LSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIxOS0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyMjA6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIyMS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yMjUtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjI2OiAqIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSByZWFkYWJsZSBtaWdyYXRpb24gZW50cnk/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjI3LSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIzMS0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyMzI6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjMzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIzNy0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyMzg6ICogc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYW4gZXhjbHVzaXZlXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjM5LSAqIHJlYWRhYmxlIG1pZ3JhdGlvbiBlbnRyeT9cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI0NC0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNDU6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI0Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTAtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjUxOiAqIHNvZnRsZWFmX2lzX21pZ3JhdGlvbigpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgbWlncmF0aW9uIGVudHJ5P1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1Mi0gKiBAZW50cnk6IExlYWYgZW50cnkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTUtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjU2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNTktXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzYwOlxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2MS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQwOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzb2Z0bGVhZl90b19wYWdlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00MTMtXFx0Vk1fV0FSTl9PTl9PTkNFKCFzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDE0OlxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQxNS1cXHRcXHRzb2Z0bGVhZl9taWdyYXRpb25fc3luYyhlbnRyeSwgcGFnZV9mb2xpbyhwYWdlKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00MjY9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnNvZnRsZWFmX3RvX2ZvbGlvKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00MzAtXFx0Vk1fV0FSTl9PTl9PTkNFKCFzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDMxOlxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQzMi1cXHRcXHRzb2Z0bGVhZl9taWdyYXRpb25fc3luYyhlbnRyeSwgZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NDc2PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc191ZmZkX3dwX21hcmtlcihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDg2LS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ4NzogKiBzb2Z0bGVhZl9pc19taWdyYXRpb25feW91bmcoKSAtIERvZXMgdGhpcyBtaWdyYXRpb24gZW50cnkgY29udGFpbiBhbiBhY2Nlc3NlZFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ4OC0gKiBiaXQ/XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00OTYtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDk3OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb25feW91bmcoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00OTgte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ5OTpcXHRWTV9XQVJOX09OX09OQ0UoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUwMC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUwNy0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1MDg6ICogc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KCkgLSBEb2VzIHRoaXMgbWlncmF0aW9uIGVudHJ5IGNvbnRhaW4gYSBkaXJ0eSBiaXQ/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTA5LSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUxNS0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1MTY6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9kaXJ0eShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUxNy17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTE4OlxcdFZNX1dBUk5fT05fT05DRSghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTE5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTI3LVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjUyODpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uX3lvdW5nKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTI5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUzMi1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1MzM6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9kaXJ0eShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUzNC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MjQ9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYyNS17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjI2OlxcdHJldHVybiBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjI3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MzgtXFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYzOTpcXHRcXHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTY0MC19XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9ODQ0PXN0YXRpYyB2b2lkIF9faW5pdCBzd2FwX21pZ3JhdGlvbl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg3MC1cXHRlbnRyeSA9IG1ha2Vfd3JpdGFibGVfbWlncmF0aW9uX2VudHJ5KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODcxOlxcdFdBUk5fT04oIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpO1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NzI6XFx0V0FSTl9PTighc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSk7XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg3My1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODc0LVxcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NzU6XFx0V0FSTl9PTighc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSk7XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjg3NjpcXHRXQVJOX09OKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpO1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NzctXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg3OC1cXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODc5OlxcdFdBUk5fT04oIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpO1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4ODA6XFx0V0FSTl9PTihzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKTtcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODgxLVxcdF9fQ2xlYXJQYWdlTG9ja2VkKHBhZ2UpO1xcbi0tXFxubW0vaG1tLmM9MjM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9obW0uYy0yOTAtXFxubW0vaG1tLmM6MjkxOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxubW0vaG1tLmMtMjkyLVxcdFxcdFxcdHB0ZV91bm1hcChwdGVwKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTgwOD1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODE4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTgxOTpcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSB8fFxcbm1tL2h1Z2VfbWVtb3J5LmM6MTgyMDpcXHQgICAgc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTgyMS1cXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjYwMD1zdGF0aWMgdm9pZCBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI2MDctXFx0Vk1fV0FSTl9PTighcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKCpwbWQpKTtcXG5tbS9odWdlX21lbW9yeS5jOjI2MDg6XFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTI2MDktXFx0XFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzA5Nj1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzE3My1cXG5tbS9odWdlX21lbW9yeS5jOjMxNzQ6XFx0XFx0d3JpdGUgPSBzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzE3NS1cXHRcXHRpZiAoUGFnZUFub24ocGFnZSkpXFxubW0vaHVnZV9tZW1vcnkuYzozMTc2OlxcdFxcdFxcdGFub25fZXhjbHVzaXZlID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jOjMxNzc6XFx0XFx0eW91bmcgPSBzb2Z0bGVhZl9pc19taWdyYXRpb25feW91bmcoZW50cnkpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzE3ODpcXHRcXHRkaXJ0eSA9IHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9kaXJ0eShlbnRyeSk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMTc5LVxcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTUwMjI9dm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUwNDAtXFx0XFx0cG1kZSA9IHBtZF9ta3NvZnRfZGlydHkocG1kZSk7XFxubW0vaHVnZV9tZW1vcnkuYzo1MDQxOlxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0Mi1cXHRcXHRwbWRlID0gcG1kX21rd3JpdGUocG1kZSwgdm1hKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0OS1cXG5tbS9odWdlX21lbW9yeS5jOjUwNTA6XFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb25feW91bmcoZW50cnkpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1MS1cXHRcXHRwbWRlID0gcG1kX21rb2xkKHBtZGUpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1Mi1cXHQvKiBOT1RFOiB0aGlzIG1heSBjb250YWluIHNldHRpbmcgc29mdC1kaXJ0eSBvbiBzb21lIGFyY2hzICovXFxubW0vaHVnZV9tZW1vcnkuYzo1MDUzOlxcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBzb2Z0bGVhZl9pc19taWdyYXRpb25fZGlydHkoZW50cnkpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1NC1cXHRcXHRwbWRlID0gcG1kX21rZGlydHkocG1kZSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUwNzUtXFxubW0vaHVnZV9tZW1vcnkuYzo1MDc2OlxcdFxcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWQoZW50cnkpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA3Ny1cXHRcXHRcXHRybWFwX2ZsYWdzIHw9IFJNQVBfRVhDTFVTSVZFO1xcbi0tXFxubW0vaHVnZXRsYi5jPTQ5MDI9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQ5NzUtXFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KGRzdCwgYWRkciwgZHN0X3B0ZSwgZW50cnksIHN6KTtcXG5tbS9odWdldGxiLmM6NDk3NjpcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZikpKSB7XFxubW0vaHVnZXRsYi5jLTQ5NzctXFx0XFx0XFx0Ym9vbCB1ZmZkID0gcHRlX3N3cF91ZmZkKGVudHJ5KTtcXG5tbS9odWdldGxiLmMtNDk3OC1cXG5tbS9odWdldGxiLmM6NDk3OTpcXHRcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKHNvZnRsZWFmKSBcXHUwMDI2XFx1MDAyNiBjb3cpIHtcXG5tbS9odWdldGxiLmMtNDk4MC1cXHRcXHRcXHRcXHQvKlxcbi0tXFxubW0vaHVnZXRsYi5jPTYwMTQ9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MDkwLVxcbm1tL2h1Z2V0bGIuYzo2MDkxOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWYpKSB7XFxubW0vaHVnZXRsYi5jLTYwOTItXFx0XFx0XFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYz02NDk4PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NTg0LVxcdFxcdFxcdC8qIE5vdGhpbmcgdG8gZG8uICovXFxubW0vaHVnZXRsYi5jOjY1ODU6XFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSkge1xcbm1tL2h1Z2V0bGIuYy02NTg2LVxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XFxuLS1cXG5tbS9odWdldGxiLmMtNjU4OC1cXG5tbS9odWdldGxiLmM6NjU4OTpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2V0bGIuYy02NTkwLVxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbi0tXFxubW0va3NtLmM9NjE2PXN0YXRpYyBpbnQgYnJlYWtfa3NtX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL2tzbS5jLTY0Ni1cXHRcXHRcXHQgKi9cXG5tbS9rc20uYzo2NDc6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpXFxubW0va3NtLmMtNjQ4LVxcdFxcdFxcdFxcdGZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTAwMT1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxubW0vbWVtb3J5LmMtMTAyMi1cXHRcXHRyc3NbTU1fU1dBUEVOVFNdKys7XFxubW0vbWVtb3J5LmM6MTAyMzpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy0xMDI0LVxcdFxcdGZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmMtMTAyNy1cXG5tbS9tZW1vcnkuYzoxMDI4OlxcdFxcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWQoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtb3J5LmMtMTAyOS1cXHRcXHRcXHRcXHRpc19jb3dfbWFwcGluZyh2bV9mbGFncykpIHtcXG4tLVxcbm1tL21lbW9yeS5jPTE4MTE9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTg0NS1cXHRcXHRzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChlbnRyeSwgbnIpO1xcbm1tL21lbW9yeS5jOjE4NDY6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtMTg0Ny1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmM9NDgyNT12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ4NDYtXFx0aWYgKHVubGlrZWx5KCFzb2Z0bGVhZl9pc19zd2FwKGVudHJ5KSkpIHtcXG5tbS9tZW1vcnkuYzo0ODQ3OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtNDg0OC1cXHRcXHRcXHRtaWdyYXRpb25fZW50cnlfd2FpdCh2bWEtXFx1MDAzZXZtX21tLCB2bWYtXFx1MDAzZXBtZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTY4Nz1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNzE5LVxcbm1tL21lbXBvbGljeS5jOjcyMDpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSlcXG5tbS9tZW1wb2xpY3kuYy03MjEtXFx0XFx0XFx0XFx0cXAtXFx1MDAzZW5yX2ZhaWxlZCsrO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Nzc0PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTc5MC1cXG5tbS9tZW1wb2xpY3kuYzo3OTE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpKVxcbm1tL21lbXBvbGljeS5jLTc5Mi1cXHRcXHRcXHRcXHRxcC1cXHUwMDNlbnJfZmFpbGVkKys7XFxuLS1cXG5tbS9taWdyYXRlLmM9MzUxPXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMzkxLVxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUob2xkX3B0ZSk7XFxubW0vbWlncmF0ZS5jOjM5MjpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbl95b3VuZyhlbnRyeSkpXFxubW0vbWlncmF0ZS5jLTM5My1cXHRcXHRcXHRwdGUgPSBwdGVfbWtvbGQocHRlKTtcXG5tbS9taWdyYXRlLmM6Mzk0OlxcdFxcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBzb2Z0bGVhZl9pc19taWdyYXRpb25fZGlydHkoZW50cnkpKVxcbm1tL21pZ3JhdGUuYy0zOTUtXFx0XFx0XFx0cHRlID0gcHRlX21rZGlydHkocHRlKTtcXG4tLVxcbm1tL21pZ3JhdGUuYy00MDAtXFxubW0vbWlncmF0ZS5jOjQwMTpcXHRcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlLmMtNDAyLVxcdFxcdFxcdHB0ZSA9IHB0ZV9ta3dyaXRlKHB0ZSwgdm1hKTtcXG4tLVxcbm1tL21pZ3JhdGUuYy00MDktXFxubW0vbWlncmF0ZS5jOjQxMDpcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWQoZW50cnkpKVxcbm1tL21pZ3JhdGUuYy00MTEtXFx0XFx0XFx0cm1hcF9mbGFncyB8PSBSTUFQX0VYQ0xVU0lWRTtcXG4tLVxcbm1tL21pZ3JhdGUuYz00OTQ9dm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL21pZ3JhdGUuYy01MTItXFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xcbm1tL21pZ3JhdGUuYzo1MTM6XFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxcbm1tL21pZ3JhdGUuYy01MTQtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9taWdyYXRlLmM9NTI5PXZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXRfaHVnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG4tLVxcbm1tL21pZ3JhdGUuYy01NDItXFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xcbm1tL21pZ3JhdGUuYzo1NDM6XFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcXG5tbS9taWdyYXRlLmMtNTQ0LVxcdFxcdC8qXFxuLS1cXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbXByb3RlY3QuYy0yMjItXFxubW0vbXByb3RlY3QuYzoyMjM6XFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpIHtcXG5tbS9tcHJvdGVjdC5jLTIyNC1cXHRcXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE4Mj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfY2FjaGVkX3dyaXRhYmxlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg0LVxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgfHxcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTg1OlxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE4Ni19XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMjAtXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTIxOlxcdFxcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMjItXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xNTAxPXN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNjgzLVxcbm1tL3VzZXJmYXVsdGZkLmM6MTY4NDpcXHRcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSkge1xcbm1tL3VzZXJmYXVsdGZkLmMtMTY4NS1cXHRcXHRcXHRwdGVfdW5tYXAoc3JjX3B0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQzOjM5Ljk3MTEwNDE3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDczNDM3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBgc29mdGxlYWZfaXNfbWlncmF0aW9uYCBJbmNsdXNpb24qKlxuXG5Pa2F5LCBzbyBgc29mdGxlYWZfaXNfbWlncmF0aW9uYCBpcyB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAgYXMgYWx3YXlzIGF2YWlsYWJsZS4gUmlnaHQsIHNvIHRoaXMgcGF0Y2ggYWZmZWN0cyBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9tYWR2aXNlLmNgLCBhbmQgYG1tL21lbXBvbGljeS5jYC4gTGV0J3MgYnJlYWsgaXQgZG93bi5cblxuRmlyc3QsIEkgc2VlIHRoZSBtb2RpZmljYXRpb24gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGludm9sdmVzIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLiBUaGVuIHRoZXJlJ3MgdGhlIGNoYW5nZSBpbiBgbW0vbWFkdmlzZS5jYCByZWxhdGVkIHRvIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBGaW5hbGx5LCBgbW0vbWVtcG9saWN5LmNgIG1vZGlmaWVzIGBxdWV1ZV9mb2xpb3NfcG1kYC4gTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24sIGBxdWV1ZV9mb2xpb3NfcG1kYC5cblxuYGBgY1xuc3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbntcblx0c3RydWN0IGZvbGlvICpmb2xpbztcblx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcblx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocG1kKTtcblxuXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XG5cdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kdmFsKSlcblx0XHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCsrO1xuXHRcdHJldHVybjtcblx0fVxuXHRmb2xpbyA9IHBtZF9mb2xpbyhwbWR2YWwpO1xuXHRpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkge1xuXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFO1xuXHRcdHJldHVybjtcblx0fVxuLi4uXG5gYGBcblxuQWgsIEkgc2VlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFByZXZpb3VzbHksIGlmIHRoZSBQTUQgd2Fzbid0IHByZXNlbnQsIHRoZSBjb2RlIGp1c3QgY2hlY2tlZCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKWAuIEhvd2V2ZXIsIGlmIGl0IHdhc24ndCBhIG1pZ3JhdGlvbiBlbnRyeSBhbmQgd2Fzbid0IHByZXNlbnQg4oCTIHNheSBhIHN3YXAgZW50cnksIG9yIGEgZGV2aWNlLXByaXZhdGUgZW50cnkg4oCTIHRoZSBjb2RlIHdvdWxkIGhhdmUgY2FsbGVkIGBwbWRfZm9saW9gIG9uIGEgbm9uLXByZXNlbnQgUE1ELiBUaGF0IGNvdWxkIGxlYWQgdG8gYSBuYXN0eSBjcmFzaCwgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBjb21wbGV0ZWx5IHdyb25nIGRhdGEuIFRoZXkndmUgZml4ZWQgdGhpcyBub3csIGJ1dCBpdCBpcyBjbGVhciB0aGF0IHRoaXMgbmVlZHMgYSBsb3Qgb2YgdGVzdGluZy5cblxuU28gdGhlIHBvdGVudGlhbCBmb3IgdW5kZWZpbmVkIGJlaGF2aW9yIGhlcmUgaXMgY29uY2VybmluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc3BvdCB3b3J0aCBmdXp6aW5nLiBJJ2xsIGZvY3VzIG9uIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYW5kIHNpbmNlIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCwgSSBzaG91bGQgZm9jdXMgb24gdGhlIGxhdHRlciB0b28uIExldCdzIHNlZSBob3cgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGxvb2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA1OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0Mzo0OC40NDQ1NDQ3NTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTYzMTY3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfZm9saW9zX3B0ZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz02NTM9c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY4MC0gKlxcbm1tL21lbXBvbGljeS5jOjY4MTogKiBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKCkgaGFzIHR3byBwb3NzaWJsZSByZXR1cm4gdmFsdWVzOlxcbm1tL21lbXBvbGljeS5jLTY4Mi0gKiAwIC0gY29udGludWUgd2Fsa2luZyB0byBzY2FuIGZvciBtb3JlLCBldmVuIGlmIGFuIGV4aXN0aW5nIGZvbGlvIG9uIHRoZVxcbi0tXFxubW0vbWVtcG9saWN5LmMtNjg2LSAqL1xcbm1tL21lbXBvbGljeS5jOjY4NzpzdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21lbXBvbGljeS5jLTY4OC1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz05NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc193YWxrX29wcyA9IHtcXG5tbS9tZW1wb2xpY3kuYy05NTUtXFx0Lmh1Z2V0bGJfZW50cnlcXHRcXHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxcbm1tL21lbXBvbGljeS5jOjk1NjpcXHQucG1kX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlLFxcbm1tL21lbXBvbGljeS5jLTk1Ny1cXHQudGVzdF93YWxrXFx0XFx0PSBxdWV1ZV9wYWdlc190ZXN0X3dhbGssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz05NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc19sb2NrX3ZtYV93YWxrX29wcyA9IHtcXG5tbS9tZW1wb2xpY3kuYy05NjItXFx0Lmh1Z2V0bGJfZW50cnlcXHRcXHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxcbm1tL21lbXBvbGljeS5jOjk2MzpcXHQucG1kX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlLFxcbm1tL21lbXBvbGljeS5jLTk2NC1cXHQudGVzdF93YWxrXFx0XFx0PSBxdWV1ZV9wYWdlc190ZXN0X3dhbGssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQzOjUwLjYwMDg3Mzc1M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDE2NzEyODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBOYXZpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbnRleHRzKipcblxuT2theSwgc28gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGlzIGRlZmluaXRlbHkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBgcG1kX2VudHJ5YCB3aXRoaW4gYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVzc2VudGlhbCwgYXMgSSd2ZSBzZWVuIGl0cyByb2xlIGluIGBodWdlX21lbW9yeS5jYCBhbmQgc3BlY2lmaWNhbGx5IHdpdGggYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAuIFRoZW4gdGhlcmUncyBgQ09ORklHX0FEVklTRV9TWVNDQUxMU2AsIGNydWNpYWwgZm9yIGBtYWR2aXNlLmNgLCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19OVU1BYCB3aGljaCBwbGF5cyBhIGtleSByb2xlIHdpdGhpbiBgbWVtcG9saWN5LmNgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24sIGFuZCBJIHNlZSB0aGF0IGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTYCAqbWlnaHQqIGJlIHJlbGV2YW50IGZvciBpdHMgYmVoYXZpb3IuIFRoZSBjb2RlIGdldHMgY29tcGlsZWQgZXZlbiBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCwgYnV0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBIb3dldmVyLCB0byBhY3R1YWxseSAqdGVzdCogdGhlIGRldmljZSBwcml2YXRlIGVudHJ5IHBhdGgsIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGEgbXVzdC4gTXkgaHVuY2ggaXMgdGhhdCB0aGUgb3JpZ2luYWwgYnVnIGhhZCB0byBkbyB3aXRoIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGVycm9uZW91c2x5IHJldHVybmluZyB0cnVlLCBjYXVzaW5nIHNvbWUgZmFpbHVyZSwgb3IgaXQgd2FzIGEgd2FybmluZyB0aGF0IG5lZWRlZCB0byBiZSBhZGRyZXNzZWQuXG5cbkFoLCBoZXJlJ3MgdGhlIGNydWNpYWwgcGF0Y2ggc25pcHBldDpcblxuYGBgY1xuLVx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbitcdFx0Vk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcbmBgYFxuXG5UaGlzIGlzIGl0ISBCZWZvcmUsIGl0IHdhcyBhIGBWTV9CVUdfT05gIGlmIGl0IHdhc24ndCBhIG1pZ3JhdGlvbiBlbnRyeS4gTm93LCBpdCdzIGEgYFZNX1dBUk5fT05fT05DRWAgaWYgaXQgaXMgbmVpdGhlciBhIG1pZ3JhdGlvbiBlbnRyeSBub3IgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeS4gVGhlcmVmb3JlIHRoZSBvcmlnaW5hbCBidWcgbGlrZWx5IG9yaWdpbmF0ZWQgZnJvbSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzIHNvbWVob3cgdHJpZ2dlcmluZyB0aGF0IGBWTV9CVUdfT05gLiBUbyB0cmlnZ2VyIHRoZSBkZXZpY2UgcHJpdmF0ZSBlbnRyeSBwYXRoIHJlbGlhYmx5LCBJIHdvdWxkIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBKdXN0IHRvIGNvbmZpcm0sIEkgc2hvdWxkIGludmVzdGlnYXRlIGlmIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjM2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQzOjU5LjYxNzU4ODg5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ1MzEzNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIyMz1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjI3LVxcbm1tL0tjb25maWc6MTIyODpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMjktXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDM6NTkuOTYyOTA2NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA4MDM3MjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc2l0dWF0aW9uLiBXZSdyZSBkZWZpbml0ZWx5IGRlYWxpbmcgd2l0aCBgWk9ORV9ERVZJQ0VgLiBUaGF0J3MgYSBnaXZlbi4gQWxzbywgSSdtIHNlZWluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgQURWSVNFX1NZU0NBTExTYCwgYW5kIGBOVU1BYCBpbiB0aGUgbWl4LiBMZXQncyBnZXQgdGhpcyBzdHJhaWdodDogdGhlc2UgYXJlIG15IGZvY3VzIHBvaW50cy5cblxuU28sIGxldCBtZSBzdW1tYXJpemUgbXkgZm9jdXMuIFRoZSBrZXkgc3ltYm9scyB0aGF0IGFyZSBjYXRjaGluZyBteSBhdHRlbnRpb24gYXJlOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGFuZCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAuIFRoZXNlIHNlZW0gY2VudHJhbCB0byB0aGUgYmVoYXZpb3IuXG5cbkFuZCwgb2YgY291cnNlLCB0aGVzZSBFbmFibGVDb25maWdzIGFyZSBhbHNvIGltcG9ydGFudDogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYEFEVklTRV9TWVNDQUxMU2AsIGBOVU1BYCwgYW5kIGBaT05FX0RFVklDRWAuIFRoZXNlIGVuYWJsZSBkaWZmZXJlbnQgZmVhdHVyZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgdGhpbmsgbW9yZSBjcml0aWNhbGx5IGFib3V0IGl0LiBBcmUgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIHN0YXRpYyBvciBleHBvcnRlZD8gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2Ugc3ltYm9scyBhcmUgY29taW5nIGZyb20sIGFuZCB0aGUgc2NvcGUgb2YgdGhlc2Ugc3ltYm9scywgc28gSSBjYW4gbW9yZSBjbGVhcmx5IGRldGVybWluZSBob3cgdGhpcyBhbGwgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjgyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQ0OjA2LjE3MDk0NTc5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNzk4ODI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc9dm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOS1cXHRcXHRcXHQgICBwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIyMzQ9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIzMTMtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyMzE0OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMxNS1cXHRcXHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcXG4tLVxcbm1tL21hZHZpc2UuYz02NTI9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21hZHZpc2UuYy02NjgtXFx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKVxcbm1tL21hZHZpc2UuYzo2Njk6XFx0XFx0aWYgKG1hZHZpc2VfZnJlZV9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0KSlcXG5tbS9tYWR2aXNlLmMtNjcwLVxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDowOC40ODg5Mzk3MjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU5MzUyODIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIHRoZSBrZXJuZWwuIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGlzIGF2YWlsYWJsZSB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGJlY2F1c2UgaXQncyBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIC0gSSdtIGFzc3VtaW5nIGl0J3MgbWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBrZXJuZWwgY29tcG9uZW50cy4gSXQncyBub3QgYEVYUE9SVF9TWU1CT0xgLCBidXQgaXQncyBub3QgYHN0YXRpY2AsIHNvIGl0J3MgdmlzaWJsZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBOb3csIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBkZWZpbmVkIHdpdGhpbiBgbW0vbWFkdmlzZS5jYC4gVGhpcyBtZWFucyBpdCdzIGludGVybmFsIHRvIHRoYXQgcGFydGljdWxhciBmaWxlIGFuZCBub3QgbWVhbnQgZm9yIGV4dGVybmFsIHVzZS4gU2ltaWxhcmx5LCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgaXMgYWxzbyBzdGF0aWMsIHRoaXMgdGltZSB3aXRoaW4gYG1tL21lbXBvbGljeS5jYCwgd2hpY2ggdGVsbHMgbWUgaXQgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIG9ubHkgd2l0aGluIHRoZSBtZW1vcnkgcG9saWN5IG1hbmFnZW1lbnQgY29kZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIHRoZSB1c2FnZSBvZiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCB0byB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBtYWR2aXNlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQ0OjE4LjA4MjQ3MTg4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTIzNTE4OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MzQzPXN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfZm9saW9fcHRlX2JhdGNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMzUyLVxcbm1tL21hZHZpc2UuYzozNTM6c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG5tbS9tYWR2aXNlLmMtMzU0LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tYWR2aXNlLmM9NTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcXG5tbS9tYWR2aXNlLmM6NTY5OlxcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXFxubW0vbWFkdmlzZS5jLTU3MC1cXHQud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDQ6MjIuMDA1OTk2Nzg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDM0NzgzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGEgY2FsbGJhY2sgcmVsYXRlZCB0byBgcG1kX2VudHJ5YCwgZ290IGl0LiBUaGUgZ2lzdCBpcywgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBidWcuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB3ZSB3ZXJlbid0IGNoZWNraW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlZm9yZSBjYWxsaW5nIGBwbWRfZm9saW9gIG9yIHRyaWdnZXJpbmcgdGhhdCBgVk1fQlVHX09OYCBjYWxsIHdpdGhpbiB0aGUgYG1hZHZpc2VgIGFuZCBtZW1vcnkgcG9saWN5IGNvZGUgcGF0aHMuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYWZmZWN0aW5nIGhvdyB3ZSBoYW5kbGUgbm9uLXByZXNlbnQgUE1Ecywgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgaW1wYWN0aW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGBtYWR2aXNlYCwgYW5kIGBtYmluZGAvYHNldF9tZW1wb2xpY3lgIHN5c2NhbGxzIOKAkyBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXRpZXMsIGVzcGVjaWFsbHkgaW4gbW9kZXJuIHN5c3RlbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBtYWR2aXNlYCBhbmQgYG1iaW5kYC9gc2V0X21lbXBvbGljeWAgc3lzY2FsbHMg4oCTIHZlcnkgaW1wb3J0YW50IHRvIGNvbnNpZGVyIHdoZW4gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGltcGFjdHMuXG5cblRoZSBwcmVzZW5jZSBvZiBgV29ydGhGdXp6aW5nOiB0cnVlYCB0ZWxscyBtZSB0aGlzIGlzIHJpcGUgZm9yIHRlc3RpbmcsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgaW4gdGhlc2UgbWVtb3J5LWludGVuc2l2ZSBhcmVhcy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBxdWl0ZSB0ZWxsaW5nOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGFuZCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgYXJlIGFsbCBhcmVhcyB3aGVyZSB0aGlzIG92ZXJzaWdodCBjb3VsZCBtYW5pZmVzdC4gVGhhdCdzIGEgZ29vZCBzZXQgdG8gZm9jdXMgb24uIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGUgc2NvcGUg4oCTIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBBRFZJU0VfU1lTQ0FMTFNgLCBgTlVNQWAsIGFuZCBgWk9ORV9ERVZJQ0VgIGFsbCBwb2ludCB0byBhZHZhbmNlZCBtZW1vcnkgbWFuYWdlbWVudCBzY2VuYXJpb3MuXG5cbk5vdywgbGV0J3Mgc2VlLi4uIEknbSBhIGJpdCBjdXJpb3VzLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgd2UgbWlnaHQgYmUgbWlzc2luZz8gSG1tbSwgbGV0J3Mgc2VlLi4uIHdoYXQgYWJvdXQgYENPTkZJR19ERVZJQ0VfUFJJVkFURWA/IFllYWgsIGxldCdzIHNlYXJjaCBmb3IgdGhhdC4gVGhhdCB3b3VsZCBjZXJ0YWlubHkgaW5mbHVlbmNlIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIE5lZWQgdG8gY2hlY2sgaWYgaXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMzEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDQ6MzIuMDQwNzgyNjAxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzM3NjAwMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjU0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI1Ni1cXG5tbS9LY29uZmlnOjEyNTc6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjU4LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDQ6MzIuNDc0NTQ3ODQ0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzQ1NTg0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGVidWdnaW5nIGEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYERFVklDRV9QUklWQVRFYCB0aGluZyBhbmQgaXQncyBmbGFnZ2VkIGFzIGEgY29uZmlnIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIHJlbGV2YW5jZSwgaWYgYW55LCB0byB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRlbHZlIGludG8gaG93IHRoZXNlIHR3byBjb21wb25lbnRzIGludGVyYWN0LiBJcyB0aGlzIGNvbmZpZyBvcHRpb24gKmFjdHVhbGx5KiB1c2VkIGJ5IHRoYXQgcGFydGljdWxhciBmdW5jdGlvbj8gVGhpcyBpcyB0aGUgY29yZSBxdWVzdGlvbiB0byBhbnN3ZXIgaGVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgaW5jbHVkZXMgdGhlIHVzZSBvZiBgREVWSUNFX1BSSVZBVEVgIHdoZW4gY2FsbGluZyBvciB3aXRoaW4gdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4OTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDozNi4xMDkxMDg5NzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTg0NzUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTc0PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfdWZmZF9tYXJrZXIocHRlX3QgcHRlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkyLS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU5MzogKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXBcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTQtICogZW50cnkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDMtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA0OnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTAtXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjExOnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQ0OjM2LjIzMDk2MjY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjM0NTk4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmV2aXNpdGluZyBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgKipcblxuQWxyaWdodCwgdGltZSB0byBjaXJjbGUgYmFjayB0byBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBsZWFmIG9wZXJhdGlvbnMgYXJlIGN1cnJlbnRseSBoYW5kbGVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSByZWNlbnQgZGlzY3Vzc2lvbnMgb24gW2luc2VydCByZWxldmFudCBjb250ZXh0LCBlLmcuLCB0aGUgcHJvcG9zZWQgb3B0aW1pemF0aW9uIG9yIHRoZSBzcGVjaWZpYyBpc3N1ZSB1bmRlciBpbnZlc3RpZ2F0aW9uXS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGVzZSBsb3ctbGV2ZWwgcm91dGluZXMgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIG1hbmFnZW1lbnQgc2NoZW1lLiBUaGlzIGZpbGUgaXMgdGhlIGxpbmNocGluLCBhbmQgYSBzdWJ0bGUgZGV0YWlsIG92ZXJsb29rZWQgaGVyZSBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGRvd25zdHJlYW0gY29uc2VxdWVuY2VzLiBMZXQgbWUgcmUtZXhhbWluZSB0aGUgbWFjcm9zIGZvciBgYWRkX3RvX3BhZ2VfY2FjaGVgLCBgcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZWAsIGFuZCB0aGUgYXNzb2NpYXRlZCBsb2NrIHNlbWFudGljcywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHRoZWlyIGF0b21pY2l0eSBhbmQgb3JkZXJpbmcgZ3VhcmFudGVlcyBpbiB0aGUgY29udGV4dCBvZiBbbWVudGlvbiBzcGVjaWZpYyBhcmVhcyBvZiBjb25jZXJuLCBlLmcuLCBjb25jdXJyZW50IGFjY2VzcywgTlVNQSBhcmNoaXRlY3R1cmVzLCBvciBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlc10uIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBzdGlsbCB0aGUgb3B0aW1hbCBhcHByb2FjaCBvciBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNjcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo0MC43NTQ0MjQ0NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTg1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg1OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA1ODY6XFx0XFxuIDU4NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDU4ODpcXHR9XFxuIDU4OTpcXHRcXG4gNTkwOlxcdCNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpXFxuIDU5MTpcXHRcXG4gNTkyOlxcdC8qKlxcbiA1OTM6XFx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuIDU5NDpcXHQgKiBlbnRyeS5cXG4gNTk1OlxcdCAqIEBwbWQ6IFRoZSBQTUQgdG8gY2hlY2suXFxuIDU5NjpcXHQgKlxcbiA1OTc6XFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBQTUQgY29udGFpbnMgYSBzd2FwIGVudHJ5IHRoYXQgcmVwcmVzZW50cyBhIGRldmljZSBwcml2YXRlXFxuIDU5ODpcXHQgKiBwYWdlIG1hcHBpbmcuIFRoaXMgaXMgdXNlZCBmb3Igem9uZSBkZXZpY2UgcHJpdmF0ZSBwYWdlcyB0aGF0IGhhdmUgYmVlblxcbiA1OTk6XFx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxcbiA2MDA6XFx0ICogb3BlcmF0aW9ucy5cXG4gNjAxOlxcdCAqXFxuIDYwMjpcXHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcXG4gNjAzOlxcdCAqL1xcbiA2MDQ6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDYwNTpcXHR7XFxuIDYwNjpcXHRcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIDYwNzpcXHR9XFxuIDYwODpcXHRcXG4gNjA5OlxcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXFxuIDYxMDpcXHRcXG4gNjExOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbiA2MTI6XFx0e1xcbiA2MTM6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA2MTQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo0MC43NTQ1MjExNjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NjMxMTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgRGV2aWNlIENvbmZpZ3VyYXRpb24gTWF6ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyB0aGUga2V5IGZsYWcgSSBuZWVkIHRvIGZvY3VzIG9uLiBUaGF0IGZlZWxzIHJpZ2h0LCBidXQgaG9sZCBvbiBhIHNlY29uZC4uLiBteSBleHBlcmllbmNlIGlzIHRlbGxpbmcgbWUgSSBuZWVkIHRvIGJlIGNhdXRpb3VzIGFib3V0IGFzc3VtaW5nIHNvbWV0aGluZyBsaWtlIHRoYXQgZGlyZWN0bHkuIFRoZXJlJ3MgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgIG1pZ2h0IGJlIGNvbnRpbmdlbnQgb24gdGhlIGBERVZJQ0VfUFJJVkFURWAgc2V0dGluZy4gSXQgd291bGQgYmUgYSBzaWxseSBvdmVyc2lnaHQgdG8gb3Zlcmxvb2sgdGhhdCBkZXBlbmRlbmN5LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIGVuc3VyZSBJJ20gYWNjb3VudGluZyBmb3IgYWxsIHRoZSBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucyBvZiBlbmFibGluZyBgQ09ORklHX1pPTkVfREVWSUNFYCB3aXRoIHJlZ2FyZCB0byBkZXZpY2UgcHJpdmFjeS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgcXVpY2tseSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA5OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDQ6NDQuOTEwODM2OTE0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUzNTkzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MjU2PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2OC0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNjk6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjcwLSAqIHdyaXRhYmxlIGVudHJ5P1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc1LSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI3NjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjgxLS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4MjogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjgzLSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4Ni0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODc6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjg4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTM1NT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaGFzX3Bmbihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYxLVxcdFxcdHJldHVybiB0cnVlO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM2MjpcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYwND1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwNjpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MzctXFx0LyogT25seSBkZXZpY2UgcHJpdmF0ZSwgbWlncmF0aW9uIGVudHJpZXMgdmFsaWQgZm9yIFBNRC4gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2Mzg6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzOS1cXHRcXHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo0NS4zNjYyMDEzNzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIzOTY4NDY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgU2lnbmlmaWNhbmNlIG9mIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluc3RydWN0aW9uIGlzIHRvIGV4YW1pbmUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBcInNvZnRsZWFmXCIgc3VnZ2VzdHMgYSBzcGVjaWZpYyBzdWJzeXN0ZW0gb3IgbW9kdWxlLCBsaWtlbHkgcmVsYXRlZCB0byBkZXZpY2UgbWFuYWdlbWVudCwgcG90ZW50aWFsbHkgYSBkcml2ZXIgb3Igc29tZSBhYnN0cmFjdGlvbiBsYXllci4gVGhlIFwiaXNfZGV2aWNlX3ByaXZhdGVcIiBzdWZmaXggaXMgdGhlIGtleSDigJMgaXQncyBhIEJvb2xlYW4gdmFyaWFibGUsIGZsYWcsIG9yIHByb3BlcnR5LCBpbmRpY2F0aW5nIGEgY2hhcmFjdGVyaXN0aWMgb2YgYSBkZXZpY2Ugb3IgYSByZWxhdGlvbnNoaXAgdG8gYSBzcGVjaWZpYyBkZXZpY2UuXG5cbk15IG1pbmQgcmFjZXMgdGhyb3VnaCB0aGUgcG9zc2libGUgc2NlbmFyaW9zOiBJcyB0aGlzIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI/IEEgcnVudGltZSBzdGF0ZSB2YXJpYWJsZT8gQSBjb21waWxlLXRpbWUgY29uc3RhbnQ/IFdoYXQgcGFydCBvZiB0aGUgc3lzdGVtIGlzIHNldHRpbmcgdGhpcyBmbGFnIGFuZCB3aGF0IHBhcnRzIGFyZSByZWFkaW5nIGl0PyBJcyB0aGlzIGtlcm5lbC1sZXZlbCBvciB1c2VyLXNwYWNlPyBBbmQgbW9zdCBpbXBvcnRhbnRseSwgd2hhdCBhcmUgdGhlIHNlY3VyaXR5IG9yIG9wZXJhdGlvbmFsIGNvbnNlcXVlbmNlcyBpZiB0aGlzIHZhcmlhYmxlIGlzIGluY29ycmVjdGx5IHNldCBvciBtaXNpbnRlcnByZXRlZD8gSWYgYSBkZXZpY2UgaXMgbWFya2VkIFwicHJpdmF0ZVwiIGlzIGl0IHVuYXZhaWxhYmxlIHRvIG90aGVyIHByb2Nlc3NlcyBvciB0aGUgZW50aXJlIHN5c3RlbT8gSXMgdGhlcmUgYSBsZWFrIHBvdGVudGlhbD8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBtaXRpZ2F0aW9ucyBpbiBwbGFjZSB0byBwcm90ZWN0IGRldmljZSBzdGF0ZT9cblxuSSdtIHN0YXJ0aW5nIHRvIGNvbnNpZGVyIHNwZWNpZmljIHF1ZXN0aW9ucy4gRG9lcyB0aGlzIHJlbGF0ZSB0byBwaHlzaWNhbCByZXNvdXJjZSBpc29sYXRpb24/IElzIHRoaXMgYWJvdXQgcHJldmVudGluZyB1bmF1dGhvcml6ZWQgYWNjZXNzIHRvIGhhcmR3YXJlIHJlc291cmNlcz8gSXMgdGhlIGBzb2Z0bGVhZmAgbW9kdWxlIHJlc3BvbnNpYmxlIGZvciByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBhY2Nlc3MgY29udHJvbD8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBoZXJlIHdpbGwgYmUgaW1wb3J0YW50LiBJZiBpdCBpcyBzZWN1cml0eSByZWxhdGVkLCBJJ2QgaW1tZWRpYXRlbHkgd2FudCB0byBrbm93IHdobyBoYXMgYWNjZXNzIHRvIHRoZSBkZXZpY2Ugb3IgaW5mb3JtYXRpb24gYWJvdXQgaXQuXG5cbk15IGluc3RpbmN0IGlzIHRvIHN0YXJ0IGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUsIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyBvZiB0aGlzIHZhcmlhYmxlIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIGl0LiBJJ2QgYmUgbG9va2luZyBmb3IgdGhlIGFzc2lnbm1lbnQgYW5kIHVzYWdlcyBvZiB0aGlzIHZhcmlhYmxlLCBlc3BlY2lhbGx5IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3Mgc2V0IHRvIHRydWUgb3IgZmFsc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYywgdGhlIGludGVudCwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGFueSB2dWxuZXJhYmlsaXRpZXMuIEknbSBhbHNvIHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbi4gRG9lcyBgc29mdGxlYWZgIHNldCB0aGUgYGlzX2RldmljZV9wcml2YXRlYCBmbGFnIGFuZCB0aGVuIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhlIGRldmljZSdzIHN0YXRlIHRvIGFub3RoZXIgY29tcG9uZW50PyBJcyB0aGlzIG9wZXJhdGlvbiBhdG9taWM/IFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5ODAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo1MS42MDU4ODgyMzVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NTpcXHQgKi9cXG4gMjc2OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbiAyNzc6XFx0e1xcbiAyNzg6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xcbiAyNzk6XFx0fVxcbiAyODA6XFx0XFxuIDI4MTpcXHQvKipcXG4gMjgyOlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG4gMjgzOlxcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4gMjg0OlxcdCAqXFxuIDI4NTpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gMjg2OlxcdCAqL1xcbiAyODc6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuIDI4ODpcXHR7XFxuIDI4OTpcXHRcXHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XFxuIDI5MDpcXHRcXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxcbiAyOTE6XFx0XFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9SRUFEOlxcbiAyOTI6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI5MzpcXHRcXHRkZWZhdWx0OlxcbiAyOTQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyOTU6XFx0XFx0fVxcbiAyOTY6XFx0fVxcbiAyOTc6XFx0XFxuIDI5ODpcXHQvKipcXG4gMjk5OlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XFxuIDMwMDpcXHQgKiBAZW50cnk6IExlYWYgZW50cnkuXFxuIDMwMTpcXHQgKlxcbiAzMDI6XFx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZS1leGNsdXNpdmUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gMzAzOlxcdCAqL1xcbiAzMDQ6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoc29mdGxlYWZfdCBlbnRyeSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDQ6NTEuNjA2MDQzMDE1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTEzMjY3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHNvIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIHRydWUsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEhvd2V2ZXIsIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGlzIGEgbGl0dGxlIG1vcmUgY29uZGl0aW9uYWwuIEl0IGRlcGVuZHMgb24gd2hldGhlciBgQ09ORklHX1pPTkVfREVWSUNFYCBhbmQgYENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU2AgYXJlIHNldC4gSG1tLCBJIGtub3cgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgZXhpc3RzIHNvbWV3aGVyZSBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvbywgYW5kIHNpbmNlIHdlJ3JlIGxvb2tpbmcgYXQgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGZsYWdzLCBJJ2QgYmV0dGVyIGRvdWJsZSBjaGVjayB3aGVyZSB0aGF0J3MgZGVmaW5lZC4gVGltZSB0byBnbyBsb29rIGF0IGBtbS9LY29uZmlnYCBhbmQgdmVyaWZ5IGl0cyBpbXBsaWNhdGlvbnMuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgZXZlcnl0aGluZyB3b3JrcyBhcyBpdCBzaG91bGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo1OC4xMTczNzIyODhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI1MDpcXHRjb25maWcgSE1NX01JUlJPUlxcbjEyNTE6XFx0XFx0Ym9vbFxcbjEyNTI6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xMjUzOlxcdFxcbjEyNTQ6XFx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbjEyNTU6XFx0XFx0Ym9vbFxcbjEyNTY6XFx0XFxuMTI1NzpcXHRjb25maWcgREVWSUNFX1BSSVZBVEVcXG4xMjU4OlxcdFxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG4xMjU5OlxcdFxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG4xMjYwOlxcdFxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG4xMjYxOlxcdFxcbjEyNjI6XFx0XFx0aGVscFxcbjEyNjM6XFx0XFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxcbjEyNjQ6XFx0XFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXFxuMTI2NTpcXHRcXHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cXG4xMjY2OlxcdFxcbjEyNjc6XFx0Y29uZmlnIFZNQVBfUEZOXFxuMTI2ODpcXHRcXHRib29sXFxuMTI2OTpcXHRcXG4xMjcwOlxcdGNvbmZpZyBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcXG4xMjcxOlxcdFxcdGJvb2xcXG4xMjcyOlxcdGNvbmZpZyBBUkNIX0hBU19QS0VZU1xcbjEyNzM6XFx0XFx0Ym9vbFxcbjEyNzQ6XFx0XFxuMTI3NTpcXHRjb25maWcgQVJDSF9VU0VTX1BHX0FSQ0hfMlxcbjEyNzY6XFx0XFx0Ym9vbFxcbjEyNzc6XFx0Y29uZmlnIEFSQ0hfVVNFU19QR19BUkNIXzNcXG4xMjc4OlxcdFxcdGJvb2xcXG4xMjc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo1OC4xMTc1MDgyMDhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQzMDk4Mjc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgQ2hhbmdlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGhhcyBhIGRlcGVuZGVuY3kgb24gYFpPTkVfREVWSUNFYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHNhZmUgYW5kIGNvdmVyIGFsbCBiYXNlcywgSSB0aGluayBJJ2xsIGFkZCBgREVWSUNFX1BSSVZBVEVgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gSXQncyBiZXR0ZXIgdG8gYmUgZXhwbGljaXQsIGV2ZW4gaWYgaXQgc2VlbXMgcmVkdW5kYW50IGluaXRpYWxseS5cblxuU28sIGhlcmUncyB3aGF0IHRoZSBgRW5hYmxlQ29uZmlnc2AgY3VycmVudGx5IGxvb2tzIGxpa2UsIHdpdGggdGhlIGFkZGl0aW9uIEkndmUgbWFkZTpcblxuKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWBcbiogICBgQURWSVNFX1NZU0NBTExTYFxuKiAgIGBOVU1BYFxuKiAgIGBaT05FX0RFVklDRWBcbiogICBgREVWSUNFX1BSSVZBVEVgXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZXkgYXJlOlxuXG4qICAgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGBcbiogICBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYFxuKiAgIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYFxuXG5JIHVuZGVyc3RhbmQgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSB2dWxuZXJhYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZiBub24tcHJlc2VudCBQTURzLCBzcGVjaWZpY2FsbHkgdGhlIGxhY2sgb2YgYSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBjaGVjayBiZWZvcmUgY2FsbGluZyBgcG1kX2ZvbGlvYCBvciB0cmlnZ2VyaW5nIGEgYFZNX0JVR19PTmAuIFRoaXMgaW1wYWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgbWFkdmlzZSBvcGVyYXRpb25zLCBhbmQgbWVtb3J5IHBvbGljaWVzLiBUaGUgaW1wb3J0YW50IHBhcnQgaXMgdGhhdCB0aGlzIGlzc3VlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWR2aXNlYCBhbmQgdGhlIGBtYmluZGAvYHNldF9tZW1wb2xpY3lgIHN5c3RlbSBjYWxscy4gVGhpcyBtZWFucyBpdCBoYXMgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMsIHNvIGl0J3MgYSBnb29kIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1OTEsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDU6MDQuNTQ4NDkzNDQ2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MTcwMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCIsXG4gICAgXCJOVU1BXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiLFxuICAgIFwicXVldWVfZm9saW9zX3B0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIHdhcyBub3QgY2hlY2tlZCBiZWZvcmUgY2FsbGluZyBgcG1kX2ZvbGlvYCBvciB0cmlnZ2VyaW5nIGEgYFZNX0JVR19PTmAgaW4gYG1hZHZpc2VgIGFuZCBgbWVtcG9saWN5YCBjb2RlIHBhdGhzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgbWFkdmlzZSwgYW5kIG1lbW9yeSBwb2xpY2llcyB3aGVuIGRlYWxpbmcgd2l0aCBub24tcHJlc2VudCBQTURzIChsaWtlIG1pZ3JhdGlvbiBvciBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIGBtYWR2aXNlYCBhbmQgYG1iaW5kYC9gc2V0X21lbXBvbGljeWAgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkFEVklTRV9TWVNDQUxMU1wiLFxuICAgIFwiTlVNQVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgICBcInF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCB3YXMgbm90IGNoZWNrZWQgYmVmb3JlIGNhbGxpbmcgYHBtZF9mb2xpb2Agb3IgdHJpZ2dlcmluZyBhIGBWTV9CVUdfT05gIGluIGBtYWR2aXNlYCBhbmQgYG1lbXBvbGljeWAgY29kZSBwYXRocy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIG1hZHZpc2UsIGFuZCBtZW1vcnkgcG9saWNpZXMgd2hlbiBkZWFsaW5nIHdpdGggbm9uLXByZXNlbnQgUE1EcyAobGlrZSBtaWdyYXRpb24gb3IgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBgbWFkdmlzZWAgYW5kIGBtYmluZGAvYHNldF9tZW1wb2xpY3lgIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow87lh5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 08:08:57 +0000 UTC FinishedAt: 2026-07-11 08:45:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS", "NUMA", "ZONE_DEVICE", "DEVICE_PRIVATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS", "NUMA", "ZONE_DEVICE", "DEVICE_PRIVATE" ], "series_id": "2899acbd-5fd5-4e58-90da-ace08e06b42b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_free_huge_pmd", "madvise_cold_or_pageout_pte_range", "queue_folios_pte_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIHdhcyBub3QgY2hlY2tlZCBiZWZvcmUgY2FsbGluZyBgcG1kX2ZvbGlvYCBvciB0cmlnZ2VyaW5nIGEgYFZNX0JVR19PTmAgaW4gYG1hZHZpc2VgIGFuZCBgbWVtcG9saWN5YCBjb2RlIHBhdGhzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgbWFkdmlzZSwgYW5kIG1lbW9yeSBwb2xpY2llcyB3aGVuIGRlYWxpbmcgd2l0aCBub24tcHJlc2VudCBQTURzIChsaWtlIG1pZ3JhdGlvbiBvciBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIGBtYWR2aXNlYCBhbmQgYG1iaW5kYC9gc2V0X21lbXBvbGljeWAgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5N2RkOTQ3MjZjMWUxZTAyMTE3Nzc2NjNlNzcyN2QzNmI5MjFiNzk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDg6NDI6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDI1NjEyYWY3MmRjYTJlLi4wZGQ5ODMwYTdkMzI3MyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yMzMxLDggJiM0MzsyMzMxLDggQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XG4tXHRcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0ICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xuJiM0MztcdFx0Vk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggOTI5MmY2MGIxOWFhN2MuLmM1NTcwMjNjM2ZhZDU1IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC0zODgsOCAmIzQzOzM4OCw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4gXHRcdFx0Z290byBodWdlX3VubG9jaztcbiBcbiBcdFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XG4tXHRcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG4mIzQzO1x0XHRcdFZNX1dBUk5fT05fT05DRSghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0XHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XG4gXHRcdFx0Z290byBodWdlX3VubG9jaztcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDkxNGY4MTg2M2RiNWE2Li42OWEwMGEzMjRlZjUzMSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTY1NCwxMiAmIzQzOzY1NCwxNCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XG4gXG4tXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbi1cdFx0cXAtXHUwMDNlbnJfZmFpbGVkJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XG4mIzQzO1x0XHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKVxuJiM0MztcdFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQmIzQzOyYjNDM7O1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTtcbiYjNDM7XHRmb2xpbyA9IHBtZF9mb2xpbyhwbWR2YWwpO1xuIFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcbiBcdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XG4gXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7cXVldWVfZm9saW9zX3B0ZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCB3YXMgbm90IGNoZWNrZWQgYmVmb3JlIGNhbGxpbmcgYHBtZF9mb2xpb2Agb3IgdHJpZ2dlcmluZyBhIGBWTV9CVUdfT05gIGluIGBtYWR2aXNlYCBhbmQgYG1lbXBvbGljeWAgY29kZSBwYXRocy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIG1hZHZpc2UsIGFuZCBtZW1vcnkgcG9saWNpZXMgd2hlbiBkZWFsaW5nIHdpdGggbm9uLXByZXNlbnQgUE1EcyAobGlrZSBtaWdyYXRpb24gb3IgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBgbWFkdmlzZWAgYW5kIGBtYmluZGAvYHNldF9tZW1wb2xpY3lgIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5N2RkOTQ3MjZjMWUxZTAyMTE3Nzc2NjNlNzcyN2QzNmI5MjFiNzk1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMDg6NDI6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyNTYxMmFmNzJkY2EyZS4uMGRkOTgzMGE3ZDMyNzMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMjMzMSw4ICYjNDM7MjMzMSw4IEBAIGJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQlnb3RvIG91dDsKIAogCWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkgewotCQlWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSAmYW1wOyZhbXA7Ci0JCQkJICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpOwomIzQzOwkJVk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggOTI5MmY2MGIxOWFhN2MuLmM1NTcwMjNjM2ZhZDU1IDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jCkBAIC0zODgsOCAmIzQzOzM4OCw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsCiAJCQlnb3RvIGh1Z2VfdW5sb2NrOwogCiAJCWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkgewotCQkJVk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgJmFtcDsmYW1wOwotCQkJCQkhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpOwomIzQzOwkJCVZNX1dBUk5fT05fT05DRSghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgJmFtcDsmYW1wOwomIzQzOwkJCQkJIXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpOwogCQkJZ290byBodWdlX3VubG9jazsKIAkJfQogCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDkxNGY4MTg2M2RiNWE2Li42OWEwMGEzMjRlZjUzMSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmMKQEAgLTY1NCwxMiAmIzQzOzY1NCwxNCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstJmd0O3ByaXZhdGU7CiYjNDM7CXBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7CiAKLQlpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHsKLQkJcXAtJmd0O25yX2ZhaWxlZCYjNDM7JiM0Mzs7CiYjNDM7CWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQocG1kdmFsKSkpIHsKJiM0MzsJCWlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZHZhbCkpCiYjNDM7CQkJcXAtJmd0O25yX2ZhaWxlZCYjNDM7JiM0Mzs7CiAJCXJldHVybjsKIAl9Ci0JZm9saW8gPSBwbWRfZm9saW8oKnBtZCk7CiYjNDM7CWZvbGlvID0gcG1kX2ZvbGlvKHBtZHZhbCk7CiAJaWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHsKIAkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFOwogCQlyZXR1cm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyB0aHJlZSBmaWxlcyB3aXRoaW4gdGhlIGBtbS9gIGRpcmVjdG9yeTogYGh1Z2VfbWVtb3J5LmNgLCBgbWFkdmlzZS5jYCwgYW5kIGBtZW1wb2xpY3kuY2AuIFNlZW1zIGxpa2UgYSBmb2N1c2VkIHNldCBvZiBtb2RpZmljYXRpb25zLgoKSW4gYGh1Z2VfbWVtb3J5LmNgIGFuZCBgbWFkdmlzZS5jYCwgdGhlIGNvcmUgY2hhbmdlIGlzIHJlcGxhY2luZyBhIGBWTV9CVUdfT05gIHdpdGggYSBgVk1fV0FSTl9PTl9PTkNFYCBhbmQgYWRqdXN0aW5nIHRoZSBjb25kaXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIG1ha2luZyBhIHN0cm9uZyBhc3NlcnRpb24gYWJvdXQgdGhlIHByZXNlbmNlIG9mIGEgbWlncmF0aW9uIGVudHJ5LiBOb3csIGl0JiMzOTtzIHJlcGxhY2VkIHdpdGggYSB3YXJuaW5nIHRoYXQgdHJpZ2dlcnMgb25seSBvbmNlLCBhbmQgaW5jbHVkZXMgYSBjaGVjayBmb3IgZGV2aWNlLXByaXZhdGUgZW50cmllcy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhIHNjZW5hcmlvIHdoZXJlIHRoaXMgYXNzZXJ0aW9uIHdhcyBmaXJpbmcgc3B1cmlvdXNseSwgcGVyaGFwcyBkdWUgdG8gZGV2aWNlLXNwZWNpZmljIG1lbW9yeSBtYXBwaW5ncyBvciBhIG1vcmUgcGVybWlzc2l2ZSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0IGNvbnN0aXR1dGVzIGEgdmFsaWQgUE1ELiBUaGlzIGlzIGxpa2VseSBhIHNhZmV0eSBpbXByb3ZlbWVudCwgcHJldmVudGluZyBwb3RlbnRpYWxseSBkaXNydXB0aXZlIGtlcm5lbCBwYW5pY3MgaW4gbGVzcyBjcml0aWNhbCBzaXR1YXRpb25zLgoKVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgY2hhbmdlIGluIGBtbS9tZW1wb2xpY3kuY2AuIEhlcmUsIHRoZSBgcXVldWVfZm9saW9zX3BtZGAgZnVuY3Rpb24gaXMgYmVpbmcgbW9kaWZpZWQuIFByZXZpb3VzbHksIGl0IGRpcmVjdGx5IGRlcmVmZXJlbmNlZCB0aGUgYHBtZGAgcG9pbnRlciAoYCpwbWRgKSBhbmQgY2hlY2tlZCBpZiBpdCB3YXMgYSBtaWdyYXRpb24gZW50cnkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHBtZHBfZ2V0KHBtZClgIGNhbGwsIGdldHMgdGhlIFBNRCB2YWx1ZSwgYW5kIGNoZWNrcyBpdHMgcHJlc2VuY2UgKmJlZm9yZSogY2hlY2tpbmcgaWYgaXQmIzM5O3MgYSBtaWdyYXRpb24gZW50cnkuIFRoaXMgaXMgYSBjcnVjaWFsIGltcHJvdmVtZW50LiBJdCBhcHBlYXJzIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBidWcgd2hlcmUgYHBtZF9mb2xpbygpYCBjb3VsZCBiZSBjYWxsZWQgb24gYSBQTUQgdGhhdCB3YXNuJiMzOTt0IHByZXNlbnQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5kZWZpbmVkIGJlaGF2aW9yIG9yIGV2ZW4gYSBrZXJuZWwgY3Jhc2guIEJ5IGFkZGluZyB0aGlzIGAhcG1kX3ByZXNlbnQoKWAgY2hlY2sgZmlyc3QsIHRoZSBjb2RlIG5vdyBoYW5kbGVzIGNhc2VzIHdoZXJlIHRoZSBQTUQgbWlnaHQgYmUgYSBzd2FwIGVudHJ5LCBkZXZpY2UtcHJpdmF0ZSwgb3Igb3RoZXJ3aXNlIG5vdCB2YWxpZCBmb3IgZm9saW8gcmV0cmlldmFsLiBJdCYjMzk7cyBhIGNsYXNzaWMgZGVmZW5zZS1pbi1kZXB0aCBhcHByb2FjaCwgcHJldmVudGluZyB0aGUgZnVuY3Rpb24gZnJvbSBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgcG9pbnRlci4gVGhpcyBpcyBhIGdvb2QgY2F0Y2gsIGFuZCBhIHNvbGlkIGV4YW1wbGUgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nIGluIGEgY29tcGxleCBhcmVhLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBjb250ZXh0IG9mIHRoYXQgZnVuY3Rpb24sIGBxdWV1ZV9mb2xpb3NfcG1kYCwgdG8gaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiBgbW0vbWVtcG9saWN5LmNgIGFuZCBpdHMgY2FsbC1jaGFpbiwgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGUgZnVuY3Rpb25hbGl0eS4gRm9jdXNpbmcgb24gc3ltYm9scyBzdWNoIGFzIGBxdWV1ZV9mb2xpb3NfcG1kYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgSSBjYW4gc2VlIGEgY2xlYXJlciBwaWN0dXJlIGluIHRoaXMgYXJlYS4gT2gsIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyBzdGF0aWMuIFRoYXQgbWVhbnMgdW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBpcyBldmVuIG1vcmUgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1wb2xpY3kuYy02NTItXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbm1tL21lbXBvbGljeS5jLTY1NC17XG4tLVxubW0vbWVtcG9saWN5LmM9Njg3PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtcG9saWN5LmMtNzAwLVx0aWYgKHB0bCkge1xubW0vbWVtcG9saWN5LmM6NzAxOlx0XHRxdWV1ZV9mb2xpb3NfcG1kKHBtZCwgd2Fsayk7XG5tbS9tZW1wb2xpY3kuYy03MDItXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4MgoJCQkJCQkJb3V0cHV0OiA1NgoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucywgYHF1ZXVlX2ZvbGlvc19wbWRgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBpbnRlcmFjdCB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHF1ZXVlX2ZvbGlvc19wbWRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LCB0aGF0IHNldHMgdGhlIHJlbGF0aW9uc2hpcCBjbGVhcmx5LiBJIGtub3cgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgcmVzaWRlcyB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgbGl2ZXMgaW4gYG1tL21hZHZpc2UuY2AuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgZm9yIHRob3NlIGZpbGVzIHRvIGdldCBhIGdyaXAgb24gaG93IHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlbS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlncy4gRnJvbSBtZW1vcnksIGBtbS9odWdlX21lbW9yeS5jYCBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRT15YC4gU28gaWYgdGhhdCBpc24mIzM5O3Qgc2V0LCB0aGVuIHRob3NlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IG5vbi1vcGVyYXRpb25hbC4gRm9yIGBtbS9tYWR2aXNlLmNgLCB0aGUgbGlua2FnZSB0byB0aGUgY29tcGlsYXRpb24gaXMgbGVzcyBjbGVhciB0byBtZS4gSSB0aGluayBpdCByZWxpZXMgb24gYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgSSBiZXR0ZXIgdmVyaWZ5IHRoYXQgZGlyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGNvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkLiBLbm93aW5nIHRob3NlIHByZXJlcXVpc2l0ZXMgaXMgY3J1Y2lhbCBmb3IgdGFyZ2V0ZWQgYW5hbHlzaXMgYW5kIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX21lbW9yeS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2UubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmM9MzAxMD1FWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fc21fbWFwX29wc19jcmVhdGUpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYy0zMDEyLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jOjMwMTM6ICogZHJtX2dwdXZtX21hZHZpc2Vfb3BzX2NyZWF0ZSgpIC0gY3JlYXRlcyB0aGUgXHUwMDI2ZHJtX2dwdXZhX29wcyB0byBzcGxpdFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jLTMwMTQtICogQGdwdXZtOiB0aGUgXHUwMDI2ZHJtX2dwdXZtIHJlcHJlc2VudGluZyB0aGUgR1BVIFZBIHNwYWNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jPTMwNDE9c3RydWN0IGRybV9ncHV2YV9vcHMgKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jOjMwNDI6ZHJtX2dwdXZtX21hZHZpc2Vfb3BzX2NyZWF0ZShzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYy0zMDQzLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRybV9ncHV2bV9tYXBfcmVxICpyZXEpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jLTMwNDYtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jOjMwNDc6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX21hZHZpc2Vfb3BzX2NyZWF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmMtMzA0OC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYz03MzE9c3RhdGljIGludCBtc21faW9jdGxfZ2VtX21hZHZpc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYy03NTAtXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYzo3NTE6XHRyZXQgPSBtc21fZ2VtX21hZHZpc2Uob2JqLCBhcmdzLVx1MDAzZW1hZHYpO1xuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMtNzUyLVx0aWYgKHJldCBcdTAwM2U9IDApIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU9MzU9eGUteSAmIzQzOz0geGVfYmIubyBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZS0xNDYtXHR4ZV92bS5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6MTQ3Olx0eGVfdm1fbWFkdmlzZS5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMTQ4LVx0eGVfdnJhbS5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM9NDY5Nj1zdGF0aWMgaW50IHhlX3ZtX2FsbG9jX3ZtYShzdHJ1Y3QgeGVfdm0gKnZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQ3MTEtXHRpZiAoaXNfbWFkdmlzZSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ3MTI6XHRcdG9wcyA9IGRybV9ncHV2bV9tYWR2aXNlX29wc19jcmVhdGUoXHUwMDI2dm0tXHUwMDNlZ3B1dm0sIG1hcF9yZXEpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtNDcxMy1cdGVsc2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00NzU4LVx0XHRcdFx0LypcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ3NTk6XHRcdFx0XHQgKiBJbiBjYXNlIG9mIG1hZHZpc2Ugb3BzIERSTV9HUFVWQV9PUF9NQVAgaXNcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQ3NjAtXHRcdFx0XHQgKiBhbHdheXMgYWZ0ZXIgRFJNX0dQVVZBX09QX1JFTUFQLCBzbyBlbnN1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00Nzk1LVx0XHRcdHZtYSA9IGdwdXZhX3RvX3ZtYShvcC1cdTAwM2ViYXNlLnJlbWFwLnVubWFwLVx1MDAzZXZhKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ3OTY6XHRcdFx0LyogSW4gY2FzZSBvZiBtYWR2aXNlIG9wcyBTdG9yZSBhdHRyaWJ1dGVzIGZvciBSRU1BUCBVTk1BUFBFRFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtNDc5Ny1cdFx0XHQgKiBWTUEsIHNvIHRoZXkgY2FuIGJlIGFzc2lnbmVkIHRvIG5ld2x5IE1BUCBjcmVhdGVkIHZtYS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00ODI2LS8qKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6NDgyNzogKiB4ZV92bV9hbGxvY19tYWR2aXNlX3ZtYSAtIEFsbG9jYXRlIFZNQSYjMzk7cyB3aXRoIG1hZHZpc2Ugb3BzXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00ODI4LSAqIEB2bTogUG9pbnRlciB0byB0aGUgeGVfdm0gc3RydWN0dXJlXG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmg9MTEwNT1zdHJ1Y3QgZHJtX2dwdXZhX29wcyAqXG5pbmNsdWRlL2RybS9kcm1fZ3B1dm0uaDoxMTA2OmRybV9ncHV2bV9tYWR2aXNlX29wc19jcmVhdGUoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sXG5pbmNsdWRlL2RybS9kcm1fZ3B1dm0uaC0xMTA3LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRybV9ncHV2bV9tYXBfcmVxICpyZXEpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTM0NT1zdHJ1Y3QgdGhwc2l6ZSB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzU4LSAqIENoZWNrIHdoZXRoZXIgVEhQcyBhcmUgZXhwbGljaXRseSBkaXNhYmxlZCBmb3IgdGhpcyBWTUEsIGZvciBleGFtcGxlLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzU5OiAqIHRocm91Z2ggbWFkdmlzZSBvciBwcmN0bC5cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM2MC0gKi9cbi0tXG5tbS9NYWtlZmlsZT03ND1pZmRlZiBDT05GSUdfTU1VXG5tbS9NYWtlZmlsZTo3NTpcdG9iai0kKENPTkZJR19BRFZJU0VfU1lTQ0FMTFMpXHQmIzQzOz0gbWFkdmlzZS5vXG5tbS9NYWtlZmlsZS03Ni1lbmRpZlxuLS1cbm1tL21hZHZpc2UuYz0xMjQzPXN0YXRpYyBsb25nIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xMjY1LSNpZmRlZiBDT05GSUdfNjRCSVRcbm1tL21hZHZpc2UuYzoxMjY2Oi8qIERvZXMgdGhlIG1hZHZpc2Ugb3BlcmF0aW9uIHJlc3VsdCBpbiBkaXNjYXJkaW5nIG9mIG1hcHBlZCBkYXRhPyAqL1xubW0vbWFkdmlzZS5jLTEyNjctc3RhdGljIGJvb2wgaXNfZGlzY2FyZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jPTIwMTI9U1lTQ0FMTF9ERUZJTkUzKG1hZHZpc2UsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbl9pbiwgaW50LCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMjAxNi1cbm1tL21hZHZpc2UuYzoyMDE3Oi8qIFBlcmZvcm0gYW4gbWFkdmlzZSBvcGVyYXRpb24gb3ZlciBhIHZlY3RvciBvZiBhZGRyZXNzZXMgYW5kIGxlbmd0aHMuICovXG5tbS9tYWR2aXNlLmMtMjAxOC1zdGF0aWMgc3NpemVfdCB2ZWN0b3JfbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL21hZHZpc2UuYy0yMDQ3LVx0XHQvKlxubW0vbWFkdmlzZS5jOjIwNDg6XHRcdCAqIEFuIG1hZHZpc2Ugb3BlcmF0aW9uIGlzIGF0dGVtcHRpbmcgdG8gcmVzdGFydCB0aGUgc3lzY2FsbCxcbm1tL21hZHZpc2UuYy0yMDQ5LVx0XHQgKiBidXQgd2UgY2Fubm90IHByb2NlZWQgYXMgaXQgd291bGQgbm90IGJlIGNvcnJlY3QgdG8gcmVwZWF0XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM9ODA9c3RhdGljIHZvaWQgbXRlX2tzbV9zY2FuKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmMtOTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYzo5ODpzdGF0aWMgaW50IGNoZWNrX21hZHZpc2Vfb3B0aW9ucyhpbnQgbWVtX3R5cGUsIGludCBtb2RlLCBpbnQgbWFwcGluZylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FybTY0L210ZS9jaGVja19rc21fb3B0aW9ucy5jLTk5LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYz0xMzE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYzoxNTM6XHRldmFsdWF0ZV90ZXN0KGNoZWNrX21hZHZpc2Vfb3B0aW9ucyhVU0VfTU1BUCwgTVRFX1NZTkNfRVJSLCBNQVBfUFJJVkFURSksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTQtXHRcdFwmIzM0O0NoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3IgcHJpdmF0ZSBtYXBwaW5nLCBzeW5jIG1vZGUgYW5kIG1tYXAgbWVtb3J5XFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FybTY0L210ZS9jaGVja19rc21fb3B0aW9ucy5jOjE1NTpcdGV2YWx1YXRlX3Rlc3QoY2hlY2tfbWFkdmlzZV9vcHRpb25zKFVTRV9NTUFQLCBNVEVfQVNZTkNfRVJSLCBNQVBfUFJJVkFURSksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTYtXHRcdFwmIzM0O0NoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3IgcHJpdmF0ZSBtYXBwaW5nLCBhc3luYyBtb2RlIGFuZCBtbWFwIG1lbW9yeVxcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYzoxNTc6XHRldmFsdWF0ZV90ZXN0KGNoZWNrX21hZHZpc2Vfb3B0aW9ucyhVU0VfTU1BUCwgTVRFX1NZTkNfRVJSLCBNQVBfU0hBUkVEKSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FybTY0L210ZS9jaGVja19rc21fb3B0aW9ucy5jLTE1OC1cdFx0XCYjMzQ7Q2hlY2sgS1NNIG10ZSBwYWdlIG1lcmdlIGZvciBzaGFyZWQgbWFwcGluZywgc3luYyBtb2RlIGFuZCBtbWFwIG1lbW9yeVxcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYzoxNTk6XHRldmFsdWF0ZV90ZXN0KGNoZWNrX21hZHZpc2Vfb3B0aW9ucyhVU0VfTU1BUCwgTVRFX0FTWU5DX0VSUiwgTUFQX1NIQVJFRCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNjAtXHRcdFwmIzM0O0NoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3Igc2hhcmVkIG1hcHBpbmcsIGFzeW5jIG1vZGUgYW5kIG1tYXAgbWVtb3J5XFxuXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYz00Nz1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMtMjgxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmM6MjgyOlx0LyogbWFkdmlzZSBvZiBzaGFyZWQgbWFwcGluZyBzaG91bGQgbm90IGZyZWUgYW55IHBhZ2VzICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYy0yODMtXHRpZiAobWFkdmlzZShhZGRyLCBOUl9IVUdFX1BBR0VTICogaHVnZV9wYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jLTI4Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jOjI4ODpcdC8qIG1hZHZpc2Ugb2YgcHJpdmF0ZSBtYXBwaW5nIHNob3VsZCBmcmVlIHByaXZhdGUgcGFnZXMgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jLTI4OS1cdGlmIChtYWR2aXNlKGFkZHIyLCBOUl9IVUdFX1BBR0VTICogaHVnZV9wYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmM9MzM1PXN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMtMzQ0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYzozNDU6XHRtYWR2aXNlKG9uZV9wYWdlLCBsZW4sIE1BRFZfSFVHRVBBR0UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYy0zNDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtcG9saWN5Lm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q9MzQxPXBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIG5vZGUgbG9jYWwgdG8gd2hlcmUgdGhlIHRhc2sgaXMgcnVubmluZyxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0OjM0MjpleGNlcHQgcGVyaGFwcyBhcyBtb2RpZmllZCBieSB0aGUgdGFzayYjMzk7cyBOVU1BIG1lbXBvbGljeSBvciBjcHVzZXRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0LTM0My1jb25maWd1cmF0aW9uLCBzbyBsb25nIGFzIHN1ZmZpY2llbnQgZnJlZSBtZW1vcnkgcGFnZXMgYXJlIGF2YWlsYWJsZS5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdD0zNTI9dGhlaXIgY29udGFpbmluZyB0YXNrJiMzOTtzIG1lbW9yeSBzcHJlYWQgc2V0dGluZ3MuICBJZiBtZW1vcnkgc3ByZWFkaW5nXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdDozNTM6aXMgdHVybmVkIG9mZiwgdGhlbiB0aGUgY3VycmVudGx5IHNwZWNpZmllZCBOVU1BIG1lbXBvbGljeSBvbmNlIGFnYWluXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdC0zNTQtYXBwbGllcyB0byBtZW1vcnkgcGFnZSBhbGxvY2F0aW9ucy5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdD0zODI9cGFnZXMgb24gdGhlIHBhcmVudCBub2RlIHdpbGwgYmUgYWRqdXN0ZWQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSwgaWYgc3VmZmljaWVudFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q6MzgzOnJlc291cmNlcyBleGlzdCwgcmVnYXJkbGVzcyBvZiB0aGUgdGFzayYjMzk7cyBtZW1wb2xpY3kgb3IgY3B1c2V0IGNvbnN0cmFpbnRzLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3QtMzg0LVxuLS1cbm1tL01ha2VmaWxlPTg1PW9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFx0JiM0Mzs9IG1lbXBvbGljeS5vXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVx0JiM0Mzs9IHNwYXJzZS5vXG4tLVxubW0vbWVtcG9saWN5LmM9MzU5PUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoZ2V0X3Rhc2tfcG9saWN5LCBcJiMzNDtrdm1cJiMzNDspO1xubW0vbWVtcG9saWN5LmMtMzYwLVxubW0vbWVtcG9saWN5LmM6MzYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtcG9saWN5X29wZXJhdGlvbnMge1xubW0vbWVtcG9saWN5LmMtMzYyLVx0aW50ICgqY3JlYXRlKShzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVzKTtcbi0tXG5tbS9tZW1wb2xpY3kuYz01NjU9dm9pZCBtcG9sX3JlYmluZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgbm9kZW1hc2tfdCAqbmV3KVxuLS1cbm1tL21lbXBvbGljeS5jLTU3Ny1cbm1tL21lbXBvbGljeS5jOjU3ODpzdGF0aWMgY29uc3Qgc3RydWN0IG1lbXBvbGljeV9vcGVyYXRpb25zIG1wb2xfb3BzW01QT0xfTUFYXSA9IHtcbm1tL21lbXBvbGljeS5jLTU3OS1cdFtNUE9MX0RFRkFVTFRdID0ge1xuLS1cbm1tL21lbXBvbGljeS5jPTIwMjE9c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDM3LSAqIFJldHVybnMgZWZmZWN0aXZlIHBvbGljeSBmb3IgYSBWTUEgYXQgc3BlY2lmaWVkIGFkZHJlc3MuXG5tbS9tZW1wb2xpY3kuYzoyMDM4OiAqIEZhbGxzIGJhY2sgdG8gY3VycmVudC1cdTAwM2VtZW1wb2xpY3kgb3Igc3lzdGVtIGRlZmF1bHQgcG9saWN5LCBhcyBuZWNlc3NhcnkuXG5tbS9tZW1wb2xpY3kuYy0yMDM5LSAqIFNoYXJlZCBwb2xpY2llcyBbdGhvc2UgbWFya2VkIGFzIE1QT0xfRl9TSEFSRURdIHJlcXVpcmUgYW4gZXh0cmEgcmVmZXJlbmNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxNAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRXhhbWluaW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIG1vZHVsZXMgYW5kIHRoZWlyIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSB0aGF0IGBodWdlX21lbW9yeS5vYCBpcyB0aWVkIHRvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIGBtYWR2aXNlLm9gIG5lZWRzIGBBRFZJU0VfU1lTQ0FMTFNgIOKAkyBwcmVkaWN0YWJsZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBgbWFkdmlzZWAuIGBtZW1wb2xpY3kub2AgY2xlYXJseSByZXF1aXJlcyBgTlVNQWAsIGFzIGV4cGVjdGVkLiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBzbGlnaHRseSB0cmlja3kuIEkgc2VlIGBERVZJQ0VfTUlHUkFUSU9OYCBsaXN0ZWQgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgdHJpZ2dlcnMgYSBmbGFnOyBkb2VzbiYjMzk7dCBgREVWSUNFX1BSSVZBVEVgIG9yIGBNSUdSQVRJT05gIG9yIGJvdGggaW1wYWN0IGRldmljZSBwcml2YXRlIGVudHJpZXM/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgY29ubmVjdGlvbi4gQmV0dGVyIHRvIHZlcmlmeSB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzIGJlZm9yZSBJIG1vdmUgb24uIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYm90aCBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBhbmQgYHBtZF9pc19taWdyYXRpb25fZW50cnlgIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGNvbmZpZ3MuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU3ND1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTItLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1OTM6ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTQtICogZW50cnkuXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjAzLSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA0OnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTE6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTIte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjMxND1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIzMzQtXHRcdFZNX1dBUk5fT05fT05DRSghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXHUwMDI2XHUwMDI2XG5tbS9odWdlX21lbW9yeS5jOjIzMzU6XHRcdFx0XHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XG5tbS9odWdlX21lbW9yeS5jLTIzMzYtXHRcdGdvdG8gb3V0O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzA5Nj1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxNzgtXHRcdGRpcnR5ID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmM6MzE3OTpcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSB7XG5tbS9odWdlX21lbW9yeS5jLTMxODAtXHRcdHNvZnRsZWFmX3QgZW50cnk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMzE5LVx0XHR9XG5tbS9odWdlX21lbW9yeS5jOjMzMjA6XHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvbGRfcG1kKSkge1xubW0vaHVnZV9tZW1vcnkuYy0zMzIxLVx0XHRwdGVfdCBlbnRyeTtcbi0tXG5tbS9tYWR2aXNlLmM9MzUzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4tLVxubW0vbWFkdmlzZS5jLTM5MS1cdFx0XHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFx1MDAyNlx1MDAyNlxubW0vbWFkdmlzZS5jOjM5MjpcdFx0XHRcdFx0IXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpO1xubW0vbWFkdmlzZS5jLTM5My1cdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuLS1cbm1tL21lbW9yeS5jPTY1NDg9c3RhdGljIHZtX2ZhdWx0X3QgX19oYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtNjYyMS1cdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQodm1mLm9yaWdfcG1kKSkpIHtcbm1tL21lbW9yeS5jOjY2MjI6XHRcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkodm1mLm9yaWdfcG1kKSlcbm1tL21lbW9yeS5jLTY2MjMtXHRcdFx0cmV0dXJuIGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKFx1MDAyNnZtZik7XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTg2PWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI1My1cdFx0ICAgIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpIHx8XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNTQ6XHRcdCAgICBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpKSB7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTUtXHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2NS1cdFx0XHRcdHJldHVybiB0cnVlO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MjY2Olx0XHRcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSB7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNjctXHRcdFx0XHRzb2Z0bGVhZl90IGVudHJ5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGluIGBsaW51eC9sZWFmb3BzLmhgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZGV2aWNlLXByaXZhdGUgbWFwcGluZ3MsIHNwZWNpZmljYWxseSBhdCB0aGUgcGFnZSBtaWRkbGUgZGlyZWN0b3J5IChQTUQpIGxldmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIEkgcmVjYWxsIHRoaXMgZmlsZSBvZnRlbiBjb250YWlucyBsb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9yIGdlbmVyaWMgaGVscGVyIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24uIEdpdmVuIHRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lLCBJIHN1c3BlY3QgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgaXMgbGlrZWx5IGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uLiBJdCYjMzk7cyBwdXJwb3NlLCBhcyB0aGUgbmFtZSBpbXBsaWVzLCBpcyBwcm9iYWJseSB0byBxdWlja2x5IGFuZCBlZmZpY2llbnRseSBkZXRlcm1pbmUgaWYgYSBnaXZlbiBQTUQgZW50cnkgcmVwcmVzZW50cyBtZW1vcnkgcHJpdmF0ZSB0byBhIGRldmljZSBkcml2ZXIsIGxpa2VseSB1c2VkIGZvciBtZW1vcnktbWFwcGVkIEkvTyBvciBkaXJlY3QgbWVtb3J5IGFjY2Vzcy4gSSBleHBlY3QgaXQgdG8gaW52b2x2ZSBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIGNoZWNrcyBhZ2FpbnN0IHJlc2VydmVkIGJpdHMgd2l0aGluIHRoZSBQTUQmIzM5O3MgZm9ybWF0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNvbmZpcm1zIG15IGFzc3VtcHRpb25zIGFuZCByZXZlYWxzIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgYWxzbyBoYXZlIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkyLS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTkzOiAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTk0LSAqIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwNDpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEwLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjExOnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZSB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24uIFRoaXMgaXNuJiMzOTt0IHNvbWV0aGluZyBJIHN0dW1ibGUgYWNyb3NzIGV2ZXJ5IGRheSwgc28gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIG15IHN0YW5kYXJkIHByb2Nlc3MuIEZpcnN0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZSBmdW5jdGlvbiBpdHNlbGYgaGFzIGFueSBleHBsaWNpdCBgI2lmZGVmYCBjb25kaXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29scyBhbmQgbWV0aG9kIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUga2VybmVsIHNvdXJjZS4gSSYjMzk7bGwgY2hlY2sgaXRzIGRlZmluaXRpb24gdG8gc2VlIGlmIEkgY2FuIGZpbmQgYW4gaW5jbHVkZSBmaWxlIG9yIG1hY3JvIHRoYXQgZ2l2ZXMgbWUgYW55IGhpbnRzLiBUaGVuIEkmIzM5O2xsIHdvcmsgZnJvbSB0aGVyZS4gVGhpcyB3aWxsIGJlIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCwgSSB0aGluay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkwOlx0I2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpXG4gNTkxOlx0XG4gNTkyOlx0LyoqXG4gNTkzOlx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG4gNTk0Olx0ICogZW50cnkuXG4gNTk1Olx0ICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cbiA1OTY6XHQgKlxuIDU5NzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgUE1EIGNvbnRhaW5zIGEgc3dhcCBlbnRyeSB0aGF0IHJlcHJlc2VudHMgYSBkZXZpY2UgcHJpdmF0ZVxuIDU5ODpcdCAqIHBhZ2UgbWFwcGluZy4gVGhpcyBpcyB1c2VkIGZvciB6b25lIGRldmljZSBwcml2YXRlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuXG4gNTk5Olx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxuIDYwMDpcdCAqIG9wZXJhdGlvbnMuXG4gNjAxOlx0ICpcbiA2MDI6XHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcbiA2MDM6XHQgKi9cbiA2MDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbiA2MDU6XHR7XG4gNjA2Olx0XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG4gNjA3Olx0fVxuIDYwODpcdFxuIDYwOTpcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUyAqL1xuIDYxMDpcdFxuIDYxMTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuIDYxMjpcdHtcbiA2MTM6XHRcdHJldHVybiBmYWxzZTtcbiA2MTQ6XHR9XG4gNjE1Olx0XG4gNjE2Olx0I2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXG4gNjE3Olx0XG4gNjE4Olx0LyoqXG4gNjE5Olx0ICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzgwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBQTUQgRW50cnkgTGFuZHNjYXBlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtYXAgb2YgdGhlIFBNRCAoUGFnZSBNYXAgRGlyZWN0b3J5KSBlbnRyeSBsYW5kc2NhcGUgaXMgdGVsbGluZyBtZSB0aGF0LCBmb3IgdGhlIGNvbmRpdGlvbiBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCB0byBldmFsdWF0ZSB0byB0cnVlLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYm90aCBgQ09ORklHX1pPTkVfREVWSUNFYCAqYW5kKiBgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTYCBkZWZpbmVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gc3BhY2UgY29uc2lkZXJhdGlvbi4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgbm93OiBXaGF0IGFib3V0IGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YD8gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gVGhpcyBzZWVtcyBsaWtlIGEgY3JpdGljYWwgYXNwZWN0IHdoZW4gZGVhbGluZyB3aXRoIHBhZ2UgbWlncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYW5kIGFyY2hpdGVjdHVyYWwgYXNzdW1wdGlvbnMgZm9yIGhhbmRsaW5nIGRldmljZS1wcml2YXRlIGVudHJpZXMgaGF2ZSBhbnkgb3ZlcmxhcCBvciBpbXBsaWNhdGlvbnMgZm9yIGRldGVjdGluZyBtaWdyYXRpb24gZW50cmllcy4gQXJlIHRoZXJlIHJlbGF0ZWQgZGVwZW5kZW5jaWVzLCBvciBhcmUgdGhlc2UgY29tcGxldGVseSBvcnRob2dvbmFsIGNvbmNlcm5zPyBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGhlcmUsIG9yIGxhY2sgdGhlcmVvZi4gSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhlIGNvZGViYXNlIGZvciBhbnkgcmVsYXRlZCBhcmVhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjE4Olx0LyoqXG4gNjE5Olx0ICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/XG4gNjIwOlx0ICogQHBtZDogUE1EIGVudHJ5LlxuIDYyMTpcdCAqXG4gNjIyOlx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgUE1EIGVuY29kZXMgYSBtaWdyYXRpb24gZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiA2MjM6XHQgKi9cbiA2MjQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRfdCBwbWQpXG4gNjI1Olx0e1xuIDYyNjpcdFx0cmV0dXJuIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcbiA2Mjc6XHR9XG4gNjI4Olx0XG4gNjI5Olx0LyoqXG4gNjMwOlx0ICogc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KCkgLSBJcyB0aGUgc3BlY2lmaWVkIHNvZnRsZWFmIGVudHJ5IG9idGFpbmVkIGZyb21cbiA2MzE6XHQgKiBhIFBNRCBvbmUgdGhhdCB3ZSBzdXBwb3J0IGF0IFBNRCBsZXZlbD9cbiA2MzI6XHQgKiBAZW50cnk6IEVudHJ5IHRvIGNoZWNrLlxuIDYzMzpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIHNvZnRsZWFmIGVudHJ5IGlzIHZhbGlkIGF0IFBNRCwgb3RoZXJ3aXNlIGZhbHNlLlxuIDYzNDpcdCAqL1xuIDYzNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcbiA2MzY6XHR7XG4gNjM3Olx0XHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xuIDYzODpcdFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxuIDYzOTpcdFx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xuIDY0MDpcdH1cbiA2NDE6XHRcbiA2NDI6XHQvKipcbiA2NDM6XHQgKiBwbWRfaXNfdmFsaWRfc29mdGxlYWYoKSAtIElzIHRoaXMgUE1EIGVudHJ5IGEgdmFsaWQgc29mdGxlYWYgZW50cnk/XG4gNjQ0Olx0ICogQHBtZDogUE1EIGVudHJ5LlxuIDY0NTpcdCAqXG4gNjQ2Olx0ICogUE1EIGxlYWYgZW50cmllcyBhcmUgdmFsaWQgb25seSBpZiB0aGV5IGFyZSBkZXZpY2UgcHJpdmF0ZSBvciBtaWdyYXRpb25cbiA2NDc6XHQgKiBlbnRyaWVzLiBUaGlzIGZ1bmN0aW9uIGFzc2VydHMgdGhhdCBhIFBNRCBsZWFmIGVudHJ5IGlzIHZhbGlkIGluIHRoaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkNoZWNraW5nIHRoZSBNaWdyYXRpb24gRW50cnkgTG9naWMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAgd291bGQgaGF2ZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBsaWtlbHkgYW4gYCNpZmRlZmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHByb3RlY3RpbmcgaXQuIEl0IHNlZW1zIHRvIGJlIHVzZWQgdG8gY2hlY2sgaWYgYW4gZW50cnkgaXMgYSBtaWdyYXRpb24gZW50cnkuIEJ1dCwgSSBkb24mIzM5O3Qgc2VlIG9uZS4gVGhhdOKAmXMgb2RkLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBieSBsb29raW5nIGF0IGhvdyBgc29mdGxlYWZfaXNfbWlncmF0aW9uYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJdCYjMzk7cyBwb3NzaWJsZSBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBvciB0aGF0IHRoZSBpbnRlbmRlZCBwcm90ZWN0aW9uIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBUaGlzIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29mdGxlYWZfaXNfbWlncmF0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0yNjM2PXN0YXRpYyB2b2lkIG1ha2VfdWZmZF93cF9odWdlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY1Mi1cbmZzL3Byb2MvdGFza19tbXUuYzoyNjUzOlx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbmZzL3Byb2MvdGFza19tbXUuYy0yNjU0LVx0XHRzZXRfaHVnZV9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLFxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTIwOD1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfc3dhcChzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIxMy0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjIxNDogKiBzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIHdyaXRhYmxlIG1pZ3JhdGlvbiBlbnRyeT9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIxNS0gKiBAZW50cnk6IExlYWYgZW50cnkuXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjE5LSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjIwOnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIyMS17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjI1LS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjI2OiAqIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSByZWFkYWJsZSBtaWdyYXRpb24gZW50cnk/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yMjctICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIzMS0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjIzMjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWQoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIzMy17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjM3LS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjM4OiAqIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkX2V4Y2x1c2l2ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGFuIGV4Y2x1c2l2ZVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjM5LSAqIHJlYWRhYmxlIG1pZ3JhdGlvbiBlbnRyeT9cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNDQtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNDU6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjQ2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTAtLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNTE6ICogc29mdGxlYWZfaXNfbWlncmF0aW9uKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBtaWdyYXRpb24gZW50cnk/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTItICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1NS0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI1NjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTcte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTM1NT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaGFzX3Bmbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM1OS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM2MDpcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYxLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00MDk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc29mdGxlYWZfdG9fcGFnZShzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQxMy1cdFZNX1dBUk5fT05fT05DRSghc29mdGxlYWZfaGFzX3BmbihlbnRyeSkpO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDE0Olx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00MTUtXHRcdHNvZnRsZWFmX21pZ3JhdGlvbl9zeW5jKGVudHJ5LCBwYWdlX2ZvbGlvKHBhZ2UpKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00MjY9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnNvZnRsZWFmX3RvX2ZvbGlvKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDMwLVx0Vk1fV0FSTl9PTl9PTkNFKCFzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0MzE6XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQzMi1cdFx0c29mdGxlYWZfbWlncmF0aW9uX3N5bmMoZW50cnksIGZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00NzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3VmZmRfd3BfbWFya2VyKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDg2LS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDg3OiAqIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl95b3VuZygpIC0gRG9lcyB0aGlzIG1pZ3JhdGlvbiBlbnRyeSBjb250YWluIGFuIGFjY2Vzc2VkXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00ODgtICogYml0P1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ5Ni0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ5NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uX3lvdW5nKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00OTgte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDk5Olx0Vk1fV0FSTl9PTl9PTkNFKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUwMC1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01MDctLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1MDg6ICogc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KCkgLSBEb2VzIHRoaXMgbWlncmF0aW9uIGVudHJ5IGNvbnRhaW4gYSBkaXJ0eSBiaXQ/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01MDktICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUxNS0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjUxNjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01MTcte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTE4Olx0Vk1fV0FSTl9PTl9PTkNFKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUxOS1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01MjctXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1Mjg6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl95b3VuZyhzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTI5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01MzItXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1MzM6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9kaXJ0eShzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTM0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MjQ9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjI1LXtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYyNjpcdHJldHVybiBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MjctfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM4LVx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjM5Olx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjQwLX1cbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9ODQ0PXN0YXRpYyB2b2lkIF9faW5pdCBzd2FwX21pZ3JhdGlvbl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NzAtXHRlbnRyeSA9IG1ha2Vfd3JpdGFibGVfbWlncmF0aW9uX2VudHJ5KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NzE6XHRXQVJOX09OKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKTtcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NzI6XHRXQVJOX09OKCFzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKTtcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NzMtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODc0LVx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX21pZ3JhdGlvbl9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODc1Olx0V0FSTl9PTighc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSk7XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODc2Olx0V0FSTl9PTihzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKTtcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NzctXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODc4LVx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX21pZ3JhdGlvbl9lbnRyeShwYWdlX3RvX3BmbihwYWdlKSk7XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODc5Olx0V0FSTl9PTighc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSk7XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODgwOlx0V0FSTl9PTihzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKTtcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04ODEtXHRfX0NsZWFyUGFnZUxvY2tlZChwYWdlKTtcbi0tXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0yOTAtXG5tbS9obW0uYzoyOTE6XHRcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XG5tbS9obW0uYy0yOTItXHRcdFx0cHRlX3VubWFwKHB0ZXApO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTgwOD1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTgxOC1cbm1tL2h1Z2VfbWVtb3J5LmM6MTgxOTpcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpIHx8XG5tbS9odWdlX21lbW9yeS5jOjE4MjA6XHQgICAgc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KSkge1xubW0vaHVnZV9tZW1vcnkuYy0xODIxLVx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI2MDA9c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjYwNy1cdFZNX1dBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSk7XG5tbS9odWdlX21lbW9yeS5jOjI2MDg6XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSkge1xubW0vaHVnZV9tZW1vcnkuYy0yNjA5LVx0XHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzA5Nj1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxNzMtXG5tbS9odWdlX21lbW9yeS5jOjMxNzQ6XHRcdHdyaXRlID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzE3NS1cdFx0aWYgKFBhZ2VBbm9uKHBhZ2UpKVxubW0vaHVnZV9tZW1vcnkuYzozMTc2Olx0XHRcdGFub25fZXhjbHVzaXZlID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmM6MzE3NzpcdFx0eW91bmcgPSBzb2Z0bGVhZl9pc19taWdyYXRpb25feW91bmcoZW50cnkpO1xubW0vaHVnZV9tZW1vcnkuYzozMTc4Olx0XHRkaXJ0eSA9IHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9kaXJ0eShlbnRyeSk7XG5tbS9odWdlX21lbW9yeS5jLTMxNzktXHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgqcG1kKSkge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NTAyMj12b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwNDAtXHRcdHBtZGUgPSBwbWRfbWtzb2Z0X2RpcnR5KHBtZGUpO1xubW0vaHVnZV9tZW1vcnkuYzo1MDQxOlx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpXG5tbS9odWdlX21lbW9yeS5jLTUwNDItXHRcdHBtZGUgPSBwbWRfbWt3cml0ZShwbWRlLCB2bWEpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTA0OS1cbm1tL2h1Z2VfbWVtb3J5LmM6NTA1MDpcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uX3lvdW5nKGVudHJ5KSlcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1MS1cdFx0cG1kZSA9IHBtZF9ta29sZChwbWRlKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1Mi1cdC8qIE5PVEU6IHRoaXMgbWF5IGNvbnRhaW4gc2V0dGluZyBzb2Z0LWRpcnR5IG9uIHNvbWUgYXJjaHMgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NTA1MzpcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KGVudHJ5KSlcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1NC1cdFx0cG1kZSA9IHBtZF9ta2RpcnR5KHBtZGUpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTA3NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NTA3NjpcdFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb25fcmVhZChlbnRyeSkpXG5tbS9odWdlX21lbW9yeS5jLTUwNzctXHRcdFx0cm1hcF9mbGFncyB8PSBSTUFQX0VYQ0xVU0lWRTtcbi0tXG5tbS9odWdldGxiLmM9NDkwMj1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXG4tLVxubW0vaHVnZXRsYi5jLTQ5NzUtXHRcdFx0c2V0X2h1Z2VfcHRlX2F0KGRzdCwgYWRkciwgZHN0X3B0ZSwgZW50cnksIHN6KTtcbm1tL2h1Z2V0bGIuYzo0OTc2Olx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZikpKSB7XG5tbS9odWdldGxiLmMtNDk3Ny1cdFx0XHRib29sIHVmZmQgPSBwdGVfc3dwX3VmZmQoZW50cnkpO1xubW0vaHVnZXRsYi5jLTQ5NzgtXG5tbS9odWdldGxiLmM6NDk3OTpcdFx0XHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKHNvZnRsZWFmKSBcdTAwMjZcdTAwMjYgY293KSB7XG5tbS9odWdldGxiLmMtNDk4MC1cdFx0XHRcdC8qXG4tLVxubW0vaHVnZXRsYi5jPTYwMTQ9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjA5MC1cbm1tL2h1Z2V0bGIuYzo2MDkxOlx0XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKHNvZnRsZWFmKSkge1xubW0vaHVnZXRsYi5jLTYwOTItXHRcdFx0Lypcbi0tXG5tbS9odWdldGxiLmM9NjQ5OD1sb25nIGh1Z2V0bGJfY2hhbmdlX3Byb3RlY3Rpb24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTY1ODQtXHRcdFx0LyogTm90aGluZyB0byBkby4gKi9cbm1tL2h1Z2V0bGIuYzo2NTg1Olx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpKSB7XG5tbS9odWdldGxiLmMtNjU4Ni1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xuLS1cbm1tL2h1Z2V0bGIuYy02NTg4LVxubW0vaHVnZXRsYi5jOjY1ODk6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpIHtcbm1tL2h1Z2V0bGIuYy02NTkwLVx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXG4tLVxubW0va3NtLmM9NjE2PXN0YXRpYyBpbnQgYnJlYWtfa3NtX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9rc20uYy02NDYtXHRcdFx0ICovXG5tbS9rc20uYzo2NDc6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpXG5tbS9rc20uYy02NDgtXHRcdFx0XHRmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcbi0tXG5tbS9tZW1vcnkuYz0xMDAxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vbWVtb3J5LmMtMTAyMi1cdFx0cnNzW01NX1NXQVBFTlRTXSYjNDM7JiM0Mzs7XG5tbS9tZW1vcnkuYzoxMDIzOlx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XG5tbS9tZW1vcnkuYy0xMDI0LVx0XHRmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcbi0tXG5tbS9tZW1vcnkuYy0xMDI3LVxubW0vbWVtb3J5LmM6MTAyODpcdFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb25fcmVhZChlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9tZW1vcnkuYy0xMDI5LVx0XHRcdFx0aXNfY293X21hcHBpbmcodm1fZmxhZ3MpKSB7XG4tLVxubW0vbWVtb3J5LmM9MTgxMT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTg0NS1cdFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3QoZW50cnksIG5yKTtcbm1tL21lbW9yeS5jOjE4NDY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTE4NDctXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XG4tLVxubW0vbWVtb3J5LmM9NDgyNT12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00ODQ2LVx0aWYgKHVubGlrZWx5KCFzb2Z0bGVhZl9pc19zd2FwKGVudHJ5KSkpIHtcbm1tL21lbW9yeS5jOjQ4NDc6XHRcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XG5tbS9tZW1vcnkuYy00ODQ4LVx0XHRcdG1pZ3JhdGlvbl9lbnRyeV93YWl0KHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCxcbi0tXG5tbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1wb2xpY3kuYy03MTktXG5tbS9tZW1wb2xpY3kuYzo3MjA6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpXG5tbS9tZW1wb2xpY3kuYy03MjEtXHRcdFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQmIzQzOyYjNDM7O1xuLS1cbm1tL21lbXBvbGljeS5jPTc3ND1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtNzkwLVxubW0vbWVtcG9saWN5LmM6NzkxOlx0XHRcdGlmICh1bmxpa2VseShzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSlcbm1tL21lbXBvbGljeS5jLTc5Mi1cdFx0XHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCYjNDM7JiM0Mzs7XG4tLVxubW0vbWlncmF0ZS5jPTM1MT1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0zOTEtXHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUob2xkX3B0ZSk7XG5tbS9taWdyYXRlLmM6MzkyOlx0XHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbl95b3VuZyhlbnRyeSkpXG5tbS9taWdyYXRlLmMtMzkzLVx0XHRcdHB0ZSA9IHB0ZV9ta29sZChwdGUpO1xubW0vbWlncmF0ZS5jOjM5NDpcdFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNiBzb2Z0bGVhZl9pc19taWdyYXRpb25fZGlydHkoZW50cnkpKVxubW0vbWlncmF0ZS5jLTM5NS1cdFx0XHRwdGUgPSBwdGVfbWtkaXJ0eShwdGUpO1xuLS1cbm1tL21pZ3JhdGUuYy00MDAtXG5tbS9taWdyYXRlLmM6NDAxOlx0XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSlcbm1tL21pZ3JhdGUuYy00MDItXHRcdFx0cHRlID0gcHRlX21rd3JpdGUocHRlLCB2bWEpO1xuLS1cbm1tL21pZ3JhdGUuYy00MDktXG5tbS9taWdyYXRlLmM6NDEwOlx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgIXNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKGVudHJ5KSlcbm1tL21pZ3JhdGUuYy00MTEtXHRcdFx0cm1hcF9mbGFncyB8PSBSTUFQX0VYQ0xVU0lWRTtcbi0tXG5tbS9taWdyYXRlLmM9NDk0PXZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4tLVxubW0vbWlncmF0ZS5jLTUxMi1cdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcbm1tL21pZ3JhdGUuYzo1MTM6XHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpXG5tbS9taWdyYXRlLmMtNTE0LVx0XHRnb3RvIG91dDtcbi0tXG5tbS9taWdyYXRlLmM9NTI5PXZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXRfaHVnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbi0tXG5tbS9taWdyYXRlLmMtNTQyLVx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xubW0vbWlncmF0ZS5jOjU0MzpcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XG5tbS9taWdyYXRlLmMtNTQ0LVx0XHQvKlxuLS1cbm1tL21wcm90ZWN0LmM9MjE0PXN0YXRpYyBsb25nIGNoYW5nZV9zb2Z0bGVhZl9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbXByb3RlY3QuYy0yMjItXG5tbS9tcHJvdGVjdC5jOjIyMzpcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKSB7XG5tbS9tcHJvdGVjdC5jLTIyNC1cdFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9jYWNoZWRfd3JpdGFibGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg0LVx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSB8fFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjE4NTpcdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xODYtfVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMjAtXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjE6XHRcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEyMi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xNTAxPXN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTY4My1cbm1tL3VzZXJmYXVsdGZkLmM6MTY4NDpcdFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbm1tL3VzZXJmYXVsdGZkLmMtMTY4NS1cdFx0XHRwdGVfdW5tYXAoc3JjX3B0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBgc29mdGxlYWZfaXNfbWlncmF0aW9uYCBJbmNsdXNpb24qKgoKT2theSwgc28gYHNvZnRsZWFmX2lzX21pZ3JhdGlvbmAgaXMgdW5jb25kaXRpb25hbGx5IGRlZmluZWQuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYHBtZF9pc19taWdyYXRpb25fZW50cnlgIGFzIGFsd2F5cyBhdmFpbGFibGUuIFJpZ2h0LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWFkdmlzZS5jYCwgYW5kIGBtbS9tZW1wb2xpY3kuY2AuIExldCYjMzk7cyBicmVhayBpdCBkb3duLgoKRmlyc3QsIEkgc2VlIHRoZSBtb2RpZmljYXRpb24gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGludm9sdmVzIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBjaGFuZ2UgaW4gYG1tL21hZHZpc2UuY2AgcmVsYXRlZCB0byBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gRmluYWxseSwgYG1tL21lbXBvbGljeS5jYCBtb2RpZmllcyBgcXVldWVfZm9saW9zX3BtZGAuIExldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiwgYHF1ZXVlX2ZvbGlvc19wbWRgLgoKYGBgYwpzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQp7CglzdHJ1Y3QgZm9saW8gKmZvbGlvOwoJc3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstJmd0O3ByaXZhdGU7CglwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwbWQpOwoKCWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQocG1kdmFsKSkpIHsKCQlpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKQoJCQlxcC0mZ3Q7bnJfZmFpbGVkJiM0MzsmIzQzOzsKCQlyZXR1cm47Cgl9Cglmb2xpbyA9IHBtZF9mb2xpbyhwbWR2YWwpOwoJaWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHsKCQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7CgkJcmV0dXJuOwoJfQouLi4KYGBgCgpBaCwgSSBzZWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gUHJldmlvdXNseSwgaWYgdGhlIFBNRCB3YXNuJiMzOTt0IHByZXNlbnQsIHRoZSBjb2RlIGp1c3QgY2hlY2tlZCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKWAuIEhvd2V2ZXIsIGlmIGl0IHdhc24mIzM5O3QgYSBtaWdyYXRpb24gZW50cnkgYW5kIHdhc24mIzM5O3QgcHJlc2VudCDigJMgc2F5IGEgc3dhcCBlbnRyeSwgb3IgYSBkZXZpY2UtcHJpdmF0ZSBlbnRyeSDigJMgdGhlIGNvZGUgd291bGQgaGF2ZSBjYWxsZWQgYHBtZF9mb2xpb2Agb24gYSBub24tcHJlc2VudCBQTUQuIFRoYXQgY291bGQgbGVhZCB0byBhIG5hc3R5IGNyYXNoLCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGNvbXBsZXRlbHkgd3JvbmcgZGF0YS4gVGhleSYjMzk7dmUgZml4ZWQgdGhpcyBub3csIGJ1dCBpdCBpcyBjbGVhciB0aGF0IHRoaXMgbmVlZHMgYSBsb3Qgb2YgdGVzdGluZy4KClNvIHRoZSBwb3RlbnRpYWwgZm9yIHVuZGVmaW5lZCBiZWhhdmlvciBoZXJlIGlzIGNvbmNlcm5pbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNwb3Qgd29ydGggZnV6emluZy4gSSYjMzk7bGwgZm9jdXMgb24gYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBhbmQgc2luY2UgYHF1ZXVlX2ZvbGlvc19wbWRgIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGZyb20gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbGF0dGVyIHRvby4gTGV0JiMzOTtzIHNlZSBob3cgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGxvb2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTY1Mz1zdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbm1tL21lbXBvbGljeS5jLTY4MC0gKlxubW0vbWVtcG9saWN5LmM6NjgxOiAqIHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UoKSBoYXMgdHdvIHBvc3NpYmxlIHJldHVybiB2YWx1ZXM6XG5tbS9tZW1wb2xpY3kuYy02ODItICogMCAtIGNvbnRpbnVlIHdhbGtpbmcgdG8gc2NhbiBmb3IgbW9yZSwgZXZlbiBpZiBhbiBleGlzdGluZyBmb2xpbyBvbiB0aGVcbi0tXG5tbS9tZW1wb2xpY3kuYy02ODYtICovXG5tbS9tZW1wb2xpY3kuYzo2ODc6c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbXBvbGljeS5jLTY4OC1cdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vbWVtcG9saWN5LmM9OTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfd2Fsa19vcHMgPSB7XG5tbS9tZW1wb2xpY3kuYy05NTUtXHQuaHVnZXRsYl9lbnRyeVx0XHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxubW0vbWVtcG9saWN5LmM6OTU2Olx0LnBtZF9lbnRyeVx0XHQ9IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UsXG5tbS9tZW1wb2xpY3kuYy05NTctXHQudGVzdF93YWxrXHRcdD0gcXVldWVfcGFnZXNfdGVzdF93YWxrLFxuLS1cbm1tL21lbXBvbGljeS5jPTk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHF1ZXVlX3BhZ2VzX2xvY2tfdm1hX3dhbGtfb3BzID0ge1xubW0vbWVtcG9saWN5LmMtOTYyLVx0Lmh1Z2V0bGJfZW50cnlcdFx0PSBxdWV1ZV9mb2xpb3NfaHVnZXRsYixcbm1tL21lbXBvbGljeS5jOjk2MzpcdC5wbWRfZW50cnlcdFx0PSBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlLFxubW0vbWVtcG9saWN5LmMtOTY0LVx0LnRlc3Rfd2Fsa1x0XHQ9IHF1ZXVlX3BhZ2VzX3Rlc3Rfd2FsayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IE5hdmlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ29udGV4dHMqKgoKT2theSwgc28gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGlzIGRlZmluaXRlbHkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBgcG1kX2VudHJ5YCB3aXRoaW4gYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVzc2VudGlhbCwgYXMgSSYjMzk7dmUgc2VlbiBpdHMgcm9sZSBpbiBgaHVnZV9tZW1vcnkuY2AgYW5kIHNwZWNpZmljYWxseSB3aXRoIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLiBUaGVuIHRoZXJlJiMzOTtzIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCwgY3J1Y2lhbCBmb3IgYG1hZHZpc2UuY2AsIGFuZCwgb2YgY291cnNlLCBgQ09ORklHX05VTUFgIHdoaWNoIHBsYXlzIGEga2V5IHJvbGUgd2l0aGluIGBtZW1wb2xpY3kuY2AuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24sIGFuZCBJIHNlZSB0aGF0IGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTYCAqbWlnaHQqIGJlIHJlbGV2YW50IGZvciBpdHMgYmVoYXZpb3IuIFRoZSBjb2RlIGdldHMgY29tcGlsZWQgZXZlbiBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCwgYnV0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBIb3dldmVyLCB0byBhY3R1YWxseSAqdGVzdCogdGhlIGRldmljZSBwcml2YXRlIGVudHJ5IHBhdGgsIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGEgbXVzdC4gTXkgaHVuY2ggaXMgdGhhdCB0aGUgb3JpZ2luYWwgYnVnIGhhZCB0byBkbyB3aXRoIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGVycm9uZW91c2x5IHJldHVybmluZyB0cnVlLCBjYXVzaW5nIHNvbWUgZmFpbHVyZSwgb3IgaXQgd2FzIGEgd2FybmluZyB0aGF0IG5lZWRlZCB0byBiZSBhZGRyZXNzZWQuCgpBaCwgaGVyZSYjMzk7cyB0aGUgY3J1Y2lhbCBwYXRjaCBzbmlwcGV0OgoKYGBgYwotCQlWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSAmYW1wOyZhbXA7Ci0JCQkJICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpOwomIzQzOwkJVk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTsKYGBgCgpUaGlzIGlzIGl0ISBCZWZvcmUsIGl0IHdhcyBhIGBWTV9CVUdfT05gIGlmIGl0IHdhc24mIzM5O3QgYSBtaWdyYXRpb24gZW50cnkuIE5vdywgaXQmIzM5O3MgYSBgVk1fV0FSTl9PTl9PTkNFYCBpZiBpdCBpcyBuZWl0aGVyIGEgbWlncmF0aW9uIGVudHJ5IG5vciBhIGRldmljZSBwcml2YXRlIGVudHJ5LiBUaGVyZWZvcmUgdGhlIG9yaWdpbmFsIGJ1ZyBsaWtlbHkgb3JpZ2luYXRlZCBmcm9tIGRldmljZSBwcml2YXRlIGVudHJpZXMgc29tZWhvdyB0cmlnZ2VyaW5nIHRoYXQgYFZNX0JVR19PTmAuIFRvIHRyaWdnZXIgdGhlIGRldmljZSBwcml2YXRlIGVudHJ5IHBhdGggcmVsaWFibHksIEkgd291bGQgbmVlZCB0byBlbmFibGUgYENPTkZJR19aT05FX0RFVklDRWAuIEp1c3QgdG8gY29uZmlybSwgSSBzaG91bGQgaW52ZXN0aWdhdGUgaWYgYENPTkZJR19aT05FX0RFVklDRWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMjM9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjctXG5tbS9LY29uZmlnOjEyMjg6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjktXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2ODIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IE1hbmFnZW1lbnQgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHNpdHVhdGlvbi4gV2UmIzM5O3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIGBaT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgYSBnaXZlbi4gQWxzbywgSSYjMzk7bSBzZWVpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYEFEVklTRV9TWVNDQUxMU2AsIGFuZCBgTlVNQWAgaW4gdGhlIG1peC4gTGV0JiMzOTtzIGdldCB0aGlzIHN0cmFpZ2h0OiB0aGVzZSBhcmUgbXkgZm9jdXMgcG9pbnRzLgoKU28sIGxldCBtZSBzdW1tYXJpemUgbXkgZm9jdXMuIFRoZSBrZXkgc3ltYm9scyB0aGF0IGFyZSBjYXRjaGluZyBteSBhdHRlbnRpb24gYXJlOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGFuZCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAuIFRoZXNlIHNlZW0gY2VudHJhbCB0byB0aGUgYmVoYXZpb3IuCgpBbmQsIG9mIGNvdXJzZSwgdGhlc2UgRW5hYmxlQ29uZmlncyBhcmUgYWxzbyBpbXBvcnRhbnQ6IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBBRFZJU0VfU1lTQ0FMTFNgLCBgTlVNQWAsIGFuZCBgWk9ORV9ERVZJQ0VgLiBUaGVzZSBlbmFibGUgZGlmZmVyZW50IGZlYXR1cmVzIGZvciBtZW1vcnkgbWFuYWdlbWVudC4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSB0aGluayBtb3JlIGNyaXRpY2FsbHkgYWJvdXQgaXQuIEFyZSBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgc3RhdGljIG9yIGV4cG9ydGVkPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVzZSBzeW1ib2xzIGFyZSBjb21pbmcgZnJvbSwgYW5kIHRoZSBzY29wZSBvZiB0aGVzZSBzeW1ib2xzLCBzbyBJIGNhbiBtb3JlIGNsZWFybHkgZGV0ZXJtaW5lIGhvdyB0aGlzIGFsbCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfd3BfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5LVx0XHRcdCAgIHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyMzQ9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMzEzLSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyMzE0OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0yMzE1LVx0XHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcbi0tXG5tbS9tYWR2aXNlLmM9NjUyPXN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWFkdmlzZS5jLTY2OC1cdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kKSlcbm1tL21hZHZpc2UuYzo2Njk6XHRcdGlmIChtYWR2aXNlX2ZyZWVfaHVnZV9wbWQodGxiLCB2bWEsIHBtZCwgYWRkciwgbmV4dCkpXG5tbS9tYWR2aXNlLmMtNjcwLVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUzMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlIHRvIGVhY2ggb3RoZXIgaW4gdGhlIGtlcm5lbC4gYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgaXMgYXZhaWxhYmxlIHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYmVjYXVzZSBpdCYjMzk7cyBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIC0gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBtb2R1bGVzIG9yIGtlcm5lbCBjb21wb25lbnRzLiBJdCYjMzk7cyBub3QgYEVYUE9SVF9TWU1CT0xgLCBidXQgaXQmIzM5O3Mgbm90IGBzdGF0aWNgLCBzbyBpdCYjMzk7cyB2aXNpYmxlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE5vdywgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGRlZmluZWQgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGludGVybmFsIHRvIHRoYXQgcGFydGljdWxhciBmaWxlIGFuZCBub3QgbWVhbnQgZm9yIGV4dGVybmFsIHVzZS4gU2ltaWxhcmx5LCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgaXMgYWxzbyBzdGF0aWMsIHRoaXMgdGltZSB3aXRoaW4gYG1tL21lbXBvbGljeS5jYCwgd2hpY2ggdGVsbHMgbWUgaXQgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIG9ubHkgd2l0aGluIHRoZSBtZW1vcnkgcG9saWN5IG1hbmFnZW1lbnQgY29kZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIHRoZSB1c2FnZSBvZiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCB0byB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBtYWR2aXNlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MzQzPXN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfZm9saW9fcHRlX2JhdGNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWFkdmlzZS5jLTM1Mi1cbm1tL21hZHZpc2UuYzozNTM6c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbm1tL21hZHZpc2UuYy0zNTQtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hZHZpc2UuYz01Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xubW0vbWFkdmlzZS5jOjU2OTpcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXG5tbS9tYWR2aXNlLmMtNTcwLVx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTMxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpcyBhIGNhbGxiYWNrIHJlbGF0ZWQgdG8gYHBtZF9lbnRyeWAsIGdvdCBpdC4gVGhlIGdpc3QgaXMsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2Ugd2VyZW4mIzM5O3QgY2hlY2tpbmcgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgYmVmb3JlIGNhbGxpbmcgYHBtZF9mb2xpb2Agb3IgdHJpZ2dlcmluZyB0aGF0IGBWTV9CVUdfT05gIGNhbGwgd2l0aGluIHRoZSBgbWFkdmlzZWAgYW5kIG1lbW9yeSBwb2xpY3kgY29kZSBwYXRocy4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBhZmZlY3RpbmcgaG93IHdlIGhhbmRsZSBub24tcHJlc2VudCBQTURzLCB3aGljaCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhcyBpbXBhY3RpbmcgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgYG1hZHZpc2VgLCBhbmQgYG1iaW5kYC9gc2V0X21lbXBvbGljeWAgc3lzY2FsbHMg4oCTIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdGllcywgZXNwZWNpYWxseSBpbiBtb2Rlcm4gc3lzdGVtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCByZWFjaGFibGUgdGhyb3VnaCB0aGUgYG1hZHZpc2VgIGFuZCBgbWJpbmRgL2BzZXRfbWVtcG9saWN5YCBzeXNjYWxscyDigJMgdmVyeSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgd2hlbiB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaW1wYWN0cy4KClRoZSBwcmVzZW5jZSBvZiBgV29ydGhGdXp6aW5nOiB0cnVlYCB0ZWxscyBtZSB0aGlzIGlzIHJpcGUgZm9yIHRlc3RpbmcsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgaW4gdGhlc2UgbWVtb3J5LWludGVuc2l2ZSBhcmVhcy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBxdWl0ZSB0ZWxsaW5nOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGFuZCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgYXJlIGFsbCBhcmVhcyB3aGVyZSB0aGlzIG92ZXJzaWdodCBjb3VsZCBtYW5pZmVzdC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2V0IHRvIGZvY3VzIG9uLiBBbmQgdGhlIGBFbmFibGVDb25maWdzYCBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhlIHNjb3BlIOKAkyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgQURWSVNFX1NZU0NBTExTYCwgYE5VTUFgLCBhbmQgYFpPTkVfREVWSUNFYCBhbGwgcG9pbnQgdG8gYWR2YW5jZWQgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW9zLgoKTm93LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gYSBiaXQgY3VyaW91cywgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHdlIG1pZ2h0IGJlIG1pc3Npbmc/IEhtbW0sIGxldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCBgQ09ORklHX0RFVklDRV9QUklWQVRFYD8gWWVhaCwgbGV0JiMzOTtzIHNlYXJjaCBmb3IgdGhhdC4gVGhhdCB3b3VsZCBjZXJ0YWlubHkgaW5mbHVlbmNlIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIE5lZWQgdG8gY2hlY2sgaWYgaXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjU0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNTYtXG5tbS9LY29uZmlnOjEyNTc6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNTgtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg5OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGVidWdnaW5nIGEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgREVWSUNFX1BSSVZBVEVgIHRoaW5nIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIGEgY29uZmlnIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIHJlbGV2YW5jZSwgaWYgYW55LCB0byB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRlbHZlIGludG8gaG93IHRoZXNlIHR3byBjb21wb25lbnRzIGludGVyYWN0LiBJcyB0aGlzIGNvbmZpZyBvcHRpb24gKmFjdHVhbGx5KiB1c2VkIGJ5IHRoYXQgcGFydGljdWxhciBmdW5jdGlvbj8gVGhpcyBpcyB0aGUgY29yZSBxdWVzdGlvbiB0byBhbnN3ZXIgaGVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgaW5jbHVkZXMgdGhlIHVzZSBvZiBgREVWSUNFX1BSSVZBVEVgIHdoZW4gY2FsbGluZyBvciB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTc0PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfdWZmZF9tYXJrZXIocHRlX3QgcHRlKVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5Mi0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU5MzogKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXBcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5NC0gKiBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDMtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMC1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYxMTpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipSZXZpc2l0aW5nIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAqKgoKQWxyaWdodCwgdGltZSB0byBjaXJjbGUgYmFjayB0byBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBsZWFmIG9wZXJhdGlvbnMgYXJlIGN1cnJlbnRseSBoYW5kbGVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSByZWNlbnQgZGlzY3Vzc2lvbnMgb24gW2luc2VydCByZWxldmFudCBjb250ZXh0LCBlLmcuLCB0aGUgcHJvcG9zZWQgb3B0aW1pemF0aW9uIG9yIHRoZSBzcGVjaWZpYyBpc3N1ZSB1bmRlciBpbnZlc3RpZ2F0aW9uXS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIHJlZ2FyZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgbG93LWxldmVsIHJvdXRpbmVzIHdpdGggdGhlIG92ZXJhbGwgcGFnZSBtYW5hZ2VtZW50IHNjaGVtZS4gVGhpcyBmaWxlIGlzIHRoZSBsaW5jaHBpbiwgYW5kIGEgc3VidGxlIGRldGFpbCBvdmVybG9va2VkIGhlcmUgY291bGQgaGF2ZSBzaWduaWZpY2FudCBkb3duc3RyZWFtIGNvbnNlcXVlbmNlcy4gTGV0IG1lIHJlLWV4YW1pbmUgdGhlIG1hY3JvcyBmb3IgYGFkZF90b19wYWdlX2NhY2hlYCwgYHJlbW92ZV9mcm9tX3BhZ2VfY2FjaGVgLCBhbmQgdGhlIGFzc29jaWF0ZWQgbG9jayBzZW1hbnRpY3MsIHBheWluZyBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byB0aGVpciBhdG9taWNpdHkgYW5kIG9yZGVyaW5nIGd1YXJhbnRlZXMgaW4gdGhlIGNvbnRleHQgb2YgW21lbnRpb24gc3BlY2lmaWMgYXJlYXMgb2YgY29uY2VybiwgZS5nLiwgY29uY3VycmVudCBhY2Nlc3MsIE5VTUEgYXJjaGl0ZWN0dXJlcywgb3Igc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXNdLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgc3RpbGwgdGhlIG9wdGltYWwgYXBwcm9hY2ggb3IgaWYgdGhlcmUgaXMgc3BhY2UgZm9yIHNvbWUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4NTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA1ODY6XHRcbiA1ODc6XHRcdHJldHVybiBmYWxzZTtcbiA1ODg6XHR9XG4gNTg5Olx0XG4gNTkwOlx0I2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpXG4gNTkxOlx0XG4gNTkyOlx0LyoqXG4gNTkzOlx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG4gNTk0Olx0ICogZW50cnkuXG4gNTk1Olx0ICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cbiA1OTY6XHQgKlxuIDU5NzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgUE1EIGNvbnRhaW5zIGEgc3dhcCBlbnRyeSB0aGF0IHJlcHJlc2VudHMgYSBkZXZpY2UgcHJpdmF0ZVxuIDU5ODpcdCAqIHBhZ2UgbWFwcGluZy4gVGhpcyBpcyB1c2VkIGZvciB6b25lIGRldmljZSBwcml2YXRlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuXG4gNTk5Olx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxuIDYwMDpcdCAqIG9wZXJhdGlvbnMuXG4gNjAxOlx0ICpcbiA2MDI6XHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcbiA2MDM6XHQgKi9cbiA2MDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbiA2MDU6XHR7XG4gNjA2Olx0XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG4gNjA3Olx0fVxuIDYwODpcdFxuIDYwOTpcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUyAqL1xuIDYxMDpcdFxuIDYxMTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuIDYxMjpcdHtcbiA2MTM6XHRcdHJldHVybiBmYWxzZTtcbiA2MTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk5hdmlnYXRpbmcgdGhlIERldmljZSBDb25maWd1cmF0aW9uIE1hemUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyB0aGUga2V5IGZsYWcgSSBuZWVkIHRvIGZvY3VzIG9uLiBUaGF0IGZlZWxzIHJpZ2h0LCBidXQgaG9sZCBvbiBhIHNlY29uZC4uLiBteSBleHBlcmllbmNlIGlzIHRlbGxpbmcgbWUgSSBuZWVkIHRvIGJlIGNhdXRpb3VzIGFib3V0IGFzc3VtaW5nIHNvbWV0aGluZyBsaWtlIHRoYXQgZGlyZWN0bHkuIFRoZXJlJiMzOTtzIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBtaWdodCBiZSBjb250aW5nZW50IG9uIHRoZSBgREVWSUNFX1BSSVZBVEVgIHNldHRpbmcuIEl0IHdvdWxkIGJlIGEgc2lsbHkgb3ZlcnNpZ2h0IHRvIG92ZXJsb29rIHRoYXQgZGVwZW5kZW5jeS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7bSBhY2NvdW50aW5nIGZvciBhbGwgdGhlIHBvdGVudGlhbCByYW1pZmljYXRpb25zIG9mIGVuYWJsaW5nIGBDT05GSUdfWk9ORV9ERVZJQ0VgIHdpdGggcmVnYXJkIHRvIGRldmljZSBwcml2YWN5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBxdWlja2x5IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MjU2PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjgtLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNjk6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzAtICogd3JpdGFibGUgZW50cnk/XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc1LSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjc2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODEtLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODI6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlIGVudHJ5P1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjgzLSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODYtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODc6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODgte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTM1NT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaGFzX3Bmbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2MS1cdFx0cmV0dXJuIHRydWU7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNjI6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MDQ9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA2Olx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX2Zyb21fcG1kKHBtZCkpO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MzU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3ZhbGlkX3BtZF9lbnRyeShzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzNy1cdC8qIE9ubHkgZGV2aWNlIHByaXZhdGUsIG1pZ3JhdGlvbiBlbnRyaWVzIHZhbGlkIGZvciBQTUQuICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2Mzg6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MzktXHRcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTgwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgU2lnbmlmaWNhbmNlIG9mIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZXhhbWluZSBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiAmIzM0O3NvZnRsZWFmJiMzNDsgc3VnZ2VzdHMgYSBzcGVjaWZpYyBzdWJzeXN0ZW0gb3IgbW9kdWxlLCBsaWtlbHkgcmVsYXRlZCB0byBkZXZpY2UgbWFuYWdlbWVudCwgcG90ZW50aWFsbHkgYSBkcml2ZXIgb3Igc29tZSBhYnN0cmFjdGlvbiBsYXllci4gVGhlICYjMzQ7aXNfZGV2aWNlX3ByaXZhdGUmIzM0OyBzdWZmaXggaXMgdGhlIGtleSDigJMgaXQmIzM5O3MgYSBCb29sZWFuIHZhcmlhYmxlLCBmbGFnLCBvciBwcm9wZXJ0eSwgaW5kaWNhdGluZyBhIGNoYXJhY3RlcmlzdGljIG9mIGEgZGV2aWNlIG9yIGEgcmVsYXRpb25zaGlwIHRvIGEgc3BlY2lmaWMgZGV2aWNlLgoKTXkgbWluZCByYWNlcyB0aHJvdWdoIHRoZSBwb3NzaWJsZSBzY2VuYXJpb3M6IElzIHRoaXMgYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcj8gQSBydW50aW1lIHN0YXRlIHZhcmlhYmxlPyBBIGNvbXBpbGUtdGltZSBjb25zdGFudD8gV2hhdCBwYXJ0IG9mIHRoZSBzeXN0ZW0gaXMgc2V0dGluZyB0aGlzIGZsYWcgYW5kIHdoYXQgcGFydHMgYXJlIHJlYWRpbmcgaXQ/IElzIHRoaXMga2VybmVsLWxldmVsIG9yIHVzZXItc3BhY2U/IEFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGFyZSB0aGUgc2VjdXJpdHkgb3Igb3BlcmF0aW9uYWwgY29uc2VxdWVuY2VzIGlmIHRoaXMgdmFyaWFibGUgaXMgaW5jb3JyZWN0bHkgc2V0IG9yIG1pc2ludGVycHJldGVkPyBJZiBhIGRldmljZSBpcyBtYXJrZWQgJiMzNDtwcml2YXRlJiMzNDsgaXMgaXQgdW5hdmFpbGFibGUgdG8gb3RoZXIgcHJvY2Vzc2VzIG9yIHRoZSBlbnRpcmUgc3lzdGVtPyBJcyB0aGVyZSBhIGxlYWsgcG90ZW50aWFsPyBBcmUgdGhlcmUgYW55IHNlY3VyaXR5IG1pdGlnYXRpb25zIGluIHBsYWNlIHRvIHByb3RlY3QgZGV2aWNlIHN0YXRlPwoKSSYjMzk7bSBzdGFydGluZyB0byBjb25zaWRlciBzcGVjaWZpYyBxdWVzdGlvbnMuIERvZXMgdGhpcyByZWxhdGUgdG8gcGh5c2ljYWwgcmVzb3VyY2UgaXNvbGF0aW9uPyBJcyB0aGlzIGFib3V0IHByZXZlbnRpbmcgdW5hdXRob3JpemVkIGFjY2VzcyB0byBoYXJkd2FyZSByZXNvdXJjZXM/IElzIHRoZSBgc29mdGxlYWZgIG1vZHVsZSByZXNwb25zaWJsZSBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgYWNjZXNzIGNvbnRyb2w/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgaGVyZSB3aWxsIGJlIGltcG9ydGFudC4gSWYgaXQgaXMgc2VjdXJpdHkgcmVsYXRlZCwgSSYjMzk7ZCBpbW1lZGlhdGVseSB3YW50IHRvIGtub3cgd2hvIGhhcyBhY2Nlc3MgdG8gdGhlIGRldmljZSBvciBpbmZvcm1hdGlvbiBhYm91dCBpdC4KCk15IGluc3RpbmN0IGlzIHRvIHN0YXJ0IGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUsIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyBvZiB0aGlzIHZhcmlhYmxlIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIGl0LiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIHRoZSBhc3NpZ25tZW50IGFuZCB1c2FnZXMgb2YgdGhpcyB2YXJpYWJsZSwgZXNwZWNpYWxseSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBzZXQgdG8gdHJ1ZSBvciBmYWxzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLCB0aGUgaW50ZW50LCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgYW55IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBhbHNvIHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbi4gRG9lcyBgc29mdGxlYWZgIHNldCB0aGUgYGlzX2RldmljZV9wcml2YXRlYCBmbGFnIGFuZCB0aGVuIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhlIGRldmljZSYjMzk7cyBzdGF0ZSB0byBhbm90aGVyIGNvbXBvbmVudD8gSXMgdGhpcyBvcGVyYXRpb24gYXRvbWljPyBUaGlzIGlzIGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzU6XHQgKi9cbiAyNzY6XHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcbiAyNzc6XHR7XG4gMjc4Olx0XHRyZXR1cm4gc29mdGxlYWZfdHlwZShlbnRyeSkgPT0gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG4gMjc5Olx0fVxuIDI4MDpcdFxuIDI4MTpcdC8qKlxuIDI4MjpcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cbiAyODM6XHQgKiBAZW50cnk6IExlYWYgZW50cnkuXG4gMjg0Olx0ICpcbiAyODU6XHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiAyODY6XHQgKi9cbiAyODc6XHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcbiAyODg6XHR7XG4gMjg5Olx0XHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XG4gMjkwOlx0XHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxuIDI5MTpcdFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9SRUFEOlxuIDI5MjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyOTM6XHRcdGRlZmF1bHQ6XG4gMjk0Olx0XHRcdHJldHVybiBmYWxzZTtcbiAyOTU6XHRcdH1cbiAyOTY6XHR9XG4gMjk3Olx0XG4gMjk4Olx0LyoqXG4gMjk5Olx0ICogc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeT9cbiAzMDA6XHQgKiBAZW50cnk6IExlYWYgZW50cnkuXG4gMzAxOlx0ICpcbiAzMDI6XHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeSwgb3RoZXJ3aXNlIGZhbHNlLlxuIDMwMzpcdCAqL1xuIDMwNDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKHNvZnRsZWFmX3QgZW50cnkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHNvIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIHRydWUsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBIb3dldmVyLCBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBpcyBhIGxpdHRsZSBtb3JlIGNvbmRpdGlvbmFsLiBJdCBkZXBlbmRzIG9uIHdoZXRoZXIgYENPTkZJR19aT05FX0RFVklDRWAgYW5kIGBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNgIGFyZSBzZXQuIEhtbSwgSSBrbm93IGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIGV4aXN0cyBzb21ld2hlcmUgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0b28sIGFuZCBzaW5jZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgZmxhZ3MsIEkmIzM5O2QgYmV0dGVyIGRvdWJsZSBjaGVjayB3aGVyZSB0aGF0JiMzOTtzIGRlZmluZWQuIFRpbWUgdG8gZ28gbG9vayBhdCBgbW0vS2NvbmZpZ2AgYW5kIHZlcmlmeSBpdHMgaW1wbGljYXRpb25zLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBldmVyeXRoaW5nIHdvcmtzIGFzIGl0IHNob3VsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjUwOlx0Y29uZmlnIEhNTV9NSVJST1JcbjEyNTE6XHRcdGJvb2xcbjEyNTI6XHRcdGRlcGVuZHMgb24gTU1VXG4xMjUzOlx0XG4xMjU0Olx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuMTI1NTpcdFx0Ym9vbFxuMTI1NjpcdFxuMTI1NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI1ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNTk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNjA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNjE6XHRcbjEyNjI6XHRcdGhlbHBcbjEyNjM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNjQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI2NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjY2Olx0XG4xMjY3Olx0Y29uZmlnIFZNQVBfUEZOXG4xMjY4Olx0XHRib29sXG4xMjY5Olx0XG4xMjcwOlx0Y29uZmlnIEFSQ0hfVVNFU19ISUdIX1ZNQV9GTEFHU1xuMTI3MTpcdFx0Ym9vbFxuMTI3MjpcdGNvbmZpZyBBUkNIX0hBU19QS0VZU1xuMTI3MzpcdFx0Ym9vbFxuMTI3NDpcdFxuMTI3NTpcdGNvbmZpZyBBUkNIX1VTRVNfUEdfQVJDSF8yXG4xMjc2Olx0XHRib29sXG4xMjc3Olx0Y29uZmlnIEFSQ0hfVVNFU19QR19BUkNIXzNcbjEyNzg6XHRcdGJvb2xcbjEyNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1OTEKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGhhcyBhIGRlcGVuZGVuY3kgb24gYFpPTkVfREVWSUNFYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHNhZmUgYW5kIGNvdmVyIGFsbCBiYXNlcywgSSB0aGluayBJJiMzOTtsbCBhZGQgYERFVklDRV9QUklWQVRFYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIEl0JiMzOTtzIGJldHRlciB0byBiZSBleHBsaWNpdCwgZXZlbiBpZiBpdCBzZWVtcyByZWR1bmRhbnQgaW5pdGlhbGx5LgoKU28sIGhlcmUmIzM5O3Mgd2hhdCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGN1cnJlbnRseSBsb29rcyBsaWtlLCB3aXRoIHRoZSBhZGRpdGlvbiBJJiMzOTt2ZSBtYWRlOgoKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKKiAgIGBBRFZJU0VfU1lTQ0FMTFNgCiogICBgTlVNQWAKKiAgIGBaT05FX0RFVklDRWAKKiAgIGBERVZJQ0VfUFJJVkFURWAKCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGV5IGFyZToKCiogICBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYAoqICAgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAKKiAgIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYAoKSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgdnVsbmVyYWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2Ygbm9uLXByZXNlbnQgUE1Ecywgc3BlY2lmaWNhbGx5IHRoZSBsYWNrIG9mIGEgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgY2hlY2sgYmVmb3JlIGNhbGxpbmcgYHBtZF9mb2xpb2Agb3IgdHJpZ2dlcmluZyBhIGBWTV9CVUdfT05gLiBUaGlzIGltcGFjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIG1hZHZpc2Ugb3BlcmF0aW9ucywgYW5kIG1lbW9yeSBwb2xpY2llcy4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgdGhpcyBpc3N1ZSBpcyByZWFjaGFibGUgdGhyb3VnaCBgbWFkdmlzZWAgYW5kIHRoZSBgbWJpbmRgL2BzZXRfbWVtcG9saWN5YCBzeXN0ZW0gY2FsbHMuIFRoaXMgbWVhbnMgaXQgaGFzIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLCBzbyBpdCYjMzk7cyBhIGdvb2QgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3F1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgd2FzIG5vdCBjaGVja2VkIGJlZm9yZSBjYWxsaW5nIGBwbWRfZm9saW9gIG9yIHRyaWdnZXJpbmcgYSBgVk1fQlVHX09OYCBpbiBgbWFkdmlzZWAgYW5kIGBtZW1wb2xpY3lgIGNvZGUgcGF0aHMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBtYWR2aXNlLCBhbmQgbWVtb3J5IHBvbGljaWVzIHdoZW4gZGVhbGluZyB3aXRoIG5vbi1wcmVzZW50IFBNRHMgKGxpa2UgbWlncmF0aW9uIG9yIGRldmljZSBwcml2YXRlIGVudHJpZXMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgYG1hZHZpc2VgIGFuZCBgbWJpbmRgL2BzZXRfbWVtcG9saWN5YCBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3F1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgd2FzIG5vdCBjaGVja2VkIGJlZm9yZSBjYWxsaW5nIGBwbWRfZm9saW9gIG9yIHRyaWdnZXJpbmcgYSBgVk1fQlVHX09OYCBpbiBgbWFkdmlzZWAgYW5kIGBtZW1wb2xpY3lgIGNvZGUgcGF0aHMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBtYWR2aXNlLCBhbmQgbWVtb3J5IHBvbGljaWVzIHdoZW4gZGVhbGluZyB3aXRoIG5vbi1wcmVzZW50IFBNRHMgKGxpa2UgbWlncmF0aW9uIG9yIGRldmljZSBwcml2YXRlIGVudHJpZXMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgYG1hZHZpc2VgIGFuZCBgbWJpbmRgL2BzZXRfbWVtcG9saWN5YCBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQyOjIzLjA0MTk2ODI4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTYyNTcwNzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCIsXG4gICAgXCJOVU1BXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiLFxuICAgIFwicXVldWVfZm9saW9zX3B0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIHdhcyBub3QgY2hlY2tlZCBiZWZvcmUgY2FsbGluZyBgcG1kX2ZvbGlvYCBvciB0cmlnZ2VyaW5nIGEgYFZNX0JVR19PTmAgaW4gYG1hZHZpc2VgIGFuZCBgbWVtcG9saWN5YCBjb2RlIHBhdGhzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgbWFkdmlzZSwgYW5kIG1lbW9yeSBwb2xpY2llcyB3aGVuIGRlYWxpbmcgd2l0aCBub24tcHJlc2VudCBQTURzIChsaWtlIG1pZ3JhdGlvbiBvciBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIGBtYWR2aXNlYCBhbmQgYG1iaW5kYC9gc2V0X21lbXBvbGljeWAgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQyOjIzLjA0MTk3NDY1OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMTkwMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTdkZDk0NzI2YzFlMWUwMjExNzc3NjYzZTc3MjdkMzZiOTIxYjc5NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAwODo0MjoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDI1NjEyYWY3MmRjYTJlLi4wZGQ5ODMwYTdkMzI3MyAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC0yMzMxLDggKzIzMzEsOCBAQCBib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4tXFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0ICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xcbitcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xcbmluZGV4IDkyOTJmNjBiMTlhYTdjLi5jNTU3MDIzYzNmYWQ1NSAxMDA2NDRcXG4tLS0gYS9tbS9tYWR2aXNlLmNcXG4rKysgYi9tbS9tYWR2aXNlLmNcXG5AQCAtMzg4LDggKzM4OCw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuIFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4tXFx0XFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0XFx0IXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcXG4rXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XFxuIFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcXG5pbmRleCA5MTRmODE4NjNkYjVhNi4uNjlhMDBhMzI0ZWY1MzEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcXG4rKysgYi9tbS9tZW1wb2xpY3kuY1xcbkBAIC02NTQsMTIgKzY1NCwxNCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiB7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdHN0cnVjdCBxdWV1ZV9wYWdlcyAqcXAgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwbWQpO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KHBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpKSB7XFxuLVxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4rXFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChwbWR2YWwpKSkge1xcbitcXHRcXHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKVxcbitcXHRcXHRcXHRxcC1cXHUwMDNlbnJfZmFpbGVkKys7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTtcXG4rXFx0Zm9saW8gPSBwbWRfZm9saW8ocG1kdmFsKTtcXG4gXFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcXG4gXFx0XFx0d2Fsay1cXHUwMDNlYWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFO1xcbiBcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQyOjIzLjY0NTEwMzI1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxMDIyNTY0MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIixcbiAgICBcIk5VTUFcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gICAgXCJxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgd2FzIG5vdCBjaGVja2VkIGJlZm9yZSBjYWxsaW5nIGBwbWRfZm9saW9gIG9yIHRyaWdnZXJpbmcgYSBgVk1fQlVHX09OYCBpbiBgbWFkdmlzZWAgYW5kIGBtZW1wb2xpY3lgIGNvZGUgcGF0aHMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVsYXRlZCB0byB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBtYWR2aXNlLCBhbmQgbWVtb3J5IHBvbGljaWVzIHdoZW4gZGVhbGluZyB3aXRoIG5vbi1wcmVzZW50IFBNRHMgKGxpa2UgbWlncmF0aW9uIG9yIGRldmljZSBwcml2YXRlIGVudHJpZXMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgYG1hZHZpc2VgIGFuZCBgbWJpbmRgL2BzZXRfbWVtcG9saWN5YCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5N2RkOTQ3MjZjMWUxZTAyMTE3Nzc2NjNlNzcyN2QzNmI5MjFiNzk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDg6NDI6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMjU2MTJhZjcyZGNhMmUuLjBkZDk4MzBhN2QzMjczIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTIzMzEsOCArMjMzMSw4IEBAIGJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xuLVx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbitcdFx0Vk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCA5MjkyZjYwYjE5YWE3Yy4uYzU1NzAyM2MzZmFkNTUgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbisrKyBiL21tL21hZHZpc2UuY1xuQEAgLTM4OCw4ICszODgsOCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gXG4gXHRcdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xuLVx0XHRcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xuK1x0XHRcdFZNX1dBUk5fT05fT05DRSghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcbiBcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggOTE0ZjgxODYzZGI1YTYuLjY5YTAwYTMyNGVmNTMxIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbisrKyBiL21tL21lbXBvbGljeS5jXG5AQCAtNjU0LDEyICs2NTQsMTQgQEAgc3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbitcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XG4gXG4tXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbi1cdFx0cXAtXHUwMDNlbnJfZmFpbGVkKys7XG4rXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XG4rXHRcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZHZhbCkpXG4rXHRcdFx0cXAtXHUwMDNlbnJfZmFpbGVkKys7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xuK1x0Zm9saW8gPSBwbWRfZm9saW8ocG1kdmFsKTtcbiBcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XG4gXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFO1xuIFx0XHRyZXR1cm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MjoyMy42NDUxMDU3NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkyNDg3MzM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBpbiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgU3Vic3lzdGVtKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyB0aHJlZSBmaWxlcyB3aXRoaW4gdGhlIGBtbS9gIGRpcmVjdG9yeTogYGh1Z2VfbWVtb3J5LmNgLCBgbWFkdmlzZS5jYCwgYW5kIGBtZW1wb2xpY3kuY2AuIFNlZW1zIGxpa2UgYSBmb2N1c2VkIHNldCBvZiBtb2RpZmljYXRpb25zLlxuXG5JbiBgaHVnZV9tZW1vcnkuY2AgYW5kIGBtYWR2aXNlLmNgLCB0aGUgY29yZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGEgYFZNX0JVR19PTmAgd2l0aCBhIGBWTV9XQVJOX09OX09OQ0VgIGFuZCBhZGp1c3RpbmcgdGhlIGNvbmRpdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSB3YXMgbWFraW5nIGEgc3Ryb25nIGFzc2VydGlvbiBhYm91dCB0aGUgcHJlc2VuY2Ugb2YgYSBtaWdyYXRpb24gZW50cnkuIE5vdywgaXQncyByZXBsYWNlZCB3aXRoIGEgd2FybmluZyB0aGF0IHRyaWdnZXJzIG9ubHkgb25jZSwgYW5kIGluY2x1ZGVzIGEgY2hlY2sgZm9yIGRldmljZS1wcml2YXRlIGVudHJpZXMuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGVyZSBtaWdodCBoYXZlIGJlZW4gYSBzY2VuYXJpbyB3aGVyZSB0aGlzIGFzc2VydGlvbiB3YXMgZmlyaW5nIHNwdXJpb3VzbHksIHBlcmhhcHMgZHVlIHRvIGRldmljZS1zcGVjaWZpYyBtZW1vcnkgbWFwcGluZ3Mgb3IgYSBtb3JlIHBlcm1pc3NpdmUgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBjb25zdGl0dXRlcyBhIHZhbGlkIFBNRC4gVGhpcyBpcyBsaWtlbHkgYSBzYWZldHkgaW1wcm92ZW1lbnQsIHByZXZlbnRpbmcgcG90ZW50aWFsbHkgZGlzcnVwdGl2ZSBrZXJuZWwgcGFuaWNzIGluIGxlc3MgY3JpdGljYWwgc2l0dWF0aW9ucy5cblxuVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgY2hhbmdlIGluIGBtbS9tZW1wb2xpY3kuY2AuIEhlcmUsIHRoZSBgcXVldWVfZm9saW9zX3BtZGAgZnVuY3Rpb24gaXMgYmVpbmcgbW9kaWZpZWQuIFByZXZpb3VzbHksIGl0IGRpcmVjdGx5IGRlcmVmZXJlbmNlZCB0aGUgYHBtZGAgcG9pbnRlciAoYCpwbWRgKSBhbmQgY2hlY2tlZCBpZiBpdCB3YXMgYSBtaWdyYXRpb24gZW50cnkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHBtZHBfZ2V0KHBtZClgIGNhbGwsIGdldHMgdGhlIFBNRCB2YWx1ZSwgYW5kIGNoZWNrcyBpdHMgcHJlc2VuY2UgKmJlZm9yZSogY2hlY2tpbmcgaWYgaXQncyBhIG1pZ3JhdGlvbiBlbnRyeS4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQuIEl0IGFwcGVhcnMgdGhlcmUgd2FzIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSBgcG1kX2ZvbGlvKClgIGNvdWxkIGJlIGNhbGxlZCBvbiBhIFBNRCB0aGF0IHdhc24ndCBwcmVzZW50LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuZGVmaW5lZCBiZWhhdmlvciBvciBldmVuIGEga2VybmVsIGNyYXNoLiBCeSBhZGRpbmcgdGhpcyBgIXBtZF9wcmVzZW50KClgIGNoZWNrIGZpcnN0LCB0aGUgY29kZSBub3cgaGFuZGxlcyBjYXNlcyB3aGVyZSB0aGUgUE1EIG1pZ2h0IGJlIGEgc3dhcCBlbnRyeSwgZGV2aWNlLXByaXZhdGUsIG9yIG90aGVyd2lzZSBub3QgdmFsaWQgZm9yIGZvbGlvIHJldHJpZXZhbC4gSXQncyBhIGNsYXNzaWMgZGVmZW5zZS1pbi1kZXB0aCBhcHByb2FjaCwgcHJldmVudGluZyB0aGUgZnVuY3Rpb24gZnJvbSBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgcG9pbnRlci4gVGhpcyBpcyBhIGdvb2QgY2F0Y2gsIGFuZCBhIHNvbGlkIGV4YW1wbGUgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nIGluIGEgY29tcGxleCBhcmVhLlxuXG5MZXQncyBjaGVjayB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLCBgcXVldWVfZm9saW9zX3BtZGAsIHRvIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4gTGV0J3Mgc2VlIGhvdyBpdCdzIHVzZWQgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AgYW5kIGl0cyBjYWxsLWNoYWluLCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbnMgZW5hYmxlIHRoZSBmdW5jdGlvbmFsaXR5LiBGb2N1c2luZyBvbiBzeW1ib2xzIHN1Y2ggYXMgYHF1ZXVlX2ZvbGlvc19wbWRgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBJIGNhbiBzZWUgYSBjbGVhcmVyIHBpY3R1cmUgaW4gdGhpcyBhcmVhLiBPaCwgYHF1ZXVlX2ZvbGlvc19wbWRgIGlzIHN0YXRpYy4gVGhhdCBtZWFucyB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIGlzIGV2ZW4gbW9yZSBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDI6MzQuNTY5OTgwNjA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTcxNTQ4MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfZm9saW9zX3BtZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz02NDQ9c3RhdGljIGlubGluZSBib29sIHF1ZXVlX2ZvbGlvX3JlcXVpcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy02NTItXFxubW0vbWVtcG9saWN5LmM6NjUzOnN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxubW0vbWVtcG9saWN5LmMtNjU0LXtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTY4Nz1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNzAwLVxcdGlmIChwdGwpIHtcXG5tbS9tZW1wb2xpY3kuYzo3MDE6XFx0XFx0cXVldWVfZm9saW9zX3BtZChwbWQsIHdhbGspO1xcbm1tL21lbXBvbGljeS5jLTcwMi1cXHRcXHRzcGluX3VubG9jayhwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MjozNy4yNjcxNDM4NTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjU5NDg4NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucywgYHF1ZXVlX2ZvbGlvc19wbWRgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBpbnRlcmFjdCB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEl0J3MgY2xlYXIgdGhhdCBgcXVldWVfZm9saW9zX3BtZGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLCB3aGljaCBpcyBnb29kIHRvIGtub3csIHRoYXQgc2V0cyB0aGUgcmVsYXRpb25zaGlwIGNsZWFybHkuIEkga25vdyBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCByZXNpZGVzIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBsaXZlcyBpbiBgbW0vbWFkdmlzZS5jYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyBmb3IgdGhvc2UgZmlsZXMgdG8gZ2V0IGEgZ3JpcCBvbiBob3cgdG8gZWZmZWN0aXZlbHkgdGVzdCB0aGVtLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MuIEZyb20gbWVtb3J5LCBgbW0vaHVnZV9tZW1vcnkuY2AgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0U9eWAuIFNvIGlmIHRoYXQgaXNuJ3Qgc2V0LCB0aGVuIHRob3NlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IG5vbi1vcGVyYXRpb25hbC4gRm9yIGBtbS9tYWR2aXNlLmNgLCB0aGUgbGlua2FnZSB0byB0aGUgY29tcGlsYXRpb24gaXMgbGVzcyBjbGVhciB0byBtZS4gSSB0aGluayBpdCByZWxpZXMgb24gYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgSSBiZXR0ZXIgdmVyaWZ5IHRoYXQgZGlyZWN0bHkuIEknbGwgbmVlZCB0byBsb29rIGF0IGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZXhhY3QgY29uZmlnIG9wdGlvbnMgdGhhdCBnb3Zlcm4gaXRzIGluY2x1c2lvbiBpbiB0aGUgYnVpbGQuIEtub3dpbmcgdGhvc2UgcHJlcmVxdWlzaXRlcyBpcyBjcnVjaWFsIGZvciB0YXJnZXRlZCBhbmFseXNpcyBhbmQgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTgyLCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQyOjQ2LjUyNjYzNDMyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI5OTY5Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5Lm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDI6NDkuMjU2NjA2NjQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDIzNDk3MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYz0zMDEwPUVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2bV9zbV9tYXBfb3BzX2NyZWF0ZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmMtMzAxMi0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmM6MzAxMzogKiBkcm1fZ3B1dm1fbWFkdmlzZV9vcHNfY3JlYXRlKCkgLSBjcmVhdGVzIHRoZSBcXHUwMDI2ZHJtX2dwdXZhX29wcyB0byBzcGxpdFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYy0zMDE0LSAqIEBncHV2bTogdGhlIFxcdTAwMjZkcm1fZ3B1dm0gcmVwcmVzZW50aW5nIHRoZSBHUFUgVkEgc3BhY2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYz0zMDQxPXN0cnVjdCBkcm1fZ3B1dmFfb3BzICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmM6MzA0Mjpkcm1fZ3B1dm1fbWFkdmlzZV9vcHNfY3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYy0zMDQzLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRybV9ncHV2bV9tYXBfcmVxICpyZXEpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmMtMzA0Ni19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jOjMwNDc6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX21hZHZpc2Vfb3BzX2NyZWF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jLTMwNDgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYz03MzE9c3RhdGljIGludCBtc21faW9jdGxfZ2VtX21hZHZpc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jLTc1MC1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYzo3NTE6XFx0cmV0ID0gbXNtX2dlbV9tYWR2aXNlKG9iaiwgYXJncy1cXHUwMDNlbWFkdik7XFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMtNzUyLVxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTM1PXhlLXkgKz0geGVfYmIubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMTQ2LVxcdHhlX3ZtLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZToxNDc6XFx0eGVfdm1fbWFkdmlzZS5vIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMTQ4LVxcdHhlX3ZyYW0ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYz00Njk2PXN0YXRpYyBpbnQgeGVfdm1fYWxsb2Nfdm1hKHN0cnVjdCB4ZV92bSAqdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00NzExLVxcdGlmIChpc19tYWR2aXNlKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ3MTI6XFx0XFx0b3BzID0gZHJtX2dwdXZtX21hZHZpc2Vfb3BzX2NyZWF0ZShcXHUwMDI2dm0tXFx1MDAzZWdwdXZtLCBtYXBfcmVxKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00NzEzLVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQ3NTgtXFx0XFx0XFx0XFx0LypcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYzo0NzU5OlxcdFxcdFxcdFxcdCAqIEluIGNhc2Ugb2YgbWFkdmlzZSBvcHMgRFJNX0dQVVZBX09QX01BUCBpc1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQ3NjAtXFx0XFx0XFx0XFx0ICogYWx3YXlzIGFmdGVyIERSTV9HUFVWQV9PUF9SRU1BUCwgc28gZW5zdXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00Nzk1LVxcdFxcdFxcdHZtYSA9IGdwdXZhX3RvX3ZtYShvcC1cXHUwMDNlYmFzZS5yZW1hcC51bm1hcC1cXHUwMDNldmEpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ3OTY6XFx0XFx0XFx0LyogSW4gY2FzZSBvZiBtYWR2aXNlIG9wcyBTdG9yZSBhdHRyaWJ1dGVzIGZvciBSRU1BUCBVTk1BUFBFRFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTQ3OTctXFx0XFx0XFx0ICogVk1BLCBzbyB0aGV5IGNhbiBiZSBhc3NpZ25lZCB0byBuZXdseSBNQVAgY3JlYXRlZCB2bWEuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy00ODI2LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjQ4Mjc6ICogeGVfdm1fYWxsb2NfbWFkdmlzZV92bWEgLSBBbGxvY2F0ZSBWTUEncyB3aXRoIG1hZHZpc2Ugb3BzXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtNDgyOC0gKiBAdm06IFBvaW50ZXIgdG8gdGhlIHhlX3ZtIHN0cnVjdHVyZVxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmg9MTEwNT1zdHJ1Y3QgZHJtX2dwdXZhX29wcyAqXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmg6MTEwNjpkcm1fZ3B1dm1fbWFkdmlzZV9vcHNfY3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLFxcbmluY2x1ZGUvZHJtL2RybV9ncHV2bS5oLTExMDctXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZHJtX2dwdXZtX21hcF9yZXEgKnJlcSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zNDU9c3RydWN0IHRocHNpemUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzU4LSAqIENoZWNrIHdoZXRoZXIgVEhQcyBhcmUgZXhwbGljaXRseSBkaXNhYmxlZCBmb3IgdGhpcyBWTUEsIGZvciBleGFtcGxlLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjM1OTogKiB0aHJvdWdoIG1hZHZpc2Ugb3IgcHJjdGwuXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzYwLSAqL1xcbi0tXFxubW0vTWFrZWZpbGU9NzQ9aWZkZWYgQ09ORklHX01NVVxcbm1tL01ha2VmaWxlOjc1OlxcdG9iai0kKENPTkZJR19BRFZJU0VfU1lTQ0FMTFMpXFx0Kz0gbWFkdmlzZS5vXFxubW0vTWFrZWZpbGUtNzYtZW5kaWZcXG4tLVxcbm1tL21hZHZpc2UuYz0xMjQzPXN0YXRpYyBsb25nIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTEyNjUtI2lmZGVmIENPTkZJR182NEJJVFxcbm1tL21hZHZpc2UuYzoxMjY2Oi8qIERvZXMgdGhlIG1hZHZpc2Ugb3BlcmF0aW9uIHJlc3VsdCBpbiBkaXNjYXJkaW5nIG9mIG1hcHBlZCBkYXRhPyAqL1xcbm1tL21hZHZpc2UuYy0xMjY3LXN0YXRpYyBib29sIGlzX2Rpc2NhcmQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jPTIwMTI9U1lTQ0FMTF9ERUZJTkUzKG1hZHZpc2UsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbl9pbiwgaW50LCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0yMDE2LVxcbm1tL21hZHZpc2UuYzoyMDE3Oi8qIFBlcmZvcm0gYW4gbWFkdmlzZSBvcGVyYXRpb24gb3ZlciBhIHZlY3RvciBvZiBhZGRyZXNzZXMgYW5kIGxlbmd0aHMuICovXFxubW0vbWFkdmlzZS5jLTIwMTgtc3RhdGljIHNzaXplX3QgdmVjdG9yX21hZHZpc2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbm1tL21hZHZpc2UuYy0yMDQ3LVxcdFxcdC8qXFxubW0vbWFkdmlzZS5jOjIwNDg6XFx0XFx0ICogQW4gbWFkdmlzZSBvcGVyYXRpb24gaXMgYXR0ZW1wdGluZyB0byByZXN0YXJ0IHRoZSBzeXNjYWxsLFxcbm1tL21hZHZpc2UuYy0yMDQ5LVxcdFxcdCAqIGJ1dCB3ZSBjYW5ub3QgcHJvY2VlZCBhcyBpdCB3b3VsZCBub3QgYmUgY29ycmVjdCB0byByZXBlYXRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FybTY0L210ZS9jaGVja19rc21fb3B0aW9ucy5jPTgwPXN0YXRpYyB2b2lkIG10ZV9rc21fc2Nhbih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmMtOTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM6OTg6c3RhdGljIGludCBjaGVja19tYWR2aXNlX29wdGlvbnMoaW50IG1lbV90eXBlLCBpbnQgbW9kZSwgaW50IG1hcHBpbmcpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmMtOTkte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM9MTMxPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM6MTUzOlxcdGV2YWx1YXRlX3Rlc3QoY2hlY2tfbWFkdmlzZV9vcHRpb25zKFVTRV9NTUFQLCBNVEVfU1lOQ19FUlIsIE1BUF9QUklWQVRFKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTQtXFx0XFx0XFxcIkNoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3IgcHJpdmF0ZSBtYXBwaW5nLCBzeW5jIG1vZGUgYW5kIG1tYXAgbWVtb3J5XFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYzoxNTU6XFx0ZXZhbHVhdGVfdGVzdChjaGVja19tYWR2aXNlX29wdGlvbnMoVVNFX01NQVAsIE1URV9BU1lOQ19FUlIsIE1BUF9QUklWQVRFKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNTYtXFx0XFx0XFxcIkNoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3IgcHJpdmF0ZSBtYXBwaW5nLCBhc3luYyBtb2RlIGFuZCBtbWFwIG1lbW9yeVxcXFxuXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM6MTU3OlxcdGV2YWx1YXRlX3Rlc3QoY2hlY2tfbWFkdmlzZV9vcHRpb25zKFVTRV9NTUFQLCBNVEVfU1lOQ19FUlIsIE1BUF9TSEFSRUQpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FybTY0L210ZS9jaGVja19rc21fb3B0aW9ucy5jLTE1OC1cXHRcXHRcXFwiQ2hlY2sgS1NNIG10ZSBwYWdlIG1lcmdlIGZvciBzaGFyZWQgbWFwcGluZywgc3luYyBtb2RlIGFuZCBtbWFwIG1lbW9yeVxcXFxuXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYXJtNjQvbXRlL2NoZWNrX2tzbV9vcHRpb25zLmM6MTU5OlxcdGV2YWx1YXRlX3Rlc3QoY2hlY2tfbWFkdmlzZV9vcHRpb25zKFVTRV9NTUFQLCBNVEVfQVNZTkNfRVJSLCBNQVBfU0hBUkVEKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hcm02NC9tdGUvY2hlY2tfa3NtX29wdGlvbnMuYy0xNjAtXFx0XFx0XFxcIkNoZWNrIEtTTSBtdGUgcGFnZSBtZXJnZSBmb3Igc2hhcmVkIG1hcHBpbmcsIGFzeW5jIG1vZGUgYW5kIG1tYXAgbWVtb3J5XFxcXG5cXFwiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jPTQ3PWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jLTI4MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYzoyODI6XFx0LyogbWFkdmlzZSBvZiBzaGFyZWQgbWFwcGluZyBzaG91bGQgbm90IGZyZWUgYW55IHBhZ2VzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMtMjgzLVxcdGlmIChtYWR2aXNlKGFkZHIsIE5SX0hVR0VfUEFHRVMgKiBodWdlX3BhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYy0yODctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmM6Mjg4OlxcdC8qIG1hZHZpc2Ugb2YgcHJpdmF0ZSBtYXBwaW5nIHNob3VsZCBmcmVlIHByaXZhdGUgcGFnZXMgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYy0yODktXFx0aWYgKG1hZHZpc2UoYWRkcjIsIE5SX0hVR0VfUEFHRVMgKiBodWdlX3BhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jPTMzNT1zdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMtMzQ0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmM6MzQ1OlxcdG1hZHZpc2Uob25lX3BhZ2UsIGxlbiwgTUFEVl9IVUdFUEFHRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYy0zNDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQyOjUxLjc5ODk2MDQ5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU4OTcyMTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbXBvbGljeS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0PTM0MT1wYWdlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBub2RlIGxvY2FsIHRvIHdoZXJlIHRoZSB0YXNrIGlzIHJ1bm5pbmcsXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q6MzQyOmV4Y2VwdCBwZXJoYXBzIGFzIG1vZGlmaWVkIGJ5IHRoZSB0YXNrJ3MgTlVNQSBtZW1wb2xpY3kgb3IgY3B1c2V0XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3QtMzQzLWNvbmZpZ3VyYXRpb24sIHNvIGxvbmcgYXMgc3VmZmljaWVudCBmcmVlIG1lbW9yeSBwYWdlcyBhcmUgYXZhaWxhYmxlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q9MzUyPXRoZWlyIGNvbnRhaW5pbmcgdGFzaydzIG1lbW9yeSBzcHJlYWQgc2V0dGluZ3MuICBJZiBtZW1vcnkgc3ByZWFkaW5nXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q6MzUzOmlzIHR1cm5lZCBvZmYsIHRoZW4gdGhlIGN1cnJlbnRseSBzcGVjaWZpZWQgTlVNQSBtZW1wb2xpY3kgb25jZSBhZ2FpblxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0LTM1NC1hcHBsaWVzIHRvIG1lbW9yeSBwYWdlIGFsbG9jYXRpb25zLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MzgyPXBhZ2VzIG9uIHRoZSBwYXJlbnQgbm9kZSB3aWxsIGJlIGFkanVzdGVkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUsIGlmIHN1ZmZpY2llbnRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDozODM6cmVzb3VyY2VzIGV4aXN0LCByZWdhcmRsZXNzIG9mIHRoZSB0YXNrJ3MgbWVtcG9saWN5IG9yIGNwdXNldCBjb25zdHJhaW50cy5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0zODQtXFxuLS1cXG5tbS9NYWtlZmlsZT04NT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXFx0Kz0gaHVnZXRsYl92bWVtbWFwLm9cXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXFx0Kz0gbWVtcG9saWN5Lm9cXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVxcdCs9IHNwYXJzZS5vXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNTk9RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhnZXRfdGFza19wb2xpY3ksIFxcXCJrdm1cXFwiKTtcXG5tbS9tZW1wb2xpY3kuYy0zNjAtXFxubW0vbWVtcG9saWN5LmM6MzYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtcG9saWN5X29wZXJhdGlvbnMge1xcbm1tL21lbXBvbGljeS5jLTM2Mi1cXHRpbnQgKCpjcmVhdGUpKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZXMpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9NTY1PXZvaWQgbXBvbF9yZWJpbmRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIG5vZGVtYXNrX3QgKm5ldylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTU3Ny1cXG5tbS9tZW1wb2xpY3kuYzo1Nzg6c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1wb2xpY3lfb3BlcmF0aW9ucyBtcG9sX29wc1tNUE9MX01BWF0gPSB7XFxubW0vbWVtcG9saWN5LmMtNTc5LVxcdFtNUE9MX0RFRkFVTFRdID0ge1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjAyMT1zdHJ1Y3QgbWVtcG9saWN5ICpfX2dldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjAzNy0gKiBSZXR1cm5zIGVmZmVjdGl2ZSBwb2xpY3kgZm9yIGEgVk1BIGF0IHNwZWNpZmllZCBhZGRyZXNzLlxcbm1tL21lbXBvbGljeS5jOjIwMzg6ICogRmFsbHMgYmFjayB0byBjdXJyZW50LVxcdTAwM2VtZW1wb2xpY3kgb3Igc3lzdGVtIGRlZmF1bHQgcG9saWN5LCBhcyBuZWNlc3NhcnkuXFxubW0vbWVtcG9saWN5LmMtMjAzOS0gKiBTaGFyZWQgcG9saWNpZXMgW3Rob3NlIG1hcmtlZCBhcyBNUE9MX0ZfU0hBUkVEXSByZXF1aXJlIGFuIGV4dHJhIHJlZmVyZW5jZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0Mjo1NC4zNTc5Mzg3MjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ5MzQ4NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRXhhbWluaW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBtb2R1bGVzIGFuZCB0aGVpciByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCBgaHVnZV9tZW1vcnkub2AgaXMgdGllZCB0byBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiBgbWFkdmlzZS5vYCBuZWVkcyBgQURWSVNFX1NZU0NBTExTYCDigJMgcHJlZGljdGFibGUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgYG1hZHZpc2VgLiBgbWVtcG9saWN5Lm9gIGNsZWFybHkgcmVxdWlyZXMgYE5VTUFgLCBhcyBleHBlY3RlZC4gTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBzbGlnaHRseSB0cmlja3kuIEkgc2VlIGBERVZJQ0VfTUlHUkFUSU9OYCBsaXN0ZWQgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgdHJpZ2dlcnMgYSBmbGFnOyBkb2Vzbid0IGBERVZJQ0VfUFJJVkFURWAgb3IgYE1JR1JBVElPTmAgb3IgYm90aCBpbXBhY3QgZGV2aWNlIHByaXZhdGUgZW50cmllcz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBjb25uZWN0aW9uLiBCZXR0ZXIgdG8gdmVyaWZ5IHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgbW92ZSBvbi4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBib3RoIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGFuZCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgY29uZmlncy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDI6NTguNTA3Mjg5ODQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyMTE3Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTItLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTkzOiAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5NC0gKiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTE6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEyLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjMxND1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMzNC1cXHRcXHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFxcdTAwMjZcXHUwMDI2XFxubW0vaHVnZV9tZW1vcnkuYzoyMzM1OlxcdFxcdFxcdFxcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcXG5tbS9odWdlX21lbW9yeS5jLTIzMzYtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwOTY9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxNzgtXFx0XFx0ZGlydHkgPSBzb2Z0bGVhZl9pc19taWdyYXRpb25fZGlydHkoZW50cnkpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzE3OTpcXHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgqcG1kKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzE4MC1cXHRcXHRzb2Z0bGVhZl90IGVudHJ5O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMzE5LVxcdFxcdH1cXG5tbS9odWdlX21lbW9yeS5jOjMzMjA6XFx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob2xkX3BtZCkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTMzMjEtXFx0XFx0cHRlX3QgZW50cnk7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MzUzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMzkxLVxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tYWR2aXNlLmM6MzkyOlxcdFxcdFxcdFxcdFxcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcXG5tbS9tYWR2aXNlLmMtMzkzLVxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuLS1cXG5tbS9tZW1vcnkuYz02NTQ4PXN0YXRpYyB2bV9mYXVsdF90IF9faGFuZGxlX21tX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtNjYyMS1cXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHZtZi5vcmlnX3BtZCkpKSB7XFxubW0vbWVtb3J5LmM6NjYyMjpcXHRcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHZtZi5vcmlnX3BtZCkpXFxubW0vbWVtb3J5LmMtNjYyMy1cXHRcXHRcXHRyZXR1cm4gZG9faHVnZV9wbWRfZGV2aWNlX3ByaXZhdGUoXFx1MDAyNnZtZik7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODY9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTMtXFx0XFx0ICAgIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpIHx8XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjU0OlxcdFxcdCAgICBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU1LVxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjY1LVxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI2NjpcXHRcXHRcXHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkge1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2Ny1cXHRcXHRcXHRcXHRzb2Z0bGVhZl90IGVudHJ5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzowMC44OTk0MTMwMDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2NjY0MjQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGluIGBsaW51eC9sZWFmb3BzLmhgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBkZXZpY2UtcHJpdmF0ZSBtYXBwaW5ncywgc3BlY2lmaWNhbGx5IGF0IHRoZSBwYWdlIG1pZGRsZSBkaXJlY3RvcnkgKFBNRCkgbGV2ZWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gSSByZWNhbGwgdGhpcyBmaWxlIG9mdGVuIGNvbnRhaW5zIGxvdy1sZXZlbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3IgZ2VuZXJpYyBoZWxwZXIgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbi4gR2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZSwgSSBzdXNwZWN0IGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGlzIGxpa2VseSBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbi4gSXQncyBwdXJwb3NlLCBhcyB0aGUgbmFtZSBpbXBsaWVzLCBpcyBwcm9iYWJseSB0byBxdWlja2x5IGFuZCBlZmZpY2llbnRseSBkZXRlcm1pbmUgaWYgYSBnaXZlbiBQTUQgZW50cnkgcmVwcmVzZW50cyBtZW1vcnkgcHJpdmF0ZSB0byBhIGRldmljZSBkcml2ZXIsIGxpa2VseSB1c2VkIGZvciBtZW1vcnktbWFwcGVkIEkvTyBvciBkaXJlY3QgbWVtb3J5IGFjY2Vzcy4gSSBleHBlY3QgaXQgdG8gaW52b2x2ZSBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIGNoZWNrcyBhZ2FpbnN0IHJlc2VydmVkIGJpdHMgd2l0aGluIHRoZSBQTUQncyBmb3JtYXQuIExldCdzIHNlZSBpZiB0aGUgY29kZSBjb25maXJtcyBteSBhc3N1bXB0aW9ucyBhbmQgcmV2ZWFscyB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIGFsc28gaGF2ZSB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBiYXNlZCBvbiB0aGUgY29udGV4dCBvZiB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQzOjA2Ljg2NjA1NzU1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgxMDMyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU3ND1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5Mi0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1OTM6ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTk0LSAqIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjAzLSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwNDpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEwLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYxMTpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzowNi45NjQxNjYwMTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU0NTYwODU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZSB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24uIFRoaXMgaXNuJ3Qgc29tZXRoaW5nIEkgc3R1bWJsZSBhY3Jvc3MgZXZlcnkgZGF5LCBzbyBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCBteSBzdGFuZGFyZCBwcm9jZXNzLiBGaXJzdCwgbGV0J3Mgc2VlIGlmIHRoZSBmdW5jdGlvbiBpdHNlbGYgaGFzIGFueSBleHBsaWNpdCBgI2lmZGVmYCBjb25kaXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdC4gSSdsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgc2VhcmNoIHRvb2xzIGFuZCBtZXRob2QgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEknbGwgZm9jdXMgb24gdGhlIGtlcm5lbCBzb3VyY2UuIEknbGwgY2hlY2sgaXRzIGRlZmluaXRpb24gdG8gc2VlIGlmIEkgY2FuIGZpbmQgYW4gaW5jbHVkZSBmaWxlIG9yIG1hY3JvIHRoYXQgZ2l2ZXMgbWUgYW55IGhpbnRzLiBUaGVuIEknbGwgd29yayBmcm9tIHRoZXJlLiBUaGlzIHdpbGwgYmUgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoLCBJIHRoaW5rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQzOjEzLjUwOTc3NzM2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTkwOlxcdCNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpXFxuIDU5MTpcXHRcXG4gNTkyOlxcdC8qKlxcbiA1OTM6XFx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuIDU5NDpcXHQgKiBlbnRyeS5cXG4gNTk1OlxcdCAqIEBwbWQ6IFRoZSBQTUQgdG8gY2hlY2suXFxuIDU5NjpcXHQgKlxcbiA1OTc6XFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBQTUQgY29udGFpbnMgYSBzd2FwIGVudHJ5IHRoYXQgcmVwcmVzZW50cyBhIGRldmljZSBwcml2YXRlXFxuIDU5ODpcXHQgKiBwYWdlIG1hcHBpbmcuIFRoaXMgaXMgdXNlZCBmb3Igem9uZSBkZXZpY2UgcHJpdmF0ZSBwYWdlcyB0aGF0IGhhdmUgYmVlblxcbiA1OTk6XFx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxcbiA2MDA6XFx0ICogb3BlcmF0aW9ucy5cXG4gNjAxOlxcdCAqXFxuIDYwMjpcXHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcXG4gNjAzOlxcdCAqL1xcbiA2MDQ6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDYwNTpcXHR7XFxuIDYwNjpcXHRcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIDYwNzpcXHR9XFxuIDYwODpcXHRcXG4gNjA5OlxcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXFxuIDYxMDpcXHRcXG4gNjExOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbiA2MTI6XFx0e1xcbiA2MTM6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA2MTQ6XFx0fVxcbiA2MTU6XFx0XFxuIDYxNjpcXHQjZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUyAqL1xcbiA2MTc6XFx0XFxuIDYxODpcXHQvKipcXG4gNjE5OlxcdCAqIHBtZF9pc19taWdyYXRpb25fZW50cnkoKSAtIERvZXMgdGhpcyBQTUQgZW50cnkgZW5jb2RlIGEgbWlncmF0aW9uIGVudHJ5P1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzoxMy41MDk5NTAyMTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMDg2ODY5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgUE1EIEVudHJ5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIG1hcCBvZiB0aGUgUE1EIChQYWdlIE1hcCBEaXJlY3RvcnkpIGVudHJ5IGxhbmRzY2FwZSBpcyB0ZWxsaW5nIG1lIHRoYXQsIGZvciB0aGUgY29uZGl0aW9uIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIHRvIGV2YWx1YXRlIHRvIHRydWUsIEknbSBnb2luZyB0byBuZWVkIGJvdGggYENPTkZJR19aT05FX0RFVklDRWAgKmFuZCogYENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU2AgZGVmaW5lZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoYXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gc3BhY2UgY29uc2lkZXJhdGlvbi4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyBub3c6IFdoYXQgYWJvdXQgYHBtZF9pc19taWdyYXRpb25fZW50cnlgPyBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBhc3BlY3Qgd2hlbiBkZWFsaW5nIHdpdGggcGFnZSBtaWdyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhbmQgYXJjaGl0ZWN0dXJhbCBhc3N1bXB0aW9ucyBmb3IgaGFuZGxpbmcgZGV2aWNlLXByaXZhdGUgZW50cmllcyBoYXZlIGFueSBvdmVybGFwIG9yIGltcGxpY2F0aW9ucyBmb3IgZGV0ZWN0aW5nIG1pZ3JhdGlvbiBlbnRyaWVzLiBBcmUgdGhlcmUgcmVsYXRlZCBkZXBlbmRlbmNpZXMsIG9yIGFyZSB0aGVzZSBjb21wbGV0ZWx5IG9ydGhvZ29uYWwgY29uY2VybnM/IEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBoZXJlLCBvciBsYWNrIHRoZXJlb2YuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoZSBjb2RlYmFzZSBmb3IgYW55IHJlbGF0ZWQgYXJlYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzoyNC41MTg2Mzk2NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxOCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxODpcXHQvKipcXG4gNjE5OlxcdCAqIHBtZF9pc19taWdyYXRpb25fZW50cnkoKSAtIERvZXMgdGhpcyBQTUQgZW50cnkgZW5jb2RlIGEgbWlncmF0aW9uIGVudHJ5P1xcbiA2MjA6XFx0ICogQHBtZDogUE1EIGVudHJ5LlxcbiA2MjE6XFx0ICpcXG4gNjIyOlxcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIFBNRCBlbmNvZGVzIGEgbWlncmF0aW9uIGVudHJ5LCBvdGhlcndpc2UgZmFsc2UuXFxuIDYyMzpcXHQgKi9cXG4gNjI0OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZF90IHBtZClcXG4gNjI1OlxcdHtcXG4gNjI2OlxcdFxcdHJldHVybiBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIDYyNzpcXHR9XFxuIDYyODpcXHRcXG4gNjI5OlxcdC8qKlxcbiA2MzA6XFx0ICogc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KCkgLSBJcyB0aGUgc3BlY2lmaWVkIHNvZnRsZWFmIGVudHJ5IG9idGFpbmVkIGZyb21cXG4gNjMxOlxcdCAqIGEgUE1EIG9uZSB0aGF0IHdlIHN1cHBvcnQgYXQgUE1EIGxldmVsP1xcbiA2MzI6XFx0ICogQGVudHJ5OiBFbnRyeSB0byBjaGVjay5cXG4gNjMzOlxcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIHNvZnRsZWFmIGVudHJ5IGlzIHZhbGlkIGF0IFBNRCwgb3RoZXJ3aXNlIGZhbHNlLlxcbiA2MzQ6XFx0ICovXFxuIDYzNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXFxuIDYzNjpcXHR7XFxuIDYzNzpcXHRcXHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xcbiA2Mzg6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbiA2Mzk6XFx0XFx0XFx0c29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KTtcXG4gNjQwOlxcdH1cXG4gNjQxOlxcdFxcbiA2NDI6XFx0LyoqXFxuIDY0MzpcXHQgKiBwbWRfaXNfdmFsaWRfc29mdGxlYWYoKSAtIElzIHRoaXMgUE1EIGVudHJ5IGEgdmFsaWQgc29mdGxlYWYgZW50cnk/XFxuIDY0NDpcXHQgKiBAcG1kOiBQTUQgZW50cnkuXFxuIDY0NTpcXHQgKlxcbiA2NDY6XFx0ICogUE1EIGxlYWYgZW50cmllcyBhcmUgdmFsaWQgb25seSBpZiB0aGV5IGFyZSBkZXZpY2UgcHJpdmF0ZSBvciBtaWdyYXRpb25cXG4gNjQ3OlxcdCAqIGVudHJpZXMuIFRoaXMgZnVuY3Rpb24gYXNzZXJ0cyB0aGF0IGEgUE1EIGxlYWYgZW50cnkgaXMgdmFsaWQgaW4gdGhpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzoyNC41MTg3OTM3NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwOTY3Mjg5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqQ2hlY2tpbmcgdGhlIE1pZ3JhdGlvbiBFbnRyeSBMb2dpYyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHBtZF9pc19taWdyYXRpb25fZW50cnlgIHdvdWxkIGhhdmUgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgbGlrZWx5IGFuIGAjaWZkZWZgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBwcm90ZWN0aW5nIGl0LiBJdCBzZWVtcyB0byBiZSB1c2VkIHRvIGNoZWNrIGlmIGFuIGVudHJ5IGlzIGEgbWlncmF0aW9uIGVudHJ5LiBCdXQsIEkgZG9uJ3Qgc2VlIG9uZS4gVGhhdOKAmXMgb2RkLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBieSBsb29raW5nIGF0IGhvdyBgc29mdGxlYWZfaXNfbWlncmF0aW9uYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJdCdzIHBvc3NpYmxlIEknbSBtaXNzaW5nIHNvbWV0aGluZywgb3IgdGhhdCB0aGUgaW50ZW5kZWQgcHJvdGVjdGlvbiBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0MzozNy42MTU1MjUzNjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTU1NzQzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdGxlYWZfaXNfbWlncmF0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0yNjM2PXN0YXRpYyB2b2lkIG1ha2VfdWZmZF93cF9odWdlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNjUyLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyNjUzOlxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI2NTQtXFx0XFx0c2V0X2h1Z2VfcHRlX2F0KHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yMDg9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3N3YXAoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIxMy0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyMTQ6ICogc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSB3cml0YWJsZSBtaWdyYXRpb24gZW50cnk/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjE1LSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIxOS0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyMjA6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIyMS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yMjUtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjI2OiAqIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSByZWFkYWJsZSBtaWdyYXRpb24gZW50cnk/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjI3LSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIzMS0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyMzI6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjMzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTIzNy0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyMzg6ICogc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYW4gZXhjbHVzaXZlXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjM5LSAqIHJlYWRhYmxlIG1pZ3JhdGlvbiBlbnRyeT9cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI0NC0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNDU6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI0Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTAtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjUxOiAqIHNvZnRsZWFmX2lzX21pZ3JhdGlvbigpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgbWlncmF0aW9uIGVudHJ5P1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1Mi0gKiBAZW50cnk6IExlYWYgZW50cnkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTUtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjU2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNTktXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzYwOlxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2MS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQwOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzb2Z0bGVhZl90b19wYWdlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00MTMtXFx0Vk1fV0FSTl9PTl9PTkNFKCFzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDE0OlxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQxNS1cXHRcXHRzb2Z0bGVhZl9taWdyYXRpb25fc3luYyhlbnRyeSwgcGFnZV9mb2xpbyhwYWdlKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00MjY9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnNvZnRsZWFmX3RvX2ZvbGlvKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00MzAtXFx0Vk1fV0FSTl9PTl9PTkNFKCFzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDMxOlxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQzMi1cXHRcXHRzb2Z0bGVhZl9taWdyYXRpb25fc3luYyhlbnRyeSwgZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NDc2PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc191ZmZkX3dwX21hcmtlcihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDg2LS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ4NzogKiBzb2Z0bGVhZl9pc19taWdyYXRpb25feW91bmcoKSAtIERvZXMgdGhpcyBtaWdyYXRpb24gZW50cnkgY29udGFpbiBhbiBhY2Nlc3NlZFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ4OC0gKiBiaXQ/XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00OTYtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDk3OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb25feW91bmcoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00OTgte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ5OTpcXHRWTV9XQVJOX09OX09OQ0UoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUwMC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUwNy0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1MDg6ICogc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KCkgLSBEb2VzIHRoaXMgbWlncmF0aW9uIGVudHJ5IGNvbnRhaW4gYSBkaXJ0eSBiaXQ/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTA5LSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUxNS0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1MTY6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9kaXJ0eShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUxNy17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTE4OlxcdFZNX1dBUk5fT05fT05DRSghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTE5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTI3LVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjUyODpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uX3lvdW5nKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTI5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUzMi1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1MzM6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9kaXJ0eShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTUzNC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MjQ9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYyNS17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjI2OlxcdHJldHVybiBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjI3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MzgtXFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYzOTpcXHRcXHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTY0MC19XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9ODQ0PXN0YXRpYyB2b2lkIF9faW5pdCBzd2FwX21pZ3JhdGlvbl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg3MC1cXHRlbnRyeSA9IG1ha2Vfd3JpdGFibGVfbWlncmF0aW9uX2VudHJ5KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODcxOlxcdFdBUk5fT04oIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpO1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NzI6XFx0V0FSTl9PTighc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSk7XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg3My1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODc0LVxcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NzU6XFx0V0FSTl9PTighc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSk7XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjg3NjpcXHRXQVJOX09OKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpO1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NzctXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg3OC1cXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODc5OlxcdFdBUk5fT04oIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpO1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4ODA6XFx0V0FSTl9PTihzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKTtcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODgxLVxcdF9fQ2xlYXJQYWdlTG9ja2VkKHBhZ2UpO1xcbi0tXFxubW0vaG1tLmM9MjM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9obW0uYy0yOTAtXFxubW0vaG1tLmM6MjkxOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxubW0vaG1tLmMtMjkyLVxcdFxcdFxcdHB0ZV91bm1hcChwdGVwKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTgwOD1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODE4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTgxOTpcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSB8fFxcbm1tL2h1Z2VfbWVtb3J5LmM6MTgyMDpcXHQgICAgc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTgyMS1cXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjYwMD1zdGF0aWMgdm9pZCBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI2MDctXFx0Vk1fV0FSTl9PTighcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKCpwbWQpKTtcXG5tbS9odWdlX21lbW9yeS5jOjI2MDg6XFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTI2MDktXFx0XFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzA5Nj1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzE3My1cXG5tbS9odWdlX21lbW9yeS5jOjMxNzQ6XFx0XFx0d3JpdGUgPSBzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzE3NS1cXHRcXHRpZiAoUGFnZUFub24ocGFnZSkpXFxubW0vaHVnZV9tZW1vcnkuYzozMTc2OlxcdFxcdFxcdGFub25fZXhjbHVzaXZlID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jOjMxNzc6XFx0XFx0eW91bmcgPSBzb2Z0bGVhZl9pc19taWdyYXRpb25feW91bmcoZW50cnkpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzE3ODpcXHRcXHRkaXJ0eSA9IHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9kaXJ0eShlbnRyeSk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMTc5LVxcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTUwMjI9dm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUwNDAtXFx0XFx0cG1kZSA9IHBtZF9ta3NvZnRfZGlydHkocG1kZSk7XFxubW0vaHVnZV9tZW1vcnkuYzo1MDQxOlxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0Mi1cXHRcXHRwbWRlID0gcG1kX21rd3JpdGUocG1kZSwgdm1hKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0OS1cXG5tbS9odWdlX21lbW9yeS5jOjUwNTA6XFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb25feW91bmcoZW50cnkpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1MS1cXHRcXHRwbWRlID0gcG1kX21rb2xkKHBtZGUpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1Mi1cXHQvKiBOT1RFOiB0aGlzIG1heSBjb250YWluIHNldHRpbmcgc29mdC1kaXJ0eSBvbiBzb21lIGFyY2hzICovXFxubW0vaHVnZV9tZW1vcnkuYzo1MDUzOlxcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBzb2Z0bGVhZl9pc19taWdyYXRpb25fZGlydHkoZW50cnkpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA1NC1cXHRcXHRwbWRlID0gcG1kX21rZGlydHkocG1kZSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUwNzUtXFxubW0vaHVnZV9tZW1vcnkuYzo1MDc2OlxcdFxcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWQoZW50cnkpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA3Ny1cXHRcXHRcXHRybWFwX2ZsYWdzIHw9IFJNQVBfRVhDTFVTSVZFO1xcbi0tXFxubW0vaHVnZXRsYi5jPTQ5MDI9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQ5NzUtXFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KGRzdCwgYWRkciwgZHN0X3B0ZSwgZW50cnksIHN6KTtcXG5tbS9odWdldGxiLmM6NDk3NjpcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZikpKSB7XFxubW0vaHVnZXRsYi5jLTQ5NzctXFx0XFx0XFx0Ym9vbCB1ZmZkID0gcHRlX3N3cF91ZmZkKGVudHJ5KTtcXG5tbS9odWdldGxiLmMtNDk3OC1cXG5tbS9odWdldGxiLmM6NDk3OTpcXHRcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkKHNvZnRsZWFmKSBcXHUwMDI2XFx1MDAyNiBjb3cpIHtcXG5tbS9odWdldGxiLmMtNDk4MC1cXHRcXHRcXHRcXHQvKlxcbi0tXFxubW0vaHVnZXRsYi5jPTYwMTQ9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MDkwLVxcbm1tL2h1Z2V0bGIuYzo2MDkxOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWYpKSB7XFxubW0vaHVnZXRsYi5jLTYwOTItXFx0XFx0XFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYz02NDk4PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NTg0LVxcdFxcdFxcdC8qIE5vdGhpbmcgdG8gZG8uICovXFxubW0vaHVnZXRsYi5jOjY1ODU6XFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSkge1xcbm1tL2h1Z2V0bGIuYy02NTg2LVxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XFxuLS1cXG5tbS9odWdldGxiLmMtNjU4OC1cXG5tbS9odWdldGxiLmM6NjU4OTpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2V0bGIuYy02NTkwLVxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbi0tXFxubW0va3NtLmM9NjE2PXN0YXRpYyBpbnQgYnJlYWtfa3NtX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL2tzbS5jLTY0Ni1cXHRcXHRcXHQgKi9cXG5tbS9rc20uYzo2NDc6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpXFxubW0va3NtLmMtNjQ4LVxcdFxcdFxcdFxcdGZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTAwMT1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxubW0vbWVtb3J5LmMtMTAyMi1cXHRcXHRyc3NbTU1fU1dBUEVOVFNdKys7XFxubW0vbWVtb3J5LmM6MTAyMzpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy0xMDI0LVxcdFxcdGZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmMtMTAyNy1cXG5tbS9tZW1vcnkuYzoxMDI4OlxcdFxcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWQoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtb3J5LmMtMTAyOS1cXHRcXHRcXHRcXHRpc19jb3dfbWFwcGluZyh2bV9mbGFncykpIHtcXG4tLVxcbm1tL21lbW9yeS5jPTE4MTE9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTg0NS1cXHRcXHRzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChlbnRyeSwgbnIpO1xcbm1tL21lbW9yeS5jOjE4NDY6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtMTg0Ny1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmM9NDgyNT12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ4NDYtXFx0aWYgKHVubGlrZWx5KCFzb2Z0bGVhZl9pc19zd2FwKGVudHJ5KSkpIHtcXG5tbS9tZW1vcnkuYzo0ODQ3OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtNDg0OC1cXHRcXHRcXHRtaWdyYXRpb25fZW50cnlfd2FpdCh2bWEtXFx1MDAzZXZtX21tLCB2bWYtXFx1MDAzZXBtZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTY4Nz1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNzE5LVxcbm1tL21lbXBvbGljeS5jOjcyMDpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSlcXG5tbS9tZW1wb2xpY3kuYy03MjEtXFx0XFx0XFx0XFx0cXAtXFx1MDAzZW5yX2ZhaWxlZCsrO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Nzc0PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTc5MC1cXG5tbS9tZW1wb2xpY3kuYzo3OTE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpKVxcbm1tL21lbXBvbGljeS5jLTc5Mi1cXHRcXHRcXHRcXHRxcC1cXHUwMDNlbnJfZmFpbGVkKys7XFxuLS1cXG5tbS9taWdyYXRlLmM9MzUxPXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMzkxLVxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUob2xkX3B0ZSk7XFxubW0vbWlncmF0ZS5jOjM5MjpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbl95b3VuZyhlbnRyeSkpXFxubW0vbWlncmF0ZS5jLTM5My1cXHRcXHRcXHRwdGUgPSBwdGVfbWtvbGQocHRlKTtcXG5tbS9taWdyYXRlLmM6Mzk0OlxcdFxcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBzb2Z0bGVhZl9pc19taWdyYXRpb25fZGlydHkoZW50cnkpKVxcbm1tL21pZ3JhdGUuYy0zOTUtXFx0XFx0XFx0cHRlID0gcHRlX21rZGlydHkocHRlKTtcXG4tLVxcbm1tL21pZ3JhdGUuYy00MDAtXFxubW0vbWlncmF0ZS5jOjQwMTpcXHRcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlLmMtNDAyLVxcdFxcdFxcdHB0ZSA9IHB0ZV9ta3dyaXRlKHB0ZSwgdm1hKTtcXG4tLVxcbm1tL21pZ3JhdGUuYy00MDktXFxubW0vbWlncmF0ZS5jOjQxMDpcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWQoZW50cnkpKVxcbm1tL21pZ3JhdGUuYy00MTEtXFx0XFx0XFx0cm1hcF9mbGFncyB8PSBSTUFQX0VYQ0xVU0lWRTtcXG4tLVxcbm1tL21pZ3JhdGUuYz00OTQ9dm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL21pZ3JhdGUuYy01MTItXFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xcbm1tL21pZ3JhdGUuYzo1MTM6XFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxcbm1tL21pZ3JhdGUuYy01MTQtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9taWdyYXRlLmM9NTI5PXZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXRfaHVnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG4tLVxcbm1tL21pZ3JhdGUuYy01NDItXFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xcbm1tL21pZ3JhdGUuYzo1NDM6XFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcXG5tbS9taWdyYXRlLmMtNTQ0LVxcdFxcdC8qXFxuLS1cXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbXByb3RlY3QuYy0yMjItXFxubW0vbXByb3RlY3QuYzoyMjM6XFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpIHtcXG5tbS9tcHJvdGVjdC5jLTIyNC1cXHRcXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE4Mj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfY2FjaGVkX3dyaXRhYmxlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg0LVxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgfHxcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTg1OlxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE4Ni19XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMjAtXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTIxOlxcdFxcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMjItXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xNTAxPXN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNjgzLVxcbm1tL3VzZXJmYXVsdGZkLmM6MTY4NDpcXHRcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSkge1xcbm1tL3VzZXJmYXVsdGZkLmMtMTY4NS1cXHRcXHRcXHRwdGVfdW5tYXAoc3JjX3B0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQzOjM5Ljk3MTEwNDE3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDczNDM3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBgc29mdGxlYWZfaXNfbWlncmF0aW9uYCBJbmNsdXNpb24qKlxuXG5Pa2F5LCBzbyBgc29mdGxlYWZfaXNfbWlncmF0aW9uYCBpcyB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAgYXMgYWx3YXlzIGF2YWlsYWJsZS4gUmlnaHQsIHNvIHRoaXMgcGF0Y2ggYWZmZWN0cyBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9tYWR2aXNlLmNgLCBhbmQgYG1tL21lbXBvbGljeS5jYC4gTGV0J3MgYnJlYWsgaXQgZG93bi5cblxuRmlyc3QsIEkgc2VlIHRoZSBtb2RpZmljYXRpb24gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGludm9sdmVzIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLiBUaGVuIHRoZXJlJ3MgdGhlIGNoYW5nZSBpbiBgbW0vbWFkdmlzZS5jYCByZWxhdGVkIHRvIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBGaW5hbGx5LCBgbW0vbWVtcG9saWN5LmNgIG1vZGlmaWVzIGBxdWV1ZV9mb2xpb3NfcG1kYC4gTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24sIGBxdWV1ZV9mb2xpb3NfcG1kYC5cblxuYGBgY1xuc3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbntcblx0c3RydWN0IGZvbGlvICpmb2xpbztcblx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcblx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocG1kKTtcblxuXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XG5cdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kdmFsKSlcblx0XHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCsrO1xuXHRcdHJldHVybjtcblx0fVxuXHRmb2xpbyA9IHBtZF9mb2xpbyhwbWR2YWwpO1xuXHRpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkge1xuXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFO1xuXHRcdHJldHVybjtcblx0fVxuLi4uXG5gYGBcblxuQWgsIEkgc2VlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFByZXZpb3VzbHksIGlmIHRoZSBQTUQgd2Fzbid0IHByZXNlbnQsIHRoZSBjb2RlIGp1c3QgY2hlY2tlZCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKWAuIEhvd2V2ZXIsIGlmIGl0IHdhc24ndCBhIG1pZ3JhdGlvbiBlbnRyeSBhbmQgd2Fzbid0IHByZXNlbnQg4oCTIHNheSBhIHN3YXAgZW50cnksIG9yIGEgZGV2aWNlLXByaXZhdGUgZW50cnkg4oCTIHRoZSBjb2RlIHdvdWxkIGhhdmUgY2FsbGVkIGBwbWRfZm9saW9gIG9uIGEgbm9uLXByZXNlbnQgUE1ELiBUaGF0IGNvdWxkIGxlYWQgdG8gYSBuYXN0eSBjcmFzaCwgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBjb21wbGV0ZWx5IHdyb25nIGRhdGEuIFRoZXkndmUgZml4ZWQgdGhpcyBub3csIGJ1dCBpdCBpcyBjbGVhciB0aGF0IHRoaXMgbmVlZHMgYSBsb3Qgb2YgdGVzdGluZy5cblxuU28gdGhlIHBvdGVudGlhbCBmb3IgdW5kZWZpbmVkIGJlaGF2aW9yIGhlcmUgaXMgY29uY2VybmluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc3BvdCB3b3J0aCBmdXp6aW5nLiBJJ2xsIGZvY3VzIG9uIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYW5kIHNpbmNlIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCwgSSBzaG91bGQgZm9jdXMgb24gdGhlIGxhdHRlciB0b28uIExldCdzIHNlZSBob3cgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGxvb2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA1OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0Mzo0OC40NDQ1NDQ3NTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTYzMTY3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfZm9saW9zX3B0ZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz02NTM9c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY4MC0gKlxcbm1tL21lbXBvbGljeS5jOjY4MTogKiBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKCkgaGFzIHR3byBwb3NzaWJsZSByZXR1cm4gdmFsdWVzOlxcbm1tL21lbXBvbGljeS5jLTY4Mi0gKiAwIC0gY29udGludWUgd2Fsa2luZyB0byBzY2FuIGZvciBtb3JlLCBldmVuIGlmIGFuIGV4aXN0aW5nIGZvbGlvIG9uIHRoZVxcbi0tXFxubW0vbWVtcG9saWN5LmMtNjg2LSAqL1xcbm1tL21lbXBvbGljeS5jOjY4NzpzdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21lbXBvbGljeS5jLTY4OC1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz05NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc193YWxrX29wcyA9IHtcXG5tbS9tZW1wb2xpY3kuYy05NTUtXFx0Lmh1Z2V0bGJfZW50cnlcXHRcXHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxcbm1tL21lbXBvbGljeS5jOjk1NjpcXHQucG1kX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlLFxcbm1tL21lbXBvbGljeS5jLTk1Ny1cXHQudGVzdF93YWxrXFx0XFx0PSBxdWV1ZV9wYWdlc190ZXN0X3dhbGssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz05NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc19sb2NrX3ZtYV93YWxrX29wcyA9IHtcXG5tbS9tZW1wb2xpY3kuYy05NjItXFx0Lmh1Z2V0bGJfZW50cnlcXHRcXHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxcbm1tL21lbXBvbGljeS5jOjk2MzpcXHQucG1kX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlLFxcbm1tL21lbXBvbGljeS5jLTk2NC1cXHQudGVzdF93YWxrXFx0XFx0PSBxdWV1ZV9wYWdlc190ZXN0X3dhbGssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQzOjUwLjYwMDg3Mzc1M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDE2NzEyODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBOYXZpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbnRleHRzKipcblxuT2theSwgc28gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGlzIGRlZmluaXRlbHkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBgcG1kX2VudHJ5YCB3aXRoaW4gYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVzc2VudGlhbCwgYXMgSSd2ZSBzZWVuIGl0cyByb2xlIGluIGBodWdlX21lbW9yeS5jYCBhbmQgc3BlY2lmaWNhbGx5IHdpdGggYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAuIFRoZW4gdGhlcmUncyBgQ09ORklHX0FEVklTRV9TWVNDQUxMU2AsIGNydWNpYWwgZm9yIGBtYWR2aXNlLmNgLCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19OVU1BYCB3aGljaCBwbGF5cyBhIGtleSByb2xlIHdpdGhpbiBgbWVtcG9saWN5LmNgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24sIGFuZCBJIHNlZSB0aGF0IGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTYCAqbWlnaHQqIGJlIHJlbGV2YW50IGZvciBpdHMgYmVoYXZpb3IuIFRoZSBjb2RlIGdldHMgY29tcGlsZWQgZXZlbiBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCwgYnV0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBIb3dldmVyLCB0byBhY3R1YWxseSAqdGVzdCogdGhlIGRldmljZSBwcml2YXRlIGVudHJ5IHBhdGgsIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGEgbXVzdC4gTXkgaHVuY2ggaXMgdGhhdCB0aGUgb3JpZ2luYWwgYnVnIGhhZCB0byBkbyB3aXRoIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGVycm9uZW91c2x5IHJldHVybmluZyB0cnVlLCBjYXVzaW5nIHNvbWUgZmFpbHVyZSwgb3IgaXQgd2FzIGEgd2FybmluZyB0aGF0IG5lZWRlZCB0byBiZSBhZGRyZXNzZWQuXG5cbkFoLCBoZXJlJ3MgdGhlIGNydWNpYWwgcGF0Y2ggc25pcHBldDpcblxuYGBgY1xuLVx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbitcdFx0Vk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcbmBgYFxuXG5UaGlzIGlzIGl0ISBCZWZvcmUsIGl0IHdhcyBhIGBWTV9CVUdfT05gIGlmIGl0IHdhc24ndCBhIG1pZ3JhdGlvbiBlbnRyeS4gTm93LCBpdCdzIGEgYFZNX1dBUk5fT05fT05DRWAgaWYgaXQgaXMgbmVpdGhlciBhIG1pZ3JhdGlvbiBlbnRyeSBub3IgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeS4gVGhlcmVmb3JlIHRoZSBvcmlnaW5hbCBidWcgbGlrZWx5IG9yaWdpbmF0ZWQgZnJvbSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzIHNvbWVob3cgdHJpZ2dlcmluZyB0aGF0IGBWTV9CVUdfT05gLiBUbyB0cmlnZ2VyIHRoZSBkZXZpY2UgcHJpdmF0ZSBlbnRyeSBwYXRoIHJlbGlhYmx5LCBJIHdvdWxkIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBKdXN0IHRvIGNvbmZpcm0sIEkgc2hvdWxkIGludmVzdGlnYXRlIGlmIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjM2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQzOjU5LjYxNzU4ODg5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ1MzEzNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIyMz1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjI3LVxcbm1tL0tjb25maWc6MTIyODpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMjktXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDM6NTkuOTYyOTA2NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA4MDM3MjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc2l0dWF0aW9uLiBXZSdyZSBkZWZpbml0ZWx5IGRlYWxpbmcgd2l0aCBgWk9ORV9ERVZJQ0VgLiBUaGF0J3MgYSBnaXZlbi4gQWxzbywgSSdtIHNlZWluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgQURWSVNFX1NZU0NBTExTYCwgYW5kIGBOVU1BYCBpbiB0aGUgbWl4LiBMZXQncyBnZXQgdGhpcyBzdHJhaWdodDogdGhlc2UgYXJlIG15IGZvY3VzIHBvaW50cy5cblxuU28sIGxldCBtZSBzdW1tYXJpemUgbXkgZm9jdXMuIFRoZSBrZXkgc3ltYm9scyB0aGF0IGFyZSBjYXRjaGluZyBteSBhdHRlbnRpb24gYXJlOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGFuZCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAuIFRoZXNlIHNlZW0gY2VudHJhbCB0byB0aGUgYmVoYXZpb3IuXG5cbkFuZCwgb2YgY291cnNlLCB0aGVzZSBFbmFibGVDb25maWdzIGFyZSBhbHNvIGltcG9ydGFudDogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYEFEVklTRV9TWVNDQUxMU2AsIGBOVU1BYCwgYW5kIGBaT05FX0RFVklDRWAuIFRoZXNlIGVuYWJsZSBkaWZmZXJlbnQgZmVhdHVyZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgdGhpbmsgbW9yZSBjcml0aWNhbGx5IGFib3V0IGl0LiBBcmUgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIHN0YXRpYyBvciBleHBvcnRlZD8gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2Ugc3ltYm9scyBhcmUgY29taW5nIGZyb20sIGFuZCB0aGUgc2NvcGUgb2YgdGhlc2Ugc3ltYm9scywgc28gSSBjYW4gbW9yZSBjbGVhcmx5IGRldGVybWluZSBob3cgdGhpcyBhbGwgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjgyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQ0OjA2LjE3MDk0NTc5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNzk4ODI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc9dm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOS1cXHRcXHRcXHQgICBwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIyMzQ9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIzMTMtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyMzE0OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMxNS1cXHRcXHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcXG4tLVxcbm1tL21hZHZpc2UuYz02NTI9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21hZHZpc2UuYy02NjgtXFx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKVxcbm1tL21hZHZpc2UuYzo2Njk6XFx0XFx0aWYgKG1hZHZpc2VfZnJlZV9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0KSlcXG5tbS9tYWR2aXNlLmMtNjcwLVxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDowOC40ODg5Mzk3MjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU5MzUyODIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIHRoZSBrZXJuZWwuIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGlzIGF2YWlsYWJsZSB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGJlY2F1c2UgaXQncyBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIC0gSSdtIGFzc3VtaW5nIGl0J3MgbWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBrZXJuZWwgY29tcG9uZW50cy4gSXQncyBub3QgYEVYUE9SVF9TWU1CT0xgLCBidXQgaXQncyBub3QgYHN0YXRpY2AsIHNvIGl0J3MgdmlzaWJsZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBOb3csIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBkZWZpbmVkIHdpdGhpbiBgbW0vbWFkdmlzZS5jYC4gVGhpcyBtZWFucyBpdCdzIGludGVybmFsIHRvIHRoYXQgcGFydGljdWxhciBmaWxlIGFuZCBub3QgbWVhbnQgZm9yIGV4dGVybmFsIHVzZS4gU2ltaWxhcmx5LCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgaXMgYWxzbyBzdGF0aWMsIHRoaXMgdGltZSB3aXRoaW4gYG1tL21lbXBvbGljeS5jYCwgd2hpY2ggdGVsbHMgbWUgaXQgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIG9ubHkgd2l0aGluIHRoZSBtZW1vcnkgcG9saWN5IG1hbmFnZW1lbnQgY29kZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIHRoZSB1c2FnZSBvZiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCB0byB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBtYWR2aXNlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQ0OjE4LjA4MjQ3MTg4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTIzNTE4OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MzQzPXN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfZm9saW9fcHRlX2JhdGNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMzUyLVxcbm1tL21hZHZpc2UuYzozNTM6c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG5tbS9tYWR2aXNlLmMtMzU0LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tYWR2aXNlLmM9NTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcXG5tbS9tYWR2aXNlLmM6NTY5OlxcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXFxubW0vbWFkdmlzZS5jLTU3MC1cXHQud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDQ6MjIuMDA1OTk2Nzg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDM0NzgzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGEgY2FsbGJhY2sgcmVsYXRlZCB0byBgcG1kX2VudHJ5YCwgZ290IGl0LiBUaGUgZ2lzdCBpcywgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBidWcuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB3ZSB3ZXJlbid0IGNoZWNraW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlZm9yZSBjYWxsaW5nIGBwbWRfZm9saW9gIG9yIHRyaWdnZXJpbmcgdGhhdCBgVk1fQlVHX09OYCBjYWxsIHdpdGhpbiB0aGUgYG1hZHZpc2VgIGFuZCBtZW1vcnkgcG9saWN5IGNvZGUgcGF0aHMuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYWZmZWN0aW5nIGhvdyB3ZSBoYW5kbGUgbm9uLXByZXNlbnQgUE1Ecywgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgaW1wYWN0aW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGBtYWR2aXNlYCwgYW5kIGBtYmluZGAvYHNldF9tZW1wb2xpY3lgIHN5c2NhbGxzIOKAkyBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXRpZXMsIGVzcGVjaWFsbHkgaW4gbW9kZXJuIHN5c3RlbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBtYWR2aXNlYCBhbmQgYG1iaW5kYC9gc2V0X21lbXBvbGljeWAgc3lzY2FsbHMg4oCTIHZlcnkgaW1wb3J0YW50IHRvIGNvbnNpZGVyIHdoZW4gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGltcGFjdHMuXG5cblRoZSBwcmVzZW5jZSBvZiBgV29ydGhGdXp6aW5nOiB0cnVlYCB0ZWxscyBtZSB0aGlzIGlzIHJpcGUgZm9yIHRlc3RpbmcsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgaW4gdGhlc2UgbWVtb3J5LWludGVuc2l2ZSBhcmVhcy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBxdWl0ZSB0ZWxsaW5nOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGFuZCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgYXJlIGFsbCBhcmVhcyB3aGVyZSB0aGlzIG92ZXJzaWdodCBjb3VsZCBtYW5pZmVzdC4gVGhhdCdzIGEgZ29vZCBzZXQgdG8gZm9jdXMgb24uIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGUgc2NvcGUg4oCTIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBBRFZJU0VfU1lTQ0FMTFNgLCBgTlVNQWAsIGFuZCBgWk9ORV9ERVZJQ0VgIGFsbCBwb2ludCB0byBhZHZhbmNlZCBtZW1vcnkgbWFuYWdlbWVudCBzY2VuYXJpb3MuXG5cbk5vdywgbGV0J3Mgc2VlLi4uIEknbSBhIGJpdCBjdXJpb3VzLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgd2UgbWlnaHQgYmUgbWlzc2luZz8gSG1tbSwgbGV0J3Mgc2VlLi4uIHdoYXQgYWJvdXQgYENPTkZJR19ERVZJQ0VfUFJJVkFURWA/IFllYWgsIGxldCdzIHNlYXJjaCBmb3IgdGhhdC4gVGhhdCB3b3VsZCBjZXJ0YWlubHkgaW5mbHVlbmNlIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIE5lZWQgdG8gY2hlY2sgaWYgaXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMzEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDQ6MzIuMDQwNzgyNjAxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzM3NjAwMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjU0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI1Ni1cXG5tbS9LY29uZmlnOjEyNTc6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjU4LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDQ6MzIuNDc0NTQ3ODQ0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzQ1NTg0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGVidWdnaW5nIGEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYERFVklDRV9QUklWQVRFYCB0aGluZyBhbmQgaXQncyBmbGFnZ2VkIGFzIGEgY29uZmlnIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIHJlbGV2YW5jZSwgaWYgYW55LCB0byB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRlbHZlIGludG8gaG93IHRoZXNlIHR3byBjb21wb25lbnRzIGludGVyYWN0LiBJcyB0aGlzIGNvbmZpZyBvcHRpb24gKmFjdHVhbGx5KiB1c2VkIGJ5IHRoYXQgcGFydGljdWxhciBmdW5jdGlvbj8gVGhpcyBpcyB0aGUgY29yZSBxdWVzdGlvbiB0byBhbnN3ZXIgaGVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgaW5jbHVkZXMgdGhlIHVzZSBvZiBgREVWSUNFX1BSSVZBVEVgIHdoZW4gY2FsbGluZyBvciB3aXRoaW4gdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4OTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDozNi4xMDkxMDg5NzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTg0NzUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTc0PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfdWZmZF9tYXJrZXIocHRlX3QgcHRlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkyLS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU5MzogKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXBcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTQtICogZW50cnkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDMtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA0OnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTAtXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjExOnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA4OjQ0OjM2LjIzMDk2MjY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjM0NTk4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmV2aXNpdGluZyBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgKipcblxuQWxyaWdodCwgdGltZSB0byBjaXJjbGUgYmFjayB0byBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBsZWFmIG9wZXJhdGlvbnMgYXJlIGN1cnJlbnRseSBoYW5kbGVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSByZWNlbnQgZGlzY3Vzc2lvbnMgb24gW2luc2VydCByZWxldmFudCBjb250ZXh0LCBlLmcuLCB0aGUgcHJvcG9zZWQgb3B0aW1pemF0aW9uIG9yIHRoZSBzcGVjaWZpYyBpc3N1ZSB1bmRlciBpbnZlc3RpZ2F0aW9uXS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGVzZSBsb3ctbGV2ZWwgcm91dGluZXMgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIG1hbmFnZW1lbnQgc2NoZW1lLiBUaGlzIGZpbGUgaXMgdGhlIGxpbmNocGluLCBhbmQgYSBzdWJ0bGUgZGV0YWlsIG92ZXJsb29rZWQgaGVyZSBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGRvd25zdHJlYW0gY29uc2VxdWVuY2VzLiBMZXQgbWUgcmUtZXhhbWluZSB0aGUgbWFjcm9zIGZvciBgYWRkX3RvX3BhZ2VfY2FjaGVgLCBgcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZWAsIGFuZCB0aGUgYXNzb2NpYXRlZCBsb2NrIHNlbWFudGljcywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHRoZWlyIGF0b21pY2l0eSBhbmQgb3JkZXJpbmcgZ3VhcmFudGVlcyBpbiB0aGUgY29udGV4dCBvZiBbbWVudGlvbiBzcGVjaWZpYyBhcmVhcyBvZiBjb25jZXJuLCBlLmcuLCBjb25jdXJyZW50IGFjY2VzcywgTlVNQSBhcmNoaXRlY3R1cmVzLCBvciBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlc10uIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBzdGlsbCB0aGUgb3B0aW1hbCBhcHByb2FjaCBvciBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNjcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo0MC43NTQ0MjQ0NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTg1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg1OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA1ODY6XFx0XFxuIDU4NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDU4ODpcXHR9XFxuIDU4OTpcXHRcXG4gNTkwOlxcdCNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpXFxuIDU5MTpcXHRcXG4gNTkyOlxcdC8qKlxcbiA1OTM6XFx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuIDU5NDpcXHQgKiBlbnRyeS5cXG4gNTk1OlxcdCAqIEBwbWQ6IFRoZSBQTUQgdG8gY2hlY2suXFxuIDU5NjpcXHQgKlxcbiA1OTc6XFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBQTUQgY29udGFpbnMgYSBzd2FwIGVudHJ5IHRoYXQgcmVwcmVzZW50cyBhIGRldmljZSBwcml2YXRlXFxuIDU5ODpcXHQgKiBwYWdlIG1hcHBpbmcuIFRoaXMgaXMgdXNlZCBmb3Igem9uZSBkZXZpY2UgcHJpdmF0ZSBwYWdlcyB0aGF0IGhhdmUgYmVlblxcbiA1OTk6XFx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxcbiA2MDA6XFx0ICogb3BlcmF0aW9ucy5cXG4gNjAxOlxcdCAqXFxuIDYwMjpcXHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcXG4gNjAzOlxcdCAqL1xcbiA2MDQ6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDYwNTpcXHR7XFxuIDYwNjpcXHRcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIDYwNzpcXHR9XFxuIDYwODpcXHRcXG4gNjA5OlxcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXFxuIDYxMDpcXHRcXG4gNjExOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbiA2MTI6XFx0e1xcbiA2MTM6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA2MTQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo0MC43NTQ1MjExNjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NjMxMTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgRGV2aWNlIENvbmZpZ3VyYXRpb24gTWF6ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyB0aGUga2V5IGZsYWcgSSBuZWVkIHRvIGZvY3VzIG9uLiBUaGF0IGZlZWxzIHJpZ2h0LCBidXQgaG9sZCBvbiBhIHNlY29uZC4uLiBteSBleHBlcmllbmNlIGlzIHRlbGxpbmcgbWUgSSBuZWVkIHRvIGJlIGNhdXRpb3VzIGFib3V0IGFzc3VtaW5nIHNvbWV0aGluZyBsaWtlIHRoYXQgZGlyZWN0bHkuIFRoZXJlJ3MgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgIG1pZ2h0IGJlIGNvbnRpbmdlbnQgb24gdGhlIGBERVZJQ0VfUFJJVkFURWAgc2V0dGluZy4gSXQgd291bGQgYmUgYSBzaWxseSBvdmVyc2lnaHQgdG8gb3Zlcmxvb2sgdGhhdCBkZXBlbmRlbmN5LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIGVuc3VyZSBJJ20gYWNjb3VudGluZyBmb3IgYWxsIHRoZSBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucyBvZiBlbmFibGluZyBgQ09ORklHX1pPTkVfREVWSUNFYCB3aXRoIHJlZ2FyZCB0byBkZXZpY2UgcHJpdmFjeS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgcXVpY2tseSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA5OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDQ6NDQuOTEwODM2OTE0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUzNTkzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MjU2PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2OC0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNjk6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjcwLSAqIHdyaXRhYmxlIGVudHJ5P1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc1LSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI3NjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjgxLS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4MjogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjgzLSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4Ni0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODc6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjg4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTM1NT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaGFzX3Bmbihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYxLVxcdFxcdHJldHVybiB0cnVlO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM2MjpcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYwND1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwNjpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MzctXFx0LyogT25seSBkZXZpY2UgcHJpdmF0ZSwgbWlncmF0aW9uIGVudHJpZXMgdmFsaWQgZm9yIFBNRC4gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2Mzg6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzOS1cXHRcXHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo0NS4zNjYyMDEzNzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIzOTY4NDY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgU2lnbmlmaWNhbmNlIG9mIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluc3RydWN0aW9uIGlzIHRvIGV4YW1pbmUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBcInNvZnRsZWFmXCIgc3VnZ2VzdHMgYSBzcGVjaWZpYyBzdWJzeXN0ZW0gb3IgbW9kdWxlLCBsaWtlbHkgcmVsYXRlZCB0byBkZXZpY2UgbWFuYWdlbWVudCwgcG90ZW50aWFsbHkgYSBkcml2ZXIgb3Igc29tZSBhYnN0cmFjdGlvbiBsYXllci4gVGhlIFwiaXNfZGV2aWNlX3ByaXZhdGVcIiBzdWZmaXggaXMgdGhlIGtleSDigJMgaXQncyBhIEJvb2xlYW4gdmFyaWFibGUsIGZsYWcsIG9yIHByb3BlcnR5LCBpbmRpY2F0aW5nIGEgY2hhcmFjdGVyaXN0aWMgb2YgYSBkZXZpY2Ugb3IgYSByZWxhdGlvbnNoaXAgdG8gYSBzcGVjaWZpYyBkZXZpY2UuXG5cbk15IG1pbmQgcmFjZXMgdGhyb3VnaCB0aGUgcG9zc2libGUgc2NlbmFyaW9zOiBJcyB0aGlzIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI/IEEgcnVudGltZSBzdGF0ZSB2YXJpYWJsZT8gQSBjb21waWxlLXRpbWUgY29uc3RhbnQ/IFdoYXQgcGFydCBvZiB0aGUgc3lzdGVtIGlzIHNldHRpbmcgdGhpcyBmbGFnIGFuZCB3aGF0IHBhcnRzIGFyZSByZWFkaW5nIGl0PyBJcyB0aGlzIGtlcm5lbC1sZXZlbCBvciB1c2VyLXNwYWNlPyBBbmQgbW9zdCBpbXBvcnRhbnRseSwgd2hhdCBhcmUgdGhlIHNlY3VyaXR5IG9yIG9wZXJhdGlvbmFsIGNvbnNlcXVlbmNlcyBpZiB0aGlzIHZhcmlhYmxlIGlzIGluY29ycmVjdGx5IHNldCBvciBtaXNpbnRlcnByZXRlZD8gSWYgYSBkZXZpY2UgaXMgbWFya2VkIFwicHJpdmF0ZVwiIGlzIGl0IHVuYXZhaWxhYmxlIHRvIG90aGVyIHByb2Nlc3NlcyBvciB0aGUgZW50aXJlIHN5c3RlbT8gSXMgdGhlcmUgYSBsZWFrIHBvdGVudGlhbD8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBtaXRpZ2F0aW9ucyBpbiBwbGFjZSB0byBwcm90ZWN0IGRldmljZSBzdGF0ZT9cblxuSSdtIHN0YXJ0aW5nIHRvIGNvbnNpZGVyIHNwZWNpZmljIHF1ZXN0aW9ucy4gRG9lcyB0aGlzIHJlbGF0ZSB0byBwaHlzaWNhbCByZXNvdXJjZSBpc29sYXRpb24/IElzIHRoaXMgYWJvdXQgcHJldmVudGluZyB1bmF1dGhvcml6ZWQgYWNjZXNzIHRvIGhhcmR3YXJlIHJlc291cmNlcz8gSXMgdGhlIGBzb2Z0bGVhZmAgbW9kdWxlIHJlc3BvbnNpYmxlIGZvciByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBhY2Nlc3MgY29udHJvbD8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBoZXJlIHdpbGwgYmUgaW1wb3J0YW50LiBJZiBpdCBpcyBzZWN1cml0eSByZWxhdGVkLCBJJ2QgaW1tZWRpYXRlbHkgd2FudCB0byBrbm93IHdobyBoYXMgYWNjZXNzIHRvIHRoZSBkZXZpY2Ugb3IgaW5mb3JtYXRpb24gYWJvdXQgaXQuXG5cbk15IGluc3RpbmN0IGlzIHRvIHN0YXJ0IGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUsIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyBvZiB0aGlzIHZhcmlhYmxlIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIGl0LiBJJ2QgYmUgbG9va2luZyBmb3IgdGhlIGFzc2lnbm1lbnQgYW5kIHVzYWdlcyBvZiB0aGlzIHZhcmlhYmxlLCBlc3BlY2lhbGx5IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3Mgc2V0IHRvIHRydWUgb3IgZmFsc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYywgdGhlIGludGVudCwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGFueSB2dWxuZXJhYmlsaXRpZXMuIEknbSBhbHNvIHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbi4gRG9lcyBgc29mdGxlYWZgIHNldCB0aGUgYGlzX2RldmljZV9wcml2YXRlYCBmbGFnIGFuZCB0aGVuIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhlIGRldmljZSdzIHN0YXRlIHRvIGFub3RoZXIgY29tcG9uZW50PyBJcyB0aGlzIG9wZXJhdGlvbiBhdG9taWM/IFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5ODAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo1MS42MDU4ODgyMzVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NTpcXHQgKi9cXG4gMjc2OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbiAyNzc6XFx0e1xcbiAyNzg6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xcbiAyNzk6XFx0fVxcbiAyODA6XFx0XFxuIDI4MTpcXHQvKipcXG4gMjgyOlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG4gMjgzOlxcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4gMjg0OlxcdCAqXFxuIDI4NTpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gMjg2OlxcdCAqL1xcbiAyODc6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuIDI4ODpcXHR7XFxuIDI4OTpcXHRcXHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XFxuIDI5MDpcXHRcXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxcbiAyOTE6XFx0XFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9SRUFEOlxcbiAyOTI6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI5MzpcXHRcXHRkZWZhdWx0OlxcbiAyOTQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyOTU6XFx0XFx0fVxcbiAyOTY6XFx0fVxcbiAyOTc6XFx0XFxuIDI5ODpcXHQvKipcXG4gMjk5OlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XFxuIDMwMDpcXHQgKiBAZW50cnk6IExlYWYgZW50cnkuXFxuIDMwMTpcXHQgKlxcbiAzMDI6XFx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZS1leGNsdXNpdmUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gMzAzOlxcdCAqL1xcbiAzMDQ6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoc29mdGxlYWZfdCBlbnRyeSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDQ6NTEuNjA2MDQzMDE1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTEzMjY3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHNvIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIHRydWUsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEhvd2V2ZXIsIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGlzIGEgbGl0dGxlIG1vcmUgY29uZGl0aW9uYWwuIEl0IGRlcGVuZHMgb24gd2hldGhlciBgQ09ORklHX1pPTkVfREVWSUNFYCBhbmQgYENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU2AgYXJlIHNldC4gSG1tLCBJIGtub3cgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgZXhpc3RzIHNvbWV3aGVyZSBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvbywgYW5kIHNpbmNlIHdlJ3JlIGxvb2tpbmcgYXQgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGZsYWdzLCBJJ2QgYmV0dGVyIGRvdWJsZSBjaGVjayB3aGVyZSB0aGF0J3MgZGVmaW5lZC4gVGltZSB0byBnbyBsb29rIGF0IGBtbS9LY29uZmlnYCBhbmQgdmVyaWZ5IGl0cyBpbXBsaWNhdGlvbnMuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgZXZlcnl0aGluZyB3b3JrcyBhcyBpdCBzaG91bGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo1OC4xMTczNzIyODhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI1MDpcXHRjb25maWcgSE1NX01JUlJPUlxcbjEyNTE6XFx0XFx0Ym9vbFxcbjEyNTI6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xMjUzOlxcdFxcbjEyNTQ6XFx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbjEyNTU6XFx0XFx0Ym9vbFxcbjEyNTY6XFx0XFxuMTI1NzpcXHRjb25maWcgREVWSUNFX1BSSVZBVEVcXG4xMjU4OlxcdFxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG4xMjU5OlxcdFxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG4xMjYwOlxcdFxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG4xMjYxOlxcdFxcbjEyNjI6XFx0XFx0aGVscFxcbjEyNjM6XFx0XFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxcbjEyNjQ6XFx0XFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXFxuMTI2NTpcXHRcXHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cXG4xMjY2OlxcdFxcbjEyNjc6XFx0Y29uZmlnIFZNQVBfUEZOXFxuMTI2ODpcXHRcXHRib29sXFxuMTI2OTpcXHRcXG4xMjcwOlxcdGNvbmZpZyBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcXG4xMjcxOlxcdFxcdGJvb2xcXG4xMjcyOlxcdGNvbmZpZyBBUkNIX0hBU19QS0VZU1xcbjEyNzM6XFx0XFx0Ym9vbFxcbjEyNzQ6XFx0XFxuMTI3NTpcXHRjb25maWcgQVJDSF9VU0VTX1BHX0FSQ0hfMlxcbjEyNzY6XFx0XFx0Ym9vbFxcbjEyNzc6XFx0Y29uZmlnIEFSQ0hfVVNFU19QR19BUkNIXzNcXG4xMjc4OlxcdFxcdGJvb2xcXG4xMjc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwODo0NDo1OC4xMTc1MDgyMDhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQzMDk4Mjc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgQ2hhbmdlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGhhcyBhIGRlcGVuZGVuY3kgb24gYFpPTkVfREVWSUNFYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHNhZmUgYW5kIGNvdmVyIGFsbCBiYXNlcywgSSB0aGluayBJJ2xsIGFkZCBgREVWSUNFX1BSSVZBVEVgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gSXQncyBiZXR0ZXIgdG8gYmUgZXhwbGljaXQsIGV2ZW4gaWYgaXQgc2VlbXMgcmVkdW5kYW50IGluaXRpYWxseS5cblxuU28sIGhlcmUncyB3aGF0IHRoZSBgRW5hYmxlQ29uZmlnc2AgY3VycmVudGx5IGxvb2tzIGxpa2UsIHdpdGggdGhlIGFkZGl0aW9uIEkndmUgbWFkZTpcblxuKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWBcbiogICBgQURWSVNFX1NZU0NBTExTYFxuKiAgIGBOVU1BYFxuKiAgIGBaT05FX0RFVklDRWBcbiogICBgREVWSUNFX1BSSVZBVEVgXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZXkgYXJlOlxuXG4qICAgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGBcbiogICBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYFxuKiAgIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYFxuXG5JIHVuZGVyc3RhbmQgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSB2dWxuZXJhYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZiBub24tcHJlc2VudCBQTURzLCBzcGVjaWZpY2FsbHkgdGhlIGxhY2sgb2YgYSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBjaGVjayBiZWZvcmUgY2FsbGluZyBgcG1kX2ZvbGlvYCBvciB0cmlnZ2VyaW5nIGEgYFZNX0JVR19PTmAuIFRoaXMgaW1wYWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgbWFkdmlzZSBvcGVyYXRpb25zLCBhbmQgbWVtb3J5IHBvbGljaWVzLiBUaGUgaW1wb3J0YW50IHBhcnQgaXMgdGhhdCB0aGlzIGlzc3VlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWR2aXNlYCBhbmQgdGhlIGBtYmluZGAvYHNldF9tZW1wb2xpY3lgIHN5c3RlbSBjYWxscy4gVGhpcyBtZWFucyBpdCBoYXMgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMsIHNvIGl0J3MgYSBnb29kIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1OTEsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDg6NDU6MDQuNTQ4NDkzNDQ2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MTcwMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCIsXG4gICAgXCJOVU1BXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiLFxuICAgIFwicXVldWVfZm9saW9zX3B0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIHdhcyBub3QgY2hlY2tlZCBiZWZvcmUgY2FsbGluZyBgcG1kX2ZvbGlvYCBvciB0cmlnZ2VyaW5nIGEgYFZNX0JVR19PTmAgaW4gYG1hZHZpc2VgIGFuZCBgbWVtcG9saWN5YCBjb2RlIHBhdGhzLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgbWFkdmlzZSwgYW5kIG1lbW9yeSBwb2xpY2llcyB3aGVuIGRlYWxpbmcgd2l0aCBub24tcHJlc2VudCBQTURzIChsaWtlIG1pZ3JhdGlvbiBvciBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIGBtYWR2aXNlYCBhbmQgYG1iaW5kYC9gc2V0X21lbXBvbGljeWAgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkFEVklTRV9TWVNDQUxMU1wiLFxuICAgIFwiTlVNQVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgICBcInF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCB3YXMgbm90IGNoZWNrZWQgYmVmb3JlIGNhbGxpbmcgYHBtZF9mb2xpb2Agb3IgdHJpZ2dlcmluZyBhIGBWTV9CVUdfT05gIGluIGBtYWR2aXNlYCBhbmQgYG1lbXBvbGljeWAgY29kZSBwYXRocy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIG1hZHZpc2UsIGFuZCBtZW1vcnkgcG9saWNpZXMgd2hlbiBkZWFsaW5nIHdpdGggbm9uLXByZXNlbnQgUE1EcyAobGlrZSBtaWdyYXRpb24gb3IgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBgbWFkdmlzZWAgYW5kIGBtYmluZGAvYHNldF9tZW1wb2xpY3lgIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow87lh5[1] Phase: Succeeded StartedAt: 2026-07-11 08:45:16 +0000 UTC FinishedAt: 2026-07-11 08:45:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 08:45:16 +0000 UTC FinishedAt: 2026-07-11 08:45:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2] Phase: Succeeded StartedAt: 2026-07-11 08:45:16 +0000 UTC FinishedAt: 2026-07-11 12:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-11 08:45:16 +0000 UTC FinishedAt: 2026-07-11 12:57:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 08:45:16 +0000 UTC FinishedAt: 2026-07-11 08:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 08:45:16 +0000 UTC FinishedAt: 2026-07-11 08:45:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow87lh5/series-workflow87lh5-convert-artifact-1798974809/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-11 08:45:26 +0000 UTC FinishedAt: 2026-07-11 09:16:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-11 08:45:26 +0000 UTC FinishedAt: 2026-07-11 09:16:33 +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:*eef7e37a-9b84-42cd-950f-943e487f1de3,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-workflow87lh5/series-workflow87lh5-convert-artifact-1798974809/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": "cd5fb0c6-3aa8-4995-b228-90cd7dcb935e", "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-workflow87lh5/series-workflow87lh5-build-action-2796441079/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-11 08:45:26 +0000 UTC FinishedAt: 2026-07-11 09:16:10 +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:*eef7e37a-9b84-42cd-950f-943e487f1de3,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-workflow87lh5/series-workflow87lh5-convert-artifact-1798974809/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": "cd5fb0c6-3aa8-4995-b228-90cd7dcb935e", "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-workflow87lh5/series-workflow87lh5-build-action-2796441079/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 09:16:33 +0000 UTC FinishedAt: 2026-07-11 09:16:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 09:16:33 +0000 UTC FinishedAt: 2026-07-11 09:16:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 09:16:33 +0000 UTC FinishedAt: 2026-07-11 09:16:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 09:16:33 +0000 UTC FinishedAt: 2026-07-11 09:16:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow87lh5/series-workflow87lh5-convert-artifact-3258973996/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 09:16:48 +0000 UTC FinishedAt: 2026-07-11 09:19:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 09:16:48 +0000 UTC FinishedAt: 2026-07-11 09:19:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd5fb0c6-3aa8-4995-b228-90cd7dcb935e,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-workflow87lh5/series-workflow87lh5-build-action-2796441079/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-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 09:19:30 +0000 UTC FinishedAt: 2026-07-11 09:19:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 09:19:30 +0000 UTC FinishedAt: 2026-07-11 09:19:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 09:19:30 +0000 UTC FinishedAt: 2026-07-11 09:52:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 09:19:31 +0000 UTC FinishedAt: 2026-07-11 09:52:34 +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:*eef7e37a-9b84-42cd-950f-943e487f1de3,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-workflow87lh5/series-workflow87lh5-convert-artifact-3258973996/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": "0d8b4fc1-f7cb-45b2-86b5-2703607aa029", "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-workflow87lh5/series-workflow87lh5-build-action-794920392/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 09:19:31 +0000 UTC FinishedAt: 2026-07-11 09:52:24 +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:*eef7e37a-9b84-42cd-950f-943e487f1de3,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-workflow87lh5/series-workflow87lh5-convert-artifact-3258973996/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": "0d8b4fc1-f7cb-45b2-86b5-2703607aa029", "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-workflow87lh5/series-workflow87lh5-build-action-794920392/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-11 09:52:34 +0000 UTC FinishedAt: 2026-07-11 09:52:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-11 09:52:34 +0000 UTC FinishedAt: 2026-07-11 09:52:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-11 09:52:34 +0000 UTC FinishedAt: 2026-07-11 09:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-11 09:52:34 +0000 UTC FinishedAt: 2026-07-11 09:54:36 +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:*0d8b4fc1-f7cb-45b2-86b5-2703607aa029,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-workflow87lh5/series-workflow87lh5-build-action-794920392/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-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-11 09:54:46 +0000 UTC FinishedAt: 2026-07-11 12:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-11 09:54:46 +0000 UTC FinishedAt: 2026-07-11 12:57:06 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},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:*cd5fb0c6-3aa8-4995-b228-90cd7dcb935e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0d8b4fc1-f7cb-45b2-86b5-2703607aa029,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-workflow87lh5/series-workflow87lh5-build-action-2796441079/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-workflow87lh5/series-workflow87lh5-build-action-794920392/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-11 09:54:46 +0000 UTC FinishedAt: 2026-07-11 09:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-11 09:54:46 +0000 UTC FinishedAt: 2026-07-11 09:54:53 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},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-workflow87lh5/series-workflow87lh5-convert-artifact-1901733397/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-11 09:54:46 +0000 UTC FinishedAt: 2026-07-11 09:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-11 09:54:46 +0000 UTC FinishedAt: 2026-07-11 09:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-11 09:54:46 +0000 UTC FinishedAt: 2026-07-11 09:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-11 09:55:20 +0000 UTC FinishedAt: 2026-07-11 12:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87lh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS","NUMA","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"2899acbd-5fd5-4e58-90da-ace08e06b42b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-11 09:55:20 +0000 UTC FinishedAt: 2026-07-11 12:56:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd5fb0c6-3aa8-4995-b228-90cd7dcb935e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0d8b4fc1-f7cb-45b2-86b5-2703607aa029,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-workflow87lh5/series-workflow87lh5-build-action-2796441079/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-workflow87lh5/series-workflow87lh5-build-action-794920392/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-workflow87lh5/series-workflow87lh5-convert-artifact-1901733397/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,}