Name: series-workflowqpmdf Phase: Succeeded StartedAt: 2026-07-27 18:43:00 +0000 UTC FinishedAt: 2026-07-27 23:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[0] Phase: Succeeded StartedAt: 2026-07-27 18:43:00 +0000 UTC FinishedAt: 2026-07-27 19:06:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 18:43:00 +0000 UTC FinishedAt: 2026-07-27 19:06:11 +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": "7791570bac6cd0c740fd63568f0f3811bc8ec7ab", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "7791570bac6cd0c740fd63568f0f3811bc8ec7ab", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "d076665b-3e37-45b5-be1b-abc25ebbeeb1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_add_socket", "nbd_genl_connect", "nbd_genl_reconfigure", "__nbd_ioctl", "nbd_set_size", "find_fallback", "nbd_genl_foreach_sock" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2FkZF9zb2NrZXQmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtfX25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfc2V0X3NpemUmIzM0OywKICAgICYjMzQ7ZmluZF9mYWxsYmFjayYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9mb3JlYWNoX3NvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBmaXggc29ja2V0IGhhbmRsaW5nLCBhZGQgYSBtb2R1bGUgcGFyYW1ldGVyIGZvciBoYXJkd2FyZSBxdWV1ZXMsIGFuZCByZWZhY3RvciBuZXRsaW5rIHNvY2tldCBwYXJzaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIE5CRCBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgaW9jdGwgYW5kIG5ldGxpbmssIG1ha2luZyB0aGVtIGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwZGE1Y2Y2MTNjN2U3YTdiMmM4NWFlNzlmYzQzNDY5ZTEwMWZjODUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTk6MDU6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjc0Li4xZDhjZGM1NzEzZWJhMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbkBAIC0xNjYsNiAmIzQzOzE2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuYmRfZGJnX2RpcjtcbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7XG4gc3RhdGljIGludCBtYXhfcGFydCA9IDE2O1xuJiM0MztzdGF0aWMgaW50IG5yX2h3X3F1ZXVlcyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNyAmIzQzOzMzMiw4IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcbiBcdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuJiM0MztzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplLFxuJiM0MztcdFx0XHRib29sIGZyZWV6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdGludCBlcnJvcjtcbkBAIC0zNzEsNyAmIzQzOzM3MywxMyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuIFxuIFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4tXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZWV6ZSlcbiYjNDM7XHRcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLFxuJiM0MztcdFx0XHRcdFx1MDAyNmxpbSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC0xMDYxLDQwICYjNDM7MTA2OSwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxuIFx0aW50IG5ld19pbmRleCA9IC0xO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cdTAwM2Vzb2Nrc1tpbmRleF07XG4gXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdHJldHVybiBuZXdfaW5kZXg7XG4gXG4tXHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpIHtcbi1cdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIG5ld19pbmRleDtcbi1cdH1cbiYjNDM7XHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpXG4mIzQzO1x0XHRnb3RvIG5vX2ZhbGxiYWNrO1xuIFxuIFx0aWYgKGZhbGxiYWNrIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmFsbGJhY2sgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tmYWxsYmFja10tXHUwMDNlZGVhZClcbiBcdFx0cmV0dXJuIGZhbGxiYWNrO1xuIFxuLVx0aWYgKG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzYyAwIHx8XG4tXHQgICAgbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNlPSBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIHx8XG4tXHQgICAgY29uZmlnLVx1MDAzZXNvY2tzW25zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4XS1cdTAwM2VkZWFkKSB7XG4tXHRcdGludCBpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmIChpID09IGluZGV4KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKCFjb25maWctXHUwMDNlc29ja3NbaV0tXHUwMDNlZGVhZCkge1xuLVx0XHRcdFx0bmV3X2luZGV4ID0gaTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbi1cdFx0aWYgKG5ld19pbmRleCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuLVx0XHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaSAhPSBpbmRleCBcdTAwMjZcdTAwMjYgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4mIzQzO1x0XHRcdG5ld19pbmRleCA9IGk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXdfaW5kZXggPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbiYjNDM7XHRpZiAobmV3X2luZGV4IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybiBuZXdfaW5kZXg7XG4mIzQzO1xuJiM0Mztub19mYWxsYmFjazpcbiYjNDM7XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwmIzM0Oyk7XG4gXHRyZXR1cm4gbmV3X2luZGV4O1xuIH1cbiBcbkBAIC0xMjgxLDIzICYjNDM7MTI4MCwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHN0cnVjdCBuYmRfc29jayAqKnNvY2tzO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jaztcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBcmcgd2lsbCBiZSBjYXN0IHRvIGludCwgY2hlY2sgaXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi9cbiBcdGlmIChhcmcgXHUwMDNlIElOVF9NQVgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobmJkLVx1MDAzZXBpZCkge1xuJiM0MztcdFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4mIzQzO1x0XHRcdFwmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCBcdTAwMjZlcnIpO1xuIFx0aWYgKCFzb2NrKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBnZXQgYW55IGVycmFudCByZXF1ZXN0cyB3aGlsZSB3ZSYjMzk7cmVcbi1cdCAqIHJlYWxsb2NhdGluZyB0aGUgLVx1MDAzZXNvY2tzIGFycmF5LlxuLVx0ICovXG4tXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVxuIFx0aWYgKCFuZXRsaW5rIFx1MDAyNlx1MDAyNiAhbmJkLVx1MDAzZXRhc2tfc2V0dXAgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmQtXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XG5AQCAtMTMzNywxMiAmIzQzOzEzMzYsMTAgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbiBcdElOSVRfV09SSyhcdTAwMjZuc29jay1cdTAwM2V3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7XG4gXHRzb2Nrc1tjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zJiM0MzsmIzQzO10gPSBuc29jaztcbiBcdGF0b21pY19pbmMoXHUwMDI2Y29uZmlnLVx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBwdXRfc29ja2V0OlxuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXHRzb2NrZmRfcHV0KHNvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMTU3NCw3ICYjNDM7MTU3MSw3IEBAIHN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0XHRhcmdzLVx1MDAzZWluZGV4ID0gaTtcbiBcdFx0cXVldWVfd29yayhuYmQtXHUwMDNlcmVjdl93b3JrcSwgXHUwMDI2YXJncy1cdTAwM2V3b3JrKTtcbiBcdH1cbi1cdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuJiM0MztcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5AQCAtMTY0MiwxMyAmIzQzOzE2MzksMTMgQEAgc3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuIFx0Y2FzZSBOQkRfU0VUX1NPQ0s6XG4gXHRcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xuIFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIGFyZyk7XG4mIzQzO1x0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBhcmcsIHRydWUpO1xuIFx0Y2FzZSBOQkRfU0VUX1NJWkU6XG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuJiM0MztcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSwgdHJ1ZSk7XG4gXHRjYXNlIE5CRF9TRVRfU0laRV9CTE9DS1M6XG4gXHRcdGlmIChjaGVja19zaGxfb3ZlcmZsb3coYXJnLCBjb25maWctXHUwMDNlYmxrc2l6ZV9iaXRzLCBcdTAwMjZieXRlc2l6ZSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4mIzQzO1x0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpO1xuIFx0Y2FzZSBOQkRfU0VUX1RJTUVPVVQ6XG4gXHRcdG5iZF9zZXRfY21kX3RpbWVvdXQobmJkLCBhcmcpO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0xOTQxLDcgJiM0MzsxOTM4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7XG4gXHQudGltZW91dFx0PSBuYmRfeG1pdF90aW1lb3V0LFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxuJiM0MztzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXG4ge1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XG4gXHRcdC5tYXhfaHdfc2VjdG9yc1x0XHQ9IDY1NTM2LFxuQEAgLTE5NTgsNyAmIzQzOzE5NTYsNyBAQCBzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0bmJkLVx1MDAzZXRhZ19zZXQub3BzID0gXHUwMDI2bmJkX21xX29wcztcbi1cdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IDE7XG4mIzQzO1x0bmJkLVx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7XG4gXHRuYmQtXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XG4gXHRuYmQtXHUwMDNldGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7XG5AQCAtMjEwMywxMCAmIzQzOzIxMDEsNjMgQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0XHRic2l6ZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pO1xuIFxuIFx0aWYgKGJ5dGVzICE9IGNvbmZpZy1cdTAwM2VieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbiYjNDM7XHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUsIHRydWUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuJiM0MztcdFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksXG4mIzQzO1x0XHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqYXR0cjtcbiYjNDM7XHRpbnQgcmVtLCBjb3VudCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkge1xuJiM0MztcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICYjNDM7IDFdO1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuJiM0MztcdFx0XHRcdFx0XHRhdHRyLFxuJiM0MztcdFx0XHRcdFx0XHRuYmRfc29ja19wb2xpY3ksXG4mIzQzO1x0XHRcdFx0XHRcdGluZm8tXHUwMDNlZXh0YWNrKSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Y291bnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGNiKSB7XG4mIzQzO1x0XHRcdHJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7XG5AQCAtMjE1OSw3ICYjNDM7MjIxMCwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuYmRfaW5kZXhfbXV0ZXgpO1xuIFxuIFx0aWYgKCFuYmQpIHtcbi1cdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpO1xuJiM0MztcdFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMiwgcmV0IFx1MDAzZSAwID8gcmV0IDogMSk7XG4gXHRcdGlmIChJU19FUlIobmJkKSkge1xuIFx0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiBQVFJfRVJSKG5iZCk7XG5AQCAtMjIyNiwzNiAmIzQzOzIyODEsOSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHtcbi1cdFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcbi1cdFx0aW50IHJlbSwgZmQ7XG4tXG4tXHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSxcbi1cdFx0XHRcdCAgICByZW0pIHtcbi1cdFx0XHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgmIzQzOzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCYjMzQ7KTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXG4tXHRcdFx0XHRcdFx0XHQgIGF0dHIsXG4tXHRcdFx0XHRcdFx0XHQgIG5iZF9zb2NrX3BvbGljeSxcbi1cdFx0XHRcdFx0XHRcdCAgaW5mby1cdTAwM2VleHRhY2spO1xuLVx0XHRcdGlmIChyZXQgIT0gMCkge1xuLVx0XHRcdFx0cHJfZXJyKFwmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCYjMzQ7KTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbi1cdFx0XHRyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcbiBcdFx0bmJkLVx1MDAzZWJhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSxcbkBAIC0yMzQ0LDYgJiM0MzsyMzcyLDIwIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCYjMzQ7cmVjb25uZWN0ZWQgc29ja2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAtRU5PU1BDKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XG5AQCAtMjQ0MCw0MCAmIzQzOzI0ODIsNyBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XG4tXHRcdFx0cmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0aWYgKHJldCA9PSAtRU5PU1BDKVxuLVx0XHRcdFx0XHRyZXQgPSAwO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCYjMzQ7cmVjb25uZWN0ZWQgc29ja2V0XFxuXCYjMzQ7KTtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYiwgbmJkKTtcbiBvdXQ6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19sb2NrKTtcbiBcdG5iZF9jb25maWdfcHV0KG5iZCk7XG5AQCAtMjcyNSw4ICYjNDM7MjczNCwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxuIFx0fVxuIFx0bmJkX2RiZ19pbml0KCk7XG4gXG4mIzQzO1x0aWYgKG5yX2h3X3F1ZXVlcyBcdTAwM2MgMSlcbiYjNDM7XHRcdG5yX2h3X3F1ZXVlcyA9IDE7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYmRzX21heDsgaSYjNDM7JiM0MzspXG4tXHRcdG5iZF9kZXZfYWRkKGksIDEpO1xuJiM0MztcdFx0bmJkX2Rldl9hZGQoaSwgMSwgbnJfaHdfcXVldWVzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNzg3LDMgJiM0MzsyNzk4LDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFwmIzM0O251bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXCYjMzQ7KTtcbiBtb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXCYjMzQ7bnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXCYjMzQ7KTtcbiYjNDM7bW9kdWxlX3BhcmFtKG5yX2h3X3F1ZXVlcywgaW50LCAwNDQ0KTtcbiYjNDM7TU9EVUxFX1BBUk1fREVTQyhucl9od19xdWV1ZXMsXG4mIzQzO1wmIzM0O251bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgZm9yIGRldmljZXMgcHJlLWNyZWF0ZWQgYXQgbW9kdWxlIGxvYWQgKGRlZmF1bHQ6IDEpLiBcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9hZGRfc29ja2V0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7X19uYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX3NldF9zaXplJiMzNDssCiAgICAmIzM0O2ZpbmRfZmFsbGJhY2smIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfZm9yZWFjaF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IHNvY2tldCBoYW5kbGluZywgYWRkIGEgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBOQkQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBtYWtpbmcgdGhlbSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGRhNWNmNjEzYzdlN2E3YjJjODVhZTc5ZmM0MzQ2OWUxMDFmYzg1MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDE5OjA1OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggOGYxMDc2MmU5MGVmNzQuLjFkOGNkYzU3MTNlYmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTE2Niw2ICYjNDM7MTY2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm5iZF9kYmdfZGlyOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7CiBzdGF0aWMgaW50IG1heF9wYXJ0ID0gMTY7CiYjNDM7c3RhdGljIGludCBucl9od19xdWV1ZXMgPSAxOwogc3RhdGljIGludCBwYXJ0X3NoaWZ0OwogCiBzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7CkBAIC0zMzEsNyAmIzQzOzMzMiw4IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jaywKIAluc29jay0mZ3Q7c2VudCA9IDA7CiB9CiAKLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpCiYjNDM7c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSwKJiM0MzsJCQlib29sIGZyZWV6ZSkKIHsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAlpbnQgZXJyb3I7CkBAIC0zNzEsNyAmIzQzOzM3MywxMyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKQogCiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7CiAJbGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplOwotCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsICZhbXA7bGltKTsKJiM0MzsKJiM0MzsJaWYgKGZyZWV6ZSkKJiM0MzsJCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsCiYjNDM7CQkJCSZhbXA7bGltKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiYjNDM7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTEwNjEsNDAgJiM0MzsxMDY5LDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpCiAJaW50IG5ld19pbmRleCA9IC0xOwogCXN0cnVjdCBuYmRfc29jayAqbnNvY2sgPSBjb25maWctJmd0O3NvY2tzW2luZGV4XTsKIAlpbnQgZmFsbGJhY2sgPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CWludCBpOwogCiAJaWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsICZhbXA7Y29uZmlnLSZndDtydW50aW1lX2ZsYWdzKSkKIAkJcmV0dXJuIG5ld19pbmRleDsKIAotCWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKSB7Ci0JCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkgICAgJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcbiYjMzQ7KTsKLQkJcmV0dXJuIG5ld19pbmRleDsKLQl9CiYjNDM7CWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKQomIzQzOwkJZ290byBub19mYWxsYmFjazsKIAogCWlmIChmYWxsYmFjayAmZ3Q7PSAwICZhbXA7JmFtcDsgZmFsbGJhY2sgJmx0OyBjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmYW1wOyZhbXA7CiAJICAgICFjb25maWctJmd0O3NvY2tzW2ZhbGxiYWNrXS0mZ3Q7ZGVhZCkKIAkJcmV0dXJuIGZhbGxiYWNrOwogCi0JaWYgKG5zb2NrLSZndDtmYWxsYmFja19pbmRleCAmbHQ7IDAgfHwKLQkgICAgbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4ICZndDs9IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zIHx8Ci0JICAgIGNvbmZpZy0mZ3Q7c29ja3NbbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4XS0mZ3Q7ZGVhZCkgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKGkgPT0gaW5kZXgpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIWNvbmZpZy0mZ3Q7c29ja3NbaV0tJmd0O2RlYWQpIHsKLQkJCQluZXdfaW5kZXggPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKLQkJaWYgKG5ld19pbmRleCAmbHQ7IDApIHsKLQkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkJICAgICYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gbmV3X2luZGV4OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoaSAhPSBpbmRleCAmYW1wOyZhbXA7ICFjb25maWctJmd0O3NvY2tzW2ldLSZndDtkZWFkKSB7CiYjNDM7CQkJbmV3X2luZGV4ID0gaTsKJiM0MzsJCQlicmVhazsKIAkJfQogCX0KLQluZXdfaW5kZXggPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKJiM0MzsJaWYgKG5ld19pbmRleCAmZ3Q7PSAwKQomIzQzOwkJcmV0dXJuIG5ld19pbmRleDsKJiM0MzsKJiM0Mztub19mYWxsYmFjazoKJiM0MzsJZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtJmd0O2Rpc2spLAomIzQzOwkJCSAgICAmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xuJiMzNDspOwogCXJldHVybiBuZXdfaW5kZXg7CiB9CiAKQEAgLTEyODEsMjMgJiM0MzsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsCiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlzdHJ1Y3QgbmJkX3NvY2sgKipzb2NrczsKIAlzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrOwotCXVuc2lnbmVkIGludCBtZW1mbGFnczsKIAlpbnQgZXJyOwogCiAJLyogQXJnIHdpbGwgYmUgY2FzdCB0byBpbnQsIGNoZWNrIGl0IHRvIGF2b2lkIG92ZXJmbG93ICovCiAJaWYgKGFyZyAmZ3Q7IElOVF9NQVgpCiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAobmJkLSZndDtwaWQpIHsKJiM0MzsJCWRldl9lcnIoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKJiM0MzsJCQkmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CX0KJiM0MzsKIAlzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsICZhbXA7ZXJyKTsKIAlpZiAoIXNvY2spCiAJCXJldHVybiBlcnI7CiAJbmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spOwogCi0JLyoKLQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UmIzM5O3JlCi0JICogcmVhbGxvY2F0aW5nIHRoZSAtJmd0O3NvY2tzIGFycmF5LgotCSAqLwotCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKLQogCWlmICghbmV0bGluayAmYW1wOyZhbXA7ICFuYmQtJmd0O3Rhc2tfc2V0dXAgJmFtcDsmYW1wOwogCSAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCAmYW1wO2NvbmZpZy0mZ3Q7cnVudGltZV9mbGFncykpCiAJCW5iZC0mZ3Q7dGFza19zZXR1cCA9IGN1cnJlbnQ7CkBAIC0xMzM3LDEyICYjNDM7MTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLAogCUlOSVRfV09SSygmYW1wO25zb2NrLSZndDt3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7CiAJc29ja3NbY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMmIzQzOyYjNDM7XSA9IG5zb2NrOwogCWF0b21pY19pbmMoJmFtcDtjb25maWctJmd0O2xpdmVfY29ubmVjdGlvbnMpOwotCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCBtZW1mbGFncyk7CiAKIAlyZXR1cm4gMDsKIAogcHV0X3NvY2tldDoKLQlibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgbWVtZmxhZ3MpOwogCXNvY2tmZF9wdXQoc29jayk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE1NzQsNyAmIzQzOzE1NzEsNyBAQCBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKIAkJYXJncy0mZ3Q7aW5kZXggPSBpOwogCQlxdWV1ZV93b3JrKG5iZC0mZ3Q7cmVjdl93b3JrcSwgJmFtcDthcmdzLSZndDt3b3JrKTsKIAl9Ci0JcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy0mZ3Q7Ynl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpOwomIzQzOwlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLSZndDtieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSwgZmFsc2UpOwogfQogCiBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2VfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKQEAgLTE2NDIsMTMgJiM0MzsxNjM5LDEzIEBAIHN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwKIAljYXNlIE5CRF9TRVRfU09DSzoKIAkJcmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgYXJnLCBmYWxzZSk7CiAJY2FzZSBOQkRfU0VUX0JMS1NJWkU6Ci0JCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctJmd0O2J5dGVzaXplLCBhcmcpOwomIzQzOwkJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy0mZ3Q7Ynl0ZXNpemUsIGFyZywgdHJ1ZSk7CiAJY2FzZSBOQkRfU0VUX1NJWkU6Ci0JCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZykpOwomIzQzOwkJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSwgdHJ1ZSk7CiAJY2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOgogCQlpZiAoY2hlY2tfc2hsX292ZXJmbG93KGFyZywgY29uZmlnLSZndDtibGtzaXplX2JpdHMsICZhbXA7Ynl0ZXNpemUpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7CiYjNDM7CQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpOwogCWNhc2UgTkJEX1NFVF9USU1FT1VUOgogCQluYmRfc2V0X2NtZF90aW1lb3V0KG5iZCwgYXJnKTsKIAkJcmV0dXJuIDA7CkBAIC0xOTQxLDcgJiM0MzsxOTM4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7CiAJLnRpbWVvdXQJPSBuYmRfeG1pdF90aW1lb3V0LAogfTsKIAotc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKQomIzQzO3N0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcywKJiM0MzsJCQkJICAgICAgIGludCBucl9od19xdWV1ZXMpCiB7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7CiAJCS5tYXhfaHdfc2VjdG9ycwkJPSA2NTUzNiwKQEAgLTE5NTgsNyAmIzQzOzE5NTYsNyBAQCBzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpCiAJCWdvdG8gb3V0OwogCiAJbmJkLSZndDt0YWdfc2V0Lm9wcyA9ICZhbXA7bmJkX21xX29wczsKLQluYmQtJmd0O3RhZ19zZXQubnJfaHdfcXVldWVzID0gMTsKJiM0MzsJbmJkLSZndDt0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlczsKIAluYmQtJmd0O3RhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7CiAJbmJkLSZndDt0YWdfc2V0Lm51bWFfbm9kZSA9IE5VTUFfTk9fTk9ERTsKIAluYmQtJmd0O3RhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpOwpAQCAtMjEwMywxMCAmIzQzOzIxMDEsNjMgQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKQogCQlic2l6ZSA9IG5sYV9nZXRfdTY0KGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKTsKIAogCWlmIChieXRlcyAhPSBjb25maWctJmd0O2J5dGVzaXplIHx8IGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpCi0JCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUpOwomIzQzOwkJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSwgdHJ1ZSk7CiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFdhbGsgdGhlIE5CRF9BVFRSX1NPQ0tFVFMgbmVzdGVkIGxpc3QgY2FuIGNhbGwgQGNiIGZvciBlYWNoIHNvY2tldCBmZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCWludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpLAomIzQzOwkJc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBubGF0dHIgKmF0dHI7CiYjNDM7CWludCByZW0sIGNvdW50ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHsKJiM0MzsJCXN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCAmIzQzOyAxXTsKJiM0MzsJCWludCByZXQ7CiYjNDM7CiYjNDM7CQlpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkgewomIzQzOwkJCXByX2VycigmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLAomIzQzOwkJCQkJCWF0dHIsCiYjNDM7CQkJCQkJbmJkX3NvY2tfcG9saWN5LAomIzQzOwkJCQkJCWluZm8tJmd0O2V4dGFjaykpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQljb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAoY2IpIHsKJiM0MzsJCQlyZXQgPSBjYihuYmQsIChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKSk7CiYjNDM7CQkJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQkJCXJldHVybiBjb3VudDsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmJkX2RldmljZSAqbmJkOwpAQCAtMjE1OSw3ICYjNDM7MjIxMCwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAltdXRleF91bmxvY2soJmFtcDtuYmRfaW5kZXhfbXV0ZXgpOwogCiAJaWYgKCFuYmQpIHsKLQkJbmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpOwomIzQzOwkJcmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCW5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgJmd0OyAwID8gcmV0IDogMSk7CiAJCWlmIChJU19FUlIobmJkKSkgewogCQkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIGFkZCBuZXcgZGV2aWNlXG4mIzM0Oyk7CiAJCQlyZXR1cm4gUFRSX0VSUihuYmQpOwpAQCAtMjIyNiwzNiAmIzQzOzIyODEsOSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJfQogCX0KIAotCWlmIChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkgewotCQlzdHJ1Y3QgbmxhdHRyICphdHRyOwotCQlpbnQgcmVtLCBmZDsKLQotCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLAotCQkJCSAgICByZW0pIHsKLQkJCXN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCYjNDM7MV07Ci0KLQkJCWlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7Ci0JCQkJcHJfZXJyKCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXG4mIzM0Oyk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLAotCQkJCQkJCSAgYXR0ciwKLQkJCQkJCQkgIG5iZF9zb2NrX3BvbGljeSwKLQkJCQkJCQkgIGluZm8tJmd0O2V4dGFjayk7Ci0JCQlpZiAocmV0ICE9IDApIHsKLQkJCQlwcl9lcnIoJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxuJiMzNDspOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSkKLQkJCQljb250aW51ZTsKLQkJCWZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pOwotCQkJcmV0ID0gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gb3V0OwotCQl9Ci0JfQomIzQzOwlyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwogCiAJaWYgKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHsKIAkJbmJkLSZndDtiYWNrZW5kID0gbmxhX3N0cmR1cChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLApAQCAtMjM0NCw2ICYjNDM7MjM3MiwyMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKQomIzQzO3sKJiM0MzsJaW50IHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpOwomIzQzOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCAmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJldCA9PSAtRU5PU1BDKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQgPSBOVUxMOwpAQCAtMjQ0MCw0MCAmIzQzOzI0ODIsNyBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCX0KIAl9CiAKLQlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHsKLQkJc3RydWN0IG5sYXR0ciAqYXR0cjsKLQkJaW50IHJlbSwgZmQ7Ci0KLQkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwKLQkJCQkgICAgcmVtKSB7Ci0JCQlzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgmIzQzOzFdOwotCi0JCQlpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkgewotCQkJCXByX2VycigmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxuJiMzNDspOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCwKLQkJCQkJCQkgIGF0dHIsCi0JCQkJCQkJICBuYmRfc29ja19wb2xpY3ksCi0JCQkJCQkJICBpbmZvLSZndDtleHRhY2spOwotCQkJaWYgKHJldCAhPSAwKSB7Ci0JCQkJcHJfZXJyKCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJaWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pCi0JCQkJY29udGludWU7Ci0JCQlmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTsKLQkJCXJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpOwotCQkJaWYgKHJldCkgewotCQkJCWlmIChyZXQgPT0gLUVOT1NQQykKLQkJCQkJcmV0ID0gMDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgJiMzNDtyZWNvbm5lY3RlZCBzb2NrZXRcbiYjMzQ7KTsKLQkJfQotCX0KJiM0MzsJcmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiLCBuYmQpOwogb3V0OgogCW11dGV4X3VubG9jaygmYW1wO25iZC0mZ3Q7Y29uZmlnX2xvY2spOwogCW5iZF9jb25maWdfcHV0KG5iZCk7CkBAIC0yNzI1LDggJiM0MzsyNzM0LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpCiAJfQogCW5iZF9kYmdfaW5pdCgpOwogCiYjNDM7CWlmIChucl9od19xdWV1ZXMgJmx0OyAxKQomIzQzOwkJbnJfaHdfcXVldWVzID0gMTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbmJkc19tYXg7IGkmIzQzOyYjNDM7KQotCQluYmRfZGV2X2FkZChpLCAxKTsKJiM0MzsJCW5iZF9kZXZfYWRkKGksIDEsIG5yX2h3X3F1ZXVlcyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3ODcsMyAmIzQzOzI3OTgsNiBAQCBtb2R1bGVfcGFyYW0obmJkc19tYXgsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5iZHNfbWF4LCAmIzM0O251bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpJiMzNDspOwogbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgJiMzNDtudW1iZXIgb2YgcGFydGl0aW9ucyBwZXIgZGV2aWNlIChkZWZhdWx0OiAxNikmIzM0Oyk7CiYjNDM7bW9kdWxlX3BhcmFtKG5yX2h3X3F1ZXVlcywgaW50LCAwNDQ0KTsKJiM0MztNT0RVTEVfUEFSTV9ERVNDKG5yX2h3X3F1ZXVlcywKJiM0MzsmIzM0O251bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgZm9yIGRldmljZXMgcHJlLWNyZWF0ZWQgYXQgbW9kdWxlIGxvYWQgKGRlZmF1bHQ6IDEpLiAmIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay9uYmQuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBhbmQgbm90IGp1c3QgYSBidWcgZml4LiBJdCYjMzk7cyBhZGRpbmcgYSBtb2R1bGUgcGFyYW1ldGVyLCBgbnJfaHdfcXVldWVzYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBwZXJmb3JtYW5jZSBvciByZXNvdXJjZSB0dW5pbmcgaXMgYmVpbmcgaW50cm9kdWNlZCBhdCBtb2R1bGUgbG9hZCB0aW1lLiBUaGUgYG5iZF9zZXRfc2l6ZWAgY2hhbmdlIHdpdGggYSBgZnJlZXplYCBwYXJhbWV0ZXIgcmFpc2VzIG15IGV5ZWJyb3dzIGEgYml0IOKAkyBzb3VuZHMgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGRlZXBlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBsYXllciYjMzk7cyBmcmVlemluZyBtZWNoYW5pc21zIGhhcHBlbmluZywgbGlrZWx5IHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IGR1cmluZyBzaXplIGFkanVzdG1lbnRzLgoKVGhlIHJlZmFjdG9yaW5nIG9mIGBmaW5kX2ZhbGxiYWNrYCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiAqd2h5KiBpdCBuZWVkZWQgdG8gYmUgY2hhbmdlZCwgYW5kIGlmIHRoaXMgcmVsYXRlcyB0byBhbnkgdW5kZXJseWluZyBjaGFuZ2VzIGluIGVycm9yIGhhbmRsaW5nLiBQcmV2ZW50aW5nIHRoZSBhZGRpdGlvbiBvZiBzb2NrZXRzIHRvIGEgKnJ1bm5pbmcqIGRldmljZSBpbiBgbmJkX2FkZF9zb2NrZXRgIGlzIGEgZ29vZCBwcmFjdGljZSB0byBwcmV2ZW50IHVuaW50ZW5kZWQgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoZXJlJiMzOTtzIG5vIHN1aXRhYmxlIGxvY2tpbmcgaW4gcGxhY2UuIFJlbW92aW5nIGBibGtfbXFfZnJlZXplX3F1ZXVlYCBmcm9tIGBuYmRfYWRkX3NvY2tldGAgaXMgY3VyaW91cy4gUGVyaGFwcyB0aGUgZnJlZXppbmcgaXMgaGFuZGxlZCBlbHNld2hlcmUsIG9yIHBlcmhhcHMgaXQmIzM5O3MgZGVlbWVkIHVubmVjZXNzYXJ5IG5vdy4gVGhhdCByZXF1aXJlcyBhbiBleGFtaW5hdGlvbiBvZiB0aGUgYWRkZWQgbG9naWMgdGhhdCB0YWtlcyBpdHMgcGxhY2UuCgpGaW5hbGx5LCB0aGUgcmVmYWN0b3Jpbmcgb2Ygc29ja2V0IHBhcnNpbmcgaW4gbmV0bGluayBvcGVyYXRpb25zLCBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYCwgaW5kaWNhdGVzIGNoYW5nZXMgdG8gdGhlIGNvbnRyb2wgcGxhbmUsIHdoaWNoIG1lYW5zIHRoZXJlIG1heSBiZSBhZGRpdGlvbnMgdG8gaW9jdGwgY29tbWFuZHMgYXMgd2VsbC4gTkJEIGlzIHJlYWNoYWJsZSB2aWEgaW9jdGwgYW5kIG5ldGxpbmssIHdoaWNoIGFyZSBjb21tb24gYWNjZXNzIHBvaW50cy4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gZmluZGluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBmaWxlIGZvciBOQkQuIEkga25vdyBOQkQgaXMgb2Z0ZW4gY29uZmlndXJlZCB3aXRoIGtlcm5lbCBwYXJhbWV0ZXJzLCBhbmQgcG9zc2libHkgdmlhIHN5c2ZzLiBUaGlzIGlzIGdvaW5nIHRvIHJlcXVpcmUgc29tZSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgQmxvY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGJsb2NrIGRyaXZlcnMuIFdoZXJlIGVsc2UgdG8gc3RhcnQgYnV0IHRoZSBzb3VyY2U/IFNwZWNpZmljYWxseSwgdGhlIGBkcml2ZXJzL2Jsb2NrYCBkaXJlY3RvcnkuIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgb3ZlciB0aGVyZSBhbmQgZGl2ZSBpbnRvIHRob3NlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIGxpZXMgZm9yIGJsb2NrIGRldmljZXMuIEkgd2FudCB0byBzZWUgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBkaXNhYmxlZCwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHN1YnRsZXRpZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJiMzOTtzIGJsb2NrIGRldmljZSBiZWhhdmlvci4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IFByaW9yaXRpemF0aW9uIGZvciBOQkQgRHJpdmVyKioKCkFscmlnaHQsIHRoZSBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseSBlbmFibGVzIGBCTEtfREVWX05CRGAuIEdvb2QuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBpZGVudGlmeSBwcm9taXNpbmcgdGFyZ2V0cyBmb3IgZnV6emluZyB3aXRoaW4gdGhlIE5CRCBkcml2ZXIuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRpZmYgaW5jbHVkZXM6IGBuYmRfc2V0X3NpemVgLCBgZmluZF9mYWxsYmFja2AsIGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfc3RhcnRfZGV2aWNlYCBhbmQgYSBgX2lvY3RsYCB2ZXJzaW9uLCBhbmQgb2YgY291cnNlIGFsbCB0aGUgZ2VubCAobmV0bGluaykgZnVuY3Rpb25zLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLCBgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiYCwgYW5kIGBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYmAgYXJlIGFsbCBuZXcsIHdoaWNoIHdhcnJhbnRzIHNvbWUgZXh0cmEgYXR0ZW50aW9uLgoKR2l2ZW4gdGhlIGNoYW5nZXMgYW5kIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIG15IGluc3RpbmN0IGlzIHRvIHByaW9yaXRpemUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZm9yIGZ1enppbmcgZWZmb3J0czogYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgX19uYmRfaW9jdGxgLCBgbmJkX3NldF9zaXplYCwgYW5kIGBmaW5kX2ZhbGxiYWNrYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IGxpa2VseSBlbnRyeSBwb2ludHMgZm9yIHRyaWdnZXJpbmcgaW50ZXJlc3RpbmcgYmVoYXZpb3IsIGFuZCB0aGV5IGFsbCB0b3VjaCB0aGUgY29yZSBvcGVyYXRpb25zIG9mIHRoZSBOQkQgZHJpdmVyLgoKSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGNsb3NlciBsb29rIGF0IGBuYmRfYWRkX3NvY2tldGAgYW5kIGBuYmRfZ2VubF9jb25uZWN0YCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZWlyIGlucHV0cyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhlc2UgYXJlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9hZGRfc29ja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTEyNzM9c3RhdGljIGlubGluZSB2b2lkIG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrKSB7fVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI3NS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTI3NjpzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjc3LVx0XHRcdCAgYm9vbCBuZXRsaW5rKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTYyNz1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjM5LVx0Y2FzZSBOQkRfU0VUX1NPQ0s6XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2NDA6XHRcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNjQxLVx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMTU2PXN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE1Ny17XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNTg6XHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MDgKCQkJCQkJCW91dHB1dDogNjIKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOQkQgQ29uZmlndXJhdGlvbiBhbmQgQVBJKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBOQkQgY2hhbmdlcy4gVGhleSBzZWVtIHRvIGJlIGZ1bmN0aW9uYWwgYW5kIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggYGlvY3RsYCBhbmQgYG5ldGxpbmtgLCB3aGljaCBpcyBnb29kLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGBCTEtfREVWX05CRGAsIGdvdCBpdC4gTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIGFzIEkgc2VlIHRoZW0uIEkmIzM5O20gZm9jdXNpbmcgb24gYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgX19uYmRfaW9jdGxgLCBgbmJkX3NldF9zaXplYCwgYW5kIHRoZSBteXN0ZXJpb3VzIGBmaW5kX2ZhbGxiYWNrYC4KClJpZ2h0LCB0aW1lIHRvIGNoZWNrIGlmIGBmaW5kX2ZhbGxiYWNrYCBpcyBzdGF0aWMuIFllcywgaXQmIzM5O3Mgc3RhdGljLiBGaW5lLiBBbmQgYG5iZF9zZXRfc2l6ZWAgaXMgc3RhdGljLiBgbmJkX2FkZF9zb2NrZXRgIGlzIHN0YXRpYy4gQW5kIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYWxzbyBzdGF0aWMuIEZpbmFsbHksIGBfX25iZF9pb2N0bGAgaXMgc3RhdGljIGFzIHdlbGwuCgpIbW0sIGJ1dCB3YWl0LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB0ZWxsaW5nIG1lIHNvbWV0aGluZzogJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuJiMzNDsgT2theSwgc28sIGFsbCB0aGVzZSBmdW5jdGlvbnMgSSBjaGVja2VkIGFyZSBzdGF0aWMuLi4gdGhhdCYjMzk7cyBhIGNsdWUuIEkgbmVlZCB0byBub3cgZ28gaHVudGluZyBmb3IgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuYmQuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgSSYjMzk7bSBnb2luZyB0byBmaW5kIHRoZSByZWFsIEFQSSBlbnRyeSBwb2ludHMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkfHN0cnVjdCBbYS16QS1aMC05X10mIzQzOyBcXCopIFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTE3MD1zdGF0aWMgaW50IHBhcnRfc2hpZnQ7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcyOnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTczOnN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNzQ6c3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NTpzdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNzY6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NzpzdGF0aWMgdm9pZCBuYmRfZGVhZF9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc4OnN0YXRpYyB2b2lkIG5iZF9kaXNjb25uZWN0X2FuZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3OS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqbmJkX3RvX2RldihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODU6c3RhdGljIHZvaWQgbmJkX3JlcXVldWVfY21kKHN0cnVjdCBuYmRfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4Ni17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNjA9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGJhY2tlbmRfYXR0ciA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY1OnN0YXRpYyB2b2lkIG5iZF9kZXZfcmVtb3ZlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2Ni17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yODItXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI4MzpzdGF0aWMgdm9pZCBuYmRfZGV2X3JlbW92ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjg0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI4Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjg4OnN0YXRpYyB2b2lkIG5iZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjg5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI5OS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MzAwOnN0YXRpYyBpbnQgbmJkX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnKVxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzA1LVxuZHJpdmVycy9ibG9jay9uYmQuYzozMDY6c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDctXHRcdFx0XHRpbnQgbm90aWZ5KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM0LVxuZHJpdmVycy9ibG9jay9uYmQuYzozMzU6c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM2LVx0XHRcdGJvb2wgZnJlZXplKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzkyLVxuZHJpdmVycy9ibG9jay9uYmQuYzozOTM6c3RhdGljIHZvaWQgbmJkX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM5NC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy00MDUtICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjQwNjpzdGF0aWMgdm9pZCBzb2NrX3NodXRkb3duKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTQwNy17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz00NTk9c3RhdGljIGVudW0gYmxrX2VoX3RpbWVyX3JldHVybiBuYmRfeG1pdF90aW1lb3V0KHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy01NTgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjU1OTpzdGF0aWMgaW50IF9fc29ja194bWl0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBzZW5kLFxuZHJpdmVycy9ibG9jay9uYmQuYy01NjAtXHRcdCAgICAgICBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGludCBtc2dfZmxhZ3MsIGludCAqc2VudClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTYwNi0gKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6NjA3OnN0YXRpYyBpbnQgc29ja194bWl0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleCwgaW50IHNlbmQsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTYwOC1cdFx0ICAgICBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGludCBtc2dfZmxhZ3MsIGludCAqc2VudClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTYyMD1zdGF0aWMgaW5saW5lIGludCB3YXNfaW50ZXJydXB0ZWQoaW50IHJlc3VsdClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTYzMi0gKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6NjMzOnN0YXRpYyB2b2lkIG5iZF9zY2hlZF9wZW5kaW5nX3dvcmsoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjM0LVx0XHRcdFx0ICAgc3RydWN0IG5iZF9zb2NrICpuc29jayxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTY1Mz1zdGF0aWMgYmxrX3N0YXR1c190IG5iZF9zZW5kX2NtZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX2NtZCAqY21kLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtODE1LS8qIGhhbmRsZSBwYXJ0aWFsIHNlbmRpbmcgKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6ODE2OnN0YXRpYyB2b2lkIG5iZF9wZW5kaW5nX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbmJkLmMtODE3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTg1Mi1cbmRyaXZlcnMvYmxvY2svbmJkLmM6ODUzOnN0YXRpYyBpbnQgbmJkX3JlYWRfcmVwbHkoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IHNvY2tldCAqc29jayxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODU0LVx0XHRcdCAgc3RydWN0IG5iZF9yZXBseSAqcmVwbHkpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz04ODA9c3RhdGljIHN0cnVjdCBuYmRfY21kICpuYmRfaGFuZGxlX3JlcGx5KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleCxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTk3Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6OTc4OnN0YXRpYyB2b2lkIHJlY3Zfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTk3OS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xMDM4PXN0YXRpYyBib29sIG5iZF9jbGVhcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEwNTctXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEwNTg6c3RhdGljIHZvaWQgbmJkX2NsZWFyX3F1ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDU5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEwNjUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEwNjY6c3RhdGljIGludCBmaW5kX2ZhbGxiYWNrKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTA2Ny17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDk5LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxMTAwOnN0YXRpYyBpbnQgd2FpdF9mb3JfcmVjb25uZWN0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTExMDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTI0Mj1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG5iZF9zbG9ja19rZXlbM107XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNDMtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyNDQ6c3RhdGljIHZvaWQgbmJkX3JlY2xhc3NpZnlfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNDUte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTI3Mz1zdGF0aWMgaW5saW5lIHZvaWQgbmJkX3JlY2xhc3NpZnlfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spIHt9XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjc1LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxMjc2OnN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNzctXHRcdFx0ICBib29sIG5ldGxpbmspXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzQ2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxMzQ3OnN0YXRpYyBpbnQgbmJkX3JlY29ubmVjdF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNDgte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQwOC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQwOTpzdGF0aWMgdm9pZCBuYmRfYmRldl9yZXNldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDEwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0MTUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0MTY6c3RhdGljIHZvaWQgbmJkX3BhcnNlX2ZsYWdzKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0MTcte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQyMy1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQyNDpzdGF0aWMgdm9pZCBzZW5kX2Rpc2Nvbm5lY3RzKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0MjUte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ0Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ0ODpzdGF0aWMgaW50IG5iZF9kaXNjb25uZWN0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NDkte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ1OC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ1OTpzdGF0aWMgdm9pZCBuYmRfY2xlYXJfc29jayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDYwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NjUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0NjY6c3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ2Ny17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTA0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNTA1OnN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTA2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE1NzYtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE1Nzc6c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE1Nzgte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYwNi1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYwNzpzdGF0aWMgdm9pZCBuYmRfY2xlYXJfc29ja19pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjA4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MTYtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MTc6c3RhdGljIHZvaWQgbmJkX3NldF9jbWRfdGltZW91dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1NjQgdGltZW91dClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYxOC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjI2LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNjI3OnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYyOC1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY3My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY3NDpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NzUtXHRcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzAzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA0OnN0YXRpYyBpbnQgbmJkX2FsbG9jX2FuZF9pbml0X2NvbmZpZyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzA1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MzgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3Mzk6c3RhdGljIGludCBuYmRfb3BlbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzQwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3ODEtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3ODI6c3RhdGljIHZvaWQgbmJkX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3ODMte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc5My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc5NDpzdGF0aWMgdm9pZCBuYmRfZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzk1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODEyLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEzOnN0YXRpYyBpbnQgbmJkX2RiZ190YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODE0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MjM9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfdGFza3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xODI0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODI1OnN0YXRpYyBpbnQgbmJkX2RiZ19mbGFnc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODI2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4NTI9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xODUzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODU0OnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODU1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4NzgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4Nzk6c3RhdGljIHZvaWQgbmJkX2Rldl9kYmdfY2xvc2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg4MC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODgzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODg0OnN0YXRpYyBpbnQgbmJkX2RiZ19pbml0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4ODUte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg5Ni1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTg5NzpzdGF0aWMgdm9pZCBuYmRfZGJnX2Nsb3NlKHZvaWQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4OTgte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkwMy1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTkwNDpzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkwNS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTA4LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTA5OnN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MTAte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkxMi1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTkxMzpzdGF0aWMgaW50IG5iZF9kYmdfaW5pdCh2b2lkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTE0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MTctXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MTg6c3RhdGljIHZvaWQgbmJkX2RiZ19jbG9zZSh2b2lkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTE5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MjMtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MjQ6c3RhdGljIGludCBuYmRfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MjUtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeCwgaW50IG51bWFfbm9kZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIwODY9bmJkX2RldmljZV9wb2xpY3lbTkJEX0RFVklDRV9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwOTAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIwOTE6c3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMDkyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxMTItICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxMTM6c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjExNC1cdFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTU1LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTU2OnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE1Ny17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTYxOnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzMTgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzMTk6c3RhdGljIHZvaWQgbmJkX2Rpc2Nvbm5lY3RfYW5kX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzIwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzMzktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNDA6c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM3NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM3Ni17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzg4LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzg5OnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM5MC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTM2PU1PRFVMRV9BTElBU19HRU5MX0ZBTUlMWShOQkRfR0VOTF9GQU1JTFlfTkFNRSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MzctXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1Mzg6c3RhdGljIGludCBwb3B1bGF0ZV9uYmRfc3RhdHVzKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBza19idWZmICpyZXBseSlcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUzOS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTY2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTY3OnN0YXRpYyBpbnQgc3RhdHVzX2NiKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTY4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NzItXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1NzM6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU3NC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjMyLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjMzOnN0YXRpYyB2b2lkIG5iZF9jb25uZWN0X3JlcGx5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBpbmRleClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjYzNC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjU2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjU3OnN0YXRpYyB2b2lkIG5iZF9tY2FzdF9pbmRleChpbnQgaW5kZXgpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NTgte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4MC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY4MTpzdGF0aWMgdm9pZCBuYmRfZGVhZF9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjgyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2ODk9c3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDMtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NDQ6c3RhdGljIGludCBuYmRfZXhpdF9jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG5iZC5jYCBNb2R1bGUgZm9yIEFQSSBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5iZC5jYCBhbmQgaW1tZWRpYXRlbHkgbm90aWNpbmcgc29tZXRoaW5nOiBhcGFydCBmcm9tIHRoZSBtb2R1bGUgaW5pdCBhbmQgZXhpdCBmdW5jdGlvbnMgKGBuYmRfaW5pdGAgYW5kIGBuYmRfY2xlYW51cGApLCBldmVyeXRoaW5nIGVsc2Ugc2VlbXMgdG8gYmUgc3RhdGljLiBIbW0sIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHdoYXQgdGhlIGd1aWRlbGluZXMgd2VyZSBzdWdnZXN0aW5nLCBpcyBpdD8gV2UmIzM5O3JlIHN1cHBvc2VkIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gQnV0LCBzaW5jZSBldmVyeXRoaW5nICppcyogc3RhdGljIGhlcmUsIGl0IGxvb2tzIGxpa2Ugd2UganVzdCBuZWVkIHRvIGxpc3QgdGhlIHN0YXRpYyBvbmVzIHRoYXQgd2Ugd2FudCB0byBleHBvc2UuCgpMZXQmIzM5O3Mgc2VlLi4uIGJhc2VkIG9uIHRoZSBjb2RlLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBsaXN0aW5nIGFzIGNhbmRpZGF0ZSBBUEkgZW50cnlwb2ludHM6CgoqICAgYG5iZF9hZGRfc29ja2V0YAoqICAgYG5iZF9nZW5sX2Nvbm5lY3RgCiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgCiogICBgX19uYmRfaW9jdGxgCiogICBgbmJkX3NldF9zaXplYAoqICAgYGZpbmRfZmFsbGJhY2tgCiogICBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYAoKQWxyaWdodCwgZmlyc3QgdGhpbmcmIzM5O3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG5iZF9hZGRfc29ja2V0YCBpc24mIzM5O3QgbWFnaWNhbGx5IGJlaW5nIGlubGluZWQuIE5vcGUsIG5vIGBpbmxpbmVgIGtleXdvcmQgdGhlcmUuIEdvb2QsIHRoYXQmIzM5O3Mgb25lIG9mZiB0aGUgbGlzdC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHdoYXQgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgKmRvZXMqLiBgbmJkX2dlbmxfY29ubmVjdGAgaXMgYW4gb2J2aW91cyBvbmUgLSB0aGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldGxpbmsgY29ubmVjdGlvbi4gU2FtZSBkZWFsIHdpdGggYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gQW5kIGBfX25iZF9pb2N0bGAuLi4gdGhhdCYjMzk7cyBvdXIgaW9jdGwgZW50cnkgcG9pbnQsIG1ha2luZyBpdCBhbm90aGVyIGNydWNpYWwgb25lLgoKTm93IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0RFVl9OQkRgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBsb29rIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX05CRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYEJMS19ERVZfTkJEYCBEZWZpbml0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiB0aGUgZnVsbCBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIGBCTEtfREVWX05CRGAuIE5vIGFzc3VtcHRpb25zLCBubyBzaG9ydGN1dHMuIE15IG1lbnRhbCBtb2RlbCBuZWVkcyB0byBiZSByb2NrIHNvbGlkLiBJJiMzOTttIGdvaW5nIHRvIHJldmlzaXQgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiwgdGhlICpjb21wbGV0ZSogZGVmaW5pdGlvbiwgbm90IGp1c3QgYSBzbmlwcGV0LiBJIHdhbnQgdG8gc2NydXRpbml6ZSBldmVyeSBkZXRhaWwsIGV2ZXJ5IG51YW5jZSwgZXZlcnkgcG90ZW50aWFsIGVkZ2UgY2FzZSBhc3NvY2lhdGVkIHdpdGggdGhpcy4gSSBrbm93IHRoZSBiYXNpYyBjb25jZXB0LCBzdXJlLCBuZXR3b3JrIGJsb2NrIGRldmljZSwgZ290IGl0LiBCdXQsIEkmIzM5O20gYWltaW5nIGZvciBhIGRlZXAgdW5kZXJzdGFuZGluZywgd2hpY2ggZGVtYW5kcyBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgZm9ybWFsIHNwZWNpZmljYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaGlkZGVuIGFzc3VtcHRpb25zIG9yIGxpbWl0YXRpb25zIHRoYXQgSSBtYXkgbm90IGhhdmUgY29uc2lkZXJlZCBiZWZvcmUsIHRoYXQgY291bGQgYml0ZSBtZSBsYXRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBhbmQgZW5zdXJlIHRoYXQgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCBhbnkgb2YgbXkgY3VycmVudCBvciBwbGFubmVkIHByb2plY3RzLiBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3MgZ2V0IGludG8gdGhvc2UgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NjpcdGNvbmZpZyBCTEtfREVWX05CRFxuIDE5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDE5ODpcdFx0ZGVwZW5kcyBvbiBORVRcbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcbiAyMDE6XHRcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcbiAyMDI6XHRcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxuIDIwMzpcdFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxuIDIwNDpcdFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xuIDIwNTpcdFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cbiAyMDY6XHRcbiAyMDc6XHRcdCAgTmV0d29yayBibG9jayBkZXZpY2VzIGFsc28gYWxsb3dzIHlvdSB0byBydW4gYSBibG9jay1kZXZpY2UgaW5cbiAyMDg6XHRcdCAgdXNlcmxhbmQgKG1ha2luZyBzZXJ2ZXIgYW5kIGNsaWVudCBwaHlzaWNhbGx5IHRoZSBzYW1lIGNvbXB1dGVyLFxuIDIwOTpcdFx0ICBjb21tdW5pY2F0aW5nIHVzaW5nIHRoZSBsb29wYmFjayBuZXR3b3JrIGRldmljZSkuXG4gMjEwOlx0XG4gMjExOlx0XHQgIFJlYWQgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L25iZC5yc3RcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24sXG4gMjEyOlx0XHQgIGVzcGVjaWFsbHkgYWJvdXQgd2hlcmUgdG8gZmluZCB0aGUgc2VydmVyIGNvZGUsIHdoaWNoIHJ1bnMgaW4gdXNlclxuIDIxMzpcdFx0ICBzcGFjZSBhbmQgZG9lcyBub3QgbmVlZCBzcGVjaWFsIGtlcm5lbCBzdXBwb3J0LlxuIDIxNDpcdFxuIDIxNTpcdFx0ICBOb3RlIHRoYXQgdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtcyBORlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTMKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkJEIERyaXZlciYjMzk7cyBBdHRhY2sgU3VyZmFjZSoqCgpPa2F5LCBzbyB0aGUgc2NvcGUgaGVyZSBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBoaW5nZXMgb24gYE5FVGAuICBMb29rcyBsaWtlIGBCTEtfREVWX05CRGAgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSYjMzk7bGwgbmVlZCB0byBhY2NvdW50IGZvci4gR29vZCwga2VlcHMgdGhpbmdzIHNpbXBsZS4gSnVzdCBkb2luZyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBzdXJlLi4uIHllcCwgYE5FVGAgaXMgc3RhbmRhcmQuIE5vIHN1cnByaXNlcyB0aGVyZS4KCkFscmlnaHQsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuICBNeSBpbml0aWFsIHRhcmdldCBsaXN0IGxvb2tzIGxpa2U6CgoqICAgYG5iZF9hZGRfc29ja2V0YAoqICAgYG5iZF9nZW5sX2Nvbm5lY3RgCiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgCiogICBgX19uYmRfaW9jdGxgCiogICBgbmJkX3NldF9zaXplYAoqICAgYGZpbmRfZmFsbGJhY2tgCiogICBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYAoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB3aGV0aGVyIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgIGlzIHN0YXRpYy4uLiBZZXAsIGl0IGlzLiBBbmQgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmA/IEFsc28gc3RhdGljLiAgT2theSwgdGhhdCYjMzk7cyBnb29kIGluZm9ybWF0aW9uIGZvciBmdXp6aW5nLCBoZWxwcyB3aXRoIG5hcnJvd2luZy4KClNvLCByZWZpbmluZyB0aGF0IGxpc3QgYWdhaW4sIGp1c3QgdG8gbWFrZSBzdXJlOgoKKiAgIGBuYmRfYWRkX3NvY2tldGAKKiAgIGBuYmRfZ2VubF9jb25uZWN0YAoqICAgYG5iZF9nZW5sX3JlY29uZmlndXJlYAoqICAgYF9fbmJkX2lvY3RsYAoqICAgYG5iZF9zZXRfc2l6ZWAKKiAgIGBmaW5kX2ZhbGxiYWNrYAoqICAgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AKClN0aWxsIG5vIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMgdG8gY29uc2lkZXI/IEdvb2QuIERvdWJsZS1jaGVja2luZy4uLiBOb3BlLgoKU28sIHRoZSByZWFzb25pbmcgaGVyZSBpcyBwcmV0dHkgY2xlYXI6IFRoaXMgcGF0Y2ggaXMgcmV3b3JraW5nIHRoZSBOQkQgZHJpdmVyLCBmaXhpbmcgc29ja2V0IGhhbmRsaW5nLCBoYXJkd2FyZSBxdWV1ZXMsIGFuZCB0aGUgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgYXJlIGFsbCBjb3JlIE5CRCBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBpb2N0bCAqYW5kKiBuZXRsaW5rLiBHaXZlbiB0aGF0LCB0aGV5JiMzOTtyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIHRvIHByb2JlIGZvciB2dWxuZXJhYmlsaXRpZXMuIFRoYXQgc291bmRzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfYWRkX3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O19fbmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9zZXRfc2l6ZSYjMzQ7LAogICAgJiMzNDtmaW5kX2ZhbGxiYWNrJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2ZvcmVhY2hfc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBzb2NrZXQgaGFuZGxpbmcsIGFkZCBhIG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgTkJEIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgbWFraW5nIHRoZW0gZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfYWRkX3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O19fbmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9zZXRfc2l6ZSYjMzQ7LAogICAgJiMzNDtmaW5kX2ZhbGxiYWNrJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2ZvcmVhY2hfc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBzb2NrZXQgaGFuZGxpbmcsIGFkZCBhIG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgTkJEIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgbWFraW5nIHRoZW0gZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjA1OjE5LjM3ODY0NDE3MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2ODI1MzEzMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2FkZF9zb2NrZXRcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJfX25iZF9pb2N0bFwiLFxuICAgIFwibmJkX3NldF9zaXplXCIsXG4gICAgXCJmaW5kX2ZhbGxiYWNrXCIsXG4gICAgXCJuYmRfZ2VubF9mb3JlYWNoX3NvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBzb2NrZXQgaGFuZGxpbmcsIGFkZCBhIG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgTkJEIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgbWFraW5nIHRoZW0gZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6MTkuMzc4NjU0MjExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDc3OTU1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZGE1Y2Y2MTNjN2U3YTdiMmM4NWFlNzlmYzQzNDY5ZTEwMWZjODUwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDE5OjA1OjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuaW5kZXggOGYxMDc2MmU5MGVmNzQuLjFkOGNkYzU3MTNlYmEzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7XFxuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcXG4rc3RhdGljIGludCBucl9od19xdWV1ZXMgPSAxO1xcbiBzdGF0aWMgaW50IHBhcnRfc2hpZnQ7XFxuIFxcbiBzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7XFxuQEAgLTMzMSw3ICszMzIsOCBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXFxuIFxcdG5zb2NrLVxcdTAwM2VzZW50ID0gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4rc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSxcXG4rXFx0XFx0XFx0Ym9vbCBmcmVlemUpXFxuIHtcXG4gXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XFxuIFxcdGludCBlcnJvcjtcXG5AQCAtMzcxLDcgKzM3MywxMyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbiBcXG4gXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XFxuIFxcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcXG4tXFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuK1xcbitcXHRpZiAoZnJlZXplKVxcbitcXHRcXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2bGltKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbitcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbkBAIC0xMDYxLDQwICsxMDY5LDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpXFxuIFxcdGludCBuZXdfaW5kZXggPSAtMTtcXG4gXFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cXHUwMDNlc29ja3NbaW5kZXhdO1xcbiBcXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXg7XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsIFxcdTAwMjZjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbiBcXG4tXFx0aWYgKGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwM2M9IDEpIHtcXG4tXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbi1cXHRcXHRcXHRcXHQgICAgXFxcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuLVxcdH1cXG4rXFx0aWYgKGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwM2M9IDEpXFxuK1xcdFxcdGdvdG8gbm9fZmFsbGJhY2s7XFxuIFxcbiBcXHRpZiAoZmFsbGJhY2sgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBmYWxsYmFjayBcXHUwMDNjIGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhY29uZmlnLVxcdTAwM2Vzb2Nrc1tmYWxsYmFja10tXFx1MDAzZWRlYWQpXFxuIFxcdFxcdHJldHVybiBmYWxsYmFjaztcXG4gXFxuLVxcdGlmIChuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggXFx1MDAzYyAwIHx8XFxuLVxcdCAgICBuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggXFx1MDAzZT0gY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMgfHxcXG4tXFx0ICAgIGNvbmZpZy1cXHUwMDNlc29ja3NbbnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4XS1cXHUwMDNlZGVhZCkge1xcbi1cXHRcXHRpbnQgaTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpKyspIHtcXG4tXFx0XFx0XFx0aWYgKGkgPT0gaW5kZXgpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRpZiAoIWNvbmZpZy1cXHUwMDNlc29ja3NbaV0tXFx1MDAzZWRlYWQpIHtcXG4tXFx0XFx0XFx0XFx0bmV3X2luZGV4ID0gaTtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHRcXHRuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7XFxuLVxcdFxcdGlmIChuZXdfaW5kZXggXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVxcdTAwM2VkaXNrKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnM7IGkrKykge1xcbitcXHRcXHRpZiAoaSAhPSBpbmRleCBcXHUwMDI2XFx1MDAyNiAhY29uZmlnLVxcdTAwM2Vzb2Nrc1tpXS1cXHUwMDNlZGVhZCkge1xcbitcXHRcXHRcXHRuZXdfaW5kZXggPSBpO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdG5ld19pbmRleCA9IG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleDtcXG4rXFx0bnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xcbitcXHRpZiAobmV3X2luZGV4IFxcdTAwM2U9IDApXFxuK1xcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuK1xcbitub19mYWxsYmFjazpcXG4rXFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbitcXHRcXHRcXHQgICAgXFxcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcXFxuXFxcIik7XFxuIFxcdHJldHVybiBuZXdfaW5kZXg7XFxuIH1cXG4gXFxuQEAgLTEyODEsMjMgKzEyODAsMjMgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4gXFx0c3RydWN0IG5iZF9zb2NrICoqc29ja3M7XFxuIFxcdHN0cnVjdCBuYmRfc29jayAqbnNvY2s7XFxuLVxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdC8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xcbiBcXHRpZiAoYXJnIFxcdTAwM2UgSU5UX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAobmJkLVxcdTAwM2VwaWQpIHtcXG4rXFx0XFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbitcXHRcXHRcXHRcXFwiQ2Fubm90IGFkZCBzb2NrZXQgdG8gYSBydW5uaW5nIGRldmljZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuIFxcdHNvY2sgPSBuYmRfZ2V0X3NvY2tldChuYmQsIGFyZywgXFx1MDAyNmVycik7XFxuIFxcdGlmICghc29jaylcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UncmVcXG4tXFx0ICogcmVhbGxvY2F0aW5nIHRoZSAtXFx1MDAzZXNvY2tzIGFycmF5Llxcbi1cXHQgKi9cXG4tXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbi1cXG4gXFx0aWYgKCFuZXRsaW5rIFxcdTAwMjZcXHUwMDI2ICFuYmQtXFx1MDAzZXRhc2tfc2V0dXAgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICF0ZXN0X2JpdChOQkRfUlRfQk9VTkQsIFxcdTAwMjZjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxcbiBcXHRcXHRuYmQtXFx1MDAzZXRhc2tfc2V0dXAgPSBjdXJyZW50O1xcbkBAIC0xMzM3LDEyICsxMzM2LDEwIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2bnNvY2stXFx1MDAzZXdvcmssIG5iZF9wZW5kaW5nX2NtZF93b3JrKTtcXG4gXFx0c29ja3NbY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMrK10gPSBuc29jaztcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2Y29uZmlnLVxcdTAwM2VsaXZlX2Nvbm5lY3Rpb25zKTtcXG4tXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gcHV0X3NvY2tldDpcXG4tXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcXG4gXFx0c29ja2ZkX3B1dChzb2NrKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC0xNTc0LDcgKzE1NzEsNyBAQCBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4gXFx0XFx0YXJncy1cXHUwMDNlaW5kZXggPSBpO1xcbiBcXHRcXHRxdWV1ZV93b3JrKG5iZC1cXHUwMDNlcmVjdl93b3JrcSwgXFx1MDAyNmFyZ3MtXFx1MDAzZXdvcmspO1xcbiBcXHR9XFxuLVxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXFx1MDAzZWJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcXG4rXFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIGZhbHNlKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuQEAgLTE2NDIsMTMgKzE2MzksMTMgQEAgc3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxcbiBcXHRjYXNlIE5CRF9TRVRfU09DSzpcXG4gXFx0XFx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgYXJnLCBmYWxzZSk7XFxuIFxcdGNhc2UgTkJEX1NFVF9CTEtTSVpFOlxcbi1cXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVxcdTAwM2VieXRlc2l6ZSwgYXJnKTtcXG4rXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cXHUwMDNlYnl0ZXNpemUsIGFyZywgdHJ1ZSk7XFxuIFxcdGNhc2UgTkJEX1NFVF9TSVpFOlxcbi1cXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYXJnLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcXG4rXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSwgdHJ1ZSk7XFxuIFxcdGNhc2UgTkJEX1NFVF9TSVpFX0JMT0NLUzpcXG4gXFx0XFx0aWYgKGNoZWNrX3NobF9vdmVyZmxvdyhhcmcsIGNvbmZpZy1cXHUwMDNlYmxrc2l6ZV9iaXRzLCBcXHUwMDI2Ynl0ZXNpemUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcXG4rXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpLCB0cnVlKTtcXG4gXFx0Y2FzZSBOQkRfU0VUX1RJTUVPVVQ6XFxuIFxcdFxcdG5iZF9zZXRfY21kX3RpbWVvdXQobmJkLCBhcmcpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtMTk0MSw3ICsxOTM4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7XFxuIFxcdC50aW1lb3V0XFx0PSBuYmRfeG1pdF90aW1lb3V0LFxcbiB9O1xcbiBcXG4tc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxcbitzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgbnJfaHdfcXVldWVzKVxcbiB7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xcbiBcXHRcXHQubWF4X2h3X3NlY3RvcnNcXHRcXHQ9IDY1NTM2LFxcbkBAIC0xOTU4LDcgKzE5NTYsNyBAQCBzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0bmJkLVxcdTAwM2V0YWdfc2V0Lm9wcyA9IFxcdTAwMjZuYmRfbXFfb3BzO1xcbi1cXHRuYmQtXFx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gMTtcXG4rXFx0bmJkLVxcdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcXG4gXFx0bmJkLVxcdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xcbkBAIC0yMTAzLDEwICsyMTAxLDYzIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4gXFx0XFx0YnNpemUgPSBubGFfZ2V0X3U2NChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSk7XFxuIFxcbiBcXHRpZiAoYnl0ZXMgIT0gY29uZmlnLVxcdTAwM2VieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxcbi1cXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcXG4rXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSwgdHJ1ZSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXFxuKyAqL1xcbitzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbitcXHRcXHRpbnQgKCpjYikoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKSxcXG4rXFx0XFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4re1xcbitcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbitcXHRpbnQgcmVtLCBjb3VudCA9IDA7XFxuK1xcbitcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkge1xcbitcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVggKyAxXTtcXG4rXFx0XFx0aW50IHJldDtcXG4rXFxuK1xcdFxcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0YXR0cixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bmJkX3NvY2tfcG9saWN5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VleHRhY2spKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0XFx0aWYgKGNiKSB7XFxuK1xcdFxcdFxcdHJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiBjb3VudDtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuK3tcXG4rXFx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkO1xcbkBAIC0yMTU5LDcgKzIyMTAsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmJkX2luZGV4X211dGV4KTtcXG4gXFxuIFxcdGlmICghbmJkKSB7XFxuLVxcdFxcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyKTtcXG4rXFx0XFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgXFx1MDAzZSAwID8gcmV0IDogMSk7XFxuIFxcdFxcdGlmIChJU19FUlIobmJkKSkge1xcbiBcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBhZGQgbmV3IGRldmljZVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG5iZCk7XFxuQEAgLTIyMjYsMzYgKzIyODEsOSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHtcXG4tXFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcXG4tXFx0XFx0aW50IHJlbSwgZmQ7XFxuLVxcbi1cXHRcXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxcbi1cXHRcXHRcXHRcXHQgICAgcmVtKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcXG4tXFxuLVxcdFxcdFxcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgYXR0cixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBuYmRfc29ja19wb2xpY3ksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4tXFx0XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xcbi1cXHRcXHRcXHRyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcXG4tXFx0XFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbitcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkge1xcbiBcXHRcXHRuYmQtXFx1MDAzZWJhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0sXFxuQEAgLTIzNDQsNiArMjM3MiwyMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxcbit7XFxuK1xcdGludCByZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcXG4rXFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXFxcInJlY29ubmVjdGVkIHNvY2tldFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocmV0ID09IC1FTk9TUEMpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XFxuQEAgLTI0NDAsNDAgKzI0ODIsNyBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XFxuLVxcdFxcdHN0cnVjdCBubGF0dHIgKmF0dHI7XFxuLVxcdFxcdGludCByZW0sIGZkO1xcbi1cXG4tXFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSxcXG4tXFx0XFx0XFx0XFx0ICAgIHJlbSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgrMV07XFxuLVxcbi1cXHRcXHRcXHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcInNvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGF0dHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbmJkX3NvY2tfcG9saWN5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLVxcdFxcdFxcdGlmIChyZXQgIT0gMCkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcXG4tXFx0XFx0XFx0cmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XFxuLVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PU1BDKVxcbi1cXHRcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFxcXCJyZWNvbm5lY3RlZCBzb2NrZXRcXFxcblxcXCIpO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xcbiBvdXQ6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmJkLVxcdTAwM2Vjb25maWdfbG9jayk7XFxuIFxcdG5iZF9jb25maWdfcHV0KG5iZCk7XFxuQEAgLTI3MjUsOCArMjczNCwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxcbiBcXHR9XFxuIFxcdG5iZF9kYmdfaW5pdCgpO1xcbiBcXG4rXFx0aWYgKG5yX2h3X3F1ZXVlcyBcXHUwMDNjIDEpXFxuK1xcdFxcdG5yX2h3X3F1ZXVlcyA9IDE7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuYmRzX21heDsgaSsrKVxcbi1cXHRcXHRuYmRfZGV2X2FkZChpLCAxKTtcXG4rXFx0XFx0bmJkX2Rldl9hZGQoaSwgMSwgbnJfaHdfcXVldWVzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI3ODcsMyArMjc5OCw2IEBAIG1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgXFxcIm51bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXFxcIik7XFxuIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXFxcIm51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVxcXCIpO1xcbittb2R1bGVfcGFyYW0obnJfaHdfcXVldWVzLCBpbnQsIDA0NDQpO1xcbitNT0RVTEVfUEFSTV9ERVNDKG5yX2h3X3F1ZXVlcyxcXG4rXFxcIm51bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgZm9yIGRldmljZXMgcHJlLWNyZWF0ZWQgYXQgbW9kdWxlIGxvYWQgKGRlZmF1bHQ6IDEpLiBcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6MTkuOTI3MTk1MzcxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzYyNzY3NTA3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfYWRkX3NvY2tldFwiLFxuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgICBcIl9fbmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfc2V0X3NpemVcIixcbiAgICBcImZpbmRfZmFsbGJhY2tcIixcbiAgICBcIm5iZF9nZW5sX2ZvcmVhY2hfc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IHNvY2tldCBoYW5kbGluZywgYWRkIGEgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBOQkQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBtYWtpbmcgdGhlbSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZGE1Y2Y2MTNjN2U3YTdiMmM4NWFlNzlmYzQzNDY5ZTEwMWZjODUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTk6MDU6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuaW5kZXggOGYxMDc2MmU5MGVmNzQuLjFkOGNkYzU3MTNlYmEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xuKysrIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2O1xuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcbitzdGF0aWMgaW50IG5yX2h3X3F1ZXVlcyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNyArMzMyLDggQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuIFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4rc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSxcbitcdFx0XHRib29sIGZyZWV6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdGludCBlcnJvcjtcbkBAIC0zNzEsNyArMzczLDEzIEBAIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4gXG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbi1cdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1xuK1x0aWYgKGZyZWV6ZSlcbitcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsXG4rXHRcdFx0XHRcdTAwMjZsaW0pO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtMTA2MSw0MCArMTA2OSwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxuIFx0aW50IG5ld19pbmRleCA9IC0xO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cdTAwM2Vzb2Nrc1tpbmRleF07XG4gXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbitcdGludCBpO1xuIFxuIFx0aWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsIFx1MDAyNmNvbmZpZy1cdTAwM2VydW50aW1lX2ZsYWdzKSlcbiBcdFx0cmV0dXJuIG5ld19pbmRleDtcbiBcbi1cdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSkge1xuLVx0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbi1cdFx0XHRcdCAgICBcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwiKTtcbi1cdFx0cmV0dXJuIG5ld19pbmRleDtcbi1cdH1cbitcdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSlcbitcdFx0Z290byBub19mYWxsYmFjaztcbiBcbiBcdGlmIChmYWxsYmFjayBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGZhbGxiYWNrIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFjb25maWctXHUwMDNlc29ja3NbZmFsbGJhY2tdLVx1MDAzZWRlYWQpXG4gXHRcdHJldHVybiBmYWxsYmFjaztcbiBcbi1cdGlmIChuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCBcdTAwM2MgMCB8fFxuLVx0ICAgIG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzZT0gY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyB8fFxuLVx0ICAgIGNvbmZpZy1cdTAwM2Vzb2Nrc1tuc29jay1cdTAwM2VmYWxsYmFja19pbmRleF0tXHUwMDNlZGVhZCkge1xuLVx0XHRpbnQgaTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XG4tXHRcdFx0aWYgKGkgPT0gaW5kZXgpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAoIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4tXHRcdFx0XHRuZXdfaW5kZXggPSBpO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuLVx0XHRpZiAobmV3X2luZGV4IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHRcdCAgICBcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwiKTtcbi1cdFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XG4rXHRcdGlmIChpICE9IGluZGV4IFx1MDAyNlx1MDAyNiAhY29uZmlnLVx1MDAzZXNvY2tzW2ldLVx1MDAzZWRlYWQpIHtcbitcdFx0XHRuZXdfaW5kZXggPSBpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXdfaW5kZXggPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbitcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuK1x0aWYgKG5ld19pbmRleCBcdTAwM2U9IDApXG4rXHRcdHJldHVybiBuZXdfaW5kZXg7XG4rXG4rbm9fZmFsbGJhY2s6XG4rXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbitcdFx0XHQgICAgXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cIik7XG4gXHRyZXR1cm4gbmV3X2luZGV4O1xuIH1cbiBcbkBAIC0xMjgxLDIzICsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuIFx0c3RydWN0IG5iZF9zb2NrICoqc29ja3M7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrO1xuLVx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xuIFx0aWYgKGFyZyBcdTAwM2UgSU5UX01BWClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAobmJkLVx1MDAzZXBpZCkge1xuK1x0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbitcdFx0XHRcIkNhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXG5cIik7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4gXHRzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsIFx1MDAyNmVycik7XG4gXHRpZiAoIXNvY2spXG4gXHRcdHJldHVybiBlcnI7XG4gXHRuYmRfcmVjbGFzc2lmeV9zb2NrZXQoc29jayk7XG4gXG4tXHQvKlxuLVx0ICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UncmVcbi1cdCAqIHJlYWxsb2NhdGluZyB0aGUgLVx1MDAzZXNvY2tzIGFycmF5LlxuLVx0ICovXG4tXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVxuIFx0aWYgKCFuZXRsaW5rIFx1MDAyNlx1MDAyNiAhbmJkLVx1MDAzZXRhc2tfc2V0dXAgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmQtXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XG5AQCAtMTMzNywxMiArMTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0SU5JVF9XT1JLKFx1MDAyNm5zb2NrLVx1MDAzZXdvcmssIG5iZF9wZW5kaW5nX2NtZF93b3JrKTtcbiBcdHNvY2tzW2NvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMrK10gPSBuc29jaztcbiBcdGF0b21pY19pbmMoXHUwMDI2Y29uZmlnLVx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBwdXRfc29ja2V0OlxuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXHRzb2NrZmRfcHV0KHNvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMTU3NCw3ICsxNTcxLDcgQEAgc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRcdGFyZ3MtXHUwMDNlaW5kZXggPSBpO1xuIFx0XHRxdWV1ZV93b3JrKG5iZC1cdTAwM2VyZWN2X3dvcmtxLCBcdTAwMjZhcmdzLVx1MDAzZXdvcmspO1xuIFx0fVxuLVx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cdTAwM2VieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4rXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZV9pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuQEAgLTE2NDIsMTMgKzE2MzksMTMgQEAgc3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuIFx0Y2FzZSBOQkRfU0VUX1NPQ0s6XG4gXHRcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xuIFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIGFyZyk7XG4rXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIGFyZywgdHJ1ZSk7XG4gXHRjYXNlIE5CRF9TRVRfU0laRTpcbi1cdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4rXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpO1xuIFx0Y2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOlxuIFx0XHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KGFyZywgY29uZmlnLVx1MDAzZWJsa3NpemVfYml0cywgXHUwMDI2Ynl0ZXNpemUpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuK1x0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpO1xuIFx0Y2FzZSBOQkRfU0VUX1RJTUVPVVQ6XG4gXHRcdG5iZF9zZXRfY21kX3RpbWVvdXQobmJkLCBhcmcpO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0xOTQxLDcgKzE5MzgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcbiBcdC50aW1lb3V0XHQ9IG5iZF94bWl0X3RpbWVvdXQsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXG4rc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuK1x0XHRcdFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXG4ge1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XG4gXHRcdC5tYXhfaHdfc2VjdG9yc1x0XHQ9IDY1NTM2LFxuQEAgLTE5NTgsNyArMTk1Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRuYmQtXHUwMDNldGFnX3NldC5vcHMgPSBcdTAwMjZuYmRfbXFfb3BzO1xuLVx0bmJkLVx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gMTtcbitcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDMsMTAgKzIxMDEsNjMgQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0XHRic2l6ZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pO1xuIFxuIFx0aWYgKGJ5dGVzICE9IGNvbmZpZy1cdTAwM2VieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbitcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSwgdHJ1ZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4rICpcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmZHMgd2Fsa2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuKyAqL1xuK3N0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpLFxuK1x0XHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuK3tcbitcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4rXHRpbnQgcmVtLCBjb3VudCA9IDA7XG4rXG4rXHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHtcbitcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICsgMV07XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4rXHRcdFx0cHJfZXJyKFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbitcdFx0XHRcdFx0XHRhdHRyLFxuK1x0XHRcdFx0XHRcdG5iZF9zb2NrX3BvbGljeSxcbitcdFx0XHRcdFx0XHRpbmZvLVx1MDAzZWV4dGFjaykpIHtcbitcdFx0XHRwcl9lcnIoXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Y291bnQrKztcbitcdFx0aWYgKGNiKSB7XG4rXHRcdFx0cmV0ID0gY2IobmJkLCAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSkpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0XHRyZXR1cm4gY291bnQ7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdH1cbitcdH1cbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4rc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxuK3tcbitcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbit9XG4rXG4gc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZDtcbkBAIC0yMTU5LDcgKzIyMTAsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmJkX2luZGV4X211dGV4KTtcbiBcbiBcdGlmICghbmJkKSB7XG4tXHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyKTtcbitcdFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgXHUwMDNlIDAgPyByZXQgOiAxKTtcbiBcdFx0aWYgKElTX0VSUihuYmQpKSB7XG4gXHRcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIGFkZCBuZXcgZGV2aWNlXFxuXCIpO1xuIFx0XHRcdHJldHVybiBQVFJfRVJSKG5iZCk7XG5AQCAtMjIyNiwzNiArMjI4MSw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwiKTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbi1cdFx0XHRyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH1cbitcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcbiBcdFx0bmJkLVx1MDAzZWJhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSxcbkBAIC0yMzQ0LDYgKzIzNzIsMjAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG4re1xuK1x0aW50IHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuK1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0ZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCBcInJlY29ubmVjdGVkIHNvY2tldFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAocmV0ID09IC1FTk9TUEMpXG4rXHRcdHJldHVybiAxO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQgPSBOVUxMO1xuQEAgLTI0NDAsNDAgKzI0ODIsNyBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdGlmIChyZXQgPT0gLUVOT1NQQylcbi1cdFx0XHRcdFx0cmV0ID0gMDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwicmVjb25uZWN0ZWQgc29ja2V0XFxuXCIpO1xuLVx0XHR9XG4tXHR9XG4rXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRuYmRfY29uZmlnX3B1dChuYmQpO1xuQEAgLTI3MjUsOCArMjczNCwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxuIFx0fVxuIFx0bmJkX2RiZ19pbml0KCk7XG4gXG4rXHRpZiAobnJfaHdfcXVldWVzIFx1MDAzYyAxKVxuK1x0XHRucl9od19xdWV1ZXMgPSAxO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmJkc19tYXg7IGkrKylcbi1cdFx0bmJkX2Rldl9hZGQoaSwgMSk7XG4rXHRcdG5iZF9kZXZfYWRkKGksIDEsIG5yX2h3X3F1ZXVlcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjc4NywzICsyNzk4LDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFwibnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNilcIik7XG4gbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwibnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXCIpO1xuK21vZHVsZV9wYXJhbShucl9od19xdWV1ZXMsIGludCwgMDQ0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyhucl9od19xdWV1ZXMsXG4rXCJudW1iZXIgb2YgaGFyZHdhcmUgcXVldWVzIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKS4gXCIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6MTkuOTI3MTk3MTUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3Nzg2MDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5CRCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay9uYmQuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGFuZCBub3QganVzdCBhIGJ1ZyBmaXguIEl0J3MgYWRkaW5nIGEgbW9kdWxlIHBhcmFtZXRlciwgYG5yX2h3X3F1ZXVlc2AsIHdoaWNoIHN1Z2dlc3RzIHNvbWUgcGVyZm9ybWFuY2Ugb3IgcmVzb3VyY2UgdHVuaW5nIGlzIGJlaW5nIGludHJvZHVjZWQgYXQgbW9kdWxlIGxvYWQgdGltZS4gVGhlIGBuYmRfc2V0X3NpemVgIGNoYW5nZSB3aXRoIGEgYGZyZWV6ZWAgcGFyYW1ldGVyIHJhaXNlcyBteSBleWVicm93cyBhIGJpdCDigJMgc291bmRzIGxpa2UgdGhlcmUncyBzb21lIGRlZXBlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBsYXllcidzIGZyZWV6aW5nIG1lY2hhbmlzbXMgaGFwcGVuaW5nLCBsaWtlbHkgdG8gZW5zdXJlIGRhdGEgY29uc2lzdGVuY3kgZHVyaW5nIHNpemUgYWRqdXN0bWVudHMuXG5cblRoZSByZWZhY3RvcmluZyBvZiBgZmluZF9mYWxsYmFja2AgaXMgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiAqd2h5KiBpdCBuZWVkZWQgdG8gYmUgY2hhbmdlZCwgYW5kIGlmIHRoaXMgcmVsYXRlcyB0byBhbnkgdW5kZXJseWluZyBjaGFuZ2VzIGluIGVycm9yIGhhbmRsaW5nLiBQcmV2ZW50aW5nIHRoZSBhZGRpdGlvbiBvZiBzb2NrZXRzIHRvIGEgKnJ1bm5pbmcqIGRldmljZSBpbiBgbmJkX2FkZF9zb2NrZXRgIGlzIGEgZ29vZCBwcmFjdGljZSB0byBwcmV2ZW50IHVuaW50ZW5kZWQgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoZXJlJ3Mgbm8gc3VpdGFibGUgbG9ja2luZyBpbiBwbGFjZS4gUmVtb3ZpbmcgYGJsa19tcV9mcmVlemVfcXVldWVgIGZyb20gYG5iZF9hZGRfc29ja2V0YCBpcyBjdXJpb3VzLiBQZXJoYXBzIHRoZSBmcmVlemluZyBpcyBoYW5kbGVkIGVsc2V3aGVyZSwgb3IgcGVyaGFwcyBpdCdzIGRlZW1lZCB1bm5lY2Vzc2FyeSBub3cuIFRoYXQgcmVxdWlyZXMgYW4gZXhhbWluYXRpb24gb2YgdGhlIGFkZGVkIGxvZ2ljIHRoYXQgdGFrZXMgaXRzIHBsYWNlLlxuXG5GaW5hbGx5LCB0aGUgcmVmYWN0b3Jpbmcgb2Ygc29ja2V0IHBhcnNpbmcgaW4gbmV0bGluayBvcGVyYXRpb25zLCBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYCwgaW5kaWNhdGVzIGNoYW5nZXMgdG8gdGhlIGNvbnRyb2wgcGxhbmUsIHdoaWNoIG1lYW5zIHRoZXJlIG1heSBiZSBhZGRpdGlvbnMgdG8gaW9jdGwgY29tbWFuZHMgYXMgd2VsbC4gTkJEIGlzIHJlYWNoYWJsZSB2aWEgaW9jdGwgYW5kIG5ldGxpbmssIHdoaWNoIGFyZSBjb21tb24gYWNjZXNzIHBvaW50cy4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gZmluZGluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBmaWxlIGZvciBOQkQuIEkga25vdyBOQkQgaXMgb2Z0ZW4gY29uZmlndXJlZCB3aXRoIGtlcm5lbCBwYXJhbWV0ZXJzLCBhbmQgcG9zc2libHkgdmlhIHN5c2ZzLiBUaGlzIGlzIGdvaW5nIHRvIHJlcXVpcmUgc29tZSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY3NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjA1OjI0LjkwNTA2MTA5MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTA4OTY3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6MjQuOTcwMTYxODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ2NTc2NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJsb2NrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYmxvY2sgZHJpdmVycy4gV2hlcmUgZWxzZSB0byBzdGFydCBidXQgdGhlIHNvdXJjZT8gU3BlY2lmaWNhbGx5LCB0aGUgYGRyaXZlcnMvYmxvY2tgIGRpcmVjdG9yeS4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIG92ZXIgdGhlcmUgYW5kIGRpdmUgaW50byB0aG9zZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBsaWVzIGZvciBibG9jayBkZXZpY2VzLiBJIHdhbnQgdG8gc2VlIGhvdyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQsIGRlcGVuZGVuY2llcywgYW5kIGFueSBzdWJ0bGV0aWVzIGluIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIGJsb2NrIGRldmljZSBiZWhhdmlvci4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTowNToyOS41MTY3NDEyNzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MTg0MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6MjkuNTgwMzY1NTY3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2NjI5NDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbiBmb3IgTkJEIERyaXZlcioqXG5cbkFscmlnaHQsIHRoZSBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseSBlbmFibGVzIGBCTEtfREVWX05CRGAuIEdvb2QuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBpZGVudGlmeSBwcm9taXNpbmcgdGFyZ2V0cyBmb3IgZnV6emluZyB3aXRoaW4gdGhlIE5CRCBkcml2ZXIuIExldCdzIHNlZS4uLiB0aGUgZGlmZiBpbmNsdWRlczogYG5iZF9zZXRfc2l6ZWAsIGBmaW5kX2ZhbGxiYWNrYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9zdGFydF9kZXZpY2VgIGFuZCBhIGBfaW9jdGxgIHZlcnNpb24sIGFuZCBvZiBjb3Vyc2UgYWxsIHRoZSBnZW5sIChuZXRsaW5rKSBmdW5jdGlvbnMuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYCwgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmAsIGFuZCBgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2JgIGFyZSBhbGwgbmV3LCB3aGljaCB3YXJyYW50cyBzb21lIGV4dHJhIGF0dGVudGlvbi5cblxuR2l2ZW4gdGhlIGNoYW5nZXMgYW5kIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIG15IGluc3RpbmN0IGlzIHRvIHByaW9yaXRpemUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZm9yIGZ1enppbmcgZWZmb3J0czogYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgX19uYmRfaW9jdGxgLCBgbmJkX3NldF9zaXplYCwgYW5kIGBmaW5kX2ZhbGxiYWNrYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IGxpa2VseSBlbnRyeSBwb2ludHMgZm9yIHRyaWdnZXJpbmcgaW50ZXJlc3RpbmcgYmVoYXZpb3IsIGFuZCB0aGV5IGFsbCB0b3VjaCB0aGUgY29yZSBvcGVyYXRpb25zIG9mIHRoZSBOQkQgZHJpdmVyLlxuXG5JJ2xsIHN0YXJ0IHdpdGggYSBjbG9zZXIgbG9vayBhdCBgbmJkX2FkZF9zb2NrZXRgIGFuZCBgbmJkX2dlbmxfY29ubmVjdGAgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGVpciBpbnB1dHMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRoZXNlIGFyZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTowNTozNS4wNDY2NjI3NDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2NTQxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2FkZF9zb2NrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTEyNzM9c3RhdGljIGlubGluZSB2b2lkIG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrKSB7fVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjc1LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTI3NjpzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI3Ny1cXHRcXHRcXHQgIGJvb2wgbmV0bGluaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTYyNz1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzktXFx0Y2FzZSBOQkRfU0VUX1NPQ0s6XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjQwOlxcdFxcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0MS1cXHRjYXNlIE5CRF9TRVRfQkxLU0laRTpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjE1Nj1zdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTU3LXtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNTg6XFx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE1OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjA1OjM1LjEwNjMyMjM1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODc2NTI3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQkQgQ29uZmlndXJhdGlvbiBhbmQgQVBJKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgTkJEIGNoYW5nZXMuIFRoZXkgc2VlbSB0byBiZSBmdW5jdGlvbmFsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGBpb2N0bGAgYW5kIGBuZXRsaW5rYCwgd2hpY2ggaXMgZ29vZC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpcyBgQkxLX0RFVl9OQkRgLCBnb3QgaXQuIE5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIGFzIEkgc2VlIHRoZW0uIEknbSBmb2N1c2luZyBvbiBgbmJkX2FkZF9zb2NrZXRgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBfX25iZF9pb2N0bGAsIGBuYmRfc2V0X3NpemVgLCBhbmQgdGhlIG15c3RlcmlvdXMgYGZpbmRfZmFsbGJhY2tgLlxuXG5SaWdodCwgdGltZSB0byBjaGVjayBpZiBgZmluZF9mYWxsYmFja2AgaXMgc3RhdGljLiBZZXMsIGl0J3Mgc3RhdGljLiBGaW5lLiBBbmQgYG5iZF9zZXRfc2l6ZWAgaXMgc3RhdGljLiBgbmJkX2FkZF9zb2NrZXRgIGlzIHN0YXRpYy4gQW5kIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYWxzbyBzdGF0aWMuIEZpbmFsbHksIGBfX25iZF9pb2N0bGAgaXMgc3RhdGljIGFzIHdlbGwuXG5cbkhtbSwgYnV0IHdhaXQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHRlbGxpbmcgbWUgc29tZXRoaW5nOiBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cIiBPa2F5LCBzbywgYWxsIHRoZXNlIGZ1bmN0aW9ucyBJIGNoZWNrZWQgYXJlIHN0YXRpYy4uLiB0aGF0J3MgYSBjbHVlLiBJIG5lZWQgdG8gbm93IGdvIGh1bnRpbmcgZm9yIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbmJkLmNgLiBJIGhhdmUgYSBmZWVsaW5nIEknbSBnb2luZyB0byBmaW5kIHRoZSByZWFsIEFQSSBlbnRyeSBwb2ludHMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDgsIk91dHB1dFRva2VucyI6NjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6NDAuMTkzOTc3NTE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY1NTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZHxzdHJ1Y3QgW2EtekEtWjAtOV9dKyBcXFxcKikgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xNzA9c3RhdGljIGludCBwYXJ0X3NoaWZ0O1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcxLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcyOnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MzpzdGF0aWMgdm9pZCBuYmRfZGV2X2RiZ19jbG9zZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NDpzdGF0aWMgdm9pZCBuYmRfY29uZmlnX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NTpzdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc2OnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc3OnN0YXRpYyB2b2lkIG5iZF9kZWFkX2xpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc4OnN0YXRpYyB2b2lkIG5iZF9kaXNjb25uZWN0X2FuZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzktXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xODA9c3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICpuYmRfdG9fZGV2KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4NC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4NTpzdGF0aWMgdm9pZCBuYmRfcmVxdWV1ZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYmFja2VuZF9hdHRyID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjU6c3RhdGljIHZvaWQgbmJkX2Rldl9yZW1vdmUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI4Mi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI4MzpzdGF0aWMgdm9pZCBuYmRfZGV2X3JlbW92ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI4NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI4Ny1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI4ODpzdGF0aWMgdm9pZCBuYmRfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yODkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yOTktXFxuZHJpdmVycy9ibG9jay9uYmQuYzozMDA6c3RhdGljIGludCBuYmRfZGlzY29ubmVjdGVkKHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzozMDY6c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzA3LVxcdFxcdFxcdFxcdGludCBub3RpZnkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTMzNC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjMzNTpzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM2LVxcdFxcdFxcdGJvb2wgZnJlZXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zOTItXFxuZHJpdmVycy9ibG9jay9uYmQuYzozOTM6c3RhdGljIHZvaWQgbmJkX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zOTQte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy00MDUtICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzo0MDY6c3RhdGljIHZvaWQgc29ja19zaHV0ZG93bihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNDA3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9NDU5PXN0YXRpYyBlbnVtIGJsa19laF90aW1lcl9yZXR1cm4gbmJkX3htaXRfdGltZW91dChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy01NTgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzo1NTk6c3RhdGljIGludCBfX3NvY2tfeG1pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgc2VuZCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTU2MC1cXHRcXHQgICAgICAgc3RydWN0IGlvdl9pdGVyICppdGVyLCBpbnQgbXNnX2ZsYWdzLCBpbnQgKnNlbnQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTYwNi0gKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjYwNzpzdGF0aWMgaW50IHNvY2tfeG1pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgsIGludCBzZW5kLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjA4LVxcdFxcdCAgICAgc3RydWN0IGlvdl9pdGVyICppdGVyLCBpbnQgbXNnX2ZsYWdzLCBpbnQgKnNlbnQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTYyMD1zdGF0aWMgaW5saW5lIGludCB3YXNfaW50ZXJydXB0ZWQoaW50IHJlc3VsdClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjMyLSAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6NjMzOnN0YXRpYyB2b2lkIG5iZF9zY2hlZF9wZW5kaW5nX3dvcmsoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTYzNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz02NTM9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfc2VuZF9jbWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9jbWQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODE1LS8qIGhhbmRsZSBwYXJ0aWFsIHNlbmRpbmcgKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjgxNjpzdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay9uYmQuYy04MTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy04NTItXFxuZHJpdmVycy9ibG9jay9uYmQuYzo4NTM6c3RhdGljIGludCBuYmRfcmVhZF9yZXBseShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODU0LVxcdFxcdFxcdCAgc3RydWN0IG5iZF9yZXBseSAqcmVwbHkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTg4MD1zdGF0aWMgc3RydWN0IG5iZF9jbWQgKm5iZF9oYW5kbGVfcmVwbHkoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4LFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy05NzctXFxuZHJpdmVycy9ibG9jay9uYmQuYzo5Nzg6c3RhdGljIHZvaWQgcmVjdl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTk3OS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEwMzg9c3RhdGljIGJvb2wgbmJkX2NsZWFyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDU3LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTA1ODpzdGF0aWMgdm9pZCBuYmRfY2xlYXJfcXVlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDU5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTA2NS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEwNjY6c3RhdGljIGludCBmaW5kX2ZhbGxiYWNrKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEwNjcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDk5LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTEwMDpzdGF0aWMgaW50IHdhaXRfZm9yX3JlY29ubmVjdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTEwMS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyNDI9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBuYmRfc2xvY2tfa2V5WzNdO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI0My1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyNDQ6c3RhdGljIHZvaWQgbmJkX3JlY2xhc3NpZnlfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjQ1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTI3Mz1zdGF0aWMgaW5saW5lIHZvaWQgbmJkX3JlY2xhc3NpZnlfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spIHt9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNzUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMjc2OnN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjc3LVxcdFxcdFxcdCAgYm9vbCBuZXRsaW5rKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzQ2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTM0NzpzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM0OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0MDgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNDA5OnN0YXRpYyB2b2lkIG5iZF9iZGV2X3Jlc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDEwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQxNS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0MTY6c3RhdGljIHZvaWQgbmJkX3BhcnNlX2ZsYWdzKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDE3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQyMy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0MjQ6c3RhdGljIHZvaWQgc2VuZF9kaXNjb25uZWN0cyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQyNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NDctXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNDQ4OnN0YXRpYyBpbnQgbmJkX2Rpc2Nvbm5lY3Qoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NDkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDU4LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ1OTpzdGF0aWMgdm9pZCBuYmRfY2xlYXJfc29jayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ2MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NjUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNDY2OnN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDY3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTUwNC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE1MDU6c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTA2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTU3Ni1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE1Nzc6c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTc4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYwNi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MDc6c3RhdGljIHZvaWQgbmJkX2NsZWFyX3NvY2tfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MDgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjE2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYxNzpzdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYxOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MjYtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjb25maWdfbG9jayBoZWxkICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjI3OnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MjgtXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjczLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY3NDpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjc1LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA0OnN0YXRpYyBpbnQgbmJkX2FsbG9jX2FuZF9pbml0X2NvbmZpZyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MzgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzM5OnN0YXRpYyBpbnQgbmJkX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3NDAte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzgxLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc4MjpzdGF0aWMgdm9pZCBuYmRfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3ODMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzkzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc5NDpzdGF0aWMgdm9pZCBuYmRfZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc5NS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTItXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEzOnN0YXRpYyBpbnQgbmJkX2RiZ190YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MjM9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfdGFza3MpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgyNC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4MjU6c3RhdGljIGludCBuYmRfZGJnX2ZsYWdzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODI2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTg1Mj1ERUZJTkVfU0hPV19BVFRSSUJVVEUobmJkX2RiZ19mbGFncyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODUzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTg1NDpzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4NTUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODc4LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTg3OTpzdGF0aWMgdm9pZCBuYmRfZGV2X2RiZ19jbG9zZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg4MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4ODMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODg0OnN0YXRpYyBpbnQgbmJkX2RiZ19pbml0KHZvaWQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODg1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg5Ni1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4OTc6c3RhdGljIHZvaWQgbmJkX2RiZ19jbG9zZSh2b2lkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg5OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MDMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTA0OnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkwNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MDgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTA5OnN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTEwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkxMi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MTM6c3RhdGljIGludCBuYmRfZGJnX2luaXQodm9pZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MTQte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTE3LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTkxODpzdGF0aWMgdm9pZCBuYmRfZGJnX2Nsb3NlKHZvaWQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTE5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkyMy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MjQ6c3RhdGljIGludCBuYmRfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTI1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaGN0eF9pZHgsIGludCBudW1hX25vZGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIwODY9bmJkX2RldmljZV9wb2xpY3lbTkJEX0RFVklDRV9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMDkwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA5MTpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMDkyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjExMi0gKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxMTM6c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxMTQtXFx0XFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNTUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTU2OnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2MTpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzE4LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjMxOTpzdGF0aWMgdm9pZCBuYmRfZGlzY29ubmVjdF9hbmRfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzIwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjMzOS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNDA6c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzQxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM3NC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNzU6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzc2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM4OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzODk6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM5MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MzY9TU9EVUxFX0FMSUFTX0dFTkxfRkFNSUxZKE5CRF9HRU5MX0ZBTUlMWV9OQU1FKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MzctXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTM4OnN0YXRpYyBpbnQgcG9wdWxhdGVfbmJkX3N0YXR1cyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU2Ni1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1Njc6c3RhdGljIGludCBzdGF0dXNfY2IoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTY4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU3Mi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1NzM6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NzQte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjMyLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjYzMzpzdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjM0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY1Ni1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI2NTc6c3RhdGljIHZvaWQgbmJkX21jYXN0X2luZGV4KGludCBpbmRleClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NTgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjgwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY4MTpzdGF0aWMgdm9pZCBuYmRfZGVhZF9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2ODk9c3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc0My1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NDQ6c3RhdGljIGludCBuYmRfZXhpdF9jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTowNTo0MC4yNTU2NDA0NzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg5NzM5NDA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBuYmQuY2AgTW9kdWxlIGZvciBBUEkgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmJkLmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyBzb21ldGhpbmc6IGFwYXJ0IGZyb20gdGhlIG1vZHVsZSBpbml0IGFuZCBleGl0IGZ1bmN0aW9ucyAoYG5iZF9pbml0YCBhbmQgYG5iZF9jbGVhbnVwYCksIGV2ZXJ5dGhpbmcgZWxzZSBzZWVtcyB0byBiZSBzdGF0aWMuIEhtbSwgdGhhdCdzIG5vdCBxdWl0ZSB3aGF0IHRoZSBndWlkZWxpbmVzIHdlcmUgc3VnZ2VzdGluZywgaXMgaXQ/IFdlJ3JlIHN1cHBvc2VkIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gQnV0LCBzaW5jZSBldmVyeXRoaW5nICppcyogc3RhdGljIGhlcmUsIGl0IGxvb2tzIGxpa2Ugd2UganVzdCBuZWVkIHRvIGxpc3QgdGhlIHN0YXRpYyBvbmVzIHRoYXQgd2Ugd2FudCB0byBleHBvc2UuXG5cbkxldCdzIHNlZS4uLiBiYXNlZCBvbiB0aGUgY29kZSwgaGVyZSdzIHdoYXQgSSdtIGxpc3RpbmcgYXMgY2FuZGlkYXRlIEFQSSBlbnRyeXBvaW50czpcblxuKiAgIGBuYmRfYWRkX3NvY2tldGBcbiogICBgbmJkX2dlbmxfY29ubmVjdGBcbiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgXG4qICAgYF9fbmJkX2lvY3RsYFxuKiAgIGBuYmRfc2V0X3NpemVgXG4qICAgYGZpbmRfZmFsbGJhY2tgXG4qICAgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2BcblxuQWxyaWdodCwgZmlyc3QgdGhpbmcncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbmJkX2FkZF9zb2NrZXRgIGlzbid0IG1hZ2ljYWxseSBiZWluZyBpbmxpbmVkLiBOb3BlLCBubyBgaW5saW5lYCBrZXl3b3JkIHRoZXJlLiBHb29kLCB0aGF0J3Mgb25lIG9mZiB0aGUgbGlzdC5cblxuTm93LCBsZXQncyBjb25zaWRlciB3aGF0IGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zICpkb2VzKi4gYG5iZF9nZW5sX2Nvbm5lY3RgIGlzIGFuIG9idmlvdXMgb25lIC0gdGhhdCdzIG91ciBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldGxpbmsgY29ubmVjdGlvbi4gU2FtZSBkZWFsIHdpdGggYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gQW5kIGBfX25iZF9pb2N0bGAuLi4gdGhhdCdzIG91ciBpb2N0bCBlbnRyeSBwb2ludCwgbWFraW5nIGl0IGFub3RoZXIgY3J1Y2lhbCBvbmUuXG5cbk5vdyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTkJEYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBsb29rIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjA1OjQ1LjE1MzAzODIzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5MzgyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6NDUuMjE0OTg3MzE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDg0NzI4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBCTEtfREVWX05CRGAgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIGNyeXN0YWwgY2xlYXIgb24gdGhlIGZ1bGwgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBvZiBgQkxLX0RFVl9OQkRgLiBObyBhc3N1bXB0aW9ucywgbm8gc2hvcnRjdXRzLiBNeSBtZW50YWwgbW9kZWwgbmVlZHMgdG8gYmUgcm9jayBzb2xpZC4gSSdtIGdvaW5nIHRvIHJldmlzaXQgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiwgdGhlICpjb21wbGV0ZSogZGVmaW5pdGlvbiwgbm90IGp1c3QgYSBzbmlwcGV0LiBJIHdhbnQgdG8gc2NydXRpbml6ZSBldmVyeSBkZXRhaWwsIGV2ZXJ5IG51YW5jZSwgZXZlcnkgcG90ZW50aWFsIGVkZ2UgY2FzZSBhc3NvY2lhdGVkIHdpdGggdGhpcy4gSSBrbm93IHRoZSBiYXNpYyBjb25jZXB0LCBzdXJlLCBuZXR3b3JrIGJsb2NrIGRldmljZSwgZ290IGl0LiBCdXQsIEknbSBhaW1pbmcgZm9yIGEgZGVlcCB1bmRlcnN0YW5kaW5nLCB3aGljaCBkZW1hbmRzIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBmb3JtYWwgc3BlY2lmaWNhdGlvbi4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGhpZGRlbiBhc3N1bXB0aW9ucyBvciBsaW1pdGF0aW9ucyB0aGF0IEkgbWF5IG5vdCBoYXZlIGNvbnNpZGVyZWQgYmVmb3JlLCB0aGF0IGNvdWxkIGJpdGUgbWUgbGF0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgYW5kIGVuc3VyZSB0aGF0IEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgYW55IG9mIG15IGN1cnJlbnQgb3IgcGxhbm5lZCBwcm9qZWN0cy4gVGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gbGV0J3MgZ2V0IGludG8gdGhvc2UgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTowNTo0OC43NjM0NjI3MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTY6XFx0Y29uZmlnIEJMS19ERVZfTkJEXFxuIDE5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMTk4OlxcdFxcdGRlcGVuZHMgb24gTkVUXFxuIDE5OTpcXHRcXHRoZWxwXFxuIDIwMDpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3VyIGNvbXB1dGVyIHRvIGJlIGEgY2xpZW50IGZvciBuZXR3b3JrXFxuIDIwMTpcXHRcXHQgIGJsb2NrIGRldmljZXMsIGkuZS4gaXQgd2lsbCBiZSBhYmxlIHRvIHVzZSBibG9jayBkZXZpY2VzIGV4cG9ydGVkIGJ5XFxuIDIwMjpcXHRcXHQgIHNlcnZlcnMgKG1vdW50IGZpbGUgc3lzdGVtcyBvbiB0aGVtIGV0Yy4pLiBDb21tdW5pY2F0aW9uIGJldHdlZW5cXG4gMjAzOlxcdFxcdCAgY2xpZW50IGFuZCBzZXJ2ZXIgd29ya3Mgb3ZlciBUQ1AvSVAgbmV0d29ya2luZywgYnV0IHRvIHRoZSBjbGllbnRcXG4gMjA0OlxcdFxcdCAgcHJvZ3JhbSB0aGlzIGlzIGhpZGRlbjogaXQgbG9va3MgbGlrZSBhIHJlZ3VsYXIgbG9jYWwgZmlsZSBhY2Nlc3MgdG9cXG4gMjA1OlxcdFxcdCAgYSBibG9jayBkZXZpY2Ugc3BlY2lhbCBmaWxlIHN1Y2ggYXMgL2Rldi9uZDAuXFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdCAgTmV0d29yayBibG9jayBkZXZpY2VzIGFsc28gYWxsb3dzIHlvdSB0byBydW4gYSBibG9jay1kZXZpY2UgaW5cXG4gMjA4OlxcdFxcdCAgdXNlcmxhbmQgKG1ha2luZyBzZXJ2ZXIgYW5kIGNsaWVudCBwaHlzaWNhbGx5IHRoZSBzYW1lIGNvbXB1dGVyLFxcbiAyMDk6XFx0XFx0ICBjb21tdW5pY2F0aW5nIHVzaW5nIHRoZSBsb29wYmFjayBuZXR3b3JrIGRldmljZSkuXFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdCAgUmVhZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L25iZC5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLFxcbiAyMTI6XFx0XFx0ICBlc3BlY2lhbGx5IGFib3V0IHdoZXJlIHRvIGZpbmQgdGhlIHNlcnZlciBjb2RlLCB3aGljaCBydW5zIGluIHVzZXJcXG4gMjEzOlxcdFxcdCAgc3BhY2UgYW5kIGRvZXMgbm90IG5lZWQgc3BlY2lhbCBrZXJuZWwgc3VwcG9ydC5cXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0ICBOb3RlIHRoYXQgdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtcyBORlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6NDguNzYzNTc0MzgzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNTI0MzU5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyJ3MgQXR0YWNrIFN1cmZhY2UqKlxuXG5Pa2F5LCBzbyB0aGUgc2NvcGUgaGVyZSBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBoaW5nZXMgb24gYE5FVGAuICBMb29rcyBsaWtlIGBCTEtfREVWX05CRGAgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdsbCBuZWVkIHRvIGFjY291bnQgZm9yLiBHb29kLCBrZWVwcyB0aGluZ3Mgc2ltcGxlLiBKdXN0IGRvaW5nIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGJlIHN1cmUuLi4geWVwLCBgTkVUYCBpcyBzdGFuZGFyZC4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuICBNeSBpbml0aWFsIHRhcmdldCBsaXN0IGxvb2tzIGxpa2U6XG5cbiogICBgbmJkX2FkZF9zb2NrZXRgXG4qICAgYG5iZF9nZW5sX2Nvbm5lY3RgXG4qICAgYG5iZF9nZW5sX3JlY29uZmlndXJlYFxuKiAgIGBfX25iZF9pb2N0bGBcbiogICBgbmJkX3NldF9zaXplYFxuKiAgIGBmaW5kX2ZhbGxiYWNrYFxuKiAgIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgXG5cbk5vdywgbGV0J3MgcXVpY2tseSBjaGVjayB3aGV0aGVyIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgIGlzIHN0YXRpYy4uLiBZZXAsIGl0IGlzLiBBbmQgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmA/IEFsc28gc3RhdGljLiAgT2theSwgdGhhdCdzIGdvb2QgaW5mb3JtYXRpb24gZm9yIGZ1enppbmcsIGhlbHBzIHdpdGggbmFycm93aW5nLlxuXG5TbywgcmVmaW5pbmcgdGhhdCBsaXN0IGFnYWluLCBqdXN0IHRvIG1ha2Ugc3VyZTpcblxuKiAgIGBuYmRfYWRkX3NvY2tldGBcbiogICBgbmJkX2dlbmxfY29ubmVjdGBcbiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgXG4qICAgYF9fbmJkX2lvY3RsYFxuKiAgIGBuYmRfc2V0X3NpemVgXG4qICAgYGZpbmRfZmFsbGJhY2tgXG4qICAgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2BcblxuU3RpbGwgbm8gb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyB0byBjb25zaWRlcj8gR29vZC4gRG91YmxlLWNoZWNraW5nLi4uIE5vcGUuXG5cblNvLCB0aGUgcmVhc29uaW5nIGhlcmUgaXMgcHJldHR5IGNsZWFyOiBUaGlzIHBhdGNoIGlzIHJld29ya2luZyB0aGUgTkJEIGRyaXZlciwgZml4aW5nIHNvY2tldCBoYW5kbGluZywgaGFyZHdhcmUgcXVldWVzLCBhbmQgdGhlIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGFyZSBhbGwgY29yZSBOQkQgZnVuY3Rpb25zIHJlYWNoYWJsZSB2aWEgaW9jdGwgKmFuZCogbmV0bGluay4gR2l2ZW4gdGhhdCwgdGhleSdyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIHRvIHByb2JlIGZvciB2dWxuZXJhYmlsaXRpZXMuIFRoYXQgc291bmRzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1MywiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTowNTo1Ni4xMTYwMTQ4ODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzkyNjY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfYWRkX3NvY2tldFwiLFxuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgICBcIl9fbmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfc2V0X3NpemVcIixcbiAgICBcImZpbmRfZmFsbGJhY2tcIixcbiAgICBcIm5iZF9nZW5sX2ZvcmVhY2hfc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IHNvY2tldCBoYW5kbGluZywgYWRkIGEgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBOQkQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBtYWtpbmcgdGhlbSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2FkZF9zb2NrZXRcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJfX25iZF9pb2N0bFwiLFxuICAgIFwibmJkX3NldF9zaXplXCIsXG4gICAgXCJmaW5kX2ZhbGxiYWNrXCIsXG4gICAgXCJuYmRfZ2VubF9mb3JlYWNoX3NvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBzb2NrZXQgaGFuZGxpbmcsIGFkZCBhIG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgTkJEIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgbWFraW5nIHRoZW0gZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqpmdf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 18:43:00 +0000 UTC FinishedAt: 2026-07-27 19:05:58 +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": "7791570bac6cd0c740fd63568f0f3811bc8ec7ab", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "7791570bac6cd0c740fd63568f0f3811bc8ec7ab", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "d076665b-3e37-45b5-be1b-abc25ebbeeb1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_add_socket", "nbd_genl_connect", "nbd_genl_reconfigure", "__nbd_ioctl", "nbd_set_size", "find_fallback", "nbd_genl_foreach_sock" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2FkZF9zb2NrZXQmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtfX25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfc2V0X3NpemUmIzM0OywKICAgICYjMzQ7ZmluZF9mYWxsYmFjayYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9mb3JlYWNoX3NvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBmaXggc29ja2V0IGhhbmRsaW5nLCBhZGQgYSBtb2R1bGUgcGFyYW1ldGVyIGZvciBoYXJkd2FyZSBxdWV1ZXMsIGFuZCByZWZhY3RvciBuZXRsaW5rIHNvY2tldCBwYXJzaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIE5CRCBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgaW9jdGwgYW5kIG5ldGxpbmssIG1ha2luZyB0aGVtIGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwZGE1Y2Y2MTNjN2U3YTdiMmM4NWFlNzlmYzQzNDY5ZTEwMWZjODUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTk6MDU6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjc0Li4xZDhjZGM1NzEzZWJhMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbkBAIC0xNjYsNiAmIzQzOzE2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuYmRfZGJnX2RpcjtcbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7XG4gc3RhdGljIGludCBtYXhfcGFydCA9IDE2O1xuJiM0MztzdGF0aWMgaW50IG5yX2h3X3F1ZXVlcyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNyAmIzQzOzMzMiw4IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcbiBcdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuJiM0MztzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplLFxuJiM0MztcdFx0XHRib29sIGZyZWV6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdGludCBlcnJvcjtcbkBAIC0zNzEsNyAmIzQzOzM3MywxMyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuIFxuIFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4tXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZWV6ZSlcbiYjNDM7XHRcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLFxuJiM0MztcdFx0XHRcdFx1MDAyNmxpbSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC0xMDYxLDQwICYjNDM7MTA2OSwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxuIFx0aW50IG5ld19pbmRleCA9IC0xO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cdTAwM2Vzb2Nrc1tpbmRleF07XG4gXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdHJldHVybiBuZXdfaW5kZXg7XG4gXG4tXHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpIHtcbi1cdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIG5ld19pbmRleDtcbi1cdH1cbiYjNDM7XHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpXG4mIzQzO1x0XHRnb3RvIG5vX2ZhbGxiYWNrO1xuIFxuIFx0aWYgKGZhbGxiYWNrIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmFsbGJhY2sgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tmYWxsYmFja10tXHUwMDNlZGVhZClcbiBcdFx0cmV0dXJuIGZhbGxiYWNrO1xuIFxuLVx0aWYgKG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzYyAwIHx8XG4tXHQgICAgbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNlPSBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIHx8XG4tXHQgICAgY29uZmlnLVx1MDAzZXNvY2tzW25zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4XS1cdTAwM2VkZWFkKSB7XG4tXHRcdGludCBpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmIChpID09IGluZGV4KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKCFjb25maWctXHUwMDNlc29ja3NbaV0tXHUwMDNlZGVhZCkge1xuLVx0XHRcdFx0bmV3X2luZGV4ID0gaTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbi1cdFx0aWYgKG5ld19pbmRleCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuLVx0XHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaSAhPSBpbmRleCBcdTAwMjZcdTAwMjYgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4mIzQzO1x0XHRcdG5ld19pbmRleCA9IGk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXdfaW5kZXggPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbiYjNDM7XHRpZiAobmV3X2luZGV4IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybiBuZXdfaW5kZXg7XG4mIzQzO1xuJiM0Mztub19mYWxsYmFjazpcbiYjNDM7XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwmIzM0Oyk7XG4gXHRyZXR1cm4gbmV3X2luZGV4O1xuIH1cbiBcbkBAIC0xMjgxLDIzICYjNDM7MTI4MCwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHN0cnVjdCBuYmRfc29jayAqKnNvY2tzO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jaztcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBcmcgd2lsbCBiZSBjYXN0IHRvIGludCwgY2hlY2sgaXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi9cbiBcdGlmIChhcmcgXHUwMDNlIElOVF9NQVgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobmJkLVx1MDAzZXBpZCkge1xuJiM0MztcdFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4mIzQzO1x0XHRcdFwmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCBcdTAwMjZlcnIpO1xuIFx0aWYgKCFzb2NrKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBnZXQgYW55IGVycmFudCByZXF1ZXN0cyB3aGlsZSB3ZSYjMzk7cmVcbi1cdCAqIHJlYWxsb2NhdGluZyB0aGUgLVx1MDAzZXNvY2tzIGFycmF5LlxuLVx0ICovXG4tXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVxuIFx0aWYgKCFuZXRsaW5rIFx1MDAyNlx1MDAyNiAhbmJkLVx1MDAzZXRhc2tfc2V0dXAgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmQtXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XG5AQCAtMTMzNywxMiAmIzQzOzEzMzYsMTAgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbiBcdElOSVRfV09SSyhcdTAwMjZuc29jay1cdTAwM2V3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7XG4gXHRzb2Nrc1tjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zJiM0MzsmIzQzO10gPSBuc29jaztcbiBcdGF0b21pY19pbmMoXHUwMDI2Y29uZmlnLVx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBwdXRfc29ja2V0OlxuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXHRzb2NrZmRfcHV0KHNvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMTU3NCw3ICYjNDM7MTU3MSw3IEBAIHN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0XHRhcmdzLVx1MDAzZWluZGV4ID0gaTtcbiBcdFx0cXVldWVfd29yayhuYmQtXHUwMDNlcmVjdl93b3JrcSwgXHUwMDI2YXJncy1cdTAwM2V3b3JrKTtcbiBcdH1cbi1cdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuJiM0MztcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5AQCAtMTY0MiwxMyAmIzQzOzE2MzksMTMgQEAgc3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuIFx0Y2FzZSBOQkRfU0VUX1NPQ0s6XG4gXHRcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xuIFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIGFyZyk7XG4mIzQzO1x0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBhcmcsIHRydWUpO1xuIFx0Y2FzZSBOQkRfU0VUX1NJWkU6XG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuJiM0MztcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSwgdHJ1ZSk7XG4gXHRjYXNlIE5CRF9TRVRfU0laRV9CTE9DS1M6XG4gXHRcdGlmIChjaGVja19zaGxfb3ZlcmZsb3coYXJnLCBjb25maWctXHUwMDNlYmxrc2l6ZV9iaXRzLCBcdTAwMjZieXRlc2l6ZSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4mIzQzO1x0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpO1xuIFx0Y2FzZSBOQkRfU0VUX1RJTUVPVVQ6XG4gXHRcdG5iZF9zZXRfY21kX3RpbWVvdXQobmJkLCBhcmcpO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0xOTQxLDcgJiM0MzsxOTM4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7XG4gXHQudGltZW91dFx0PSBuYmRfeG1pdF90aW1lb3V0LFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxuJiM0MztzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXG4ge1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XG4gXHRcdC5tYXhfaHdfc2VjdG9yc1x0XHQ9IDY1NTM2LFxuQEAgLTE5NTgsNyAmIzQzOzE5NTYsNyBAQCBzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0bmJkLVx1MDAzZXRhZ19zZXQub3BzID0gXHUwMDI2bmJkX21xX29wcztcbi1cdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IDE7XG4mIzQzO1x0bmJkLVx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7XG4gXHRuYmQtXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XG4gXHRuYmQtXHUwMDNldGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7XG5AQCAtMjEwMywxMCAmIzQzOzIxMDEsNjMgQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0XHRic2l6ZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pO1xuIFxuIFx0aWYgKGJ5dGVzICE9IGNvbmZpZy1cdTAwM2VieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbiYjNDM7XHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUsIHRydWUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuJiM0MztcdFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksXG4mIzQzO1x0XHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqYXR0cjtcbiYjNDM7XHRpbnQgcmVtLCBjb3VudCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkge1xuJiM0MztcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICYjNDM7IDFdO1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuJiM0MztcdFx0XHRcdFx0XHRhdHRyLFxuJiM0MztcdFx0XHRcdFx0XHRuYmRfc29ja19wb2xpY3ksXG4mIzQzO1x0XHRcdFx0XHRcdGluZm8tXHUwMDNlZXh0YWNrKSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Y291bnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGNiKSB7XG4mIzQzO1x0XHRcdHJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7XG5AQCAtMjE1OSw3ICYjNDM7MjIxMCwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuYmRfaW5kZXhfbXV0ZXgpO1xuIFxuIFx0aWYgKCFuYmQpIHtcbi1cdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpO1xuJiM0MztcdFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMiwgcmV0IFx1MDAzZSAwID8gcmV0IDogMSk7XG4gXHRcdGlmIChJU19FUlIobmJkKSkge1xuIFx0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiBQVFJfRVJSKG5iZCk7XG5AQCAtMjIyNiwzNiAmIzQzOzIyODEsOSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHtcbi1cdFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcbi1cdFx0aW50IHJlbSwgZmQ7XG4tXG4tXHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSxcbi1cdFx0XHRcdCAgICByZW0pIHtcbi1cdFx0XHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgmIzQzOzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCYjMzQ7KTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXG4tXHRcdFx0XHRcdFx0XHQgIGF0dHIsXG4tXHRcdFx0XHRcdFx0XHQgIG5iZF9zb2NrX3BvbGljeSxcbi1cdFx0XHRcdFx0XHRcdCAgaW5mby1cdTAwM2VleHRhY2spO1xuLVx0XHRcdGlmIChyZXQgIT0gMCkge1xuLVx0XHRcdFx0cHJfZXJyKFwmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCYjMzQ7KTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbi1cdFx0XHRyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcbiBcdFx0bmJkLVx1MDAzZWJhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSxcbkBAIC0yMzQ0LDYgJiM0MzsyMzcyLDIwIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCYjMzQ7cmVjb25uZWN0ZWQgc29ja2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAtRU5PU1BDKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XG5AQCAtMjQ0MCw0MCAmIzQzOzI0ODIsNyBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XG4tXHRcdFx0cmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0aWYgKHJldCA9PSAtRU5PU1BDKVxuLVx0XHRcdFx0XHRyZXQgPSAwO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCYjMzQ7cmVjb25uZWN0ZWQgc29ja2V0XFxuXCYjMzQ7KTtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYiwgbmJkKTtcbiBvdXQ6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19sb2NrKTtcbiBcdG5iZF9jb25maWdfcHV0KG5iZCk7XG5AQCAtMjcyNSw4ICYjNDM7MjczNCwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxuIFx0fVxuIFx0bmJkX2RiZ19pbml0KCk7XG4gXG4mIzQzO1x0aWYgKG5yX2h3X3F1ZXVlcyBcdTAwM2MgMSlcbiYjNDM7XHRcdG5yX2h3X3F1ZXVlcyA9IDE7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYmRzX21heDsgaSYjNDM7JiM0MzspXG4tXHRcdG5iZF9kZXZfYWRkKGksIDEpO1xuJiM0MztcdFx0bmJkX2Rldl9hZGQoaSwgMSwgbnJfaHdfcXVldWVzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNzg3LDMgJiM0MzsyNzk4LDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFwmIzM0O251bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXCYjMzQ7KTtcbiBtb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXCYjMzQ7bnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXCYjMzQ7KTtcbiYjNDM7bW9kdWxlX3BhcmFtKG5yX2h3X3F1ZXVlcywgaW50LCAwNDQ0KTtcbiYjNDM7TU9EVUxFX1BBUk1fREVTQyhucl9od19xdWV1ZXMsXG4mIzQzO1wmIzM0O251bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgZm9yIGRldmljZXMgcHJlLWNyZWF0ZWQgYXQgbW9kdWxlIGxvYWQgKGRlZmF1bHQ6IDEpLiBcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9hZGRfc29ja2V0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7X19uYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX3NldF9zaXplJiMzNDssCiAgICAmIzM0O2ZpbmRfZmFsbGJhY2smIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfZm9yZWFjaF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IHNvY2tldCBoYW5kbGluZywgYWRkIGEgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBOQkQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBtYWtpbmcgdGhlbSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGRhNWNmNjEzYzdlN2E3YjJjODVhZTc5ZmM0MzQ2OWUxMDFmYzg1MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDE5OjA1OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggOGYxMDc2MmU5MGVmNzQuLjFkOGNkYzU3MTNlYmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTE2Niw2ICYjNDM7MTY2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm5iZF9kYmdfZGlyOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7CiBzdGF0aWMgaW50IG1heF9wYXJ0ID0gMTY7CiYjNDM7c3RhdGljIGludCBucl9od19xdWV1ZXMgPSAxOwogc3RhdGljIGludCBwYXJ0X3NoaWZ0OwogCiBzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7CkBAIC0zMzEsNyAmIzQzOzMzMiw4IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jaywKIAluc29jay0mZ3Q7c2VudCA9IDA7CiB9CiAKLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpCiYjNDM7c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSwKJiM0MzsJCQlib29sIGZyZWV6ZSkKIHsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAlpbnQgZXJyb3I7CkBAIC0zNzEsNyAmIzQzOzM3MywxMyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKQogCiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7CiAJbGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplOwotCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsICZhbXA7bGltKTsKJiM0MzsKJiM0MzsJaWYgKGZyZWV6ZSkKJiM0MzsJCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsCiYjNDM7CQkJCSZhbXA7bGltKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiYjNDM7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTEwNjEsNDAgJiM0MzsxMDY5LDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpCiAJaW50IG5ld19pbmRleCA9IC0xOwogCXN0cnVjdCBuYmRfc29jayAqbnNvY2sgPSBjb25maWctJmd0O3NvY2tzW2luZGV4XTsKIAlpbnQgZmFsbGJhY2sgPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CWludCBpOwogCiAJaWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsICZhbXA7Y29uZmlnLSZndDtydW50aW1lX2ZsYWdzKSkKIAkJcmV0dXJuIG5ld19pbmRleDsKIAotCWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKSB7Ci0JCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkgICAgJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcbiYjMzQ7KTsKLQkJcmV0dXJuIG5ld19pbmRleDsKLQl9CiYjNDM7CWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKQomIzQzOwkJZ290byBub19mYWxsYmFjazsKIAogCWlmIChmYWxsYmFjayAmZ3Q7PSAwICZhbXA7JmFtcDsgZmFsbGJhY2sgJmx0OyBjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmYW1wOyZhbXA7CiAJICAgICFjb25maWctJmd0O3NvY2tzW2ZhbGxiYWNrXS0mZ3Q7ZGVhZCkKIAkJcmV0dXJuIGZhbGxiYWNrOwogCi0JaWYgKG5zb2NrLSZndDtmYWxsYmFja19pbmRleCAmbHQ7IDAgfHwKLQkgICAgbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4ICZndDs9IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zIHx8Ci0JICAgIGNvbmZpZy0mZ3Q7c29ja3NbbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4XS0mZ3Q7ZGVhZCkgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKGkgPT0gaW5kZXgpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIWNvbmZpZy0mZ3Q7c29ja3NbaV0tJmd0O2RlYWQpIHsKLQkJCQluZXdfaW5kZXggPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKLQkJaWYgKG5ld19pbmRleCAmbHQ7IDApIHsKLQkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkJICAgICYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gbmV3X2luZGV4OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoaSAhPSBpbmRleCAmYW1wOyZhbXA7ICFjb25maWctJmd0O3NvY2tzW2ldLSZndDtkZWFkKSB7CiYjNDM7CQkJbmV3X2luZGV4ID0gaTsKJiM0MzsJCQlicmVhazsKIAkJfQogCX0KLQluZXdfaW5kZXggPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKJiM0MzsJaWYgKG5ld19pbmRleCAmZ3Q7PSAwKQomIzQzOwkJcmV0dXJuIG5ld19pbmRleDsKJiM0MzsKJiM0Mztub19mYWxsYmFjazoKJiM0MzsJZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtJmd0O2Rpc2spLAomIzQzOwkJCSAgICAmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xuJiMzNDspOwogCXJldHVybiBuZXdfaW5kZXg7CiB9CiAKQEAgLTEyODEsMjMgJiM0MzsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsCiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlzdHJ1Y3QgbmJkX3NvY2sgKipzb2NrczsKIAlzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrOwotCXVuc2lnbmVkIGludCBtZW1mbGFnczsKIAlpbnQgZXJyOwogCiAJLyogQXJnIHdpbGwgYmUgY2FzdCB0byBpbnQsIGNoZWNrIGl0IHRvIGF2b2lkIG92ZXJmbG93ICovCiAJaWYgKGFyZyAmZ3Q7IElOVF9NQVgpCiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAobmJkLSZndDtwaWQpIHsKJiM0MzsJCWRldl9lcnIoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKJiM0MzsJCQkmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CX0KJiM0MzsKIAlzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsICZhbXA7ZXJyKTsKIAlpZiAoIXNvY2spCiAJCXJldHVybiBlcnI7CiAJbmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spOwogCi0JLyoKLQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UmIzM5O3JlCi0JICogcmVhbGxvY2F0aW5nIHRoZSAtJmd0O3NvY2tzIGFycmF5LgotCSAqLwotCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKLQogCWlmICghbmV0bGluayAmYW1wOyZhbXA7ICFuYmQtJmd0O3Rhc2tfc2V0dXAgJmFtcDsmYW1wOwogCSAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCAmYW1wO2NvbmZpZy0mZ3Q7cnVudGltZV9mbGFncykpCiAJCW5iZC0mZ3Q7dGFza19zZXR1cCA9IGN1cnJlbnQ7CkBAIC0xMzM3LDEyICYjNDM7MTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLAogCUlOSVRfV09SSygmYW1wO25zb2NrLSZndDt3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7CiAJc29ja3NbY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMmIzQzOyYjNDM7XSA9IG5zb2NrOwogCWF0b21pY19pbmMoJmFtcDtjb25maWctJmd0O2xpdmVfY29ubmVjdGlvbnMpOwotCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCBtZW1mbGFncyk7CiAKIAlyZXR1cm4gMDsKIAogcHV0X3NvY2tldDoKLQlibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgbWVtZmxhZ3MpOwogCXNvY2tmZF9wdXQoc29jayk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE1NzQsNyAmIzQzOzE1NzEsNyBAQCBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKIAkJYXJncy0mZ3Q7aW5kZXggPSBpOwogCQlxdWV1ZV93b3JrKG5iZC0mZ3Q7cmVjdl93b3JrcSwgJmFtcDthcmdzLSZndDt3b3JrKTsKIAl9Ci0JcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy0mZ3Q7Ynl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpOwomIzQzOwlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLSZndDtieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSwgZmFsc2UpOwogfQogCiBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2VfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKQEAgLTE2NDIsMTMgJiM0MzsxNjM5LDEzIEBAIHN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwKIAljYXNlIE5CRF9TRVRfU09DSzoKIAkJcmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgYXJnLCBmYWxzZSk7CiAJY2FzZSBOQkRfU0VUX0JMS1NJWkU6Ci0JCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctJmd0O2J5dGVzaXplLCBhcmcpOwomIzQzOwkJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy0mZ3Q7Ynl0ZXNpemUsIGFyZywgdHJ1ZSk7CiAJY2FzZSBOQkRfU0VUX1NJWkU6Ci0JCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZykpOwomIzQzOwkJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSwgdHJ1ZSk7CiAJY2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOgogCQlpZiAoY2hlY2tfc2hsX292ZXJmbG93KGFyZywgY29uZmlnLSZndDtibGtzaXplX2JpdHMsICZhbXA7Ynl0ZXNpemUpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7CiYjNDM7CQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpOwogCWNhc2UgTkJEX1NFVF9USU1FT1VUOgogCQluYmRfc2V0X2NtZF90aW1lb3V0KG5iZCwgYXJnKTsKIAkJcmV0dXJuIDA7CkBAIC0xOTQxLDcgJiM0MzsxOTM4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7CiAJLnRpbWVvdXQJPSBuYmRfeG1pdF90aW1lb3V0LAogfTsKIAotc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKQomIzQzO3N0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcywKJiM0MzsJCQkJICAgICAgIGludCBucl9od19xdWV1ZXMpCiB7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7CiAJCS5tYXhfaHdfc2VjdG9ycwkJPSA2NTUzNiwKQEAgLTE5NTgsNyAmIzQzOzE5NTYsNyBAQCBzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpCiAJCWdvdG8gb3V0OwogCiAJbmJkLSZndDt0YWdfc2V0Lm9wcyA9ICZhbXA7bmJkX21xX29wczsKLQluYmQtJmd0O3RhZ19zZXQubnJfaHdfcXVldWVzID0gMTsKJiM0MzsJbmJkLSZndDt0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlczsKIAluYmQtJmd0O3RhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7CiAJbmJkLSZndDt0YWdfc2V0Lm51bWFfbm9kZSA9IE5VTUFfTk9fTk9ERTsKIAluYmQtJmd0O3RhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpOwpAQCAtMjEwMywxMCAmIzQzOzIxMDEsNjMgQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKQogCQlic2l6ZSA9IG5sYV9nZXRfdTY0KGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKTsKIAogCWlmIChieXRlcyAhPSBjb25maWctJmd0O2J5dGVzaXplIHx8IGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpCi0JCXJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUpOwomIzQzOwkJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSwgdHJ1ZSk7CiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFdhbGsgdGhlIE5CRF9BVFRSX1NPQ0tFVFMgbmVzdGVkIGxpc3QgY2FuIGNhbGwgQGNiIGZvciBlYWNoIHNvY2tldCBmZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCWludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpLAomIzQzOwkJc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBubGF0dHIgKmF0dHI7CiYjNDM7CWludCByZW0sIGNvdW50ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHsKJiM0MzsJCXN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCAmIzQzOyAxXTsKJiM0MzsJCWludCByZXQ7CiYjNDM7CiYjNDM7CQlpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkgewomIzQzOwkJCXByX2VycigmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLAomIzQzOwkJCQkJCWF0dHIsCiYjNDM7CQkJCQkJbmJkX3NvY2tfcG9saWN5LAomIzQzOwkJCQkJCWluZm8tJmd0O2V4dGFjaykpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQljb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAoY2IpIHsKJiM0MzsJCQlyZXQgPSBjYihuYmQsIChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKSk7CiYjNDM7CQkJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQkJCXJldHVybiBjb3VudDsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmJkX2RldmljZSAqbmJkOwpAQCAtMjE1OSw3ICYjNDM7MjIxMCwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAltdXRleF91bmxvY2soJmFtcDtuYmRfaW5kZXhfbXV0ZXgpOwogCiAJaWYgKCFuYmQpIHsKLQkJbmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpOwomIzQzOwkJcmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCW5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgJmd0OyAwID8gcmV0IDogMSk7CiAJCWlmIChJU19FUlIobmJkKSkgewogCQkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIGFkZCBuZXcgZGV2aWNlXG4mIzM0Oyk7CiAJCQlyZXR1cm4gUFRSX0VSUihuYmQpOwpAQCAtMjIyNiwzNiAmIzQzOzIyODEsOSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJfQogCX0KIAotCWlmIChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkgewotCQlzdHJ1Y3QgbmxhdHRyICphdHRyOwotCQlpbnQgcmVtLCBmZDsKLQotCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLAotCQkJCSAgICByZW0pIHsKLQkJCXN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCYjNDM7MV07Ci0KLQkJCWlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7Ci0JCQkJcHJfZXJyKCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXG4mIzM0Oyk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLAotCQkJCQkJCSAgYXR0ciwKLQkJCQkJCQkgIG5iZF9zb2NrX3BvbGljeSwKLQkJCQkJCQkgIGluZm8tJmd0O2V4dGFjayk7Ci0JCQlpZiAocmV0ICE9IDApIHsKLQkJCQlwcl9lcnIoJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxuJiMzNDspOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSkKLQkJCQljb250aW51ZTsKLQkJCWZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pOwotCQkJcmV0ID0gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gb3V0OwotCQl9Ci0JfQomIzQzOwlyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwogCiAJaWYgKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHsKIAkJbmJkLSZndDtiYWNrZW5kID0gbmxhX3N0cmR1cChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLApAQCAtMjM0NCw2ICYjNDM7MjM3MiwyMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKQomIzQzO3sKJiM0MzsJaW50IHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpOwomIzQzOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCAmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJldCA9PSAtRU5PU1BDKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQgPSBOVUxMOwpAQCAtMjQ0MCw0MCAmIzQzOzI0ODIsNyBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCX0KIAl9CiAKLQlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHsKLQkJc3RydWN0IG5sYXR0ciAqYXR0cjsKLQkJaW50IHJlbSwgZmQ7Ci0KLQkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwKLQkJCQkgICAgcmVtKSB7Ci0JCQlzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgmIzQzOzFdOwotCi0JCQlpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkgewotCQkJCXByX2VycigmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxuJiMzNDspOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCwKLQkJCQkJCQkgIGF0dHIsCi0JCQkJCQkJICBuYmRfc29ja19wb2xpY3ksCi0JCQkJCQkJICBpbmZvLSZndDtleHRhY2spOwotCQkJaWYgKHJldCAhPSAwKSB7Ci0JCQkJcHJfZXJyKCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJaWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pCi0JCQkJY29udGludWU7Ci0JCQlmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTsKLQkJCXJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpOwotCQkJaWYgKHJldCkgewotCQkJCWlmIChyZXQgPT0gLUVOT1NQQykKLQkJCQkJcmV0ID0gMDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgJiMzNDtyZWNvbm5lY3RlZCBzb2NrZXRcbiYjMzQ7KTsKLQkJfQotCX0KJiM0MzsJcmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiLCBuYmQpOwogb3V0OgogCW11dGV4X3VubG9jaygmYW1wO25iZC0mZ3Q7Y29uZmlnX2xvY2spOwogCW5iZF9jb25maWdfcHV0KG5iZCk7CkBAIC0yNzI1LDggJiM0MzsyNzM0LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpCiAJfQogCW5iZF9kYmdfaW5pdCgpOwogCiYjNDM7CWlmIChucl9od19xdWV1ZXMgJmx0OyAxKQomIzQzOwkJbnJfaHdfcXVldWVzID0gMTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbmJkc19tYXg7IGkmIzQzOyYjNDM7KQotCQluYmRfZGV2X2FkZChpLCAxKTsKJiM0MzsJCW5iZF9kZXZfYWRkKGksIDEsIG5yX2h3X3F1ZXVlcyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3ODcsMyAmIzQzOzI3OTgsNiBAQCBtb2R1bGVfcGFyYW0obmJkc19tYXgsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5iZHNfbWF4LCAmIzM0O251bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpJiMzNDspOwogbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgJiMzNDtudW1iZXIgb2YgcGFydGl0aW9ucyBwZXIgZGV2aWNlIChkZWZhdWx0OiAxNikmIzM0Oyk7CiYjNDM7bW9kdWxlX3BhcmFtKG5yX2h3X3F1ZXVlcywgaW50LCAwNDQ0KTsKJiM0MztNT0RVTEVfUEFSTV9ERVNDKG5yX2h3X3F1ZXVlcywKJiM0MzsmIzM0O251bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgZm9yIGRldmljZXMgcHJlLWNyZWF0ZWQgYXQgbW9kdWxlIGxvYWQgKGRlZmF1bHQ6IDEpLiAmIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay9uYmQuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBhbmQgbm90IGp1c3QgYSBidWcgZml4LiBJdCYjMzk7cyBhZGRpbmcgYSBtb2R1bGUgcGFyYW1ldGVyLCBgbnJfaHdfcXVldWVzYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBwZXJmb3JtYW5jZSBvciByZXNvdXJjZSB0dW5pbmcgaXMgYmVpbmcgaW50cm9kdWNlZCBhdCBtb2R1bGUgbG9hZCB0aW1lLiBUaGUgYG5iZF9zZXRfc2l6ZWAgY2hhbmdlIHdpdGggYSBgZnJlZXplYCBwYXJhbWV0ZXIgcmFpc2VzIG15IGV5ZWJyb3dzIGEgYml0IOKAkyBzb3VuZHMgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGRlZXBlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBsYXllciYjMzk7cyBmcmVlemluZyBtZWNoYW5pc21zIGhhcHBlbmluZywgbGlrZWx5IHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IGR1cmluZyBzaXplIGFkanVzdG1lbnRzLgoKVGhlIHJlZmFjdG9yaW5nIG9mIGBmaW5kX2ZhbGxiYWNrYCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiAqd2h5KiBpdCBuZWVkZWQgdG8gYmUgY2hhbmdlZCwgYW5kIGlmIHRoaXMgcmVsYXRlcyB0byBhbnkgdW5kZXJseWluZyBjaGFuZ2VzIGluIGVycm9yIGhhbmRsaW5nLiBQcmV2ZW50aW5nIHRoZSBhZGRpdGlvbiBvZiBzb2NrZXRzIHRvIGEgKnJ1bm5pbmcqIGRldmljZSBpbiBgbmJkX2FkZF9zb2NrZXRgIGlzIGEgZ29vZCBwcmFjdGljZSB0byBwcmV2ZW50IHVuaW50ZW5kZWQgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoZXJlJiMzOTtzIG5vIHN1aXRhYmxlIGxvY2tpbmcgaW4gcGxhY2UuIFJlbW92aW5nIGBibGtfbXFfZnJlZXplX3F1ZXVlYCBmcm9tIGBuYmRfYWRkX3NvY2tldGAgaXMgY3VyaW91cy4gUGVyaGFwcyB0aGUgZnJlZXppbmcgaXMgaGFuZGxlZCBlbHNld2hlcmUsIG9yIHBlcmhhcHMgaXQmIzM5O3MgZGVlbWVkIHVubmVjZXNzYXJ5IG5vdy4gVGhhdCByZXF1aXJlcyBhbiBleGFtaW5hdGlvbiBvZiB0aGUgYWRkZWQgbG9naWMgdGhhdCB0YWtlcyBpdHMgcGxhY2UuCgpGaW5hbGx5LCB0aGUgcmVmYWN0b3Jpbmcgb2Ygc29ja2V0IHBhcnNpbmcgaW4gbmV0bGluayBvcGVyYXRpb25zLCBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYCwgaW5kaWNhdGVzIGNoYW5nZXMgdG8gdGhlIGNvbnRyb2wgcGxhbmUsIHdoaWNoIG1lYW5zIHRoZXJlIG1heSBiZSBhZGRpdGlvbnMgdG8gaW9jdGwgY29tbWFuZHMgYXMgd2VsbC4gTkJEIGlzIHJlYWNoYWJsZSB2aWEgaW9jdGwgYW5kIG5ldGxpbmssIHdoaWNoIGFyZSBjb21tb24gYWNjZXNzIHBvaW50cy4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gZmluZGluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBmaWxlIGZvciBOQkQuIEkga25vdyBOQkQgaXMgb2Z0ZW4gY29uZmlndXJlZCB3aXRoIGtlcm5lbCBwYXJhbWV0ZXJzLCBhbmQgcG9zc2libHkgdmlhIHN5c2ZzLiBUaGlzIGlzIGdvaW5nIHRvIHJlcXVpcmUgc29tZSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgQmxvY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGJsb2NrIGRyaXZlcnMuIFdoZXJlIGVsc2UgdG8gc3RhcnQgYnV0IHRoZSBzb3VyY2U/IFNwZWNpZmljYWxseSwgdGhlIGBkcml2ZXJzL2Jsb2NrYCBkaXJlY3RvcnkuIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgb3ZlciB0aGVyZSBhbmQgZGl2ZSBpbnRvIHRob3NlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIGxpZXMgZm9yIGJsb2NrIGRldmljZXMuIEkgd2FudCB0byBzZWUgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBkaXNhYmxlZCwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHN1YnRsZXRpZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJiMzOTtzIGJsb2NrIGRldmljZSBiZWhhdmlvci4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IFByaW9yaXRpemF0aW9uIGZvciBOQkQgRHJpdmVyKioKCkFscmlnaHQsIHRoZSBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseSBlbmFibGVzIGBCTEtfREVWX05CRGAuIEdvb2QuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBpZGVudGlmeSBwcm9taXNpbmcgdGFyZ2V0cyBmb3IgZnV6emluZyB3aXRoaW4gdGhlIE5CRCBkcml2ZXIuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRpZmYgaW5jbHVkZXM6IGBuYmRfc2V0X3NpemVgLCBgZmluZF9mYWxsYmFja2AsIGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfc3RhcnRfZGV2aWNlYCBhbmQgYSBgX2lvY3RsYCB2ZXJzaW9uLCBhbmQgb2YgY291cnNlIGFsbCB0aGUgZ2VubCAobmV0bGluaykgZnVuY3Rpb25zLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLCBgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiYCwgYW5kIGBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYmAgYXJlIGFsbCBuZXcsIHdoaWNoIHdhcnJhbnRzIHNvbWUgZXh0cmEgYXR0ZW50aW9uLgoKR2l2ZW4gdGhlIGNoYW5nZXMgYW5kIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIG15IGluc3RpbmN0IGlzIHRvIHByaW9yaXRpemUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZm9yIGZ1enppbmcgZWZmb3J0czogYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgX19uYmRfaW9jdGxgLCBgbmJkX3NldF9zaXplYCwgYW5kIGBmaW5kX2ZhbGxiYWNrYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IGxpa2VseSBlbnRyeSBwb2ludHMgZm9yIHRyaWdnZXJpbmcgaW50ZXJlc3RpbmcgYmVoYXZpb3IsIGFuZCB0aGV5IGFsbCB0b3VjaCB0aGUgY29yZSBvcGVyYXRpb25zIG9mIHRoZSBOQkQgZHJpdmVyLgoKSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGNsb3NlciBsb29rIGF0IGBuYmRfYWRkX3NvY2tldGAgYW5kIGBuYmRfZ2VubF9jb25uZWN0YCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZWlyIGlucHV0cyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhlc2UgYXJlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9hZGRfc29ja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTEyNzM9c3RhdGljIGlubGluZSB2b2lkIG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrKSB7fVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI3NS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTI3NjpzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjc3LVx0XHRcdCAgYm9vbCBuZXRsaW5rKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTYyNz1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjM5LVx0Y2FzZSBOQkRfU0VUX1NPQ0s6XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2NDA6XHRcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNjQxLVx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMTU2PXN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE1Ny17XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNTg6XHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MDgKCQkJCQkJCW91dHB1dDogNjIKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOQkQgQ29uZmlndXJhdGlvbiBhbmQgQVBJKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBOQkQgY2hhbmdlcy4gVGhleSBzZWVtIHRvIGJlIGZ1bmN0aW9uYWwgYW5kIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggYGlvY3RsYCBhbmQgYG5ldGxpbmtgLCB3aGljaCBpcyBnb29kLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGBCTEtfREVWX05CRGAsIGdvdCBpdC4gTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIGFzIEkgc2VlIHRoZW0uIEkmIzM5O20gZm9jdXNpbmcgb24gYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgX19uYmRfaW9jdGxgLCBgbmJkX3NldF9zaXplYCwgYW5kIHRoZSBteXN0ZXJpb3VzIGBmaW5kX2ZhbGxiYWNrYC4KClJpZ2h0LCB0aW1lIHRvIGNoZWNrIGlmIGBmaW5kX2ZhbGxiYWNrYCBpcyBzdGF0aWMuIFllcywgaXQmIzM5O3Mgc3RhdGljLiBGaW5lLiBBbmQgYG5iZF9zZXRfc2l6ZWAgaXMgc3RhdGljLiBgbmJkX2FkZF9zb2NrZXRgIGlzIHN0YXRpYy4gQW5kIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYWxzbyBzdGF0aWMuIEZpbmFsbHksIGBfX25iZF9pb2N0bGAgaXMgc3RhdGljIGFzIHdlbGwuCgpIbW0sIGJ1dCB3YWl0LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB0ZWxsaW5nIG1lIHNvbWV0aGluZzogJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuJiMzNDsgT2theSwgc28sIGFsbCB0aGVzZSBmdW5jdGlvbnMgSSBjaGVja2VkIGFyZSBzdGF0aWMuLi4gdGhhdCYjMzk7cyBhIGNsdWUuIEkgbmVlZCB0byBub3cgZ28gaHVudGluZyBmb3IgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuYmQuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgSSYjMzk7bSBnb2luZyB0byBmaW5kIHRoZSByZWFsIEFQSSBlbnRyeSBwb2ludHMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkfHN0cnVjdCBbYS16QS1aMC05X10mIzQzOyBcXCopIFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTE3MD1zdGF0aWMgaW50IHBhcnRfc2hpZnQ7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcyOnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTczOnN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNzQ6c3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NTpzdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNzY6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NzpzdGF0aWMgdm9pZCBuYmRfZGVhZF9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc4OnN0YXRpYyB2b2lkIG5iZF9kaXNjb25uZWN0X2FuZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3OS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqbmJkX3RvX2RldihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODU6c3RhdGljIHZvaWQgbmJkX3JlcXVldWVfY21kKHN0cnVjdCBuYmRfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4Ni17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNjA9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGJhY2tlbmRfYXR0ciA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY1OnN0YXRpYyB2b2lkIG5iZF9kZXZfcmVtb3ZlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2Ni17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yODItXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI4MzpzdGF0aWMgdm9pZCBuYmRfZGV2X3JlbW92ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjg0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI4Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjg4OnN0YXRpYyB2b2lkIG5iZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjg5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI5OS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MzAwOnN0YXRpYyBpbnQgbmJkX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnKVxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzA1LVxuZHJpdmVycy9ibG9jay9uYmQuYzozMDY6c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDctXHRcdFx0XHRpbnQgbm90aWZ5KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM0LVxuZHJpdmVycy9ibG9jay9uYmQuYzozMzU6c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM2LVx0XHRcdGJvb2wgZnJlZXplKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzkyLVxuZHJpdmVycy9ibG9jay9uYmQuYzozOTM6c3RhdGljIHZvaWQgbmJkX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM5NC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy00MDUtICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjQwNjpzdGF0aWMgdm9pZCBzb2NrX3NodXRkb3duKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTQwNy17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz00NTk9c3RhdGljIGVudW0gYmxrX2VoX3RpbWVyX3JldHVybiBuYmRfeG1pdF90aW1lb3V0KHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy01NTgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjU1OTpzdGF0aWMgaW50IF9fc29ja194bWl0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBzZW5kLFxuZHJpdmVycy9ibG9jay9uYmQuYy01NjAtXHRcdCAgICAgICBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGludCBtc2dfZmxhZ3MsIGludCAqc2VudClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTYwNi0gKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6NjA3OnN0YXRpYyBpbnQgc29ja194bWl0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleCwgaW50IHNlbmQsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTYwOC1cdFx0ICAgICBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGludCBtc2dfZmxhZ3MsIGludCAqc2VudClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTYyMD1zdGF0aWMgaW5saW5lIGludCB3YXNfaW50ZXJydXB0ZWQoaW50IHJlc3VsdClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTYzMi0gKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6NjMzOnN0YXRpYyB2b2lkIG5iZF9zY2hlZF9wZW5kaW5nX3dvcmsoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjM0LVx0XHRcdFx0ICAgc3RydWN0IG5iZF9zb2NrICpuc29jayxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTY1Mz1zdGF0aWMgYmxrX3N0YXR1c190IG5iZF9zZW5kX2NtZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX2NtZCAqY21kLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtODE1LS8qIGhhbmRsZSBwYXJ0aWFsIHNlbmRpbmcgKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6ODE2OnN0YXRpYyB2b2lkIG5iZF9wZW5kaW5nX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbmJkLmMtODE3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTg1Mi1cbmRyaXZlcnMvYmxvY2svbmJkLmM6ODUzOnN0YXRpYyBpbnQgbmJkX3JlYWRfcmVwbHkoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IHNvY2tldCAqc29jayxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODU0LVx0XHRcdCAgc3RydWN0IG5iZF9yZXBseSAqcmVwbHkpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz04ODA9c3RhdGljIHN0cnVjdCBuYmRfY21kICpuYmRfaGFuZGxlX3JlcGx5KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleCxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTk3Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6OTc4OnN0YXRpYyB2b2lkIHJlY3Zfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTk3OS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xMDM4PXN0YXRpYyBib29sIG5iZF9jbGVhcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEwNTctXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEwNTg6c3RhdGljIHZvaWQgbmJkX2NsZWFyX3F1ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDU5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEwNjUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEwNjY6c3RhdGljIGludCBmaW5kX2ZhbGxiYWNrKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTA2Ny17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDk5LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxMTAwOnN0YXRpYyBpbnQgd2FpdF9mb3JfcmVjb25uZWN0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTExMDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTI0Mj1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG5iZF9zbG9ja19rZXlbM107XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNDMtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyNDQ6c3RhdGljIHZvaWQgbmJkX3JlY2xhc3NpZnlfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNDUte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTI3Mz1zdGF0aWMgaW5saW5lIHZvaWQgbmJkX3JlY2xhc3NpZnlfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spIHt9XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjc1LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxMjc2OnN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNzctXHRcdFx0ICBib29sIG5ldGxpbmspXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzQ2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxMzQ3OnN0YXRpYyBpbnQgbmJkX3JlY29ubmVjdF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNDgte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQwOC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQwOTpzdGF0aWMgdm9pZCBuYmRfYmRldl9yZXNldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDEwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0MTUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0MTY6c3RhdGljIHZvaWQgbmJkX3BhcnNlX2ZsYWdzKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0MTcte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQyMy1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQyNDpzdGF0aWMgdm9pZCBzZW5kX2Rpc2Nvbm5lY3RzKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0MjUte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ0Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ0ODpzdGF0aWMgaW50IG5iZF9kaXNjb25uZWN0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NDkte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ1OC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ1OTpzdGF0aWMgdm9pZCBuYmRfY2xlYXJfc29jayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDYwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NjUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0NjY6c3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ2Ny17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTA0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNTA1OnN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTA2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE1NzYtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE1Nzc6c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE1Nzgte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYwNi1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYwNzpzdGF0aWMgdm9pZCBuYmRfY2xlYXJfc29ja19pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjA4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MTYtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MTc6c3RhdGljIHZvaWQgbmJkX3NldF9jbWRfdGltZW91dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1NjQgdGltZW91dClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYxOC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjI2LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNjI3OnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYyOC1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY3My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY3NDpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NzUtXHRcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzAzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA0OnN0YXRpYyBpbnQgbmJkX2FsbG9jX2FuZF9pbml0X2NvbmZpZyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzA1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MzgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3Mzk6c3RhdGljIGludCBuYmRfb3BlbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzQwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3ODEtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3ODI6c3RhdGljIHZvaWQgbmJkX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3ODMte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc5My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc5NDpzdGF0aWMgdm9pZCBuYmRfZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzk1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODEyLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEzOnN0YXRpYyBpbnQgbmJkX2RiZ190YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODE0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MjM9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfdGFza3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xODI0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODI1OnN0YXRpYyBpbnQgbmJkX2RiZ19mbGFnc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODI2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4NTI9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xODUzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODU0OnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODU1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4NzgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4Nzk6c3RhdGljIHZvaWQgbmJkX2Rldl9kYmdfY2xvc2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg4MC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODgzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODg0OnN0YXRpYyBpbnQgbmJkX2RiZ19pbml0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4ODUte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg5Ni1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTg5NzpzdGF0aWMgdm9pZCBuYmRfZGJnX2Nsb3NlKHZvaWQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4OTgte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkwMy1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTkwNDpzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkwNS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTA4LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTA5OnN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MTAte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkxMi1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTkxMzpzdGF0aWMgaW50IG5iZF9kYmdfaW5pdCh2b2lkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTE0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MTctXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MTg6c3RhdGljIHZvaWQgbmJkX2RiZ19jbG9zZSh2b2lkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTE5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MjMtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MjQ6c3RhdGljIGludCBuYmRfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MjUtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBoY3R4X2lkeCwgaW50IG51bWFfbm9kZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIwODY9bmJkX2RldmljZV9wb2xpY3lbTkJEX0RFVklDRV9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwOTAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIwOTE6c3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMDkyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxMTItICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxMTM6c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjExNC1cdFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTU1LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTU2OnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE1Ny17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTYxOnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzMTgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzMTk6c3RhdGljIHZvaWQgbmJkX2Rpc2Nvbm5lY3RfYW5kX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzIwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzMzktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNDA6c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM3NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM3Ni17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzg4LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzg5OnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM5MC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTM2PU1PRFVMRV9BTElBU19HRU5MX0ZBTUlMWShOQkRfR0VOTF9GQU1JTFlfTkFNRSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MzctXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1Mzg6c3RhdGljIGludCBwb3B1bGF0ZV9uYmRfc3RhdHVzKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBza19idWZmICpyZXBseSlcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUzOS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTY2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTY3OnN0YXRpYyBpbnQgc3RhdHVzX2NiKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTY4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NzItXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1NzM6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU3NC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjMyLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjMzOnN0YXRpYyB2b2lkIG5iZF9jb25uZWN0X3JlcGx5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBpbmRleClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjYzNC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjU2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjU3OnN0YXRpYyB2b2lkIG5iZF9tY2FzdF9pbmRleChpbnQgaW5kZXgpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NTgte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4MC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY4MTpzdGF0aWMgdm9pZCBuYmRfZGVhZF9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjgyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2ODk9c3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDMtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NDQ6c3RhdGljIGludCBuYmRfZXhpdF9jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG5iZC5jYCBNb2R1bGUgZm9yIEFQSSBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5iZC5jYCBhbmQgaW1tZWRpYXRlbHkgbm90aWNpbmcgc29tZXRoaW5nOiBhcGFydCBmcm9tIHRoZSBtb2R1bGUgaW5pdCBhbmQgZXhpdCBmdW5jdGlvbnMgKGBuYmRfaW5pdGAgYW5kIGBuYmRfY2xlYW51cGApLCBldmVyeXRoaW5nIGVsc2Ugc2VlbXMgdG8gYmUgc3RhdGljLiBIbW0sIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHdoYXQgdGhlIGd1aWRlbGluZXMgd2VyZSBzdWdnZXN0aW5nLCBpcyBpdD8gV2UmIzM5O3JlIHN1cHBvc2VkIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gQnV0LCBzaW5jZSBldmVyeXRoaW5nICppcyogc3RhdGljIGhlcmUsIGl0IGxvb2tzIGxpa2Ugd2UganVzdCBuZWVkIHRvIGxpc3QgdGhlIHN0YXRpYyBvbmVzIHRoYXQgd2Ugd2FudCB0byBleHBvc2UuCgpMZXQmIzM5O3Mgc2VlLi4uIGJhc2VkIG9uIHRoZSBjb2RlLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBsaXN0aW5nIGFzIGNhbmRpZGF0ZSBBUEkgZW50cnlwb2ludHM6CgoqICAgYG5iZF9hZGRfc29ja2V0YAoqICAgYG5iZF9nZW5sX2Nvbm5lY3RgCiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgCiogICBgX19uYmRfaW9jdGxgCiogICBgbmJkX3NldF9zaXplYAoqICAgYGZpbmRfZmFsbGJhY2tgCiogICBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYAoKQWxyaWdodCwgZmlyc3QgdGhpbmcmIzM5O3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG5iZF9hZGRfc29ja2V0YCBpc24mIzM5O3QgbWFnaWNhbGx5IGJlaW5nIGlubGluZWQuIE5vcGUsIG5vIGBpbmxpbmVgIGtleXdvcmQgdGhlcmUuIEdvb2QsIHRoYXQmIzM5O3Mgb25lIG9mZiB0aGUgbGlzdC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHdoYXQgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgKmRvZXMqLiBgbmJkX2dlbmxfY29ubmVjdGAgaXMgYW4gb2J2aW91cyBvbmUgLSB0aGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldGxpbmsgY29ubmVjdGlvbi4gU2FtZSBkZWFsIHdpdGggYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gQW5kIGBfX25iZF9pb2N0bGAuLi4gdGhhdCYjMzk7cyBvdXIgaW9jdGwgZW50cnkgcG9pbnQsIG1ha2luZyBpdCBhbm90aGVyIGNydWNpYWwgb25lLgoKTm93IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0RFVl9OQkRgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBsb29rIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX05CRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYEJMS19ERVZfTkJEYCBEZWZpbml0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiB0aGUgZnVsbCBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIGBCTEtfREVWX05CRGAuIE5vIGFzc3VtcHRpb25zLCBubyBzaG9ydGN1dHMuIE15IG1lbnRhbCBtb2RlbCBuZWVkcyB0byBiZSByb2NrIHNvbGlkLiBJJiMzOTttIGdvaW5nIHRvIHJldmlzaXQgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiwgdGhlICpjb21wbGV0ZSogZGVmaW5pdGlvbiwgbm90IGp1c3QgYSBzbmlwcGV0LiBJIHdhbnQgdG8gc2NydXRpbml6ZSBldmVyeSBkZXRhaWwsIGV2ZXJ5IG51YW5jZSwgZXZlcnkgcG90ZW50aWFsIGVkZ2UgY2FzZSBhc3NvY2lhdGVkIHdpdGggdGhpcy4gSSBrbm93IHRoZSBiYXNpYyBjb25jZXB0LCBzdXJlLCBuZXR3b3JrIGJsb2NrIGRldmljZSwgZ290IGl0LiBCdXQsIEkmIzM5O20gYWltaW5nIGZvciBhIGRlZXAgdW5kZXJzdGFuZGluZywgd2hpY2ggZGVtYW5kcyBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgZm9ybWFsIHNwZWNpZmljYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaGlkZGVuIGFzc3VtcHRpb25zIG9yIGxpbWl0YXRpb25zIHRoYXQgSSBtYXkgbm90IGhhdmUgY29uc2lkZXJlZCBiZWZvcmUsIHRoYXQgY291bGQgYml0ZSBtZSBsYXRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBhbmQgZW5zdXJlIHRoYXQgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCBhbnkgb2YgbXkgY3VycmVudCBvciBwbGFubmVkIHByb2plY3RzLiBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3MgZ2V0IGludG8gdGhvc2UgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NjpcdGNvbmZpZyBCTEtfREVWX05CRFxuIDE5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDE5ODpcdFx0ZGVwZW5kcyBvbiBORVRcbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcbiAyMDE6XHRcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcbiAyMDI6XHRcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxuIDIwMzpcdFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxuIDIwNDpcdFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xuIDIwNTpcdFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cbiAyMDY6XHRcbiAyMDc6XHRcdCAgTmV0d29yayBibG9jayBkZXZpY2VzIGFsc28gYWxsb3dzIHlvdSB0byBydW4gYSBibG9jay1kZXZpY2UgaW5cbiAyMDg6XHRcdCAgdXNlcmxhbmQgKG1ha2luZyBzZXJ2ZXIgYW5kIGNsaWVudCBwaHlzaWNhbGx5IHRoZSBzYW1lIGNvbXB1dGVyLFxuIDIwOTpcdFx0ICBjb21tdW5pY2F0aW5nIHVzaW5nIHRoZSBsb29wYmFjayBuZXR3b3JrIGRldmljZSkuXG4gMjEwOlx0XG4gMjExOlx0XHQgIFJlYWQgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L25iZC5yc3RcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24sXG4gMjEyOlx0XHQgIGVzcGVjaWFsbHkgYWJvdXQgd2hlcmUgdG8gZmluZCB0aGUgc2VydmVyIGNvZGUsIHdoaWNoIHJ1bnMgaW4gdXNlclxuIDIxMzpcdFx0ICBzcGFjZSBhbmQgZG9lcyBub3QgbmVlZCBzcGVjaWFsIGtlcm5lbCBzdXBwb3J0LlxuIDIxNDpcdFxuIDIxNTpcdFx0ICBOb3RlIHRoYXQgdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtcyBORlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTMKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkJEIERyaXZlciYjMzk7cyBBdHRhY2sgU3VyZmFjZSoqCgpPa2F5LCBzbyB0aGUgc2NvcGUgaGVyZSBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBoaW5nZXMgb24gYE5FVGAuICBMb29rcyBsaWtlIGBCTEtfREVWX05CRGAgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSYjMzk7bGwgbmVlZCB0byBhY2NvdW50IGZvci4gR29vZCwga2VlcHMgdGhpbmdzIHNpbXBsZS4gSnVzdCBkb2luZyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBzdXJlLi4uIHllcCwgYE5FVGAgaXMgc3RhbmRhcmQuIE5vIHN1cnByaXNlcyB0aGVyZS4KCkFscmlnaHQsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuICBNeSBpbml0aWFsIHRhcmdldCBsaXN0IGxvb2tzIGxpa2U6CgoqICAgYG5iZF9hZGRfc29ja2V0YAoqICAgYG5iZF9nZW5sX2Nvbm5lY3RgCiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgCiogICBgX19uYmRfaW9jdGxgCiogICBgbmJkX3NldF9zaXplYAoqICAgYGZpbmRfZmFsbGJhY2tgCiogICBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYAoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB3aGV0aGVyIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgIGlzIHN0YXRpYy4uLiBZZXAsIGl0IGlzLiBBbmQgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmA/IEFsc28gc3RhdGljLiAgT2theSwgdGhhdCYjMzk7cyBnb29kIGluZm9ybWF0aW9uIGZvciBmdXp6aW5nLCBoZWxwcyB3aXRoIG5hcnJvd2luZy4KClNvLCByZWZpbmluZyB0aGF0IGxpc3QgYWdhaW4sIGp1c3QgdG8gbWFrZSBzdXJlOgoKKiAgIGBuYmRfYWRkX3NvY2tldGAKKiAgIGBuYmRfZ2VubF9jb25uZWN0YAoqICAgYG5iZF9nZW5sX3JlY29uZmlndXJlYAoqICAgYF9fbmJkX2lvY3RsYAoqICAgYG5iZF9zZXRfc2l6ZWAKKiAgIGBmaW5kX2ZhbGxiYWNrYAoqICAgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AKClN0aWxsIG5vIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMgdG8gY29uc2lkZXI/IEdvb2QuIERvdWJsZS1jaGVja2luZy4uLiBOb3BlLgoKU28sIHRoZSByZWFzb25pbmcgaGVyZSBpcyBwcmV0dHkgY2xlYXI6IFRoaXMgcGF0Y2ggaXMgcmV3b3JraW5nIHRoZSBOQkQgZHJpdmVyLCBmaXhpbmcgc29ja2V0IGhhbmRsaW5nLCBoYXJkd2FyZSBxdWV1ZXMsIGFuZCB0aGUgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgYXJlIGFsbCBjb3JlIE5CRCBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBpb2N0bCAqYW5kKiBuZXRsaW5rLiBHaXZlbiB0aGF0LCB0aGV5JiMzOTtyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIHRvIHByb2JlIGZvciB2dWxuZXJhYmlsaXRpZXMuIFRoYXQgc291bmRzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfYWRkX3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O19fbmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9zZXRfc2l6ZSYjMzQ7LAogICAgJiMzNDtmaW5kX2ZhbGxiYWNrJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2ZvcmVhY2hfc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBzb2NrZXQgaGFuZGxpbmcsIGFkZCBhIG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgTkJEIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgbWFraW5nIHRoZW0gZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfYWRkX3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O19fbmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9zZXRfc2l6ZSYjMzQ7LAogICAgJiMzNDtmaW5kX2ZhbGxiYWNrJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2ZvcmVhY2hfc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBzb2NrZXQgaGFuZGxpbmcsIGFkZCBhIG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgTkJEIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgbWFraW5nIHRoZW0gZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjA1OjE5LjM3ODY0NDE3MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2ODI1MzEzMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2FkZF9zb2NrZXRcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJfX25iZF9pb2N0bFwiLFxuICAgIFwibmJkX3NldF9zaXplXCIsXG4gICAgXCJmaW5kX2ZhbGxiYWNrXCIsXG4gICAgXCJuYmRfZ2VubF9mb3JlYWNoX3NvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBzb2NrZXQgaGFuZGxpbmcsIGFkZCBhIG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgTkJEIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgbWFraW5nIHRoZW0gZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6MTkuMzc4NjU0MjExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDc3OTU1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZGE1Y2Y2MTNjN2U3YTdiMmM4NWFlNzlmYzQzNDY5ZTEwMWZjODUwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDE5OjA1OjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuaW5kZXggOGYxMDc2MmU5MGVmNzQuLjFkOGNkYzU3MTNlYmEzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7XFxuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcXG4rc3RhdGljIGludCBucl9od19xdWV1ZXMgPSAxO1xcbiBzdGF0aWMgaW50IHBhcnRfc2hpZnQ7XFxuIFxcbiBzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7XFxuQEAgLTMzMSw3ICszMzIsOCBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXFxuIFxcdG5zb2NrLVxcdTAwM2VzZW50ID0gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4rc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSxcXG4rXFx0XFx0XFx0Ym9vbCBmcmVlemUpXFxuIHtcXG4gXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XFxuIFxcdGludCBlcnJvcjtcXG5AQCAtMzcxLDcgKzM3MywxMyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbiBcXG4gXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XFxuIFxcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcXG4tXFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuK1xcbitcXHRpZiAoZnJlZXplKVxcbitcXHRcXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2bGltKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbitcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbkBAIC0xMDYxLDQwICsxMDY5LDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpXFxuIFxcdGludCBuZXdfaW5kZXggPSAtMTtcXG4gXFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cXHUwMDNlc29ja3NbaW5kZXhdO1xcbiBcXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXg7XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsIFxcdTAwMjZjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbiBcXG4tXFx0aWYgKGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwM2M9IDEpIHtcXG4tXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbi1cXHRcXHRcXHRcXHQgICAgXFxcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuLVxcdH1cXG4rXFx0aWYgKGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwM2M9IDEpXFxuK1xcdFxcdGdvdG8gbm9fZmFsbGJhY2s7XFxuIFxcbiBcXHRpZiAoZmFsbGJhY2sgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBmYWxsYmFjayBcXHUwMDNjIGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhY29uZmlnLVxcdTAwM2Vzb2Nrc1tmYWxsYmFja10tXFx1MDAzZWRlYWQpXFxuIFxcdFxcdHJldHVybiBmYWxsYmFjaztcXG4gXFxuLVxcdGlmIChuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggXFx1MDAzYyAwIHx8XFxuLVxcdCAgICBuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggXFx1MDAzZT0gY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMgfHxcXG4tXFx0ICAgIGNvbmZpZy1cXHUwMDNlc29ja3NbbnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4XS1cXHUwMDNlZGVhZCkge1xcbi1cXHRcXHRpbnQgaTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpKyspIHtcXG4tXFx0XFx0XFx0aWYgKGkgPT0gaW5kZXgpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRpZiAoIWNvbmZpZy1cXHUwMDNlc29ja3NbaV0tXFx1MDAzZWRlYWQpIHtcXG4tXFx0XFx0XFx0XFx0bmV3X2luZGV4ID0gaTtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHRcXHRuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7XFxuLVxcdFxcdGlmIChuZXdfaW5kZXggXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVxcdTAwM2VkaXNrKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnM7IGkrKykge1xcbitcXHRcXHRpZiAoaSAhPSBpbmRleCBcXHUwMDI2XFx1MDAyNiAhY29uZmlnLVxcdTAwM2Vzb2Nrc1tpXS1cXHUwMDNlZGVhZCkge1xcbitcXHRcXHRcXHRuZXdfaW5kZXggPSBpO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdG5ld19pbmRleCA9IG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleDtcXG4rXFx0bnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xcbitcXHRpZiAobmV3X2luZGV4IFxcdTAwM2U9IDApXFxuK1xcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuK1xcbitub19mYWxsYmFjazpcXG4rXFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbitcXHRcXHRcXHQgICAgXFxcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcXFxuXFxcIik7XFxuIFxcdHJldHVybiBuZXdfaW5kZXg7XFxuIH1cXG4gXFxuQEAgLTEyODEsMjMgKzEyODAsMjMgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4gXFx0c3RydWN0IG5iZF9zb2NrICoqc29ja3M7XFxuIFxcdHN0cnVjdCBuYmRfc29jayAqbnNvY2s7XFxuLVxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdC8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xcbiBcXHRpZiAoYXJnIFxcdTAwM2UgSU5UX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAobmJkLVxcdTAwM2VwaWQpIHtcXG4rXFx0XFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbitcXHRcXHRcXHRcXFwiQ2Fubm90IGFkZCBzb2NrZXQgdG8gYSBydW5uaW5nIGRldmljZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuIFxcdHNvY2sgPSBuYmRfZ2V0X3NvY2tldChuYmQsIGFyZywgXFx1MDAyNmVycik7XFxuIFxcdGlmICghc29jaylcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UncmVcXG4tXFx0ICogcmVhbGxvY2F0aW5nIHRoZSAtXFx1MDAzZXNvY2tzIGFycmF5Llxcbi1cXHQgKi9cXG4tXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbi1cXG4gXFx0aWYgKCFuZXRsaW5rIFxcdTAwMjZcXHUwMDI2ICFuYmQtXFx1MDAzZXRhc2tfc2V0dXAgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICF0ZXN0X2JpdChOQkRfUlRfQk9VTkQsIFxcdTAwMjZjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxcbiBcXHRcXHRuYmQtXFx1MDAzZXRhc2tfc2V0dXAgPSBjdXJyZW50O1xcbkBAIC0xMzM3LDEyICsxMzM2LDEwIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2bnNvY2stXFx1MDAzZXdvcmssIG5iZF9wZW5kaW5nX2NtZF93b3JrKTtcXG4gXFx0c29ja3NbY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMrK10gPSBuc29jaztcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2Y29uZmlnLVxcdTAwM2VsaXZlX2Nvbm5lY3Rpb25zKTtcXG4tXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gcHV0X3NvY2tldDpcXG4tXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcXG4gXFx0c29ja2ZkX3B1dChzb2NrKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC0xNTc0LDcgKzE1NzEsNyBAQCBzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4gXFx0XFx0YXJncy1cXHUwMDNlaW5kZXggPSBpO1xcbiBcXHRcXHRxdWV1ZV93b3JrKG5iZC1cXHUwMDNlcmVjdl93b3JrcSwgXFx1MDAyNmFyZ3MtXFx1MDAzZXdvcmspO1xcbiBcXHR9XFxuLVxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXFx1MDAzZWJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcXG4rXFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIGZhbHNlKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuQEAgLTE2NDIsMTMgKzE2MzksMTMgQEAgc3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxcbiBcXHRjYXNlIE5CRF9TRVRfU09DSzpcXG4gXFx0XFx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgYXJnLCBmYWxzZSk7XFxuIFxcdGNhc2UgTkJEX1NFVF9CTEtTSVpFOlxcbi1cXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVxcdTAwM2VieXRlc2l6ZSwgYXJnKTtcXG4rXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cXHUwMDNlYnl0ZXNpemUsIGFyZywgdHJ1ZSk7XFxuIFxcdGNhc2UgTkJEX1NFVF9TSVpFOlxcbi1cXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYXJnLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcXG4rXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSwgdHJ1ZSk7XFxuIFxcdGNhc2UgTkJEX1NFVF9TSVpFX0JMT0NLUzpcXG4gXFx0XFx0aWYgKGNoZWNrX3NobF9vdmVyZmxvdyhhcmcsIGNvbmZpZy1cXHUwMDNlYmxrc2l6ZV9iaXRzLCBcXHUwMDI2Ynl0ZXNpemUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcXG4rXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpLCB0cnVlKTtcXG4gXFx0Y2FzZSBOQkRfU0VUX1RJTUVPVVQ6XFxuIFxcdFxcdG5iZF9zZXRfY21kX3RpbWVvdXQobmJkLCBhcmcpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtMTk0MSw3ICsxOTM4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7XFxuIFxcdC50aW1lb3V0XFx0PSBuYmRfeG1pdF90aW1lb3V0LFxcbiB9O1xcbiBcXG4tc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxcbitzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgbnJfaHdfcXVldWVzKVxcbiB7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xcbiBcXHRcXHQubWF4X2h3X3NlY3RvcnNcXHRcXHQ9IDY1NTM2LFxcbkBAIC0xOTU4LDcgKzE5NTYsNyBAQCBzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0bmJkLVxcdTAwM2V0YWdfc2V0Lm9wcyA9IFxcdTAwMjZuYmRfbXFfb3BzO1xcbi1cXHRuYmQtXFx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gMTtcXG4rXFx0bmJkLVxcdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcXG4gXFx0bmJkLVxcdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xcbkBAIC0yMTAzLDEwICsyMTAxLDYzIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4gXFx0XFx0YnNpemUgPSBubGFfZ2V0X3U2NChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSk7XFxuIFxcbiBcXHRpZiAoYnl0ZXMgIT0gY29uZmlnLVxcdTAwM2VieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxcbi1cXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcXG4rXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSwgdHJ1ZSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXFxuKyAqL1xcbitzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbitcXHRcXHRpbnQgKCpjYikoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKSxcXG4rXFx0XFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4re1xcbitcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbitcXHRpbnQgcmVtLCBjb3VudCA9IDA7XFxuK1xcbitcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkge1xcbitcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVggKyAxXTtcXG4rXFx0XFx0aW50IHJldDtcXG4rXFxuK1xcdFxcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0YXR0cixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bmJkX3NvY2tfcG9saWN5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VleHRhY2spKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0XFx0aWYgKGNiKSB7XFxuK1xcdFxcdFxcdHJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiBjb3VudDtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuK3tcXG4rXFx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkO1xcbkBAIC0yMTU5LDcgKzIyMTAsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmJkX2luZGV4X211dGV4KTtcXG4gXFxuIFxcdGlmICghbmJkKSB7XFxuLVxcdFxcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyKTtcXG4rXFx0XFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgXFx1MDAzZSAwID8gcmV0IDogMSk7XFxuIFxcdFxcdGlmIChJU19FUlIobmJkKSkge1xcbiBcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBhZGQgbmV3IGRldmljZVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG5iZCk7XFxuQEAgLTIyMjYsMzYgKzIyODEsOSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHtcXG4tXFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcXG4tXFx0XFx0aW50IHJlbSwgZmQ7XFxuLVxcbi1cXHRcXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxcbi1cXHRcXHRcXHRcXHQgICAgcmVtKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcXG4tXFxuLVxcdFxcdFxcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgYXR0cixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBuYmRfc29ja19wb2xpY3ksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4tXFx0XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xcbi1cXHRcXHRcXHRyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcXG4tXFx0XFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbitcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkge1xcbiBcXHRcXHRuYmQtXFx1MDAzZWJhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0sXFxuQEAgLTIzNDQsNiArMjM3MiwyMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxcbit7XFxuK1xcdGludCByZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcXG4rXFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXFxcInJlY29ubmVjdGVkIHNvY2tldFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocmV0ID09IC1FTk9TUEMpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XFxuQEAgLTI0NDAsNDAgKzI0ODIsNyBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XFxuLVxcdFxcdHN0cnVjdCBubGF0dHIgKmF0dHI7XFxuLVxcdFxcdGludCByZW0sIGZkO1xcbi1cXG4tXFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSxcXG4tXFx0XFx0XFx0XFx0ICAgIHJlbSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgrMV07XFxuLVxcbi1cXHRcXHRcXHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcInNvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGF0dHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbmJkX3NvY2tfcG9saWN5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLVxcdFxcdFxcdGlmIChyZXQgIT0gMCkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcXG4tXFx0XFx0XFx0cmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XFxuLVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PU1BDKVxcbi1cXHRcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFxcXCJyZWNvbm5lY3RlZCBzb2NrZXRcXFxcblxcXCIpO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xcbiBvdXQ6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmJkLVxcdTAwM2Vjb25maWdfbG9jayk7XFxuIFxcdG5iZF9jb25maWdfcHV0KG5iZCk7XFxuQEAgLTI3MjUsOCArMjczNCwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxcbiBcXHR9XFxuIFxcdG5iZF9kYmdfaW5pdCgpO1xcbiBcXG4rXFx0aWYgKG5yX2h3X3F1ZXVlcyBcXHUwMDNjIDEpXFxuK1xcdFxcdG5yX2h3X3F1ZXVlcyA9IDE7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuYmRzX21heDsgaSsrKVxcbi1cXHRcXHRuYmRfZGV2X2FkZChpLCAxKTtcXG4rXFx0XFx0bmJkX2Rldl9hZGQoaSwgMSwgbnJfaHdfcXVldWVzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI3ODcsMyArMjc5OCw2IEBAIG1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgXFxcIm51bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXFxcIik7XFxuIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXFxcIm51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVxcXCIpO1xcbittb2R1bGVfcGFyYW0obnJfaHdfcXVldWVzLCBpbnQsIDA0NDQpO1xcbitNT0RVTEVfUEFSTV9ERVNDKG5yX2h3X3F1ZXVlcyxcXG4rXFxcIm51bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgZm9yIGRldmljZXMgcHJlLWNyZWF0ZWQgYXQgbW9kdWxlIGxvYWQgKGRlZmF1bHQ6IDEpLiBcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6MTkuOTI3MTk1MzcxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzYyNzY3NTA3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfYWRkX3NvY2tldFwiLFxuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgICBcIl9fbmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfc2V0X3NpemVcIixcbiAgICBcImZpbmRfZmFsbGJhY2tcIixcbiAgICBcIm5iZF9nZW5sX2ZvcmVhY2hfc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IHNvY2tldCBoYW5kbGluZywgYWRkIGEgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBOQkQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBtYWtpbmcgdGhlbSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZGE1Y2Y2MTNjN2U3YTdiMmM4NWFlNzlmYzQzNDY5ZTEwMWZjODUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTk6MDU6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuaW5kZXggOGYxMDc2MmU5MGVmNzQuLjFkOGNkYzU3MTNlYmEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xuKysrIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2O1xuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcbitzdGF0aWMgaW50IG5yX2h3X3F1ZXVlcyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNyArMzMyLDggQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuIFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4rc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSxcbitcdFx0XHRib29sIGZyZWV6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdGludCBlcnJvcjtcbkBAIC0zNzEsNyArMzczLDEzIEBAIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4gXG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbi1cdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1xuK1x0aWYgKGZyZWV6ZSlcbitcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsXG4rXHRcdFx0XHRcdTAwMjZsaW0pO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtMTA2MSw0MCArMTA2OSwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxuIFx0aW50IG5ld19pbmRleCA9IC0xO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cdTAwM2Vzb2Nrc1tpbmRleF07XG4gXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbitcdGludCBpO1xuIFxuIFx0aWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsIFx1MDAyNmNvbmZpZy1cdTAwM2VydW50aW1lX2ZsYWdzKSlcbiBcdFx0cmV0dXJuIG5ld19pbmRleDtcbiBcbi1cdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSkge1xuLVx0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbi1cdFx0XHRcdCAgICBcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwiKTtcbi1cdFx0cmV0dXJuIG5ld19pbmRleDtcbi1cdH1cbitcdGlmIChjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAzYz0gMSlcbitcdFx0Z290byBub19mYWxsYmFjaztcbiBcbiBcdGlmIChmYWxsYmFjayBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGZhbGxiYWNrIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFjb25maWctXHUwMDNlc29ja3NbZmFsbGJhY2tdLVx1MDAzZWRlYWQpXG4gXHRcdHJldHVybiBmYWxsYmFjaztcbiBcbi1cdGlmIChuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCBcdTAwM2MgMCB8fFxuLVx0ICAgIG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzZT0gY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyB8fFxuLVx0ICAgIGNvbmZpZy1cdTAwM2Vzb2Nrc1tuc29jay1cdTAwM2VmYWxsYmFja19pbmRleF0tXHUwMDNlZGVhZCkge1xuLVx0XHRpbnQgaTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XG4tXHRcdFx0aWYgKGkgPT0gaW5kZXgpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAoIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4tXHRcdFx0XHRuZXdfaW5kZXggPSBpO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuLVx0XHRpZiAobmV3X2luZGV4IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHRcdCAgICBcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwiKTtcbi1cdFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XG4rXHRcdGlmIChpICE9IGluZGV4IFx1MDAyNlx1MDAyNiAhY29uZmlnLVx1MDAzZXNvY2tzW2ldLVx1MDAzZWRlYWQpIHtcbitcdFx0XHRuZXdfaW5kZXggPSBpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXdfaW5kZXggPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbitcdG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xuK1x0aWYgKG5ld19pbmRleCBcdTAwM2U9IDApXG4rXHRcdHJldHVybiBuZXdfaW5kZXg7XG4rXG4rbm9fZmFsbGJhY2s6XG4rXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbitcdFx0XHQgICAgXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cIik7XG4gXHRyZXR1cm4gbmV3X2luZGV4O1xuIH1cbiBcbkBAIC0xMjgxLDIzICsxMjgwLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuIFx0c3RydWN0IG5iZF9zb2NrICoqc29ja3M7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrO1xuLVx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xuIFx0aWYgKGFyZyBcdTAwM2UgSU5UX01BWClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAobmJkLVx1MDAzZXBpZCkge1xuK1x0XHRkZXZfZXJyKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbitcdFx0XHRcIkNhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXG5cIik7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4gXHRzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsIFx1MDAyNmVycik7XG4gXHRpZiAoIXNvY2spXG4gXHRcdHJldHVybiBlcnI7XG4gXHRuYmRfcmVjbGFzc2lmeV9zb2NrZXQoc29jayk7XG4gXG4tXHQvKlxuLVx0ICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UncmVcbi1cdCAqIHJlYWxsb2NhdGluZyB0aGUgLVx1MDAzZXNvY2tzIGFycmF5LlxuLVx0ICovXG4tXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVxuIFx0aWYgKCFuZXRsaW5rIFx1MDAyNlx1MDAyNiAhbmJkLVx1MDAzZXRhc2tfc2V0dXAgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmQtXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XG5AQCAtMTMzNywxMiArMTMzNiwxMCBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0SU5JVF9XT1JLKFx1MDAyNm5zb2NrLVx1MDAzZXdvcmssIG5iZF9wZW5kaW5nX2NtZF93b3JrKTtcbiBcdHNvY2tzW2NvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMrK10gPSBuc29jaztcbiBcdGF0b21pY19pbmMoXHUwMDI2Y29uZmlnLVx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBwdXRfc29ja2V0OlxuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXHRzb2NrZmRfcHV0KHNvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMTU3NCw3ICsxNTcxLDcgQEAgc3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRcdGFyZ3MtXHUwMDNlaW5kZXggPSBpO1xuIFx0XHRxdWV1ZV93b3JrKG5iZC1cdTAwM2VyZWN2X3dvcmtxLCBcdTAwMjZhcmdzLVx1MDAzZXdvcmspO1xuIFx0fVxuLVx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGNvbmZpZy1cdTAwM2VieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4rXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZV9pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuQEAgLTE2NDIsMTMgKzE2MzksMTMgQEAgc3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuIFx0Y2FzZSBOQkRfU0VUX1NPQ0s6XG4gXHRcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xuIFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XG4tXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIGFyZyk7XG4rXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIGFyZywgdHJ1ZSk7XG4gXHRjYXNlIE5CRF9TRVRfU0laRTpcbi1cdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4rXHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpO1xuIFx0Y2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOlxuIFx0XHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KGFyZywgY29uZmlnLVx1MDAzZWJsa3NpemVfYml0cywgXHUwMDI2Ynl0ZXNpemUpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuK1x0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZyksIHRydWUpO1xuIFx0Y2FzZSBOQkRfU0VUX1RJTUVPVVQ6XG4gXHRcdG5iZF9zZXRfY21kX3RpbWVvdXQobmJkLCBhcmcpO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0xOTQxLDcgKzE5MzgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcbiBcdC50aW1lb3V0XHQ9IG5iZF94bWl0X3RpbWVvdXQsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXG4rc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuK1x0XHRcdFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXG4ge1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XG4gXHRcdC5tYXhfaHdfc2VjdG9yc1x0XHQ9IDY1NTM2LFxuQEAgLTE5NTgsNyArMTk1Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRuYmQtXHUwMDNldGFnX3NldC5vcHMgPSBcdTAwMjZuYmRfbXFfb3BzO1xuLVx0bmJkLVx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gMTtcbitcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDMsMTAgKzIxMDEsNjMgQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0XHRic2l6ZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pO1xuIFxuIFx0aWYgKGJ5dGVzICE9IGNvbmZpZy1cdTAwM2VieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbitcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSwgdHJ1ZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4rICpcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmZHMgd2Fsa2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuKyAqL1xuK3N0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpLFxuK1x0XHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuK3tcbitcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4rXHRpbnQgcmVtLCBjb3VudCA9IDA7XG4rXG4rXHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHtcbitcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICsgMV07XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4rXHRcdFx0cHJfZXJyKFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbitcdFx0XHRcdFx0XHRhdHRyLFxuK1x0XHRcdFx0XHRcdG5iZF9zb2NrX3BvbGljeSxcbitcdFx0XHRcdFx0XHRpbmZvLVx1MDAzZWV4dGFjaykpIHtcbitcdFx0XHRwcl9lcnIoXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Y291bnQrKztcbitcdFx0aWYgKGNiKSB7XG4rXHRcdFx0cmV0ID0gY2IobmJkLCAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSkpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0XHRyZXR1cm4gY291bnQ7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdH1cbitcdH1cbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4rc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxuK3tcbitcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbit9XG4rXG4gc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZDtcbkBAIC0yMTU5LDcgKzIyMTAsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmJkX2luZGV4X211dGV4KTtcbiBcbiBcdGlmICghbmJkKSB7XG4tXHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyKTtcbitcdFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgXHUwMDNlIDAgPyByZXQgOiAxKTtcbiBcdFx0aWYgKElTX0VSUihuYmQpKSB7XG4gXHRcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIGFkZCBuZXcgZGV2aWNlXFxuXCIpO1xuIFx0XHRcdHJldHVybiBQVFJfRVJSKG5iZCk7XG5AQCAtMjIyNiwzNiArMjI4MSw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwiKTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbi1cdFx0XHRyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH1cbitcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcbiBcdFx0bmJkLVx1MDAzZWJhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSxcbkBAIC0yMzQ0LDYgKzIzNzIsMjAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG4re1xuK1x0aW50IHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuK1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0ZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCBcInJlY29ubmVjdGVkIHNvY2tldFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAocmV0ID09IC1FTk9TUEMpXG4rXHRcdHJldHVybiAxO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQgPSBOVUxMO1xuQEAgLTI0NDAsNDAgKzI0ODIsNyBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdGlmIChyZXQgPT0gLUVOT1NQQylcbi1cdFx0XHRcdFx0cmV0ID0gMDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwicmVjb25uZWN0ZWQgc29ja2V0XFxuXCIpO1xuLVx0XHR9XG4tXHR9XG4rXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRuYmRfY29uZmlnX3B1dChuYmQpO1xuQEAgLTI3MjUsOCArMjczNCwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxuIFx0fVxuIFx0bmJkX2RiZ19pbml0KCk7XG4gXG4rXHRpZiAobnJfaHdfcXVldWVzIFx1MDAzYyAxKVxuK1x0XHRucl9od19xdWV1ZXMgPSAxO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmJkc19tYXg7IGkrKylcbi1cdFx0bmJkX2Rldl9hZGQoaSwgMSk7XG4rXHRcdG5iZF9kZXZfYWRkKGksIDEsIG5yX2h3X3F1ZXVlcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjc4NywzICsyNzk4LDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFwibnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNilcIik7XG4gbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwibnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXCIpO1xuK21vZHVsZV9wYXJhbShucl9od19xdWV1ZXMsIGludCwgMDQ0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyhucl9od19xdWV1ZXMsXG4rXCJudW1iZXIgb2YgaGFyZHdhcmUgcXVldWVzIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKS4gXCIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6MTkuOTI3MTk3MTUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3Nzg2MDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5CRCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay9uYmQuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGFuZCBub3QganVzdCBhIGJ1ZyBmaXguIEl0J3MgYWRkaW5nIGEgbW9kdWxlIHBhcmFtZXRlciwgYG5yX2h3X3F1ZXVlc2AsIHdoaWNoIHN1Z2dlc3RzIHNvbWUgcGVyZm9ybWFuY2Ugb3IgcmVzb3VyY2UgdHVuaW5nIGlzIGJlaW5nIGludHJvZHVjZWQgYXQgbW9kdWxlIGxvYWQgdGltZS4gVGhlIGBuYmRfc2V0X3NpemVgIGNoYW5nZSB3aXRoIGEgYGZyZWV6ZWAgcGFyYW1ldGVyIHJhaXNlcyBteSBleWVicm93cyBhIGJpdCDigJMgc291bmRzIGxpa2UgdGhlcmUncyBzb21lIGRlZXBlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBsYXllcidzIGZyZWV6aW5nIG1lY2hhbmlzbXMgaGFwcGVuaW5nLCBsaWtlbHkgdG8gZW5zdXJlIGRhdGEgY29uc2lzdGVuY3kgZHVyaW5nIHNpemUgYWRqdXN0bWVudHMuXG5cblRoZSByZWZhY3RvcmluZyBvZiBgZmluZF9mYWxsYmFja2AgaXMgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiAqd2h5KiBpdCBuZWVkZWQgdG8gYmUgY2hhbmdlZCwgYW5kIGlmIHRoaXMgcmVsYXRlcyB0byBhbnkgdW5kZXJseWluZyBjaGFuZ2VzIGluIGVycm9yIGhhbmRsaW5nLiBQcmV2ZW50aW5nIHRoZSBhZGRpdGlvbiBvZiBzb2NrZXRzIHRvIGEgKnJ1bm5pbmcqIGRldmljZSBpbiBgbmJkX2FkZF9zb2NrZXRgIGlzIGEgZ29vZCBwcmFjdGljZSB0byBwcmV2ZW50IHVuaW50ZW5kZWQgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoZXJlJ3Mgbm8gc3VpdGFibGUgbG9ja2luZyBpbiBwbGFjZS4gUmVtb3ZpbmcgYGJsa19tcV9mcmVlemVfcXVldWVgIGZyb20gYG5iZF9hZGRfc29ja2V0YCBpcyBjdXJpb3VzLiBQZXJoYXBzIHRoZSBmcmVlemluZyBpcyBoYW5kbGVkIGVsc2V3aGVyZSwgb3IgcGVyaGFwcyBpdCdzIGRlZW1lZCB1bm5lY2Vzc2FyeSBub3cuIFRoYXQgcmVxdWlyZXMgYW4gZXhhbWluYXRpb24gb2YgdGhlIGFkZGVkIGxvZ2ljIHRoYXQgdGFrZXMgaXRzIHBsYWNlLlxuXG5GaW5hbGx5LCB0aGUgcmVmYWN0b3Jpbmcgb2Ygc29ja2V0IHBhcnNpbmcgaW4gbmV0bGluayBvcGVyYXRpb25zLCBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYCwgaW5kaWNhdGVzIGNoYW5nZXMgdG8gdGhlIGNvbnRyb2wgcGxhbmUsIHdoaWNoIG1lYW5zIHRoZXJlIG1heSBiZSBhZGRpdGlvbnMgdG8gaW9jdGwgY29tbWFuZHMgYXMgd2VsbC4gTkJEIGlzIHJlYWNoYWJsZSB2aWEgaW9jdGwgYW5kIG5ldGxpbmssIHdoaWNoIGFyZSBjb21tb24gYWNjZXNzIHBvaW50cy4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gZmluZGluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBmaWxlIGZvciBOQkQuIEkga25vdyBOQkQgaXMgb2Z0ZW4gY29uZmlndXJlZCB3aXRoIGtlcm5lbCBwYXJhbWV0ZXJzLCBhbmQgcG9zc2libHkgdmlhIHN5c2ZzLiBUaGlzIGlzIGdvaW5nIHRvIHJlcXVpcmUgc29tZSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY3NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjA1OjI0LjkwNTA2MTA5MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTA4OTY3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6MjQuOTcwMTYxODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ2NTc2NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJsb2NrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYmxvY2sgZHJpdmVycy4gV2hlcmUgZWxzZSB0byBzdGFydCBidXQgdGhlIHNvdXJjZT8gU3BlY2lmaWNhbGx5LCB0aGUgYGRyaXZlcnMvYmxvY2tgIGRpcmVjdG9yeS4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIG92ZXIgdGhlcmUgYW5kIGRpdmUgaW50byB0aG9zZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBsaWVzIGZvciBibG9jayBkZXZpY2VzLiBJIHdhbnQgdG8gc2VlIGhvdyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQsIGRlcGVuZGVuY2llcywgYW5kIGFueSBzdWJ0bGV0aWVzIGluIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIGJsb2NrIGRldmljZSBiZWhhdmlvci4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTowNToyOS41MTY3NDEyNzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MTg0MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6MjkuNTgwMzY1NTY3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2NjI5NDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbiBmb3IgTkJEIERyaXZlcioqXG5cbkFscmlnaHQsIHRoZSBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseSBlbmFibGVzIGBCTEtfREVWX05CRGAuIEdvb2QuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBpZGVudGlmeSBwcm9taXNpbmcgdGFyZ2V0cyBmb3IgZnV6emluZyB3aXRoaW4gdGhlIE5CRCBkcml2ZXIuIExldCdzIHNlZS4uLiB0aGUgZGlmZiBpbmNsdWRlczogYG5iZF9zZXRfc2l6ZWAsIGBmaW5kX2ZhbGxiYWNrYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9zdGFydF9kZXZpY2VgIGFuZCBhIGBfaW9jdGxgIHZlcnNpb24sIGFuZCBvZiBjb3Vyc2UgYWxsIHRoZSBnZW5sIChuZXRsaW5rKSBmdW5jdGlvbnMuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYCwgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmAsIGFuZCBgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2JgIGFyZSBhbGwgbmV3LCB3aGljaCB3YXJyYW50cyBzb21lIGV4dHJhIGF0dGVudGlvbi5cblxuR2l2ZW4gdGhlIGNoYW5nZXMgYW5kIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIG15IGluc3RpbmN0IGlzIHRvIHByaW9yaXRpemUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZm9yIGZ1enppbmcgZWZmb3J0czogYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgX19uYmRfaW9jdGxgLCBgbmJkX3NldF9zaXplYCwgYW5kIGBmaW5kX2ZhbGxiYWNrYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IGxpa2VseSBlbnRyeSBwb2ludHMgZm9yIHRyaWdnZXJpbmcgaW50ZXJlc3RpbmcgYmVoYXZpb3IsIGFuZCB0aGV5IGFsbCB0b3VjaCB0aGUgY29yZSBvcGVyYXRpb25zIG9mIHRoZSBOQkQgZHJpdmVyLlxuXG5JJ2xsIHN0YXJ0IHdpdGggYSBjbG9zZXIgbG9vayBhdCBgbmJkX2FkZF9zb2NrZXRgIGFuZCBgbmJkX2dlbmxfY29ubmVjdGAgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGVpciBpbnB1dHMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRoZXNlIGFyZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTowNTozNS4wNDY2NjI3NDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2NTQxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2FkZF9zb2NrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTEyNzM9c3RhdGljIGlubGluZSB2b2lkIG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrKSB7fVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjc1LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTI3NjpzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI3Ny1cXHRcXHRcXHQgIGJvb2wgbmV0bGluaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTYyNz1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzktXFx0Y2FzZSBOQkRfU0VUX1NPQ0s6XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjQwOlxcdFxcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0MS1cXHRjYXNlIE5CRF9TRVRfQkxLU0laRTpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjE1Nj1zdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTU3LXtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNTg6XFx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE1OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjA1OjM1LjEwNjMyMjM1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODc2NTI3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQkQgQ29uZmlndXJhdGlvbiBhbmQgQVBJKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgTkJEIGNoYW5nZXMuIFRoZXkgc2VlbSB0byBiZSBmdW5jdGlvbmFsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGBpb2N0bGAgYW5kIGBuZXRsaW5rYCwgd2hpY2ggaXMgZ29vZC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpcyBgQkxLX0RFVl9OQkRgLCBnb3QgaXQuIE5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIGFzIEkgc2VlIHRoZW0uIEknbSBmb2N1c2luZyBvbiBgbmJkX2FkZF9zb2NrZXRgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBfX25iZF9pb2N0bGAsIGBuYmRfc2V0X3NpemVgLCBhbmQgdGhlIG15c3RlcmlvdXMgYGZpbmRfZmFsbGJhY2tgLlxuXG5SaWdodCwgdGltZSB0byBjaGVjayBpZiBgZmluZF9mYWxsYmFja2AgaXMgc3RhdGljLiBZZXMsIGl0J3Mgc3RhdGljLiBGaW5lLiBBbmQgYG5iZF9zZXRfc2l6ZWAgaXMgc3RhdGljLiBgbmJkX2FkZF9zb2NrZXRgIGlzIHN0YXRpYy4gQW5kIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYWxzbyBzdGF0aWMuIEZpbmFsbHksIGBfX25iZF9pb2N0bGAgaXMgc3RhdGljIGFzIHdlbGwuXG5cbkhtbSwgYnV0IHdhaXQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHRlbGxpbmcgbWUgc29tZXRoaW5nOiBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cIiBPa2F5LCBzbywgYWxsIHRoZXNlIGZ1bmN0aW9ucyBJIGNoZWNrZWQgYXJlIHN0YXRpYy4uLiB0aGF0J3MgYSBjbHVlLiBJIG5lZWQgdG8gbm93IGdvIGh1bnRpbmcgZm9yIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbmJkLmNgLiBJIGhhdmUgYSBmZWVsaW5nIEknbSBnb2luZyB0byBmaW5kIHRoZSByZWFsIEFQSSBlbnRyeSBwb2ludHMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDgsIk91dHB1dFRva2VucyI6NjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6NDAuMTkzOTc3NTE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY1NTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZHxzdHJ1Y3QgW2EtekEtWjAtOV9dKyBcXFxcKikgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xNzA9c3RhdGljIGludCBwYXJ0X3NoaWZ0O1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcxLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcyOnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MzpzdGF0aWMgdm9pZCBuYmRfZGV2X2RiZ19jbG9zZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NDpzdGF0aWMgdm9pZCBuYmRfY29uZmlnX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NTpzdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc2OnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc3OnN0YXRpYyB2b2lkIG5iZF9kZWFkX2xpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc4OnN0YXRpYyB2b2lkIG5iZF9kaXNjb25uZWN0X2FuZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzktXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xODA9c3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICpuYmRfdG9fZGV2KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4NC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4NTpzdGF0aWMgdm9pZCBuYmRfcmVxdWV1ZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYmFja2VuZF9hdHRyID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjU6c3RhdGljIHZvaWQgbmJkX2Rldl9yZW1vdmUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI4Mi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI4MzpzdGF0aWMgdm9pZCBuYmRfZGV2X3JlbW92ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI4NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI4Ny1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI4ODpzdGF0aWMgdm9pZCBuYmRfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yODkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yOTktXFxuZHJpdmVycy9ibG9jay9uYmQuYzozMDA6c3RhdGljIGludCBuYmRfZGlzY29ubmVjdGVkKHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzozMDY6c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzA3LVxcdFxcdFxcdFxcdGludCBub3RpZnkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTMzNC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjMzNTpzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM2LVxcdFxcdFxcdGJvb2wgZnJlZXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zOTItXFxuZHJpdmVycy9ibG9jay9uYmQuYzozOTM6c3RhdGljIHZvaWQgbmJkX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zOTQte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy00MDUtICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzo0MDY6c3RhdGljIHZvaWQgc29ja19zaHV0ZG93bihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNDA3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9NDU5PXN0YXRpYyBlbnVtIGJsa19laF90aW1lcl9yZXR1cm4gbmJkX3htaXRfdGltZW91dChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy01NTgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzo1NTk6c3RhdGljIGludCBfX3NvY2tfeG1pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgc2VuZCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTU2MC1cXHRcXHQgICAgICAgc3RydWN0IGlvdl9pdGVyICppdGVyLCBpbnQgbXNnX2ZsYWdzLCBpbnQgKnNlbnQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTYwNi0gKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjYwNzpzdGF0aWMgaW50IHNvY2tfeG1pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgsIGludCBzZW5kLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjA4LVxcdFxcdCAgICAgc3RydWN0IGlvdl9pdGVyICppdGVyLCBpbnQgbXNnX2ZsYWdzLCBpbnQgKnNlbnQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTYyMD1zdGF0aWMgaW5saW5lIGludCB3YXNfaW50ZXJydXB0ZWQoaW50IHJlc3VsdClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjMyLSAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6NjMzOnN0YXRpYyB2b2lkIG5iZF9zY2hlZF9wZW5kaW5nX3dvcmsoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTYzNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz02NTM9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfc2VuZF9jbWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9jbWQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODE1LS8qIGhhbmRsZSBwYXJ0aWFsIHNlbmRpbmcgKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjgxNjpzdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay9uYmQuYy04MTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy04NTItXFxuZHJpdmVycy9ibG9jay9uYmQuYzo4NTM6c3RhdGljIGludCBuYmRfcmVhZF9yZXBseShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODU0LVxcdFxcdFxcdCAgc3RydWN0IG5iZF9yZXBseSAqcmVwbHkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTg4MD1zdGF0aWMgc3RydWN0IG5iZF9jbWQgKm5iZF9oYW5kbGVfcmVwbHkoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4LFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy05NzctXFxuZHJpdmVycy9ibG9jay9uYmQuYzo5Nzg6c3RhdGljIHZvaWQgcmVjdl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTk3OS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEwMzg9c3RhdGljIGJvb2wgbmJkX2NsZWFyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDU3LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTA1ODpzdGF0aWMgdm9pZCBuYmRfY2xlYXJfcXVlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDU5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTA2NS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEwNjY6c3RhdGljIGludCBmaW5kX2ZhbGxiYWNrKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEwNjcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDk5LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTEwMDpzdGF0aWMgaW50IHdhaXRfZm9yX3JlY29ubmVjdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTEwMS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyNDI9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBuYmRfc2xvY2tfa2V5WzNdO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI0My1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyNDQ6c3RhdGljIHZvaWQgbmJkX3JlY2xhc3NpZnlfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjQ1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTI3Mz1zdGF0aWMgaW5saW5lIHZvaWQgbmJkX3JlY2xhc3NpZnlfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spIHt9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNzUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMjc2OnN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjc3LVxcdFxcdFxcdCAgYm9vbCBuZXRsaW5rKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzQ2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTM0NzpzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM0OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0MDgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNDA5OnN0YXRpYyB2b2lkIG5iZF9iZGV2X3Jlc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDEwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQxNS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0MTY6c3RhdGljIHZvaWQgbmJkX3BhcnNlX2ZsYWdzKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDE3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQyMy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0MjQ6c3RhdGljIHZvaWQgc2VuZF9kaXNjb25uZWN0cyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQyNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NDctXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNDQ4OnN0YXRpYyBpbnQgbmJkX2Rpc2Nvbm5lY3Qoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NDkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDU4LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ1OTpzdGF0aWMgdm9pZCBuYmRfY2xlYXJfc29jayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ2MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NjUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNDY2OnN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDY3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTUwNC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE1MDU6c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTA2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTU3Ni1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE1Nzc6c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTc4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYwNi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MDc6c3RhdGljIHZvaWQgbmJkX2NsZWFyX3NvY2tfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MDgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjE2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYxNzpzdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYxOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MjYtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjb25maWdfbG9jayBoZWxkICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjI3OnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MjgtXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjczLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY3NDpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjc1LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA0OnN0YXRpYyBpbnQgbmJkX2FsbG9jX2FuZF9pbml0X2NvbmZpZyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MzgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzM5OnN0YXRpYyBpbnQgbmJkX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3NDAte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzgxLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc4MjpzdGF0aWMgdm9pZCBuYmRfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3ODMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzkzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc5NDpzdGF0aWMgdm9pZCBuYmRfZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc5NS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTItXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEzOnN0YXRpYyBpbnQgbmJkX2RiZ190YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MjM9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfdGFza3MpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgyNC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4MjU6c3RhdGljIGludCBuYmRfZGJnX2ZsYWdzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODI2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTg1Mj1ERUZJTkVfU0hPV19BVFRSSUJVVEUobmJkX2RiZ19mbGFncyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODUzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTg1NDpzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4NTUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODc4LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTg3OTpzdGF0aWMgdm9pZCBuYmRfZGV2X2RiZ19jbG9zZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg4MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4ODMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODg0OnN0YXRpYyBpbnQgbmJkX2RiZ19pbml0KHZvaWQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODg1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg5Ni1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4OTc6c3RhdGljIHZvaWQgbmJkX2RiZ19jbG9zZSh2b2lkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg5OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MDMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTA0OnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkwNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MDgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTA5OnN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTEwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkxMi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MTM6c3RhdGljIGludCBuYmRfZGJnX2luaXQodm9pZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MTQte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTE3LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTkxODpzdGF0aWMgdm9pZCBuYmRfZGJnX2Nsb3NlKHZvaWQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTE5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkyMy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MjQ6c3RhdGljIGludCBuYmRfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTI1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaGN0eF9pZHgsIGludCBudW1hX25vZGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIwODY9bmJkX2RldmljZV9wb2xpY3lbTkJEX0RFVklDRV9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMDkwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA5MTpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMDkyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjExMi0gKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxMTM6c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxMTQtXFx0XFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNTUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTU2OnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2MTpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzE4LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjMxOTpzdGF0aWMgdm9pZCBuYmRfZGlzY29ubmVjdF9hbmRfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzIwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjMzOS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNDA6c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzQxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM3NC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNzU6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzc2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM4OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzODk6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM5MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MzY9TU9EVUxFX0FMSUFTX0dFTkxfRkFNSUxZKE5CRF9HRU5MX0ZBTUlMWV9OQU1FKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MzctXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTM4OnN0YXRpYyBpbnQgcG9wdWxhdGVfbmJkX3N0YXR1cyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU2Ni1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1Njc6c3RhdGljIGludCBzdGF0dXNfY2IoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTY4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU3Mi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1NzM6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NzQte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjMyLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjYzMzpzdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjM0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY1Ni1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI2NTc6c3RhdGljIHZvaWQgbmJkX21jYXN0X2luZGV4KGludCBpbmRleClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NTgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjgwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY4MTpzdGF0aWMgdm9pZCBuYmRfZGVhZF9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2ODk9c3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc0My1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NDQ6c3RhdGljIGludCBuYmRfZXhpdF9jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTowNTo0MC4yNTU2NDA0NzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg5NzM5NDA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBuYmQuY2AgTW9kdWxlIGZvciBBUEkgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmJkLmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyBzb21ldGhpbmc6IGFwYXJ0IGZyb20gdGhlIG1vZHVsZSBpbml0IGFuZCBleGl0IGZ1bmN0aW9ucyAoYG5iZF9pbml0YCBhbmQgYG5iZF9jbGVhbnVwYCksIGV2ZXJ5dGhpbmcgZWxzZSBzZWVtcyB0byBiZSBzdGF0aWMuIEhtbSwgdGhhdCdzIG5vdCBxdWl0ZSB3aGF0IHRoZSBndWlkZWxpbmVzIHdlcmUgc3VnZ2VzdGluZywgaXMgaXQ/IFdlJ3JlIHN1cHBvc2VkIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gQnV0LCBzaW5jZSBldmVyeXRoaW5nICppcyogc3RhdGljIGhlcmUsIGl0IGxvb2tzIGxpa2Ugd2UganVzdCBuZWVkIHRvIGxpc3QgdGhlIHN0YXRpYyBvbmVzIHRoYXQgd2Ugd2FudCB0byBleHBvc2UuXG5cbkxldCdzIHNlZS4uLiBiYXNlZCBvbiB0aGUgY29kZSwgaGVyZSdzIHdoYXQgSSdtIGxpc3RpbmcgYXMgY2FuZGlkYXRlIEFQSSBlbnRyeXBvaW50czpcblxuKiAgIGBuYmRfYWRkX3NvY2tldGBcbiogICBgbmJkX2dlbmxfY29ubmVjdGBcbiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgXG4qICAgYF9fbmJkX2lvY3RsYFxuKiAgIGBuYmRfc2V0X3NpemVgXG4qICAgYGZpbmRfZmFsbGJhY2tgXG4qICAgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2BcblxuQWxyaWdodCwgZmlyc3QgdGhpbmcncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbmJkX2FkZF9zb2NrZXRgIGlzbid0IG1hZ2ljYWxseSBiZWluZyBpbmxpbmVkLiBOb3BlLCBubyBgaW5saW5lYCBrZXl3b3JkIHRoZXJlLiBHb29kLCB0aGF0J3Mgb25lIG9mZiB0aGUgbGlzdC5cblxuTm93LCBsZXQncyBjb25zaWRlciB3aGF0IGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zICpkb2VzKi4gYG5iZF9nZW5sX2Nvbm5lY3RgIGlzIGFuIG9idmlvdXMgb25lIC0gdGhhdCdzIG91ciBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldGxpbmsgY29ubmVjdGlvbi4gU2FtZSBkZWFsIHdpdGggYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gQW5kIGBfX25iZF9pb2N0bGAuLi4gdGhhdCdzIG91ciBpb2N0bCBlbnRyeSBwb2ludCwgbWFraW5nIGl0IGFub3RoZXIgY3J1Y2lhbCBvbmUuXG5cbk5vdyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTkJEYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBsb29rIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjA1OjQ1LjE1MzAzODIzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5MzgyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6NDUuMjE0OTg3MzE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDg0NzI4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBCTEtfREVWX05CRGAgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIGNyeXN0YWwgY2xlYXIgb24gdGhlIGZ1bGwgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBvZiBgQkxLX0RFVl9OQkRgLiBObyBhc3N1bXB0aW9ucywgbm8gc2hvcnRjdXRzLiBNeSBtZW50YWwgbW9kZWwgbmVlZHMgdG8gYmUgcm9jayBzb2xpZC4gSSdtIGdvaW5nIHRvIHJldmlzaXQgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiwgdGhlICpjb21wbGV0ZSogZGVmaW5pdGlvbiwgbm90IGp1c3QgYSBzbmlwcGV0LiBJIHdhbnQgdG8gc2NydXRpbml6ZSBldmVyeSBkZXRhaWwsIGV2ZXJ5IG51YW5jZSwgZXZlcnkgcG90ZW50aWFsIGVkZ2UgY2FzZSBhc3NvY2lhdGVkIHdpdGggdGhpcy4gSSBrbm93IHRoZSBiYXNpYyBjb25jZXB0LCBzdXJlLCBuZXR3b3JrIGJsb2NrIGRldmljZSwgZ290IGl0LiBCdXQsIEknbSBhaW1pbmcgZm9yIGEgZGVlcCB1bmRlcnN0YW5kaW5nLCB3aGljaCBkZW1hbmRzIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBmb3JtYWwgc3BlY2lmaWNhdGlvbi4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGhpZGRlbiBhc3N1bXB0aW9ucyBvciBsaW1pdGF0aW9ucyB0aGF0IEkgbWF5IG5vdCBoYXZlIGNvbnNpZGVyZWQgYmVmb3JlLCB0aGF0IGNvdWxkIGJpdGUgbWUgbGF0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgYW5kIGVuc3VyZSB0aGF0IEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgYW55IG9mIG15IGN1cnJlbnQgb3IgcGxhbm5lZCBwcm9qZWN0cy4gVGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gbGV0J3MgZ2V0IGludG8gdGhvc2UgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTowNTo0OC43NjM0NjI3MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTY6XFx0Y29uZmlnIEJMS19ERVZfTkJEXFxuIDE5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMTk4OlxcdFxcdGRlcGVuZHMgb24gTkVUXFxuIDE5OTpcXHRcXHRoZWxwXFxuIDIwMDpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3VyIGNvbXB1dGVyIHRvIGJlIGEgY2xpZW50IGZvciBuZXR3b3JrXFxuIDIwMTpcXHRcXHQgIGJsb2NrIGRldmljZXMsIGkuZS4gaXQgd2lsbCBiZSBhYmxlIHRvIHVzZSBibG9jayBkZXZpY2VzIGV4cG9ydGVkIGJ5XFxuIDIwMjpcXHRcXHQgIHNlcnZlcnMgKG1vdW50IGZpbGUgc3lzdGVtcyBvbiB0aGVtIGV0Yy4pLiBDb21tdW5pY2F0aW9uIGJldHdlZW5cXG4gMjAzOlxcdFxcdCAgY2xpZW50IGFuZCBzZXJ2ZXIgd29ya3Mgb3ZlciBUQ1AvSVAgbmV0d29ya2luZywgYnV0IHRvIHRoZSBjbGllbnRcXG4gMjA0OlxcdFxcdCAgcHJvZ3JhbSB0aGlzIGlzIGhpZGRlbjogaXQgbG9va3MgbGlrZSBhIHJlZ3VsYXIgbG9jYWwgZmlsZSBhY2Nlc3MgdG9cXG4gMjA1OlxcdFxcdCAgYSBibG9jayBkZXZpY2Ugc3BlY2lhbCBmaWxlIHN1Y2ggYXMgL2Rldi9uZDAuXFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdCAgTmV0d29yayBibG9jayBkZXZpY2VzIGFsc28gYWxsb3dzIHlvdSB0byBydW4gYSBibG9jay1kZXZpY2UgaW5cXG4gMjA4OlxcdFxcdCAgdXNlcmxhbmQgKG1ha2luZyBzZXJ2ZXIgYW5kIGNsaWVudCBwaHlzaWNhbGx5IHRoZSBzYW1lIGNvbXB1dGVyLFxcbiAyMDk6XFx0XFx0ICBjb21tdW5pY2F0aW5nIHVzaW5nIHRoZSBsb29wYmFjayBuZXR3b3JrIGRldmljZSkuXFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdCAgUmVhZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L25iZC5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLFxcbiAyMTI6XFx0XFx0ICBlc3BlY2lhbGx5IGFib3V0IHdoZXJlIHRvIGZpbmQgdGhlIHNlcnZlciBjb2RlLCB3aGljaCBydW5zIGluIHVzZXJcXG4gMjEzOlxcdFxcdCAgc3BhY2UgYW5kIGRvZXMgbm90IG5lZWQgc3BlY2lhbCBrZXJuZWwgc3VwcG9ydC5cXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0ICBOb3RlIHRoYXQgdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtcyBORlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6MDU6NDguNzYzNTc0MzgzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNTI0MzU5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyJ3MgQXR0YWNrIFN1cmZhY2UqKlxuXG5Pa2F5LCBzbyB0aGUgc2NvcGUgaGVyZSBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBoaW5nZXMgb24gYE5FVGAuICBMb29rcyBsaWtlIGBCTEtfREVWX05CRGAgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdsbCBuZWVkIHRvIGFjY291bnQgZm9yLiBHb29kLCBrZWVwcyB0aGluZ3Mgc2ltcGxlLiBKdXN0IGRvaW5nIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGJlIHN1cmUuLi4geWVwLCBgTkVUYCBpcyBzdGFuZGFyZC4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuICBNeSBpbml0aWFsIHRhcmdldCBsaXN0IGxvb2tzIGxpa2U6XG5cbiogICBgbmJkX2FkZF9zb2NrZXRgXG4qICAgYG5iZF9nZW5sX2Nvbm5lY3RgXG4qICAgYG5iZF9nZW5sX3JlY29uZmlndXJlYFxuKiAgIGBfX25iZF9pb2N0bGBcbiogICBgbmJkX3NldF9zaXplYFxuKiAgIGBmaW5kX2ZhbGxiYWNrYFxuKiAgIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgXG5cbk5vdywgbGV0J3MgcXVpY2tseSBjaGVjayB3aGV0aGVyIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgIGlzIHN0YXRpYy4uLiBZZXAsIGl0IGlzLiBBbmQgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmA/IEFsc28gc3RhdGljLiAgT2theSwgdGhhdCdzIGdvb2QgaW5mb3JtYXRpb24gZm9yIGZ1enppbmcsIGhlbHBzIHdpdGggbmFycm93aW5nLlxuXG5TbywgcmVmaW5pbmcgdGhhdCBsaXN0IGFnYWluLCBqdXN0IHRvIG1ha2Ugc3VyZTpcblxuKiAgIGBuYmRfYWRkX3NvY2tldGBcbiogICBgbmJkX2dlbmxfY29ubmVjdGBcbiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgXG4qICAgYF9fbmJkX2lvY3RsYFxuKiAgIGBuYmRfc2V0X3NpemVgXG4qICAgYGZpbmRfZmFsbGJhY2tgXG4qICAgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2BcblxuU3RpbGwgbm8gb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyB0byBjb25zaWRlcj8gR29vZC4gRG91YmxlLWNoZWNraW5nLi4uIE5vcGUuXG5cblNvLCB0aGUgcmVhc29uaW5nIGhlcmUgaXMgcHJldHR5IGNsZWFyOiBUaGlzIHBhdGNoIGlzIHJld29ya2luZyB0aGUgTkJEIGRyaXZlciwgZml4aW5nIHNvY2tldCBoYW5kbGluZywgaGFyZHdhcmUgcXVldWVzLCBhbmQgdGhlIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGFyZSBhbGwgY29yZSBOQkQgZnVuY3Rpb25zIHJlYWNoYWJsZSB2aWEgaW9jdGwgKmFuZCogbmV0bGluay4gR2l2ZW4gdGhhdCwgdGhleSdyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIHRvIHByb2JlIGZvciB2dWxuZXJhYmlsaXRpZXMuIFRoYXQgc291bmRzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1MywiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTowNTo1Ni4xMTYwMTQ4ODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzkyNjY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfYWRkX3NvY2tldFwiLFxuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgICBcIl9fbmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfc2V0X3NpemVcIixcbiAgICBcImZpbmRfZmFsbGJhY2tcIixcbiAgICBcIm5iZF9nZW5sX2ZvcmVhY2hfc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IHNvY2tldCBoYW5kbGluZywgYWRkIGEgbW9kdWxlIHBhcmFtZXRlciBmb3IgaGFyZHdhcmUgcXVldWVzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBzb2NrZXQgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBOQkQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIGlvY3RsIGFuZCBuZXRsaW5rLCBtYWtpbmcgdGhlbSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2FkZF9zb2NrZXRcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJfX25iZF9pb2N0bFwiLFxuICAgIFwibmJkX3NldF9zaXplXCIsXG4gICAgXCJmaW5kX2ZhbGxiYWNrXCIsXG4gICAgXCJuYmRfZ2VubF9mb3JlYWNoX3NvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBzb2NrZXQgaGFuZGxpbmcsIGFkZCBhIG1vZHVsZSBwYXJhbWV0ZXIgZm9yIGhhcmR3YXJlIHF1ZXVlcywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgc29ja2V0IHBhcnNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgTkJEIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBpb2N0bCBhbmQgbmV0bGluaywgbWFraW5nIHRoZW0gZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqpmdf[1] Phase: Succeeded StartedAt: 2026-07-27 19:06:11 +0000 UTC FinishedAt: 2026-07-27 19:06:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 19:06:11 +0000 UTC FinishedAt: 2026-07-27 19:06:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2] Phase: Succeeded StartedAt: 2026-07-27 19:06:12 +0000 UTC FinishedAt: 2026-07-27 23:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 19:06:14 +0000 UTC FinishedAt: 2026-07-27 23:40:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","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-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 19:06:14 +0000 UTC FinishedAt: 2026-07-27 19:06:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 19:06:14 +0000 UTC FinishedAt: 2026-07-27 19:06:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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-workflowqpmdf/series-workflowqpmdf-convert-artifact-2370985750/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 19:06:28 +0000 UTC FinishedAt: 2026-07-27 19:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 19:06:28 +0000 UTC FinishedAt: 2026-07-27 19:50:03 +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:*7729f4d8-bf40-44df-bf86-e5c9827fa145,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-workflowqpmdf/series-workflowqpmdf-convert-artifact-2370985750/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": "5ddf37f5-0587-4130-8b38-62fc5523a8f0", "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-workflowqpmdf/series-workflowqpmdf-build-action-3056438956/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 19:06:28 +0000 UTC FinishedAt: 2026-07-27 19:49:53 +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:*7729f4d8-bf40-44df-bf86-e5c9827fa145,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-workflowqpmdf/series-workflowqpmdf-convert-artifact-2370985750/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": "5ddf37f5-0587-4130-8b38-62fc5523a8f0", "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-workflowqpmdf/series-workflowqpmdf-build-action-3056438956/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 19:50:03 +0000 UTC FinishedAt: 2026-07-27 19:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 19:50:03 +0000 UTC FinishedAt: 2026-07-27 19:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 19:50:03 +0000 UTC FinishedAt: 2026-07-27 19:50:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 19:50:03 +0000 UTC FinishedAt: 2026-07-27 19:50:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","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-workflowqpmdf/series-workflowqpmdf-convert-artifact-2708495017/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 19:50:25 +0000 UTC FinishedAt: 2026-07-27 19:52:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 19:50:25 +0000 UTC FinishedAt: 2026-07-27 19:52:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ddf37f5-0587-4130-8b38-62fc5523a8f0,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-workflowqpmdf/series-workflowqpmdf-build-action-3056438956/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-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 19:52:32 +0000 UTC FinishedAt: 2026-07-27 19:52:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 19:52:32 +0000 UTC FinishedAt: 2026-07-27 19:52:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 19:52:32 +0000 UTC FinishedAt: 2026-07-27 20:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 19:52:32 +0000 UTC FinishedAt: 2026-07-27 20:35:31 +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:*7729f4d8-bf40-44df-bf86-e5c9827fa145,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-workflowqpmdf/series-workflowqpmdf-convert-artifact-2708495017/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": "ac537edf-3295-413c-9ffd-c0f1c6852bff", "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-workflowqpmdf/series-workflowqpmdf-build-action-269983621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 19:52:32 +0000 UTC FinishedAt: 2026-07-27 20:35:11 +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:*7729f4d8-bf40-44df-bf86-e5c9827fa145,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-workflowqpmdf/series-workflowqpmdf-convert-artifact-2708495017/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": "ac537edf-3295-413c-9ffd-c0f1c6852bff", "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-workflowqpmdf/series-workflowqpmdf-build-action-269983621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 20:35:31 +0000 UTC FinishedAt: 2026-07-27 20:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 20:35:31 +0000 UTC FinishedAt: 2026-07-27 20:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 20:35:31 +0000 UTC FinishedAt: 2026-07-27 20:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 20:35:31 +0000 UTC FinishedAt: 2026-07-27 20:37:04 +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:*ac537edf-3295-413c-9ffd-c0f1c6852bff,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-workflowqpmdf/series-workflowqpmdf-build-action-269983621/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-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 20:37:14 +0000 UTC FinishedAt: 2026-07-27 23:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 20:37:14 +0000 UTC FinishedAt: 2026-07-27 23:40:44 +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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"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:*5ddf37f5-0587-4130-8b38-62fc5523a8f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ac537edf-3295-413c-9ffd-c0f1c6852bff,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-workflowqpmdf/series-workflowqpmdf-build-action-3056438956/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-workflowqpmdf/series-workflowqpmdf-build-action-269983621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 20:37:14 +0000 UTC FinishedAt: 2026-07-27 20:37:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 20:37:14 +0000 UTC FinishedAt: 2026-07-27 20:37:47 +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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"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-workflowqpmdf/series-workflowqpmdf-convert-artifact-1460321278/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 20:37:14 +0000 UTC FinishedAt: 2026-07-27 20:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 20:37:14 +0000 UTC FinishedAt: 2026-07-27 20:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 20:37:14 +0000 UTC FinishedAt: 2026-07-27 20:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 20:37:54 +0000 UTC FinishedAt: 2026-07-27 23:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpmdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"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":["nbd_add_socket","nbd_genl_connect","nbd_genl_reconfigure","__nbd_ioctl","nbd_set_size","find_fallback","nbd_genl_foreach_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7791570bac6cd0c740fd63568f0f3811bc8ec7ab","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"d076665b-3e37-45b5-be1b-abc25ebbeeb1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 20:37:54 +0000 UTC FinishedAt: 2026-07-27 23:40:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ddf37f5-0587-4130-8b38-62fc5523a8f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ac537edf-3295-413c-9ffd-c0f1c6852bff,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-workflowqpmdf/series-workflowqpmdf-build-action-3056438956/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-workflowqpmdf/series-workflowqpmdf-build-action-269983621/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-workflowqpmdf/series-workflowqpmdf-convert-artifact-1460321278/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,}