Name: series-workflowdlrqm Phase: Succeeded StartedAt: 2026-08-21 08:50:25 +0000 UTC FinishedAt: 2026-08-21 12:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[0] Phase: Succeeded StartedAt: 2026-08-21 08:50:25 +0000 UTC FinishedAt: 2026-08-21 09:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 08:50:25 +0000 UTC FinishedAt: 2026-08-21 09:08:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a33221f7ab120e9a6caa62c3ff8a1b09674370e8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NVME", "NVME_MULTIPATH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a33221f7ab120e9a6caa62c3ff8a1b09674370e8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NVME", "NVME_MULTIPATH" ], "series_id": "8c09bb57-9ae4-41f5-bfbe-2f2c324725d2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bdev_clone_partitions", "disk_add_mirror", "bdev_disk_changed", "nvme_failover_req", "nvme_mpath_start_request", "nvme_mpath_end_request" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JkZXZfY2xvbmVfcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtkaXNrX2FkZF9taXJyb3ImIzM0OywKICAgICYjMzQ7YmRldl9kaXNrX2NoYW5nZWQmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O252bWVfbXBhdGhfZW5kX3JlcXVlc3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gc3VwcG9ydCBwYXJ0aXRpb24gY2xvbmluZyBhbmQgbWlycm9yaW5nIGFjcm9zcyBibG9jayBkZXZpY2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWVsZHMgaW4gYHN0cnVjdCBnZW5kaXNrYCAodmlhIGEgdW5pb24gZm9yIGhlYWQvbWlycm9yIHJvbGVzKSBhbmQgYWRkcyBmdW5jdGlvbnMgbGlrZSBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCBhbmQgYGRpc2tfYWRkX21pcnJvcmAuIFxuXG5UaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdHJ1Y3R1cmFsIGxpbmtpbmcgKGhsaXN0IG9wZXJhdGlvbnMpLCBsb2NraW5nIChgb3Blbl9tdXRleGApLCBhbmQgYmxvY2sgZGV2aWNlL2JpbyByb3V0aW5nLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBhbmQgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgQVBJcyAobGlrZSBpb2N0bHMgb3IgbmV0bGluaykgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIFRoZSBwYXJ0aXRpb24gY2xvbmluZyByZWxpZXMgb24gcmVhZGluZyBmaWVsZHMgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHBhcnRpdGlvbnMgKGBiZF9zdGFydF9zZWN0YCwgYGJkX25yX3NlY3RvcnNgLCBgYmRfbWV0YV9pbmZvYCkuIFxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSBoZWFkIGRpc2sgaXMgZnJlZWQgYmVmb3JlIGl0cyBtaXJyb3JzKSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbG9ja2luZyBkZWFkbG9ja3MuIFRoZXNlIGNsYXNzZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbWVjaGFuaXNtIHRvIGNsb25lIHBhcnRpdGlvbnMgYmV0d2VlbiBgZ2VuZGlza2BzIChtaXJyb3JzKSwgc3BlY2lmaWNhbGx5IHV0aWxpemVkIGJ5IHRoZSBOVk1lIG11bHRpcGF0aCBkcml2ZXIgdG8gaGFuZGxlIHBhcnRpdGlvbnMgb24gbXVsdGlwYXRoIGRldmljZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBwYXJ0aXRpb24gaGFuZGxpbmcgYW5kIE5WTWUgbXVsdGlwYXRoIHJlcXVlc3Qgcm91dGluZywgd2hpY2ggYXJlIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBhbmQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgZW11bGF0ZWQgTlZNZSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTk2MmJlY2I4NDkzZjI4MzFjN2JhYmVhZmNmMWIyZjJiNjJiNWRkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjA3OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcbmluZGV4IDUwYWJmZDkzMjg4NjEuLjUwMjgwNWU1ZjkyOWYgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmhcbkBAIC02MzgsNiAmIzQzOzYzOCw3IEBAIGludCBiZGV2X2RlbF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8pO1xuIGludCBiZGV2X3Jlc2l6ZV9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8sIHNlY3Rvcl90IHN0YXJ0LFxuIFx0XHRzZWN0b3JfdCBsZW5ndGgpO1xuIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCk7XG4mIzQzO2ludCBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2spO1xuIFxuIHZvaWQgYmRldl9zZXRfbnJfc2VjdG9ycyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3JzKTtcbiBcbmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuY1xuaW5kZXggZjE5OTBjN2NkZmI5MS4uMzUxYWM5M2FiZWFiMyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC00MTksNiAmIzQzOzQxOSwxNyBAQCBzdGF0aWMgdm9pZCBhZGRfZGlza19maW5hbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGlza191ZXZlbnQoZGlzaywgS09CSl9BREQpO1xuIFx0fVxuIFxuJiM0MztcdGlmIChkaXNrLVx1MDAzZWhlYWQpIHtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZWhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4mIzQzO1x0XHRyZXQgPSBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoZGlzayk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0ZGV2X2VycihkaXNrX3RvX2RldihkaXNrKSwgXCYjMzQ7Y291bGQgbm90IGNsb25lIHBhcnRpdGlvbnMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRyZXQpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRibGtfYXBwbHlfYmRpX2xpbWl0cyhkaXNrLVx1MDAzZWJkaSwgXHUwMDI2ZGlzay1cdTAwM2VxdWV1ZS1cdTAwM2VsaW1pdHMpO1xuIFx0ZGlza19hZGRfZXZlbnRzKGRpc2spO1xuIFx0c2V0X2JpdChHRF9BRERFRCwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSk7XG5AQCAtNDMyLDYgJiM0Mzs0NDMsOSBAQCBzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdHN0cnVjdCBkZXZpY2UgKmRkZXYgPSBkaXNrX3RvX2RldihkaXNrKTtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKGRpc2stXHUwMDNlaGVhZCBcdTAwMjZcdTAwMjYgZGlza19oYXNfcGFydHNjYW4oZGlzaykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKGJkZXZfbnJfc2VjdG9ycyhkaXNrLVx1MDAzZXBhcnQwKSBcdTAwM2UgQkxLX0RFVl9NQVhfU0VDVE9SUykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTcwOSw2ICYjNDM7NzIzLDEyIEBAIHN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRcdGJkZXZfdW5oYXNoKHBhcnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4gXG4mIzQzO1x0aWYgKGRpc2stXHUwMDNlaGVhZCkge1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZWhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4mIzQzO1x0XHRobGlzdF9kZWwoXHUwMDI2ZGlzay1cdTAwM2VtaXJyb3Jfbm9kZSk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogVGVsbCB0aGUgZmlsZSBzeXN0ZW0gdG8gd3JpdGUgYmFjayBhbGwgZGlydHkgZGF0YSBhbmQgc2h1dCBkb3duIGlmXG4gXHQgKiBpdCBoYXNuJiMzOTt0IGJlZW4gbm90aWZpZWQgZWFybGllci5cbkBAIC0xMzY5LDcgJiM0MzsxMzg5LDggQEAgc3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR4YV9mb3JfZWFjaChcdTAwMjZncC1cdTAwM2VwYXJ0X3RibCwgaWR4LCBoZCkge1xuLVx0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFx1MDAyNlx1MDAyNiAhYmRldl9ucl9zZWN0b3JzKGhkKSlcbiYjNDM7XHRcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8IChncC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7XG5AQCAtMTUxMCw2ICYjNDM7MTUzMSwxOCBAQCBzdHJ1Y3QgZ2VuZGlzayAqX19hbGxvY19kaXNrX25vZGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBub2RlX2lkLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0Mzt2b2lkIGRpc2tfYWRkX21pcnJvcihzdHJ1Y3QgZ2VuZGlzayAqaGVhZCwgc3RydWN0IGdlbmRpc2sgKm1pcnJvcilcbiYjNDM7e1xuJiM0MztcdGlmICghaGVhZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRXQVJOX09OX09OQ0UodGVzdF9iaXQoR0RfQURERUQsIFx1MDAyNm1pcnJvci1cdTAwM2VzdGF0ZSkpO1xuJiM0MztcdG1pcnJvci1cdTAwM2VoZWFkID0gaGVhZDtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4mIzQzO1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bWlycm9yLVx1MDAzZW1pcnJvcl9ub2RlLCBcdTAwMjZoZWFkLVx1MDAzZW1pcnJvcl9oZWFkKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2aGVhZC1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChkaXNrX2FkZF9taXJyb3IpO1xuJiM0MztcbiBzdHJ1Y3QgZ2VuZGlzayAqX19ibGtfYWxsb2NfZGlzayhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIGludCBub2RlLFxuIFx0XHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmxrY2xhc3MpXG4ge1xuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLmJhZjc5MmJlY2Y2OTkgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbkBAIC02NDQsNiAmIzQzOzY0NCw3IEBAIHN0YXRpYyBpbnQgYmxrX2FkZF9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIGludCBiZGV2X2Rpc2tfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYm9vbCBpbnZhbGlkYXRlKVxuIHtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQ7XG4mIzQzO1x0c3RydWN0IGdlbmRpc2sgKm1pcnJvcjtcbiBcdHVuc2lnbmVkIGxvbmcgaWR4O1xuIFx0aW50IHJldCA9IDA7XG4gXG5AQCAtNzAzLDYgJiM0Mzs3MDQsMTMgQEAgaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpXG4gXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNmRpc2tfdG9fZGV2KGRpc2spLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiBcdH1cbiBcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeShtaXJyb3IsIFx1MDAyNmRpc2stXHUwMDNlbWlycm9yX2hlYWQsXG4mIzQzO1x0XHRcdFx0bWlycm9yX25vZGUpIHtcbiYjNDM7XHRcdHJldCA9IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhtaXJyb3IpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiByZXQ7XG4gfVxuIC8qXG5AQCAtNzExLDYgJiM0Mzs3MTksNDMgQEAgaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpXG4gICovXG4gRVhQT1JUX1NZTUJPTF9HUEwoYmRldl9kaXNrX2NoYW5nZWQpO1xuIFxuJiM0MztpbnQgYmRldl9jbG9uZV9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJsb2NrX2RldmljZSAqcGFydDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGlkeDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkaXNrLVx1MDAzZWhlYWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdHhhX2Zvcl9lYWNoX3N0YXJ0KFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIGlkeCwgcGFydCwgMSkge1xuJiM0MztcdFx0LyogU2FtZSBhcyBiZGV2X2Rpc2tfY2hhbmdlZCgpICovXG4mIzQzO1x0XHRiZGV2X3VuaGFzaChwYXJ0KTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRShhdG9taWNfcmVhZChcdTAwMjZwYXJ0LVx1MDAzZWJkX29wZW5lcnMpKTtcbiYjNDM7XHRcdGludmFsaWRhdGVfYmRldihwYXJ0KTtcbiYjNDM7XHRcdGRyb3BfcGFydGl0aW9uKHBhcnQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eGFfZm9yX2VhY2hfc3RhcnQoXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZXBhcnRfdGJsLCBpZHgsIHBhcnQsIDEpIHtcbiYjNDM7XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnRfYWRkZWQ7XG4mIzQzO1xuJiM0MztcdFx0cGFydF9hZGRlZCA9IGFkZF9wYXJ0aXRpb24oZGlzaywgaWR4LCBwYXJ0LVx1MDAzZWJkX3N0YXJ0X3NlY3QsXG4mIzQzO1x0XHRcdFx0XHRwYXJ0LVx1MDAzZWJkX25yX3NlY3RvcnMsIEFERFBBUlRfRkxBR19OT05FLFxuJiM0MztcdFx0XHRcdFx0cGFydC1cdTAwM2ViZF9tZXRhX2luZm8pO1xuJiM0MztcdFx0aWYgKElTX0VSUihwYXJ0X2FkZGVkKSkge1xuJiM0MztcdFx0XHRpZiAoUFRSX0VSUihwYXJ0X2FkZGVkKSAhPSAtRU5YSU8pIHtcbiYjNDM7XHRcdFx0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KGRpc2spLCBcJiMzNDtwJWxkIGNvdWxkIG5vdCBiZSBhZGRlZDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBpZHgsIHBhcnRfYWRkZWQpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihwYXJ0X2FkZGVkKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgKnJlYWRfcGFydF9zZWN0b3Ioc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSwgc2VjdG9yX3QgbiwgU2VjdG9yICpwKVxuIHtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3RhdGUtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MC1cdTAwM2ViZF9tYXBwaW5nO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuaW5kZXggMTMyMmM2NzhmNGViOC4uYjk0YjlhM2JjZWIyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5AQCAtNDI3Myw2ICYjNDM7NDI3Myw3IEBAIHN0YXRpYyB2b2lkIG52bWVfYWxsb2NfbnMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbiBcdFx0c3ByaW50ZihkaXNrLVx1MDAzZWRpc2tfbmFtZSwgXCYjMzQ7bnZtZSVkYyVkbiVkXCYjMzQ7LCBjdHJsLVx1MDAzZXN1YnN5cy1cdTAwM2VpbnN0YW5jZSxcbiBcdFx0XHRjdHJsLVx1MDAzZWluc3RhbmNlLCBucy1cdTAwM2VoZWFkLVx1MDAzZWluc3RhbmNlKTtcbiBcdFx0ZGlzay1cdTAwM2VmbGFncyB8PSBHRU5IRF9GTF9ISURERU47XG4mIzQzO1x0XHRkaXNrX2FkZF9taXJyb3IobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLCBucy1cdTAwM2VkaXNrKTtcbiBcdH0gZWxzZSBpZiAobXVsdGlwYXRoKSB7XG4gXHRcdHNwcmludGYoZGlzay1cdTAwM2VkaXNrX25hbWUsIFwmIzM0O252bWUlZG4lZFwmIzM0OywgY3RybC1cdTAwM2VzdWJzeXMtXHUwMDNlaW5zdGFuY2UsXG4gXHRcdFx0bnMtXHUwMDNlaGVhZC1cdTAwM2VpbnN0YW5jZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuaW5kZXggNzVkYmI1ODI4NmEzMi4uYmQ0MDU2ZjFhOWYyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuQEAgLTE0NCw2ICYjNDM7MTQ0LDIzIEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9mcmVlemUoc3RydWN0IG52bWVfc3Vic3lzdGVtICpzdWJzeXMpXG4gXHRcdFx0YmxrX2ZyZWV6ZV9xdWV1ZV9zdGFydChoLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZGlza190b19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuJiM0MztcdFx0XHRcdFx0XHR1OCBwYXJ0bm8pXG4mIzQzO3tcbiYjNDM7XHQvKiBRdWljayBsb29rdXAgZm9yIHdob2xlIGRpc2sgKi9cbiYjNDM7XHRpZiAoIXBhcnRubylcbiYjNDM7XHRcdHJldHVybiBkaXNrLVx1MDAzZXBhcnQwO1xuJiM0MztcdHJldHVybiB4YV9sb2FkKFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIHBhcnRubyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWJkZXYpXG4mIzQzO1x0XHRyZXR1cm4gZGlzay1cdTAwM2VwYXJ0MDtcbiYjNDM7XHRyZXR1cm4gbnZtZV9kaXNrX3RvX3BhcnQoZGlzaywgYmRldl9wYXJ0bm8oYmRldikpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiB7XG4gXHRzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5AQCAtMTY1LDggJiM0MzsxODIsMTAgQEAgdm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcbi1cdGZvciAoYmlvID0gcmVxLVx1MDAzZWJpbzsgYmlvOyBiaW8gPSBiaW8tXHUwMDNlYmlfbmV4dClcbi1cdFx0YmlvX3NldF9kZXYoYmlvLCBucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2stXHUwMDNlcGFydDApO1xuJiM0MztcdGZvciAoYmlvID0gcmVxLVx1MDAzZWJpbzsgYmlvOyBiaW8gPSBiaW8tXHUwMDNlYmlfbmV4dCkge1xuJiM0MztcdFx0YmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4mIzQzO1x0XHRcdFx0YmlvLVx1MDAzZWJpX2JkZXYpKTtcbiYjNDM7XHR9XG4gXHRibGtfc3RlYWxfYmlvcyhcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbGlzdCwgcmVxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcbiBcbkBAIC0xOTQsOCAmIzQzOzIxMyw5IEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bnZtZV9yZXEocnEpLVx1MDAzZWZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7XG4tXHRudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuLVx0XHRcdFx0XHRcdCAgICAgIGppZmZpZXMpO1xuJiM0MztcdG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KFxuJiM0MztcdFx0XHRudm1lX3RvX2Rpc2tfcGFydChkaXNrLCBycS1cdTAwM2VwYXJ0KSxcbiYjNDM7XHRcdFx0cmVxX29wKHJxKSwgamlmZmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7XG4gXG5AQCAtMjA4LDcgJiM0MzsyMjgsOCBAQCB2b2lkIG52bWVfbXBhdGhfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuIFxuIFx0aWYgKCEobnZtZV9yZXEocnEpLVx1MDAzZWZsYWdzIFx1MDAyNiBOVk1FX01QQVRIX0lPX1NUQVRTKSlcbiBcdFx0cmV0dXJuO1xuLVx0YmRldl9lbmRfaW9fYWNjdChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2stXHUwMDNlcGFydDAsIHJlcV9vcChycSksXG4mIzQzO1x0YmRldl9lbmRfaW9fYWNjdChudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4mIzQzO1x0XHRcdCBycS1cdTAwM2VwYXJ0KSwgcmVxX29wKHJxKSxcbiBcdFx0XHQgYmxrX3JxX2J5dGVzKHJxKSBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZULFxuIFx0XHRcdCBudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSk7XG4gfVxuQEAgLTUzMCwxMSAmIzQzOzU1MSwyMSBAQCBzdGF0aWMgYm9vbCBudm1lX2F2YWlsYWJsZV9wYXRoKHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQpXG4gXHRyZXR1cm4gbnZtZV9tcGF0aF9xdWV1ZV9pZl9ub19wYXRoKGhlYWQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZmluZF9wYXRoX2JkZXYoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCxcbiYjNDM7XHRcdFx0XHRcdFx0dTggcGFydG5vKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWVfbnMgKm5zID0gbnZtZV9maW5kX3BhdGgoaGVhZCk7XG4mIzQzO1xuJiM0MztcdGlmICghbnMpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gbnZtZV9kaXNrX3RvX3BhcnQobnMtXHUwMDNlZGlzaywgcGFydG5vKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0c3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCA9IGJpby1cdTAwM2ViaV9iZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gZGlza190b19kZXYoaGVhZC1cdTAwM2VkaXNrKTtcbi1cdHN0cnVjdCBudm1lX25zICpucztcbiYjNDM7XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2O1xuIFx0aW50IHNyY3VfaWR4O1xuIFxuIFx0LypcbkBAIC01NDcsOSAmIzQzOzU3OCw5IEBAIHN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZoZWFkLVx1MDAzZXNyY3UpO1xuLVx0bnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTtcbi1cdGlmIChsaWtlbHkobnMpKSB7XG4tXHRcdGJpb19zZXRfZGV2KGJpbywgbnMtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCk7XG4mIzQzO1x0YmRldiA9IG52bWVfZmluZF9wYXRoX2JkZXYoaGVhZCwgYmRldl9wYXJ0bm8oYmlvLVx1MDAzZWJpX2JkZXYpKTtcbiYjNDM7XHRpZiAobGlrZWx5KGJkZXYpKSB7XG4mIzQzO1x0XHRiaW9fc2V0X2RldihiaW8sIGJkZXYpO1xuIFx0XHQvKlxuIFx0XHQgKiBVc2UgQklPX1JFTUFQUEVEIHRvIHNraXAgYmlvX2NoZWNrX2VvZCgpIHdoZW4gdGhpcyBiaW9cbiBcdFx0ICogZW50ZXJzIHN1Ym1pdF9iaW9fbm9hY2N0KCkgZm9yIHRoZSBwZXItcGF0aCBkZXZpY2UuIFRoZSBFT0RcbkBAIC01NTcsNyAmIzQzOzU4OCw3IEBAIHN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0ICovXG4gXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19SRU1BUFBFRCk7XG4gXHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05WTUVfTVBBVEg7XG4tXHRcdHRyYWNlX2Jsb2NrX2Jpb19yZW1hcChiaW8sIGRpc2tfZGV2dChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2spLFxuJiM0MztcdFx0dHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJpbywgZGlza19kZXZ0KGhlYWQtXHUwMDNlZGlzayksXG4gXHRcdFx0XHQgICAgICBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IpO1xuIFx0XHRzdWJtaXRfYmlvX25vYWNjdChiaW8pO1xuIFx0fSBlbHNlIGlmIChudm1lX2F2YWlsYWJsZV9wYXRoKGhlYWQpKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDIwY2I4ZWQ3ZDk4N2EuLjdmMzU2M2MwZjU1MzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTg3LDYgJiM0MzsxODcsMTMgQEAgc3RydWN0IGdlbmRpc2sge1xuICNpZmRlZiBDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcbiBcdHN0cnVjdCBsaXN0X2hlYWQgc2xhdmVfYmRldnM7XG4gI2VuZGlmXG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IGhsaXN0X2hlYWQgbWlycm9yX2hlYWQ7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSBtaXJyb3Jfbm9kZTtcbiYjNDM7XHRcdFx0c3RydWN0IGdlbmRpc2sgKmhlYWQ7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4gXHRzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqcmFuZG9tO1xuIFx0c3RydWN0IGRpc2tfZXZlbnRzICpldjtcbiBcbkBAIC05NzcsNiAmIzQzOzk4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJkZXZfbnJfem9uZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiB9XG4gXG4gaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpO1xuJiM0Mzt2b2lkIGRpc2tfYWRkX21pcnJvcihzdHJ1Y3QgZ2VuZGlzayAqaGVhZCwgc3RydWN0IGdlbmRpc2sgKm1pcnJvcik7XG4gXG4gdm9pZCBwdXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG4gc3RydWN0IGdlbmRpc2sgKl9fYmxrX2FsbG9jX2Rpc2soc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBpbnQgbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDssCiAgICAmIzM0O05WTUVfTVVMVElQQVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmRldl9jbG9uZV9wYXJ0aXRpb25zJiMzNDssCiAgICAmIzM0O2Rpc2tfYWRkX21pcnJvciYjMzQ7LAogICAgJiMzNDtiZGV2X2Rpc2tfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDtudm1lX2ZhaWxvdmVyX3JlcSYjMzQ7LAogICAgJiMzNDtudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bnZtZV9tcGF0aF9lbmRfcmVxdWVzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSB0byBjbG9uZSBwYXJ0aXRpb25zIGJldHdlZW4gYGdlbmRpc2tgcyAobWlycm9ycyksIHNwZWNpZmljYWxseSB1dGlsaXplZCBieSB0aGUgTlZNZSBtdWx0aXBhdGggZHJpdmVyIHRvIGhhbmRsZSBwYXJ0aXRpb25zIG9uIG11bHRpcGF0aCBkZXZpY2VzLiBUaGlzIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgcGFydGl0aW9uIGhhbmRsaW5nIGFuZCBOVk1lIG11bHRpcGF0aCByZXF1ZXN0IHJvdXRpbmcsIHdoaWNoIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGVtdWxhdGVkIE5WTWUgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU5NjJiZWNiODQ5M2YyODMxYzdiYWJlYWZjZjFiMmYyYjYyYjVkZDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwOTowNzozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmgKaW5kZXggNTBhYmZkOTMyODg2MS4uNTAyODA1ZTVmOTI5ZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLmgKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmgKQEAgLTYzOCw2ICYjNDM7NjM4LDcgQEAgaW50IGJkZXZfZGVsX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgaW50IHBhcnRubyk7CiBpbnQgYmRldl9yZXNpemVfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBpbnQgcGFydG5vLCBzZWN0b3JfdCBzdGFydCwKIAkJc2VjdG9yX3QgbGVuZ3RoKTsKIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCk7CiYjNDM7aW50IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CiAKIHZvaWQgYmRldl9zZXRfbnJfc2VjdG9ycyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3JzKTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggZjE5OTBjN2NkZmI5MS4uMzUxYWM5M2FiZWFiMyAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9nZW5oZC5jCkBAIC00MTksNiAmIzQzOzQxOSwxNyBAQCBzdGF0aWMgdm9pZCBhZGRfZGlza19maW5hbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAkJZGlza191ZXZlbnQoZGlzaywgS09CSl9BREQpOwogCX0KIAomIzQzOwlpZiAoZGlzay0mZ3Q7aGVhZCkgewomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtkaXNrLSZndDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0MzsJCXJldCA9IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhkaXNrKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O2hlYWQtJmd0O29wZW5fbXV0ZXgpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlkZXZfZXJyKGRpc2tfdG9fZGV2KGRpc2spLCAmIzM0O2NvdWxkIG5vdCBjbG9uZSBwYXJ0aXRpb25zICglZClcbiYjMzQ7LAomIzQzOwkJCQlyZXQpOwomIzQzOwl9CiYjNDM7CiAJYmxrX2FwcGx5X2JkaV9saW1pdHMoZGlzay0mZ3Q7YmRpLCAmYW1wO2Rpc2stJmd0O3F1ZXVlLSZndDtsaW1pdHMpOwogCWRpc2tfYWRkX2V2ZW50cyhkaXNrKTsKIAlzZXRfYml0KEdEX0FEREVELCAmYW1wO2Rpc2stJmd0O3N0YXRlKTsKQEAgLTQzMiw2ICYjNDM7NDQzLDkgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJc3RydWN0IGRldmljZSAqZGRldiA9IGRpc2tfdG9fZGV2KGRpc2spOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKGRpc2stJmd0O2hlYWQgJmFtcDsmYW1wOyBkaXNrX2hhc19wYXJ0c2NhbihkaXNrKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWlmIChXQVJOX09OX09OQ0UoYmRldl9ucl9zZWN0b3JzKGRpc2stJmd0O3BhcnQwKSAmZ3Q7IEJMS19ERVZfTUFYX1NFQ1RPUlMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNzA5LDYgJiM0Mzs3MjMsMTIgQEAgc3RhdGljIHZvaWQgX19kZWxfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAkJYmRldl91bmhhc2gocGFydCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiAKJiM0MzsJaWYgKGRpc2stJmd0O2hlYWQpIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtkaXNrLSZndDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0MzsJCWhsaXN0X2RlbCgmYW1wO2Rpc2stJmd0O21pcnJvcl9ub2RlKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O2hlYWQtJmd0O29wZW5fbXV0ZXgpOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBUZWxsIHRoZSBmaWxlIHN5c3RlbSB0byB3cml0ZSBiYWNrIGFsbCBkaXJ0eSBkYXRhIGFuZCBzaHV0IGRvd24gaWYKIAkgKiBpdCBoYXNuJiMzOTt0IGJlZW4gbm90aWZpZWQgZWFybGllci4KQEAgLTEzNjksNyAmIzQzOzEzODksOCBAQCBzdGF0aWMgaW50IGRpc2tzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxZiwgdm9pZCAqdikKIAogCXJjdV9yZWFkX2xvY2soKTsKIAl4YV9mb3JfZWFjaCgmYW1wO2dwLSZndDtwYXJ0X3RibCwgaWR4LCBoZCkgewotCQlpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpICZhbXA7JmFtcDsgIWJkZXZfbnJfc2VjdG9ycyhoZCkpCiYjNDM7CQlpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWJkZXZfbnJfc2VjdG9ycyhoZCkgfHwgKGdwLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKSkKIAkJCWNvbnRpbnVlOwogCiAJCWluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7CkBAIC0xNTEwLDYgJiM0MzsxNTMxLDE4IEBAIHN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0Mzt2b2lkIGRpc2tfYWRkX21pcnJvcihzdHJ1Y3QgZ2VuZGlzayAqaGVhZCwgc3RydWN0IGdlbmRpc2sgKm1pcnJvcikKJiM0Mzt7CiYjNDM7CWlmICghaGVhZCkKJiM0MzsJCXJldHVybjsKJiM0MzsJV0FSTl9PTl9PTkNFKHRlc3RfYml0KEdEX0FEREVELCAmYW1wO21pcnJvci0mZ3Q7c3RhdGUpKTsKJiM0MzsJbWlycm9yLSZndDtoZWFkID0gaGVhZDsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2hlYWQtJmd0O29wZW5fbXV0ZXgpOwomIzQzOwlobGlzdF9hZGRfaGVhZCgmYW1wO21pcnJvci0mZ3Q7bWlycm9yX25vZGUsICZhbXA7aGVhZC0mZ3Q7bWlycm9yX2hlYWQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZGlza19hZGRfbWlycm9yKTsKJiM0MzsKIHN0cnVjdCBnZW5kaXNrICpfX2Jsa19hbGxvY19kaXNrKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGUsCiAJCXN0cnVjdCBsb2NrX2NsYXNzX2tleSAqbGtjbGFzcykKIHsKZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKaW5kZXggYjVjNTliNzljYTdjYi4uYmFmNzkyYmVjZjY5OSAxMDA2NDQKLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKQEAgLTY0NCw2ICYjNDM7NjQ0LDcgQEAgc3RhdGljIGludCBibGtfYWRkX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSkKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0OwomIzQzOwlzdHJ1Y3QgZ2VuZGlzayAqbWlycm9yOwogCXVuc2lnbmVkIGxvbmcgaWR4OwogCWludCByZXQgPSAwOwogCkBAIC03MDMsNiAmIzQzOzcwNCwxMyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSkKIAkJa29iamVjdF91ZXZlbnQoJmFtcDtkaXNrX3RvX2RldihkaXNrKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogCX0KIAomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShtaXJyb3IsICZhbXA7ZGlzay0mZ3Q7bWlycm9yX2hlYWQsCiYjNDM7CQkJCW1pcnJvcl9ub2RlKSB7CiYjNDM7CQlyZXQgPSBiZGV2X2Nsb25lX3BhcnRpdGlvbnMobWlycm9yKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogLyoKQEAgLTcxMSw2ICYjNDM7NzE5LDQzIEBAIGludCBiZGV2X2Rpc2tfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYm9vbCBpbnZhbGlkYXRlKQogICovCiBFWFBPUlRfU1lNQk9MX0dQTChiZGV2X2Rpc2tfY2hhbmdlZCk7CiAKJiM0MztpbnQgYmRldl9jbG9uZV9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGJsb2NrX2RldmljZSAqcGFydDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpZHg7CiYjNDM7CiYjNDM7CWlmICghZGlzay0mZ3Q7aGVhZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CXhhX2Zvcl9lYWNoX3N0YXJ0KCZhbXA7ZGlzay0mZ3Q7cGFydF90YmwsIGlkeCwgcGFydCwgMSkgewomIzQzOwkJLyogU2FtZSBhcyBiZGV2X2Rpc2tfY2hhbmdlZCgpICovCiYjNDM7CQliZGV2X3VuaGFzaChwYXJ0KTsKJiM0MzsJCVdBUk5fT05fT05DRShhdG9taWNfcmVhZCgmYW1wO3BhcnQtJmd0O2JkX29wZW5lcnMpKTsKJiM0MzsJCWludmFsaWRhdGVfYmRldihwYXJ0KTsKJiM0MzsJCWRyb3BfcGFydGl0aW9uKHBhcnQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXhhX2Zvcl9lYWNoX3N0YXJ0KCZhbXA7ZGlzay0mZ3Q7aGVhZC0mZ3Q7cGFydF90YmwsIGlkeCwgcGFydCwgMSkgewomIzQzOwkJc3RydWN0IGJsb2NrX2RldmljZSAqcGFydF9hZGRlZDsKJiM0MzsKJiM0MzsJCXBhcnRfYWRkZWQgPSBhZGRfcGFydGl0aW9uKGRpc2ssIGlkeCwgcGFydC0mZ3Q7YmRfc3RhcnRfc2VjdCwKJiM0MzsJCQkJCXBhcnQtJmd0O2JkX25yX3NlY3RvcnMsIEFERFBBUlRfRkxBR19OT05FLAomIzQzOwkJCQkJcGFydC0mZ3Q7YmRfbWV0YV9pbmZvKTsKJiM0MzsJCWlmIChJU19FUlIocGFydF9hZGRlZCkpIHsKJiM0MzsJCQlpZiAoUFRSX0VSUihwYXJ0X2FkZGVkKSAhPSAtRU5YSU8pIHsKJiM0MzsJCQkJZGV2X2VycihkaXNrX3RvX2RldihkaXNrKSwgJiMzNDtwJWxkIGNvdWxkIG5vdCBiZSBhZGRlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgICAgIGlkeCwgcGFydF9hZGRlZCk7CiYjNDM7CQkJfQomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwkJCXJldHVybiBQVFJfRVJSKHBhcnRfYWRkZWQpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkICpyZWFkX3BhcnRfc2VjdG9yKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHNlY3Rvcl90IG4sIFNlY3RvciAqcCkKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHN0YXRlLSZndDtkaXNrLSZndDtwYXJ0MC0mZ3Q7YmRfbWFwcGluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwppbmRleCAxMzIyYzY3OGY0ZWI4Li5iOTRiOWEzYmNlYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCkBAIC00MjczLDYgJiM0Mzs0MjczLDcgQEAgc3RhdGljIHZvaWQgbnZtZV9hbGxvY19ucyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKQogCQlzcHJpbnRmKGRpc2stJmd0O2Rpc2tfbmFtZSwgJiMzNDtudm1lJWRjJWRuJWQmIzM0OywgY3RybC0mZ3Q7c3Vic3lzLSZndDtpbnN0YW5jZSwKIAkJCWN0cmwtJmd0O2luc3RhbmNlLCBucy0mZ3Q7aGVhZC0mZ3Q7aW5zdGFuY2UpOwogCQlkaXNrLSZndDtmbGFncyB8PSBHRU5IRF9GTF9ISURERU47CiYjNDM7CQlkaXNrX2FkZF9taXJyb3IobnMtJmd0O2hlYWQtJmd0O2Rpc2ssIG5zLSZndDtkaXNrKTsKIAl9IGVsc2UgaWYgKG11bHRpcGF0aCkgewogCQlzcHJpbnRmKGRpc2stJmd0O2Rpc2tfbmFtZSwgJiMzNDtudm1lJWRuJWQmIzM0OywgY3RybC0mZ3Q7c3Vic3lzLSZndDtpbnN0YW5jZSwKIAkJCW5zLSZndDtoZWFkLSZndDtpbnN0YW5jZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jCmluZGV4IDc1ZGJiNTgyODZhMzIuLmJkNDA1NmYxYTlmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jCkBAIC0xNDQsNiAmIzQzOzE0NCwyMyBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfZnJlZXplKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKQogCQkJYmxrX2ZyZWV6ZV9xdWV1ZV9zdGFydChoLSZndDtkaXNrLSZndDtxdWV1ZSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV9kaXNrX3RvX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiYjNDM7CQkJCQkJdTggcGFydG5vKQomIzQzO3sKJiM0MzsJLyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovCiYjNDM7CWlmICghcGFydG5vKQomIzQzOwkJcmV0dXJuIGRpc2stJmd0O3BhcnQwOwomIzQzOwlyZXR1cm4geGFfbG9hZCgmYW1wO2Rpc2stJmd0O3BhcnRfdGJsLCBwYXJ0bm8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiYjNDM7CQkJCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQomIzQzO3sKJiM0MzsJaWYgKCFiZGV2KQomIzQzOwkJcmV0dXJuIGRpc2stJmd0O3BhcnQwOwomIzQzOwlyZXR1cm4gbnZtZV9kaXNrX3RvX3BhcnQoZGlzaywgYmRldl9wYXJ0bm8oYmRldikpOwomIzQzO30KJiM0MzsKIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtJmd0O3EtJmd0O3F1ZXVlZGF0YTsKQEAgLTE2NSw4ICYjNDM7MTgyLDEwIEBAIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSkKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGJpbyA9IHJlcS0mZ3Q7YmlvOyBiaW87IGJpbyA9IGJpby0mZ3Q7YmlfbmV4dCkKLQkJYmlvX3NldF9kZXYoYmlvLCBucy0mZ3Q7aGVhZC0mZ3Q7ZGlzay0mZ3Q7cGFydDApOwomIzQzOwlmb3IgKGJpbyA9IHJlcS0mZ3Q7YmlvOyBiaW87IGJpbyA9IGJpby0mZ3Q7YmlfbmV4dCkgewomIzQzOwkJYmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzaywKJiM0MzsJCQkJYmlvLSZndDtiaV9iZGV2KSk7CiYjNDM7CX0KIAlibGtfc3RlYWxfYmlvcygmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xpc3QsIHJlcSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xvY2ssIGZsYWdzKTsKIApAQCAtMTk0LDggJiM0MzsyMTMsOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiAJCXJldHVybjsKIAogCW52bWVfcmVxKHJxKS0mZ3Q7ZmxhZ3MgfD0gTlZNRV9NUEFUSF9JT19TVEFUUzsKLQludm1lX3JlcShycSktJmd0O3N0YXJ0X3RpbWUgPSBiZGV2X3N0YXJ0X2lvX2FjY3QoZGlzay0mZ3Q7cGFydDAsIHJlcV9vcChycSksCi0JCQkJCQkgICAgICBqaWZmaWVzKTsKJiM0MzsJbnZtZV9yZXEocnEpLSZndDtzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KAomIzQzOwkJCW52bWVfdG9fZGlza19wYXJ0KGRpc2ssIHJxLSZndDtwYXJ0KSwKJiM0MzsJCQlyZXFfb3AocnEpLCBqaWZmaWVzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7CiAKQEAgLTIwOCw3ICYjNDM7MjI4LDggQEAgdm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKIAogCWlmICghKG52bWVfcmVxKHJxKS0mZ3Q7ZmxhZ3MgJmFtcDsgTlZNRV9NUEFUSF9JT19TVEFUUykpCiAJCXJldHVybjsKLQliZGV2X2VuZF9pb19hY2N0KG5zLSZndDtoZWFkLSZndDtkaXNrLSZndDtwYXJ0MCwgcmVxX29wKHJxKSwKJiM0MzsJYmRldl9lbmRfaW9fYWNjdChudm1lX3RvX2Rpc2tfcGFydChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzaywKJiM0MzsJCQkgcnEtJmd0O3BhcnQpLCByZXFfb3AocnEpLAogCQkJIGJsa19ycV9ieXRlcyhycSkgJmd0OyZndDsgU0VDVE9SX1NISUZULAogCQkJIG52bWVfcmVxKHJxKS0mZ3Q7c3RhcnRfdGltZSk7CiB9CkBAIC01MzAsMTEgJiM0Mzs1NTEsMjEgQEAgc3RhdGljIGJvb2wgbnZtZV9hdmFpbGFibGVfcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKQogCXJldHVybiBudm1lX21wYXRoX3F1ZXVlX2lmX25vX3BhdGgoaGVhZCk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV9maW5kX3BhdGhfYmRldihzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkLAomIzQzOwkJCQkJCXU4IHBhcnRubykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudm1lX25zICpucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpOwomIzQzOwomIzQzOwlpZiAoIW5zKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBudm1lX2Rpc2tfdG9fcGFydChucy0mZ3Q7ZGlzaywgcGFydG5vKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCA9IGJpby0mZ3Q7YmlfYmRldi0mZ3Q7YmRfZGlzay0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRpc2tfdG9fZGV2KGhlYWQtJmd0O2Rpc2spOwotCXN0cnVjdCBudm1lX25zICpuczsKJiM0MzsJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAlpbnQgc3JjdV9pZHg7CiAKIAkvKgpAQCAtNTQ3LDkgJiM0Mzs1NzgsOSBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pCiAJCXJldHVybjsKIAogCXNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soJmFtcDtoZWFkLSZndDtzcmN1KTsKLQlucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpOwotCWlmIChsaWtlbHkobnMpKSB7Ci0JCWJpb19zZXRfZGV2KGJpbywgbnMtJmd0O2Rpc2stJmd0O3BhcnQwKTsKJiM0MzsJYmRldiA9IG52bWVfZmluZF9wYXRoX2JkZXYoaGVhZCwgYmRldl9wYXJ0bm8oYmlvLSZndDtiaV9iZGV2KSk7CiYjNDM7CWlmIChsaWtlbHkoYmRldikpIHsKJiM0MzsJCWJpb19zZXRfZGV2KGJpbywgYmRldik7CiAJCS8qCiAJCSAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpbwogCQkgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRApAQCAtNTU3LDcgJiM0Mzs1ODgsNyBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pCiAJCSAqLwogCQliaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpOwogCQliaW8tJmd0O2JpX29wZiB8PSBSRVFfTlZNRV9NUEFUSDsKLQkJdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJpbywgZGlza19kZXZ0KG5zLSZndDtoZWFkLSZndDtkaXNrKSwKJiM0MzsJCXRyYWNlX2Jsb2NrX2Jpb19yZW1hcChiaW8sIGRpc2tfZGV2dChoZWFkLSZndDtkaXNrKSwKIAkJCQkgICAgICBiaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yKTsKIAkJc3VibWl0X2Jpb19ub2FjY3QoYmlvKTsKIAl9IGVsc2UgaWYgKG52bWVfYXZhaWxhYmxlX3BhdGgoaGVhZCkpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDIwY2I4ZWQ3ZDk4N2EuLjdmMzU2M2MwZjU1MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMTg3LDYgJiM0MzsxODcsMTMgQEAgc3RydWN0IGdlbmRpc2sgewogI2lmZGVmIENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRAogCXN0cnVjdCBsaXN0X2hlYWQgc2xhdmVfYmRldnM7CiAjZW5kaWYKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IGhsaXN0X2hlYWQgbWlycm9yX2hlYWQ7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXN0cnVjdCBobGlzdF9ub2RlIG1pcnJvcl9ub2RlOwomIzQzOwkJCXN0cnVjdCBnZW5kaXNrICpoZWFkOwomIzQzOwkJfTsKJiM0MzsJfTsKIAlzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqcmFuZG9tOwogCXN0cnVjdCBkaXNrX2V2ZW50cyAqZXY7CiAKQEAgLTk3Nyw2ICYjNDM7OTg0LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9ucl96b25lcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogfQogCiBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSk7CiYjNDM7dm9pZCBkaXNrX2FkZF9taXJyb3Ioc3RydWN0IGdlbmRpc2sgKmhlYWQsIHN0cnVjdCBnZW5kaXNrICptaXJyb3IpOwogCiB2b2lkIHB1dF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIHN0cnVjdCBnZW5kaXNrICpfX2Jsa19hbGxvY19kaXNrKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE5WTWUgTXVsdGlwYXRoIGFuZCBCbG9jayBMYXllciBNaXJyb3JpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRvIHJldmlldy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBhcmUgdGhlcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCB3YXJyYW50IGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSByZWZhY3RvcjsgaXQmIzM5O3MgYSBzdHJ1Y3R1cmFsIG1vZGlmaWNhdGlvbiwgYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGNyaXRpY2FsIGFyZWFzLgoKVGhlIHBhdGNoIGhpdHMgdGhlIGJsb2NrIGxheWVyIOKAkyBzcGVjaWZpY2FsbHkgYGJsay5oYCwgYGdlbmhkLmNgLCBhbmQgYHBhcnRpdGlvbnMvY29yZS5jYCDigJMgYW5kIHRoZW4gZGl2ZXMgaW50byB0aGUgTlZNZSBzdWJzeXN0ZW0sIG1vZGlmeWluZyBjb3JlIE5WTWUgaG9zdCBkcml2ZXIgbG9naWMgaW4gYGNvcmUuY2AgYW5kIG11bHRpcGF0aCBmdW5jdGlvbmFsaXR5IGluIGBtdWx0aXBhdGguY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyAmIzM0O21pcnJvciYjMzQ7IGNvbmNlcHQgZm9yIGBnZW5kaXNrYHMsIGNsb25pbmcgcGFydGl0aW9ucywgaXMgdGhlIGtleSBjaGFuZ2UgaGVyZS4gSXQmIzM5O3MgZXhwbGljaXRseSB1c2VkIGluIE5WTWUgbXVsdGlwYXRoLCBhZGRpbmcgdGhlIG1pcnJvciB3aXRoIGBkaXNrX2FkZF9taXJyb3IobnMtJmd0O2hlYWQtJmd0O2Rpc2ssIG5zLSZndDtkaXNrKWAuIEl0IGFsc28gYWx0ZXJzIGBiZGV2X2Rpc2tfY2hhbmdlZGAgdG8gZW5zdXJlIHRoZSBtaXJyb3JzIGdldCB0aGUgcGFydGl0aW9uIHVwZGF0ZXMuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYWxzbyB1cGRhdGluZyB2YXJpb3VzIG11bHRpcGF0aCBOVk1lIHJlcXVlc3RzIHRvIGhhbmRsZSB0aGVzZSBtaXJyb3IgZGlza3MuCgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaGFzIGEgaGlnaCBwb3RlbnRpYWwgZm9yIGZ1enppbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgbW9kaWZ5aW5nIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgZHJpdmVyIGxvZ2ljIGFuZCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgdXNpbmcgaXQgaW4gbXVsdGlwYXRoLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIHRlc3RlZCBpbiBhIHJlYXNvbmFibGUgZW52aXJvbm1lbnQ/IEZvcnR1bmF0ZWx5LCBOVk1lIGlzIHdlbGwtc3VwcG9ydGVkIGluIFFFTVUsIHNvIHZpcnR1YWxpemVkIE5WTWUgbXVsdGlwYXRoIHRlc3RpbmcgaXMgZW50aXJlbHkgZmVhc2libGUuIFRoaXMgaXMgZXhjZWxsZW50IG5ld3MsIGFzIHRoaXMgbWVhbnMgd2UgY2FuIGJ1aWxkIGEgdGVzdGluZyBlbnZpcm9ubWVudCBlYXNpbHkuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byB0YXJnZXQuIFdlIG5lZWQgdG8gYmUgc3VyZ2ljYWwuIEkmIzM5O20gZm9jdXNpbmcgb246CgoqICAgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AKKiAgIGBkaXNrX2FkZF9taXJyb3JgCiogICBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YAoqICAgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgCiogICBgbnZtZV9mYWlsb3Zlcl9yZXFgCiogICBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gIChFdmVuIHRob3VnaCBpdCBpcyBzdGF0aWMsIGl0IGlzIGNhbGxlZCBieSB0aGUgZnVuY3Rpb25zIGluIHF1ZXN0aW9uLCBzbyB3ZSBzaG91bGQga2VlcCBpdCBpbiBtaW5kKS4KCkhvd2V2ZXIsIHNpbmNlIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AgaXMgc3RhdGljLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgY292ZXJhZ2UgaW5kaXJlY3RseSBieSB0YXJnZXRpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zOiBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCwgYGRpc2tfYWRkX21pcnJvcmAsIGFuZCB0aGUgZnVuY3Rpb24gbW9kaWZpZWQsIGBiZGV2X2Rpc2tfY2hhbmdlZGAuCgpPa2F5LCBuZXh0IHN0ZXBzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkga25vdyBgQ09ORklHX05WTUVfTVVMVElQQVRIYCBpcyBnb2luZyB0byBiZSByZWxldmFudCBoZXJlLiBUaGVuIEkmIzM5O2xsIHVzZSBzb21lIHRvb2xzIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIGJlc3QgcGF0aCBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVk1FX01VTFRJUEFUSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTYtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjE3OmNvbmZpZyBOVk1FX01VTFRJUEFUSFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7TlZNZSBtdWx0aXBhdGggc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5ODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBOVk1lIE11bHRpcGF0aCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX05WTUVfTVVMVElQQVRIYC4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBzdXBwb3J0aW5nIGVsZW1lbnRzIGFyZSBpbiBwbGFjZSBiZWZvcmUgd2UgZXZlbiBjb25zaWRlciBlbmFibGluZyB0aGlzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGZlYXR1cmUgdGhhdCBwcm9mb3VuZGx5IGltcGFjdHMgSS9PIHBhdGggc2VsZWN0aW9uIGFuZCByZXNpbGllbmNlLCBzbyBhIHN1cGVyZmljaWFsIGdsYW5jZSBzaW1wbHkgd29uJiMzOTt0IGN1dCBpdC4gSSBuZWVkIHRvIGtub3c6IEFyZSB0aGVyZSBhbnkgZnVuZGFtZW50YWwga2VybmVsIGZlYXR1cmVzIG9yIGRyaXZlciBjb21wb25lbnRzLCBiZXlvbmQgdGhlIG9idmlvdXMgTlZNZSBjb3JlLCB0aGF0IHRoaXMgcmVsaWVzIG9uPyBUaGluayBhYm91dCB0aGUgU0NTSSBzdWJzeXN0ZW0sIG11bHRpcGF0aGluZyBpbmZyYXN0cnVjdHVyZSAoRE0tTXVsdGlwYXRoIG9yIHNpbWlsYXIpLCBhbmQgYW55IGJsb2NrIGxheWVyIG1vZGlmaWNhdGlvbnMuIEFyZSB0aGV5IHByb3Blcmx5IGNvbmZpZ3VyZWQsIGxvYWRlZCwgYW5kIGluaXRpYWxpemVkPyBJIG5lZWQgdG8gcmV2aWV3IHRoZSBrY29uZmlnIGRlcGVuZGVuY2llcy4KCkkmIzM5O2xsIGJlIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBtdWx0aXBhdGggc3VwcG9ydCBjYW4gc29tZXRpbWVzIGNyZWF0ZSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN0b3JhZ2UgbW9kdWxlcywgZXNwZWNpYWxseSByZWdhcmRpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGRldmljZSBkaXNjb3ZlcnkuIFNvLCB0aGlzIGludm9sdmVzIGEgc3lzdGVtYXRpYyBleGFtaW5hdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBub3QganVzdCBhIGNhc3VhbCBsb29rLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBlbmFibGluZyBpdCB3aWxsIGhhdmUgYW55IGltcGFjdCBvbiB0aGUgZGVmYXVsdCBOVk1lIGJlaGF2aW9yLCBvciBpZiBvdGhlciBkZXBlbmRlbmNpZXMgbWF5IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIG1vcmUgdGhhbiBqdXN0IGNvbmZpcm1pbmcgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIEl0JiMzOTtzIGFib3V0IGRldmVsb3BpbmcgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgcmVsYXRpb25zaGlwcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyB0byBtYWtlIHRoZSBiZXN0IHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfTVVMVElQQVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTYtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjE3OmNvbmZpZyBOVk1FX01VTFRJUEFUSFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7TlZNZSBtdWx0aXBhdGggc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE5WTWUgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIE5WTWUgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDE3LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhbiBvdmVydmlldyBvZiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIGZvciB0aGUgTlZNZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgbW9kdWxlIHNlbGVjdGlvbnMsIGZlYXR1cmUgdG9nZ2xlcywgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHNldHRpbmdzLiBIb3BlZnVsbHkgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgZnVuZGFtZW50YWwgY29uZmlndXJhYmxlIGVsZW1lbnRzIGFuZCBkZXBlbmRlbmNpZXMgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBOVk1FX0NPUkVcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIEJMS19ERVZfTlZNRVxuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3MgYmxvY2sgZGV2aWNlXCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgQkxPQ0tcbiAgIDg6XHRcdHNlbGVjdCBOVk1FX0NPUkVcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhlIE5WTSBFeHByZXNzIGRyaXZlciBpcyBmb3Igc29saWQgc3RhdGUgZHJpdmVzIGRpcmVjdGx5XG4gIDExOlx0XHQgIGNvbm5lY3RlZCB0byB0aGUgUENJIG9yIFBDSSBFeHByZXNzIGJ1cy4gIElmIHlvdSBrbm93IHlvdVxuICAxMjpcdFx0ICBkb24mIzM5O3QgaGF2ZSBvbmUgb2YgdGhlc2UsIGl0IGlzIHNhZmUgdG8gYW5zd2VyIE4uXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbnZtZS5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgTlZNRV9NVUxUSVBBVEhcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7TlZNZSBtdWx0aXBhdGggc3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBOVk1FX0NPUkVcbiAgMjA6XHRcdGhlbHBcbiAgMjE6XHRcdCAgVGhpcyBvcHRpb24gY29udHJvbHMgc3VwcG9ydCBmb3IgbXVsdGlwYXRoIGFjY2VzcyB0byBOVk1lXG4gIDIyOlx0XHQgIHN1YnN5c3RlbXMuIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgc3VwcG9ydCBmb3IgTlZNZSBtdWx0aXBhdGhcbiAgMjM6XHRcdCAgYWNjZXNzIGlzIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwuIElmIHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIHN1cHBvcnRcbiAgMjQ6XHRcdCAgZm9yIE5WTWUgbXVsdGlwYXRoIGFjY2VzcyBpcyBleGNsdWRlZCBmcm9tIHRoZSBrZXJuZWwuIFdoZW4gdGhpc1xuICAyNTpcdFx0ICBvcHRpb24gaXMgZGlzYWJsZWQgZWFjaCBjb250cm9sbGVyL25hbWVzcGFjZSByZWNlaXZlcyBpdHNcbiAgMjY6XHRcdCAgb3duIC9kZXYvbnZtZVhuWSBkZXZpY2UgZW50cnkgYW5kIE5WTWUgbXVsdGlwYXRoIGFjY2VzcyBpc1xuICAyNzpcdFx0ICBub3Qgc3VwcG9ydGVkLlxuICAyODpcdFxuICAyOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAzMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzEKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5WTWUgTXVsdGlwYXRoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIE5WTWUgbXVsdGlwYXRoIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IHRha2UuICBJdCBsb29rcyBsaWtlIGBOVk1FX01VTFRJUEFUSGAgcmVsaWVzIG9uIGBOVk1FX0NPUkVgLCB3aGljaCBpcyBpdHNlbGYgc2VsZWN0ZWQgYnkgYEJMS19ERVZfTlZNRWAuICBUaGVyZWZvcmUsIHRvIHByb3Blcmx5IHRlc3QgdGhlIG11bHRpcGF0aGluZyBmdW5jdGlvbmFsaXR5LCBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIEkgZW5hYmxlICpib3RoKiBgQkxLX0RFVl9OVk1FYCBhbmQgYE5WTUVfTVVMVElQQVRIYC4KCkZyb20gdGhlIGNvZGUsIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBpbXBvcnRhbnQgdG8gcmVhbGx5IGRpZyBpbnRvIGFyZTogYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AsIGBkaXNrX2FkZF9taXJyb3JgLCBgYmRldl9kaXNrX2NoYW5nZWRgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgdGhvcm91Z2hseSB2ZXR0ZWQuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgYG52bWVfZmFpbG92ZXJfcmVxYCBpcyBleHBvcnRlZC4gT2theSwgaXQmIzM5O3Mgbm90IHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyBpdCBtb3JlIGxpa2VseSB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCBwb3RlbnRpYWxseSBiZSBleHBvc2VkIHRvIGludGVyZXN0aW5nIGlucHV0cy4gVGhlIG90aGVyIGZ1bmN0aW9ucywgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCBsb29rIHNpZ25pZmljYW50IHRvby4KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgIGFuZCBgZGlza19hZGRfbWlycm9yYCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBsYXllci4gIGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgIHRha2VzIGEgYGdlbmRpc2tgIGFuZCBgZGlza19hZGRfbWlycm9yYCB0YWtlcyBhIGhlYWQgYW5kIG1pcnJvciBkaXNrLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19CTE9DS2AgaXMgYSBnaXZlbiwgdGhhdCYjMzk7cyBub3QgaW50ZXJlc3RpbmcuIEFsc28sIGBDT05GSUdfUENJYCBpcyBhIGRlcGVuZGVuY3kgZm9yIGBCTEtfREVWX05WTUVgLCB3aGljaCBpcyBmaW5lLgoKT2theSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UuIExvb2tpbmcgYXQgdGhlIGZpbGVzIG1vZGlmaWVkLCBpdCYjMzk7cyBtb2RpZnlpbmcgYGJsb2NrL2dlbmhkLmNgIGFuZCBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgIC0tIHRoZXNlIGFyZSB0aGUgY29yZSBibG9jayBsYXllciBjb2RlLiAgVGhlIE5WTWUgY2hhbmdlcyBhcmUgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AgYW5kIGBkcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY2AuIFRoaXMgaXMgcXVpdGUgYSBiaXQgbW9yZSBpbnRlZ3JhdGVkIHRoYW4gSSYjMzk7ZCBpbml0aWFsbHkgdGhvdWdodC4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9uYWxpdHksIGFuZCBkZWFsaW5nIHdpdGggcGFydGl0aW9uIGNsb25pbmcvbWlycm9yaW5nIGZvciBOVk1lIGRldmljZXMsIHRoaXMgc2VlbXMgaGlnaGx5IHdvcnRod2hpbGUgdG8gZnV6ei4gSXQmIzM5O3MgZGVhbGluZyB3aXRoIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZXF1ZXN0IGhhbmRsaW5nLiBNeSByZWNvbW1lbmRhdGlvbiBpczoKCmBXb3J0aEZ1enppbmc9dHJ1ZSwgRm9jdXNTeW1ib2xzPVsmIzM0O2JkZXZfY2xvbmVfcGFydGl0aW9ucyYjMzQ7LCAmIzM0O2Rpc2tfYWRkX21pcnJvciYjMzQ7LCAmIzM0O2JkZXZfZGlza19jaGFuZ2VkJiMzNDssICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OywgJiMzNDtudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QmIzM0OywgJiMzNDtudm1lX21wYXRoX2VuZF9yZXF1ZXN0JiMzNDtdLCBFbmFibGVDb25maWdzPVsmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LCAmIzM0O05WTUVfTVVMVElQQVRIJiMzNDtdYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JkZXZfY2xvbmVfcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtkaXNrX2FkZF9taXJyb3ImIzM0OywKICAgICYjMzQ7YmRldl9kaXNrX2NoYW5nZWQmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O252bWVfbXBhdGhfZW5kX3JlcXVlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gdG8gY2xvbmUgcGFydGl0aW9ucyBiZXR3ZWVuIGBnZW5kaXNrYHMgKG1pcnJvcnMpLCBzcGVjaWZpY2FsbHkgdXRpbGl6ZWQgYnkgdGhlIE5WTWUgbXVsdGlwYXRoIGRyaXZlciB0byBoYW5kbGUgcGFydGl0aW9ucyBvbiBtdWx0aXBhdGggZGV2aWNlcy4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgTlZNZSBtdWx0aXBhdGggcmVxdWVzdCByb3V0aW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBlbXVsYXRlZCBOVk1lIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JkZXZfY2xvbmVfcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtkaXNrX2FkZF9taXJyb3ImIzM0OywKICAgICYjMzQ7YmRldl9kaXNrX2NoYW5nZWQmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O252bWVfbXBhdGhfZW5kX3JlcXVlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gdG8gY2xvbmUgcGFydGl0aW9ucyBiZXR3ZWVuIGBnZW5kaXNrYHMgKG1pcnJvcnMpLCBzcGVjaWZpY2FsbHkgdXRpbGl6ZWQgYnkgdGhlIE5WTWUgbXVsdGlwYXRoIGRyaXZlciB0byBoYW5kbGUgcGFydGl0aW9ucyBvbiBtdWx0aXBhdGggZGV2aWNlcy4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgTlZNZSBtdWx0aXBhdGggcmVxdWVzdCByb3V0aW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBlbXVsYXRlZCBOVk1lIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIHN1cHBvcnQgcGFydGl0aW9uIGNsb25pbmcgYW5kIG1pcnJvcmluZyBhY3Jvc3MgYmxvY2sgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBuZXcgZmllbGRzIGluIGBzdHJ1Y3QgZ2VuZGlza2AgKHZpYSBhIHVuaW9uIGZvciBoZWFkL21pcnJvciByb2xlcykgYW5kIGFkZHMgZnVuY3Rpb25zIGxpa2UgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgLiBcblxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RydWN0dXJhbCBsaW5raW5nIChobGlzdCBvcGVyYXRpb25zKSwgbG9ja2luZyAoYG9wZW5fbXV0ZXhgKSwgYW5kIGJsb2NrIGRldmljZS9iaW8gcm91dGluZy4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIEFQSXMgKGxpa2UgaW9jdGxzIG9yIG5ldGxpbmspIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGUgcGFydGl0aW9uIGNsb25pbmcgcmVsaWVzIG9uIHJlYWRpbmcgZmllbGRzIGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBwYXJ0aXRpb25zIChgYmRfc3RhcnRfc2VjdGAsIGBiZF9ucl9zZWN0b3JzYCwgYGJkX21ldGFfaW5mb2ApLiBcblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgaGVhZCBkaXNrIGlzIGZyZWVkIGJlZm9yZSBpdHMgbWlycm9ycyksIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxvY2tpbmcgZGVhZGxvY2tzLiBUaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1OTYyYmVjYjg0OTNmMjgzMWM3YmFiZWFmY2YxYjJmMmI2MmI1ZGQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMDk6MDc6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IDUwYWJmZDkzMjg4NjEuLjUwMjgwNWU1ZjkyOWYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay5oCkBAIC02MzgsNiAmIzQzOzYzOCw3IEBAIGludCBiZGV2X2RlbF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8pOwogaW50IGJkZXZfcmVzaXplX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgaW50IHBhcnRubywgc2VjdG9yX3Qgc3RhcnQsCiAJCXNlY3Rvcl90IGxlbmd0aCk7CiB2b2lkIGRyb3BfcGFydGl0aW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpOwomIzQzO2ludCBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2spOwogCiB2b2lkIGJkZXZfc2V0X25yX3NlY3RvcnMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9ycyk7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IGYxOTkwYzdjZGZiOTEuLjM1MWFjOTNhYmVhYjMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZ2VuaGQuYwpAQCAtNDE5LDYgJiM0Mzs0MTksMTcgQEAgc3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJCWRpc2tfdWV2ZW50KGRpc2ssIEtPQkpfQUREKTsKIAl9CiAKJiM0MzsJaWYgKGRpc2stJmd0O2hlYWQpIHsKJiM0MzsJCWludCByZXQ7CiYjNDM7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7aGVhZC0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CQlyZXQgPSBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoZGlzayk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZGV2X2VycihkaXNrX3RvX2RldihkaXNrKSwgJiMzNDtjb3VsZCBub3QgY2xvbmUgcGFydGl0aW9ucyAoJWQpXG4mIzM0OywKJiM0MzsJCQkJcmV0KTsKJiM0MzsJfQomIzQzOwogCWJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stJmd0O2JkaSwgJmFtcDtkaXNrLSZndDtxdWV1ZS0mZ3Q7bGltaXRzKTsKIAlkaXNrX2FkZF9ldmVudHMoZGlzayk7CiAJc2V0X2JpdChHRF9BRERFRCwgJmFtcDtkaXNrLSZndDtzdGF0ZSk7CkBAIC00MzIsNiAmIzQzOzQ0Myw5IEBAIHN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLAogCXN0cnVjdCBkZXZpY2UgKmRkZXYgPSBkaXNrX3RvX2RldihkaXNrKTsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChkaXNrLSZndDtoZWFkICZhbXA7JmFtcDsgZGlza19oYXNfcGFydHNjYW4oZGlzaykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlpZiAoV0FSTl9PTl9PTkNFKGJkZXZfbnJfc2VjdG9ycyhkaXNrLSZndDtwYXJ0MCkgJmd0OyBCTEtfREVWX01BWF9TRUNUT1JTKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTcwOSw2ICYjNDM7NzIzLDEyIEBAIHN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJCWJkZXZfdW5oYXNoKHBhcnQpOwogCW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwogCiYjNDM7CWlmIChkaXNrLSZndDtoZWFkKSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7aGVhZC0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CQlobGlzdF9kZWwoJmFtcDtkaXNrLSZndDttaXJyb3Jfbm9kZSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogVGVsbCB0aGUgZmlsZSBzeXN0ZW0gdG8gd3JpdGUgYmFjayBhbGwgZGlydHkgZGF0YSBhbmQgc2h1dCBkb3duIGlmCiAJICogaXQgaGFzbiYjMzk7dCBiZWVuIG5vdGlmaWVkIGVhcmxpZXIuCkBAIC0xMzY5LDcgJiM0MzsxMzg5LDggQEAgc3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJeGFfZm9yX2VhY2goJmFtcDtncC0mZ3Q7cGFydF90YmwsIGlkeCwgaGQpIHsKLQkJaWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSAmYW1wOyZhbXA7ICFiZGV2X25yX3NlY3RvcnMoaGQpKQomIzQzOwkJaWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8IChncC0mZ3Q7ZmxhZ3MgJmFtcDsgR0VOSERfRkxfSElEREVOKSkpCiAJCQljb250aW51ZTsKIAogCQlpbmZsaWdodCA9IGJkZXZfY291bnRfaW5mbGlnaHQoaGQpOwpAQCAtMTUxMCw2ICYjNDM7MTUzMSwxOCBAQCBzdHJ1Y3QgZ2VuZGlzayAqX19hbGxvY19kaXNrX25vZGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBub2RlX2lkLAogCXJldHVybiBOVUxMOwogfQogCiYjNDM7dm9pZCBkaXNrX2FkZF9taXJyb3Ioc3RydWN0IGdlbmRpc2sgKmhlYWQsIHN0cnVjdCBnZW5kaXNrICptaXJyb3IpCiYjNDM7ewomIzQzOwlpZiAoIWhlYWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CVdBUk5fT05fT05DRSh0ZXN0X2JpdChHRF9BRERFRCwgJmFtcDttaXJyb3ItJmd0O3N0YXRlKSk7CiYjNDM7CW1pcnJvci0mZ3Q7aGVhZCA9IGhlYWQ7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0MzsJaGxpc3RfYWRkX2hlYWQoJmFtcDttaXJyb3ItJmd0O21pcnJvcl9ub2RlLCAmYW1wO2hlYWQtJmd0O21pcnJvcl9oZWFkKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7aGVhZC0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRpc2tfYWRkX21pcnJvcik7CiYjNDM7CiBzdHJ1Y3QgZ2VuZGlzayAqX19ibGtfYWxsb2NfZGlzayhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIGludCBub2RlLAogCQlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmxrY2xhc3MpCiB7CmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLmJhZjc5MmJlY2Y2OTkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCkBAIC02NDQsNiAmIzQzOzY0NCw3IEBAIHN0YXRpYyBpbnQgYmxrX2FkZF9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpCiB7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqcGFydDsKJiM0MzsJc3RydWN0IGdlbmRpc2sgKm1pcnJvcjsKIAl1bnNpZ25lZCBsb25nIGlkeDsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNzAzLDYgJiM0Mzs3MDQsMTMgQEAgaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpCiAJCWtvYmplY3RfdWV2ZW50KCZhbXA7ZGlza190b19kZXYoZGlzayktJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKIAl9CiAKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnkobWlycm9yLCAmYW1wO2Rpc2stJmd0O21pcnJvcl9oZWFkLAomIzQzOwkJCQltaXJyb3Jfbm9kZSkgewomIzQzOwkJcmV0ID0gYmRldl9jbG9uZV9wYXJ0aXRpb25zKG1pcnJvcik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KIC8qCkBAIC03MTEsNiAmIzQzOzcxOSw0MyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSkKICAqLwogRVhQT1JUX1NZTUJPTF9HUEwoYmRldl9kaXNrX2NoYW5nZWQpOwogCiYjNDM7aW50IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaWR4OwomIzQzOwomIzQzOwlpZiAoIWRpc2stJmd0O2hlYWQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwl4YV9mb3JfZWFjaF9zdGFydCgmYW1wO2Rpc2stJmd0O3BhcnRfdGJsLCBpZHgsIHBhcnQsIDEpIHsKJiM0MzsJCS8qIFNhbWUgYXMgYmRldl9kaXNrX2NoYW5nZWQoKSAqLwomIzQzOwkJYmRldl91bmhhc2gocGFydCk7CiYjNDM7CQlXQVJOX09OX09OQ0UoYXRvbWljX3JlYWQoJmFtcDtwYXJ0LSZndDtiZF9vcGVuZXJzKSk7CiYjNDM7CQlpbnZhbGlkYXRlX2JkZXYocGFydCk7CiYjNDM7CQlkcm9wX3BhcnRpdGlvbihwYXJ0KTsKJiM0MzsJfQomIzQzOwomIzQzOwl4YV9mb3JfZWFjaF9zdGFydCgmYW1wO2Rpc2stJmd0O2hlYWQtJmd0O3BhcnRfdGJsLCBpZHgsIHBhcnQsIDEpIHsKJiM0MzsJCXN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnRfYWRkZWQ7CiYjNDM7CiYjNDM7CQlwYXJ0X2FkZGVkID0gYWRkX3BhcnRpdGlvbihkaXNrLCBpZHgsIHBhcnQtJmd0O2JkX3N0YXJ0X3NlY3QsCiYjNDM7CQkJCQlwYXJ0LSZndDtiZF9ucl9zZWN0b3JzLCBBRERQQVJUX0ZMQUdfTk9ORSwKJiM0MzsJCQkJCXBhcnQtJmd0O2JkX21ldGFfaW5mbyk7CiYjNDM7CQlpZiAoSVNfRVJSKHBhcnRfYWRkZWQpKSB7CiYjNDM7CQkJaWYgKFBUUl9FUlIocGFydF9hZGRlZCkgIT0gLUVOWElPKSB7CiYjNDM7CQkJCWRldl9lcnIoZGlza190b19kZXYoZGlzayksICYjMzQ7cCVsZCBjb3VsZCBub3QgYmUgYWRkZWQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICAgICBpZHgsIHBhcnRfYWRkZWQpOwomIzQzOwkJCX0KJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsJCQlyZXR1cm4gUFRSX0VSUihwYXJ0X2FkZGVkKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogdm9pZCAqcmVhZF9wYXJ0X3NlY3RvcihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCBzZWN0b3JfdCBuLCBTZWN0b3IgKnApCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBzdGF0ZS0mZ3Q7ZGlzay0mZ3Q7cGFydDAtJmd0O2JkX21hcHBpbmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKaW5kZXggMTMyMmM2NzhmNGViOC4uYjk0YjlhM2JjZWIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwpAQCAtNDI3Myw2ICYjNDM7NDI3Myw3IEBAIHN0YXRpYyB2b2lkIG52bWVfYWxsb2NfbnMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbykKIAkJc3ByaW50ZihkaXNrLSZndDtkaXNrX25hbWUsICYjMzQ7bnZtZSVkYyVkbiVkJiMzNDssIGN0cmwtJmd0O3N1YnN5cy0mZ3Q7aW5zdGFuY2UsCiAJCQljdHJsLSZndDtpbnN0YW5jZSwgbnMtJmd0O2hlYWQtJmd0O2luc3RhbmNlKTsKIAkJZGlzay0mZ3Q7ZmxhZ3MgfD0gR0VOSERfRkxfSElEREVOOwomIzQzOwkJZGlza19hZGRfbWlycm9yKG5zLSZndDtoZWFkLSZndDtkaXNrLCBucy0mZ3Q7ZGlzayk7CiAJfSBlbHNlIGlmIChtdWx0aXBhdGgpIHsKIAkJc3ByaW50ZihkaXNrLSZndDtkaXNrX25hbWUsICYjMzQ7bnZtZSVkbiVkJiMzNDssIGN0cmwtJmd0O3N1YnN5cy0mZ3Q7aW5zdGFuY2UsCiAJCQlucy0mZ3Q7aGVhZC0mZ3Q7aW5zdGFuY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwppbmRleCA3NWRiYjU4Mjg2YTMyLi5iZDQwNTZmMWE5ZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwpAQCAtMTQ0LDYgJiM0MzsxNDQsMjMgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X2ZyZWV6ZShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cykKIAkJCWJsa19mcmVlemVfcXVldWVfc3RhcnQoaC0mZ3Q7ZGlzay0mZ3Q7cXVldWUpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZGlza190b19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLAomIzQzOwkJCQkJCXU4IHBhcnRubykKJiM0Mzt7CiYjNDM7CS8qIFF1aWNrIGxvb2t1cCBmb3Igd2hvbGUgZGlzayAqLwomIzQzOwlpZiAoIXBhcnRubykKJiM0MzsJCXJldHVybiBkaXNrLSZndDtwYXJ0MDsKJiM0MzsJcmV0dXJuIHhhX2xvYWQoJmFtcDtkaXNrLSZndDtwYXJ0X3RibCwgcGFydG5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLAomIzQzOwkJCQkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKJiM0Mzt7CiYjNDM7CWlmICghYmRldikKJiM0MzsJCXJldHVybiBkaXNrLSZndDtwYXJ0MDsKJiM0MzsJcmV0dXJuIG52bWVfZGlza190b19wYXJ0KGRpc2ssIGJkZXZfcGFydG5vKGJkZXYpKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IG52bWVfbnMgKm5zID0gcmVxLSZndDtxLSZndDtxdWV1ZWRhdGE7CkBAIC0xNjUsOCAmIzQzOzE4MiwxMCBAQCB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9sb2NrLCBmbGFncyk7Ci0JZm9yIChiaW8gPSByZXEtJmd0O2JpbzsgYmlvOyBiaW8gPSBiaW8tJmd0O2JpX25leHQpCi0JCWJpb19zZXRfZGV2KGJpbywgbnMtJmd0O2hlYWQtJmd0O2Rpc2stJmd0O3BhcnQwKTsKJiM0MzsJZm9yIChiaW8gPSByZXEtJmd0O2JpbzsgYmlvOyBiaW8gPSBiaW8tJmd0O2JpX25leHQpIHsKJiM0MzsJCWJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtJmd0O2hlYWQtJmd0O2Rpc2ssCiYjNDM7CQkJCWJpby0mZ3Q7YmlfYmRldikpOwomIzQzOwl9CiAJYmxrX3N0ZWFsX2Jpb3MoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9saXN0LCByZXEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9sb2NrLCBmbGFncyk7CiAKQEAgLTE5NCw4ICYjNDM7MjEzLDkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQogCQlyZXR1cm47CiAKIAludm1lX3JlcShycSktJmd0O2ZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7Ci0JbnZtZV9yZXEocnEpLSZndDtzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KGRpc2stJmd0O3BhcnQwLCByZXFfb3AocnEpLAotCQkJCQkJICAgICAgamlmZmllcyk7CiYjNDM7CW52bWVfcmVxKHJxKS0mZ3Q7c3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdCgKJiM0MzsJCQludm1lX3RvX2Rpc2tfcGFydChkaXNrLCBycS0mZ3Q7cGFydCksCiYjNDM7CQkJcmVxX29wKHJxKSwgamlmZmllcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpOwogCkBAIC0yMDgsNyAmIzQzOzIyOCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiAKIAlpZiAoIShudm1lX3JlcShycSktJmd0O2ZsYWdzICZhbXA7IE5WTUVfTVBBVEhfSU9fU1RBVFMpKQogCQlyZXR1cm47Ci0JYmRldl9lbmRfaW9fYWNjdChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzay0mZ3Q7cGFydDAsIHJlcV9vcChycSksCiYjNDM7CWJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtJmd0O2hlYWQtJmd0O2Rpc2ssCiYjNDM7CQkJIHJxLSZndDtwYXJ0KSwgcmVxX29wKHJxKSwKIAkJCSBibGtfcnFfYnl0ZXMocnEpICZndDsmZ3Q7IFNFQ1RPUl9TSElGVCwKIAkJCSBudm1lX3JlcShycSktJmd0O3N0YXJ0X3RpbWUpOwogfQpAQCAtNTMwLDExICYjNDM7NTUxLDIxIEBAIHN0YXRpYyBib29sIG52bWVfYXZhaWxhYmxlX3BhdGgoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCkKIAlyZXR1cm4gbnZtZV9tcGF0aF9xdWV1ZV9pZl9ub19wYXRoKGhlYWQpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZmluZF9wYXRoX2JkZXYoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCwKJiM0MzsJCQkJCQl1OCBwYXJ0bm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTsKJiM0MzsKJiM0MzsJaWYgKCFucykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gbnZtZV9kaXNrX3RvX3BhcnQobnMtJmd0O2Rpc2ssIHBhcnRubyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQgPSBiaW8tJmd0O2JpX2JkZXYtJmd0O2JkX2Rpc2stJmd0O3ByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkaXNrX3RvX2RldihoZWFkLSZndDtkaXNrKTsKLQlzdHJ1Y3QgbnZtZV9ucyAqbnM7CiYjNDM7CXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAJaW50IHNyY3VfaWR4OwogCiAJLyoKQEAgLTU0Nyw5ICYjNDM7NTc4LDkgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKQogCQlyZXR1cm47CiAKIAlzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7aGVhZC0mZ3Q7c3JjdSk7Ci0JbnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTsKLQlpZiAobGlrZWx5KG5zKSkgewotCQliaW9fc2V0X2RldihiaW8sIG5zLSZndDtkaXNrLSZndDtwYXJ0MCk7CiYjNDM7CWJkZXYgPSBudm1lX2ZpbmRfcGF0aF9iZGV2KGhlYWQsIGJkZXZfcGFydG5vKGJpby0mZ3Q7YmlfYmRldikpOwomIzQzOwlpZiAobGlrZWx5KGJkZXYpKSB7CiYjNDM7CQliaW9fc2V0X2RldihiaW8sIGJkZXYpOwogCQkvKgogCQkgKiBVc2UgQklPX1JFTUFQUEVEIHRvIHNraXAgYmlvX2NoZWNrX2VvZCgpIHdoZW4gdGhpcyBiaW8KIAkJICogZW50ZXJzIHN1Ym1pdF9iaW9fbm9hY2N0KCkgZm9yIHRoZSBwZXItcGF0aCBkZXZpY2UuIFRoZSBFT0QKQEAgLTU1Nyw3ICYjNDM7NTg4LDcgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKQogCQkgKi8KIAkJYmlvX3NldF9mbGFnKGJpbywgQklPX1JFTUFQUEVEKTsKIAkJYmlvLSZndDtiaV9vcGYgfD0gUkVRX05WTUVfTVBBVEg7Ci0JCXRyYWNlX2Jsb2NrX2Jpb19yZW1hcChiaW8sIGRpc2tfZGV2dChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzayksCiYjNDM7CQl0cmFjZV9ibG9ja19iaW9fcmVtYXAoYmlvLCBkaXNrX2RldnQoaGVhZC0mZ3Q7ZGlzayksCiAJCQkJICAgICAgYmlvLSZndDtiaV9pdGVyLmJpX3NlY3Rvcik7CiAJCXN1Ym1pdF9iaW9fbm9hY2N0KGJpbyk7CiAJfSBlbHNlIGlmIChudm1lX2F2YWlsYWJsZV9wYXRoKGhlYWQpKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCAyMGNiOGVkN2Q5ODdhLi43ZjM1NjNjMGY1NTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTE4Nyw2ICYjNDM7MTg3LDEzIEBAIHN0cnVjdCBnZW5kaXNrIHsKICNpZmRlZiBDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNsYXZlX2JkZXZzOwogI2VuZGlmCiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCBobGlzdF9oZWFkIG1pcnJvcl9oZWFkOwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQlzdHJ1Y3QgaGxpc3Rfbm9kZSBtaXJyb3Jfbm9kZTsKJiM0MzsJCQlzdHJ1Y3QgZ2VuZGlzayAqaGVhZDsKJiM0MzsJCX07CiYjNDM7CX07CiAJc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKnJhbmRvbTsKIAlzdHJ1Y3QgZGlza19ldmVudHMgKmV2OwogCkBAIC05NzcsNiAmIzQzOzk4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJkZXZfbnJfem9uZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIH0KIAogaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpOwomIzQzO3ZvaWQgZGlza19hZGRfbWlycm9yKHN0cnVjdCBnZW5kaXNrICpoZWFkLCBzdHJ1Y3QgZ2VuZGlzayAqbWlycm9yKTsKIAogdm9pZCBwdXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CiBzdHJ1Y3QgZ2VuZGlzayAqX19ibGtfYWxsb2NfZGlzayhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIGludCBub2RlLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgwOQoJCQkJCQkJb3V0cHV0OiAyNzgKCQkJCQkJCXRob3VnaHRzOiAxMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBCbG9jayBMYXllciBhbmQgTlZNZSBNdWx0aXBhdGggUGFydGl0aW9uIENsb25pbmcvTWlycm9yaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHJpZ29yb3VzbHkgYXNzZXNzIHBvdGVudGlhbCByaXNrcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcywgd2hpY2ggaXMgYSBrZXkgY29uY2VybiBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgd2l0aCBhIGtlZW4gZXllIGZvciBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlLCBlbmFibGluZyBwYXJ0aXRpb24gY2xvbmluZyBhbmQgbWlycm9yaW5nLCBwYXJ0aWN1bGFybHkgZm9yIE5WTWUgbXVsdGlwYXRoIHNldHVwcy4gSSBzZWUgYWRkaXRpb25zIGZvciBmdW5jdGlvbnMgbGlrZSBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCwgYGRpc2tfYWRkX21pcnJvcmAsIGFuZCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIE5WTWUtcmVsYXRlZCBmdW5jdGlvbnMgKGBudm1lX2Rpc2tfdG9fcGFydGAsIGV0Yy4pLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gbWV0aWN1bG91c2x5IGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBibG9jayBkZXZpY2Ugc3RydWN0dXJlcyDigJMgYHN0cnVjdCBnZW5kaXNrYCwgYHN0cnVjdCBibG9ja19kZXZpY2VgLCBhbmQgYHN0cnVjdCBiaW9gLiBUaGUgcGF0Y2ggYWRkcyBgbWlycm9yX2hlYWRgIGFuZCBgbWlycm9yX25vZGVgIHRvIGBzdHJ1Y3QgZ2VuZGlza2AsIGFuZCBtb2RpZmllcyB0aGluZ3MgbGlrZSBgZGlza3N0YXRzX3Nob3dgIHRvIHBvdGVudGlhbGx5IGhpZGUgcGFydGl0aW9ucy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB0aGVzZSBzdHJ1Y3R1cmUgY2hhbmdlcy4KCkkmIzM5O20gY2hlY2tpbmcgaWYgYW55IG5ldyBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgaGF2ZSB1bmluaXRpYWxpemVkIGZpZWxkcy4gSSYjMzk7bSBhbHNvIGVuc3VyaW5nIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY2hhbmdlcyB0aGF0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRvIGNvbnRyb2wgZmxvdy4gSXQgc2VlbXMgdW5saWtlbHkgYXQgZmlyc3QgZ2xhbmNlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4gYGRpc2tzdGF0c19zaG93YCBpcyBtb2RpZmllZCwgYnV0IHRoYXQgYXBwZWFycyB0byBiZSBqdXN0IHNraXBwaW5nIHNvbWUgZW50cmllcywgbm90IGFjdHVhbGx5IGV4cG9zaW5nIG5ldyBkYXRhLiBTbywgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gU2luY2UgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIHRoaXMgaXMgbG9va2luZyBzYWZlIHNvIGZhci4KClBvdGVudGlhbCBidWcgc291cmNlcyBhcmUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUgKGVzcGVjaWFsbHkgaWYgYGRpc2stJmd0O2hlYWRgIGlzIGZyZWVkIHByZW1hdHVyZWx5KSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGxvY2tpbmcgaXNzdWVzLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCBhbmQgSSYjMzk7bSBnbGFkIHRvIHNlZSB0aGF0IEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBjYXRjaCBhbGwgb2YgdGhlc2UuIFRoZXkmIzM5O3JlIG15IHNhZmV0eSBuZXQgaGVyZSwgYW5kIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKTm93LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoYXQgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgZnVuY3Rpb24gaW4gZGV0YWlsLiBJIHNlZSB0aGF0IGl0IGNsb25lcyBwYXJ0aXRpb25zLiBUaGUgaW1wb3J0YW50IHBhcnQgZm9yIG1lIGlzIHdoYXQgaXMgcGFzc2VkIHRvIHRoZSBgYWRkX3BhcnRpdGlvbmAgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSB3aGV0aGVyIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyB1c2VkLgoKSSBjYW4gY29uZmlybSB0aGF0IGl0IGNvcGllcyB0aGUgc3RhcnQgc2VjdG9yLCBudW1iZXIgb2Ygc2VjdG9ycyBhbmQgbWV0YSBpbmZvIGZyb20gdGhlIG9sZCBwYXJ0aXRpb24uIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBwYXNzZWQgdG8gYGFkZF9wYXJ0aXRpb25gLCB0aGF04oCZcyBnb29kLgoKTmV4dCwgSSYjMzk7bSBjaGVja2luZyBgZGlza19hZGRfbWlycm9yYC4gSSBzZWUgdGhhdCBgbWlycm9yX2hlYWRgIGFuZCBgbWlycm9yX25vZGVgIGFyZSBwYXJ0IG9mIGEgdW5pb24gd2l0aGluIGBzdHJ1Y3QgZ2VuZGlza2AuIEl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQuIEl0IG1lYW5zIHRoYXQgYSBgZ2VuZGlza2AgY2FuIGZ1bmN0aW9uIGFzIGVpdGhlciBhIGhlYWQgb3IgYSBtaXJyb3IsIGJ1dCBub3QgYm90aC4gTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgaGFuZGxlZCBzYWZlbHksIGVzcGVjaWFsbHkgYXJvdW5kIGluaXRpYWxpemF0aW9uLiBBZnRlciBhbmFseXppbmcgdGhpcyBtb3JlIGNsb3NlbHksIGl0IHNlZW1zIHRoYXQgaWYgaXQmIzM5O3MgYSBoZWFkLCBgbWlycm9yX2hlYWRgIGlzIHVzZWQsIGFuZCBpZiBpdCYjMzk7cyBhIG1pcnJvciwgYG1pcnJvcl9ub2RlYCBhbmQgYGhlYWRgIGFyZSB1c2VkLiBXaGVuIHRoZSBgZ2VuZGlza2AgaXMgYWxsb2NhdGVkLCBpdCYjMzk7cyB6ZXJvZWQgKHVzaW5nIGBremFsbG9jYCwgdHlwaWNhbGx5KSwgc28gYG1pcnJvcl9oZWFkYCBpcyBlbXB0eSB0byBiZWdpbiB3aXRoLiBUaGVuLCBpZiB0aGUgZGlzayBpcyBhIG1pcnJvciwgYG1pcnJvci0mZ3Q7aGVhZGAgaXMgc2V0LCBhbmQgYG1pcnJvci0mZ3Q7bWlycm9yX25vZGVgIGlzIGxpbmtlZCB0byBgaGVhZC0mZ3Q7bWlycm9yX2hlYWRgLiBJdCBsb29rcyBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuCgpGaW5hbCBjaGVjazogSXMgdGhlcmUgKmFueSogcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXRzIHdheSBpbnRvIHVzZXIgc3BhY2UsIG9yIGFmZmVjdGluZyBjb250cm9sIGZsb3c/IEFmdGVyIHRoaXMgdGhvcm91Z2ggcmV2aWV3LCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBpcyBubyByaXNrLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgbm90IG5lY2Vzc2FyeSBpbiB0aGlzIGNhc2UuIEtBU0FOIGFuZCBMT0NLREVQIG9mZmVyIGFkZXF1YXRlIHByb3RlY3Rpb24gYWdhaW5zdCB0aGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIGRlcmVmZXJlbmNlcywgYW5kIGRlYWRsb2Nrcy4gSSB3aWxsIGZvcm11bGF0ZSB0aGlzIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIHN1cHBvcnQgcGFydGl0aW9uIGNsb25pbmcgYW5kIG1pcnJvcmluZyBhY3Jvc3MgYmxvY2sgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBuZXcgZmllbGRzIGluIGBzdHJ1Y3QgZ2VuZGlza2AgKHZpYSBhIHVuaW9uIGZvciBoZWFkL21pcnJvciByb2xlcykgYW5kIGFkZHMgZnVuY3Rpb25zIGxpa2UgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgLiBcblxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RydWN0dXJhbCBsaW5raW5nIChobGlzdCBvcGVyYXRpb25zKSwgbG9ja2luZyAoYG9wZW5fbXV0ZXhgKSwgYW5kIGJsb2NrIGRldmljZS9iaW8gcm91dGluZy4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIEFQSXMgKGxpa2UgaW9jdGxzIG9yIG5ldGxpbmspIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGUgcGFydGl0aW9uIGNsb25pbmcgcmVsaWVzIG9uIHJlYWRpbmcgZmllbGRzIGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBwYXJ0aXRpb25zIChgYmRfc3RhcnRfc2VjdGAsIGBiZF9ucl9zZWN0b3JzYCwgYGJkX21ldGFfaW5mb2ApLiBcblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgaGVhZCBkaXNrIGlzIGZyZWVkIGJlZm9yZSBpdHMgbWlycm9ycyksIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxvY2tpbmcgZGVhZGxvY2tzLiBUaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIHN1cHBvcnQgcGFydGl0aW9uIGNsb25pbmcgYW5kIG1pcnJvcmluZyBhY3Jvc3MgYmxvY2sgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBuZXcgZmllbGRzIGluIGBzdHJ1Y3QgZ2VuZGlza2AgKHZpYSBhIHVuaW9uIGZvciBoZWFkL21pcnJvciByb2xlcykgYW5kIGFkZHMgZnVuY3Rpb25zIGxpa2UgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgLiBcblxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RydWN0dXJhbCBsaW5raW5nIChobGlzdCBvcGVyYXRpb25zKSwgbG9ja2luZyAoYG9wZW5fbXV0ZXhgKSwgYW5kIGJsb2NrIGRldmljZS9iaW8gcm91dGluZy4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIEFQSXMgKGxpa2UgaW9jdGxzIG9yIG5ldGxpbmspIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGUgcGFydGl0aW9uIGNsb25pbmcgcmVsaWVzIG9uIHJlYWRpbmcgZmllbGRzIGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBwYXJ0aXRpb25zIChgYmRfc3RhcnRfc2VjdGAsIGBiZF9ucl9zZWN0b3JzYCwgYGJkX21ldGFfaW5mb2ApLiBcblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgaGVhZCBkaXNrIGlzIGZyZWVkIGJlZm9yZSBpdHMgbWlycm9ycyksIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxvY2tpbmcgZGVhZGxvY2tzLiBUaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowNzozNi44MzY0MTcxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDMwMDgzOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlZNRVwiLFxuICAgIFwiTlZNRV9NVUxUSVBBVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiZGV2X2Nsb25lX3BhcnRpdGlvbnNcIixcbiAgICBcImRpc2tfYWRkX21pcnJvclwiLFxuICAgIFwiYmRldl9kaXNrX2NoYW5nZWRcIixcbiAgICBcIm52bWVfZmFpbG92ZXJfcmVxXCIsXG4gICAgXCJudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RcIixcbiAgICBcIm52bWVfbXBhdGhfZW5kX3JlcXVlc3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayBsYXllciBhbmQgTlZNZSBtdWx0aXBhdGggY29kZSB0byBzdXBwb3J0IHBhcnRpdGlvbiBjbG9uaW5nIGFuZCBtaXJyb3JpbmcgYWNyb3NzIGJsb2NrIGRldmljZXMuIEl0IGludHJvZHVjZXMgbmV3IGZpZWxkcyBpbiBgc3RydWN0IGdlbmRpc2tgICh2aWEgYSB1bmlvbiBmb3IgaGVhZC9taXJyb3Igcm9sZXMpIGFuZCBhZGRzIGZ1bmN0aW9ucyBsaWtlIGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgIGFuZCBgZGlza19hZGRfbWlycm9yYC4gXFxuXFxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RydWN0dXJhbCBsaW5raW5nIChobGlzdCBvcGVyYXRpb25zKSwgbG9ja2luZyAoYG9wZW5fbXV0ZXhgKSwgYW5kIGJsb2NrIGRldmljZS9iaW8gcm91dGluZy4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIEFQSXMgKGxpa2UgaW9jdGxzIG9yIG5ldGxpbmspIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGUgcGFydGl0aW9uIGNsb25pbmcgcmVsaWVzIG9uIHJlYWRpbmcgZmllbGRzIGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBwYXJ0aXRpb25zIChgYmRfc3RhcnRfc2VjdGAsIGBiZF9ucl9zZWN0b3JzYCwgYGJkX21ldGFfaW5mb2ApLiBcXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSBoZWFkIGRpc2sgaXMgZnJlZWQgYmVmb3JlIGl0cyBtaXJyb3JzKSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbG9ja2luZyBkZWFkbG9ja3MuIFRoZXNlIGNsYXNzZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gdG8gY2xvbmUgcGFydGl0aW9ucyBiZXR3ZWVuIGBnZW5kaXNrYHMgKG1pcnJvcnMpLCBzcGVjaWZpY2FsbHkgdXRpbGl6ZWQgYnkgdGhlIE5WTWUgbXVsdGlwYXRoIGRyaXZlciB0byBoYW5kbGUgcGFydGl0aW9ucyBvbiBtdWx0aXBhdGggZGV2aWNlcy4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgTlZNZSBtdWx0aXBhdGggcmVxdWVzdCByb3V0aW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBlbXVsYXRlZCBOVk1lIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjA3OjM2LjgzNjQyMjQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA3MzM0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1OTYyYmVjYjg0OTNmMjgzMWM3YmFiZWFmY2YxYjJmMmI2MmI1ZGQ4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjA3OjM1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcXG5pbmRleCA1MGFiZmQ5MzI4ODYxLi41MDI4MDVlNWY5MjlmIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay5oXFxuKysrIGIvYmxvY2svYmxrLmhcXG5AQCAtNjM4LDYgKzYzOCw3IEBAIGludCBiZGV2X2RlbF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8pO1xcbiBpbnQgYmRldl9yZXNpemVfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBpbnQgcGFydG5vLCBzZWN0b3JfdCBzdGFydCxcXG4gXFx0XFx0c2VjdG9yX3QgbGVuZ3RoKTtcXG4gdm9pZCBkcm9wX3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KTtcXG4raW50IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuIFxcbiB2b2lkIGJkZXZfc2V0X25yX3NlY3RvcnMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9ycyk7XFxuIFxcbmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuY1xcbmluZGV4IGYxOTkwYzdjZGZiOTEuLjM1MWFjOTNhYmVhYjMgMTAwNjQ0XFxuLS0tIGEvYmxvY2svZ2VuaGQuY1xcbisrKyBiL2Jsb2NrL2dlbmhkLmNcXG5AQCAtNDE5LDYgKzQxOSwxNyBAQCBzdGF0aWMgdm9pZCBhZGRfZGlza19maW5hbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFx0XFx0ZGlza191ZXZlbnQoZGlzaywgS09CSl9BREQpO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoZGlzay1cXHUwMDNlaGVhZCkge1xcbitcXHRcXHRpbnQgcmV0O1xcbitcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlaGVhZC1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcdFxcdHJldCA9IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhkaXNrKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VoZWFkLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0ZGV2X2VycihkaXNrX3RvX2RldihkaXNrKSwgXFxcImNvdWxkIG5vdCBjbG9uZSBwYXJ0aXRpb25zICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHJldCk7XFxuK1xcdH1cXG4rXFxuIFxcdGJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stXFx1MDAzZWJkaSwgXFx1MDAyNmRpc2stXFx1MDAzZXF1ZXVlLVxcdTAwM2VsaW1pdHMpO1xcbiBcXHRkaXNrX2FkZF9ldmVudHMoZGlzayk7XFxuIFxcdHNldF9iaXQoR0RfQURERUQsIFxcdTAwMjZkaXNrLVxcdTAwM2VzdGF0ZSk7XFxuQEAgLTQzMiw2ICs0NDMsOSBAQCBzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4gXFx0c3RydWN0IGRldmljZSAqZGRldiA9IGRpc2tfdG9fZGV2KGRpc2spO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKGRpc2stXFx1MDAzZWhlYWQgXFx1MDAyNlxcdTAwMjYgZGlza19oYXNfcGFydHNjYW4oZGlzaykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKFdBUk5fT05fT05DRShiZGV2X25yX3NlY3RvcnMoZGlzay1cXHUwMDNlcGFydDApIFxcdTAwM2UgQkxLX0RFVl9NQVhfU0VDVE9SUykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5AQCAtNzA5LDYgKzcyMywxMiBAQCBzdGF0aWMgdm9pZCBfX2RlbF9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHRcXHRiZGV2X3VuaGFzaChwYXJ0KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4gXFxuK1xcdGlmIChkaXNrLVxcdTAwM2VoZWFkKSB7XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRpc2stXFx1MDAzZWhlYWQtXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXHRcXHRobGlzdF9kZWwoXFx1MDAyNmRpc2stXFx1MDAzZW1pcnJvcl9ub2RlKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VoZWFkLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogVGVsbCB0aGUgZmlsZSBzeXN0ZW0gdG8gd3JpdGUgYmFjayBhbGwgZGlydHkgZGF0YSBhbmQgc2h1dCBkb3duIGlmXFxuIFxcdCAqIGl0IGhhc24ndCBiZWVuIG5vdGlmaWVkIGVhcmxpZXIuXFxuQEAgLTEzNjksNyArMTM4OSw4IEBAIHN0YXRpYyBpbnQgZGlza3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXFmLCB2b2lkICp2KVxcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2Z3AtXFx1MDAzZXBhcnRfdGJsLCBpZHgsIGhkKSB7XFxuLVxcdFxcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXFx1MDAyNlxcdTAwMjYgIWJkZXZfbnJfc2VjdG9ycyhoZCkpXFxuK1xcdFxcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICghYmRldl9ucl9zZWN0b3JzKGhkKSB8fCAoZ3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aW5mbGlnaHQgPSBiZGV2X2NvdW50X2luZmxpZ2h0KGhkKTtcXG5AQCAtMTUxMCw2ICsxNTMxLDE4IEBAIHN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbit2b2lkIGRpc2tfYWRkX21pcnJvcihzdHJ1Y3QgZ2VuZGlzayAqaGVhZCwgc3RydWN0IGdlbmRpc2sgKm1pcnJvcilcXG4re1xcbitcXHRpZiAoIWhlYWQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0V0FSTl9PTl9PTkNFKHRlc3RfYml0KEdEX0FEREVELCBcXHUwMDI2bWlycm9yLVxcdTAwM2VzdGF0ZSkpO1xcbitcXHRtaXJyb3ItXFx1MDAzZWhlYWQgPSBoZWFkO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZoZWFkLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNm1pcnJvci1cXHUwMDNlbWlycm9yX25vZGUsIFxcdTAwMjZoZWFkLVxcdTAwM2VtaXJyb3JfaGVhZCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2aGVhZC1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZGlza19hZGRfbWlycm9yKTtcXG4rXFxuIHN0cnVjdCBnZW5kaXNrICpfX2Jsa19hbGxvY19kaXNrKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGUsXFxuIFxcdFxcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqbGtjbGFzcylcXG4ge1xcbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXFxuaW5kZXggYjVjNTliNzljYTdjYi4uYmFmNzkyYmVjZjY5OSAxMDA2NDRcXG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xcbisrKyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXFxuQEAgLTY0NCw2ICs2NDQsNyBAQCBzdGF0aWMgaW50IGJsa19hZGRfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpXFxuIHtcXG4gXFx0c3RydWN0IGJsb2NrX2RldmljZSAqcGFydDtcXG4rXFx0c3RydWN0IGdlbmRpc2sgKm1pcnJvcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBpZHg7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG5AQCAtNzAzLDYgKzcwNCwxMyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcXG4gXFx0XFx0a29iamVjdF91ZXZlbnQoXFx1MDAyNmRpc2tfdG9fZGV2KGRpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIFxcdH1cXG4gXFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KG1pcnJvciwgXFx1MDAyNmRpc2stXFx1MDAzZW1pcnJvcl9oZWFkLFxcbitcXHRcXHRcXHRcXHRtaXJyb3Jfbm9kZSkge1xcbitcXHRcXHRyZXQgPSBiZGV2X2Nsb25lX3BhcnRpdGlvbnMobWlycm9yKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gLypcXG5AQCAtNzExLDYgKzcxOSw0MyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcXG4gICovXFxuIEVYUE9SVF9TWU1CT0xfR1BMKGJkZXZfZGlza19jaGFuZ2VkKTtcXG4gXFxuK2ludCBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuK3tcXG4rXFx0c3RydWN0IGJsb2NrX2RldmljZSAqcGFydDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpZHg7XFxuK1xcbitcXHRpZiAoIWRpc2stXFx1MDAzZWhlYWQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcdHhhX2Zvcl9lYWNoX3N0YXJ0KFxcdTAwMjZkaXNrLVxcdTAwM2VwYXJ0X3RibCwgaWR4LCBwYXJ0LCAxKSB7XFxuK1xcdFxcdC8qIFNhbWUgYXMgYmRldl9kaXNrX2NoYW5nZWQoKSAqL1xcbitcXHRcXHRiZGV2X3VuaGFzaChwYXJ0KTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKGF0b21pY19yZWFkKFxcdTAwMjZwYXJ0LVxcdTAwM2ViZF9vcGVuZXJzKSk7XFxuK1xcdFxcdGludmFsaWRhdGVfYmRldihwYXJ0KTtcXG4rXFx0XFx0ZHJvcF9wYXJ0aXRpb24ocGFydCk7XFxuK1xcdH1cXG4rXFxuK1xcdHhhX2Zvcl9lYWNoX3N0YXJ0KFxcdTAwMjZkaXNrLVxcdTAwM2VoZWFkLVxcdTAwM2VwYXJ0X3RibCwgaWR4LCBwYXJ0LCAxKSB7XFxuK1xcdFxcdHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnRfYWRkZWQ7XFxuK1xcbitcXHRcXHRwYXJ0X2FkZGVkID0gYWRkX3BhcnRpdGlvbihkaXNrLCBpZHgsIHBhcnQtXFx1MDAzZWJkX3N0YXJ0X3NlY3QsXFxuK1xcdFxcdFxcdFxcdFxcdHBhcnQtXFx1MDAzZWJkX25yX3NlY3RvcnMsIEFERFBBUlRfRkxBR19OT05FLFxcbitcXHRcXHRcXHRcXHRcXHRwYXJ0LVxcdTAwM2ViZF9tZXRhX2luZm8pO1xcbitcXHRcXHRpZiAoSVNfRVJSKHBhcnRfYWRkZWQpKSB7XFxuK1xcdFxcdFxcdGlmIChQVFJfRVJSKHBhcnRfYWRkZWQpICE9IC1FTlhJTykge1xcbitcXHRcXHRcXHRcXHRkZXZfZXJyKGRpc2tfdG9fZGV2KGRpc2spLCBcXFwicCVsZCBjb3VsZCBub3QgYmUgYWRkZWQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGlkeCwgcGFydF9hZGRlZCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocGFydF9hZGRlZCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHZvaWQgKnJlYWRfcGFydF9zZWN0b3Ioc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSwgc2VjdG9yX3QgbiwgU2VjdG9yICpwKVxcbiB7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3RhdGUtXFx1MDAzZWRpc2stXFx1MDAzZXBhcnQwLVxcdTAwM2ViZF9tYXBwaW5nO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcXG5pbmRleCAxMzIyYzY3OGY0ZWI4Li5iOTRiOWEzYmNlYjI4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbkBAIC00MjczLDYgKzQyNzMsNyBAQCBzdGF0aWMgdm9pZCBudm1lX2FsbG9jX25zKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuIFxcdFxcdHNwcmludGYoZGlzay1cXHUwMDNlZGlza19uYW1lLCBcXFwibnZtZSVkYyVkbiVkXFxcIiwgY3RybC1cXHUwMDNlc3Vic3lzLVxcdTAwM2VpbnN0YW5jZSxcXG4gXFx0XFx0XFx0Y3RybC1cXHUwMDNlaW5zdGFuY2UsIG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VpbnN0YW5jZSk7XFxuIFxcdFxcdGRpc2stXFx1MDAzZWZsYWdzIHw9IEdFTkhEX0ZMX0hJRERFTjtcXG4rXFx0XFx0ZGlza19hZGRfbWlycm9yKG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrLCBucy1cXHUwMDNlZGlzayk7XFxuIFxcdH0gZWxzZSBpZiAobXVsdGlwYXRoKSB7XFxuIFxcdFxcdHNwcmludGYoZGlzay1cXHUwMDNlZGlza19uYW1lLCBcXFwibnZtZSVkbiVkXFxcIiwgY3RybC1cXHUwMDNlc3Vic3lzLVxcdTAwM2VpbnN0YW5jZSxcXG4gXFx0XFx0XFx0bnMtXFx1MDAzZWhlYWQtXFx1MDAzZWluc3RhbmNlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xcbmluZGV4IDc1ZGJiNTgyODZhMzIuLmJkNDA1NmYxYTlmMjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xcbkBAIC0xNDQsNiArMTQ0LDIzIEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9mcmVlemUoc3RydWN0IG52bWVfc3Vic3lzdGVtICpzdWJzeXMpXFxuIFxcdFxcdFxcdGJsa19mcmVlemVfcXVldWVfc3RhcnQoaC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV9kaXNrX3RvX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHU4IHBhcnRubylcXG4re1xcbitcXHQvKiBRdWljayBsb29rdXAgZm9yIHdob2xlIGRpc2sgKi9cXG4rXFx0aWYgKCFwYXJ0bm8pXFxuK1xcdFxcdHJldHVybiBkaXNrLVxcdTAwM2VwYXJ0MDtcXG4rXFx0cmV0dXJuIHhhX2xvYWQoXFx1MDAyNmRpc2stXFx1MDAzZXBhcnRfdGJsLCBwYXJ0bm8pO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuK3tcXG4rXFx0aWYgKCFiZGV2KVxcbitcXHRcXHRyZXR1cm4gZGlzay1cXHUwMDNlcGFydDA7XFxuK1xcdHJldHVybiBudm1lX2Rpc2tfdG9fcGFydChkaXNrLCBiZGV2X3BhcnRubyhiZGV2KSk7XFxuK31cXG4rXFxuIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtXFx1MDAzZXEtXFx1MDAzZXF1ZXVlZGF0YTtcXG5AQCAtMTY1LDggKzE4MiwxMCBAQCB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuIFxcdH1cXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZucy1cXHUwMDNlaGVhZC1cXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XFxuLVxcdGZvciAoYmlvID0gcmVxLVxcdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVxcdTAwM2ViaV9uZXh0KVxcbi1cXHRcXHRiaW9fc2V0X2RldihiaW8sIG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrLVxcdTAwM2VwYXJ0MCk7XFxuK1xcdGZvciAoYmlvID0gcmVxLVxcdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVxcdTAwM2ViaV9uZXh0KSB7XFxuK1xcdFxcdGJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2ssXFxuK1xcdFxcdFxcdFxcdGJpby1cXHUwMDNlYmlfYmRldikpO1xcbitcXHR9XFxuIFxcdGJsa19zdGVhbF9iaW9zKFxcdTAwMjZucy1cXHUwMDNlaGVhZC1cXHUwMDNlcmVxdWV1ZV9saXN0LCByZXEpO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZucy1cXHUwMDNlaGVhZC1cXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XFxuIFxcbkBAIC0xOTQsOCArMjEzLDkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRudm1lX3JlcShycSktXFx1MDAzZWZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7XFxuLVxcdG52bWVfcmVxKHJxKS1cXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChkaXNrLVxcdTAwM2VwYXJ0MCwgcmVxX29wKHJxKSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgamlmZmllcyk7XFxuK1xcdG52bWVfcmVxKHJxKS1cXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChcXG4rXFx0XFx0XFx0bnZtZV90b19kaXNrX3BhcnQoZGlzaywgcnEtXFx1MDAzZXBhcnQpLFxcbitcXHRcXHRcXHRyZXFfb3AocnEpLCBqaWZmaWVzKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpO1xcbiBcXG5AQCAtMjA4LDcgKzIyOCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIFxcbiBcXHRpZiAoIShudm1lX3JlcShycSktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTlZNRV9NUEFUSF9JT19TVEFUUykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0YmRldl9lbmRfaW9fYWNjdChucy1cXHUwMDNlaGVhZC1cXHUwMDNlZGlzay1cXHUwMDNlcGFydDAsIHJlcV9vcChycSksXFxuK1xcdGJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2ssXFxuK1xcdFxcdFxcdCBycS1cXHUwMDNlcGFydCksIHJlcV9vcChycSksXFxuIFxcdFxcdFxcdCBibGtfcnFfYnl0ZXMocnEpIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVCxcXG4gXFx0XFx0XFx0IG52bWVfcmVxKHJxKS1cXHUwMDNlc3RhcnRfdGltZSk7XFxuIH1cXG5AQCAtNTMwLDExICs1NTEsMjEgQEAgc3RhdGljIGJvb2wgbnZtZV9hdmFpbGFibGVfcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxcbiBcXHRyZXR1cm4gbnZtZV9tcGF0aF9xdWV1ZV9pZl9ub19wYXRoKGhlYWQpO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV9maW5kX3BhdGhfYmRldihzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1OCBwYXJ0bm8pXFxuK3tcXG4rXFx0c3RydWN0IG52bWVfbnMgKm5zID0gbnZtZV9maW5kX3BhdGgoaGVhZCk7XFxuK1xcbitcXHRpZiAoIW5zKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIG52bWVfZGlza190b19wYXJ0KG5zLVxcdTAwM2VkaXNrLCBwYXJ0bm8pO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuIHtcXG4gXFx0c3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCA9IGJpby1cXHUwMDNlYmlfYmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkaXNrX3RvX2RldihoZWFkLVxcdTAwM2VkaXNrKTtcXG4tXFx0c3RydWN0IG52bWVfbnMgKm5zO1xcbitcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2O1xcbiBcXHRpbnQgc3JjdV9pZHg7XFxuIFxcbiBcXHQvKlxcbkBAIC01NDcsOSArNTc4LDkgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZoZWFkLVxcdTAwM2VzcmN1KTtcXG4tXFx0bnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTtcXG4tXFx0aWYgKGxpa2VseShucykpIHtcXG4tXFx0XFx0YmlvX3NldF9kZXYoYmlvLCBucy1cXHUwMDNlZGlzay1cXHUwMDNlcGFydDApO1xcbitcXHRiZGV2ID0gbnZtZV9maW5kX3BhdGhfYmRldihoZWFkLCBiZGV2X3BhcnRubyhiaW8tXFx1MDAzZWJpX2JkZXYpKTtcXG4rXFx0aWYgKGxpa2VseShiZGV2KSkge1xcbitcXHRcXHRiaW9fc2V0X2RldihiaW8sIGJkZXYpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBVc2UgQklPX1JFTUFQUEVEIHRvIHNraXAgYmlvX2NoZWNrX2VvZCgpIHdoZW4gdGhpcyBiaW9cXG4gXFx0XFx0ICogZW50ZXJzIHN1Ym1pdF9iaW9fbm9hY2N0KCkgZm9yIHRoZSBwZXItcGF0aCBkZXZpY2UuIFRoZSBFT0RcXG5AQCAtNTU3LDcgKzU4OCw3IEBAIHN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19SRU1BUFBFRCk7XFxuIFxcdFxcdGJpby1cXHUwMDNlYmlfb3BmIHw9IFJFUV9OVk1FX01QQVRIO1xcbi1cXHRcXHR0cmFjZV9ibG9ja19iaW9fcmVtYXAoYmlvLCBkaXNrX2RldnQobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2spLFxcbitcXHRcXHR0cmFjZV9ibG9ja19iaW9fcmVtYXAoYmlvLCBkaXNrX2RldnQoaGVhZC1cXHUwMDNlZGlzayksXFxuIFxcdFxcdFxcdFxcdCAgICAgIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IpO1xcbiBcXHRcXHRzdWJtaXRfYmlvX25vYWNjdChiaW8pO1xcbiBcXHR9IGVsc2UgaWYgKG52bWVfYXZhaWxhYmxlX3BhdGgoaGVhZCkpIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5pbmRleCAyMGNiOGVkN2Q5ODdhLi43ZjM1NjNjMGY1NTMzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTE4Nyw2ICsxODcsMTMgQEAgc3RydWN0IGdlbmRpc2sge1xcbiAjaWZkZWYgQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgc2xhdmVfYmRldnM7XFxuICNlbmRpZlxcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCBobGlzdF9oZWFkIG1pcnJvcl9oZWFkO1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBtaXJyb3Jfbm9kZTtcXG4rXFx0XFx0XFx0c3RydWN0IGdlbmRpc2sgKmhlYWQ7XFxuK1xcdFxcdH07XFxuK1xcdH07XFxuIFxcdHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICpyYW5kb207XFxuIFxcdHN0cnVjdCBkaXNrX2V2ZW50cyAqZXY7XFxuIFxcbkBAIC05NzcsNiArOTg0LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9ucl96b25lcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiB9XFxuIFxcbiBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSk7XFxuK3ZvaWQgZGlza19hZGRfbWlycm9yKHN0cnVjdCBnZW5kaXNrICpoZWFkLCBzdHJ1Y3QgZ2VuZGlzayAqbWlycm9yKTtcXG4gXFxuIHZvaWQgcHV0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbiBzdHJ1Y3QgZ2VuZGlzayAqX19ibGtfYWxsb2NfZGlzayhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIGludCBub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowNzozNy4zNDc3MTY3NTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNTIwMDEzODIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIk5WTUVfTVVMVElQQVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmRldl9jbG9uZV9wYXJ0aXRpb25zXCIsXG4gICAgXCJkaXNrX2FkZF9taXJyb3JcIixcbiAgICBcImJkZXZfZGlza19jaGFuZ2VkXCIsXG4gICAgXCJudm1lX2ZhaWxvdmVyX3JlcVwiLFxuICAgIFwibnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0XCIsXG4gICAgXCJudm1lX21wYXRoX2VuZF9yZXF1ZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gdG8gY2xvbmUgcGFydGl0aW9ucyBiZXR3ZWVuIGBnZW5kaXNrYHMgKG1pcnJvcnMpLCBzcGVjaWZpY2FsbHkgdXRpbGl6ZWQgYnkgdGhlIE5WTWUgbXVsdGlwYXRoIGRyaXZlciB0byBoYW5kbGUgcGFydGl0aW9ucyBvbiBtdWx0aXBhdGggZGV2aWNlcy4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgTlZNZSBtdWx0aXBhdGggcmVxdWVzdCByb3V0aW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBlbXVsYXRlZCBOVk1lIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU5NjJiZWNiODQ5M2YyODMxYzdiYWJlYWZjZjFiMmYyYjYyYjVkZDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwOTowNzozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcbmluZGV4IDUwYWJmZDkzMjg4NjEuLjUwMjgwNWU1ZjkyOWYgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGsuaFxuKysrIGIvYmxvY2svYmxrLmhcbkBAIC02MzgsNiArNjM4LDcgQEAgaW50IGJkZXZfZGVsX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgaW50IHBhcnRubyk7XG4gaW50IGJkZXZfcmVzaXplX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgaW50IHBhcnRubywgc2VjdG9yX3Qgc3RhcnQsXG4gXHRcdHNlY3Rvcl90IGxlbmd0aCk7XG4gdm9pZCBkcm9wX3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KTtcbitpbnQgYmRldl9jbG9uZV9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiBcbiB2b2lkIGJkZXZfc2V0X25yX3NlY3RvcnMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9ycyk7XG4gXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcbmluZGV4IGYxOTkwYzdjZGZiOTEuLjM1MWFjOTNhYmVhYjMgMTAwNjQ0XG4tLS0gYS9ibG9jay9nZW5oZC5jXG4rKysgYi9ibG9jay9nZW5oZC5jXG5AQCAtNDE5LDYgKzQxOSwxNyBAQCBzdGF0aWMgdm9pZCBhZGRfZGlza19maW5hbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGlza191ZXZlbnQoZGlzaywgS09CSl9BREQpO1xuIFx0fVxuIFxuK1x0aWYgKGRpc2stXHUwMDNlaGVhZCkge1xuK1x0XHRpbnQgcmV0O1xuK1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlaGVhZC1cdTAwM2VvcGVuX211dGV4KTtcbitcdFx0cmV0ID0gYmRldl9jbG9uZV9wYXJ0aXRpb25zKGRpc2spO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGRldl9lcnIoZGlza190b19kZXYoZGlzayksIFwiY291bGQgbm90IGNsb25lIHBhcnRpdGlvbnMgKCVkKVxcblwiLFxuK1x0XHRcdFx0cmV0KTtcbitcdH1cbitcbiBcdGJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stXHUwMDNlYmRpLCBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cyk7XG4gXHRkaXNrX2FkZF9ldmVudHMoZGlzayk7XG4gXHRzZXRfYml0KEdEX0FEREVELCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcbkBAIC00MzIsNiArNDQzLDkgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRzdHJ1Y3QgZGV2aWNlICpkZGV2ID0gZGlza190b19kZXYoZGlzayk7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGRpc2stXHUwMDNlaGVhZCBcdTAwMjZcdTAwMjYgZGlza19oYXNfcGFydHNjYW4oZGlzaykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKFdBUk5fT05fT05DRShiZGV2X25yX3NlY3RvcnMoZGlzay1cdTAwM2VwYXJ0MCkgXHUwMDNlIEJMS19ERVZfTUFYX1NFQ1RPUlMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC03MDksNiArNzIzLDEyIEBAIHN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRcdGJkZXZfdW5oYXNoKHBhcnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4gXG4rXHRpZiAoZGlzay1cdTAwM2VoZWFkKSB7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0XHRobGlzdF9kZWwoXHUwMDI2ZGlzay1cdTAwM2VtaXJyb3Jfbm9kZSk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZWhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogVGVsbCB0aGUgZmlsZSBzeXN0ZW0gdG8gd3JpdGUgYmFjayBhbGwgZGlydHkgZGF0YSBhbmQgc2h1dCBkb3duIGlmXG4gXHQgKiBpdCBoYXNuJ3QgYmVlbiBub3RpZmllZCBlYXJsaWVyLlxuQEAgLTEzNjksNyArMTM4OSw4IEBAIHN0YXRpYyBpbnQgZGlza3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXFmLCB2b2lkICp2KVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0eGFfZm9yX2VhY2goXHUwMDI2Z3AtXHUwMDNlcGFydF90YmwsIGlkeCwgaGQpIHtcbi1cdFx0aWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSBcdTAwMjZcdTAwMjYgIWJkZXZfbnJfc2VjdG9ycyhoZCkpXG4rXHRcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJkZXZfbnJfc2VjdG9ycyhoZCkgfHwgKGdwLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aW5mbGlnaHQgPSBiZGV2X2NvdW50X2luZmxpZ2h0KGhkKTtcbkBAIC0xNTEwLDYgKzE1MzEsMTggQEAgc3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbit2b2lkIGRpc2tfYWRkX21pcnJvcihzdHJ1Y3QgZ2VuZGlzayAqaGVhZCwgc3RydWN0IGdlbmRpc2sgKm1pcnJvcilcbit7XG4rXHRpZiAoIWhlYWQpXG4rXHRcdHJldHVybjtcbitcdFdBUk5fT05fT05DRSh0ZXN0X2JpdChHRF9BRERFRCwgXHUwMDI2bWlycm9yLVx1MDAzZXN0YXRlKSk7XG4rXHRtaXJyb3ItXHUwMDNlaGVhZCA9IGhlYWQ7XG4rXHRtdXRleF9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRobGlzdF9hZGRfaGVhZChcdTAwMjZtaXJyb3ItXHUwMDNlbWlycm9yX25vZGUsIFx1MDAyNmhlYWQtXHUwMDNlbWlycm9yX2hlYWQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGRpc2tfYWRkX21pcnJvcik7XG4rXG4gc3RydWN0IGdlbmRpc2sgKl9fYmxrX2FsbG9jX2Rpc2soc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBpbnQgbm9kZSxcbiBcdFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxuIHtcbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG5pbmRleCBiNWM1OWI3OWNhN2NiLi5iYWY3OTJiZWNmNjk5IDEwMDY0NFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbisrKyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG5AQCAtNjQ0LDYgKzY0NCw3IEBAIHN0YXRpYyBpbnQgYmxrX2FkZF9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIGludCBiZGV2X2Rpc2tfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYm9vbCBpbnZhbGlkYXRlKVxuIHtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQ7XG4rXHRzdHJ1Y3QgZ2VuZGlzayAqbWlycm9yO1xuIFx0dW5zaWduZWQgbG9uZyBpZHg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbkBAIC03MDMsNiArNzA0LDEzIEBAIGludCBiZGV2X2Rpc2tfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYm9vbCBpbnZhbGlkYXRlKVxuIFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2RldihkaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHR9XG4gXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShtaXJyb3IsIFx1MDAyNmRpc2stXHUwMDNlbWlycm9yX2hlYWQsXG4rXHRcdFx0XHRtaXJyb3Jfbm9kZSkge1xuK1x0XHRyZXQgPSBiZGV2X2Nsb25lX3BhcnRpdGlvbnMobWlycm9yKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRicmVhaztcbitcdH1cbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIC8qXG5AQCAtNzExLDYgKzcxOSw0MyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcbiAgKi9cbiBFWFBPUlRfU1lNQk9MX0dQTChiZGV2X2Rpc2tfY2hhbmdlZCk7XG4gXG4raW50IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbit7XG4rXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0O1xuK1x0dW5zaWduZWQgbG9uZyBpZHg7XG4rXG4rXHRpZiAoIWRpc2stXHUwMDNlaGVhZClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXHR4YV9mb3JfZWFjaF9zdGFydChcdTAwMjZkaXNrLVx1MDAzZXBhcnRfdGJsLCBpZHgsIHBhcnQsIDEpIHtcbitcdFx0LyogU2FtZSBhcyBiZGV2X2Rpc2tfY2hhbmdlZCgpICovXG4rXHRcdGJkZXZfdW5oYXNoKHBhcnQpO1xuK1x0XHRXQVJOX09OX09OQ0UoYXRvbWljX3JlYWQoXHUwMDI2cGFydC1cdTAwM2ViZF9vcGVuZXJzKSk7XG4rXHRcdGludmFsaWRhdGVfYmRldihwYXJ0KTtcbitcdFx0ZHJvcF9wYXJ0aXRpb24ocGFydCk7XG4rXHR9XG4rXG4rXHR4YV9mb3JfZWFjaF9zdGFydChcdTAwMjZkaXNrLVx1MDAzZWhlYWQtXHUwMDNlcGFydF90YmwsIGlkeCwgcGFydCwgMSkge1xuK1x0XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0X2FkZGVkO1xuK1xuK1x0XHRwYXJ0X2FkZGVkID0gYWRkX3BhcnRpdGlvbihkaXNrLCBpZHgsIHBhcnQtXHUwMDNlYmRfc3RhcnRfc2VjdCxcbitcdFx0XHRcdFx0cGFydC1cdTAwM2ViZF9ucl9zZWN0b3JzLCBBRERQQVJUX0ZMQUdfTk9ORSxcbitcdFx0XHRcdFx0cGFydC1cdTAwM2ViZF9tZXRhX2luZm8pO1xuK1x0XHRpZiAoSVNfRVJSKHBhcnRfYWRkZWQpKSB7XG4rXHRcdFx0aWYgKFBUUl9FUlIocGFydF9hZGRlZCkgIT0gLUVOWElPKSB7XG4rXHRcdFx0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KGRpc2spLCBcInAlbGQgY291bGQgbm90IGJlIGFkZGVkOiAlcGVcXG5cIixcbitcdFx0XHRcdCAgICAgICBpZHgsIHBhcnRfYWRkZWQpO1xuK1x0XHRcdH1cbitcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihwYXJ0X2FkZGVkKTtcbitcdFx0fVxuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gdm9pZCAqcmVhZF9wYXJ0X3NlY3RvcihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCBzZWN0b3JfdCBuLCBTZWN0b3IgKnApXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBzdGF0ZS1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwLVx1MDAzZWJkX21hcHBpbmc7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5pbmRleCAxMzIyYzY3OGY0ZWI4Li5iOTRiOWEzYmNlYjI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbkBAIC00MjczLDYgKzQyNzMsNyBAQCBzdGF0aWMgdm9pZCBudm1lX2FsbG9jX25zKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXG4gXHRcdHNwcmludGYoZGlzay1cdTAwM2VkaXNrX25hbWUsIFwibnZtZSVkYyVkbiVkXCIsIGN0cmwtXHUwMDNlc3Vic3lzLVx1MDAzZWluc3RhbmNlLFxuIFx0XHRcdGN0cmwtXHUwMDNlaW5zdGFuY2UsIG5zLVx1MDAzZWhlYWQtXHUwMDNlaW5zdGFuY2UpO1xuIFx0XHRkaXNrLVx1MDAzZWZsYWdzIHw9IEdFTkhEX0ZMX0hJRERFTjtcbitcdFx0ZGlza19hZGRfbWlycm9yKG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzaywgbnMtXHUwMDNlZGlzayk7XG4gXHR9IGVsc2UgaWYgKG11bHRpcGF0aCkge1xuIFx0XHRzcHJpbnRmKGRpc2stXHUwMDNlZGlza19uYW1lLCBcIm52bWUlZG4lZFwiLCBjdHJsLVx1MDAzZXN1YnN5cy1cdTAwM2VpbnN0YW5jZSxcbiBcdFx0XHRucy1cdTAwM2VoZWFkLVx1MDAzZWluc3RhbmNlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG5pbmRleCA3NWRiYjU4Mjg2YTMyLi5iZDQwNTZmMWE5ZjI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG5AQCAtMTQ0LDYgKzE0NCwyMyBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfZnJlZXplKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFx0XHRcdGJsa19mcmVlemVfcXVldWVfc3RhcnQoaC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZGlza190b19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuK1x0XHRcdFx0XHRcdHU4IHBhcnRubylcbit7XG4rXHQvKiBRdWljayBsb29rdXAgZm9yIHdob2xlIGRpc2sgKi9cbitcdGlmICghcGFydG5vKVxuK1x0XHRyZXR1cm4gZGlzay1cdTAwM2VwYXJ0MDtcbitcdHJldHVybiB4YV9sb2FkKFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIHBhcnRubyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitcdFx0XHRcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbit7XG4rXHRpZiAoIWJkZXYpXG4rXHRcdHJldHVybiBkaXNrLVx1MDAzZXBhcnQwO1xuK1x0cmV0dXJuIG52bWVfZGlza190b19wYXJ0KGRpc2ssIGJkZXZfcGFydG5vKGJkZXYpKTtcbit9XG4rXG4gdm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIHtcbiBcdHN0cnVjdCBudm1lX25zICpucyA9IHJlcS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbkBAIC0xNjUsOCArMTgyLDEwIEBAIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5zLVx1MDAzZWhlYWQtXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XG4tXHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpXG4tXHRcdGJpb19zZXRfZGV2KGJpbywgbnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbitcdGZvciAoYmlvID0gcmVxLVx1MDAzZWJpbzsgYmlvOyBiaW8gPSBiaW8tXHUwMDNlYmlfbmV4dCkge1xuK1x0XHRiaW9fc2V0X2RldihiaW8sIG52bWVfdG9fZGlza19wYXJ0KG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzayxcbitcdFx0XHRcdGJpby1cdTAwM2ViaV9iZGV2KSk7XG4rXHR9XG4gXHRibGtfc3RlYWxfYmlvcyhcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbGlzdCwgcmVxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcbiBcbkBAIC0xOTQsOCArMjEzLDkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRudm1lX3JlcShycSktXHUwMDNlZmxhZ3MgfD0gTlZNRV9NUEFUSF9JT19TVEFUUztcbi1cdG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KGRpc2stXHUwMDNlcGFydDAsIHJlcV9vcChycSksXG4tXHRcdFx0XHRcdFx0ICAgICAgamlmZmllcyk7XG4rXHRudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChcbitcdFx0XHRudm1lX3RvX2Rpc2tfcGFydChkaXNrLCBycS1cdTAwM2VwYXJ0KSxcbitcdFx0XHRyZXFfb3AocnEpLCBqaWZmaWVzKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KTtcbiBcbkBAIC0yMDgsNyArMjI4LDggQEAgdm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcbiBcdGlmICghKG52bWVfcmVxKHJxKS1cdTAwM2VmbGFncyBcdTAwMjYgTlZNRV9NUEFUSF9JT19TVEFUUykpXG4gXHRcdHJldHVybjtcbi1cdGJkZXZfZW5kX2lvX2FjY3QobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuK1x0YmRldl9lbmRfaW9fYWNjdChudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4rXHRcdFx0IHJxLVx1MDAzZXBhcnQpLCByZXFfb3AocnEpLFxuIFx0XHRcdCBibGtfcnFfYnl0ZXMocnEpIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQsXG4gXHRcdFx0IG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lKTtcbiB9XG5AQCAtNTMwLDExICs1NTEsMjEgQEAgc3RhdGljIGJvb2wgbnZtZV9hdmFpbGFibGVfcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxuIFx0cmV0dXJuIG52bWVfbXBhdGhfcXVldWVfaWZfbm9fcGF0aChoZWFkKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZmluZF9wYXRoX2JkZXYoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCxcbitcdFx0XHRcdFx0XHR1OCBwYXJ0bm8pXG4re1xuK1x0c3RydWN0IG52bWVfbnMgKm5zID0gbnZtZV9maW5kX3BhdGgoaGVhZCk7XG4rXG4rXHRpZiAoIW5zKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBudm1lX2Rpc2tfdG9fcGFydChucy1cdTAwM2VkaXNrLCBwYXJ0bm8pO1xuK31cbitcbiBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0c3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCA9IGJpby1cdTAwM2ViaV9iZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gZGlza190b19kZXYoaGVhZC1cdTAwM2VkaXNrKTtcbi1cdHN0cnVjdCBudm1lX25zICpucztcbitcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7XG4gXHRpbnQgc3JjdV9pZHg7XG4gXG4gXHQvKlxuQEAgLTU0Nyw5ICs1NzgsOSBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdHJldHVybjtcbiBcbiBcdHNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2aGVhZC1cdTAwM2VzcmN1KTtcbi1cdG5zID0gbnZtZV9maW5kX3BhdGgoaGVhZCk7XG4tXHRpZiAobGlrZWx5KG5zKSkge1xuLVx0XHRiaW9fc2V0X2RldihiaW8sIG5zLVx1MDAzZWRpc2stXHUwMDNlcGFydDApO1xuK1x0YmRldiA9IG52bWVfZmluZF9wYXRoX2JkZXYoaGVhZCwgYmRldl9wYXJ0bm8oYmlvLVx1MDAzZWJpX2JkZXYpKTtcbitcdGlmIChsaWtlbHkoYmRldikpIHtcbitcdFx0YmlvX3NldF9kZXYoYmlvLCBiZGV2KTtcbiBcdFx0LypcbiBcdFx0ICogVXNlIEJJT19SRU1BUFBFRCB0byBza2lwIGJpb19jaGVja19lb2QoKSB3aGVuIHRoaXMgYmlvXG4gXHRcdCAqIGVudGVycyBzdWJtaXRfYmlvX25vYWNjdCgpIGZvciB0aGUgcGVyLXBhdGggZGV2aWNlLiBUaGUgRU9EXG5AQCAtNTU3LDcgKzU4OCw3IEBAIHN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0ICovXG4gXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19SRU1BUFBFRCk7XG4gXHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05WTUVfTVBBVEg7XG4tXHRcdHRyYWNlX2Jsb2NrX2Jpb19yZW1hcChiaW8sIGRpc2tfZGV2dChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2spLFxuK1x0XHR0cmFjZV9ibG9ja19iaW9fcmVtYXAoYmlvLCBkaXNrX2RldnQoaGVhZC1cdTAwM2VkaXNrKSxcbiBcdFx0XHRcdCAgICAgIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3Rvcik7XG4gXHRcdHN1Ym1pdF9iaW9fbm9hY2N0KGJpbyk7XG4gXHR9IGVsc2UgaWYgKG52bWVfYXZhaWxhYmxlX3BhdGgoaGVhZCkpIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggMjBjYjhlZDdkOTg3YS4uN2YzNTYzYzBmNTUzMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0xODcsNiArMTg3LDEzIEBAIHN0cnVjdCBnZW5kaXNrIHtcbiAjaWZkZWYgQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNsYXZlX2JkZXZzO1xuICNlbmRpZlxuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3QgaGxpc3RfaGVhZCBtaXJyb3JfaGVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSBtaXJyb3Jfbm9kZTtcbitcdFx0XHRzdHJ1Y3QgZ2VuZGlzayAqaGVhZDtcbitcdFx0fTtcbitcdH07XG4gXHRzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqcmFuZG9tO1xuIFx0c3RydWN0IGRpc2tfZXZlbnRzICpldjtcbiBcbkBAIC05NzcsNiArOTg0LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9ucl96b25lcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIH1cbiBcbiBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSk7XG4rdm9pZCBkaXNrX2FkZF9taXJyb3Ioc3RydWN0IGdlbmRpc2sgKmhlYWQsIHN0cnVjdCBnZW5kaXNrICptaXJyb3IpO1xuIFxuIHZvaWQgcHV0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xuIHN0cnVjdCBnZW5kaXNrICpfX2Jsa19hbGxvY19kaXNrKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGUsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowNzozNy4zNDc3MTgwMzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTU2NTA5NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBOVk1lIE11bHRpcGF0aCBhbmQgQmxvY2sgTGF5ZXIgTWlycm9yaW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgdG8gcmV2aWV3LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6IGFyZSB0aGVyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpc24ndCBqdXN0IGEgcmVmYWN0b3I7IGl0J3MgYSBzdHJ1Y3R1cmFsIG1vZGlmaWNhdGlvbiwgYW5kIGl0J3MgdG91Y2hpbmcgY3JpdGljYWwgYXJlYXMuXG5cblRoZSBwYXRjaCBoaXRzIHRoZSBibG9jayBsYXllciDigJMgc3BlY2lmaWNhbGx5IGBibGsuaGAsIGBnZW5oZC5jYCwgYW5kIGBwYXJ0aXRpb25zL2NvcmUuY2Ag4oCTIGFuZCB0aGVuIGRpdmVzIGludG8gdGhlIE5WTWUgc3Vic3lzdGVtLCBtb2RpZnlpbmcgY29yZSBOVk1lIGhvc3QgZHJpdmVyIGxvZ2ljIGluIGBjb3JlLmNgIGFuZCBtdWx0aXBhdGggZnVuY3Rpb25hbGl0eSBpbiBgbXVsdGlwYXRoLmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgXCJtaXJyb3JcIiBjb25jZXB0IGZvciBgZ2VuZGlza2BzLCBjbG9uaW5nIHBhcnRpdGlvbnMsIGlzIHRoZSBrZXkgY2hhbmdlIGhlcmUuIEl0J3MgZXhwbGljaXRseSB1c2VkIGluIE5WTWUgbXVsdGlwYXRoLCBhZGRpbmcgdGhlIG1pcnJvciB3aXRoIGBkaXNrX2FkZF9taXJyb3IobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLCBucy1cdTAwM2VkaXNrKWAuIEl0IGFsc28gYWx0ZXJzIGBiZGV2X2Rpc2tfY2hhbmdlZGAgdG8gZW5zdXJlIHRoZSBtaXJyb3JzIGdldCB0aGUgcGFydGl0aW9uIHVwZGF0ZXMuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYWxzbyB1cGRhdGluZyB2YXJpb3VzIG11bHRpcGF0aCBOVk1lIHJlcXVlc3RzIHRvIGhhbmRsZSB0aGVzZSBtaXJyb3IgZGlza3MuXG5cbk15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBoYXMgYSBoaWdoIHBvdGVudGlhbCBmb3IgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzIG1vZGlmeWluZyBjb3JlIGJsb2NrIGxheWVyIGFuZCBOVk1lIGRyaXZlciBsb2dpYyBhbmQgaXQncyBzcGVjaWZpY2FsbHkgdXNpbmcgaXQgaW4gbXVsdGlwYXRoLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIHRlc3RlZCBpbiBhIHJlYXNvbmFibGUgZW52aXJvbm1lbnQ/IEZvcnR1bmF0ZWx5LCBOVk1lIGlzIHdlbGwtc3VwcG9ydGVkIGluIFFFTVUsIHNvIHZpcnR1YWxpemVkIE5WTWUgbXVsdGlwYXRoIHRlc3RpbmcgaXMgZW50aXJlbHkgZmVhc2libGUuIFRoaXMgaXMgZXhjZWxsZW50IG5ld3MsIGFzIHRoaXMgbWVhbnMgd2UgY2FuIGJ1aWxkIGEgdGVzdGluZyBlbnZpcm9ubWVudCBlYXNpbHkuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdGFyZ2V0LiBXZSBuZWVkIHRvIGJlIHN1cmdpY2FsLiBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYFxuKiAgIGBkaXNrX2FkZF9taXJyb3JgXG4qICAgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGBcbiogICBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGBcbiogICBgbnZtZV9mYWlsb3Zlcl9yZXFgXG4qICAgYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCAoRXZlbiB0aG91Z2ggaXQgaXMgc3RhdGljLCBpdCBpcyBjYWxsZWQgYnkgdGhlIGZ1bmN0aW9ucyBpbiBxdWVzdGlvbiwgc28gd2Ugc2hvdWxkIGtlZXAgaXQgaW4gbWluZCkuXG5cbkhvd2V2ZXIsIHNpbmNlIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AgaXMgc3RhdGljLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgY292ZXJhZ2UgaW5kaXJlY3RseSBieSB0YXJnZXRpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zOiBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCwgYGRpc2tfYWRkX21pcnJvcmAsIGFuZCB0aGUgZnVuY3Rpb24gbW9kaWZpZWQsIGBiZGV2X2Rpc2tfY2hhbmdlZGAuXG5cbk9rYXksIG5leHQgc3RlcHMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLiBJIGtub3cgYENPTkZJR19OVk1FX01VTFRJUEFUSGAgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQgaGVyZS4gVGhlbiBJJ2xsIHVzZSBzb21lIHRvb2xzIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIGJlc3QgcGF0aCBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODEyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MDc6NDUuNTA0MjI5ODM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDgxODUzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5WTUVfTVVMVElQQVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NT1jb25maWcgQkxLX0RFVl9OVk1FXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6MTc6Y29uZmlnIE5WTUVfTVVMVElQQVRIXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJOVk1lIG11bHRpcGF0aCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowNzo0Ny4xMTI0MTk1OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY2NDI4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBOVk1lIE11bHRpcGF0aCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIG1ldGljdWxvdXNseSB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19OVk1FX01VTFRJUEFUSGAuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgYWxsIHRoZSBuZWNlc3Nhcnkgc3VwcG9ydGluZyBlbGVtZW50cyBhcmUgaW4gcGxhY2UgYmVmb3JlIHdlIGV2ZW4gY29uc2lkZXIgZW5hYmxpbmcgdGhpcy4gV2UncmUgdGFsa2luZyBhYm91dCBhIGZlYXR1cmUgdGhhdCBwcm9mb3VuZGx5IGltcGFjdHMgSS9PIHBhdGggc2VsZWN0aW9uIGFuZCByZXNpbGllbmNlLCBzbyBhIHN1cGVyZmljaWFsIGdsYW5jZSBzaW1wbHkgd29uJ3QgY3V0IGl0LiBJIG5lZWQgdG8ga25vdzogQXJlIHRoZXJlIGFueSBmdW5kYW1lbnRhbCBrZXJuZWwgZmVhdHVyZXMgb3IgZHJpdmVyIGNvbXBvbmVudHMsIGJleW9uZCB0aGUgb2J2aW91cyBOVk1lIGNvcmUsIHRoYXQgdGhpcyByZWxpZXMgb24/IFRoaW5rIGFib3V0IHRoZSBTQ1NJIHN1YnN5c3RlbSwgbXVsdGlwYXRoaW5nIGluZnJhc3RydWN0dXJlIChETS1NdWx0aXBhdGggb3Igc2ltaWxhciksIGFuZCBhbnkgYmxvY2sgbGF5ZXIgbW9kaWZpY2F0aW9ucy4gQXJlIHRoZXkgcHJvcGVybHkgY29uZmlndXJlZCwgbG9hZGVkLCBhbmQgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byByZXZpZXcgdGhlIGtjb25maWcgZGVwZW5kZW5jaWVzLlxuXG5JJ2xsIGJlIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBtdWx0aXBhdGggc3VwcG9ydCBjYW4gc29tZXRpbWVzIGNyZWF0ZSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN0b3JhZ2UgbW9kdWxlcywgZXNwZWNpYWxseSByZWdhcmRpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGRldmljZSBkaXNjb3ZlcnkuIFNvLCB0aGlzIGludm9sdmVzIGEgc3lzdGVtYXRpYyBleGFtaW5hdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBub3QganVzdCBhIGNhc3VhbCBsb29rLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBlbmFibGluZyBpdCB3aWxsIGhhdmUgYW55IGltcGFjdCBvbiB0aGUgZGVmYXVsdCBOVk1lIGJlaGF2aW9yLCBvciBpZiBvdGhlciBkZXBlbmRlbmNpZXMgbWF5IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIG1vcmUgdGhhbiBqdXN0IGNvbmZpcm1pbmcgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIEl0J3MgYWJvdXQgZGV2ZWxvcGluZyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGVpciByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzIHRvIG1ha2UgdGhlIGJlc3QgcG9zc2libGUgY29uZmlndXJhdGlvbiBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjA3OjUwLjk3ODg0OTkzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU3MTc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9NVUxUSVBBVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjE3OmNvbmZpZyBOVk1FX01VTFRJUEFUSFxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTgtXFx0Ym9vbCBcXFwiTlZNZSBtdWx0aXBhdGggc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MDc6NTEuMDI3NDI2NjI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMjQzMTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVk1lIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgTlZNZSBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IGl0J3Mgc3RydWN0dXJlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYGRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDE3LiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgZm9yIHRoZSBOVk1lIGhvc3QgY29udHJvbGxlciBkcml2ZXIuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIG1vZHVsZSBzZWxlY3Rpb25zLCBmZWF0dXJlIHRvZ2dsZXMsIGFuZCBwZXJoYXBzIHNvbWUgZGVmYXVsdCBzZXR0aW5ncy4gSG9wZWZ1bGx5IEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYWJsZSBlbGVtZW50cyBhbmQgZGVwZW5kZW5jaWVzIHRoZXJlLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowNzo1NC4wNTk4NjA1MDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTlZNRV9DT1JFXFxuICAgMzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgQkxLX0RFVl9OVk1FXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTlZNIEV4cHJlc3MgYmxvY2sgZGV2aWNlXFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgQkxPQ0tcXG4gICA4OlxcdFxcdHNlbGVjdCBOVk1FX0NPUkVcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhlIE5WTSBFeHByZXNzIGRyaXZlciBpcyBmb3Igc29saWQgc3RhdGUgZHJpdmVzIGRpcmVjdGx5XFxuICAxMTpcXHRcXHQgIGNvbm5lY3RlZCB0byB0aGUgUENJIG9yIFBDSSBFeHByZXNzIGJ1cy4gIElmIHlvdSBrbm93IHlvdVxcbiAgMTI6XFx0XFx0ICBkb24ndCBoYXZlIG9uZSBvZiB0aGVzZSwgaXQgaXMgc2FmZSB0byBhbnN3ZXIgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDE1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG52bWUuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBOVk1FX01VTFRJUEFUSFxcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiTlZNZSBtdWx0aXBhdGggc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gTlZNRV9DT1JFXFxuICAyMDpcXHRcXHRoZWxwXFxuICAyMTpcXHRcXHQgIFRoaXMgb3B0aW9uIGNvbnRyb2xzIHN1cHBvcnQgZm9yIG11bHRpcGF0aCBhY2Nlc3MgdG8gTlZNZVxcbiAgMjI6XFx0XFx0ICBzdWJzeXN0ZW1zLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIHN1cHBvcnQgZm9yIE5WTWUgbXVsdGlwYXRoXFxuICAyMzpcXHRcXHQgIGFjY2VzcyBpcyBpbmNsdWRlZCBpbiB0aGUga2VybmVsLiBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCBzdXBwb3J0XFxuICAyNDpcXHRcXHQgIGZvciBOVk1lIG11bHRpcGF0aCBhY2Nlc3MgaXMgZXhjbHVkZWQgZnJvbSB0aGUga2VybmVsLiBXaGVuIHRoaXNcXG4gIDI1OlxcdFxcdCAgb3B0aW9uIGlzIGRpc2FibGVkIGVhY2ggY29udHJvbGxlci9uYW1lc3BhY2UgcmVjZWl2ZXMgaXRzXFxuICAyNjpcXHRcXHQgIG93biAvZGV2L252bWVYblkgZGV2aWNlIGVudHJ5IGFuZCBOVk1lIG11bHRpcGF0aCBhY2Nlc3MgaXNcXG4gIDI3OlxcdFxcdCAgbm90IHN1cHBvcnRlZC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjA3OjU0LjA1OTk1Nzg1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MDk3MDg2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlZNZSBNdWx0aXBhdGggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIE5WTWUgbXVsdGlwYXRoIHBhdGNoIGFuZCBoZXJlJ3MgbXkgdGFrZS4gIEl0IGxvb2tzIGxpa2UgYE5WTUVfTVVMVElQQVRIYCByZWxpZXMgb24gYE5WTUVfQ09SRWAsIHdoaWNoIGlzIGl0c2VsZiBzZWxlY3RlZCBieSBgQkxLX0RFVl9OVk1FYC4gIFRoZXJlZm9yZSwgdG8gcHJvcGVybHkgdGVzdCB0aGUgbXVsdGlwYXRoaW5nIGZ1bmN0aW9uYWxpdHksIEknbSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSBJIGVuYWJsZSAqYm90aCogYEJMS19ERVZfTlZNRWAgYW5kIGBOVk1FX01VTFRJUEFUSGAuXG5cbkZyb20gdGhlIGNvZGUsIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBpbXBvcnRhbnQgdG8gcmVhbGx5IGRpZyBpbnRvIGFyZTogYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AsIGBkaXNrX2FkZF9taXJyb3JgLCBgYmRldl9kaXNrX2NoYW5nZWRgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgdGhvcm91Z2hseSB2ZXR0ZWQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBgbnZtZV9mYWlsb3Zlcl9yZXFgIGlzIGV4cG9ydGVkLiBPa2F5LCBpdCdzIG5vdCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgaXQgbW9yZSBsaWtlbHkgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhbmQgcG90ZW50aWFsbHkgYmUgZXhwb3NlZCB0byBpbnRlcmVzdGluZyBpbnB1dHMuIFRoZSBvdGhlciBmdW5jdGlvbnMsIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgIGFuZCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAgbG9vayBzaWduaWZpY2FudCB0b28uXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZWlyIGludGVyYWN0aW9uIHdpdGggdGhlIGJsb2NrIGxheWVyLiAgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgdGFrZXMgYSBgZ2VuZGlza2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgIHRha2VzIGEgaGVhZCBhbmQgbWlycm9yIGRpc2suXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19CTE9DS2AgaXMgYSBnaXZlbiwgdGhhdCdzIG5vdCBpbnRlcmVzdGluZy4gQWxzbywgYENPTkZJR19QQ0lgIGlzIGEgZGVwZW5kZW5jeSBmb3IgYEJMS19ERVZfTlZNRWAsIHdoaWNoIGlzIGZpbmUuXG5cbk9rYXksIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZS4gTG9va2luZyBhdCB0aGUgZmlsZXMgbW9kaWZpZWQsIGl0J3MgbW9kaWZ5aW5nIGBibG9jay9nZW5oZC5jYCBhbmQgYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYCAtLSB0aGVzZSBhcmUgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgY29kZS4gIFRoZSBOVk1lIGNoYW5nZXMgYXJlIGluIGBkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNgIGFuZCBgZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNgLiBUaGlzIGlzIHF1aXRlIGEgYml0IG1vcmUgaW50ZWdyYXRlZCB0aGFuIEknZCBpbml0aWFsbHkgdGhvdWdodC5cblxuR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25hbGl0eSwgYW5kIGRlYWxpbmcgd2l0aCBwYXJ0aXRpb24gY2xvbmluZy9taXJyb3JpbmcgZm9yIE5WTWUgZGV2aWNlcywgdGhpcyBzZWVtcyBoaWdobHkgd29ydGh3aGlsZSB0byBmdXp6LiBJdCdzIGRlYWxpbmcgd2l0aCBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBhbmQgcmVxdWVzdCBoYW5kbGluZy4gTXkgcmVjb21tZW5kYXRpb24gaXM6XG5cbmBXb3J0aEZ1enppbmc9dHJ1ZSwgRm9jdXNTeW1ib2xzPVtcImJkZXZfY2xvbmVfcGFydGl0aW9uc1wiLCBcImRpc2tfYWRkX21pcnJvclwiLCBcImJkZXZfZGlza19jaGFuZ2VkXCIsIFwibnZtZV9mYWlsb3Zlcl9yZXFcIiwgXCJudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RcIiwgXCJudm1lX21wYXRoX2VuZF9yZXF1ZXN0XCJdLCBFbmFibGVDb25maWdzPVtcIkJMS19ERVZfTlZNRVwiLCBcIk5WTUVfTVVMVElQQVRIXCJdYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA3MSwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowODowMi40Njk2Njg1MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE4MjkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJOVk1FX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJkZXZfY2xvbmVfcGFydGl0aW9uc1wiLFxuICAgIFwiZGlza19hZGRfbWlycm9yXCIsXG4gICAgXCJiZGV2X2Rpc2tfY2hhbmdlZFwiLFxuICAgIFwibnZtZV9mYWlsb3Zlcl9yZXFcIixcbiAgICBcIm52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdFwiLFxuICAgIFwibnZtZV9tcGF0aF9lbmRfcmVxdWVzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbWVjaGFuaXNtIHRvIGNsb25lIHBhcnRpdGlvbnMgYmV0d2VlbiBgZ2VuZGlza2BzIChtaXJyb3JzKSwgc3BlY2lmaWNhbGx5IHV0aWxpemVkIGJ5IHRoZSBOVk1lIG11bHRpcGF0aCBkcml2ZXIgdG8gaGFuZGxlIHBhcnRpdGlvbnMgb24gbXVsdGlwYXRoIGRldmljZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBwYXJ0aXRpb24gaGFuZGxpbmcgYW5kIE5WTWUgbXVsdGlwYXRoIHJlcXVlc3Qgcm91dGluZywgd2hpY2ggYXJlIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBhbmQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgZW11bGF0ZWQgTlZNZSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlZNRVwiLFxuICAgIFwiTlZNRV9NVUxUSVBBVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiZGV2X2Nsb25lX3BhcnRpdGlvbnNcIixcbiAgICBcImRpc2tfYWRkX21pcnJvclwiLFxuICAgIFwiYmRldl9kaXNrX2NoYW5nZWRcIixcbiAgICBcIm52bWVfZmFpbG92ZXJfcmVxXCIsXG4gICAgXCJudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RcIixcbiAgICBcIm52bWVfbXBhdGhfZW5kX3JlcXVlc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSB0byBjbG9uZSBwYXJ0aXRpb25zIGJldHdlZW4gYGdlbmRpc2tgcyAobWlycm9ycyksIHNwZWNpZmljYWxseSB1dGlsaXplZCBieSB0aGUgTlZNZSBtdWx0aXBhdGggZHJpdmVyIHRvIGhhbmRsZSBwYXJ0aXRpb25zIG9uIG11bHRpcGF0aCBkZXZpY2VzLiBUaGlzIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgcGFydGl0aW9uIGhhbmRsaW5nIGFuZCBOVk1lIG11bHRpcGF0aCByZXF1ZXN0IHJvdXRpbmcsIHdoaWNoIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGVtdWxhdGVkIE5WTWUgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MDg6MDIuNTQ3ODU5MDAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMxODYyODg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjA4OjAyLjU0ODMxNDcxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjMxODE2ODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIHN1cHBvcnQgcGFydGl0aW9uIGNsb25pbmcgYW5kIG1pcnJvcmluZyBhY3Jvc3MgYmxvY2sgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBuZXcgZmllbGRzIGluIGBzdHJ1Y3QgZ2VuZGlza2AgKHZpYSBhIHVuaW9uIGZvciBoZWFkL21pcnJvciByb2xlcykgYW5kIGFkZHMgZnVuY3Rpb25zIGxpa2UgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgLiBcXG5cXG5UaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdHJ1Y3R1cmFsIGxpbmtpbmcgKGhsaXN0IG9wZXJhdGlvbnMpLCBsb2NraW5nIChgb3Blbl9tdXRleGApLCBhbmQgYmxvY2sgZGV2aWNlL2JpbyByb3V0aW5nLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBhbmQgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgQVBJcyAobGlrZSBpb2N0bHMgb3IgbmV0bGluaykgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIFRoZSBwYXJ0aXRpb24gY2xvbmluZyByZWxpZXMgb24gcmVhZGluZyBmaWVsZHMgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHBhcnRpdGlvbnMgKGBiZF9zdGFydF9zZWN0YCwgYGJkX25yX3NlY3RvcnNgLCBgYmRfbWV0YV9pbmZvYCkuIFxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlIChlLmcuLCBpZiBhIGhlYWQgZGlzayBpcyBmcmVlZCBiZWZvcmUgaXRzIG1pcnJvcnMpLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBsb2NraW5nIGRlYWRsb2Nrcy4gVGhlc2UgY2xhc3NlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OTYyYmVjYjg0OTNmMjgzMWM3YmFiZWFmY2YxYjJmMmI2MmI1ZGQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDk6MDc6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXG5pbmRleCA1MGFiZmQ5MzI4ODYxLi41MDI4MDVlNWY5MjlmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLmhcbisrKyBiL2Jsb2NrL2Jsay5oXG5AQCAtNjM4LDYgKzYzOCw3IEBAIGludCBiZGV2X2RlbF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8pO1xuIGludCBiZGV2X3Jlc2l6ZV9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8sIHNlY3Rvcl90IHN0YXJ0LFxuIFx0XHRzZWN0b3JfdCBsZW5ndGgpO1xuIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCk7XG4raW50IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG4gXG4gdm9pZCBiZGV2X3NldF9ucl9zZWN0b3JzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcnMpO1xuIFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jXG5pbmRleCBmMTk5MGM3Y2RmYjkxLi4zNTFhYzkzYWJlYWIzIDEwMDY0NFxuLS0tIGEvYmxvY2svZ2VuaGQuY1xuKysrIGIvYmxvY2svZ2VuaGQuY1xuQEAgLTQxOSw2ICs0MTksMTcgQEAgc3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRcdGRpc2tfdWV2ZW50KGRpc2ssIEtPQkpfQUREKTtcbiBcdH1cbiBcbitcdGlmIChkaXNrLVx1MDAzZWhlYWQpIHtcbitcdFx0aW50IHJldDtcbitcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZWhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRcdHJldCA9IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhkaXNrKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlaGVhZC1cdTAwM2VvcGVuX211dGV4KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KGRpc2spLCBcImNvdWxkIG5vdCBjbG9uZSBwYXJ0aXRpb25zICglZClcXG5cIixcbitcdFx0XHRcdHJldCk7XG4rXHR9XG4rXG4gXHRibGtfYXBwbHlfYmRpX2xpbWl0cyhkaXNrLVx1MDAzZWJkaSwgXHUwMDI2ZGlzay1cdTAwM2VxdWV1ZS1cdTAwM2VsaW1pdHMpO1xuIFx0ZGlza19hZGRfZXZlbnRzKGRpc2spO1xuIFx0c2V0X2JpdChHRF9BRERFRCwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSk7XG5AQCAtNDMyLDYgKzQ0Myw5IEBAIHN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0c3RydWN0IGRldmljZSAqZGRldiA9IGRpc2tfdG9fZGV2KGRpc2spO1xuIFx0aW50IHJldDtcbiBcbitcdGlmIChkaXNrLVx1MDAzZWhlYWQgXHUwMDI2XHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdGlmIChXQVJOX09OX09OQ0UoYmRldl9ucl9zZWN0b3JzKGRpc2stXHUwMDNlcGFydDApIFx1MDAzZSBCTEtfREVWX01BWF9TRUNUT1JTKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtNzA5LDYgKzcyMywxMiBAQCBzdGF0aWMgdm9pZCBfX2RlbF9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHRiZGV2X3VuaGFzaChwYXJ0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuIFxuK1x0aWYgKGRpc2stXHUwMDNlaGVhZCkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlaGVhZC1cdTAwM2VvcGVuX211dGV4KTtcbitcdFx0aGxpc3RfZGVsKFx1MDAyNmRpc2stXHUwMDNlbWlycm9yX25vZGUpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIFRlbGwgdGhlIGZpbGUgc3lzdGVtIHRvIHdyaXRlIGJhY2sgYWxsIGRpcnR5IGRhdGEgYW5kIHNodXQgZG93biBpZlxuIFx0ICogaXQgaGFzbid0IGJlZW4gbm90aWZpZWQgZWFybGllci5cbkBAIC0xMzY5LDcgKzEzODksOCBAQCBzdGF0aWMgaW50IGRpc2tzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxZiwgdm9pZCAqdilcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNmdwLVx1MDAzZXBhcnRfdGJsLCBpZHgsIGhkKSB7XG4tXHRcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXHUwMDI2XHUwMDI2ICFiZGV2X25yX3NlY3RvcnMoaGQpKVxuK1x0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8IChncC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7XG5AQCAtMTUxMCw2ICsxNTMxLDE4IEBAIHN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rdm9pZCBkaXNrX2FkZF9taXJyb3Ioc3RydWN0IGdlbmRpc2sgKmhlYWQsIHN0cnVjdCBnZW5kaXNrICptaXJyb3IpXG4re1xuK1x0aWYgKCFoZWFkKVxuK1x0XHRyZXR1cm47XG4rXHRXQVJOX09OX09OQ0UodGVzdF9iaXQoR0RfQURERUQsIFx1MDAyNm1pcnJvci1cdTAwM2VzdGF0ZSkpO1xuK1x0bWlycm9yLVx1MDAzZWhlYWQgPSBoZWFkO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bWlycm9yLVx1MDAzZW1pcnJvcl9ub2RlLCBcdTAwMjZoZWFkLVx1MDAzZW1pcnJvcl9oZWFkKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChkaXNrX2FkZF9taXJyb3IpO1xuK1xuIHN0cnVjdCBnZW5kaXNrICpfX2Jsa19hbGxvY19kaXNrKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGUsXG4gXHRcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqbGtjbGFzcylcbiB7XG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuaW5kZXggYjVjNTliNzljYTdjYi4uYmFmNzkyYmVjZjY5OSAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuQEAgLTY0NCw2ICs2NDQsNyBAQCBzdGF0aWMgaW50IGJsa19hZGRfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0O1xuK1x0c3RydWN0IGdlbmRpc2sgKm1pcnJvcjtcbiBcdHVuc2lnbmVkIGxvbmcgaWR4O1xuIFx0aW50IHJldCA9IDA7XG4gXG5AQCAtNzAzLDYgKzcwNCwxMyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcbiBcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2ZGlza190b19kZXYoZGlzayktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIFx0fVxuIFxuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnkobWlycm9yLCBcdTAwMjZkaXNrLVx1MDAzZW1pcnJvcl9oZWFkLFxuK1x0XHRcdFx0bWlycm9yX25vZGUpIHtcbitcdFx0cmV0ID0gYmRldl9jbG9uZV9wYXJ0aXRpb25zKG1pcnJvcik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiAvKlxuQEAgLTcxMSw2ICs3MTksNDMgQEAgaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpXG4gICovXG4gRVhQT1JUX1NZTUJPTF9HUEwoYmRldl9kaXNrX2NoYW5nZWQpO1xuIFxuK2ludCBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4re1xuK1x0c3RydWN0IGJsb2NrX2RldmljZSAqcGFydDtcbitcdHVuc2lnbmVkIGxvbmcgaWR4O1xuK1xuK1x0aWYgKCFkaXNrLVx1MDAzZWhlYWQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0eGFfZm9yX2VhY2hfc3RhcnQoXHUwMDI2ZGlzay1cdTAwM2VwYXJ0X3RibCwgaWR4LCBwYXJ0LCAxKSB7XG4rXHRcdC8qIFNhbWUgYXMgYmRldl9kaXNrX2NoYW5nZWQoKSAqL1xuK1x0XHRiZGV2X3VuaGFzaChwYXJ0KTtcbitcdFx0V0FSTl9PTl9PTkNFKGF0b21pY19yZWFkKFx1MDAyNnBhcnQtXHUwMDNlYmRfb3BlbmVycykpO1xuK1x0XHRpbnZhbGlkYXRlX2JkZXYocGFydCk7XG4rXHRcdGRyb3BfcGFydGl0aW9uKHBhcnQpO1xuK1x0fVxuK1xuK1x0eGFfZm9yX2VhY2hfc3RhcnQoXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZXBhcnRfdGJsLCBpZHgsIHBhcnQsIDEpIHtcbitcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqcGFydF9hZGRlZDtcbitcbitcdFx0cGFydF9hZGRlZCA9IGFkZF9wYXJ0aXRpb24oZGlzaywgaWR4LCBwYXJ0LVx1MDAzZWJkX3N0YXJ0X3NlY3QsXG4rXHRcdFx0XHRcdHBhcnQtXHUwMDNlYmRfbnJfc2VjdG9ycywgQUREUEFSVF9GTEFHX05PTkUsXG4rXHRcdFx0XHRcdHBhcnQtXHUwMDNlYmRfbWV0YV9pbmZvKTtcbitcdFx0aWYgKElTX0VSUihwYXJ0X2FkZGVkKSkge1xuK1x0XHRcdGlmIChQVFJfRVJSKHBhcnRfYWRkZWQpICE9IC1FTlhJTykge1xuK1x0XHRcdFx0ZGV2X2VycihkaXNrX3RvX2RldihkaXNrKSwgXCJwJWxkIGNvdWxkIG5vdCBiZSBhZGRlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgICAgaWR4LCBwYXJ0X2FkZGVkKTtcbitcdFx0XHR9XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIocGFydF9hZGRlZCk7XG4rXHRcdH1cbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHZvaWQgKnJlYWRfcGFydF9zZWN0b3Ioc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSwgc2VjdG9yX3QgbiwgU2VjdG9yICpwKVxuIHtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3RhdGUtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MC1cdTAwM2ViZF9tYXBwaW5nO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuaW5kZXggMTMyMmM2NzhmNGViOC4uYjk0YjlhM2JjZWIyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5AQCAtNDI3Myw2ICs0MjczLDcgQEAgc3RhdGljIHZvaWQgbnZtZV9hbGxvY19ucyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxuIFx0XHRzcHJpbnRmKGRpc2stXHUwMDNlZGlza19uYW1lLCBcIm52bWUlZGMlZG4lZFwiLCBjdHJsLVx1MDAzZXN1YnN5cy1cdTAwM2VpbnN0YW5jZSxcbiBcdFx0XHRjdHJsLVx1MDAzZWluc3RhbmNlLCBucy1cdTAwM2VoZWFkLVx1MDAzZWluc3RhbmNlKTtcbiBcdFx0ZGlzay1cdTAwM2VmbGFncyB8PSBHRU5IRF9GTF9ISURERU47XG4rXHRcdGRpc2tfYWRkX21pcnJvcihucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssIG5zLVx1MDAzZWRpc2spO1xuIFx0fSBlbHNlIGlmIChtdWx0aXBhdGgpIHtcbiBcdFx0c3ByaW50ZihkaXNrLVx1MDAzZWRpc2tfbmFtZSwgXCJudm1lJWRuJWRcIiwgY3RybC1cdTAwM2VzdWJzeXMtXHUwMDNlaW5zdGFuY2UsXG4gXHRcdFx0bnMtXHUwMDNlaGVhZC1cdTAwM2VpbnN0YW5jZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuaW5kZXggNzVkYmI1ODI4NmEzMi4uYmQ0MDU2ZjFhOWYyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuQEAgLTE0NCw2ICsxNDQsMjMgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X2ZyZWV6ZShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cylcbiBcdFx0XHRibGtfZnJlZXplX3F1ZXVlX3N0YXJ0KGgtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX2Rpc2tfdG9fcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitcdFx0XHRcdFx0XHR1OCBwYXJ0bm8pXG4re1xuK1x0LyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovXG4rXHRpZiAoIXBhcnRubylcbitcdFx0cmV0dXJuIGRpc2stXHUwMDNlcGFydDA7XG4rXHRyZXR1cm4geGFfbG9hZChcdTAwMjZkaXNrLVx1MDAzZXBhcnRfdGJsLCBwYXJ0bm8pO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4rXHRcdFx0XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4re1xuK1x0aWYgKCFiZGV2KVxuK1x0XHRyZXR1cm4gZGlzay1cdTAwM2VwYXJ0MDtcbitcdHJldHVybiBudm1lX2Rpc2tfdG9fcGFydChkaXNrLCBiZGV2X3BhcnRubyhiZGV2KSk7XG4rfVxuK1xuIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiB7XG4gXHRzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5AQCAtMTY1LDggKzE4MiwxMCBAQCB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbG9jaywgZmxhZ3MpO1xuLVx0Zm9yIChiaW8gPSByZXEtXHUwMDNlYmlvOyBiaW87IGJpbyA9IGJpby1cdTAwM2ViaV9uZXh0KVxuLVx0XHRiaW9fc2V0X2RldihiaW8sIG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCk7XG4rXHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpIHtcbitcdFx0YmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4rXHRcdFx0XHRiaW8tXHUwMDNlYmlfYmRldikpO1xuK1x0fVxuIFx0YmxrX3N0ZWFsX2Jpb3MoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xpc3QsIHJlcSk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5zLVx1MDAzZWhlYWQtXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XG4gXG5AQCAtMTk0LDggKzIxMyw5IEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bnZtZV9yZXEocnEpLVx1MDAzZWZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7XG4tXHRudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuLVx0XHRcdFx0XHRcdCAgICAgIGppZmZpZXMpO1xuK1x0bnZtZV9yZXEocnEpLVx1MDAzZXN0YXJ0X3RpbWUgPSBiZGV2X3N0YXJ0X2lvX2FjY3QoXG4rXHRcdFx0bnZtZV90b19kaXNrX3BhcnQoZGlzaywgcnEtXHUwMDNlcGFydCksXG4rXHRcdFx0cmVxX29wKHJxKSwgamlmZmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7XG4gXG5AQCAtMjA4LDcgKzIyOCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4gXG4gXHRpZiAoIShudm1lX3JlcShycSktXHUwMDNlZmxhZ3MgXHUwMDI2IE5WTUVfTVBBVEhfSU9fU1RBVFMpKVxuIFx0XHRyZXR1cm47XG4tXHRiZGV2X2VuZF9pb19hY2N0KG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCwgcmVxX29wKHJxKSxcbitcdGJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLFxuK1x0XHRcdCBycS1cdTAwM2VwYXJ0KSwgcmVxX29wKHJxKSxcbiBcdFx0XHQgYmxrX3JxX2J5dGVzKHJxKSBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZULFxuIFx0XHRcdCBudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSk7XG4gfVxuQEAgLTUzMCwxMSArNTUxLDIxIEBAIHN0YXRpYyBib29sIG52bWVfYXZhaWxhYmxlX3BhdGgoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZClcbiBcdHJldHVybiBudm1lX21wYXRoX3F1ZXVlX2lmX25vX3BhdGgoaGVhZCk7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX2ZpbmRfcGF0aF9iZGV2KHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQsXG4rXHRcdFx0XHRcdFx0dTggcGFydG5vKVxuK3tcbitcdHN0cnVjdCBudm1lX25zICpucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpO1xuK1xuK1x0aWYgKCFucylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gbnZtZV9kaXNrX3RvX3BhcnQobnMtXHUwMDNlZGlzaywgcGFydG5vKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIHtcbiBcdHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQgPSBiaW8tXHUwMDNlYmlfYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRpc2tfdG9fZGV2KGhlYWQtXHUwMDNlZGlzayk7XG4tXHRzdHJ1Y3QgbnZtZV9ucyAqbnM7XG4rXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2O1xuIFx0aW50IHNyY3VfaWR4O1xuIFxuIFx0LypcbkBAIC01NDcsOSArNTc4LDkgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlc3JjdSk7XG4tXHRucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpO1xuLVx0aWYgKGxpa2VseShucykpIHtcbi1cdFx0YmlvX3NldF9kZXYoYmlvLCBucy1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbitcdGJkZXYgPSBudm1lX2ZpbmRfcGF0aF9iZGV2KGhlYWQsIGJkZXZfcGFydG5vKGJpby1cdTAwM2ViaV9iZGV2KSk7XG4rXHRpZiAobGlrZWx5KGJkZXYpKSB7XG4rXHRcdGJpb19zZXRfZGV2KGJpbywgYmRldik7XG4gXHRcdC8qXG4gXHRcdCAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpb1xuIFx0XHQgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRFxuQEAgLTU1Nyw3ICs1ODgsNyBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdCAqL1xuIFx0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpO1xuIFx0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OVk1FX01QQVRIO1xuLVx0XHR0cmFjZV9ibG9ja19iaW9fcmVtYXAoYmlvLCBkaXNrX2RldnQobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrKSxcbitcdFx0dHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJpbywgZGlza19kZXZ0KGhlYWQtXHUwMDNlZGlzayksXG4gXHRcdFx0XHQgICAgICBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IpO1xuIFx0XHRzdWJtaXRfYmlvX25vYWNjdChiaW8pO1xuIFx0fSBlbHNlIGlmIChudm1lX2F2YWlsYWJsZV9wYXRoKGhlYWQpKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDIwY2I4ZWQ3ZDk4N2EuLjdmMzU2M2MwZjU1MzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTg3LDYgKzE4NywxMyBAQCBzdHJ1Y3QgZ2VuZGlzayB7XG4gI2lmZGVmIENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRFxuIFx0c3RydWN0IGxpc3RfaGVhZCBzbGF2ZV9iZGV2cztcbiAjZW5kaWZcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IGhsaXN0X2hlYWQgbWlycm9yX2hlYWQ7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0c3RydWN0IGhsaXN0X25vZGUgbWlycm9yX25vZGU7XG4rXHRcdFx0c3RydWN0IGdlbmRpc2sgKmhlYWQ7XG4rXHRcdH07XG4rXHR9O1xuIFx0c3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKnJhbmRvbTtcbiBcdHN0cnVjdCBkaXNrX2V2ZW50cyAqZXY7XG4gXG5AQCAtOTc3LDYgKzk4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJkZXZfbnJfem9uZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiB9XG4gXG4gaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpO1xuK3ZvaWQgZGlza19hZGRfbWlycm9yKHN0cnVjdCBnZW5kaXNrICpoZWFkLCBzdHJ1Y3QgZ2VuZGlzayAqbWlycm9yKTtcbiBcbiB2b2lkIHB1dF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiBzdHJ1Y3QgZ2VuZGlzayAqX19ibGtfYWxsb2NfZGlzayhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIGludCBub2RlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MDg6MDIuNTQ4MzE1NTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MzE4MTM3Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBCbG9jayBMYXllciBhbmQgTlZNZSBNdWx0aXBhdGggUGFydGl0aW9uIENsb25pbmcvTWlycm9yaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byByaWdvcm91c2x5IGFzc2VzcyBwb3RlbnRpYWwgcmlza3MsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIHdoaWNoIGlzIGEga2V5IGNvbmNlcm4gaW4ga2VybmVsIGRldmVsb3BtZW50LiBHaXZlbiBteSBleHBlcnRpc2UsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGlzIHdpdGggYSBrZWVuIGV5ZSBmb3Igc3VidGxlIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlLCBlbmFibGluZyBwYXJ0aXRpb24gY2xvbmluZyBhbmQgbWlycm9yaW5nLCBwYXJ0aWN1bGFybHkgZm9yIE5WTWUgbXVsdGlwYXRoIHNldHVwcy4gSSBzZWUgYWRkaXRpb25zIGZvciBmdW5jdGlvbnMgbGlrZSBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCwgYGRpc2tfYWRkX21pcnJvcmAsIGFuZCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIE5WTWUtcmVsYXRlZCBmdW5jdGlvbnMgKGBudm1lX2Rpc2tfdG9fcGFydGAsIGV0Yy4pLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBtZXRpY3Vsb3VzbHkgY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJsb2NrIGRldmljZSBzdHJ1Y3R1cmVzIOKAkyBgc3RydWN0IGdlbmRpc2tgLCBgc3RydWN0IGJsb2NrX2RldmljZWAsIGFuZCBgc3RydWN0IGJpb2AuIFRoZSBwYXRjaCBhZGRzIGBtaXJyb3JfaGVhZGAgYW5kIGBtaXJyb3Jfbm9kZWAgdG8gYHN0cnVjdCBnZW5kaXNrYCwgYW5kIG1vZGlmaWVzIHRoaW5ncyBsaWtlIGBkaXNrc3RhdHNfc2hvd2AgdG8gcG90ZW50aWFsbHkgaGlkZSBwYXJ0aXRpb25zLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGZvY3VzIG9uIHRoZXNlIHN0cnVjdHVyZSBjaGFuZ2VzLlxuXG5JJ20gY2hlY2tpbmcgaWYgYW55IG5ldyBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgaGF2ZSB1bmluaXRpYWxpemVkIGZpZWxkcy4gSSdtIGFsc28gZW5zdXJpbmcgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50byBjb250cm9sIGZsb3cuIEl0IHNlZW1zIHVubGlrZWx5IGF0IGZpcnN0IGdsYW5jZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUuIGBkaXNrc3RhdHNfc2hvd2AgaXMgbW9kaWZpZWQsIGJ1dCB0aGF0IGFwcGVhcnMgdG8gYmUganVzdCBza2lwcGluZyBzb21lIGVudHJpZXMsIG5vdCBhY3R1YWxseSBleHBvc2luZyBuZXcgZGF0YS4gU28sIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIFNpbmNlIHRoZXJlIGFyZW4ndCBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIHRoaXMgaXMgbG9va2luZyBzYWZlIHNvIGZhci5cblxuUG90ZW50aWFsIGJ1ZyBzb3VyY2VzIGFyZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSAoZXNwZWNpYWxseSBpZiBgZGlzay1cdTAwM2VoZWFkYCBpcyBmcmVlZCBwcmVtYXR1cmVseSksIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBsb2NraW5nIGlzc3Vlcy4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYW5kIEknbSBnbGFkIHRvIHNlZSB0aGF0IEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBjYXRjaCBhbGwgb2YgdGhlc2UuIFRoZXkncmUgbXkgc2FmZXR5IG5ldCBoZXJlLCBhbmQgdGhhdCdzIGEgZ29vZCBzdGFydC5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGF0IGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgIGZ1bmN0aW9uIGluIGRldGFpbC4gSSBzZWUgdGhhdCBpdCBjbG9uZXMgcGFydGl0aW9ucy4gVGhlIGltcG9ydGFudCBwYXJ0IGZvciBtZSBpcyB3aGF0IGlzIHBhc3NlZCB0byB0aGUgYGFkZF9wYXJ0aXRpb25gIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgd2hldGhlciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgdXNlZC5cblxuSSBjYW4gY29uZmlybSB0aGF0IGl0IGNvcGllcyB0aGUgc3RhcnQgc2VjdG9yLCBudW1iZXIgb2Ygc2VjdG9ycyBhbmQgbWV0YSBpbmZvIGZyb20gdGhlIG9sZCBwYXJ0aXRpb24uIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBwYXNzZWQgdG8gYGFkZF9wYXJ0aXRpb25gLCB0aGF04oCZcyBnb29kLlxuXG5OZXh0LCBJJ20gY2hlY2tpbmcgYGRpc2tfYWRkX21pcnJvcmAuIEkgc2VlIHRoYXQgYG1pcnJvcl9oZWFkYCBhbmQgYG1pcnJvcl9ub2RlYCBhcmUgcGFydCBvZiBhIHVuaW9uIHdpdGhpbiBgc3RydWN0IGdlbmRpc2tgLiBJdCdzIGEgY3JpdGljYWwgcG9pbnQuIEl0IG1lYW5zIHRoYXQgYSBgZ2VuZGlza2AgY2FuIGZ1bmN0aW9uIGFzIGVpdGhlciBhIGhlYWQgb3IgYSBtaXJyb3IsIGJ1dCBub3QgYm90aC4gTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgaGFuZGxlZCBzYWZlbHksIGVzcGVjaWFsbHkgYXJvdW5kIGluaXRpYWxpemF0aW9uLiBBZnRlciBhbmFseXppbmcgdGhpcyBtb3JlIGNsb3NlbHksIGl0IHNlZW1zIHRoYXQgaWYgaXQncyBhIGhlYWQsIGBtaXJyb3JfaGVhZGAgaXMgdXNlZCwgYW5kIGlmIGl0J3MgYSBtaXJyb3IsIGBtaXJyb3Jfbm9kZWAgYW5kIGBoZWFkYCBhcmUgdXNlZC4gV2hlbiB0aGUgYGdlbmRpc2tgIGlzIGFsbG9jYXRlZCwgaXQncyB6ZXJvZWQgKHVzaW5nIGBremFsbG9jYCwgdHlwaWNhbGx5KSwgc28gYG1pcnJvcl9oZWFkYCBpcyBlbXB0eSB0byBiZWdpbiB3aXRoLiBUaGVuLCBpZiB0aGUgZGlzayBpcyBhIG1pcnJvciwgYG1pcnJvci1cdTAwM2VoZWFkYCBpcyBzZXQsIGFuZCBgbWlycm9yLVx1MDAzZW1pcnJvcl9ub2RlYCBpcyBsaW5rZWQgdG8gYGhlYWQtXHUwMDNlbWlycm9yX2hlYWRgLiBJdCBsb29rcyBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuXG5cbkZpbmFsIGNoZWNrOiBJcyB0aGVyZSAqYW55KiByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdHMgd2F5IGludG8gdXNlciBzcGFjZSwgb3IgYWZmZWN0aW5nIGNvbnRyb2wgZmxvdz8gQWZ0ZXIgdGhpcyB0aG9yb3VnaCByZXZpZXcsIEknbSBjb25maWRlbnQgdGhlcmUgaXMgbm8gcmlzay5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgbm90IG5lY2Vzc2FyeSBpbiB0aGlzIGNhc2UuIEtBU0FOIGFuZCBMT0NLREVQIG9mZmVyIGFkZXF1YXRlIHByb3RlY3Rpb24gYWdhaW5zdCB0aGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIGRlcmVmZXJlbmNlcywgYW5kIGRlYWRsb2Nrcy4gSSB3aWxsIGZvcm11bGF0ZSB0aGlzIHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgwOSwiT3V0cHV0VG9rZW5zIjoyNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MDg6MTguODY2NDU3MzkxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gc3VwcG9ydCBwYXJ0aXRpb24gY2xvbmluZyBhbmQgbWlycm9yaW5nIGFjcm9zcyBibG9jayBkZXZpY2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWVsZHMgaW4gYHN0cnVjdCBnZW5kaXNrYCAodmlhIGEgdW5pb24gZm9yIGhlYWQvbWlycm9yIHJvbGVzKSBhbmQgYWRkcyBmdW5jdGlvbnMgbGlrZSBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCBhbmQgYGRpc2tfYWRkX21pcnJvcmAuIFxcblxcblRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHN0cnVjdHVyYWwgbGlua2luZyAoaGxpc3Qgb3BlcmF0aW9ucyksIGxvY2tpbmcgKGBvcGVuX211dGV4YCksIGFuZCBibG9jayBkZXZpY2UvYmlvIHJvdXRpbmcuIFRoZXJlIGFyZSBubyBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGFuZCBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgdGhlcmUgYW55IG1vZGlmaWNhdGlvbnMgdG8gdXNlci1zcGFjZSBBUElzIChsaWtlIGlvY3RscyBvciBuZXRsaW5rKSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gVGhlIHBhcnRpdGlvbiBjbG9uaW5nIHJlbGllcyBvbiByZWFkaW5nIGZpZWxkcyBmcm9tIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFydGl0aW9ucyAoYGJkX3N0YXJ0X3NlY3RgLCBgYmRfbnJfc2VjdG9yc2AsIGBiZF9tZXRhX2luZm9gKS4gXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgaGVhZCBkaXNrIGlzIGZyZWVkIGJlZm9yZSBpdHMgbWlycm9ycyksIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxvY2tpbmcgZGVhZGxvY2tzLiBUaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayBsYXllciBhbmQgTlZNZSBtdWx0aXBhdGggY29kZSB0byBzdXBwb3J0IHBhcnRpdGlvbiBjbG9uaW5nIGFuZCBtaXJyb3JpbmcgYWNyb3NzIGJsb2NrIGRldmljZXMuIEl0IGludHJvZHVjZXMgbmV3IGZpZWxkcyBpbiBgc3RydWN0IGdlbmRpc2tgICh2aWEgYSB1bmlvbiBmb3IgaGVhZC9taXJyb3Igcm9sZXMpIGFuZCBhZGRzIGZ1bmN0aW9ucyBsaWtlIGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgIGFuZCBgZGlza19hZGRfbWlycm9yYC4gXFxuXFxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RydWN0dXJhbCBsaW5raW5nIChobGlzdCBvcGVyYXRpb25zKSwgbG9ja2luZyAoYG9wZW5fbXV0ZXhgKSwgYW5kIGJsb2NrIGRldmljZS9iaW8gcm91dGluZy4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIEFQSXMgKGxpa2UgaW9jdGxzIG9yIG5ldGxpbmspIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGUgcGFydGl0aW9uIGNsb25pbmcgcmVsaWVzIG9uIHJlYWRpbmcgZmllbGRzIGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBwYXJ0aXRpb25zIChgYmRfc3RhcnRfc2VjdGAsIGBiZF9ucl9zZWN0b3JzYCwgYGJkX21ldGFfaW5mb2ApLiBcXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSBoZWFkIGRpc2sgaXMgZnJlZWQgYmVmb3JlIGl0cyBtaXJyb3JzKSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbG9ja2luZyBkZWFkbG9ja3MuIFRoZXNlIGNsYXNzZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowdlrqm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 08:50:25 +0000 UTC FinishedAt: 2026-08-21 09:08:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a33221f7ab120e9a6caa62c3ff8a1b09674370e8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NVME", "NVME_MULTIPATH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a33221f7ab120e9a6caa62c3ff8a1b09674370e8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NVME", "NVME_MULTIPATH" ], "series_id": "8c09bb57-9ae4-41f5-bfbe-2f2c324725d2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bdev_clone_partitions", "disk_add_mirror", "bdev_disk_changed", "nvme_failover_req", "nvme_mpath_start_request", "nvme_mpath_end_request" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JkZXZfY2xvbmVfcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtkaXNrX2FkZF9taXJyb3ImIzM0OywKICAgICYjMzQ7YmRldl9kaXNrX2NoYW5nZWQmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O252bWVfbXBhdGhfZW5kX3JlcXVlc3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gc3VwcG9ydCBwYXJ0aXRpb24gY2xvbmluZyBhbmQgbWlycm9yaW5nIGFjcm9zcyBibG9jayBkZXZpY2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWVsZHMgaW4gYHN0cnVjdCBnZW5kaXNrYCAodmlhIGEgdW5pb24gZm9yIGhlYWQvbWlycm9yIHJvbGVzKSBhbmQgYWRkcyBmdW5jdGlvbnMgbGlrZSBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCBhbmQgYGRpc2tfYWRkX21pcnJvcmAuIFxuXG5UaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdHJ1Y3R1cmFsIGxpbmtpbmcgKGhsaXN0IG9wZXJhdGlvbnMpLCBsb2NraW5nIChgb3Blbl9tdXRleGApLCBhbmQgYmxvY2sgZGV2aWNlL2JpbyByb3V0aW5nLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBhbmQgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgQVBJcyAobGlrZSBpb2N0bHMgb3IgbmV0bGluaykgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIFRoZSBwYXJ0aXRpb24gY2xvbmluZyByZWxpZXMgb24gcmVhZGluZyBmaWVsZHMgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHBhcnRpdGlvbnMgKGBiZF9zdGFydF9zZWN0YCwgYGJkX25yX3NlY3RvcnNgLCBgYmRfbWV0YV9pbmZvYCkuIFxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSBoZWFkIGRpc2sgaXMgZnJlZWQgYmVmb3JlIGl0cyBtaXJyb3JzKSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbG9ja2luZyBkZWFkbG9ja3MuIFRoZXNlIGNsYXNzZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbWVjaGFuaXNtIHRvIGNsb25lIHBhcnRpdGlvbnMgYmV0d2VlbiBgZ2VuZGlza2BzIChtaXJyb3JzKSwgc3BlY2lmaWNhbGx5IHV0aWxpemVkIGJ5IHRoZSBOVk1lIG11bHRpcGF0aCBkcml2ZXIgdG8gaGFuZGxlIHBhcnRpdGlvbnMgb24gbXVsdGlwYXRoIGRldmljZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBwYXJ0aXRpb24gaGFuZGxpbmcgYW5kIE5WTWUgbXVsdGlwYXRoIHJlcXVlc3Qgcm91dGluZywgd2hpY2ggYXJlIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBhbmQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgZW11bGF0ZWQgTlZNZSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTk2MmJlY2I4NDkzZjI4MzFjN2JhYmVhZmNmMWIyZjJiNjJiNWRkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjA3OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcbmluZGV4IDUwYWJmZDkzMjg4NjEuLjUwMjgwNWU1ZjkyOWYgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmhcbkBAIC02MzgsNiAmIzQzOzYzOCw3IEBAIGludCBiZGV2X2RlbF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8pO1xuIGludCBiZGV2X3Jlc2l6ZV9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8sIHNlY3Rvcl90IHN0YXJ0LFxuIFx0XHRzZWN0b3JfdCBsZW5ndGgpO1xuIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCk7XG4mIzQzO2ludCBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2spO1xuIFxuIHZvaWQgYmRldl9zZXRfbnJfc2VjdG9ycyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3JzKTtcbiBcbmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuY1xuaW5kZXggZjE5OTBjN2NkZmI5MS4uMzUxYWM5M2FiZWFiMyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC00MTksNiAmIzQzOzQxOSwxNyBAQCBzdGF0aWMgdm9pZCBhZGRfZGlza19maW5hbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGlza191ZXZlbnQoZGlzaywgS09CSl9BREQpO1xuIFx0fVxuIFxuJiM0MztcdGlmIChkaXNrLVx1MDAzZWhlYWQpIHtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZWhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4mIzQzO1x0XHRyZXQgPSBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoZGlzayk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0ZGV2X2VycihkaXNrX3RvX2RldihkaXNrKSwgXCYjMzQ7Y291bGQgbm90IGNsb25lIHBhcnRpdGlvbnMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRyZXQpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRibGtfYXBwbHlfYmRpX2xpbWl0cyhkaXNrLVx1MDAzZWJkaSwgXHUwMDI2ZGlzay1cdTAwM2VxdWV1ZS1cdTAwM2VsaW1pdHMpO1xuIFx0ZGlza19hZGRfZXZlbnRzKGRpc2spO1xuIFx0c2V0X2JpdChHRF9BRERFRCwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSk7XG5AQCAtNDMyLDYgJiM0Mzs0NDMsOSBAQCBzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdHN0cnVjdCBkZXZpY2UgKmRkZXYgPSBkaXNrX3RvX2RldihkaXNrKTtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKGRpc2stXHUwMDNlaGVhZCBcdTAwMjZcdTAwMjYgZGlza19oYXNfcGFydHNjYW4oZGlzaykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKGJkZXZfbnJfc2VjdG9ycyhkaXNrLVx1MDAzZXBhcnQwKSBcdTAwM2UgQkxLX0RFVl9NQVhfU0VDVE9SUykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTcwOSw2ICYjNDM7NzIzLDEyIEBAIHN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRcdGJkZXZfdW5oYXNoKHBhcnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4gXG4mIzQzO1x0aWYgKGRpc2stXHUwMDNlaGVhZCkge1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZWhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4mIzQzO1x0XHRobGlzdF9kZWwoXHUwMDI2ZGlzay1cdTAwM2VtaXJyb3Jfbm9kZSk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogVGVsbCB0aGUgZmlsZSBzeXN0ZW0gdG8gd3JpdGUgYmFjayBhbGwgZGlydHkgZGF0YSBhbmQgc2h1dCBkb3duIGlmXG4gXHQgKiBpdCBoYXNuJiMzOTt0IGJlZW4gbm90aWZpZWQgZWFybGllci5cbkBAIC0xMzY5LDcgJiM0MzsxMzg5LDggQEAgc3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR4YV9mb3JfZWFjaChcdTAwMjZncC1cdTAwM2VwYXJ0X3RibCwgaWR4LCBoZCkge1xuLVx0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFx1MDAyNlx1MDAyNiAhYmRldl9ucl9zZWN0b3JzKGhkKSlcbiYjNDM7XHRcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8IChncC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7XG5AQCAtMTUxMCw2ICYjNDM7MTUzMSwxOCBAQCBzdHJ1Y3QgZ2VuZGlzayAqX19hbGxvY19kaXNrX25vZGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBub2RlX2lkLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0Mzt2b2lkIGRpc2tfYWRkX21pcnJvcihzdHJ1Y3QgZ2VuZGlzayAqaGVhZCwgc3RydWN0IGdlbmRpc2sgKm1pcnJvcilcbiYjNDM7e1xuJiM0MztcdGlmICghaGVhZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRXQVJOX09OX09OQ0UodGVzdF9iaXQoR0RfQURERUQsIFx1MDAyNm1pcnJvci1cdTAwM2VzdGF0ZSkpO1xuJiM0MztcdG1pcnJvci1cdTAwM2VoZWFkID0gaGVhZDtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4mIzQzO1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bWlycm9yLVx1MDAzZW1pcnJvcl9ub2RlLCBcdTAwMjZoZWFkLVx1MDAzZW1pcnJvcl9oZWFkKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2aGVhZC1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChkaXNrX2FkZF9taXJyb3IpO1xuJiM0MztcbiBzdHJ1Y3QgZ2VuZGlzayAqX19ibGtfYWxsb2NfZGlzayhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIGludCBub2RlLFxuIFx0XHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmxrY2xhc3MpXG4ge1xuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLmJhZjc5MmJlY2Y2OTkgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbkBAIC02NDQsNiAmIzQzOzY0NCw3IEBAIHN0YXRpYyBpbnQgYmxrX2FkZF9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIGludCBiZGV2X2Rpc2tfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYm9vbCBpbnZhbGlkYXRlKVxuIHtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQ7XG4mIzQzO1x0c3RydWN0IGdlbmRpc2sgKm1pcnJvcjtcbiBcdHVuc2lnbmVkIGxvbmcgaWR4O1xuIFx0aW50IHJldCA9IDA7XG4gXG5AQCAtNzAzLDYgJiM0Mzs3MDQsMTMgQEAgaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpXG4gXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNmRpc2tfdG9fZGV2KGRpc2spLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiBcdH1cbiBcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeShtaXJyb3IsIFx1MDAyNmRpc2stXHUwMDNlbWlycm9yX2hlYWQsXG4mIzQzO1x0XHRcdFx0bWlycm9yX25vZGUpIHtcbiYjNDM7XHRcdHJldCA9IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhtaXJyb3IpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiByZXQ7XG4gfVxuIC8qXG5AQCAtNzExLDYgJiM0Mzs3MTksNDMgQEAgaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpXG4gICovXG4gRVhQT1JUX1NZTUJPTF9HUEwoYmRldl9kaXNrX2NoYW5nZWQpO1xuIFxuJiM0MztpbnQgYmRldl9jbG9uZV9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJsb2NrX2RldmljZSAqcGFydDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGlkeDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkaXNrLVx1MDAzZWhlYWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdHhhX2Zvcl9lYWNoX3N0YXJ0KFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIGlkeCwgcGFydCwgMSkge1xuJiM0MztcdFx0LyogU2FtZSBhcyBiZGV2X2Rpc2tfY2hhbmdlZCgpICovXG4mIzQzO1x0XHRiZGV2X3VuaGFzaChwYXJ0KTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRShhdG9taWNfcmVhZChcdTAwMjZwYXJ0LVx1MDAzZWJkX29wZW5lcnMpKTtcbiYjNDM7XHRcdGludmFsaWRhdGVfYmRldihwYXJ0KTtcbiYjNDM7XHRcdGRyb3BfcGFydGl0aW9uKHBhcnQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eGFfZm9yX2VhY2hfc3RhcnQoXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZXBhcnRfdGJsLCBpZHgsIHBhcnQsIDEpIHtcbiYjNDM7XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnRfYWRkZWQ7XG4mIzQzO1xuJiM0MztcdFx0cGFydF9hZGRlZCA9IGFkZF9wYXJ0aXRpb24oZGlzaywgaWR4LCBwYXJ0LVx1MDAzZWJkX3N0YXJ0X3NlY3QsXG4mIzQzO1x0XHRcdFx0XHRwYXJ0LVx1MDAzZWJkX25yX3NlY3RvcnMsIEFERFBBUlRfRkxBR19OT05FLFxuJiM0MztcdFx0XHRcdFx0cGFydC1cdTAwM2ViZF9tZXRhX2luZm8pO1xuJiM0MztcdFx0aWYgKElTX0VSUihwYXJ0X2FkZGVkKSkge1xuJiM0MztcdFx0XHRpZiAoUFRSX0VSUihwYXJ0X2FkZGVkKSAhPSAtRU5YSU8pIHtcbiYjNDM7XHRcdFx0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KGRpc2spLCBcJiMzNDtwJWxkIGNvdWxkIG5vdCBiZSBhZGRlZDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBpZHgsIHBhcnRfYWRkZWQpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihwYXJ0X2FkZGVkKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgKnJlYWRfcGFydF9zZWN0b3Ioc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSwgc2VjdG9yX3QgbiwgU2VjdG9yICpwKVxuIHtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3RhdGUtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MC1cdTAwM2ViZF9tYXBwaW5nO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuaW5kZXggMTMyMmM2NzhmNGViOC4uYjk0YjlhM2JjZWIyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5AQCAtNDI3Myw2ICYjNDM7NDI3Myw3IEBAIHN0YXRpYyB2b2lkIG52bWVfYWxsb2NfbnMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbiBcdFx0c3ByaW50ZihkaXNrLVx1MDAzZWRpc2tfbmFtZSwgXCYjMzQ7bnZtZSVkYyVkbiVkXCYjMzQ7LCBjdHJsLVx1MDAzZXN1YnN5cy1cdTAwM2VpbnN0YW5jZSxcbiBcdFx0XHRjdHJsLVx1MDAzZWluc3RhbmNlLCBucy1cdTAwM2VoZWFkLVx1MDAzZWluc3RhbmNlKTtcbiBcdFx0ZGlzay1cdTAwM2VmbGFncyB8PSBHRU5IRF9GTF9ISURERU47XG4mIzQzO1x0XHRkaXNrX2FkZF9taXJyb3IobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLCBucy1cdTAwM2VkaXNrKTtcbiBcdH0gZWxzZSBpZiAobXVsdGlwYXRoKSB7XG4gXHRcdHNwcmludGYoZGlzay1cdTAwM2VkaXNrX25hbWUsIFwmIzM0O252bWUlZG4lZFwmIzM0OywgY3RybC1cdTAwM2VzdWJzeXMtXHUwMDNlaW5zdGFuY2UsXG4gXHRcdFx0bnMtXHUwMDNlaGVhZC1cdTAwM2VpbnN0YW5jZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuaW5kZXggNzVkYmI1ODI4NmEzMi4uYmQ0MDU2ZjFhOWYyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuQEAgLTE0NCw2ICYjNDM7MTQ0LDIzIEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9mcmVlemUoc3RydWN0IG52bWVfc3Vic3lzdGVtICpzdWJzeXMpXG4gXHRcdFx0YmxrX2ZyZWV6ZV9xdWV1ZV9zdGFydChoLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZGlza190b19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuJiM0MztcdFx0XHRcdFx0XHR1OCBwYXJ0bm8pXG4mIzQzO3tcbiYjNDM7XHQvKiBRdWljayBsb29rdXAgZm9yIHdob2xlIGRpc2sgKi9cbiYjNDM7XHRpZiAoIXBhcnRubylcbiYjNDM7XHRcdHJldHVybiBkaXNrLVx1MDAzZXBhcnQwO1xuJiM0MztcdHJldHVybiB4YV9sb2FkKFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIHBhcnRubyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWJkZXYpXG4mIzQzO1x0XHRyZXR1cm4gZGlzay1cdTAwM2VwYXJ0MDtcbiYjNDM7XHRyZXR1cm4gbnZtZV9kaXNrX3RvX3BhcnQoZGlzaywgYmRldl9wYXJ0bm8oYmRldikpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiB7XG4gXHRzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5AQCAtMTY1LDggJiM0MzsxODIsMTAgQEAgdm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcbi1cdGZvciAoYmlvID0gcmVxLVx1MDAzZWJpbzsgYmlvOyBiaW8gPSBiaW8tXHUwMDNlYmlfbmV4dClcbi1cdFx0YmlvX3NldF9kZXYoYmlvLCBucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2stXHUwMDNlcGFydDApO1xuJiM0MztcdGZvciAoYmlvID0gcmVxLVx1MDAzZWJpbzsgYmlvOyBiaW8gPSBiaW8tXHUwMDNlYmlfbmV4dCkge1xuJiM0MztcdFx0YmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4mIzQzO1x0XHRcdFx0YmlvLVx1MDAzZWJpX2JkZXYpKTtcbiYjNDM7XHR9XG4gXHRibGtfc3RlYWxfYmlvcyhcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbGlzdCwgcmVxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcbiBcbkBAIC0xOTQsOCAmIzQzOzIxMyw5IEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bnZtZV9yZXEocnEpLVx1MDAzZWZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7XG4tXHRudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuLVx0XHRcdFx0XHRcdCAgICAgIGppZmZpZXMpO1xuJiM0MztcdG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KFxuJiM0MztcdFx0XHRudm1lX3RvX2Rpc2tfcGFydChkaXNrLCBycS1cdTAwM2VwYXJ0KSxcbiYjNDM7XHRcdFx0cmVxX29wKHJxKSwgamlmZmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7XG4gXG5AQCAtMjA4LDcgJiM0MzsyMjgsOCBAQCB2b2lkIG52bWVfbXBhdGhfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuIFxuIFx0aWYgKCEobnZtZV9yZXEocnEpLVx1MDAzZWZsYWdzIFx1MDAyNiBOVk1FX01QQVRIX0lPX1NUQVRTKSlcbiBcdFx0cmV0dXJuO1xuLVx0YmRldl9lbmRfaW9fYWNjdChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2stXHUwMDNlcGFydDAsIHJlcV9vcChycSksXG4mIzQzO1x0YmRldl9lbmRfaW9fYWNjdChudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4mIzQzO1x0XHRcdCBycS1cdTAwM2VwYXJ0KSwgcmVxX29wKHJxKSxcbiBcdFx0XHQgYmxrX3JxX2J5dGVzKHJxKSBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZULFxuIFx0XHRcdCBudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSk7XG4gfVxuQEAgLTUzMCwxMSAmIzQzOzU1MSwyMSBAQCBzdGF0aWMgYm9vbCBudm1lX2F2YWlsYWJsZV9wYXRoKHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQpXG4gXHRyZXR1cm4gbnZtZV9tcGF0aF9xdWV1ZV9pZl9ub19wYXRoKGhlYWQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZmluZF9wYXRoX2JkZXYoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCxcbiYjNDM7XHRcdFx0XHRcdFx0dTggcGFydG5vKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWVfbnMgKm5zID0gbnZtZV9maW5kX3BhdGgoaGVhZCk7XG4mIzQzO1xuJiM0MztcdGlmICghbnMpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gbnZtZV9kaXNrX3RvX3BhcnQobnMtXHUwMDNlZGlzaywgcGFydG5vKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0c3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCA9IGJpby1cdTAwM2ViaV9iZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gZGlza190b19kZXYoaGVhZC1cdTAwM2VkaXNrKTtcbi1cdHN0cnVjdCBudm1lX25zICpucztcbiYjNDM7XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2O1xuIFx0aW50IHNyY3VfaWR4O1xuIFxuIFx0LypcbkBAIC01NDcsOSAmIzQzOzU3OCw5IEBAIHN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZoZWFkLVx1MDAzZXNyY3UpO1xuLVx0bnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTtcbi1cdGlmIChsaWtlbHkobnMpKSB7XG4tXHRcdGJpb19zZXRfZGV2KGJpbywgbnMtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCk7XG4mIzQzO1x0YmRldiA9IG52bWVfZmluZF9wYXRoX2JkZXYoaGVhZCwgYmRldl9wYXJ0bm8oYmlvLVx1MDAzZWJpX2JkZXYpKTtcbiYjNDM7XHRpZiAobGlrZWx5KGJkZXYpKSB7XG4mIzQzO1x0XHRiaW9fc2V0X2RldihiaW8sIGJkZXYpO1xuIFx0XHQvKlxuIFx0XHQgKiBVc2UgQklPX1JFTUFQUEVEIHRvIHNraXAgYmlvX2NoZWNrX2VvZCgpIHdoZW4gdGhpcyBiaW9cbiBcdFx0ICogZW50ZXJzIHN1Ym1pdF9iaW9fbm9hY2N0KCkgZm9yIHRoZSBwZXItcGF0aCBkZXZpY2UuIFRoZSBFT0RcbkBAIC01NTcsNyAmIzQzOzU4OCw3IEBAIHN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0ICovXG4gXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19SRU1BUFBFRCk7XG4gXHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05WTUVfTVBBVEg7XG4tXHRcdHRyYWNlX2Jsb2NrX2Jpb19yZW1hcChiaW8sIGRpc2tfZGV2dChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2spLFxuJiM0MztcdFx0dHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJpbywgZGlza19kZXZ0KGhlYWQtXHUwMDNlZGlzayksXG4gXHRcdFx0XHQgICAgICBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IpO1xuIFx0XHRzdWJtaXRfYmlvX25vYWNjdChiaW8pO1xuIFx0fSBlbHNlIGlmIChudm1lX2F2YWlsYWJsZV9wYXRoKGhlYWQpKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDIwY2I4ZWQ3ZDk4N2EuLjdmMzU2M2MwZjU1MzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTg3LDYgJiM0MzsxODcsMTMgQEAgc3RydWN0IGdlbmRpc2sge1xuICNpZmRlZiBDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcbiBcdHN0cnVjdCBsaXN0X2hlYWQgc2xhdmVfYmRldnM7XG4gI2VuZGlmXG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IGhsaXN0X2hlYWQgbWlycm9yX2hlYWQ7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSBtaXJyb3Jfbm9kZTtcbiYjNDM7XHRcdFx0c3RydWN0IGdlbmRpc2sgKmhlYWQ7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4gXHRzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqcmFuZG9tO1xuIFx0c3RydWN0IGRpc2tfZXZlbnRzICpldjtcbiBcbkBAIC05NzcsNiAmIzQzOzk4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJkZXZfbnJfem9uZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiB9XG4gXG4gaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpO1xuJiM0Mzt2b2lkIGRpc2tfYWRkX21pcnJvcihzdHJ1Y3QgZ2VuZGlzayAqaGVhZCwgc3RydWN0IGdlbmRpc2sgKm1pcnJvcik7XG4gXG4gdm9pZCBwdXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG4gc3RydWN0IGdlbmRpc2sgKl9fYmxrX2FsbG9jX2Rpc2soc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBpbnQgbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDssCiAgICAmIzM0O05WTUVfTVVMVElQQVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmRldl9jbG9uZV9wYXJ0aXRpb25zJiMzNDssCiAgICAmIzM0O2Rpc2tfYWRkX21pcnJvciYjMzQ7LAogICAgJiMzNDtiZGV2X2Rpc2tfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDtudm1lX2ZhaWxvdmVyX3JlcSYjMzQ7LAogICAgJiMzNDtudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bnZtZV9tcGF0aF9lbmRfcmVxdWVzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSB0byBjbG9uZSBwYXJ0aXRpb25zIGJldHdlZW4gYGdlbmRpc2tgcyAobWlycm9ycyksIHNwZWNpZmljYWxseSB1dGlsaXplZCBieSB0aGUgTlZNZSBtdWx0aXBhdGggZHJpdmVyIHRvIGhhbmRsZSBwYXJ0aXRpb25zIG9uIG11bHRpcGF0aCBkZXZpY2VzLiBUaGlzIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgcGFydGl0aW9uIGhhbmRsaW5nIGFuZCBOVk1lIG11bHRpcGF0aCByZXF1ZXN0IHJvdXRpbmcsIHdoaWNoIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGVtdWxhdGVkIE5WTWUgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU5NjJiZWNiODQ5M2YyODMxYzdiYWJlYWZjZjFiMmYyYjYyYjVkZDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwOTowNzozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmgKaW5kZXggNTBhYmZkOTMyODg2MS4uNTAyODA1ZTVmOTI5ZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLmgKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmgKQEAgLTYzOCw2ICYjNDM7NjM4LDcgQEAgaW50IGJkZXZfZGVsX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgaW50IHBhcnRubyk7CiBpbnQgYmRldl9yZXNpemVfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBpbnQgcGFydG5vLCBzZWN0b3JfdCBzdGFydCwKIAkJc2VjdG9yX3QgbGVuZ3RoKTsKIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCk7CiYjNDM7aW50IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CiAKIHZvaWQgYmRldl9zZXRfbnJfc2VjdG9ycyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3JzKTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggZjE5OTBjN2NkZmI5MS4uMzUxYWM5M2FiZWFiMyAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9nZW5oZC5jCkBAIC00MTksNiAmIzQzOzQxOSwxNyBAQCBzdGF0aWMgdm9pZCBhZGRfZGlza19maW5hbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAkJZGlza191ZXZlbnQoZGlzaywgS09CSl9BREQpOwogCX0KIAomIzQzOwlpZiAoZGlzay0mZ3Q7aGVhZCkgewomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtkaXNrLSZndDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0MzsJCXJldCA9IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhkaXNrKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O2hlYWQtJmd0O29wZW5fbXV0ZXgpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlkZXZfZXJyKGRpc2tfdG9fZGV2KGRpc2spLCAmIzM0O2NvdWxkIG5vdCBjbG9uZSBwYXJ0aXRpb25zICglZClcbiYjMzQ7LAomIzQzOwkJCQlyZXQpOwomIzQzOwl9CiYjNDM7CiAJYmxrX2FwcGx5X2JkaV9saW1pdHMoZGlzay0mZ3Q7YmRpLCAmYW1wO2Rpc2stJmd0O3F1ZXVlLSZndDtsaW1pdHMpOwogCWRpc2tfYWRkX2V2ZW50cyhkaXNrKTsKIAlzZXRfYml0KEdEX0FEREVELCAmYW1wO2Rpc2stJmd0O3N0YXRlKTsKQEAgLTQzMiw2ICYjNDM7NDQzLDkgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJc3RydWN0IGRldmljZSAqZGRldiA9IGRpc2tfdG9fZGV2KGRpc2spOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKGRpc2stJmd0O2hlYWQgJmFtcDsmYW1wOyBkaXNrX2hhc19wYXJ0c2NhbihkaXNrKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWlmIChXQVJOX09OX09OQ0UoYmRldl9ucl9zZWN0b3JzKGRpc2stJmd0O3BhcnQwKSAmZ3Q7IEJMS19ERVZfTUFYX1NFQ1RPUlMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNzA5LDYgJiM0Mzs3MjMsMTIgQEAgc3RhdGljIHZvaWQgX19kZWxfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAkJYmRldl91bmhhc2gocGFydCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiAKJiM0MzsJaWYgKGRpc2stJmd0O2hlYWQpIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtkaXNrLSZndDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0MzsJCWhsaXN0X2RlbCgmYW1wO2Rpc2stJmd0O21pcnJvcl9ub2RlKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O2hlYWQtJmd0O29wZW5fbXV0ZXgpOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBUZWxsIHRoZSBmaWxlIHN5c3RlbSB0byB3cml0ZSBiYWNrIGFsbCBkaXJ0eSBkYXRhIGFuZCBzaHV0IGRvd24gaWYKIAkgKiBpdCBoYXNuJiMzOTt0IGJlZW4gbm90aWZpZWQgZWFybGllci4KQEAgLTEzNjksNyAmIzQzOzEzODksOCBAQCBzdGF0aWMgaW50IGRpc2tzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxZiwgdm9pZCAqdikKIAogCXJjdV9yZWFkX2xvY2soKTsKIAl4YV9mb3JfZWFjaCgmYW1wO2dwLSZndDtwYXJ0X3RibCwgaWR4LCBoZCkgewotCQlpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpICZhbXA7JmFtcDsgIWJkZXZfbnJfc2VjdG9ycyhoZCkpCiYjNDM7CQlpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWJkZXZfbnJfc2VjdG9ycyhoZCkgfHwgKGdwLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKSkKIAkJCWNvbnRpbnVlOwogCiAJCWluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7CkBAIC0xNTEwLDYgJiM0MzsxNTMxLDE4IEBAIHN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0Mzt2b2lkIGRpc2tfYWRkX21pcnJvcihzdHJ1Y3QgZ2VuZGlzayAqaGVhZCwgc3RydWN0IGdlbmRpc2sgKm1pcnJvcikKJiM0Mzt7CiYjNDM7CWlmICghaGVhZCkKJiM0MzsJCXJldHVybjsKJiM0MzsJV0FSTl9PTl9PTkNFKHRlc3RfYml0KEdEX0FEREVELCAmYW1wO21pcnJvci0mZ3Q7c3RhdGUpKTsKJiM0MzsJbWlycm9yLSZndDtoZWFkID0gaGVhZDsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2hlYWQtJmd0O29wZW5fbXV0ZXgpOwomIzQzOwlobGlzdF9hZGRfaGVhZCgmYW1wO21pcnJvci0mZ3Q7bWlycm9yX25vZGUsICZhbXA7aGVhZC0mZ3Q7bWlycm9yX2hlYWQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZGlza19hZGRfbWlycm9yKTsKJiM0MzsKIHN0cnVjdCBnZW5kaXNrICpfX2Jsa19hbGxvY19kaXNrKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGUsCiAJCXN0cnVjdCBsb2NrX2NsYXNzX2tleSAqbGtjbGFzcykKIHsKZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKaW5kZXggYjVjNTliNzljYTdjYi4uYmFmNzkyYmVjZjY5OSAxMDA2NDQKLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKQEAgLTY0NCw2ICYjNDM7NjQ0LDcgQEAgc3RhdGljIGludCBibGtfYWRkX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSkKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0OwomIzQzOwlzdHJ1Y3QgZ2VuZGlzayAqbWlycm9yOwogCXVuc2lnbmVkIGxvbmcgaWR4OwogCWludCByZXQgPSAwOwogCkBAIC03MDMsNiAmIzQzOzcwNCwxMyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSkKIAkJa29iamVjdF91ZXZlbnQoJmFtcDtkaXNrX3RvX2RldihkaXNrKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogCX0KIAomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShtaXJyb3IsICZhbXA7ZGlzay0mZ3Q7bWlycm9yX2hlYWQsCiYjNDM7CQkJCW1pcnJvcl9ub2RlKSB7CiYjNDM7CQlyZXQgPSBiZGV2X2Nsb25lX3BhcnRpdGlvbnMobWlycm9yKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogLyoKQEAgLTcxMSw2ICYjNDM7NzE5LDQzIEBAIGludCBiZGV2X2Rpc2tfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYm9vbCBpbnZhbGlkYXRlKQogICovCiBFWFBPUlRfU1lNQk9MX0dQTChiZGV2X2Rpc2tfY2hhbmdlZCk7CiAKJiM0MztpbnQgYmRldl9jbG9uZV9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGJsb2NrX2RldmljZSAqcGFydDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpZHg7CiYjNDM7CiYjNDM7CWlmICghZGlzay0mZ3Q7aGVhZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CXhhX2Zvcl9lYWNoX3N0YXJ0KCZhbXA7ZGlzay0mZ3Q7cGFydF90YmwsIGlkeCwgcGFydCwgMSkgewomIzQzOwkJLyogU2FtZSBhcyBiZGV2X2Rpc2tfY2hhbmdlZCgpICovCiYjNDM7CQliZGV2X3VuaGFzaChwYXJ0KTsKJiM0MzsJCVdBUk5fT05fT05DRShhdG9taWNfcmVhZCgmYW1wO3BhcnQtJmd0O2JkX29wZW5lcnMpKTsKJiM0MzsJCWludmFsaWRhdGVfYmRldihwYXJ0KTsKJiM0MzsJCWRyb3BfcGFydGl0aW9uKHBhcnQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXhhX2Zvcl9lYWNoX3N0YXJ0KCZhbXA7ZGlzay0mZ3Q7aGVhZC0mZ3Q7cGFydF90YmwsIGlkeCwgcGFydCwgMSkgewomIzQzOwkJc3RydWN0IGJsb2NrX2RldmljZSAqcGFydF9hZGRlZDsKJiM0MzsKJiM0MzsJCXBhcnRfYWRkZWQgPSBhZGRfcGFydGl0aW9uKGRpc2ssIGlkeCwgcGFydC0mZ3Q7YmRfc3RhcnRfc2VjdCwKJiM0MzsJCQkJCXBhcnQtJmd0O2JkX25yX3NlY3RvcnMsIEFERFBBUlRfRkxBR19OT05FLAomIzQzOwkJCQkJcGFydC0mZ3Q7YmRfbWV0YV9pbmZvKTsKJiM0MzsJCWlmIChJU19FUlIocGFydF9hZGRlZCkpIHsKJiM0MzsJCQlpZiAoUFRSX0VSUihwYXJ0X2FkZGVkKSAhPSAtRU5YSU8pIHsKJiM0MzsJCQkJZGV2X2VycihkaXNrX3RvX2RldihkaXNrKSwgJiMzNDtwJWxkIGNvdWxkIG5vdCBiZSBhZGRlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgICAgIGlkeCwgcGFydF9hZGRlZCk7CiYjNDM7CQkJfQomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwkJCXJldHVybiBQVFJfRVJSKHBhcnRfYWRkZWQpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkICpyZWFkX3BhcnRfc2VjdG9yKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHNlY3Rvcl90IG4sIFNlY3RvciAqcCkKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHN0YXRlLSZndDtkaXNrLSZndDtwYXJ0MC0mZ3Q7YmRfbWFwcGluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwppbmRleCAxMzIyYzY3OGY0ZWI4Li5iOTRiOWEzYmNlYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCkBAIC00MjczLDYgJiM0Mzs0MjczLDcgQEAgc3RhdGljIHZvaWQgbnZtZV9hbGxvY19ucyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKQogCQlzcHJpbnRmKGRpc2stJmd0O2Rpc2tfbmFtZSwgJiMzNDtudm1lJWRjJWRuJWQmIzM0OywgY3RybC0mZ3Q7c3Vic3lzLSZndDtpbnN0YW5jZSwKIAkJCWN0cmwtJmd0O2luc3RhbmNlLCBucy0mZ3Q7aGVhZC0mZ3Q7aW5zdGFuY2UpOwogCQlkaXNrLSZndDtmbGFncyB8PSBHRU5IRF9GTF9ISURERU47CiYjNDM7CQlkaXNrX2FkZF9taXJyb3IobnMtJmd0O2hlYWQtJmd0O2Rpc2ssIG5zLSZndDtkaXNrKTsKIAl9IGVsc2UgaWYgKG11bHRpcGF0aCkgewogCQlzcHJpbnRmKGRpc2stJmd0O2Rpc2tfbmFtZSwgJiMzNDtudm1lJWRuJWQmIzM0OywgY3RybC0mZ3Q7c3Vic3lzLSZndDtpbnN0YW5jZSwKIAkJCW5zLSZndDtoZWFkLSZndDtpbnN0YW5jZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jCmluZGV4IDc1ZGJiNTgyODZhMzIuLmJkNDA1NmYxYTlmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jCkBAIC0xNDQsNiAmIzQzOzE0NCwyMyBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfZnJlZXplKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKQogCQkJYmxrX2ZyZWV6ZV9xdWV1ZV9zdGFydChoLSZndDtkaXNrLSZndDtxdWV1ZSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV9kaXNrX3RvX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiYjNDM7CQkJCQkJdTggcGFydG5vKQomIzQzO3sKJiM0MzsJLyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovCiYjNDM7CWlmICghcGFydG5vKQomIzQzOwkJcmV0dXJuIGRpc2stJmd0O3BhcnQwOwomIzQzOwlyZXR1cm4geGFfbG9hZCgmYW1wO2Rpc2stJmd0O3BhcnRfdGJsLCBwYXJ0bm8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiYjNDM7CQkJCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQomIzQzO3sKJiM0MzsJaWYgKCFiZGV2KQomIzQzOwkJcmV0dXJuIGRpc2stJmd0O3BhcnQwOwomIzQzOwlyZXR1cm4gbnZtZV9kaXNrX3RvX3BhcnQoZGlzaywgYmRldl9wYXJ0bm8oYmRldikpOwomIzQzO30KJiM0MzsKIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtJmd0O3EtJmd0O3F1ZXVlZGF0YTsKQEAgLTE2NSw4ICYjNDM7MTgyLDEwIEBAIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSkKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGJpbyA9IHJlcS0mZ3Q7YmlvOyBiaW87IGJpbyA9IGJpby0mZ3Q7YmlfbmV4dCkKLQkJYmlvX3NldF9kZXYoYmlvLCBucy0mZ3Q7aGVhZC0mZ3Q7ZGlzay0mZ3Q7cGFydDApOwomIzQzOwlmb3IgKGJpbyA9IHJlcS0mZ3Q7YmlvOyBiaW87IGJpbyA9IGJpby0mZ3Q7YmlfbmV4dCkgewomIzQzOwkJYmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzaywKJiM0MzsJCQkJYmlvLSZndDtiaV9iZGV2KSk7CiYjNDM7CX0KIAlibGtfc3RlYWxfYmlvcygmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xpc3QsIHJlcSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xvY2ssIGZsYWdzKTsKIApAQCAtMTk0LDggJiM0MzsyMTMsOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiAJCXJldHVybjsKIAogCW52bWVfcmVxKHJxKS0mZ3Q7ZmxhZ3MgfD0gTlZNRV9NUEFUSF9JT19TVEFUUzsKLQludm1lX3JlcShycSktJmd0O3N0YXJ0X3RpbWUgPSBiZGV2X3N0YXJ0X2lvX2FjY3QoZGlzay0mZ3Q7cGFydDAsIHJlcV9vcChycSksCi0JCQkJCQkgICAgICBqaWZmaWVzKTsKJiM0MzsJbnZtZV9yZXEocnEpLSZndDtzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KAomIzQzOwkJCW52bWVfdG9fZGlza19wYXJ0KGRpc2ssIHJxLSZndDtwYXJ0KSwKJiM0MzsJCQlyZXFfb3AocnEpLCBqaWZmaWVzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7CiAKQEAgLTIwOCw3ICYjNDM7MjI4LDggQEAgdm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKIAogCWlmICghKG52bWVfcmVxKHJxKS0mZ3Q7ZmxhZ3MgJmFtcDsgTlZNRV9NUEFUSF9JT19TVEFUUykpCiAJCXJldHVybjsKLQliZGV2X2VuZF9pb19hY2N0KG5zLSZndDtoZWFkLSZndDtkaXNrLSZndDtwYXJ0MCwgcmVxX29wKHJxKSwKJiM0MzsJYmRldl9lbmRfaW9fYWNjdChudm1lX3RvX2Rpc2tfcGFydChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzaywKJiM0MzsJCQkgcnEtJmd0O3BhcnQpLCByZXFfb3AocnEpLAogCQkJIGJsa19ycV9ieXRlcyhycSkgJmd0OyZndDsgU0VDVE9SX1NISUZULAogCQkJIG52bWVfcmVxKHJxKS0mZ3Q7c3RhcnRfdGltZSk7CiB9CkBAIC01MzAsMTEgJiM0Mzs1NTEsMjEgQEAgc3RhdGljIGJvb2wgbnZtZV9hdmFpbGFibGVfcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKQogCXJldHVybiBudm1lX21wYXRoX3F1ZXVlX2lmX25vX3BhdGgoaGVhZCk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV9maW5kX3BhdGhfYmRldihzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkLAomIzQzOwkJCQkJCXU4IHBhcnRubykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudm1lX25zICpucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpOwomIzQzOwomIzQzOwlpZiAoIW5zKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBudm1lX2Rpc2tfdG9fcGFydChucy0mZ3Q7ZGlzaywgcGFydG5vKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCA9IGJpby0mZ3Q7YmlfYmRldi0mZ3Q7YmRfZGlzay0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRpc2tfdG9fZGV2KGhlYWQtJmd0O2Rpc2spOwotCXN0cnVjdCBudm1lX25zICpuczsKJiM0MzsJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAlpbnQgc3JjdV9pZHg7CiAKIAkvKgpAQCAtNTQ3LDkgJiM0Mzs1NzgsOSBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pCiAJCXJldHVybjsKIAogCXNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soJmFtcDtoZWFkLSZndDtzcmN1KTsKLQlucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpOwotCWlmIChsaWtlbHkobnMpKSB7Ci0JCWJpb19zZXRfZGV2KGJpbywgbnMtJmd0O2Rpc2stJmd0O3BhcnQwKTsKJiM0MzsJYmRldiA9IG52bWVfZmluZF9wYXRoX2JkZXYoaGVhZCwgYmRldl9wYXJ0bm8oYmlvLSZndDtiaV9iZGV2KSk7CiYjNDM7CWlmIChsaWtlbHkoYmRldikpIHsKJiM0MzsJCWJpb19zZXRfZGV2KGJpbywgYmRldik7CiAJCS8qCiAJCSAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpbwogCQkgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRApAQCAtNTU3LDcgJiM0Mzs1ODgsNyBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pCiAJCSAqLwogCQliaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpOwogCQliaW8tJmd0O2JpX29wZiB8PSBSRVFfTlZNRV9NUEFUSDsKLQkJdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJpbywgZGlza19kZXZ0KG5zLSZndDtoZWFkLSZndDtkaXNrKSwKJiM0MzsJCXRyYWNlX2Jsb2NrX2Jpb19yZW1hcChiaW8sIGRpc2tfZGV2dChoZWFkLSZndDtkaXNrKSwKIAkJCQkgICAgICBiaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yKTsKIAkJc3VibWl0X2Jpb19ub2FjY3QoYmlvKTsKIAl9IGVsc2UgaWYgKG52bWVfYXZhaWxhYmxlX3BhdGgoaGVhZCkpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDIwY2I4ZWQ3ZDk4N2EuLjdmMzU2M2MwZjU1MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMTg3LDYgJiM0MzsxODcsMTMgQEAgc3RydWN0IGdlbmRpc2sgewogI2lmZGVmIENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRAogCXN0cnVjdCBsaXN0X2hlYWQgc2xhdmVfYmRldnM7CiAjZW5kaWYKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IGhsaXN0X2hlYWQgbWlycm9yX2hlYWQ7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXN0cnVjdCBobGlzdF9ub2RlIG1pcnJvcl9ub2RlOwomIzQzOwkJCXN0cnVjdCBnZW5kaXNrICpoZWFkOwomIzQzOwkJfTsKJiM0MzsJfTsKIAlzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqcmFuZG9tOwogCXN0cnVjdCBkaXNrX2V2ZW50cyAqZXY7CiAKQEAgLTk3Nyw2ICYjNDM7OTg0LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9ucl96b25lcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogfQogCiBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSk7CiYjNDM7dm9pZCBkaXNrX2FkZF9taXJyb3Ioc3RydWN0IGdlbmRpc2sgKmhlYWQsIHN0cnVjdCBnZW5kaXNrICptaXJyb3IpOwogCiB2b2lkIHB1dF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIHN0cnVjdCBnZW5kaXNrICpfX2Jsa19hbGxvY19kaXNrKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE5WTWUgTXVsdGlwYXRoIGFuZCBCbG9jayBMYXllciBNaXJyb3JpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRvIHJldmlldy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBhcmUgdGhlcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCB3YXJyYW50IGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSByZWZhY3RvcjsgaXQmIzM5O3MgYSBzdHJ1Y3R1cmFsIG1vZGlmaWNhdGlvbiwgYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGNyaXRpY2FsIGFyZWFzLgoKVGhlIHBhdGNoIGhpdHMgdGhlIGJsb2NrIGxheWVyIOKAkyBzcGVjaWZpY2FsbHkgYGJsay5oYCwgYGdlbmhkLmNgLCBhbmQgYHBhcnRpdGlvbnMvY29yZS5jYCDigJMgYW5kIHRoZW4gZGl2ZXMgaW50byB0aGUgTlZNZSBzdWJzeXN0ZW0sIG1vZGlmeWluZyBjb3JlIE5WTWUgaG9zdCBkcml2ZXIgbG9naWMgaW4gYGNvcmUuY2AgYW5kIG11bHRpcGF0aCBmdW5jdGlvbmFsaXR5IGluIGBtdWx0aXBhdGguY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyAmIzM0O21pcnJvciYjMzQ7IGNvbmNlcHQgZm9yIGBnZW5kaXNrYHMsIGNsb25pbmcgcGFydGl0aW9ucywgaXMgdGhlIGtleSBjaGFuZ2UgaGVyZS4gSXQmIzM5O3MgZXhwbGljaXRseSB1c2VkIGluIE5WTWUgbXVsdGlwYXRoLCBhZGRpbmcgdGhlIG1pcnJvciB3aXRoIGBkaXNrX2FkZF9taXJyb3IobnMtJmd0O2hlYWQtJmd0O2Rpc2ssIG5zLSZndDtkaXNrKWAuIEl0IGFsc28gYWx0ZXJzIGBiZGV2X2Rpc2tfY2hhbmdlZGAgdG8gZW5zdXJlIHRoZSBtaXJyb3JzIGdldCB0aGUgcGFydGl0aW9uIHVwZGF0ZXMuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYWxzbyB1cGRhdGluZyB2YXJpb3VzIG11bHRpcGF0aCBOVk1lIHJlcXVlc3RzIHRvIGhhbmRsZSB0aGVzZSBtaXJyb3IgZGlza3MuCgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaGFzIGEgaGlnaCBwb3RlbnRpYWwgZm9yIGZ1enppbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgbW9kaWZ5aW5nIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgZHJpdmVyIGxvZ2ljIGFuZCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgdXNpbmcgaXQgaW4gbXVsdGlwYXRoLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIHRlc3RlZCBpbiBhIHJlYXNvbmFibGUgZW52aXJvbm1lbnQ/IEZvcnR1bmF0ZWx5LCBOVk1lIGlzIHdlbGwtc3VwcG9ydGVkIGluIFFFTVUsIHNvIHZpcnR1YWxpemVkIE5WTWUgbXVsdGlwYXRoIHRlc3RpbmcgaXMgZW50aXJlbHkgZmVhc2libGUuIFRoaXMgaXMgZXhjZWxsZW50IG5ld3MsIGFzIHRoaXMgbWVhbnMgd2UgY2FuIGJ1aWxkIGEgdGVzdGluZyBlbnZpcm9ubWVudCBlYXNpbHkuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byB0YXJnZXQuIFdlIG5lZWQgdG8gYmUgc3VyZ2ljYWwuIEkmIzM5O20gZm9jdXNpbmcgb246CgoqICAgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AKKiAgIGBkaXNrX2FkZF9taXJyb3JgCiogICBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YAoqICAgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgCiogICBgbnZtZV9mYWlsb3Zlcl9yZXFgCiogICBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gIChFdmVuIHRob3VnaCBpdCBpcyBzdGF0aWMsIGl0IGlzIGNhbGxlZCBieSB0aGUgZnVuY3Rpb25zIGluIHF1ZXN0aW9uLCBzbyB3ZSBzaG91bGQga2VlcCBpdCBpbiBtaW5kKS4KCkhvd2V2ZXIsIHNpbmNlIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AgaXMgc3RhdGljLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgY292ZXJhZ2UgaW5kaXJlY3RseSBieSB0YXJnZXRpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zOiBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCwgYGRpc2tfYWRkX21pcnJvcmAsIGFuZCB0aGUgZnVuY3Rpb24gbW9kaWZpZWQsIGBiZGV2X2Rpc2tfY2hhbmdlZGAuCgpPa2F5LCBuZXh0IHN0ZXBzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkga25vdyBgQ09ORklHX05WTUVfTVVMVElQQVRIYCBpcyBnb2luZyB0byBiZSByZWxldmFudCBoZXJlLiBUaGVuIEkmIzM5O2xsIHVzZSBzb21lIHRvb2xzIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIGJlc3QgcGF0aCBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVk1FX01VTFRJUEFUSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTYtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjE3OmNvbmZpZyBOVk1FX01VTFRJUEFUSFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7TlZNZSBtdWx0aXBhdGggc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5ODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBOVk1lIE11bHRpcGF0aCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX05WTUVfTVVMVElQQVRIYC4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBzdXBwb3J0aW5nIGVsZW1lbnRzIGFyZSBpbiBwbGFjZSBiZWZvcmUgd2UgZXZlbiBjb25zaWRlciBlbmFibGluZyB0aGlzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGZlYXR1cmUgdGhhdCBwcm9mb3VuZGx5IGltcGFjdHMgSS9PIHBhdGggc2VsZWN0aW9uIGFuZCByZXNpbGllbmNlLCBzbyBhIHN1cGVyZmljaWFsIGdsYW5jZSBzaW1wbHkgd29uJiMzOTt0IGN1dCBpdC4gSSBuZWVkIHRvIGtub3c6IEFyZSB0aGVyZSBhbnkgZnVuZGFtZW50YWwga2VybmVsIGZlYXR1cmVzIG9yIGRyaXZlciBjb21wb25lbnRzLCBiZXlvbmQgdGhlIG9idmlvdXMgTlZNZSBjb3JlLCB0aGF0IHRoaXMgcmVsaWVzIG9uPyBUaGluayBhYm91dCB0aGUgU0NTSSBzdWJzeXN0ZW0sIG11bHRpcGF0aGluZyBpbmZyYXN0cnVjdHVyZSAoRE0tTXVsdGlwYXRoIG9yIHNpbWlsYXIpLCBhbmQgYW55IGJsb2NrIGxheWVyIG1vZGlmaWNhdGlvbnMuIEFyZSB0aGV5IHByb3Blcmx5IGNvbmZpZ3VyZWQsIGxvYWRlZCwgYW5kIGluaXRpYWxpemVkPyBJIG5lZWQgdG8gcmV2aWV3IHRoZSBrY29uZmlnIGRlcGVuZGVuY2llcy4KCkkmIzM5O2xsIGJlIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBtdWx0aXBhdGggc3VwcG9ydCBjYW4gc29tZXRpbWVzIGNyZWF0ZSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN0b3JhZ2UgbW9kdWxlcywgZXNwZWNpYWxseSByZWdhcmRpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGRldmljZSBkaXNjb3ZlcnkuIFNvLCB0aGlzIGludm9sdmVzIGEgc3lzdGVtYXRpYyBleGFtaW5hdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBub3QganVzdCBhIGNhc3VhbCBsb29rLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBlbmFibGluZyBpdCB3aWxsIGhhdmUgYW55IGltcGFjdCBvbiB0aGUgZGVmYXVsdCBOVk1lIGJlaGF2aW9yLCBvciBpZiBvdGhlciBkZXBlbmRlbmNpZXMgbWF5IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIG1vcmUgdGhhbiBqdXN0IGNvbmZpcm1pbmcgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIEl0JiMzOTtzIGFib3V0IGRldmVsb3BpbmcgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgcmVsYXRpb25zaGlwcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyB0byBtYWtlIHRoZSBiZXN0IHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfTVVMVElQQVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTYtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjE3OmNvbmZpZyBOVk1FX01VTFRJUEFUSFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7TlZNZSBtdWx0aXBhdGggc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE5WTWUgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIE5WTWUgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDE3LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhbiBvdmVydmlldyBvZiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIGZvciB0aGUgTlZNZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgbW9kdWxlIHNlbGVjdGlvbnMsIGZlYXR1cmUgdG9nZ2xlcywgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHNldHRpbmdzLiBIb3BlZnVsbHkgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgZnVuZGFtZW50YWwgY29uZmlndXJhYmxlIGVsZW1lbnRzIGFuZCBkZXBlbmRlbmNpZXMgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBOVk1FX0NPUkVcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIEJMS19ERVZfTlZNRVxuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3MgYmxvY2sgZGV2aWNlXCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgQkxPQ0tcbiAgIDg6XHRcdHNlbGVjdCBOVk1FX0NPUkVcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhlIE5WTSBFeHByZXNzIGRyaXZlciBpcyBmb3Igc29saWQgc3RhdGUgZHJpdmVzIGRpcmVjdGx5XG4gIDExOlx0XHQgIGNvbm5lY3RlZCB0byB0aGUgUENJIG9yIFBDSSBFeHByZXNzIGJ1cy4gIElmIHlvdSBrbm93IHlvdVxuICAxMjpcdFx0ICBkb24mIzM5O3QgaGF2ZSBvbmUgb2YgdGhlc2UsIGl0IGlzIHNhZmUgdG8gYW5zd2VyIE4uXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbnZtZS5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgTlZNRV9NVUxUSVBBVEhcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7TlZNZSBtdWx0aXBhdGggc3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBOVk1FX0NPUkVcbiAgMjA6XHRcdGhlbHBcbiAgMjE6XHRcdCAgVGhpcyBvcHRpb24gY29udHJvbHMgc3VwcG9ydCBmb3IgbXVsdGlwYXRoIGFjY2VzcyB0byBOVk1lXG4gIDIyOlx0XHQgIHN1YnN5c3RlbXMuIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgc3VwcG9ydCBmb3IgTlZNZSBtdWx0aXBhdGhcbiAgMjM6XHRcdCAgYWNjZXNzIGlzIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwuIElmIHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIHN1cHBvcnRcbiAgMjQ6XHRcdCAgZm9yIE5WTWUgbXVsdGlwYXRoIGFjY2VzcyBpcyBleGNsdWRlZCBmcm9tIHRoZSBrZXJuZWwuIFdoZW4gdGhpc1xuICAyNTpcdFx0ICBvcHRpb24gaXMgZGlzYWJsZWQgZWFjaCBjb250cm9sbGVyL25hbWVzcGFjZSByZWNlaXZlcyBpdHNcbiAgMjY6XHRcdCAgb3duIC9kZXYvbnZtZVhuWSBkZXZpY2UgZW50cnkgYW5kIE5WTWUgbXVsdGlwYXRoIGFjY2VzcyBpc1xuICAyNzpcdFx0ICBub3Qgc3VwcG9ydGVkLlxuICAyODpcdFxuICAyOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAzMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzEKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5WTWUgTXVsdGlwYXRoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIE5WTWUgbXVsdGlwYXRoIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IHRha2UuICBJdCBsb29rcyBsaWtlIGBOVk1FX01VTFRJUEFUSGAgcmVsaWVzIG9uIGBOVk1FX0NPUkVgLCB3aGljaCBpcyBpdHNlbGYgc2VsZWN0ZWQgYnkgYEJMS19ERVZfTlZNRWAuICBUaGVyZWZvcmUsIHRvIHByb3Blcmx5IHRlc3QgdGhlIG11bHRpcGF0aGluZyBmdW5jdGlvbmFsaXR5LCBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIEkgZW5hYmxlICpib3RoKiBgQkxLX0RFVl9OVk1FYCBhbmQgYE5WTUVfTVVMVElQQVRIYC4KCkZyb20gdGhlIGNvZGUsIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBpbXBvcnRhbnQgdG8gcmVhbGx5IGRpZyBpbnRvIGFyZTogYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AsIGBkaXNrX2FkZF9taXJyb3JgLCBgYmRldl9kaXNrX2NoYW5nZWRgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgdGhvcm91Z2hseSB2ZXR0ZWQuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgYG52bWVfZmFpbG92ZXJfcmVxYCBpcyBleHBvcnRlZC4gT2theSwgaXQmIzM5O3Mgbm90IHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyBpdCBtb3JlIGxpa2VseSB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCBwb3RlbnRpYWxseSBiZSBleHBvc2VkIHRvIGludGVyZXN0aW5nIGlucHV0cy4gVGhlIG90aGVyIGZ1bmN0aW9ucywgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCBsb29rIHNpZ25pZmljYW50IHRvby4KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgIGFuZCBgZGlza19hZGRfbWlycm9yYCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBsYXllci4gIGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgIHRha2VzIGEgYGdlbmRpc2tgIGFuZCBgZGlza19hZGRfbWlycm9yYCB0YWtlcyBhIGhlYWQgYW5kIG1pcnJvciBkaXNrLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19CTE9DS2AgaXMgYSBnaXZlbiwgdGhhdCYjMzk7cyBub3QgaW50ZXJlc3RpbmcuIEFsc28sIGBDT05GSUdfUENJYCBpcyBhIGRlcGVuZGVuY3kgZm9yIGBCTEtfREVWX05WTUVgLCB3aGljaCBpcyBmaW5lLgoKT2theSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UuIExvb2tpbmcgYXQgdGhlIGZpbGVzIG1vZGlmaWVkLCBpdCYjMzk7cyBtb2RpZnlpbmcgYGJsb2NrL2dlbmhkLmNgIGFuZCBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgIC0tIHRoZXNlIGFyZSB0aGUgY29yZSBibG9jayBsYXllciBjb2RlLiAgVGhlIE5WTWUgY2hhbmdlcyBhcmUgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AgYW5kIGBkcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY2AuIFRoaXMgaXMgcXVpdGUgYSBiaXQgbW9yZSBpbnRlZ3JhdGVkIHRoYW4gSSYjMzk7ZCBpbml0aWFsbHkgdGhvdWdodC4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9uYWxpdHksIGFuZCBkZWFsaW5nIHdpdGggcGFydGl0aW9uIGNsb25pbmcvbWlycm9yaW5nIGZvciBOVk1lIGRldmljZXMsIHRoaXMgc2VlbXMgaGlnaGx5IHdvcnRod2hpbGUgdG8gZnV6ei4gSXQmIzM5O3MgZGVhbGluZyB3aXRoIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZXF1ZXN0IGhhbmRsaW5nLiBNeSByZWNvbW1lbmRhdGlvbiBpczoKCmBXb3J0aEZ1enppbmc9dHJ1ZSwgRm9jdXNTeW1ib2xzPVsmIzM0O2JkZXZfY2xvbmVfcGFydGl0aW9ucyYjMzQ7LCAmIzM0O2Rpc2tfYWRkX21pcnJvciYjMzQ7LCAmIzM0O2JkZXZfZGlza19jaGFuZ2VkJiMzNDssICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OywgJiMzNDtudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QmIzM0OywgJiMzNDtudm1lX21wYXRoX2VuZF9yZXF1ZXN0JiMzNDtdLCBFbmFibGVDb25maWdzPVsmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LCAmIzM0O05WTUVfTVVMVElQQVRIJiMzNDtdYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JkZXZfY2xvbmVfcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtkaXNrX2FkZF9taXJyb3ImIzM0OywKICAgICYjMzQ7YmRldl9kaXNrX2NoYW5nZWQmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O252bWVfbXBhdGhfZW5kX3JlcXVlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gdG8gY2xvbmUgcGFydGl0aW9ucyBiZXR3ZWVuIGBnZW5kaXNrYHMgKG1pcnJvcnMpLCBzcGVjaWZpY2FsbHkgdXRpbGl6ZWQgYnkgdGhlIE5WTWUgbXVsdGlwYXRoIGRyaXZlciB0byBoYW5kbGUgcGFydGl0aW9ucyBvbiBtdWx0aXBhdGggZGV2aWNlcy4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgTlZNZSBtdWx0aXBhdGggcmVxdWVzdCByb3V0aW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBlbXVsYXRlZCBOVk1lIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JkZXZfY2xvbmVfcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtkaXNrX2FkZF9taXJyb3ImIzM0OywKICAgICYjMzQ7YmRldl9kaXNrX2NoYW5nZWQmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O252bWVfbXBhdGhfZW5kX3JlcXVlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gdG8gY2xvbmUgcGFydGl0aW9ucyBiZXR3ZWVuIGBnZW5kaXNrYHMgKG1pcnJvcnMpLCBzcGVjaWZpY2FsbHkgdXRpbGl6ZWQgYnkgdGhlIE5WTWUgbXVsdGlwYXRoIGRyaXZlciB0byBoYW5kbGUgcGFydGl0aW9ucyBvbiBtdWx0aXBhdGggZGV2aWNlcy4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgTlZNZSBtdWx0aXBhdGggcmVxdWVzdCByb3V0aW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBlbXVsYXRlZCBOVk1lIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIHN1cHBvcnQgcGFydGl0aW9uIGNsb25pbmcgYW5kIG1pcnJvcmluZyBhY3Jvc3MgYmxvY2sgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBuZXcgZmllbGRzIGluIGBzdHJ1Y3QgZ2VuZGlza2AgKHZpYSBhIHVuaW9uIGZvciBoZWFkL21pcnJvciByb2xlcykgYW5kIGFkZHMgZnVuY3Rpb25zIGxpa2UgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgLiBcblxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RydWN0dXJhbCBsaW5raW5nIChobGlzdCBvcGVyYXRpb25zKSwgbG9ja2luZyAoYG9wZW5fbXV0ZXhgKSwgYW5kIGJsb2NrIGRldmljZS9iaW8gcm91dGluZy4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIEFQSXMgKGxpa2UgaW9jdGxzIG9yIG5ldGxpbmspIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGUgcGFydGl0aW9uIGNsb25pbmcgcmVsaWVzIG9uIHJlYWRpbmcgZmllbGRzIGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBwYXJ0aXRpb25zIChgYmRfc3RhcnRfc2VjdGAsIGBiZF9ucl9zZWN0b3JzYCwgYGJkX21ldGFfaW5mb2ApLiBcblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgaGVhZCBkaXNrIGlzIGZyZWVkIGJlZm9yZSBpdHMgbWlycm9ycyksIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxvY2tpbmcgZGVhZGxvY2tzLiBUaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1OTYyYmVjYjg0OTNmMjgzMWM3YmFiZWFmY2YxYjJmMmI2MmI1ZGQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMDk6MDc6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IDUwYWJmZDkzMjg4NjEuLjUwMjgwNWU1ZjkyOWYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay5oCkBAIC02MzgsNiAmIzQzOzYzOCw3IEBAIGludCBiZGV2X2RlbF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8pOwogaW50IGJkZXZfcmVzaXplX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgaW50IHBhcnRubywgc2VjdG9yX3Qgc3RhcnQsCiAJCXNlY3Rvcl90IGxlbmd0aCk7CiB2b2lkIGRyb3BfcGFydGl0aW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpOwomIzQzO2ludCBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2spOwogCiB2b2lkIGJkZXZfc2V0X25yX3NlY3RvcnMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9ycyk7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IGYxOTkwYzdjZGZiOTEuLjM1MWFjOTNhYmVhYjMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZ2VuaGQuYwpAQCAtNDE5LDYgJiM0Mzs0MTksMTcgQEAgc3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJCWRpc2tfdWV2ZW50KGRpc2ssIEtPQkpfQUREKTsKIAl9CiAKJiM0MzsJaWYgKGRpc2stJmd0O2hlYWQpIHsKJiM0MzsJCWludCByZXQ7CiYjNDM7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7aGVhZC0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CQlyZXQgPSBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoZGlzayk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZGV2X2VycihkaXNrX3RvX2RldihkaXNrKSwgJiMzNDtjb3VsZCBub3QgY2xvbmUgcGFydGl0aW9ucyAoJWQpXG4mIzM0OywKJiM0MzsJCQkJcmV0KTsKJiM0MzsJfQomIzQzOwogCWJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stJmd0O2JkaSwgJmFtcDtkaXNrLSZndDtxdWV1ZS0mZ3Q7bGltaXRzKTsKIAlkaXNrX2FkZF9ldmVudHMoZGlzayk7CiAJc2V0X2JpdChHRF9BRERFRCwgJmFtcDtkaXNrLSZndDtzdGF0ZSk7CkBAIC00MzIsNiAmIzQzOzQ0Myw5IEBAIHN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLAogCXN0cnVjdCBkZXZpY2UgKmRkZXYgPSBkaXNrX3RvX2RldihkaXNrKTsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChkaXNrLSZndDtoZWFkICZhbXA7JmFtcDsgZGlza19oYXNfcGFydHNjYW4oZGlzaykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlpZiAoV0FSTl9PTl9PTkNFKGJkZXZfbnJfc2VjdG9ycyhkaXNrLSZndDtwYXJ0MCkgJmd0OyBCTEtfREVWX01BWF9TRUNUT1JTKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTcwOSw2ICYjNDM7NzIzLDEyIEBAIHN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJCWJkZXZfdW5oYXNoKHBhcnQpOwogCW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwogCiYjNDM7CWlmIChkaXNrLSZndDtoZWFkKSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7aGVhZC0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CQlobGlzdF9kZWwoJmFtcDtkaXNrLSZndDttaXJyb3Jfbm9kZSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogVGVsbCB0aGUgZmlsZSBzeXN0ZW0gdG8gd3JpdGUgYmFjayBhbGwgZGlydHkgZGF0YSBhbmQgc2h1dCBkb3duIGlmCiAJICogaXQgaGFzbiYjMzk7dCBiZWVuIG5vdGlmaWVkIGVhcmxpZXIuCkBAIC0xMzY5LDcgJiM0MzsxMzg5LDggQEAgc3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJeGFfZm9yX2VhY2goJmFtcDtncC0mZ3Q7cGFydF90YmwsIGlkeCwgaGQpIHsKLQkJaWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSAmYW1wOyZhbXA7ICFiZGV2X25yX3NlY3RvcnMoaGQpKQomIzQzOwkJaWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8IChncC0mZ3Q7ZmxhZ3MgJmFtcDsgR0VOSERfRkxfSElEREVOKSkpCiAJCQljb250aW51ZTsKIAogCQlpbmZsaWdodCA9IGJkZXZfY291bnRfaW5mbGlnaHQoaGQpOwpAQCAtMTUxMCw2ICYjNDM7MTUzMSwxOCBAQCBzdHJ1Y3QgZ2VuZGlzayAqX19hbGxvY19kaXNrX25vZGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBub2RlX2lkLAogCXJldHVybiBOVUxMOwogfQogCiYjNDM7dm9pZCBkaXNrX2FkZF9taXJyb3Ioc3RydWN0IGdlbmRpc2sgKmhlYWQsIHN0cnVjdCBnZW5kaXNrICptaXJyb3IpCiYjNDM7ewomIzQzOwlpZiAoIWhlYWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CVdBUk5fT05fT05DRSh0ZXN0X2JpdChHRF9BRERFRCwgJmFtcDttaXJyb3ItJmd0O3N0YXRlKSk7CiYjNDM7CW1pcnJvci0mZ3Q7aGVhZCA9IGhlYWQ7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtoZWFkLSZndDtvcGVuX211dGV4KTsKJiM0MzsJaGxpc3RfYWRkX2hlYWQoJmFtcDttaXJyb3ItJmd0O21pcnJvcl9ub2RlLCAmYW1wO2hlYWQtJmd0O21pcnJvcl9oZWFkKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7aGVhZC0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRpc2tfYWRkX21pcnJvcik7CiYjNDM7CiBzdHJ1Y3QgZ2VuZGlzayAqX19ibGtfYWxsb2NfZGlzayhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIGludCBub2RlLAogCQlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmxrY2xhc3MpCiB7CmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLmJhZjc5MmJlY2Y2OTkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCkBAIC02NDQsNiAmIzQzOzY0NCw3IEBAIHN0YXRpYyBpbnQgYmxrX2FkZF9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpCiB7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqcGFydDsKJiM0MzsJc3RydWN0IGdlbmRpc2sgKm1pcnJvcjsKIAl1bnNpZ25lZCBsb25nIGlkeDsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNzAzLDYgJiM0Mzs3MDQsMTMgQEAgaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpCiAJCWtvYmplY3RfdWV2ZW50KCZhbXA7ZGlza190b19kZXYoZGlzayktJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKIAl9CiAKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnkobWlycm9yLCAmYW1wO2Rpc2stJmd0O21pcnJvcl9oZWFkLAomIzQzOwkJCQltaXJyb3Jfbm9kZSkgewomIzQzOwkJcmV0ID0gYmRldl9jbG9uZV9wYXJ0aXRpb25zKG1pcnJvcik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KIC8qCkBAIC03MTEsNiAmIzQzOzcxOSw0MyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSkKICAqLwogRVhQT1JUX1NZTUJPTF9HUEwoYmRldl9kaXNrX2NoYW5nZWQpOwogCiYjNDM7aW50IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaWR4OwomIzQzOwomIzQzOwlpZiAoIWRpc2stJmd0O2hlYWQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwl4YV9mb3JfZWFjaF9zdGFydCgmYW1wO2Rpc2stJmd0O3BhcnRfdGJsLCBpZHgsIHBhcnQsIDEpIHsKJiM0MzsJCS8qIFNhbWUgYXMgYmRldl9kaXNrX2NoYW5nZWQoKSAqLwomIzQzOwkJYmRldl91bmhhc2gocGFydCk7CiYjNDM7CQlXQVJOX09OX09OQ0UoYXRvbWljX3JlYWQoJmFtcDtwYXJ0LSZndDtiZF9vcGVuZXJzKSk7CiYjNDM7CQlpbnZhbGlkYXRlX2JkZXYocGFydCk7CiYjNDM7CQlkcm9wX3BhcnRpdGlvbihwYXJ0KTsKJiM0MzsJfQomIzQzOwomIzQzOwl4YV9mb3JfZWFjaF9zdGFydCgmYW1wO2Rpc2stJmd0O2hlYWQtJmd0O3BhcnRfdGJsLCBpZHgsIHBhcnQsIDEpIHsKJiM0MzsJCXN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnRfYWRkZWQ7CiYjNDM7CiYjNDM7CQlwYXJ0X2FkZGVkID0gYWRkX3BhcnRpdGlvbihkaXNrLCBpZHgsIHBhcnQtJmd0O2JkX3N0YXJ0X3NlY3QsCiYjNDM7CQkJCQlwYXJ0LSZndDtiZF9ucl9zZWN0b3JzLCBBRERQQVJUX0ZMQUdfTk9ORSwKJiM0MzsJCQkJCXBhcnQtJmd0O2JkX21ldGFfaW5mbyk7CiYjNDM7CQlpZiAoSVNfRVJSKHBhcnRfYWRkZWQpKSB7CiYjNDM7CQkJaWYgKFBUUl9FUlIocGFydF9hZGRlZCkgIT0gLUVOWElPKSB7CiYjNDM7CQkJCWRldl9lcnIoZGlza190b19kZXYoZGlzayksICYjMzQ7cCVsZCBjb3VsZCBub3QgYmUgYWRkZWQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICAgICBpZHgsIHBhcnRfYWRkZWQpOwomIzQzOwkJCX0KJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsJCQlyZXR1cm4gUFRSX0VSUihwYXJ0X2FkZGVkKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogdm9pZCAqcmVhZF9wYXJ0X3NlY3RvcihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCBzZWN0b3JfdCBuLCBTZWN0b3IgKnApCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBzdGF0ZS0mZ3Q7ZGlzay0mZ3Q7cGFydDAtJmd0O2JkX21hcHBpbmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKaW5kZXggMTMyMmM2NzhmNGViOC4uYjk0YjlhM2JjZWIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwpAQCAtNDI3Myw2ICYjNDM7NDI3Myw3IEBAIHN0YXRpYyB2b2lkIG52bWVfYWxsb2NfbnMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbykKIAkJc3ByaW50ZihkaXNrLSZndDtkaXNrX25hbWUsICYjMzQ7bnZtZSVkYyVkbiVkJiMzNDssIGN0cmwtJmd0O3N1YnN5cy0mZ3Q7aW5zdGFuY2UsCiAJCQljdHJsLSZndDtpbnN0YW5jZSwgbnMtJmd0O2hlYWQtJmd0O2luc3RhbmNlKTsKIAkJZGlzay0mZ3Q7ZmxhZ3MgfD0gR0VOSERfRkxfSElEREVOOwomIzQzOwkJZGlza19hZGRfbWlycm9yKG5zLSZndDtoZWFkLSZndDtkaXNrLCBucy0mZ3Q7ZGlzayk7CiAJfSBlbHNlIGlmIChtdWx0aXBhdGgpIHsKIAkJc3ByaW50ZihkaXNrLSZndDtkaXNrX25hbWUsICYjMzQ7bnZtZSVkbiVkJiMzNDssIGN0cmwtJmd0O3N1YnN5cy0mZ3Q7aW5zdGFuY2UsCiAJCQlucy0mZ3Q7aGVhZC0mZ3Q7aW5zdGFuY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwppbmRleCA3NWRiYjU4Mjg2YTMyLi5iZDQwNTZmMWE5ZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwpAQCAtMTQ0LDYgJiM0MzsxNDQsMjMgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X2ZyZWV6ZShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cykKIAkJCWJsa19mcmVlemVfcXVldWVfc3RhcnQoaC0mZ3Q7ZGlzay0mZ3Q7cXVldWUpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZGlza190b19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLAomIzQzOwkJCQkJCXU4IHBhcnRubykKJiM0Mzt7CiYjNDM7CS8qIFF1aWNrIGxvb2t1cCBmb3Igd2hvbGUgZGlzayAqLwomIzQzOwlpZiAoIXBhcnRubykKJiM0MzsJCXJldHVybiBkaXNrLSZndDtwYXJ0MDsKJiM0MzsJcmV0dXJuIHhhX2xvYWQoJmFtcDtkaXNrLSZndDtwYXJ0X3RibCwgcGFydG5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLAomIzQzOwkJCQkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKJiM0Mzt7CiYjNDM7CWlmICghYmRldikKJiM0MzsJCXJldHVybiBkaXNrLSZndDtwYXJ0MDsKJiM0MzsJcmV0dXJuIG52bWVfZGlza190b19wYXJ0KGRpc2ssIGJkZXZfcGFydG5vKGJkZXYpKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IG52bWVfbnMgKm5zID0gcmVxLSZndDtxLSZndDtxdWV1ZWRhdGE7CkBAIC0xNjUsOCAmIzQzOzE4MiwxMCBAQCB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9sb2NrLCBmbGFncyk7Ci0JZm9yIChiaW8gPSByZXEtJmd0O2JpbzsgYmlvOyBiaW8gPSBiaW8tJmd0O2JpX25leHQpCi0JCWJpb19zZXRfZGV2KGJpbywgbnMtJmd0O2hlYWQtJmd0O2Rpc2stJmd0O3BhcnQwKTsKJiM0MzsJZm9yIChiaW8gPSByZXEtJmd0O2JpbzsgYmlvOyBiaW8gPSBiaW8tJmd0O2JpX25leHQpIHsKJiM0MzsJCWJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtJmd0O2hlYWQtJmd0O2Rpc2ssCiYjNDM7CQkJCWJpby0mZ3Q7YmlfYmRldikpOwomIzQzOwl9CiAJYmxrX3N0ZWFsX2Jpb3MoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9saXN0LCByZXEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9sb2NrLCBmbGFncyk7CiAKQEAgLTE5NCw4ICYjNDM7MjEzLDkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQogCQlyZXR1cm47CiAKIAludm1lX3JlcShycSktJmd0O2ZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7Ci0JbnZtZV9yZXEocnEpLSZndDtzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KGRpc2stJmd0O3BhcnQwLCByZXFfb3AocnEpLAotCQkJCQkJICAgICAgamlmZmllcyk7CiYjNDM7CW52bWVfcmVxKHJxKS0mZ3Q7c3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdCgKJiM0MzsJCQludm1lX3RvX2Rpc2tfcGFydChkaXNrLCBycS0mZ3Q7cGFydCksCiYjNDM7CQkJcmVxX29wKHJxKSwgamlmZmllcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpOwogCkBAIC0yMDgsNyAmIzQzOzIyOCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiAKIAlpZiAoIShudm1lX3JlcShycSktJmd0O2ZsYWdzICZhbXA7IE5WTUVfTVBBVEhfSU9fU1RBVFMpKQogCQlyZXR1cm47Ci0JYmRldl9lbmRfaW9fYWNjdChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzay0mZ3Q7cGFydDAsIHJlcV9vcChycSksCiYjNDM7CWJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtJmd0O2hlYWQtJmd0O2Rpc2ssCiYjNDM7CQkJIHJxLSZndDtwYXJ0KSwgcmVxX29wKHJxKSwKIAkJCSBibGtfcnFfYnl0ZXMocnEpICZndDsmZ3Q7IFNFQ1RPUl9TSElGVCwKIAkJCSBudm1lX3JlcShycSktJmd0O3N0YXJ0X3RpbWUpOwogfQpAQCAtNTMwLDExICYjNDM7NTUxLDIxIEBAIHN0YXRpYyBib29sIG52bWVfYXZhaWxhYmxlX3BhdGgoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCkKIAlyZXR1cm4gbnZtZV9tcGF0aF9xdWV1ZV9pZl9ub19wYXRoKGhlYWQpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZmluZF9wYXRoX2JkZXYoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCwKJiM0MzsJCQkJCQl1OCBwYXJ0bm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTsKJiM0MzsKJiM0MzsJaWYgKCFucykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gbnZtZV9kaXNrX3RvX3BhcnQobnMtJmd0O2Rpc2ssIHBhcnRubyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQgPSBiaW8tJmd0O2JpX2JkZXYtJmd0O2JkX2Rpc2stJmd0O3ByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkaXNrX3RvX2RldihoZWFkLSZndDtkaXNrKTsKLQlzdHJ1Y3QgbnZtZV9ucyAqbnM7CiYjNDM7CXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAJaW50IHNyY3VfaWR4OwogCiAJLyoKQEAgLTU0Nyw5ICYjNDM7NTc4LDkgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKQogCQlyZXR1cm47CiAKIAlzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7aGVhZC0mZ3Q7c3JjdSk7Ci0JbnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTsKLQlpZiAobGlrZWx5KG5zKSkgewotCQliaW9fc2V0X2RldihiaW8sIG5zLSZndDtkaXNrLSZndDtwYXJ0MCk7CiYjNDM7CWJkZXYgPSBudm1lX2ZpbmRfcGF0aF9iZGV2KGhlYWQsIGJkZXZfcGFydG5vKGJpby0mZ3Q7YmlfYmRldikpOwomIzQzOwlpZiAobGlrZWx5KGJkZXYpKSB7CiYjNDM7CQliaW9fc2V0X2RldihiaW8sIGJkZXYpOwogCQkvKgogCQkgKiBVc2UgQklPX1JFTUFQUEVEIHRvIHNraXAgYmlvX2NoZWNrX2VvZCgpIHdoZW4gdGhpcyBiaW8KIAkJICogZW50ZXJzIHN1Ym1pdF9iaW9fbm9hY2N0KCkgZm9yIHRoZSBwZXItcGF0aCBkZXZpY2UuIFRoZSBFT0QKQEAgLTU1Nyw3ICYjNDM7NTg4LDcgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKQogCQkgKi8KIAkJYmlvX3NldF9mbGFnKGJpbywgQklPX1JFTUFQUEVEKTsKIAkJYmlvLSZndDtiaV9vcGYgfD0gUkVRX05WTUVfTVBBVEg7Ci0JCXRyYWNlX2Jsb2NrX2Jpb19yZW1hcChiaW8sIGRpc2tfZGV2dChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzayksCiYjNDM7CQl0cmFjZV9ibG9ja19iaW9fcmVtYXAoYmlvLCBkaXNrX2RldnQoaGVhZC0mZ3Q7ZGlzayksCiAJCQkJICAgICAgYmlvLSZndDtiaV9pdGVyLmJpX3NlY3Rvcik7CiAJCXN1Ym1pdF9iaW9fbm9hY2N0KGJpbyk7CiAJfSBlbHNlIGlmIChudm1lX2F2YWlsYWJsZV9wYXRoKGhlYWQpKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCAyMGNiOGVkN2Q5ODdhLi43ZjM1NjNjMGY1NTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTE4Nyw2ICYjNDM7MTg3LDEzIEBAIHN0cnVjdCBnZW5kaXNrIHsKICNpZmRlZiBDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNsYXZlX2JkZXZzOwogI2VuZGlmCiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCBobGlzdF9oZWFkIG1pcnJvcl9oZWFkOwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQlzdHJ1Y3QgaGxpc3Rfbm9kZSBtaXJyb3Jfbm9kZTsKJiM0MzsJCQlzdHJ1Y3QgZ2VuZGlzayAqaGVhZDsKJiM0MzsJCX07CiYjNDM7CX07CiAJc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKnJhbmRvbTsKIAlzdHJ1Y3QgZGlza19ldmVudHMgKmV2OwogCkBAIC05NzcsNiAmIzQzOzk4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJkZXZfbnJfem9uZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIH0KIAogaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpOwomIzQzO3ZvaWQgZGlza19hZGRfbWlycm9yKHN0cnVjdCBnZW5kaXNrICpoZWFkLCBzdHJ1Y3QgZ2VuZGlzayAqbWlycm9yKTsKIAogdm9pZCBwdXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CiBzdHJ1Y3QgZ2VuZGlzayAqX19ibGtfYWxsb2NfZGlzayhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIGludCBub2RlLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgwOQoJCQkJCQkJb3V0cHV0OiAyNzgKCQkJCQkJCXRob3VnaHRzOiAxMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBCbG9jayBMYXllciBhbmQgTlZNZSBNdWx0aXBhdGggUGFydGl0aW9uIENsb25pbmcvTWlycm9yaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHJpZ29yb3VzbHkgYXNzZXNzIHBvdGVudGlhbCByaXNrcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcywgd2hpY2ggaXMgYSBrZXkgY29uY2VybiBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgd2l0aCBhIGtlZW4gZXllIGZvciBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlLCBlbmFibGluZyBwYXJ0aXRpb24gY2xvbmluZyBhbmQgbWlycm9yaW5nLCBwYXJ0aWN1bGFybHkgZm9yIE5WTWUgbXVsdGlwYXRoIHNldHVwcy4gSSBzZWUgYWRkaXRpb25zIGZvciBmdW5jdGlvbnMgbGlrZSBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCwgYGRpc2tfYWRkX21pcnJvcmAsIGFuZCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIE5WTWUtcmVsYXRlZCBmdW5jdGlvbnMgKGBudm1lX2Rpc2tfdG9fcGFydGAsIGV0Yy4pLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gbWV0aWN1bG91c2x5IGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBibG9jayBkZXZpY2Ugc3RydWN0dXJlcyDigJMgYHN0cnVjdCBnZW5kaXNrYCwgYHN0cnVjdCBibG9ja19kZXZpY2VgLCBhbmQgYHN0cnVjdCBiaW9gLiBUaGUgcGF0Y2ggYWRkcyBgbWlycm9yX2hlYWRgIGFuZCBgbWlycm9yX25vZGVgIHRvIGBzdHJ1Y3QgZ2VuZGlza2AsIGFuZCBtb2RpZmllcyB0aGluZ3MgbGlrZSBgZGlza3N0YXRzX3Nob3dgIHRvIHBvdGVudGlhbGx5IGhpZGUgcGFydGl0aW9ucy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB0aGVzZSBzdHJ1Y3R1cmUgY2hhbmdlcy4KCkkmIzM5O20gY2hlY2tpbmcgaWYgYW55IG5ldyBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgaGF2ZSB1bmluaXRpYWxpemVkIGZpZWxkcy4gSSYjMzk7bSBhbHNvIGVuc3VyaW5nIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY2hhbmdlcyB0aGF0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRvIGNvbnRyb2wgZmxvdy4gSXQgc2VlbXMgdW5saWtlbHkgYXQgZmlyc3QgZ2xhbmNlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4gYGRpc2tzdGF0c19zaG93YCBpcyBtb2RpZmllZCwgYnV0IHRoYXQgYXBwZWFycyB0byBiZSBqdXN0IHNraXBwaW5nIHNvbWUgZW50cmllcywgbm90IGFjdHVhbGx5IGV4cG9zaW5nIG5ldyBkYXRhLiBTbywgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gU2luY2UgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIHRoaXMgaXMgbG9va2luZyBzYWZlIHNvIGZhci4KClBvdGVudGlhbCBidWcgc291cmNlcyBhcmUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUgKGVzcGVjaWFsbHkgaWYgYGRpc2stJmd0O2hlYWRgIGlzIGZyZWVkIHByZW1hdHVyZWx5KSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGxvY2tpbmcgaXNzdWVzLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCBhbmQgSSYjMzk7bSBnbGFkIHRvIHNlZSB0aGF0IEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBjYXRjaCBhbGwgb2YgdGhlc2UuIFRoZXkmIzM5O3JlIG15IHNhZmV0eSBuZXQgaGVyZSwgYW5kIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKTm93LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoYXQgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgZnVuY3Rpb24gaW4gZGV0YWlsLiBJIHNlZSB0aGF0IGl0IGNsb25lcyBwYXJ0aXRpb25zLiBUaGUgaW1wb3J0YW50IHBhcnQgZm9yIG1lIGlzIHdoYXQgaXMgcGFzc2VkIHRvIHRoZSBgYWRkX3BhcnRpdGlvbmAgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSB3aGV0aGVyIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyB1c2VkLgoKSSBjYW4gY29uZmlybSB0aGF0IGl0IGNvcGllcyB0aGUgc3RhcnQgc2VjdG9yLCBudW1iZXIgb2Ygc2VjdG9ycyBhbmQgbWV0YSBpbmZvIGZyb20gdGhlIG9sZCBwYXJ0aXRpb24uIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBwYXNzZWQgdG8gYGFkZF9wYXJ0aXRpb25gLCB0aGF04oCZcyBnb29kLgoKTmV4dCwgSSYjMzk7bSBjaGVja2luZyBgZGlza19hZGRfbWlycm9yYC4gSSBzZWUgdGhhdCBgbWlycm9yX2hlYWRgIGFuZCBgbWlycm9yX25vZGVgIGFyZSBwYXJ0IG9mIGEgdW5pb24gd2l0aGluIGBzdHJ1Y3QgZ2VuZGlza2AuIEl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQuIEl0IG1lYW5zIHRoYXQgYSBgZ2VuZGlza2AgY2FuIGZ1bmN0aW9uIGFzIGVpdGhlciBhIGhlYWQgb3IgYSBtaXJyb3IsIGJ1dCBub3QgYm90aC4gTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgaGFuZGxlZCBzYWZlbHksIGVzcGVjaWFsbHkgYXJvdW5kIGluaXRpYWxpemF0aW9uLiBBZnRlciBhbmFseXppbmcgdGhpcyBtb3JlIGNsb3NlbHksIGl0IHNlZW1zIHRoYXQgaWYgaXQmIzM5O3MgYSBoZWFkLCBgbWlycm9yX2hlYWRgIGlzIHVzZWQsIGFuZCBpZiBpdCYjMzk7cyBhIG1pcnJvciwgYG1pcnJvcl9ub2RlYCBhbmQgYGhlYWRgIGFyZSB1c2VkLiBXaGVuIHRoZSBgZ2VuZGlza2AgaXMgYWxsb2NhdGVkLCBpdCYjMzk7cyB6ZXJvZWQgKHVzaW5nIGBremFsbG9jYCwgdHlwaWNhbGx5KSwgc28gYG1pcnJvcl9oZWFkYCBpcyBlbXB0eSB0byBiZWdpbiB3aXRoLiBUaGVuLCBpZiB0aGUgZGlzayBpcyBhIG1pcnJvciwgYG1pcnJvci0mZ3Q7aGVhZGAgaXMgc2V0LCBhbmQgYG1pcnJvci0mZ3Q7bWlycm9yX25vZGVgIGlzIGxpbmtlZCB0byBgaGVhZC0mZ3Q7bWlycm9yX2hlYWRgLiBJdCBsb29rcyBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuCgpGaW5hbCBjaGVjazogSXMgdGhlcmUgKmFueSogcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXRzIHdheSBpbnRvIHVzZXIgc3BhY2UsIG9yIGFmZmVjdGluZyBjb250cm9sIGZsb3c/IEFmdGVyIHRoaXMgdGhvcm91Z2ggcmV2aWV3LCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBpcyBubyByaXNrLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgbm90IG5lY2Vzc2FyeSBpbiB0aGlzIGNhc2UuIEtBU0FOIGFuZCBMT0NLREVQIG9mZmVyIGFkZXF1YXRlIHByb3RlY3Rpb24gYWdhaW5zdCB0aGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIGRlcmVmZXJlbmNlcywgYW5kIGRlYWRsb2Nrcy4gSSB3aWxsIGZvcm11bGF0ZSB0aGlzIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIHN1cHBvcnQgcGFydGl0aW9uIGNsb25pbmcgYW5kIG1pcnJvcmluZyBhY3Jvc3MgYmxvY2sgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBuZXcgZmllbGRzIGluIGBzdHJ1Y3QgZ2VuZGlza2AgKHZpYSBhIHVuaW9uIGZvciBoZWFkL21pcnJvciByb2xlcykgYW5kIGFkZHMgZnVuY3Rpb25zIGxpa2UgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgLiBcblxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RydWN0dXJhbCBsaW5raW5nIChobGlzdCBvcGVyYXRpb25zKSwgbG9ja2luZyAoYG9wZW5fbXV0ZXhgKSwgYW5kIGJsb2NrIGRldmljZS9iaW8gcm91dGluZy4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIEFQSXMgKGxpa2UgaW9jdGxzIG9yIG5ldGxpbmspIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGUgcGFydGl0aW9uIGNsb25pbmcgcmVsaWVzIG9uIHJlYWRpbmcgZmllbGRzIGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBwYXJ0aXRpb25zIChgYmRfc3RhcnRfc2VjdGAsIGBiZF9ucl9zZWN0b3JzYCwgYGJkX21ldGFfaW5mb2ApLiBcblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgaGVhZCBkaXNrIGlzIGZyZWVkIGJlZm9yZSBpdHMgbWlycm9ycyksIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxvY2tpbmcgZGVhZGxvY2tzLiBUaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIHN1cHBvcnQgcGFydGl0aW9uIGNsb25pbmcgYW5kIG1pcnJvcmluZyBhY3Jvc3MgYmxvY2sgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBuZXcgZmllbGRzIGluIGBzdHJ1Y3QgZ2VuZGlza2AgKHZpYSBhIHVuaW9uIGZvciBoZWFkL21pcnJvciByb2xlcykgYW5kIGFkZHMgZnVuY3Rpb25zIGxpa2UgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgLiBcblxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RydWN0dXJhbCBsaW5raW5nIChobGlzdCBvcGVyYXRpb25zKSwgbG9ja2luZyAoYG9wZW5fbXV0ZXhgKSwgYW5kIGJsb2NrIGRldmljZS9iaW8gcm91dGluZy4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIEFQSXMgKGxpa2UgaW9jdGxzIG9yIG5ldGxpbmspIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGUgcGFydGl0aW9uIGNsb25pbmcgcmVsaWVzIG9uIHJlYWRpbmcgZmllbGRzIGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBwYXJ0aXRpb25zIChgYmRfc3RhcnRfc2VjdGAsIGBiZF9ucl9zZWN0b3JzYCwgYGJkX21ldGFfaW5mb2ApLiBcblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgaGVhZCBkaXNrIGlzIGZyZWVkIGJlZm9yZSBpdHMgbWlycm9ycyksIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxvY2tpbmcgZGVhZGxvY2tzLiBUaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowNzozNi44MzY0MTcxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDMwMDgzOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlZNRVwiLFxuICAgIFwiTlZNRV9NVUxUSVBBVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiZGV2X2Nsb25lX3BhcnRpdGlvbnNcIixcbiAgICBcImRpc2tfYWRkX21pcnJvclwiLFxuICAgIFwiYmRldl9kaXNrX2NoYW5nZWRcIixcbiAgICBcIm52bWVfZmFpbG92ZXJfcmVxXCIsXG4gICAgXCJudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RcIixcbiAgICBcIm52bWVfbXBhdGhfZW5kX3JlcXVlc3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayBsYXllciBhbmQgTlZNZSBtdWx0aXBhdGggY29kZSB0byBzdXBwb3J0IHBhcnRpdGlvbiBjbG9uaW5nIGFuZCBtaXJyb3JpbmcgYWNyb3NzIGJsb2NrIGRldmljZXMuIEl0IGludHJvZHVjZXMgbmV3IGZpZWxkcyBpbiBgc3RydWN0IGdlbmRpc2tgICh2aWEgYSB1bmlvbiBmb3IgaGVhZC9taXJyb3Igcm9sZXMpIGFuZCBhZGRzIGZ1bmN0aW9ucyBsaWtlIGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgIGFuZCBgZGlza19hZGRfbWlycm9yYC4gXFxuXFxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RydWN0dXJhbCBsaW5raW5nIChobGlzdCBvcGVyYXRpb25zKSwgbG9ja2luZyAoYG9wZW5fbXV0ZXhgKSwgYW5kIGJsb2NrIGRldmljZS9iaW8gcm91dGluZy4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIEFQSXMgKGxpa2UgaW9jdGxzIG9yIG5ldGxpbmspIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGUgcGFydGl0aW9uIGNsb25pbmcgcmVsaWVzIG9uIHJlYWRpbmcgZmllbGRzIGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBwYXJ0aXRpb25zIChgYmRfc3RhcnRfc2VjdGAsIGBiZF9ucl9zZWN0b3JzYCwgYGJkX21ldGFfaW5mb2ApLiBcXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSBoZWFkIGRpc2sgaXMgZnJlZWQgYmVmb3JlIGl0cyBtaXJyb3JzKSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbG9ja2luZyBkZWFkbG9ja3MuIFRoZXNlIGNsYXNzZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gdG8gY2xvbmUgcGFydGl0aW9ucyBiZXR3ZWVuIGBnZW5kaXNrYHMgKG1pcnJvcnMpLCBzcGVjaWZpY2FsbHkgdXRpbGl6ZWQgYnkgdGhlIE5WTWUgbXVsdGlwYXRoIGRyaXZlciB0byBoYW5kbGUgcGFydGl0aW9ucyBvbiBtdWx0aXBhdGggZGV2aWNlcy4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgTlZNZSBtdWx0aXBhdGggcmVxdWVzdCByb3V0aW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBlbXVsYXRlZCBOVk1lIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjA3OjM2LjgzNjQyMjQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA3MzM0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1OTYyYmVjYjg0OTNmMjgzMWM3YmFiZWFmY2YxYjJmMmI2MmI1ZGQ4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjA3OjM1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcXG5pbmRleCA1MGFiZmQ5MzI4ODYxLi41MDI4MDVlNWY5MjlmIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay5oXFxuKysrIGIvYmxvY2svYmxrLmhcXG5AQCAtNjM4LDYgKzYzOCw3IEBAIGludCBiZGV2X2RlbF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8pO1xcbiBpbnQgYmRldl9yZXNpemVfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBpbnQgcGFydG5vLCBzZWN0b3JfdCBzdGFydCxcXG4gXFx0XFx0c2VjdG9yX3QgbGVuZ3RoKTtcXG4gdm9pZCBkcm9wX3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KTtcXG4raW50IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuIFxcbiB2b2lkIGJkZXZfc2V0X25yX3NlY3RvcnMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9ycyk7XFxuIFxcbmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuY1xcbmluZGV4IGYxOTkwYzdjZGZiOTEuLjM1MWFjOTNhYmVhYjMgMTAwNjQ0XFxuLS0tIGEvYmxvY2svZ2VuaGQuY1xcbisrKyBiL2Jsb2NrL2dlbmhkLmNcXG5AQCAtNDE5LDYgKzQxOSwxNyBAQCBzdGF0aWMgdm9pZCBhZGRfZGlza19maW5hbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFx0XFx0ZGlza191ZXZlbnQoZGlzaywgS09CSl9BREQpO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoZGlzay1cXHUwMDNlaGVhZCkge1xcbitcXHRcXHRpbnQgcmV0O1xcbitcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlaGVhZC1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcdFxcdHJldCA9IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhkaXNrKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VoZWFkLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0ZGV2X2VycihkaXNrX3RvX2RldihkaXNrKSwgXFxcImNvdWxkIG5vdCBjbG9uZSBwYXJ0aXRpb25zICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHJldCk7XFxuK1xcdH1cXG4rXFxuIFxcdGJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stXFx1MDAzZWJkaSwgXFx1MDAyNmRpc2stXFx1MDAzZXF1ZXVlLVxcdTAwM2VsaW1pdHMpO1xcbiBcXHRkaXNrX2FkZF9ldmVudHMoZGlzayk7XFxuIFxcdHNldF9iaXQoR0RfQURERUQsIFxcdTAwMjZkaXNrLVxcdTAwM2VzdGF0ZSk7XFxuQEAgLTQzMiw2ICs0NDMsOSBAQCBzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4gXFx0c3RydWN0IGRldmljZSAqZGRldiA9IGRpc2tfdG9fZGV2KGRpc2spO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKGRpc2stXFx1MDAzZWhlYWQgXFx1MDAyNlxcdTAwMjYgZGlza19oYXNfcGFydHNjYW4oZGlzaykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKFdBUk5fT05fT05DRShiZGV2X25yX3NlY3RvcnMoZGlzay1cXHUwMDNlcGFydDApIFxcdTAwM2UgQkxLX0RFVl9NQVhfU0VDVE9SUykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5AQCAtNzA5LDYgKzcyMywxMiBAQCBzdGF0aWMgdm9pZCBfX2RlbF9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHRcXHRiZGV2X3VuaGFzaChwYXJ0KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4gXFxuK1xcdGlmIChkaXNrLVxcdTAwM2VoZWFkKSB7XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRpc2stXFx1MDAzZWhlYWQtXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXHRcXHRobGlzdF9kZWwoXFx1MDAyNmRpc2stXFx1MDAzZW1pcnJvcl9ub2RlKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VoZWFkLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogVGVsbCB0aGUgZmlsZSBzeXN0ZW0gdG8gd3JpdGUgYmFjayBhbGwgZGlydHkgZGF0YSBhbmQgc2h1dCBkb3duIGlmXFxuIFxcdCAqIGl0IGhhc24ndCBiZWVuIG5vdGlmaWVkIGVhcmxpZXIuXFxuQEAgLTEzNjksNyArMTM4OSw4IEBAIHN0YXRpYyBpbnQgZGlza3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXFmLCB2b2lkICp2KVxcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2Z3AtXFx1MDAzZXBhcnRfdGJsLCBpZHgsIGhkKSB7XFxuLVxcdFxcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXFx1MDAyNlxcdTAwMjYgIWJkZXZfbnJfc2VjdG9ycyhoZCkpXFxuK1xcdFxcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICghYmRldl9ucl9zZWN0b3JzKGhkKSB8fCAoZ3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aW5mbGlnaHQgPSBiZGV2X2NvdW50X2luZmxpZ2h0KGhkKTtcXG5AQCAtMTUxMCw2ICsxNTMxLDE4IEBAIHN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbit2b2lkIGRpc2tfYWRkX21pcnJvcihzdHJ1Y3QgZ2VuZGlzayAqaGVhZCwgc3RydWN0IGdlbmRpc2sgKm1pcnJvcilcXG4re1xcbitcXHRpZiAoIWhlYWQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0V0FSTl9PTl9PTkNFKHRlc3RfYml0KEdEX0FEREVELCBcXHUwMDI2bWlycm9yLVxcdTAwM2VzdGF0ZSkpO1xcbitcXHRtaXJyb3ItXFx1MDAzZWhlYWQgPSBoZWFkO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZoZWFkLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNm1pcnJvci1cXHUwMDNlbWlycm9yX25vZGUsIFxcdTAwMjZoZWFkLVxcdTAwM2VtaXJyb3JfaGVhZCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2aGVhZC1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZGlza19hZGRfbWlycm9yKTtcXG4rXFxuIHN0cnVjdCBnZW5kaXNrICpfX2Jsa19hbGxvY19kaXNrKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGUsXFxuIFxcdFxcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqbGtjbGFzcylcXG4ge1xcbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXFxuaW5kZXggYjVjNTliNzljYTdjYi4uYmFmNzkyYmVjZjY5OSAxMDA2NDRcXG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xcbisrKyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXFxuQEAgLTY0NCw2ICs2NDQsNyBAQCBzdGF0aWMgaW50IGJsa19hZGRfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpXFxuIHtcXG4gXFx0c3RydWN0IGJsb2NrX2RldmljZSAqcGFydDtcXG4rXFx0c3RydWN0IGdlbmRpc2sgKm1pcnJvcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBpZHg7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG5AQCAtNzAzLDYgKzcwNCwxMyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcXG4gXFx0XFx0a29iamVjdF91ZXZlbnQoXFx1MDAyNmRpc2tfdG9fZGV2KGRpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIFxcdH1cXG4gXFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KG1pcnJvciwgXFx1MDAyNmRpc2stXFx1MDAzZW1pcnJvcl9oZWFkLFxcbitcXHRcXHRcXHRcXHRtaXJyb3Jfbm9kZSkge1xcbitcXHRcXHRyZXQgPSBiZGV2X2Nsb25lX3BhcnRpdGlvbnMobWlycm9yKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gLypcXG5AQCAtNzExLDYgKzcxOSw0MyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcXG4gICovXFxuIEVYUE9SVF9TWU1CT0xfR1BMKGJkZXZfZGlza19jaGFuZ2VkKTtcXG4gXFxuK2ludCBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuK3tcXG4rXFx0c3RydWN0IGJsb2NrX2RldmljZSAqcGFydDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpZHg7XFxuK1xcbitcXHRpZiAoIWRpc2stXFx1MDAzZWhlYWQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcdHhhX2Zvcl9lYWNoX3N0YXJ0KFxcdTAwMjZkaXNrLVxcdTAwM2VwYXJ0X3RibCwgaWR4LCBwYXJ0LCAxKSB7XFxuK1xcdFxcdC8qIFNhbWUgYXMgYmRldl9kaXNrX2NoYW5nZWQoKSAqL1xcbitcXHRcXHRiZGV2X3VuaGFzaChwYXJ0KTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKGF0b21pY19yZWFkKFxcdTAwMjZwYXJ0LVxcdTAwM2ViZF9vcGVuZXJzKSk7XFxuK1xcdFxcdGludmFsaWRhdGVfYmRldihwYXJ0KTtcXG4rXFx0XFx0ZHJvcF9wYXJ0aXRpb24ocGFydCk7XFxuK1xcdH1cXG4rXFxuK1xcdHhhX2Zvcl9lYWNoX3N0YXJ0KFxcdTAwMjZkaXNrLVxcdTAwM2VoZWFkLVxcdTAwM2VwYXJ0X3RibCwgaWR4LCBwYXJ0LCAxKSB7XFxuK1xcdFxcdHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnRfYWRkZWQ7XFxuK1xcbitcXHRcXHRwYXJ0X2FkZGVkID0gYWRkX3BhcnRpdGlvbihkaXNrLCBpZHgsIHBhcnQtXFx1MDAzZWJkX3N0YXJ0X3NlY3QsXFxuK1xcdFxcdFxcdFxcdFxcdHBhcnQtXFx1MDAzZWJkX25yX3NlY3RvcnMsIEFERFBBUlRfRkxBR19OT05FLFxcbitcXHRcXHRcXHRcXHRcXHRwYXJ0LVxcdTAwM2ViZF9tZXRhX2luZm8pO1xcbitcXHRcXHRpZiAoSVNfRVJSKHBhcnRfYWRkZWQpKSB7XFxuK1xcdFxcdFxcdGlmIChQVFJfRVJSKHBhcnRfYWRkZWQpICE9IC1FTlhJTykge1xcbitcXHRcXHRcXHRcXHRkZXZfZXJyKGRpc2tfdG9fZGV2KGRpc2spLCBcXFwicCVsZCBjb3VsZCBub3QgYmUgYWRkZWQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGlkeCwgcGFydF9hZGRlZCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocGFydF9hZGRlZCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHZvaWQgKnJlYWRfcGFydF9zZWN0b3Ioc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSwgc2VjdG9yX3QgbiwgU2VjdG9yICpwKVxcbiB7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3RhdGUtXFx1MDAzZWRpc2stXFx1MDAzZXBhcnQwLVxcdTAwM2ViZF9tYXBwaW5nO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcXG5pbmRleCAxMzIyYzY3OGY0ZWI4Li5iOTRiOWEzYmNlYjI4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbkBAIC00MjczLDYgKzQyNzMsNyBAQCBzdGF0aWMgdm9pZCBudm1lX2FsbG9jX25zKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuIFxcdFxcdHNwcmludGYoZGlzay1cXHUwMDNlZGlza19uYW1lLCBcXFwibnZtZSVkYyVkbiVkXFxcIiwgY3RybC1cXHUwMDNlc3Vic3lzLVxcdTAwM2VpbnN0YW5jZSxcXG4gXFx0XFx0XFx0Y3RybC1cXHUwMDNlaW5zdGFuY2UsIG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VpbnN0YW5jZSk7XFxuIFxcdFxcdGRpc2stXFx1MDAzZWZsYWdzIHw9IEdFTkhEX0ZMX0hJRERFTjtcXG4rXFx0XFx0ZGlza19hZGRfbWlycm9yKG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrLCBucy1cXHUwMDNlZGlzayk7XFxuIFxcdH0gZWxzZSBpZiAobXVsdGlwYXRoKSB7XFxuIFxcdFxcdHNwcmludGYoZGlzay1cXHUwMDNlZGlza19uYW1lLCBcXFwibnZtZSVkbiVkXFxcIiwgY3RybC1cXHUwMDNlc3Vic3lzLVxcdTAwM2VpbnN0YW5jZSxcXG4gXFx0XFx0XFx0bnMtXFx1MDAzZWhlYWQtXFx1MDAzZWluc3RhbmNlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xcbmluZGV4IDc1ZGJiNTgyODZhMzIuLmJkNDA1NmYxYTlmMjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xcbkBAIC0xNDQsNiArMTQ0LDIzIEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9mcmVlemUoc3RydWN0IG52bWVfc3Vic3lzdGVtICpzdWJzeXMpXFxuIFxcdFxcdFxcdGJsa19mcmVlemVfcXVldWVfc3RhcnQoaC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV9kaXNrX3RvX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHU4IHBhcnRubylcXG4re1xcbitcXHQvKiBRdWljayBsb29rdXAgZm9yIHdob2xlIGRpc2sgKi9cXG4rXFx0aWYgKCFwYXJ0bm8pXFxuK1xcdFxcdHJldHVybiBkaXNrLVxcdTAwM2VwYXJ0MDtcXG4rXFx0cmV0dXJuIHhhX2xvYWQoXFx1MDAyNmRpc2stXFx1MDAzZXBhcnRfdGJsLCBwYXJ0bm8pO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuK3tcXG4rXFx0aWYgKCFiZGV2KVxcbitcXHRcXHRyZXR1cm4gZGlzay1cXHUwMDNlcGFydDA7XFxuK1xcdHJldHVybiBudm1lX2Rpc2tfdG9fcGFydChkaXNrLCBiZGV2X3BhcnRubyhiZGV2KSk7XFxuK31cXG4rXFxuIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtXFx1MDAzZXEtXFx1MDAzZXF1ZXVlZGF0YTtcXG5AQCAtMTY1LDggKzE4MiwxMCBAQCB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuIFxcdH1cXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZucy1cXHUwMDNlaGVhZC1cXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XFxuLVxcdGZvciAoYmlvID0gcmVxLVxcdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVxcdTAwM2ViaV9uZXh0KVxcbi1cXHRcXHRiaW9fc2V0X2RldihiaW8sIG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrLVxcdTAwM2VwYXJ0MCk7XFxuK1xcdGZvciAoYmlvID0gcmVxLVxcdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVxcdTAwM2ViaV9uZXh0KSB7XFxuK1xcdFxcdGJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2ssXFxuK1xcdFxcdFxcdFxcdGJpby1cXHUwMDNlYmlfYmRldikpO1xcbitcXHR9XFxuIFxcdGJsa19zdGVhbF9iaW9zKFxcdTAwMjZucy1cXHUwMDNlaGVhZC1cXHUwMDNlcmVxdWV1ZV9saXN0LCByZXEpO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZucy1cXHUwMDNlaGVhZC1cXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XFxuIFxcbkBAIC0xOTQsOCArMjEzLDkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRudm1lX3JlcShycSktXFx1MDAzZWZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7XFxuLVxcdG52bWVfcmVxKHJxKS1cXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChkaXNrLVxcdTAwM2VwYXJ0MCwgcmVxX29wKHJxKSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgamlmZmllcyk7XFxuK1xcdG52bWVfcmVxKHJxKS1cXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChcXG4rXFx0XFx0XFx0bnZtZV90b19kaXNrX3BhcnQoZGlzaywgcnEtXFx1MDAzZXBhcnQpLFxcbitcXHRcXHRcXHRyZXFfb3AocnEpLCBqaWZmaWVzKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpO1xcbiBcXG5AQCAtMjA4LDcgKzIyOCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIFxcbiBcXHRpZiAoIShudm1lX3JlcShycSktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTlZNRV9NUEFUSF9JT19TVEFUUykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0YmRldl9lbmRfaW9fYWNjdChucy1cXHUwMDNlaGVhZC1cXHUwMDNlZGlzay1cXHUwMDNlcGFydDAsIHJlcV9vcChycSksXFxuK1xcdGJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2ssXFxuK1xcdFxcdFxcdCBycS1cXHUwMDNlcGFydCksIHJlcV9vcChycSksXFxuIFxcdFxcdFxcdCBibGtfcnFfYnl0ZXMocnEpIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVCxcXG4gXFx0XFx0XFx0IG52bWVfcmVxKHJxKS1cXHUwMDNlc3RhcnRfdGltZSk7XFxuIH1cXG5AQCAtNTMwLDExICs1NTEsMjEgQEAgc3RhdGljIGJvb2wgbnZtZV9hdmFpbGFibGVfcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxcbiBcXHRyZXR1cm4gbnZtZV9tcGF0aF9xdWV1ZV9pZl9ub19wYXRoKGhlYWQpO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV9maW5kX3BhdGhfYmRldihzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1OCBwYXJ0bm8pXFxuK3tcXG4rXFx0c3RydWN0IG52bWVfbnMgKm5zID0gbnZtZV9maW5kX3BhdGgoaGVhZCk7XFxuK1xcbitcXHRpZiAoIW5zKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIG52bWVfZGlza190b19wYXJ0KG5zLVxcdTAwM2VkaXNrLCBwYXJ0bm8pO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuIHtcXG4gXFx0c3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCA9IGJpby1cXHUwMDNlYmlfYmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkaXNrX3RvX2RldihoZWFkLVxcdTAwM2VkaXNrKTtcXG4tXFx0c3RydWN0IG52bWVfbnMgKm5zO1xcbitcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2O1xcbiBcXHRpbnQgc3JjdV9pZHg7XFxuIFxcbiBcXHQvKlxcbkBAIC01NDcsOSArNTc4LDkgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZoZWFkLVxcdTAwM2VzcmN1KTtcXG4tXFx0bnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTtcXG4tXFx0aWYgKGxpa2VseShucykpIHtcXG4tXFx0XFx0YmlvX3NldF9kZXYoYmlvLCBucy1cXHUwMDNlZGlzay1cXHUwMDNlcGFydDApO1xcbitcXHRiZGV2ID0gbnZtZV9maW5kX3BhdGhfYmRldihoZWFkLCBiZGV2X3BhcnRubyhiaW8tXFx1MDAzZWJpX2JkZXYpKTtcXG4rXFx0aWYgKGxpa2VseShiZGV2KSkge1xcbitcXHRcXHRiaW9fc2V0X2RldihiaW8sIGJkZXYpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBVc2UgQklPX1JFTUFQUEVEIHRvIHNraXAgYmlvX2NoZWNrX2VvZCgpIHdoZW4gdGhpcyBiaW9cXG4gXFx0XFx0ICogZW50ZXJzIHN1Ym1pdF9iaW9fbm9hY2N0KCkgZm9yIHRoZSBwZXItcGF0aCBkZXZpY2UuIFRoZSBFT0RcXG5AQCAtNTU3LDcgKzU4OCw3IEBAIHN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19SRU1BUFBFRCk7XFxuIFxcdFxcdGJpby1cXHUwMDNlYmlfb3BmIHw9IFJFUV9OVk1FX01QQVRIO1xcbi1cXHRcXHR0cmFjZV9ibG9ja19iaW9fcmVtYXAoYmlvLCBkaXNrX2RldnQobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2spLFxcbitcXHRcXHR0cmFjZV9ibG9ja19iaW9fcmVtYXAoYmlvLCBkaXNrX2RldnQoaGVhZC1cXHUwMDNlZGlzayksXFxuIFxcdFxcdFxcdFxcdCAgICAgIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IpO1xcbiBcXHRcXHRzdWJtaXRfYmlvX25vYWNjdChiaW8pO1xcbiBcXHR9IGVsc2UgaWYgKG52bWVfYXZhaWxhYmxlX3BhdGgoaGVhZCkpIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5pbmRleCAyMGNiOGVkN2Q5ODdhLi43ZjM1NjNjMGY1NTMzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTE4Nyw2ICsxODcsMTMgQEAgc3RydWN0IGdlbmRpc2sge1xcbiAjaWZkZWYgQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgc2xhdmVfYmRldnM7XFxuICNlbmRpZlxcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCBobGlzdF9oZWFkIG1pcnJvcl9oZWFkO1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBtaXJyb3Jfbm9kZTtcXG4rXFx0XFx0XFx0c3RydWN0IGdlbmRpc2sgKmhlYWQ7XFxuK1xcdFxcdH07XFxuK1xcdH07XFxuIFxcdHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICpyYW5kb207XFxuIFxcdHN0cnVjdCBkaXNrX2V2ZW50cyAqZXY7XFxuIFxcbkBAIC05NzcsNiArOTg0LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9ucl96b25lcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiB9XFxuIFxcbiBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSk7XFxuK3ZvaWQgZGlza19hZGRfbWlycm9yKHN0cnVjdCBnZW5kaXNrICpoZWFkLCBzdHJ1Y3QgZ2VuZGlzayAqbWlycm9yKTtcXG4gXFxuIHZvaWQgcHV0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbiBzdHJ1Y3QgZ2VuZGlzayAqX19ibGtfYWxsb2NfZGlzayhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIGludCBub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowNzozNy4zNDc3MTY3NTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNTIwMDEzODIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIk5WTUVfTVVMVElQQVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmRldl9jbG9uZV9wYXJ0aXRpb25zXCIsXG4gICAgXCJkaXNrX2FkZF9taXJyb3JcIixcbiAgICBcImJkZXZfZGlza19jaGFuZ2VkXCIsXG4gICAgXCJudm1lX2ZhaWxvdmVyX3JlcVwiLFxuICAgIFwibnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0XCIsXG4gICAgXCJudm1lX21wYXRoX2VuZF9yZXF1ZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gdG8gY2xvbmUgcGFydGl0aW9ucyBiZXR3ZWVuIGBnZW5kaXNrYHMgKG1pcnJvcnMpLCBzcGVjaWZpY2FsbHkgdXRpbGl6ZWQgYnkgdGhlIE5WTWUgbXVsdGlwYXRoIGRyaXZlciB0byBoYW5kbGUgcGFydGl0aW9ucyBvbiBtdWx0aXBhdGggZGV2aWNlcy4gVGhpcyBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgTlZNZSBtdWx0aXBhdGggcmVxdWVzdCByb3V0aW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBlbXVsYXRlZCBOVk1lIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU5NjJiZWNiODQ5M2YyODMxYzdiYWJlYWZjZjFiMmYyYjYyYjVkZDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwOTowNzozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcbmluZGV4IDUwYWJmZDkzMjg4NjEuLjUwMjgwNWU1ZjkyOWYgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGsuaFxuKysrIGIvYmxvY2svYmxrLmhcbkBAIC02MzgsNiArNjM4LDcgQEAgaW50IGJkZXZfZGVsX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgaW50IHBhcnRubyk7XG4gaW50IGJkZXZfcmVzaXplX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgaW50IHBhcnRubywgc2VjdG9yX3Qgc3RhcnQsXG4gXHRcdHNlY3Rvcl90IGxlbmd0aCk7XG4gdm9pZCBkcm9wX3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KTtcbitpbnQgYmRldl9jbG9uZV9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiBcbiB2b2lkIGJkZXZfc2V0X25yX3NlY3RvcnMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9ycyk7XG4gXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcbmluZGV4IGYxOTkwYzdjZGZiOTEuLjM1MWFjOTNhYmVhYjMgMTAwNjQ0XG4tLS0gYS9ibG9jay9nZW5oZC5jXG4rKysgYi9ibG9jay9nZW5oZC5jXG5AQCAtNDE5LDYgKzQxOSwxNyBAQCBzdGF0aWMgdm9pZCBhZGRfZGlza19maW5hbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGlza191ZXZlbnQoZGlzaywgS09CSl9BREQpO1xuIFx0fVxuIFxuK1x0aWYgKGRpc2stXHUwMDNlaGVhZCkge1xuK1x0XHRpbnQgcmV0O1xuK1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlaGVhZC1cdTAwM2VvcGVuX211dGV4KTtcbitcdFx0cmV0ID0gYmRldl9jbG9uZV9wYXJ0aXRpb25zKGRpc2spO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGRldl9lcnIoZGlza190b19kZXYoZGlzayksIFwiY291bGQgbm90IGNsb25lIHBhcnRpdGlvbnMgKCVkKVxcblwiLFxuK1x0XHRcdFx0cmV0KTtcbitcdH1cbitcbiBcdGJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stXHUwMDNlYmRpLCBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cyk7XG4gXHRkaXNrX2FkZF9ldmVudHMoZGlzayk7XG4gXHRzZXRfYml0KEdEX0FEREVELCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcbkBAIC00MzIsNiArNDQzLDkgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRzdHJ1Y3QgZGV2aWNlICpkZGV2ID0gZGlza190b19kZXYoZGlzayk7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGRpc2stXHUwMDNlaGVhZCBcdTAwMjZcdTAwMjYgZGlza19oYXNfcGFydHNjYW4oZGlzaykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKFdBUk5fT05fT05DRShiZGV2X25yX3NlY3RvcnMoZGlzay1cdTAwM2VwYXJ0MCkgXHUwMDNlIEJMS19ERVZfTUFYX1NFQ1RPUlMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC03MDksNiArNzIzLDEyIEBAIHN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRcdGJkZXZfdW5oYXNoKHBhcnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4gXG4rXHRpZiAoZGlzay1cdTAwM2VoZWFkKSB7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0XHRobGlzdF9kZWwoXHUwMDI2ZGlzay1cdTAwM2VtaXJyb3Jfbm9kZSk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZWhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogVGVsbCB0aGUgZmlsZSBzeXN0ZW0gdG8gd3JpdGUgYmFjayBhbGwgZGlydHkgZGF0YSBhbmQgc2h1dCBkb3duIGlmXG4gXHQgKiBpdCBoYXNuJ3QgYmVlbiBub3RpZmllZCBlYXJsaWVyLlxuQEAgLTEzNjksNyArMTM4OSw4IEBAIHN0YXRpYyBpbnQgZGlza3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXFmLCB2b2lkICp2KVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0eGFfZm9yX2VhY2goXHUwMDI2Z3AtXHUwMDNlcGFydF90YmwsIGlkeCwgaGQpIHtcbi1cdFx0aWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSBcdTAwMjZcdTAwMjYgIWJkZXZfbnJfc2VjdG9ycyhoZCkpXG4rXHRcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJkZXZfbnJfc2VjdG9ycyhoZCkgfHwgKGdwLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aW5mbGlnaHQgPSBiZGV2X2NvdW50X2luZmxpZ2h0KGhkKTtcbkBAIC0xNTEwLDYgKzE1MzEsMTggQEAgc3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbit2b2lkIGRpc2tfYWRkX21pcnJvcihzdHJ1Y3QgZ2VuZGlzayAqaGVhZCwgc3RydWN0IGdlbmRpc2sgKm1pcnJvcilcbit7XG4rXHRpZiAoIWhlYWQpXG4rXHRcdHJldHVybjtcbitcdFdBUk5fT05fT05DRSh0ZXN0X2JpdChHRF9BRERFRCwgXHUwMDI2bWlycm9yLVx1MDAzZXN0YXRlKSk7XG4rXHRtaXJyb3ItXHUwMDNlaGVhZCA9IGhlYWQ7XG4rXHRtdXRleF9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRobGlzdF9hZGRfaGVhZChcdTAwMjZtaXJyb3ItXHUwMDNlbWlycm9yX25vZGUsIFx1MDAyNmhlYWQtXHUwMDNlbWlycm9yX2hlYWQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGRpc2tfYWRkX21pcnJvcik7XG4rXG4gc3RydWN0IGdlbmRpc2sgKl9fYmxrX2FsbG9jX2Rpc2soc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBpbnQgbm9kZSxcbiBcdFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxuIHtcbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG5pbmRleCBiNWM1OWI3OWNhN2NiLi5iYWY3OTJiZWNmNjk5IDEwMDY0NFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbisrKyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG5AQCAtNjQ0LDYgKzY0NCw3IEBAIHN0YXRpYyBpbnQgYmxrX2FkZF9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIGludCBiZGV2X2Rpc2tfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYm9vbCBpbnZhbGlkYXRlKVxuIHtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQ7XG4rXHRzdHJ1Y3QgZ2VuZGlzayAqbWlycm9yO1xuIFx0dW5zaWduZWQgbG9uZyBpZHg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbkBAIC03MDMsNiArNzA0LDEzIEBAIGludCBiZGV2X2Rpc2tfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYm9vbCBpbnZhbGlkYXRlKVxuIFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2RldihkaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHR9XG4gXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShtaXJyb3IsIFx1MDAyNmRpc2stXHUwMDNlbWlycm9yX2hlYWQsXG4rXHRcdFx0XHRtaXJyb3Jfbm9kZSkge1xuK1x0XHRyZXQgPSBiZGV2X2Nsb25lX3BhcnRpdGlvbnMobWlycm9yKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRicmVhaztcbitcdH1cbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIC8qXG5AQCAtNzExLDYgKzcxOSw0MyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcbiAgKi9cbiBFWFBPUlRfU1lNQk9MX0dQTChiZGV2X2Rpc2tfY2hhbmdlZCk7XG4gXG4raW50IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbit7XG4rXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0O1xuK1x0dW5zaWduZWQgbG9uZyBpZHg7XG4rXG4rXHRpZiAoIWRpc2stXHUwMDNlaGVhZClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXHR4YV9mb3JfZWFjaF9zdGFydChcdTAwMjZkaXNrLVx1MDAzZXBhcnRfdGJsLCBpZHgsIHBhcnQsIDEpIHtcbitcdFx0LyogU2FtZSBhcyBiZGV2X2Rpc2tfY2hhbmdlZCgpICovXG4rXHRcdGJkZXZfdW5oYXNoKHBhcnQpO1xuK1x0XHRXQVJOX09OX09OQ0UoYXRvbWljX3JlYWQoXHUwMDI2cGFydC1cdTAwM2ViZF9vcGVuZXJzKSk7XG4rXHRcdGludmFsaWRhdGVfYmRldihwYXJ0KTtcbitcdFx0ZHJvcF9wYXJ0aXRpb24ocGFydCk7XG4rXHR9XG4rXG4rXHR4YV9mb3JfZWFjaF9zdGFydChcdTAwMjZkaXNrLVx1MDAzZWhlYWQtXHUwMDNlcGFydF90YmwsIGlkeCwgcGFydCwgMSkge1xuK1x0XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0X2FkZGVkO1xuK1xuK1x0XHRwYXJ0X2FkZGVkID0gYWRkX3BhcnRpdGlvbihkaXNrLCBpZHgsIHBhcnQtXHUwMDNlYmRfc3RhcnRfc2VjdCxcbitcdFx0XHRcdFx0cGFydC1cdTAwM2ViZF9ucl9zZWN0b3JzLCBBRERQQVJUX0ZMQUdfTk9ORSxcbitcdFx0XHRcdFx0cGFydC1cdTAwM2ViZF9tZXRhX2luZm8pO1xuK1x0XHRpZiAoSVNfRVJSKHBhcnRfYWRkZWQpKSB7XG4rXHRcdFx0aWYgKFBUUl9FUlIocGFydF9hZGRlZCkgIT0gLUVOWElPKSB7XG4rXHRcdFx0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KGRpc2spLCBcInAlbGQgY291bGQgbm90IGJlIGFkZGVkOiAlcGVcXG5cIixcbitcdFx0XHRcdCAgICAgICBpZHgsIHBhcnRfYWRkZWQpO1xuK1x0XHRcdH1cbitcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihwYXJ0X2FkZGVkKTtcbitcdFx0fVxuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gdm9pZCAqcmVhZF9wYXJ0X3NlY3RvcihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCBzZWN0b3JfdCBuLCBTZWN0b3IgKnApXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBzdGF0ZS1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwLVx1MDAzZWJkX21hcHBpbmc7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5pbmRleCAxMzIyYzY3OGY0ZWI4Li5iOTRiOWEzYmNlYjI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbkBAIC00MjczLDYgKzQyNzMsNyBAQCBzdGF0aWMgdm9pZCBudm1lX2FsbG9jX25zKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXG4gXHRcdHNwcmludGYoZGlzay1cdTAwM2VkaXNrX25hbWUsIFwibnZtZSVkYyVkbiVkXCIsIGN0cmwtXHUwMDNlc3Vic3lzLVx1MDAzZWluc3RhbmNlLFxuIFx0XHRcdGN0cmwtXHUwMDNlaW5zdGFuY2UsIG5zLVx1MDAzZWhlYWQtXHUwMDNlaW5zdGFuY2UpO1xuIFx0XHRkaXNrLVx1MDAzZWZsYWdzIHw9IEdFTkhEX0ZMX0hJRERFTjtcbitcdFx0ZGlza19hZGRfbWlycm9yKG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzaywgbnMtXHUwMDNlZGlzayk7XG4gXHR9IGVsc2UgaWYgKG11bHRpcGF0aCkge1xuIFx0XHRzcHJpbnRmKGRpc2stXHUwMDNlZGlza19uYW1lLCBcIm52bWUlZG4lZFwiLCBjdHJsLVx1MDAzZXN1YnN5cy1cdTAwM2VpbnN0YW5jZSxcbiBcdFx0XHRucy1cdTAwM2VoZWFkLVx1MDAzZWluc3RhbmNlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG5pbmRleCA3NWRiYjU4Mjg2YTMyLi5iZDQwNTZmMWE5ZjI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG5AQCAtMTQ0LDYgKzE0NCwyMyBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfZnJlZXplKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFx0XHRcdGJsa19mcmVlemVfcXVldWVfc3RhcnQoaC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZGlza190b19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuK1x0XHRcdFx0XHRcdHU4IHBhcnRubylcbit7XG4rXHQvKiBRdWljayBsb29rdXAgZm9yIHdob2xlIGRpc2sgKi9cbitcdGlmICghcGFydG5vKVxuK1x0XHRyZXR1cm4gZGlzay1cdTAwM2VwYXJ0MDtcbitcdHJldHVybiB4YV9sb2FkKFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIHBhcnRubyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitcdFx0XHRcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbit7XG4rXHRpZiAoIWJkZXYpXG4rXHRcdHJldHVybiBkaXNrLVx1MDAzZXBhcnQwO1xuK1x0cmV0dXJuIG52bWVfZGlza190b19wYXJ0KGRpc2ssIGJkZXZfcGFydG5vKGJkZXYpKTtcbit9XG4rXG4gdm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIHtcbiBcdHN0cnVjdCBudm1lX25zICpucyA9IHJlcS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbkBAIC0xNjUsOCArMTgyLDEwIEBAIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5zLVx1MDAzZWhlYWQtXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XG4tXHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpXG4tXHRcdGJpb19zZXRfZGV2KGJpbywgbnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbitcdGZvciAoYmlvID0gcmVxLVx1MDAzZWJpbzsgYmlvOyBiaW8gPSBiaW8tXHUwMDNlYmlfbmV4dCkge1xuK1x0XHRiaW9fc2V0X2RldihiaW8sIG52bWVfdG9fZGlza19wYXJ0KG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzayxcbitcdFx0XHRcdGJpby1cdTAwM2ViaV9iZGV2KSk7XG4rXHR9XG4gXHRibGtfc3RlYWxfYmlvcyhcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbGlzdCwgcmVxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcbiBcbkBAIC0xOTQsOCArMjEzLDkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRudm1lX3JlcShycSktXHUwMDNlZmxhZ3MgfD0gTlZNRV9NUEFUSF9JT19TVEFUUztcbi1cdG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KGRpc2stXHUwMDNlcGFydDAsIHJlcV9vcChycSksXG4tXHRcdFx0XHRcdFx0ICAgICAgamlmZmllcyk7XG4rXHRudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChcbitcdFx0XHRudm1lX3RvX2Rpc2tfcGFydChkaXNrLCBycS1cdTAwM2VwYXJ0KSxcbitcdFx0XHRyZXFfb3AocnEpLCBqaWZmaWVzKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KTtcbiBcbkBAIC0yMDgsNyArMjI4LDggQEAgdm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcbiBcdGlmICghKG52bWVfcmVxKHJxKS1cdTAwM2VmbGFncyBcdTAwMjYgTlZNRV9NUEFUSF9JT19TVEFUUykpXG4gXHRcdHJldHVybjtcbi1cdGJkZXZfZW5kX2lvX2FjY3QobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuK1x0YmRldl9lbmRfaW9fYWNjdChudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4rXHRcdFx0IHJxLVx1MDAzZXBhcnQpLCByZXFfb3AocnEpLFxuIFx0XHRcdCBibGtfcnFfYnl0ZXMocnEpIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQsXG4gXHRcdFx0IG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lKTtcbiB9XG5AQCAtNTMwLDExICs1NTEsMjEgQEAgc3RhdGljIGJvb2wgbnZtZV9hdmFpbGFibGVfcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxuIFx0cmV0dXJuIG52bWVfbXBhdGhfcXVldWVfaWZfbm9fcGF0aChoZWFkKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfZmluZF9wYXRoX2JkZXYoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCxcbitcdFx0XHRcdFx0XHR1OCBwYXJ0bm8pXG4re1xuK1x0c3RydWN0IG52bWVfbnMgKm5zID0gbnZtZV9maW5kX3BhdGgoaGVhZCk7XG4rXG4rXHRpZiAoIW5zKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBudm1lX2Rpc2tfdG9fcGFydChucy1cdTAwM2VkaXNrLCBwYXJ0bm8pO1xuK31cbitcbiBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0c3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCA9IGJpby1cdTAwM2ViaV9iZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gZGlza190b19kZXYoaGVhZC1cdTAwM2VkaXNrKTtcbi1cdHN0cnVjdCBudm1lX25zICpucztcbitcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7XG4gXHRpbnQgc3JjdV9pZHg7XG4gXG4gXHQvKlxuQEAgLTU0Nyw5ICs1NzgsOSBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdHJldHVybjtcbiBcbiBcdHNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2aGVhZC1cdTAwM2VzcmN1KTtcbi1cdG5zID0gbnZtZV9maW5kX3BhdGgoaGVhZCk7XG4tXHRpZiAobGlrZWx5KG5zKSkge1xuLVx0XHRiaW9fc2V0X2RldihiaW8sIG5zLVx1MDAzZWRpc2stXHUwMDNlcGFydDApO1xuK1x0YmRldiA9IG52bWVfZmluZF9wYXRoX2JkZXYoaGVhZCwgYmRldl9wYXJ0bm8oYmlvLVx1MDAzZWJpX2JkZXYpKTtcbitcdGlmIChsaWtlbHkoYmRldikpIHtcbitcdFx0YmlvX3NldF9kZXYoYmlvLCBiZGV2KTtcbiBcdFx0LypcbiBcdFx0ICogVXNlIEJJT19SRU1BUFBFRCB0byBza2lwIGJpb19jaGVja19lb2QoKSB3aGVuIHRoaXMgYmlvXG4gXHRcdCAqIGVudGVycyBzdWJtaXRfYmlvX25vYWNjdCgpIGZvciB0aGUgcGVyLXBhdGggZGV2aWNlLiBUaGUgRU9EXG5AQCAtNTU3LDcgKzU4OCw3IEBAIHN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0ICovXG4gXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19SRU1BUFBFRCk7XG4gXHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05WTUVfTVBBVEg7XG4tXHRcdHRyYWNlX2Jsb2NrX2Jpb19yZW1hcChiaW8sIGRpc2tfZGV2dChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2spLFxuK1x0XHR0cmFjZV9ibG9ja19iaW9fcmVtYXAoYmlvLCBkaXNrX2RldnQoaGVhZC1cdTAwM2VkaXNrKSxcbiBcdFx0XHRcdCAgICAgIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3Rvcik7XG4gXHRcdHN1Ym1pdF9iaW9fbm9hY2N0KGJpbyk7XG4gXHR9IGVsc2UgaWYgKG52bWVfYXZhaWxhYmxlX3BhdGgoaGVhZCkpIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggMjBjYjhlZDdkOTg3YS4uN2YzNTYzYzBmNTUzMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0xODcsNiArMTg3LDEzIEBAIHN0cnVjdCBnZW5kaXNrIHtcbiAjaWZkZWYgQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNsYXZlX2JkZXZzO1xuICNlbmRpZlxuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3QgaGxpc3RfaGVhZCBtaXJyb3JfaGVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSBtaXJyb3Jfbm9kZTtcbitcdFx0XHRzdHJ1Y3QgZ2VuZGlzayAqaGVhZDtcbitcdFx0fTtcbitcdH07XG4gXHRzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqcmFuZG9tO1xuIFx0c3RydWN0IGRpc2tfZXZlbnRzICpldjtcbiBcbkBAIC05NzcsNiArOTg0LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9ucl96b25lcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIH1cbiBcbiBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSk7XG4rdm9pZCBkaXNrX2FkZF9taXJyb3Ioc3RydWN0IGdlbmRpc2sgKmhlYWQsIHN0cnVjdCBnZW5kaXNrICptaXJyb3IpO1xuIFxuIHZvaWQgcHV0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xuIHN0cnVjdCBnZW5kaXNrICpfX2Jsa19hbGxvY19kaXNrKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGUsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowNzozNy4zNDc3MTgwMzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTU2NTA5NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBOVk1lIE11bHRpcGF0aCBhbmQgQmxvY2sgTGF5ZXIgTWlycm9yaW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgdG8gcmV2aWV3LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6IGFyZSB0aGVyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpc24ndCBqdXN0IGEgcmVmYWN0b3I7IGl0J3MgYSBzdHJ1Y3R1cmFsIG1vZGlmaWNhdGlvbiwgYW5kIGl0J3MgdG91Y2hpbmcgY3JpdGljYWwgYXJlYXMuXG5cblRoZSBwYXRjaCBoaXRzIHRoZSBibG9jayBsYXllciDigJMgc3BlY2lmaWNhbGx5IGBibGsuaGAsIGBnZW5oZC5jYCwgYW5kIGBwYXJ0aXRpb25zL2NvcmUuY2Ag4oCTIGFuZCB0aGVuIGRpdmVzIGludG8gdGhlIE5WTWUgc3Vic3lzdGVtLCBtb2RpZnlpbmcgY29yZSBOVk1lIGhvc3QgZHJpdmVyIGxvZ2ljIGluIGBjb3JlLmNgIGFuZCBtdWx0aXBhdGggZnVuY3Rpb25hbGl0eSBpbiBgbXVsdGlwYXRoLmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgXCJtaXJyb3JcIiBjb25jZXB0IGZvciBgZ2VuZGlza2BzLCBjbG9uaW5nIHBhcnRpdGlvbnMsIGlzIHRoZSBrZXkgY2hhbmdlIGhlcmUuIEl0J3MgZXhwbGljaXRseSB1c2VkIGluIE5WTWUgbXVsdGlwYXRoLCBhZGRpbmcgdGhlIG1pcnJvciB3aXRoIGBkaXNrX2FkZF9taXJyb3IobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLCBucy1cdTAwM2VkaXNrKWAuIEl0IGFsc28gYWx0ZXJzIGBiZGV2X2Rpc2tfY2hhbmdlZGAgdG8gZW5zdXJlIHRoZSBtaXJyb3JzIGdldCB0aGUgcGFydGl0aW9uIHVwZGF0ZXMuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYWxzbyB1cGRhdGluZyB2YXJpb3VzIG11bHRpcGF0aCBOVk1lIHJlcXVlc3RzIHRvIGhhbmRsZSB0aGVzZSBtaXJyb3IgZGlza3MuXG5cbk15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBoYXMgYSBoaWdoIHBvdGVudGlhbCBmb3IgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzIG1vZGlmeWluZyBjb3JlIGJsb2NrIGxheWVyIGFuZCBOVk1lIGRyaXZlciBsb2dpYyBhbmQgaXQncyBzcGVjaWZpY2FsbHkgdXNpbmcgaXQgaW4gbXVsdGlwYXRoLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIHRlc3RlZCBpbiBhIHJlYXNvbmFibGUgZW52aXJvbm1lbnQ/IEZvcnR1bmF0ZWx5LCBOVk1lIGlzIHdlbGwtc3VwcG9ydGVkIGluIFFFTVUsIHNvIHZpcnR1YWxpemVkIE5WTWUgbXVsdGlwYXRoIHRlc3RpbmcgaXMgZW50aXJlbHkgZmVhc2libGUuIFRoaXMgaXMgZXhjZWxsZW50IG5ld3MsIGFzIHRoaXMgbWVhbnMgd2UgY2FuIGJ1aWxkIGEgdGVzdGluZyBlbnZpcm9ubWVudCBlYXNpbHkuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdGFyZ2V0LiBXZSBuZWVkIHRvIGJlIHN1cmdpY2FsLiBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYFxuKiAgIGBkaXNrX2FkZF9taXJyb3JgXG4qICAgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGBcbiogICBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGBcbiogICBgbnZtZV9mYWlsb3Zlcl9yZXFgXG4qICAgYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCAoRXZlbiB0aG91Z2ggaXQgaXMgc3RhdGljLCBpdCBpcyBjYWxsZWQgYnkgdGhlIGZ1bmN0aW9ucyBpbiBxdWVzdGlvbiwgc28gd2Ugc2hvdWxkIGtlZXAgaXQgaW4gbWluZCkuXG5cbkhvd2V2ZXIsIHNpbmNlIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AgaXMgc3RhdGljLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgY292ZXJhZ2UgaW5kaXJlY3RseSBieSB0YXJnZXRpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zOiBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCwgYGRpc2tfYWRkX21pcnJvcmAsIGFuZCB0aGUgZnVuY3Rpb24gbW9kaWZpZWQsIGBiZGV2X2Rpc2tfY2hhbmdlZGAuXG5cbk9rYXksIG5leHQgc3RlcHMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLiBJIGtub3cgYENPTkZJR19OVk1FX01VTFRJUEFUSGAgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQgaGVyZS4gVGhlbiBJJ2xsIHVzZSBzb21lIHRvb2xzIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIGJlc3QgcGF0aCBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODEyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MDc6NDUuNTA0MjI5ODM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDgxODUzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5WTUVfTVVMVElQQVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NT1jb25maWcgQkxLX0RFVl9OVk1FXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6MTc6Y29uZmlnIE5WTUVfTVVMVElQQVRIXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJOVk1lIG11bHRpcGF0aCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowNzo0Ny4xMTI0MTk1OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY2NDI4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBOVk1lIE11bHRpcGF0aCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIG1ldGljdWxvdXNseSB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19OVk1FX01VTFRJUEFUSGAuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgYWxsIHRoZSBuZWNlc3Nhcnkgc3VwcG9ydGluZyBlbGVtZW50cyBhcmUgaW4gcGxhY2UgYmVmb3JlIHdlIGV2ZW4gY29uc2lkZXIgZW5hYmxpbmcgdGhpcy4gV2UncmUgdGFsa2luZyBhYm91dCBhIGZlYXR1cmUgdGhhdCBwcm9mb3VuZGx5IGltcGFjdHMgSS9PIHBhdGggc2VsZWN0aW9uIGFuZCByZXNpbGllbmNlLCBzbyBhIHN1cGVyZmljaWFsIGdsYW5jZSBzaW1wbHkgd29uJ3QgY3V0IGl0LiBJIG5lZWQgdG8ga25vdzogQXJlIHRoZXJlIGFueSBmdW5kYW1lbnRhbCBrZXJuZWwgZmVhdHVyZXMgb3IgZHJpdmVyIGNvbXBvbmVudHMsIGJleW9uZCB0aGUgb2J2aW91cyBOVk1lIGNvcmUsIHRoYXQgdGhpcyByZWxpZXMgb24/IFRoaW5rIGFib3V0IHRoZSBTQ1NJIHN1YnN5c3RlbSwgbXVsdGlwYXRoaW5nIGluZnJhc3RydWN0dXJlIChETS1NdWx0aXBhdGggb3Igc2ltaWxhciksIGFuZCBhbnkgYmxvY2sgbGF5ZXIgbW9kaWZpY2F0aW9ucy4gQXJlIHRoZXkgcHJvcGVybHkgY29uZmlndXJlZCwgbG9hZGVkLCBhbmQgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byByZXZpZXcgdGhlIGtjb25maWcgZGVwZW5kZW5jaWVzLlxuXG5JJ2xsIGJlIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBtdWx0aXBhdGggc3VwcG9ydCBjYW4gc29tZXRpbWVzIGNyZWF0ZSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN0b3JhZ2UgbW9kdWxlcywgZXNwZWNpYWxseSByZWdhcmRpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGRldmljZSBkaXNjb3ZlcnkuIFNvLCB0aGlzIGludm9sdmVzIGEgc3lzdGVtYXRpYyBleGFtaW5hdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBub3QganVzdCBhIGNhc3VhbCBsb29rLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBlbmFibGluZyBpdCB3aWxsIGhhdmUgYW55IGltcGFjdCBvbiB0aGUgZGVmYXVsdCBOVk1lIGJlaGF2aW9yLCBvciBpZiBvdGhlciBkZXBlbmRlbmNpZXMgbWF5IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIG1vcmUgdGhhbiBqdXN0IGNvbmZpcm1pbmcgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIEl0J3MgYWJvdXQgZGV2ZWxvcGluZyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGVpciByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzIHRvIG1ha2UgdGhlIGJlc3QgcG9zc2libGUgY29uZmlndXJhdGlvbiBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjA3OjUwLjk3ODg0OTkzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU3MTc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9NVUxUSVBBVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjE3OmNvbmZpZyBOVk1FX01VTFRJUEFUSFxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTgtXFx0Ym9vbCBcXFwiTlZNZSBtdWx0aXBhdGggc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MDc6NTEuMDI3NDI2NjI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMjQzMTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVk1lIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgTlZNZSBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IGl0J3Mgc3RydWN0dXJlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYGRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDE3LiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgZm9yIHRoZSBOVk1lIGhvc3QgY29udHJvbGxlciBkcml2ZXIuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIG1vZHVsZSBzZWxlY3Rpb25zLCBmZWF0dXJlIHRvZ2dsZXMsIGFuZCBwZXJoYXBzIHNvbWUgZGVmYXVsdCBzZXR0aW5ncy4gSG9wZWZ1bGx5IEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYWJsZSBlbGVtZW50cyBhbmQgZGVwZW5kZW5jaWVzIHRoZXJlLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowNzo1NC4wNTk4NjA1MDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTlZNRV9DT1JFXFxuICAgMzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgQkxLX0RFVl9OVk1FXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTlZNIEV4cHJlc3MgYmxvY2sgZGV2aWNlXFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgQkxPQ0tcXG4gICA4OlxcdFxcdHNlbGVjdCBOVk1FX0NPUkVcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhlIE5WTSBFeHByZXNzIGRyaXZlciBpcyBmb3Igc29saWQgc3RhdGUgZHJpdmVzIGRpcmVjdGx5XFxuICAxMTpcXHRcXHQgIGNvbm5lY3RlZCB0byB0aGUgUENJIG9yIFBDSSBFeHByZXNzIGJ1cy4gIElmIHlvdSBrbm93IHlvdVxcbiAgMTI6XFx0XFx0ICBkb24ndCBoYXZlIG9uZSBvZiB0aGVzZSwgaXQgaXMgc2FmZSB0byBhbnN3ZXIgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDE1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG52bWUuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBOVk1FX01VTFRJUEFUSFxcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiTlZNZSBtdWx0aXBhdGggc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gTlZNRV9DT1JFXFxuICAyMDpcXHRcXHRoZWxwXFxuICAyMTpcXHRcXHQgIFRoaXMgb3B0aW9uIGNvbnRyb2xzIHN1cHBvcnQgZm9yIG11bHRpcGF0aCBhY2Nlc3MgdG8gTlZNZVxcbiAgMjI6XFx0XFx0ICBzdWJzeXN0ZW1zLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIHN1cHBvcnQgZm9yIE5WTWUgbXVsdGlwYXRoXFxuICAyMzpcXHRcXHQgIGFjY2VzcyBpcyBpbmNsdWRlZCBpbiB0aGUga2VybmVsLiBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCBzdXBwb3J0XFxuICAyNDpcXHRcXHQgIGZvciBOVk1lIG11bHRpcGF0aCBhY2Nlc3MgaXMgZXhjbHVkZWQgZnJvbSB0aGUga2VybmVsLiBXaGVuIHRoaXNcXG4gIDI1OlxcdFxcdCAgb3B0aW9uIGlzIGRpc2FibGVkIGVhY2ggY29udHJvbGxlci9uYW1lc3BhY2UgcmVjZWl2ZXMgaXRzXFxuICAyNjpcXHRcXHQgIG93biAvZGV2L252bWVYblkgZGV2aWNlIGVudHJ5IGFuZCBOVk1lIG11bHRpcGF0aCBhY2Nlc3MgaXNcXG4gIDI3OlxcdFxcdCAgbm90IHN1cHBvcnRlZC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjA3OjU0LjA1OTk1Nzg1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MDk3MDg2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlZNZSBNdWx0aXBhdGggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIE5WTWUgbXVsdGlwYXRoIHBhdGNoIGFuZCBoZXJlJ3MgbXkgdGFrZS4gIEl0IGxvb2tzIGxpa2UgYE5WTUVfTVVMVElQQVRIYCByZWxpZXMgb24gYE5WTUVfQ09SRWAsIHdoaWNoIGlzIGl0c2VsZiBzZWxlY3RlZCBieSBgQkxLX0RFVl9OVk1FYC4gIFRoZXJlZm9yZSwgdG8gcHJvcGVybHkgdGVzdCB0aGUgbXVsdGlwYXRoaW5nIGZ1bmN0aW9uYWxpdHksIEknbSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSBJIGVuYWJsZSAqYm90aCogYEJMS19ERVZfTlZNRWAgYW5kIGBOVk1FX01VTFRJUEFUSGAuXG5cbkZyb20gdGhlIGNvZGUsIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBpbXBvcnRhbnQgdG8gcmVhbGx5IGRpZyBpbnRvIGFyZTogYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AsIGBkaXNrX2FkZF9taXJyb3JgLCBgYmRldl9kaXNrX2NoYW5nZWRgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgdGhvcm91Z2hseSB2ZXR0ZWQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBgbnZtZV9mYWlsb3Zlcl9yZXFgIGlzIGV4cG9ydGVkLiBPa2F5LCBpdCdzIG5vdCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgaXQgbW9yZSBsaWtlbHkgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhbmQgcG90ZW50aWFsbHkgYmUgZXhwb3NlZCB0byBpbnRlcmVzdGluZyBpbnB1dHMuIFRoZSBvdGhlciBmdW5jdGlvbnMsIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgIGFuZCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAgbG9vayBzaWduaWZpY2FudCB0b28uXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZWlyIGludGVyYWN0aW9uIHdpdGggdGhlIGJsb2NrIGxheWVyLiAgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgdGFrZXMgYSBgZ2VuZGlza2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgIHRha2VzIGEgaGVhZCBhbmQgbWlycm9yIGRpc2suXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19CTE9DS2AgaXMgYSBnaXZlbiwgdGhhdCdzIG5vdCBpbnRlcmVzdGluZy4gQWxzbywgYENPTkZJR19QQ0lgIGlzIGEgZGVwZW5kZW5jeSBmb3IgYEJMS19ERVZfTlZNRWAsIHdoaWNoIGlzIGZpbmUuXG5cbk9rYXksIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZS4gTG9va2luZyBhdCB0aGUgZmlsZXMgbW9kaWZpZWQsIGl0J3MgbW9kaWZ5aW5nIGBibG9jay9nZW5oZC5jYCBhbmQgYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYCAtLSB0aGVzZSBhcmUgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgY29kZS4gIFRoZSBOVk1lIGNoYW5nZXMgYXJlIGluIGBkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNgIGFuZCBgZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNgLiBUaGlzIGlzIHF1aXRlIGEgYml0IG1vcmUgaW50ZWdyYXRlZCB0aGFuIEknZCBpbml0aWFsbHkgdGhvdWdodC5cblxuR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25hbGl0eSwgYW5kIGRlYWxpbmcgd2l0aCBwYXJ0aXRpb24gY2xvbmluZy9taXJyb3JpbmcgZm9yIE5WTWUgZGV2aWNlcywgdGhpcyBzZWVtcyBoaWdobHkgd29ydGh3aGlsZSB0byBmdXp6LiBJdCdzIGRlYWxpbmcgd2l0aCBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBhbmQgcmVxdWVzdCBoYW5kbGluZy4gTXkgcmVjb21tZW5kYXRpb24gaXM6XG5cbmBXb3J0aEZ1enppbmc9dHJ1ZSwgRm9jdXNTeW1ib2xzPVtcImJkZXZfY2xvbmVfcGFydGl0aW9uc1wiLCBcImRpc2tfYWRkX21pcnJvclwiLCBcImJkZXZfZGlza19jaGFuZ2VkXCIsIFwibnZtZV9mYWlsb3Zlcl9yZXFcIiwgXCJudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RcIiwgXCJudm1lX21wYXRoX2VuZF9yZXF1ZXN0XCJdLCBFbmFibGVDb25maWdzPVtcIkJMS19ERVZfTlZNRVwiLCBcIk5WTUVfTVVMVElQQVRIXCJdYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA3MSwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTowODowMi40Njk2Njg1MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE4MjkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJOVk1FX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJkZXZfY2xvbmVfcGFydGl0aW9uc1wiLFxuICAgIFwiZGlza19hZGRfbWlycm9yXCIsXG4gICAgXCJiZGV2X2Rpc2tfY2hhbmdlZFwiLFxuICAgIFwibnZtZV9mYWlsb3Zlcl9yZXFcIixcbiAgICBcIm52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdFwiLFxuICAgIFwibnZtZV9tcGF0aF9lbmRfcmVxdWVzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbWVjaGFuaXNtIHRvIGNsb25lIHBhcnRpdGlvbnMgYmV0d2VlbiBgZ2VuZGlza2BzIChtaXJyb3JzKSwgc3BlY2lmaWNhbGx5IHV0aWxpemVkIGJ5IHRoZSBOVk1lIG11bHRpcGF0aCBkcml2ZXIgdG8gaGFuZGxlIHBhcnRpdGlvbnMgb24gbXVsdGlwYXRoIGRldmljZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBwYXJ0aXRpb24gaGFuZGxpbmcgYW5kIE5WTWUgbXVsdGlwYXRoIHJlcXVlc3Qgcm91dGluZywgd2hpY2ggYXJlIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBhbmQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgZW11bGF0ZWQgTlZNZSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlZNRVwiLFxuICAgIFwiTlZNRV9NVUxUSVBBVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiZGV2X2Nsb25lX3BhcnRpdGlvbnNcIixcbiAgICBcImRpc2tfYWRkX21pcnJvclwiLFxuICAgIFwiYmRldl9kaXNrX2NoYW5nZWRcIixcbiAgICBcIm52bWVfZmFpbG92ZXJfcmVxXCIsXG4gICAgXCJudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RcIixcbiAgICBcIm52bWVfbXBhdGhfZW5kX3JlcXVlc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSB0byBjbG9uZSBwYXJ0aXRpb25zIGJldHdlZW4gYGdlbmRpc2tgcyAobWlycm9ycyksIHNwZWNpZmljYWxseSB1dGlsaXplZCBieSB0aGUgTlZNZSBtdWx0aXBhdGggZHJpdmVyIHRvIGhhbmRsZSBwYXJ0aXRpb25zIG9uIG11bHRpcGF0aCBkZXZpY2VzLiBUaGlzIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgcGFydGl0aW9uIGhhbmRsaW5nIGFuZCBOVk1lIG11bHRpcGF0aCByZXF1ZXN0IHJvdXRpbmcsIHdoaWNoIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGVtdWxhdGVkIE5WTWUgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MDg6MDIuNTQ3ODU5MDAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMxODYyODg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjA4OjAyLjU0ODMxNDcxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjMxODE2ODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIHN1cHBvcnQgcGFydGl0aW9uIGNsb25pbmcgYW5kIG1pcnJvcmluZyBhY3Jvc3MgYmxvY2sgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBuZXcgZmllbGRzIGluIGBzdHJ1Y3QgZ2VuZGlza2AgKHZpYSBhIHVuaW9uIGZvciBoZWFkL21pcnJvciByb2xlcykgYW5kIGFkZHMgZnVuY3Rpb25zIGxpa2UgYGJkZXZfY2xvbmVfcGFydGl0aW9uc2AgYW5kIGBkaXNrX2FkZF9taXJyb3JgLiBcXG5cXG5UaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdHJ1Y3R1cmFsIGxpbmtpbmcgKGhsaXN0IG9wZXJhdGlvbnMpLCBsb2NraW5nIChgb3Blbl9tdXRleGApLCBhbmQgYmxvY2sgZGV2aWNlL2JpbyByb3V0aW5nLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBhbmQgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgQVBJcyAobGlrZSBpb2N0bHMgb3IgbmV0bGluaykgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIFRoZSBwYXJ0aXRpb24gY2xvbmluZyByZWxpZXMgb24gcmVhZGluZyBmaWVsZHMgZnJvbSBhbHJlYWR5IGluaXRpYWxpemVkIHBhcnRpdGlvbnMgKGBiZF9zdGFydF9zZWN0YCwgYGJkX25yX3NlY3RvcnNgLCBgYmRfbWV0YV9pbmZvYCkuIFxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlIChlLmcuLCBpZiBhIGhlYWQgZGlzayBpcyBmcmVlZCBiZWZvcmUgaXRzIG1pcnJvcnMpLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBsb2NraW5nIGRlYWRsb2Nrcy4gVGhlc2UgY2xhc3NlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OTYyYmVjYjg0OTNmMjgzMWM3YmFiZWFmY2YxYjJmMmI2MmI1ZGQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDk6MDc6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXG5pbmRleCA1MGFiZmQ5MzI4ODYxLi41MDI4MDVlNWY5MjlmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLmhcbisrKyBiL2Jsb2NrL2Jsay5oXG5AQCAtNjM4LDYgKzYzOCw3IEBAIGludCBiZGV2X2RlbF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8pO1xuIGludCBiZGV2X3Jlc2l6ZV9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8sIHNlY3Rvcl90IHN0YXJ0LFxuIFx0XHRzZWN0b3JfdCBsZW5ndGgpO1xuIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCk7XG4raW50IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG4gXG4gdm9pZCBiZGV2X3NldF9ucl9zZWN0b3JzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcnMpO1xuIFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jXG5pbmRleCBmMTk5MGM3Y2RmYjkxLi4zNTFhYzkzYWJlYWIzIDEwMDY0NFxuLS0tIGEvYmxvY2svZ2VuaGQuY1xuKysrIGIvYmxvY2svZ2VuaGQuY1xuQEAgLTQxOSw2ICs0MTksMTcgQEAgc3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRcdGRpc2tfdWV2ZW50KGRpc2ssIEtPQkpfQUREKTtcbiBcdH1cbiBcbitcdGlmIChkaXNrLVx1MDAzZWhlYWQpIHtcbitcdFx0aW50IHJldDtcbitcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZWhlYWQtXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRcdHJldCA9IGJkZXZfY2xvbmVfcGFydGl0aW9ucyhkaXNrKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlaGVhZC1cdTAwM2VvcGVuX211dGV4KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KGRpc2spLCBcImNvdWxkIG5vdCBjbG9uZSBwYXJ0aXRpb25zICglZClcXG5cIixcbitcdFx0XHRcdHJldCk7XG4rXHR9XG4rXG4gXHRibGtfYXBwbHlfYmRpX2xpbWl0cyhkaXNrLVx1MDAzZWJkaSwgXHUwMDI2ZGlzay1cdTAwM2VxdWV1ZS1cdTAwM2VsaW1pdHMpO1xuIFx0ZGlza19hZGRfZXZlbnRzKGRpc2spO1xuIFx0c2V0X2JpdChHRF9BRERFRCwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSk7XG5AQCAtNDMyLDYgKzQ0Myw5IEBAIHN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0c3RydWN0IGRldmljZSAqZGRldiA9IGRpc2tfdG9fZGV2KGRpc2spO1xuIFx0aW50IHJldDtcbiBcbitcdGlmIChkaXNrLVx1MDAzZWhlYWQgXHUwMDI2XHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdGlmIChXQVJOX09OX09OQ0UoYmRldl9ucl9zZWN0b3JzKGRpc2stXHUwMDNlcGFydDApIFx1MDAzZSBCTEtfREVWX01BWF9TRUNUT1JTKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtNzA5LDYgKzcyMywxMiBAQCBzdGF0aWMgdm9pZCBfX2RlbF9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHRiZGV2X3VuaGFzaChwYXJ0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuIFxuK1x0aWYgKGRpc2stXHUwMDNlaGVhZCkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlaGVhZC1cdTAwM2VvcGVuX211dGV4KTtcbitcdFx0aGxpc3RfZGVsKFx1MDAyNmRpc2stXHUwMDNlbWlycm9yX25vZGUpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIFRlbGwgdGhlIGZpbGUgc3lzdGVtIHRvIHdyaXRlIGJhY2sgYWxsIGRpcnR5IGRhdGEgYW5kIHNodXQgZG93biBpZlxuIFx0ICogaXQgaGFzbid0IGJlZW4gbm90aWZpZWQgZWFybGllci5cbkBAIC0xMzY5LDcgKzEzODksOCBAQCBzdGF0aWMgaW50IGRpc2tzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxZiwgdm9pZCAqdilcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNmdwLVx1MDAzZXBhcnRfdGJsLCBpZHgsIGhkKSB7XG4tXHRcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXHUwMDI2XHUwMDI2ICFiZGV2X25yX3NlY3RvcnMoaGQpKVxuK1x0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8IChncC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7XG5AQCAtMTUxMCw2ICsxNTMxLDE4IEBAIHN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rdm9pZCBkaXNrX2FkZF9taXJyb3Ioc3RydWN0IGdlbmRpc2sgKmhlYWQsIHN0cnVjdCBnZW5kaXNrICptaXJyb3IpXG4re1xuK1x0aWYgKCFoZWFkKVxuK1x0XHRyZXR1cm47XG4rXHRXQVJOX09OX09OQ0UodGVzdF9iaXQoR0RfQURERUQsIFx1MDAyNm1pcnJvci1cdTAwM2VzdGF0ZSkpO1xuK1x0bWlycm9yLVx1MDAzZWhlYWQgPSBoZWFkO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bWlycm9yLVx1MDAzZW1pcnJvcl9ub2RlLCBcdTAwMjZoZWFkLVx1MDAzZW1pcnJvcl9oZWFkKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZoZWFkLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChkaXNrX2FkZF9taXJyb3IpO1xuK1xuIHN0cnVjdCBnZW5kaXNrICpfX2Jsa19hbGxvY19kaXNrKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGUsXG4gXHRcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqbGtjbGFzcylcbiB7XG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuaW5kZXggYjVjNTliNzljYTdjYi4uYmFmNzkyYmVjZjY5OSAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuQEAgLTY0NCw2ICs2NDQsNyBAQCBzdGF0aWMgaW50IGJsa19hZGRfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0O1xuK1x0c3RydWN0IGdlbmRpc2sgKm1pcnJvcjtcbiBcdHVuc2lnbmVkIGxvbmcgaWR4O1xuIFx0aW50IHJldCA9IDA7XG4gXG5AQCAtNzAzLDYgKzcwNCwxMyBAQCBpbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcbiBcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2ZGlza190b19kZXYoZGlzayktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIFx0fVxuIFxuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnkobWlycm9yLCBcdTAwMjZkaXNrLVx1MDAzZW1pcnJvcl9oZWFkLFxuK1x0XHRcdFx0bWlycm9yX25vZGUpIHtcbitcdFx0cmV0ID0gYmRldl9jbG9uZV9wYXJ0aXRpb25zKG1pcnJvcik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiAvKlxuQEAgLTcxMSw2ICs3MTksNDMgQEAgaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpXG4gICovXG4gRVhQT1JUX1NZTUJPTF9HUEwoYmRldl9kaXNrX2NoYW5nZWQpO1xuIFxuK2ludCBiZGV2X2Nsb25lX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4re1xuK1x0c3RydWN0IGJsb2NrX2RldmljZSAqcGFydDtcbitcdHVuc2lnbmVkIGxvbmcgaWR4O1xuK1xuK1x0aWYgKCFkaXNrLVx1MDAzZWhlYWQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0eGFfZm9yX2VhY2hfc3RhcnQoXHUwMDI2ZGlzay1cdTAwM2VwYXJ0X3RibCwgaWR4LCBwYXJ0LCAxKSB7XG4rXHRcdC8qIFNhbWUgYXMgYmRldl9kaXNrX2NoYW5nZWQoKSAqL1xuK1x0XHRiZGV2X3VuaGFzaChwYXJ0KTtcbitcdFx0V0FSTl9PTl9PTkNFKGF0b21pY19yZWFkKFx1MDAyNnBhcnQtXHUwMDNlYmRfb3BlbmVycykpO1xuK1x0XHRpbnZhbGlkYXRlX2JkZXYocGFydCk7XG4rXHRcdGRyb3BfcGFydGl0aW9uKHBhcnQpO1xuK1x0fVxuK1xuK1x0eGFfZm9yX2VhY2hfc3RhcnQoXHUwMDI2ZGlzay1cdTAwM2VoZWFkLVx1MDAzZXBhcnRfdGJsLCBpZHgsIHBhcnQsIDEpIHtcbitcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqcGFydF9hZGRlZDtcbitcbitcdFx0cGFydF9hZGRlZCA9IGFkZF9wYXJ0aXRpb24oZGlzaywgaWR4LCBwYXJ0LVx1MDAzZWJkX3N0YXJ0X3NlY3QsXG4rXHRcdFx0XHRcdHBhcnQtXHUwMDNlYmRfbnJfc2VjdG9ycywgQUREUEFSVF9GTEFHX05PTkUsXG4rXHRcdFx0XHRcdHBhcnQtXHUwMDNlYmRfbWV0YV9pbmZvKTtcbitcdFx0aWYgKElTX0VSUihwYXJ0X2FkZGVkKSkge1xuK1x0XHRcdGlmIChQVFJfRVJSKHBhcnRfYWRkZWQpICE9IC1FTlhJTykge1xuK1x0XHRcdFx0ZGV2X2VycihkaXNrX3RvX2RldihkaXNrKSwgXCJwJWxkIGNvdWxkIG5vdCBiZSBhZGRlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgICAgaWR4LCBwYXJ0X2FkZGVkKTtcbitcdFx0XHR9XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIocGFydF9hZGRlZCk7XG4rXHRcdH1cbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHZvaWQgKnJlYWRfcGFydF9zZWN0b3Ioc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSwgc2VjdG9yX3QgbiwgU2VjdG9yICpwKVxuIHtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3RhdGUtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MC1cdTAwM2ViZF9tYXBwaW5nO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuaW5kZXggMTMyMmM2NzhmNGViOC4uYjk0YjlhM2JjZWIyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5AQCAtNDI3Myw2ICs0MjczLDcgQEAgc3RhdGljIHZvaWQgbnZtZV9hbGxvY19ucyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxuIFx0XHRzcHJpbnRmKGRpc2stXHUwMDNlZGlza19uYW1lLCBcIm52bWUlZGMlZG4lZFwiLCBjdHJsLVx1MDAzZXN1YnN5cy1cdTAwM2VpbnN0YW5jZSxcbiBcdFx0XHRjdHJsLVx1MDAzZWluc3RhbmNlLCBucy1cdTAwM2VoZWFkLVx1MDAzZWluc3RhbmNlKTtcbiBcdFx0ZGlzay1cdTAwM2VmbGFncyB8PSBHRU5IRF9GTF9ISURERU47XG4rXHRcdGRpc2tfYWRkX21pcnJvcihucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssIG5zLVx1MDAzZWRpc2spO1xuIFx0fSBlbHNlIGlmIChtdWx0aXBhdGgpIHtcbiBcdFx0c3ByaW50ZihkaXNrLVx1MDAzZWRpc2tfbmFtZSwgXCJudm1lJWRuJWRcIiwgY3RybC1cdTAwM2VzdWJzeXMtXHUwMDNlaW5zdGFuY2UsXG4gXHRcdFx0bnMtXHUwMDNlaGVhZC1cdTAwM2VpbnN0YW5jZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuaW5kZXggNzVkYmI1ODI4NmEzMi4uYmQ0MDU2ZjFhOWYyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuQEAgLTE0NCw2ICsxNDQsMjMgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X2ZyZWV6ZShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cylcbiBcdFx0XHRibGtfZnJlZXplX3F1ZXVlX3N0YXJ0KGgtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX2Rpc2tfdG9fcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitcdFx0XHRcdFx0XHR1OCBwYXJ0bm8pXG4re1xuK1x0LyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovXG4rXHRpZiAoIXBhcnRubylcbitcdFx0cmV0dXJuIGRpc2stXHUwMDNlcGFydDA7XG4rXHRyZXR1cm4geGFfbG9hZChcdTAwMjZkaXNrLVx1MDAzZXBhcnRfdGJsLCBwYXJ0bm8pO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4rXHRcdFx0XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4re1xuK1x0aWYgKCFiZGV2KVxuK1x0XHRyZXR1cm4gZGlzay1cdTAwM2VwYXJ0MDtcbitcdHJldHVybiBudm1lX2Rpc2tfdG9fcGFydChkaXNrLCBiZGV2X3BhcnRubyhiZGV2KSk7XG4rfVxuK1xuIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiB7XG4gXHRzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5AQCAtMTY1LDggKzE4MiwxMCBAQCB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbG9jaywgZmxhZ3MpO1xuLVx0Zm9yIChiaW8gPSByZXEtXHUwMDNlYmlvOyBiaW87IGJpbyA9IGJpby1cdTAwM2ViaV9uZXh0KVxuLVx0XHRiaW9fc2V0X2RldihiaW8sIG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCk7XG4rXHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpIHtcbitcdFx0YmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4rXHRcdFx0XHRiaW8tXHUwMDNlYmlfYmRldikpO1xuK1x0fVxuIFx0YmxrX3N0ZWFsX2Jpb3MoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xpc3QsIHJlcSk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5zLVx1MDAzZWhlYWQtXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XG4gXG5AQCAtMTk0LDggKzIxMyw5IEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bnZtZV9yZXEocnEpLVx1MDAzZWZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7XG4tXHRudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuLVx0XHRcdFx0XHRcdCAgICAgIGppZmZpZXMpO1xuK1x0bnZtZV9yZXEocnEpLVx1MDAzZXN0YXJ0X3RpbWUgPSBiZGV2X3N0YXJ0X2lvX2FjY3QoXG4rXHRcdFx0bnZtZV90b19kaXNrX3BhcnQoZGlzaywgcnEtXHUwMDNlcGFydCksXG4rXHRcdFx0cmVxX29wKHJxKSwgamlmZmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7XG4gXG5AQCAtMjA4LDcgKzIyOCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4gXG4gXHRpZiAoIShudm1lX3JlcShycSktXHUwMDNlZmxhZ3MgXHUwMDI2IE5WTUVfTVBBVEhfSU9fU1RBVFMpKVxuIFx0XHRyZXR1cm47XG4tXHRiZGV2X2VuZF9pb19hY2N0KG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCwgcmVxX29wKHJxKSxcbitcdGJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLFxuK1x0XHRcdCBycS1cdTAwM2VwYXJ0KSwgcmVxX29wKHJxKSxcbiBcdFx0XHQgYmxrX3JxX2J5dGVzKHJxKSBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZULFxuIFx0XHRcdCBudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSk7XG4gfVxuQEAgLTUzMCwxMSArNTUxLDIxIEBAIHN0YXRpYyBib29sIG52bWVfYXZhaWxhYmxlX3BhdGgoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZClcbiBcdHJldHVybiBudm1lX21wYXRoX3F1ZXVlX2lmX25vX3BhdGgoaGVhZCk7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX2ZpbmRfcGF0aF9iZGV2KHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQsXG4rXHRcdFx0XHRcdFx0dTggcGFydG5vKVxuK3tcbitcdHN0cnVjdCBudm1lX25zICpucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpO1xuK1xuK1x0aWYgKCFucylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gbnZtZV9kaXNrX3RvX3BhcnQobnMtXHUwMDNlZGlzaywgcGFydG5vKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIHtcbiBcdHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQgPSBiaW8tXHUwMDNlYmlfYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRpc2tfdG9fZGV2KGhlYWQtXHUwMDNlZGlzayk7XG4tXHRzdHJ1Y3QgbnZtZV9ucyAqbnM7XG4rXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2O1xuIFx0aW50IHNyY3VfaWR4O1xuIFxuIFx0LypcbkBAIC01NDcsOSArNTc4LDkgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlc3JjdSk7XG4tXHRucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpO1xuLVx0aWYgKGxpa2VseShucykpIHtcbi1cdFx0YmlvX3NldF9kZXYoYmlvLCBucy1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbitcdGJkZXYgPSBudm1lX2ZpbmRfcGF0aF9iZGV2KGhlYWQsIGJkZXZfcGFydG5vKGJpby1cdTAwM2ViaV9iZGV2KSk7XG4rXHRpZiAobGlrZWx5KGJkZXYpKSB7XG4rXHRcdGJpb19zZXRfZGV2KGJpbywgYmRldik7XG4gXHRcdC8qXG4gXHRcdCAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpb1xuIFx0XHQgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRFxuQEAgLTU1Nyw3ICs1ODgsNyBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdCAqL1xuIFx0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpO1xuIFx0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OVk1FX01QQVRIO1xuLVx0XHR0cmFjZV9ibG9ja19iaW9fcmVtYXAoYmlvLCBkaXNrX2RldnQobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrKSxcbitcdFx0dHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJpbywgZGlza19kZXZ0KGhlYWQtXHUwMDNlZGlzayksXG4gXHRcdFx0XHQgICAgICBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IpO1xuIFx0XHRzdWJtaXRfYmlvX25vYWNjdChiaW8pO1xuIFx0fSBlbHNlIGlmIChudm1lX2F2YWlsYWJsZV9wYXRoKGhlYWQpKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDIwY2I4ZWQ3ZDk4N2EuLjdmMzU2M2MwZjU1MzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTg3LDYgKzE4NywxMyBAQCBzdHJ1Y3QgZ2VuZGlzayB7XG4gI2lmZGVmIENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRFxuIFx0c3RydWN0IGxpc3RfaGVhZCBzbGF2ZV9iZGV2cztcbiAjZW5kaWZcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IGhsaXN0X2hlYWQgbWlycm9yX2hlYWQ7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0c3RydWN0IGhsaXN0X25vZGUgbWlycm9yX25vZGU7XG4rXHRcdFx0c3RydWN0IGdlbmRpc2sgKmhlYWQ7XG4rXHRcdH07XG4rXHR9O1xuIFx0c3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKnJhbmRvbTtcbiBcdHN0cnVjdCBkaXNrX2V2ZW50cyAqZXY7XG4gXG5AQCAtOTc3LDYgKzk4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJkZXZfbnJfem9uZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiB9XG4gXG4gaW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpO1xuK3ZvaWQgZGlza19hZGRfbWlycm9yKHN0cnVjdCBnZW5kaXNrICpoZWFkLCBzdHJ1Y3QgZ2VuZGlzayAqbWlycm9yKTtcbiBcbiB2b2lkIHB1dF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiBzdHJ1Y3QgZ2VuZGlzayAqX19ibGtfYWxsb2NfZGlzayhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIGludCBub2RlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MDg6MDIuNTQ4MzE1NTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MzE4MTM3Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBCbG9jayBMYXllciBhbmQgTlZNZSBNdWx0aXBhdGggUGFydGl0aW9uIENsb25pbmcvTWlycm9yaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byByaWdvcm91c2x5IGFzc2VzcyBwb3RlbnRpYWwgcmlza3MsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIHdoaWNoIGlzIGEga2V5IGNvbmNlcm4gaW4ga2VybmVsIGRldmVsb3BtZW50LiBHaXZlbiBteSBleHBlcnRpc2UsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGlzIHdpdGggYSBrZWVuIGV5ZSBmb3Igc3VidGxlIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlLCBlbmFibGluZyBwYXJ0aXRpb24gY2xvbmluZyBhbmQgbWlycm9yaW5nLCBwYXJ0aWN1bGFybHkgZm9yIE5WTWUgbXVsdGlwYXRoIHNldHVwcy4gSSBzZWUgYWRkaXRpb25zIGZvciBmdW5jdGlvbnMgbGlrZSBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCwgYGRpc2tfYWRkX21pcnJvcmAsIGFuZCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIE5WTWUtcmVsYXRlZCBmdW5jdGlvbnMgKGBudm1lX2Rpc2tfdG9fcGFydGAsIGV0Yy4pLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBtZXRpY3Vsb3VzbHkgY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJsb2NrIGRldmljZSBzdHJ1Y3R1cmVzIOKAkyBgc3RydWN0IGdlbmRpc2tgLCBgc3RydWN0IGJsb2NrX2RldmljZWAsIGFuZCBgc3RydWN0IGJpb2AuIFRoZSBwYXRjaCBhZGRzIGBtaXJyb3JfaGVhZGAgYW5kIGBtaXJyb3Jfbm9kZWAgdG8gYHN0cnVjdCBnZW5kaXNrYCwgYW5kIG1vZGlmaWVzIHRoaW5ncyBsaWtlIGBkaXNrc3RhdHNfc2hvd2AgdG8gcG90ZW50aWFsbHkgaGlkZSBwYXJ0aXRpb25zLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGZvY3VzIG9uIHRoZXNlIHN0cnVjdHVyZSBjaGFuZ2VzLlxuXG5JJ20gY2hlY2tpbmcgaWYgYW55IG5ldyBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgaGF2ZSB1bmluaXRpYWxpemVkIGZpZWxkcy4gSSdtIGFsc28gZW5zdXJpbmcgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50byBjb250cm9sIGZsb3cuIEl0IHNlZW1zIHVubGlrZWx5IGF0IGZpcnN0IGdsYW5jZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUuIGBkaXNrc3RhdHNfc2hvd2AgaXMgbW9kaWZpZWQsIGJ1dCB0aGF0IGFwcGVhcnMgdG8gYmUganVzdCBza2lwcGluZyBzb21lIGVudHJpZXMsIG5vdCBhY3R1YWxseSBleHBvc2luZyBuZXcgZGF0YS4gU28sIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIFNpbmNlIHRoZXJlIGFyZW4ndCBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIHRoaXMgaXMgbG9va2luZyBzYWZlIHNvIGZhci5cblxuUG90ZW50aWFsIGJ1ZyBzb3VyY2VzIGFyZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSAoZXNwZWNpYWxseSBpZiBgZGlzay1cdTAwM2VoZWFkYCBpcyBmcmVlZCBwcmVtYXR1cmVseSksIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBsb2NraW5nIGlzc3Vlcy4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYW5kIEknbSBnbGFkIHRvIHNlZSB0aGF0IEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBjYXRjaCBhbGwgb2YgdGhlc2UuIFRoZXkncmUgbXkgc2FmZXR5IG5ldCBoZXJlLCBhbmQgdGhhdCdzIGEgZ29vZCBzdGFydC5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGF0IGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgIGZ1bmN0aW9uIGluIGRldGFpbC4gSSBzZWUgdGhhdCBpdCBjbG9uZXMgcGFydGl0aW9ucy4gVGhlIGltcG9ydGFudCBwYXJ0IGZvciBtZSBpcyB3aGF0IGlzIHBhc3NlZCB0byB0aGUgYGFkZF9wYXJ0aXRpb25gIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgd2hldGhlciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgdXNlZC5cblxuSSBjYW4gY29uZmlybSB0aGF0IGl0IGNvcGllcyB0aGUgc3RhcnQgc2VjdG9yLCBudW1iZXIgb2Ygc2VjdG9ycyBhbmQgbWV0YSBpbmZvIGZyb20gdGhlIG9sZCBwYXJ0aXRpb24uIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBwYXNzZWQgdG8gYGFkZF9wYXJ0aXRpb25gLCB0aGF04oCZcyBnb29kLlxuXG5OZXh0LCBJJ20gY2hlY2tpbmcgYGRpc2tfYWRkX21pcnJvcmAuIEkgc2VlIHRoYXQgYG1pcnJvcl9oZWFkYCBhbmQgYG1pcnJvcl9ub2RlYCBhcmUgcGFydCBvZiBhIHVuaW9uIHdpdGhpbiBgc3RydWN0IGdlbmRpc2tgLiBJdCdzIGEgY3JpdGljYWwgcG9pbnQuIEl0IG1lYW5zIHRoYXQgYSBgZ2VuZGlza2AgY2FuIGZ1bmN0aW9uIGFzIGVpdGhlciBhIGhlYWQgb3IgYSBtaXJyb3IsIGJ1dCBub3QgYm90aC4gTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgaGFuZGxlZCBzYWZlbHksIGVzcGVjaWFsbHkgYXJvdW5kIGluaXRpYWxpemF0aW9uLiBBZnRlciBhbmFseXppbmcgdGhpcyBtb3JlIGNsb3NlbHksIGl0IHNlZW1zIHRoYXQgaWYgaXQncyBhIGhlYWQsIGBtaXJyb3JfaGVhZGAgaXMgdXNlZCwgYW5kIGlmIGl0J3MgYSBtaXJyb3IsIGBtaXJyb3Jfbm9kZWAgYW5kIGBoZWFkYCBhcmUgdXNlZC4gV2hlbiB0aGUgYGdlbmRpc2tgIGlzIGFsbG9jYXRlZCwgaXQncyB6ZXJvZWQgKHVzaW5nIGBremFsbG9jYCwgdHlwaWNhbGx5KSwgc28gYG1pcnJvcl9oZWFkYCBpcyBlbXB0eSB0byBiZWdpbiB3aXRoLiBUaGVuLCBpZiB0aGUgZGlzayBpcyBhIG1pcnJvciwgYG1pcnJvci1cdTAwM2VoZWFkYCBpcyBzZXQsIGFuZCBgbWlycm9yLVx1MDAzZW1pcnJvcl9ub2RlYCBpcyBsaW5rZWQgdG8gYGhlYWQtXHUwMDNlbWlycm9yX2hlYWRgLiBJdCBsb29rcyBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuXG5cbkZpbmFsIGNoZWNrOiBJcyB0aGVyZSAqYW55KiByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdHMgd2F5IGludG8gdXNlciBzcGFjZSwgb3IgYWZmZWN0aW5nIGNvbnRyb2wgZmxvdz8gQWZ0ZXIgdGhpcyB0aG9yb3VnaCByZXZpZXcsIEknbSBjb25maWRlbnQgdGhlcmUgaXMgbm8gcmlzay5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgbm90IG5lY2Vzc2FyeSBpbiB0aGlzIGNhc2UuIEtBU0FOIGFuZCBMT0NLREVQIG9mZmVyIGFkZXF1YXRlIHByb3RlY3Rpb24gYWdhaW5zdCB0aGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIGRlcmVmZXJlbmNlcywgYW5kIGRlYWRsb2Nrcy4gSSB3aWxsIGZvcm11bGF0ZSB0aGlzIHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgwOSwiT3V0cHV0VG9rZW5zIjoyNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MDg6MTguODY2NDU3MzkxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gc3VwcG9ydCBwYXJ0aXRpb24gY2xvbmluZyBhbmQgbWlycm9yaW5nIGFjcm9zcyBibG9jayBkZXZpY2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWVsZHMgaW4gYHN0cnVjdCBnZW5kaXNrYCAodmlhIGEgdW5pb24gZm9yIGhlYWQvbWlycm9yIHJvbGVzKSBhbmQgYWRkcyBmdW5jdGlvbnMgbGlrZSBgYmRldl9jbG9uZV9wYXJ0aXRpb25zYCBhbmQgYGRpc2tfYWRkX21pcnJvcmAuIFxcblxcblRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHN0cnVjdHVyYWwgbGlua2luZyAoaGxpc3Qgb3BlcmF0aW9ucyksIGxvY2tpbmcgKGBvcGVuX211dGV4YCksIGFuZCBibG9jayBkZXZpY2UvYmlvIHJvdXRpbmcuIFRoZXJlIGFyZSBubyBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGFuZCBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgdGhlcmUgYW55IG1vZGlmaWNhdGlvbnMgdG8gdXNlci1zcGFjZSBBUElzIChsaWtlIGlvY3RscyBvciBuZXRsaW5rKSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gVGhlIHBhcnRpdGlvbiBjbG9uaW5nIHJlbGllcyBvbiByZWFkaW5nIGZpZWxkcyBmcm9tIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFydGl0aW9ucyAoYGJkX3N0YXJ0X3NlY3RgLCBgYmRfbnJfc2VjdG9yc2AsIGBiZF9tZXRhX2luZm9gKS4gXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgaGVhZCBkaXNrIGlzIGZyZWVkIGJlZm9yZSBpdHMgbWlycm9ycyksIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxvY2tpbmcgZGVhZGxvY2tzLiBUaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayBsYXllciBhbmQgTlZNZSBtdWx0aXBhdGggY29kZSB0byBzdXBwb3J0IHBhcnRpdGlvbiBjbG9uaW5nIGFuZCBtaXJyb3JpbmcgYWNyb3NzIGJsb2NrIGRldmljZXMuIEl0IGludHJvZHVjZXMgbmV3IGZpZWxkcyBpbiBgc3RydWN0IGdlbmRpc2tgICh2aWEgYSB1bmlvbiBmb3IgaGVhZC9taXJyb3Igcm9sZXMpIGFuZCBhZGRzIGZ1bmN0aW9ucyBsaWtlIGBiZGV2X2Nsb25lX3BhcnRpdGlvbnNgIGFuZCBgZGlza19hZGRfbWlycm9yYC4gXFxuXFxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RydWN0dXJhbCBsaW5raW5nIChobGlzdCBvcGVyYXRpb25zKSwgbG9ja2luZyAoYG9wZW5fbXV0ZXhgKSwgYW5kIGJsb2NrIGRldmljZS9iaW8gcm91dGluZy4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIEFQSXMgKGxpa2UgaW9jdGxzIG9yIG5ldGxpbmspIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGUgcGFydGl0aW9uIGNsb25pbmcgcmVsaWVzIG9uIHJlYWRpbmcgZmllbGRzIGZyb20gYWxyZWFkeSBpbml0aWFsaXplZCBwYXJ0aXRpb25zIChgYmRfc3RhcnRfc2VjdGAsIGBiZF9ucl9zZWN0b3JzYCwgYGJkX21ldGFfaW5mb2ApLiBcXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSBoZWFkIGRpc2sgaXMgZnJlZWQgYmVmb3JlIGl0cyBtaXJyb3JzKSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbG9ja2luZyBkZWFkbG9ja3MuIFRoZXNlIGNsYXNzZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowdlrqm[1] Phase: Succeeded StartedAt: 2026-08-21 09:08:30 +0000 UTC FinishedAt: 2026-08-21 09:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 09:08:30 +0000 UTC FinishedAt: 2026-08-21 09:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2] Phase: Succeeded StartedAt: 2026-08-21 09:08:30 +0000 UTC FinishedAt: 2026-08-21 12:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 09:08:30 +0000 UTC FinishedAt: 2026-08-21 12:51:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 09:08:30 +0000 UTC FinishedAt: 2026-08-21 09:08:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 09:08:30 +0000 UTC FinishedAt: 2026-08-21 09:08:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdlrqm/series-workflowdlrqm-convert-artifact-401509563/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 09:08:40 +0000 UTC FinishedAt: 2026-08-21 09:25:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 09:08:40 +0000 UTC FinishedAt: 2026-08-21 09:25: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:*1d47b46b-aa65-423c-bcb9-6a68c605f9a1,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-workflowdlrqm/series-workflowdlrqm-convert-artifact-401509563/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": "54773ecb-2670-4b0d-9f53-efc53c8d3c39", "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-workflowdlrqm/series-workflowdlrqm-build-action-3888356089/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 09:08:40 +0000 UTC FinishedAt: 2026-08-21 09:25:00 +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:*1d47b46b-aa65-423c-bcb9-6a68c605f9a1,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-workflowdlrqm/series-workflowdlrqm-convert-artifact-401509563/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": "54773ecb-2670-4b0d-9f53-efc53c8d3c39", "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-workflowdlrqm/series-workflowdlrqm-build-action-3888356089/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 09:25:10 +0000 UTC FinishedAt: 2026-08-21 09:25:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 09:25:10 +0000 UTC FinishedAt: 2026-08-21 09:25:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 09:25:10 +0000 UTC FinishedAt: 2026-08-21 09:25:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 09:25:10 +0000 UTC FinishedAt: 2026-08-21 09:25:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdlrqm/series-workflowdlrqm-convert-artifact-2790921746/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 09:25:20 +0000 UTC FinishedAt: 2026-08-21 09:27:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 09:25:20 +0000 UTC FinishedAt: 2026-08-21 09:27:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*54773ecb-2670-4b0d-9f53-efc53c8d3c39,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-workflowdlrqm/series-workflowdlrqm-build-action-3888356089/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-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 09:27:27 +0000 UTC FinishedAt: 2026-08-21 09:27:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 09:27:27 +0000 UTC FinishedAt: 2026-08-21 09:27:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 09:27:27 +0000 UTC FinishedAt: 2026-08-21 09:43:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 09:27:27 +0000 UTC FinishedAt: 2026-08-21 09:43:51 +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:*1d47b46b-aa65-423c-bcb9-6a68c605f9a1,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-workflowdlrqm/series-workflowdlrqm-convert-artifact-2790921746/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": "38d56119-8d05-4f45-88f9-937db3008120", "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-workflowdlrqm/series-workflowdlrqm-build-action-968004262/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 09:27:27 +0000 UTC FinishedAt: 2026-08-21 09:43:41 +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:*1d47b46b-aa65-423c-bcb9-6a68c605f9a1,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-workflowdlrqm/series-workflowdlrqm-convert-artifact-2790921746/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": "38d56119-8d05-4f45-88f9-937db3008120", "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-workflowdlrqm/series-workflowdlrqm-build-action-968004262/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 09:43:51 +0000 UTC FinishedAt: 2026-08-21 09:43:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 09:43:51 +0000 UTC FinishedAt: 2026-08-21 09:43:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 09:43:51 +0000 UTC FinishedAt: 2026-08-21 09:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 09:43:51 +0000 UTC FinishedAt: 2026-08-21 09:45:39 +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:*38d56119-8d05-4f45-88f9-937db3008120,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-workflowdlrqm/series-workflowdlrqm-build-action-968004262/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-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 09:45:49 +0000 UTC FinishedAt: 2026-08-21 12:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 09:45:49 +0000 UTC FinishedAt: 2026-08-21 12:51:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*54773ecb-2670-4b0d-9f53-efc53c8d3c39,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*38d56119-8d05-4f45-88f9-937db3008120,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-workflowdlrqm/series-workflowdlrqm-build-action-3888356089/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-workflowdlrqm/series-workflowdlrqm-build-action-968004262/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 09:45:49 +0000 UTC FinishedAt: 2026-08-21 09:46:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 09:45:49 +0000 UTC FinishedAt: 2026-08-21 09:45:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdlrqm/series-workflowdlrqm-convert-artifact-1125504871/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 09:45:49 +0000 UTC FinishedAt: 2026-08-21 09:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 09:45:49 +0000 UTC FinishedAt: 2026-08-21 09:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 09:45:50 +0000 UTC FinishedAt: 2026-08-21 09:45:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 09:46:00 +0000 UTC FinishedAt: 2026-08-21 12:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlrqm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_clone_partitions","disk_add_mirror","bdev_disk_changed","nvme_failover_req","nvme_mpath_start_request","nvme_mpath_end_request"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a33221f7ab120e9a6caa62c3ff8a1b09674370e8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"8c09bb57-9ae4-41f5-bfbe-2f2c324725d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 09:46:00 +0000 UTC FinishedAt: 2026-08-21 12:51:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*54773ecb-2670-4b0d-9f53-efc53c8d3c39,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*38d56119-8d05-4f45-88f9-937db3008120,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-workflowdlrqm/series-workflowdlrqm-build-action-3888356089/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-workflowdlrqm/series-workflowdlrqm-build-action-968004262/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-workflowdlrqm/series-workflowdlrqm-convert-artifact-1125504871/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,}