Name: series-workflowbxl9k Phase: Failed StartedAt: 2026-09-12 07:05:05 +0000 UTC FinishedAt: 2026-09-12 07:54:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxl9k[0] Phase: Succeeded StartedAt: 2026-09-12 07:05:05 +0000 UTC FinishedAt: 2026-09-12 07:54:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxl9k[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 07:05:05 +0000 UTC FinishedAt: 2026-09-12 07:54:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgKGEgcXVhZC1wb3J0IDIuNUdicHMgUEhZKSBpbiBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMsIERUIGJpbmRpbmdzLCBhbmQgYSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpbiBwaHktYzQ1LmMgd2hpY2ggaXMgb25seSBpbnZva2VkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLiBUaGUgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBoYXJkd2FyZSAoUEhZIElEIDB4NGY1MWU4YjgpIG9uIGFuIE1ESU8gYnVzIGFuZCByZXF1aXJlcyBEZXZpY2UgVHJlZSBldGhlcm5ldC1waHktcGFja2FnZSBjb25maWd1cmF0aW9uLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgb3IgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL2FtZDY0IHZpcnR1YWwgZnV6emluZyBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgYWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBkN2UyNWFiYWZmNjUyN2M0NGY2YjY5Njg3MWQzYTc0N2VkOWZkMjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAwNzo1Mjo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTNlOWY3NjU0MDRhM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcbkBAIC0wLDAgJiM0MzsxLDU5IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogTW90b3JDb21tIFlUODgyNCBFdGhlcm5ldCBQSFlcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gS3lsZSBTd2l0Y2ggXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIGlzIGEgUEhZIHBhY2thZ2Ugb2YgNCBQSFlzLlxuJiM0MztcbiYjNDM7JHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGVudW06XG4mIzQzOyAgICAgIC0gbW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7ICAtIHBoeS1tb2RlXG4mIzQzOyAgLSByZWdcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4mIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2M5XHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgcGh5LW1vZGUgPSBcJiMzNDtpbnRlcm5hbFwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANSB7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDYge1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNlx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzdcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuaW5kZXggYjRlZjkyN2ZkNGE2Ny4uMWRkODBlMDZlMjM3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTM2MSw5ICYjNDM7MzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZXG4gXG4gY29uZmlnIE1PVE9SQ09NTV9QSFlcbiBcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBQSFlzXCYjMzQ7XG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4gXHRoZWxwXG4gXHQgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy5cbi1cdCAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMuXG4mIzQzO1x0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS5cbiBcbiBjb25maWcgTkFUSU9OQUxfUEhZXG4gXHR0cmlzdGF0ZSBcJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXNcJiMzNDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbmluZGV4IDkwYTRmODZmMjc1OGIuLjdmOTQ5YWI1M2I1NDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuQEAgLTEsMjQgJiM0MzsxLDI5IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzO1xuIC8qXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxuJiM0MzsgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cbiAgKlxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXHUwMDNlXG4gICogQXV0aG9yOiBGcmFuayBcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cdTAwM2VcbiYjNDM7ICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BoeWxpYi5oXCYjMzQ7XG4mIzQzO1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbiYjNDM7I2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0zMCw2ICYjNDM7MzUsMTggQEBcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICovXG4gXG4mIzQzOy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuJiM0MzsgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRVU1hHTUlJIFJlZ2lzdGVyIHNwYWNlXG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogfFx0VVRQIE1JSVx0XHRcdHxcdFVTWEdNSUkgTUlJXHQgICAgICAgIHxcbiYjNDM7ICogfFx0VVRQIE1NRFx0XHRcdHxcdFx0XHRcdHxcbiYjNDM7ICogfFx0VVRQIEV4dGVuZGVkXHRcdHxcdFVTWEdNSUkgRXh0ZW5kZWRcdHxcbiYjNDM7ICogfFx0VVRQIFRvcCBFeHRlbmRlZFx0fFx0VVNYR01JSSBUb3AgRXh0ZW5kZWRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKiB8XHRcdFx0Q29tbW9uIFRvcCBFeHRlbmRlZFx0XHRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKi9cbiYjNDM7XG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cbiBcbiAvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXG5AQCAtMzgxLDYgJiM0MzszOTgsMTUgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRVx0XHQoMHgxKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdDB4MVxuJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUxcdFx0MHgwXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLXHRcdEdFTk1BU0soMywgMClcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXHRcdFx0QklUKDEzKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcdFx0KDB4NylcbiYjNDM7XG4gc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdC8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsXG4gXHQgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHNcbkBAIC0zOTksNiAmIzQzOzQyNSwxMiBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0dTggcmVnX3BhZ2U7XG4gfTtcbiBcbiYjNDM7c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7XG4mIzQzO1x0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xuJiM0MztcdC8qIHNoYXJlZF9sb2NrIHVzZWQgdG8gVVRQcyBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqL1xuJiM0MztcdHN0cnVjdCBtdXRleCBzaGFyZWRfbG9jaztcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzNyw2ICYjNDM7NDY5LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlXG4mIzQzOyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuJiM0MztcdFx0XHQgICAgICAgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soKSAtIHdyaXRlIHBhZ2UgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4mIzQzO1x0cmV0IHw9IChwYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTYyNiwxMSAmIzQzOzcyMiwxMDU4IEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXG4gXHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxuIFx0XHRcdFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9cbiYjNDM7ICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvbGRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9sZF9wYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcGFnZTogUmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0dTE2IGRhdGE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4mIzQzO1x0ZGF0YSA9IG9sZF9wYWdlIFx1MDAyNiAofllUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuJiM0MztcdGRhdGEgfD0gcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqL1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUsIEJNQ1JfSVNPTEFURSk7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXG4mIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cbiYjNDM7XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcbiYjNDM7XHRcdFx0ICAgQk1DUl9SRVNFVCBcdTAwMjYgfkJNQ1JfSVNPTEFURSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsIFx1MDAzYyAwKSB8fFxuJiM0MztcdFx0XHRcdCEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQ1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gdmFsO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoKSAtIGNhbGxlZCB0byBkbyBzdG9yZSB3b3JraW5nIHN0YXR1c1xuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmV0OiBvcGVyYXRpb24mIzM5O3MgcmV0dXJuIGNvZGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0LyogY29uZmlndXJlIG5vcm1hbCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRyID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXQgPSByO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO3JldHJ5OlxuJiM0MztcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6YXRpb24gdXRwICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogZW5hYmxlIG5pYmJsZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBFTUMgUkUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDAwNmUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4mIzQzO1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XHQvKiByZXNldCAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4mIzQzO1x0XHRcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4mIzQzO1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4mIzQzO1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZTpcbiYjNDM7XHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX25vcm1hbDpcbiYjNDM7XHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHNkcyBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbiYjNDM7XHRpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wO1xuJiM0MztcdGludCByZXQgPSAtMTtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogcmVhZCBlZnVzZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2YWxfMSA9IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZhbF8yID0gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzMgPSByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBhbmFsb2cgQ0RSICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBWQ08gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM5LCAweDAwYzApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbiYjNDM7XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNykgfCBCSVQoNikpKSBcdTAwM2VcdTAwM2UgNjtcbiYjNDM7XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyOSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xuJiM0MztcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkpIFx1MDAzZVx1MDAzZSA0O1xuJiM0MztcdHJldCB8PSB0bXA7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDJiKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbiYjNDM7XHR0bXAgPSAodmFsXzMgXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcbiYjNDM7XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NTQsIDB4MGYxNCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmRlcyBMRE8gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xuJiM0MztcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpIFx1MDAzZVx1MDAzZSAyO1xuJiM0MztcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA0KTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7XG4mIzQzO1x0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgXHUwMDNlXHUwMDNlIDU7XG4mIzQzO1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDgsIDB4N2MwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwZCwgMHgwNjA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzIFx1MDAzZSA4ICovXG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLO1xuJiM0MztcdHJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xuJiM0MztcdHJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogcmVzZXQgc2VyZGVzICovXG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuJiM0MztcdFx0XHQgICBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiBwb2xsIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2s7IF9fcGh5X3JlYWQgdGFrZXMgbm8gbG9jayAqL1xuJiM0MztcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcdTAwM2MgMCkgfHxcbiYjNDM7XHRcdFx0XHQhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0NTAwMDAsIDYwMDAwMCwgdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHZhbDtcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XHRpbnQgciA9IDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzU5LCAweDIxNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzQwLCAweDMwMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAwIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMCB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMCB0ZW1wYXRlIE1BVSovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY2LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY5LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogRU1DIFJFKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGMsIDB4NDFhMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0LyogcmVzZXQgKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuJiM0MztcdFx0XHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuJiM0MztcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlOlxuJiM0MztcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfbm9ybWFsOlxuJiM0MztcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiBcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcbiBcbi1lcnJfcmVzdG9yZV9wYWdlOlxuLVx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuQEAgLTMxMDQsNiAmIzQzOzQyNDcsNDI5IEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eVxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgbGluayA9IDA7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0bGluayA9ICEhKHJldCBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuJiM0MztcbiYjNDM7XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuJiM0MztcdHJldHVybiBsaW5rO1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBsaW5rID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbiYjNDM7XHRcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9scGEocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSByZXQ7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSB2YWwgXHUwMDI2IFlUUEhZX1NTUl9MSU5LO1xuJiM0MztcdGlmIChsaW5rKVxuJiM0MztcdFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xuJiM0MztcbiYjNDM7XHRpZiAobGluaykge1xuJiM0MztcdFx0aWYgKHBoeWRldi1cdTAwM2VsaW5rID09IDApXG4mIzQzO1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmsgdXBcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAxO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAocGh5ZGV2LVx1MDAzZWxpbmsgPT0gMSlcbiYjNDM7XHRcdFx0cGh5ZGV2X2RiZyhwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztyZXRyeTpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHBoeV9jdHJsID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbiYjNDM7XHRcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbiYjNDM7XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuJiM0MztcdFx0XHRcdCAgICAgcGh5X2N0cmwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrYWdlIGZvciBwaHk4ODI0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xuJiM0MztcdGNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbiYjNDM7XHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcJiMzNDtwaHktbW9kZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNmludGVyZmFjZV9tb2RlX25hbWUpKSB7XG4mIzQzO1x0XHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcbiYjNDM7XHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpKSkge1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXG4mIzQzO1x0XHRcdFx0KGludGVyZmFjZV9tb2RlX25hbWUsXG4mIzQzO1x0XHRcdFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCYjMzQ7JXMsIHBoeS1tb2RlIG1pc3NpbmcgaW4gRFRTLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIF9fZnVuY19fKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Byb2JlKCkgLSBwaHk4ODI0IHByb2JlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuIFx0e1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG5AQCAtMzE5MCwxMyAmIzQzOzQ3NTYsMjkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuIFx0XHQuc3VzcGVuZFx0XHQ9IHl0ODgyMV9zdXNwZW5kLFxuIFx0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjFfcmVzdW1lLFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXG4mIzQzO1x0XHQubmFtZVx0XHRcdD0gXCYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFwmIzM0OyxcbiYjNDM7XHRcdC5nZXRfZmVhdHVyZXNcdFx0PSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLFxuJiM0MztcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxuJiM0MztcdFx0LnByb2JlXHRcdCAgICAgICAgPSB5dDg4MjRfcHJvYmUsXG4mIzQzO1x0XHQuY29uZmlnX2FuZWdcdFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXG4mIzQzO1x0XHQuYW5lZ19kb25lXHRcdD0geXQ4ODI0X2FuZWdfZG9uZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdFx0XHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbiYjNDM7XHRcdC5zb2Z0X3Jlc2V0XHRcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuc3VzcGVuZFx0XHQ9IHl0ODgyNF9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODI0X3Jlc3VtZSxcbiYjNDM7XHR9LFxuIH07XG4gXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcbiBcbi1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXJcJiMzNDspO1xuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7UGV0ZXIgR2Vpc1wmIzM0Oyk7XG4gTU9EVUxFX0FVVEhPUihcJiMzNDtGcmFua1wmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7S3lsZVwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMjA2LDYgJiM0Mzs0Nzg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxuJiM0MztcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sXG4gXHR7IC8qIHNlbnRpbmVsICovIH1cbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5pbmRleCA4NzA5MjAzMTFmOWEwLi41MjhlM2Y0MTQzMTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuQEAgLTE0MDgsNiAmIzQzOzE0MDgsNjEgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XG4mIzQzOyAqXG4mIzQzOyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIChlLmcuIHJlZ2lzdGVyXG4mIzQzOyAqXHRyZWFkL3dyaXRlIGVycm9yKS5cbiYjNDM7ICovXG4mIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3RybCA9IDA7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodGVzdF9tb2RlKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDM6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDU6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDY6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDc6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsXG4mIzQzO1x0XHRcdCAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xuJiM0MztcbiAvKipcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggM2Q4YWZlNmI3ZjFjNS4uZmI4MjdjYzNjOThmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzU3LDYgJiM0MzsyMzU3LDcgQEAgaW50IGdlbnBoeV9jNDVfbG9vcGJhY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsIGludCBzcGVlZCk7XG4gaW50IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xuJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdFx0XHQgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpO1xuIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5pbmRleCAwNmY0YmMzYzIwYzcxLi44NTc2YTQ4ODc3YzZkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuQEAgLTYzLDYgJiM0Mzs2Myw3IEBAXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcdDEzMFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcdTAwMjYgcG9sYXJpdHkgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXHQxMzFcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREUgMTMyXHQvKiBUZXN0IG1vZGUgY29udHJvbCAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SXHQxMzNcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXG4gXHRcdFx0XHRcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSXHQxNDdcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXG5AQCAtMzIwLDYgJiM0MzszMjEsMTcgQEBcbiAvKiBQTUEgMTBHQkFTRS1SIEZhc3QgUmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRVx0MHgwMDAxXHQvKiBGYXN0IHJldHJhaW4gZW5hYmxlICovXG4gXG4mIzQzOy8qIFBNQSAxMEdCQVNFLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLIDB4RTAwMFx0LyogVGVtcGxhdGUgdGVzdCBtb2RlICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIDB4MDAwMFx0LyogVGVtcGxhdGUgTm9ybWFsICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDIwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMiAweDQwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUyICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMyAweDYwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUzICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDgwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNSAweGEwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU1ICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNiAweGMwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU2ICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweGUwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovXG4mIzQzO1xuIC8qIFBDUyAxMEdCQVNFLVIvLVQgc3RhdHVzIHJlZ2lzdGVyIDEuICovXG4gI2RlZmluZSBNRElPX1BDU18xMEdCUlRfU1RBVDFfQkxLTEtcdDB4MDAwMVx0LyogQmxvY2sgbG9jayBhdHRhaW5lZCAqL1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLCBEVCBiaW5kaW5ncywgYW5kIGEgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gcGh5LWM0NS5jIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBieSB0aGUgWVQ4ODI0IGRyaXZlci4gVGhlIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgKFBIWSBJRCAweDRmNTFlOGI4KSBvbiBhbiBNRElPIGJ1cyBhbmQgcmVxdWlyZXMgRGV2aWNlIFRyZWUgZXRoZXJuZXQtcGh5LXBhY2thZ2UgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9hbWQ2NCB2aXJ0dWFsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIGFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZDdlMjVhYmFmZjY1MjdjNDRmNmI2OTY4NzFkM2E3NDdlZDlmZDIxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMDc6NTI6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjkzZTlmNzY1NDA0YTMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbApAQCAtMCwwICYjNDM7MSw1OSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQomIzQzOyVZQU1MIDEuMgomIzQzOy0tLQomIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogTW90b3JDb21tIFlUODgyNCBFdGhlcm5ldCBQSFkKJiM0MzsKJiM0MzttYWludGFpbmVyczoKJiM0MzsgIC0gS3lsZSBTd2l0Y2ggJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOgomIzQzOyAgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgaXMgYSBQSFkgcGFja2FnZSBvZiA0IFBIWXMuCiYjNDM7CiYjNDM7JHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCMKJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIG1vdG9yY29tbSx5dDg4MjQtcGFja2FnZQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIHBoeS1tb2RlCiYjNDM7ICAtIHJlZwomIzQzOwomIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgIC0gfAomIzQzOyAgICBtZGlvIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHsKJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDttb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2UmIzM0OzsKJiM0MzsgICAgICAgICAgICByZWcgPSAmbHQ7OSZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgcGh5LW1vZGUgPSAmIzM0O2ludGVybmFsJiMzNDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDQgewomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7NCZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANSB7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDs1Jmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzYmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDcgewomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7NyZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCmluZGV4IGI0ZWY5MjdmZDRhNjcuLjFkZDgwZTA2ZTIzNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCkBAIC0zNjEsOSAmIzQzOzM2MSwxMCBAQCBjb25maWcgTUlDUk9TRU1JX1BIWQogCiBjb25maWcgTU9UT1JDT01NX1BIWQogCXRyaXN0YXRlICYjMzQ7TW90b3Jjb21tIFBIWXMmIzM0OwomIzQzOwlzZWxlY3QgUEhZX1BBQ0tBR0UKIAloZWxwCiAJICBFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuCi0JICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcy4KJiM0MzsJICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS4KIAogY29uZmlnIE5BVElPTkFMX1BIWQogCXRyaXN0YXRlICYjMzQ7TmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzJiMzNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwppbmRleCA5MGE0Zjg2ZjI3NThiLi43Zjk0OWFiNTNiNTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCkBAIC0xLDI0ICYjNDM7MSwyOSBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOwogLyoKLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci4KJiM0MzsgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci4KICAqCiAgKiBBdXRob3I6IFBldGVyIEdlaXMgJmx0O3Bnd2lwZW91dEBnbWFpbC5jb20mZ3Q7CiAgKiBBdXRob3I6IEZyYW5rICZsdDtGcmFuay5TYWVAbW90b3ItY29tbS5jb20mZ3Q7CiYjNDM7ICogQXV0aG9yOiBLeWxlICZsdDtreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbSZndDsKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDtwaHlsaWIuaCYjMzQ7CiYjNDM7CiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTEJCTB4MDAwMDAxMGEKICNkZWZpbmUgUEhZX0lEX1lUODUyMQkJMHgwMDAwMDExYQogI2RlZmluZSBQSFlfSURfWVQ4NTIyCQkweDRmNTFlOTI4CiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzEJCTB4NGY1MWU5MWIKICNkZWZpbmUgUEhZX0lEX1lUODUzMVMJCTB4NGY1MWU5MWEKICNkZWZpbmUgUEhZX0lEX1lUODgyMQkJMHg0ZjUxZWExOQomIzQzOyNkZWZpbmUgUEhZX0lEX1lUODgyNAkJMHg0ZjUxZThiOAogLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3CiAgKglVVFAgUmVnaXN0ZXIgc3BhY2UJfAlGSUJFUiBSZWdpc3RlciBzcGFjZQogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzAsNiAmIzQzOzM1LDE4IEBACiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAomIzQzOy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlldwomIzQzOyAqCVVUUCBSZWdpc3RlciBzcGFjZQl8CVVTWEdNSUkgUmVnaXN0ZXIgc3BhY2UKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogfAlVVFAgTUlJCQkJfAlVU1hHTUlJIE1JSQkgICAgICAgIHwKJiM0MzsgKiB8CVVUUCBNTUQJCQl8CQkJCXwKJiM0MzsgKiB8CVVUUCBFeHRlbmRlZAkJfAlVU1hHTUlJIEV4dGVuZGVkCXwKJiM0MzsgKiB8CVVUUCBUb3AgRXh0ZW5kZWQJfAlVU1hHTUlJIFRvcCBFeHRlbmRlZAl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIHwJCQlDb21tb24gVG9wIEV4dGVuZGVkCQkJfAomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKi8KJiM0MzsKIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovCiAKIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KQEAgLTM4MSw2ICYjNDM7Mzk4LDE1IEBACiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUkJMAogI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMAkJMQogCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLCQkJQklUKDApCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFCQkoMHgxKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFCQkJKDB4MCkKJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMQkJMHgxCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMCQkweDAKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSwkJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRQkJCUJJVCgxMykKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkcJCSgweDcpCiYjNDM7CiBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCS8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsCiAJICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzCkBAIC0zOTksNiAmIzQzOzQyNSwxMiBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCXU4IHJlZ19wYWdlOwogfTsKIAomIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgewomIzQzOwl1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7CiYjNDM7CS8qIHNoYXJlZF9sb2NrIHVzZWQgdG8gVVRQcyBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXggc2hhcmVkX2xvY2s7CiYjNDM7fTsKJiM0MzsKIC8qKgogICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXIKICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKQEAgLTQzNyw2ICYjNDM7NDY5LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGUKJiM0MzsgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGUKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLAomIzQzOwkJCSAgICAgICB1MTYgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3BoeWRldi0mZ3Q7bWRpby5idXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSwgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jaygpIC0gd3JpdGUgcGFnZSBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwlyZXQgJmFtcDs9IH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzOwlyZXQgfD0gKHBhZ2UgJmFtcDsgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyCiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCkBAIC02MjYsMTEgJiM0Mzs3MjIsMTA1OCBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogCQlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRywKIAkJCQkgICBZVFBIWV9JRVJfV09MLCAwKTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFLwomIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiBvbGRfcGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwl1MTYgZGF0YTsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG9sZF9wYWdlOwomIzQzOwlkYXRhID0gb2xkX3BhZ2UgJmFtcDsgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTsKJiM0MzsJZGF0YSB8PSBwYWdlOwomIzQzOwomIzQzOwlyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogZW5hYmxlIHNkcyBpc29sYXRlICovCiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUsIEJNQ1JfSVNPTEFURSk7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJLyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovCiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi8KJiM0MzsJcmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCiYjNDM7CQkJCSAgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCSAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUKJiM0MzsgKiBhbmQgc2RzIHNvZnRyZXNldC4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHNkcyBzb2Z0cmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0ZSAqLwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSwKJiM0MzsJCQkgICBCTUNSX1JFU0VUICZhbXA7IH5CTUNSX0lTT0xBVEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovCiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCAmbHQ7IDApIHx8CiYjNDM7CQkJCSEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQk1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXQgPSB2YWw7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJLyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovCiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKCkgLSBjYWxsZWQgdG8gZG8gc3RvcmUgd29ya2luZyBzdGF0dXMKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJldDogb3BlcmF0aW9uJiMzOTtzIHJldHVybiBjb2RlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CS8qIGNvbmZpZ3VyZSBub3JtYWwgdGVzdCBtb2RlICovCiYjNDM7CXIgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXIgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQkJcmV0ID0gcjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogdXRwIHNvZnQgcmVzZXQgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO3JldHJ5OgomIzQzOwlyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiBwb3dlciBkb3duICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogcGxsIGNhbGlicmF0aW9uICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXphdGlvbiB1dHAgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBlbmFibGUgbmliYmxlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzU5LCAweDIxNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogMi41RyB0ZW1wbGF0ZSB0b25lICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZjLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgRU1DIENTICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdhLCAweDQwZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBFTUMgUkUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlCiYjNDM7CQkocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwkvKiByZXNldCAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CXJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCiYjNDM7CQkJCSAgICAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlCiYjNDM7CQkocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmU6CiYjNDM7CXIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfbm9ybWFsOgomIzQzOwlyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsCiYjNDM7CQkJCQkgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHNkcyBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTsKJiM0MzsJaW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDsKJiM0MzsJaW50IHJldCA9IC0xOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiByZWFkIGVmdXNlICovCiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwllbHNlCiYjNDM7CQl2YWxfMSA9IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8yID0gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsXzMgPSByZXQ7CiYjNDM7CiYjNDM7CS8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogYW5hbG9nIENEUiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgVkNPICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBQTEwgbG9jayAqLwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwl0bXAgPSAodmFsXzEgJmFtcDsgKEJJVCg3KSB8IEJJVCg2KSkpICZndDsmZ3Q7IDY7CiYjNDM7CXJldCB8PSAodG1wICZsdDsmbHQ7IDEyKTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+KEJJVCgxKSB8IEJJVCgwKSk7CiYjNDM7CXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDUpIHwgQklUKDQpKSkgJmd0OyZndDsgNDsKJiM0MzsJcmV0IHw9IHRtcDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+KEJJVCgxMykgfCBCSVQoMTIpKTsKJiM0MzsJdG1wID0gKHZhbF8zICZhbXA7IChCSVQoMSkgfCBCSVQoMCkpKTsKJiM0MzsJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIExETyAqLwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTsKJiM0MzsJdG1wID0gKHZhbF8yICZhbXA7IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSAmZ3Q7Jmd0OyAyOwomIzQzOwlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyA0KTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpOwomIzQzOwl0bXAgPSAodmFsXzIgJmFtcDsgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpICZndDsmZ3Q7IDU7CiYjNDM7CXJldCB8PSAodG1wICZsdDsmbHQ7IDgpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBTZXJkZXMgVFggKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogcmVzdGFydCBjYWxpYnJhdGlvbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyAmZ3Q7IDggKi8KJiM0MzsJcmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgJmFtcDs9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7CiYjNDM7CXJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HOwomIzQzOwlyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiByZXNldCBzZXJkZXMgKi8KJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSAgIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgX19waHlfcmVhZCB0YWtlcyBubyBsb2NrICovCiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCAmbHQ7IDApIHx8CiYjNDM7CQkJCSEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQk1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXQgPSB2YWw7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJLyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovCiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdAomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwlpbnQgciA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDEsIDB4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogcG93ZXIgZG93biAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzU5LCAweDIxNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIDIuNUcgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2UsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODEsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAwMCBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZCwgMHhkMDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMywgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAwIHRlbXBhdGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZiwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMwYiwgMHhhYTFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIDEwIHRlbXBhdGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YywgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMCB0ZW1wYXRlIE1BVSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY4LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiBFTUMgQ1MsIEluY29uc2lzdGVudCB3aXRoIGV4dGVybmFsIHBoeSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiBFTUMgUkUqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGMsIDB4NDFhMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwkvKiByZXNldCAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CXJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCiYjNDM7CQkJCSAgICAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlCiYjNDM7CQkocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmU6CiYjNDM7CXIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfbm9ybWFsOgomIzQzOwlyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsCiYjNDM7CQkJCQkgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJcmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwogCX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpOwogCi1lcnJfcmVzdG9yZV9wYWdlOgotCXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7CXBoeWRldl9kYmcocGh5ZGV2LCAmIzM0OyVzIGRvbmUsIHBoeSBhZGRyOiAlZFxuJiMzNDssCiYjNDM7CQkgICBfX2Z1bmNfXywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCkBAIC0zMTA0LDYgJiM0Mzs0MjQ3LDQyOSBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApOwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2dldF9mZWF0dXJlcyAtIHJlYWQgbW1kIHJlZ2lzdGVyIHRvIGdldCAyLjVHIGNhcGFiaWxpdHkKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwlyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBsaW5rIHN0YXR1cyBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IGxpbmsgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJbGluayA9ICEhKHJldCAmYW1wOyBZVFBIWV9TU1JfTElOSyk7CiYjNDM7CiYjNDM7CXBoeWRldl9kYmcocGh5ZGV2LCAmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxuJiMzNDssCiYjNDM7CQkgICBfX2Z1bmNfXywgcGh5ZGV2LSZndDttZGlvLmFkZHIsIGxpbmspOwomIzQzOwlyZXR1cm4gbGluazsKJiM0MztlcnI6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgbGluayA9IDA7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgdmFsID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X3JlYWRfc3RhdHVzKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7YXV0b25lZ19jb21wbGV0ZSkgewomIzQzOwkJcmV0ID0gZ2VucGh5X2M0NV9yZWFkX2xwYShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXZhbCA9IHJldDsKJiM0MzsKJiM0MzsJbGluayA9IHZhbCAmYW1wOyBZVFBIWV9TU1JfTElOSzsKJiM0MzsJaWYgKGxpbmspCiYjNDM7CQl5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7CiYjNDM7CiYjNDM7CWlmIChsaW5rKSB7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDtsaW5rID09IDApCiYjNDM7CQkJcGh5ZGV2X2RiZyhwaHlkZXYsCiYjNDM7CQkJCSAgICYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayB1cFxuJiMzNDssCiYjNDM7CQkJCSAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7CQlwaHlkZXYtJmd0O2xpbmsgPSAxOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHBoeWRldi0mZ3Q7bGluayA9PSAxKQomIzQzOwkJCXBoeWRldl9kYmcocGh5ZGV2LAomIzQzOwkJCQkgICAmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmsgZG93blxuJiMzNDssCiYjNDM7CQkJCSAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7CQlwaHlkZXYtJmd0O2xpbmsgPSAwOwomIzQzOwl9CiYjNDM7CXBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiB8IEJNQ1JfSVNPTEFURSwgMHgwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKCk6IHV0cCBwb3dlciBkb3duLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCS8qIHV0cCBwb3dlciBvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHV0cCBwb3dlciBvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO3JldHJ5OgomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgUEhZIHVwIG9wZXJhdGlvbiBzdWNjZWVkcyBidXQgdGhlIHN1YnNlcXVlbnQgb3BlcmF0aW9uCiYjNDM7CSAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCS8qIHV0cCBwb3dlciBkb3duICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7cmV0cnk6CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvbgomIzQzOwkgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLgomIzQzOwkgKi8KJiM0MzsJciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcGh5X2N0cmwgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCXBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwKJiM0MzsJCQkJICAgICBNRElPX0FOXzEwR0JUX0NUUkwsCiYjNDM7CQkJCSAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsCiYjNDM7CQkJCSAgICAgcGh5X2N0cmwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXQgPSBfX2dlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYsIHJldCk7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2FnZSBmb3IgcGh5ODgyNC4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7CiYjNDM7CWNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqLwomIzQzOwltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDsKJiM0MzsJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgJiMzNDtwaHktbW9kZSYjMzQ7LAomIzQzOwkJCQkgICAgICZhbXA7aW50ZXJmYWNlX21vZGVfbmFtZSkpIHsKJiM0MzsJCWlmICghc3RyY2FzZWNtcChpbnRlcmZhY2VfbW9kZV9uYW1lLAomIzQzOwkJCQlwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpKSkgewomIzQzOwkJCXByaXYtJmd0O2ludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7CiYjNDM7CQl9IGVsc2UgaWYgKCFzdHJjYXNlY21wCiYjNDM7CQkJCShpbnRlcmZhY2VfbW9kZV9uYW1lLAomIzQzOwkJCQkgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7CiYjNDM7CQkJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0OyVzLCBwaHktbW9kZSBtaXNzaW5nIGluIERUUy5cbiYjMzQ7LAomIzQzOwkJCSAgICBfX2Z1bmNfXyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKQEAgLTMxOTAsMTMgJiM0Mzs0NzU2LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiAJCS5yZXN1bWUJCQk9IHl0ODgyMV9yZXN1bWUsCiAJfSwKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLAomIzQzOwkJLm5hbWUJCQk9ICYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCYjMzQ7LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZQkJPSB5dDg4MjRfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJCT0geXQ4ODI0X3dyaXRlX3BhZ2UsCiYjNDM7CQkucHJvYmUJCSAgICAgICAgPSB5dDg4MjRfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2FuZWcJCT0geXQ4ODI0X2NvbmZpZ19hbmVnLAomIzQzOwkJLmFuZWdfZG9uZQkJPSB5dDg4MjRfYW5lZ19kb25lLAomIzQzOwkJLmNvbmZpZ19pbml0CQk9IHl0ODgyNF9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSB5dDg4MjRfcmVhZF9zdGF0dXMsCiYjNDM7CQkuc29mdF9yZXNldAkJPSB5dDg4MjRfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCQk9IHl0ODgyNF9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJCT0geXQ4ODI0X3Jlc3VtZSwKJiM0MzsJfSwKIH07CiAKIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyJiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O1BldGVyIEdlaXMmIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7RnJhbmsmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0t5bGUmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CkBAIC0zMjA2LDYgJiM0Mzs0Nzg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LAomIzQzOwl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LAogCXsgLyogc2VudGluZWwgKi8gfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKaW5kZXggODcwOTIwMzExZjlhMC4uNTI4ZTNmNDE0MzExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCkBAIC0xNDA4LDYgJiM0MzsxNDA4LDYxIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTsKIAomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgTm9ybWFsIHRvIFRlc3QgbW9kZSA3CiYjNDM7ICoKJiM0MzsgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgTm9ybWFsIHRvIFRlc3QgbW9kZSA3CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXIKJiM0MzsgKglyZWFkL3dyaXRlIGVycm9yKS4KJiM0MzsgKi8KJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKQomIzQzO3sKJiM0MzsJaW50IGN0cmwgPSAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKHRlc3RfbW9kZSkgewomIzQzOwljYXNlIDA6CiYjNDM7CQljdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMToKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMzoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNToKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNjoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNzoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLAomIzQzOwkJCSAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTsKJiM0MzsKIC8qKgogICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzCiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDNkOGFmZTZiN2YxYzUuLmZiODI3Y2MzYzk4ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjM1Nyw2ICYjNDM7MjM1Nyw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpOwogaW50IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTsKJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTsKIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQkJICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTsKIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKaW5kZXggMDZmNGJjM2MyMGM3MS4uODU3NmE0ODg3N2M2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCkBAIC02Myw2ICYjNDM7NjMsNyBAQAogLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTAkxMzAJLyogMTBHQkFTRS1UIHBhaXIgc3dhcCAmYW1wOyBwb2xhcml0eSAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUgkxMzEJLyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMgkvKiBUZXN0IG1vZGUgY29udHJvbCAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlIJMTMzCS8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuCiAJCQkJCSAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1IJMTQ3CS8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovCkBAIC0zMjAsNiAmIzQzOzMyMSwxNyBAQAogLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRQkweDAwMDEJLyogRmFzdCByZXRyYWluIGVuYWJsZSAqLwogCiYjNDM7LyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSyAweEUwMDAJLyogVGVtcGxhdGUgdGVzdCBtb2RlICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgMHgwMDAwCS8qIFRlbXBsYXRlIE5vcm1hbCAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDIwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4NDAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHg2MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDgwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4YTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHhjMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweGUwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovCiYjNDM7CiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqLwogI2RlZmluZSBNRElPX1BDU18xMEdCUlRfU1RBVDFfQkxLTEsJMHgwMDAxCS8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi8KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjIwNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDk1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoLCB3aGljaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBZVDg4MjQgUEhZLCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBzZWU6CgoxLiAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzOiBUaGF0JiMzOTtzIHVzdWFsbHkgbm90IHdoZXJlIHRoZSBqdWljeSBidWdzIGFyZSwgYnV0IGFsd2F5cyBnb29kIHRvIGtub3cuCjIuICBLY29uZmlnIGNoYW5nZXM6IEFkZGluZyBgUEhZX1BBQ0tBR0VgIHNlbGVjdGlvbiwgYW5kIGRlc2NyaXB0aW9uIGNoYW5nZXMuIFBvdGVudGlhbGx5IHJlbGV2YW50LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgUEhZX1BBQ0tBR0VgLgozLiAgVGhlIGNvcmUgb2YgdGhlIHBhdGNoOiBUaGUgYG1vdG9yY29tbS5jYCBkcml2ZXIgaGFzIGJlZW4gZXh0ZW5kZWQgd2l0aCBudW1lcm91cyBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IGZvciB0aGUgWVQ4ODI0IFBIWS4gVGhpcyBpbmNsdWRlcyByZWFkL3dyaXRlIGZ1bmN0aW9ucyBmb3IgcmVnaXN0ZXJzLCBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZm9jdXMgbW9zdCBvZiBteSBhdHRlbnRpb24uIFRoZSBgcGh5LWM0NS5jYCBhbmQgYHBoeS5oYCBjaGFuZ2VzIGxvb2sgcmVsYXRlZCB0byBhIGdlbmVyYWwgdGVzdCBtb2RlIGNhcGFiaWxpdHkuCjQuICBNRElPIGRlZmluaXRpb25zOiBOZXcgZGVmaW5pdGlvbnMgaW4gYG1kaW8uaGAgZm9yIHRlc3QgbW9kZSBzZXR0aW5ncy4gVGhlc2UgYXJlIHZlcnkgaW50ZXJlc3RpbmcsIGFzIHRoZXkgZGVmaW5lIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sCgpOb3cgY29tZXMgdGhlIGNydWNpYWwgcGFydDogcmVhY2hhYmlsaXR5LiBJcyB0aGlzIG5ldyBQSFkgZHJpdmVyLCBhbmQgdGhlIGZ1bmN0aW9ucyBpdCBhZGRzLCBhY2Nlc3NpYmxlIHdpdGhpbiBhIFN5emthbGxlci1mdXp6YWJsZSBlbnZpcm9ubWVudD8gTGV0JiMzOTtzIHNlZS4uLgoKSSBrbm93IGBtb3RvcmNvbW0uY2AgaXMgYW4gTURJTyBQSFkgZHJpdmVyLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyIHRyaWdnZXIgY29kZSBwYXRocyB3aXRoaW4gTURJTyBQSFkgZHJpdmVycz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgYW5kIGJvdW5kIHRvIHRoZSBzeXN0ZW0uIEFyZSB0aGV5IHNvbGVseSB0aWVkIHRvIHBoeXNpY2FsIE1ESU8gYnVzZXMsIG9yIGlzIHRoZXJlIGEgd2F5IHRvIGluc3RhbnRpYXRlIE1ESU8vUEhZIGRldmljZXMgdmlydHVhbGx5PyBDYW4gSSBjcmVhdGUgYW4gTURJTyBkZXZpY2UgaW4gYSB3YXkgU3l6a2FsbGVyIGNhbiBpbnRlcmFjdCB3aXRoPyBUaGlzIGlzIHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbi4gSWYgdGhleSBhcmUgYm91bmQgdG8gYSByZWFsIE1ESU8sIEkgd291bGQgbmVlZCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudC4KCkkgbmVlZCB0byBzZWFyY2ggd2l0aGluIFN5emthbGxlciwgYW5kIGV2ZW4gd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLCBmb3IgaG93IE1ESU8gZGV2aWNlcyBhcmUgY3JlYXRlZCBvciBjb250cm9sbGVkLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHRoaW5ncyBsaWtlICYjMzQ7bWRpbyYjMzQ7LCAmIzM0O3BoeVxfZHJpdmVyJiMzNDssIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSB1c2Vyc3BhY2UgaW50ZXJmYWNlcyB0aGF0IGFsbG93IG1lIHRvIGNyZWF0ZSBhbiBNRElPIFBIWS4gSWYgSSBjYW4gaW5zdGF0aWF0ZSBvbmUgdmlydHVhbGx5LCBJIGFtIGluIGx1Y2suIFRoYXQgd291bGQgb3BlbiB0aGUgZG9vciB0byBmdXp6aW5nIHRoZSBZVDg4MjQgYW5kIHRoZSBvdGhlciBkcml2ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKm5ld19kZXZpY2V8cGh5X2RldmljZV9jcmVhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEzNC1cdGVsc2VcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMzU6XHRcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCAwLCBOVUxMKTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMzYtXHRpZiAoSVNfRVJSKHBoeSkpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz01NTE9c3RhdGljIHZvaWQgdGphMTEwMl9wMV9yZWdpc3RlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg1LVx0XHQvKiBSZWFsIFBIWSBJRCBvZiBQb3J0IDEgaXMgMCAqL1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTg2Olx0XHRwaHkgPSBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIFBIWV9JRF9USkExMTAyLCBmYWxzZSwgTlVMTCk7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODctXHRcdGlmIChJU19FUlIocGh5KSkge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU5Mi1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU5MzpcdFx0LyogT3ZlcndyaXRlIHBhcmVudCBkZXZpY2UuIHBoeV9kZXZpY2VfY3JlYXRlKCkgc2V0IHBhcmVudCB0b1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTk0LVx0XHQgKiB0aGUgbWlpX2J1cy1cdTAwM2VkZXYsIHdoaWNoIGlzIG5vdCBjb3JyZWN0IGluIGNhc2UuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz03Mjg9c3RhdGljIGludCBwaHlfcmVxdWVzdF9kcml2ZXJfbW9kdWxlKHN0cnVjdCBwaHlfZGV2aWNlICpkZXYsIHUzMiBwaHlfaWQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDctXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjc0ODpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTc0OS1cdFx0XHRcdCAgICAgYm9vbCBpc19jNDUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04MzktfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo4NDA6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX2NyZWF0ZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTg0MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEwNzE9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTYtXHRcdGlmICghcilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA5NzpcdFx0XHRyZXR1cm4gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTgtXHRcdFx0XHRcdFx0IHRydWUsIFx1MDAyNmM0NV9pZHMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwMTpcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCwgaXNfYzQ1LCBcdTAwMjZjNDVfaWRzKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMi19XG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD0yMTY3PWludCBwaHlfbW9kaWZ5X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLCB1MzIgcmVnbnVtLFxuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMjE2OS1cbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE3MDpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxNzEtXHRcdFx0XHQgICAgIGJvb2wgaXNfYzQ1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjU4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBQSFkgRGV2aWNlIFByb2JpbmcqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZCEgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsOiBIb3cgZXhhY3RseSBkbyB3ZSBwcm9iZSB0aGVzZSBQSFkgZGV2aWNlcz8gTGV0IG1lIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSYjMzk7bSB0aGlua2luZywgYSBQSFkgZGV2aWNlIGlzIGNyZWF0ZWQsIGVpdGhlciB0aHJvdWdoIHRoZSBEZXZpY2UgVHJlZSBmd25vZGUgKHdoaWNoIG1ha2VzIHNlbnNlLCBwcmVjb25maWd1cmVkIGhhcmR3YXJlKSBvciBkdXJpbmcgdGhlIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiB1c2luZyBgbWRpb2J1c19yZWdpc3RlcmAuIFJpZ2h0LCBhbmQgdGhlbiB0aGUgY3JpdGljYWwgc3RlcCBpcyB0aGUgUEhZIGRyaXZlciBiaW5kaW5nLCB0aGlzIGxpa2VseSBkZXBlbmRzIG9uIHdoYXQmIzM5O3MgcmVhZCBmcm9tIHRoZSBoYXJkd2FyZSBpdHNlbGYsIHNwZWNpZmljYWxseSB0aGUgYHBoeV9pZGAgcmVnaXN0ZXIsIG9yIGFsc28gYSBEZXZpY2UgVHJlZSBtYXRjaCwgcmlnaHQ/IEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGlzIHNvIEkmIzM5O2xsIGNoZWNrIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2AgdG8gcmVtaW5kIG15c2VsZiBhYm91dCBpdHMgc3RydWN0dXJlLiBPa2F5LCBzbyBJIG5vdyB1bmRlcnN0YW5kIHRoaXMsIHdoZXJlIGlzIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBhY3R1YWxseSAqY2FsbGVkKj8gVGltZSBmb3IgYSBxdWljayBgZ3JlcGAgdG8gdHJhY2sgZG93biB0aG9zZSB1c2FnZXMuIEkgY2FuIHVzZSB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTc3Nz1zdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg0LVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjc4NTpcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg2LVx0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz04NDE9c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODQ4LVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjg0OTpcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODUwLVx0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9OTc5PXN0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTIzMi1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjMzOlx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMzQtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNDctXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTI0ODpcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjQ5LVx0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI2MC1lcnJfcmVzdG9yZV9ub3JtYWw6XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTI2MTpcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjYyLVx0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTE1MjA9c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwNC1cdFx0Z290byBlcnJfcmVzdG9yZTtcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzA1Olx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MDYtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MTktXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTcyMDpcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzIxLVx0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTczMy1lcnJfcmVzdG9yZV9ub3JtYWw6XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTczNDpcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzM1LVx0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYz0xNDA5PUVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MTEtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0MTI6ICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQxMy0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MjAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0MjE6aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDYzLX1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQ2NDpFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQ2NS1cbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIzNTk9aW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjM2MDppbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTtcbmluY2x1ZGUvbGludXgvcGh5LmgtMjM2MS1pbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM2MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFJvYWRibG9jayoqCgpPa2F5LCBzbyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgb25seSBnZXRzIGNhbGxlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBnb2FsOiBjYW4gSSBldmVuICpyZWFjaCogb3IgaW5zdGFudGlhdGUgYSBNb3RvcmNvbW0gUEhZLCBzcGVjaWZpY2FsbHkgdGhlIFlUODgyNCwgZHVyaW5nIG15IGFtZDY0IFFFTVUgc3l6a2FsbGVyIGZ1enppbmcgcnVucz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBndWlkZWxpbmVzLgoKUmlnaHQsIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4uLiBJIHJlbWVtYmVyLCAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4mIzM0OyBTcGVjaWZpY2FsbHksICYjMzQ7VmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMuLi4gcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4mIzM0OwoKSGFuZyBvbi4uLiBJcyBhbiBFdGhlcm5ldCBQSFkgZHJpdmVyICpzdHJ1Y3R1cmFsbHkqIHVucmVhY2hhYmxlPyBUaGUgWVQ4ODI0IGlzIGEgZGlzY3JldGUgRXRoZXJuZXQgUEhZIGNoaXAg4oCTIGEgcGh5c2ljYWwgY2hpcC4gSXQmIzM5O3MgYSAmIzM0O1F1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCBQSFkuJiMzNDsgSXQgY29ubmVjdHMgb3ZlciBNRElPIHRvIGEgTUFDIG9yIFNvQyBhbmQgaXMgaWRlbnRpZmllZCB2aWEgZGV2aWNldHJlZSBiaW5kaW5ncyBsaWtlIGBtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VgIG9yIHRoZSBNRElPIFBIWSBJRCAweDRmNTFlOGI4LgoKT2theSwgZG9lcyAqc3RhbmRhcmQqIFFFTVUsIHRoZSBvbmUgc3l6a2FsbGVyIHVzZXMsIGVtdWxhdGUgdGhpcz8gTm9wZS4gUUVNVSBlbXVsYXRlcyB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlcyBsaWtlIGUxMDAwLCB2aXJ0aW8tbmV0LCBydGw4MTM5LCBhbmQgc28gb24uIE5vbmUgb2YgdGhvc2UgaGF2ZSBhIE1vdG9yY29tbSBQSFkgY2hpcC4gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoZXkgaGF2ZSB0aGUgb3B0aW9uIHRvIGFkZCBhbnkuCgpCdXQsIGEgdmlydHVhbCBNRElPIGJ1cz8gT3IgbWF5YmUgc29tZSBraW5kIG9mIFVTQi10by1NRElPIGFkYXB0ZXIgb3Igc2ltaWxhciB0aGluZyBjb3VsZCBiZSB1c2VkIGluIHN5emthbGxlciB0byByZWFjaCB0aGlzPyBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBrZXJuZWwgYW5kIHN5emthbGxlciBzb3VyY2UgZm9yIGFueSBldmlkZW5jZSBvZiB2aXJ0dWFsIE1ESU8gYnVzZXMgb3IgVVNCLU1ESU8gYWRhcHRlcnMuIFRoYXQmIzM5O3MgdGhlIG5leHQgYXZlbnVlIHRvIGNoZWNrLi4uIG90aGVyd2lzZSwgdGhpcyBkcml2ZXIgaXMgZ29pbmcgdG8gYmUgYSBkZWFkIGVuZCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLip1c2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfTURJT19NU0NDX01JSU0pXHRcdCYjNDM7PSBtZGlvLW1zY2MtbWlpbS5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19NRElPX01WVVNCKVx0XHQmIzQzOz0gbWRpby1tdnVzYi5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19NRElPX09DVEVPTilcdFx0JiM0Mzs9IG1kaW8tb2N0ZW9uLm9cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYz0zMj1zdGF0aWMgaW50IG12dXNiX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgaW50IGRldiwgaW50IHJlZylcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTMzLXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjM0Olx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiID0gbWRpby1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtMzUtXHRpbnQgZXJyLCBhbGVuO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jPTUyPXN0YXRpYyBpbnQgbXZ1c2JfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTUzLXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjU0Olx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiID0gbWRpby1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtNTUtXHRpbnQgYWxlbjtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy02My1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjY0OnN0YXRpYyBpbnQgbXZ1c2JfbWRpb19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtNjUtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy02Ny1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmludGVyZmFjZS1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYzo2ODpcdHN0cnVjdCBtdnVzYl9tZGlvICptdnVzYjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTY5LVx0c3RydWN0IG1paV9idXMgKm1kaW87XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy03MC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjcxOlx0bWRpbyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKGRldiwgc2l6ZW9mKCptdnVzYikpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtNzItXHRpZiAoIW1kaW8pXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtODItXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYzo4MzpcdHNucHJpbnRmKG1kaW8tXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7bXZ1c2ItJXNcJiMzNDssIGRldl9uYW1lKGRldikpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtODQtXHRtZGlvLVx1MDAzZW5hbWUgPSBtZGlvLVx1MDAzZWlkO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtODUtXHRtZGlvLVx1MDAzZXBhcmVudCA9IGRldjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjg2Olx0bWRpby1cdTAwM2VyZWFkID0gbXZ1c2JfbWRpb19yZWFkO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6ODc6XHRtZGlvLVx1MDAzZXdyaXRlID0gbXZ1c2JfbWRpb193cml0ZTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTg4LVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTkzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6OTQ6c3RhdGljIHZvaWQgbXZ1c2JfbWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy05NS17XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYzo5NjpcdHN0cnVjdCBtdnVzYl9tZGlvICptdnVzYiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTk3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6OTg6XHRtZGlvYnVzX3VucmVnaXN0ZXIobXZ1c2ItXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy05OS1cdHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjU4PXN0YXRpYyBpbnQgYXNpeF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY2OC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2Njk6c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjcwLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjgzLVx0LyogbWlpIGJ1cyBuYW1lIGlzIHVzYi1cdTAwM2N1c2IgYnVzIG51bWJlclx1MDAzZS1cdTAwM2N1c2IgZGV2aWNlIG51bWJlclx1MDAzZSAqL1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY4NDpcdHNucHJpbnRmKHByaXYtXHUwMDNlbWRpby1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDt1c2ItJTAzZDolMDNkXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4NS1cdFx0IGRldi1cdTAwM2V1ZGV2LVx1MDAzZWJ1cy1cdTAwM2VidXNudW0sIGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldm51bSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9NTU9c3RhdGljIHZvaWQgYXg4ODE3MmFfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTYwLS8qIHVzZSBwaHlsaWIgaW5mcmFzdHJ1Y3R1cmUgKi9cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjYxOnN0YXRpYyBpbnQgYXg4ODE3MmFfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTYyLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03Ni1cdC8qIG1paSBidXMgbmFtZSBpcyB1c2ItXHUwMDNjdXNiIGJ1cyBudW1iZXJcdTAwM2UtXHUwMDNjdXNiIGRldmljZSBudW1iZXJcdTAwM2UgKi9cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjc3Olx0c25wcmludGYocHJpdi1cdTAwM2VtZGlvLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0O3VzYi0lMDNkOiUwM2RcJiMzNDssXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OC1cdFx0IGRldi1cdTAwM2V1ZGV2LVx1MDAzZWJ1cy1cdTAwM2VidXNudW0sIGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldm51bSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtOTMtXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo5NDpzdGF0aWMgdm9pZCBheDg4MTcyYV9yZW1vdmVfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy05NS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDkxPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTA3LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA4Olx0c25wcmludGYoZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7dXNiLSUwM2Q6JTAzZFwmIzM0OyxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEwOS1cdFx0IGRldi1cdTAwM2V1ZGV2LVx1MDAzZWJ1cy1cdTAwM2VidXNudW0sIGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldm51bSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTY2PXN0YXRpYyB1MzIgbWlpX2FkZHJlc3NfY21kKGludCBwaHlfaWQsIGludCBpZHgsIHUxNiBvcClcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xNzAtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxNzE6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTcyLXtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yMTctXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoyMTg6c3RhdGljIHZvaWQgc21zYzk1eHhfbWRpb193cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHlfaWQsIGludCBpZHgsXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yMTktXHRcdFx0XHRpbnQgcmVndmFsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjMwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBNb3RvcmNvbW0gUEhZIERyaXZlcioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCBhYm91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLCBhbmQgdGhpcyBjb3VsZCBiZSBrZXkuIExldCYjMzk7cyBleGFtaW5lIHRoaXMgc25pcHBldDoKCmBgYGMKc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKewoJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwoJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7CglpbnQgcmV0OwoKCXJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpOwoJaWYgKHJldCkKCQlyZXR1cm4gcmV0OwoKCWlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHsKCQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwoJCWlmIChyZXQpCgkJCXJldHVybiByZXQ7Cgl9CgoJcmV0dXJuIDA7Cn0KYGBgCgpSaWdodCwgc28gd2UmIzM5O3JlIGpvaW5pbmcgYSBwYWNrYWdlIHVzaW5nIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gLCBhbmQgcG90ZW50aWFsbHkgcHJvYmluZyBpdC4gV2hhdCYjMzk7cyBjcnVjaWFsIGhlcmUgaXMgdGhhdCBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBsaWtlbHkgbWFuYWdlcyByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBhc3NvY2lhdGlvbiB3aXRoIHRoZSBkZXZpY2UgdHJlZS4gSXQgc2VlbXMgdG8gYmUgc2V0dGluZyB1cCBzaGFyZWQgcHJpdmF0ZSBkYXRhIHdpdGhpbiB0aGUgYHl0ODgyNF9zaGFyZWRfcHJpdmAgc3RydWN0LiBUaGUgZmFjdCB0aGF0IGBwaHlfcGFja2FnZV9wcm9iZV9vbmNlYCBpcyBjYWxsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGlzIGludHJpZ3VpbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbiBtb3JlIHByZWNpc2VseSwgYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxlbWVudGF0aW9uLiBJdCBjb3VsZCBiZSB0aGUgbGluY2hwaW4gaW4gaG93IHRoZSBNb3RvcmNvbW0gUEhZIGlzIGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgdGhlIGRldmljZSB0cmVlIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTQ2NTQ9c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY1OS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo0NjYwOlx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY2MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM9NDA1PUVYUE9SVF9TWU1CT0xfR1BMKGRldm1fcGh5X3BhY2thZ2Vfam9pbik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDA3LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM6NDA4OiAqIGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbiAtIHJlc291cmNlIG1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00MDktICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQSFkgcGFja2FnZVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQxNi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jOjQxNzppbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQxOC1cdFx0XHQgICAgIHNpemVfdCBwcml2X3NpemUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDM4LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jOjQzOTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4pO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDQwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaD0zMj1pbnQgZGV2bV9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaC0zMy1cdFx0XHQgIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oOjM0OmludCBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oLTM1LVx0XHRcdCAgICAgc2l6ZV90IHByaXZfc2l6ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTY5ND1zdGF0aWMgaW50IHFjYTgwN3hfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNzAxLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjcwMjpcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTcwMy1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NTc5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgcGh5X3BhY2thZ2UuY2AqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgaW50byBpdC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBvbmUgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jYC4gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZSBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldmljZSB0cmVlIGFuZCBQSFkgcGFja2FnZSBoYW5kbGluZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgZGV2aWNlIG1hbmFnZW1lbnQgbGlicmFyeSBnaXZlbiB0aGUgYGRldm1fYCBwcmVmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwODpcdCAqIGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbiAtIHJlc291cmNlIG1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpXG4gNDA5Olx0ICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQSFkgcGFja2FnZVxuIDQxMDpcdCAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuIDQxMTpcdCAqIEBwcml2X3NpemU6IGlmIG5vbi16ZXJvIGFsbG9jYXRlIHRoaXMgYW1vdW50IG9mIGJ5dGVzIGZvciBwcml2YXRlIGRhdGFcbiA0MTI6XHQgKlxuIDQxMzpcdCAqIE1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpLiBTaGFyZWQgc3RvcmFnZSBmZXRjaGVkIGJ5IHRoaXMgZnVuY3Rpb24sXG4gNDE0Olx0ICogcGh5X3BhY2thZ2VfbGVhdmUoKSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBkcml2ZXIgZGV0YWNoLiBTZWVcbiA0MTU6XHQgKiBvZl9waHlfcGFja2FnZV9qb2luKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gNDE2Olx0ICovXG4gNDE3Olx0aW50IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gNDE4Olx0XHRcdFx0ICAgICBzaXplX3QgcHJpdl9zaXplKVxuIDQxOTpcdHtcbiA0MjA6XHRcdHN0cnVjdCBwaHlfZGV2aWNlICoqcHRyO1xuIDQyMTpcdFx0aW50IHJldDtcbiA0MjI6XHRcbiA0MjM6XHRcdHB0ciA9IGRldnJlc19hbGxvYyhkZXZtX3BoeV9wYWNrYWdlX2xlYXZlLCBzaXplb2YoKnB0ciksXG4gNDI0Olx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4gNDI1Olx0XHRpZiAoIXB0cilcbiA0MjY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDI3Olx0XG4gNDI4Olx0XHRyZXQgPSBvZl9waHlfcGFja2FnZV9qb2luKHBoeWRldiwgcHJpdl9zaXplKTtcbiA0Mjk6XHRcbiA0MzA6XHRcdGlmICghcmV0KSB7XG4gNDMxOlx0XHRcdCpwdHIgPSBwaHlkZXY7XG4gNDMyOlx0XHRcdGRldnJlc19hZGQoZGV2LCBwdHIpO1xuIDQzMzpcdFx0fSBlbHNlIHtcbiA0MzQ6XHRcdFx0ZGV2cmVzX2ZyZWUocHRyKTtcbiA0MzU6XHRcdH1cbiA0MzY6XHRcbiA0Mzc6XHRcdHJldHVybiByZXQ7XG4gNDM4Olx0fVxuIDQzOTpcdEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbik7XG4gNDQwOlx0XG4gNDQxOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1BIWSBwYWNrYWdlIHN1cHBvcnRcJiMzNDspO1xuIDQ0MjpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzI1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgc3VtbWFyaXplZCBmcm9tIHRoZSBwcm92aWRlZCB0ZXh0LCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhbmQgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBbmFseXppbmcgYG9mX3BoeV9wYWNrYWdlX2pvaW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgZnVuY3Rpb24gb3IgY29uY2VwdC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBQSFkgKFBoeXNpY2FsIExheWVyKSBjb250ZXh0LiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBmdW5jdGlvbiByZWxhdGVkIHRvIGpvaW5pbmcgb3IgYXNzZW1ibGluZyBzb21ldGhpbmcgYXQgdGhlIHBoeXNpY2FsIGxldmVsLiBNeSBtaW5kJiMzOTtzIGp1bXBpbmcgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiBJcyB0aGlzIGFib3V0IHBhY2tldCBhZ2dyZWdhdGlvbiwgcGVyaGFwcz8gT3IgaXMgaXQgbW9yZSBmdW5kYW1lbnRhbCwgZGVhbGluZyB3aXRoIHRoZSBhbGlnbm1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBpbmNvbWluZyBkYXRhIHN0cmVhbXMgYXQgdGhlIHZlcnkgbG93ZXN0IGxldmVsIG9mIHRoZSBwcm90b2NvbCBzdGFjaz8KCkdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBsaWtlbHkgc2l0cyBiZXR3ZWVuIHRoZSByYXcgc2lnbmFsIHByb2Nlc3NpbmcgYW5kIHRoZSBtb3JlIHN0cnVjdHVyZWQgTUFDIChNZWRpdW0gQWNjZXNzIENvbnRyb2wpIGxheWVyLiBJdCBwcm9iYWJseSBoYW5kbGVzIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBiaXQtbGV2ZWwgbWFuaXB1bGF0aW9uIOKAkyBtYXliZSBmcmFtaW5nLCBlcnJvciBjb3JyZWN0aW9uIGF0IHRoZSBwaHlzaWNhbCBsZXZlbCwgb3IgZXZlbiBwcmUtcHJvY2Vzc2luZyBmb3IgZXF1YWxpemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzIHRvIGJlIHN1cmUsIGJ1dCBJJiMzOTttIHBpY3R1cmluZyBpdCBoYW5kbGluZyB0aGluZ3MgbGlrZSBpbnRlci1zeW1ib2wgaW50ZXJmZXJlbmNlLCBjaGFubmVsIGltcGFpcm1lbnRzLCBhbmQgYW55IHByZS1jb2Rpbmcgc2NoZW1lcyBpbiB1c2UuCgpOb3csIGlmIGl0IGRlYWxzIHdpdGggam9pbmluZywgY291bGQgaXQgYmUgcGFydCBvZiBhIE1JTU8gKE11bHRpcGxlLUlucHV0IE11bHRpcGxlLU91dHB1dCkgb3IgYmVhbWZvcm1pbmcgc2NoZW1lPyBUaGF0JiMzOTtzIGEgc3Ryb25nIHBvc3NpYmlsaXR5LiBJbiB0aGlzIGNhc2UsIGl0IG1pZ2h0IGhhbmRsZSB0aGUgY29tYmluYXRpb24gb2YgZGF0YSBzdHJlYW1zIGZyb20gbXVsdGlwbGUgYW50ZW5uYXMuIE9yLCBpdCBtaWdodCBiZSBhYm91dCBhZ2dyZWdhdGluZyBtdWx0aXBsZSBzbWFsbGVyIGRhdGEgdW5pdHMgaW50byBsYXJnZXIgcGh5c2ljYWwtbGF5ZXIgcGFja2V0cyBmb3IgZWZmaWNpZW50IHRyYW5zbWlzc2lvbiBvdmVyIHRoZSBhaXIuIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSBpdHMgYXJjaGl0ZWN0dXJlIGRlZXBlciB0byBjb25maXJtLiBSZWdhcmRsZXNzLCBpdCYjMzk7cyBjbGVhcmx5IGEgY3J1Y2lhbCBjb21wb25lbnQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHJlY2lzZSByb2xlIGluIHRoZSBkYXRhIGZsb3cgdG8gdHJ1bHkgZ3Jhc3AgaXRzIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDc6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzYwOlx0XHR9XG4gMzYxOlx0XG4gMzYyOlx0XHRwaHlkZXYtXHUwMDNlc2hhcmVkID0gTlVMTDtcbiAzNjM6XHR9XG4gMzY0Olx0RVhQT1JUX1NZTUJPTF9HUEwocGh5X3BhY2thZ2VfbGVhdmUpO1xuIDM2NTpcdFxuIDM2NjpcdHN0YXRpYyB2b2lkIGRldm1fcGh5X3BhY2thZ2VfbGVhdmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpXG4gMzY3Olx0e1xuIDM2ODpcdFx0cGh5X3BhY2thZ2VfbGVhdmUoKihzdHJ1Y3QgcGh5X2RldmljZSAqKilyZXMpO1xuIDM2OTpcdH1cbiAzNzA6XHRcbiAzNzE6XHQvKipcbiAzNzI6XHQgKiBkZXZtX3BoeV9wYWNrYWdlX2pvaW4gLSByZXNvdXJjZSBtYW5hZ2VkIHBoeV9wYWNrYWdlX2pvaW4oKVxuIDM3MzpcdCAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUEhZIHBhY2thZ2VcbiAzNzQ6XHQgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiAzNzU6XHQgKiBAYmFzZV9hZGRyOiBjb29raWUgYW5kIGJhc2UgUEhZIGFkZHJlc3Mgb2YgUEhZIHBhY2thZ2UgZm9yIG9mZnNldFxuIDM3NjpcdCAqICAgY2FsY3VsYXRpb24gb2YgZ2xvYmFsIHJlZ2lzdGVyIGFjY2Vzc1xuIDM3NzpcdCAqIEBwcml2X3NpemU6IGlmIG5vbi16ZXJvIGFsbG9jYXRlIHRoaXMgYW1vdW50IG9mIGJ5dGVzIGZvciBwcml2YXRlIGRhdGFcbiAzNzg6XHQgKlxuIDM3OTpcdCAqIE1hbmFnZWQgcGh5X3BhY2thZ2Vfam9pbigpLiBTaGFyZWQgc3RvcmFnZSBmZXRjaGVkIGJ5IHRoaXMgZnVuY3Rpb24sXG4gMzgwOlx0ICogcGh5X3BhY2thZ2VfbGVhdmUoKSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBkcml2ZXIgZGV0YWNoLiBTZWVcbiAzODE6XHQgKiBwaHlfcGFja2FnZV9qb2luKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gMzgyOlx0ICovXG4gMzgzOlx0aW50IGRldm1fcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gMzg0Olx0XHRcdFx0ICBpbnQgYmFzZV9hZGRyLCBzaXplX3QgcHJpdl9zaXplKVxuIDM4NTpcdHtcbiAzODY6XHRcdHN0cnVjdCBwaHlfZGV2aWNlICoqcHRyO1xuIDM4NzpcdFx0aW50IHJldDtcbiAzODg6XHRcbiAzODk6XHRcdHB0ciA9IGRldnJlc19hbGxvYyhkZXZtX3BoeV9wYWNrYWdlX2xlYXZlLCBzaXplb2YoKnB0ciksXG4gMzkwOlx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4gMzkxOlx0XHRpZiAoIXB0cilcbiAzOTI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzkzOlx0XG4gMzk0Olx0XHRyZXQgPSBwaHlfcGFja2FnZV9qb2luKHBoeWRldiwgYmFzZV9hZGRyLCBwcml2X3NpemUpO1xuIDM5NTpcdFxuIDM5NjpcdFx0aWYgKCFyZXQpIHtcbiAzOTc6XHRcdFx0KnB0ciA9IHBoeWRldjtcbiAzOTg6XHRcdFx0ZGV2cmVzX2FkZChkZXYsIHB0cik7XG4gMzk5Olx0XHR9IGVsc2Uge1xuIDQwMDpcdFx0XHRkZXZyZXNfZnJlZShwdHIpO1xuIDQwMTpcdFx0fVxuIDQwMjpcdFxuIDQwMzpcdFx0cmV0dXJuIHJldDtcbiA0MDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2Mzk3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5LCByZWFkeSBmb3IgYSBmZWxsb3cgZXhwZXJ0LgoKKipBbmFseXppbmcgYG9mX3BoeV9wYWNrYWdlX2pvaW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb25zaWRlciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29udGV4dCBpdCYjMzk7cyBvcGVyYXRpbmcgd2l0aGluLiAgV2hhdCBraW5kIG9mIHBoeXNpY2FsIGxheWVyIHBhY2thZ2UgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSXMgdGhpcyByZWxhdGVkIHRvIEV0aGVybmV0LCBhIGN1c3RvbSBwcm90b2NvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGZyYW1lIGZvcm1hdC4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGZvcm1pbmcgYSBjaGVja2xpc3Q6CgoqICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBhcmUgdGhlIGlucHV0IHBhY2thZ2UgZm9ybWF0cz8gSXMgaXQgYSBzdHJ1Y3R1cmUsIGEgY2xhc3MsIG9yIHJhdyBieXRlcz8gQXJlIHRoZXJlIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhPyBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgYW5kIGhvdyBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgcmVmZXJlbmNlcyB0aGVtLiBBbnkgcG90ZW50aWFsIGJpdGZpZWxkcywgYWxpZ25tZW50IGlzc3Vlcywgb3IgZW5kaWFubmVzcyBjb25zaWRlcmF0aW9ucz8KKiAgICoqUHVycG9zZToqKiBXaGF0JiMzOTtzIHRoZSAqZ29hbCogb2YgdGhpcyBmdW5jdGlvbj8gSXMgaXQgY29tYmluaW5nIG11bHRpcGxlIHBoeXNpY2FsIGxheWVyIHBhY2tldHMgaW50byBhIGxhcmdlciB1bml0LCBwZXJoYXBzIGEgbG9naWNhbCBmcmFtZT8gSXMgaXQgbWVhbnQgdG8gYWRkIGhlYWRlcnMsIHRyYWlsZXJzLCBvciBwYWRkaW5nPyBJcyBpdCByZWxhdGVkIHRvIHBhY2tldCByZWFzc2VtYmx5LCBlbmNhcHN1bGF0aW9uLCBvciBzZWdtZW50YXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoIHRoZSBpbnB1dCBkYXRhLCBsaWtlIGFuIGluY29tcGxldGUgcGFja2FnZSBvciBjb3JydXB0ZWQgZGF0YT8gSSBuZWVkIHRvIGFzY2VydGFpbiBob3cgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGVycm9yIGNvbmRpdGlvbnMuIERvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGUsIHRocm93IGFuIGV4Y2VwdGlvbiwgb3IgbG9nIHNvbWV0aGluZz8gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiB0aGluZ3MgZ28gd3Jvbmc/IElzIGVycm9yIGNoZWNraW5nIHRob3JvdWdoPwoqICAgKipQZXJmb3JtYW5jZToqKiBHaXZlbiB0aGUgbGlrZWx5IGRhdGEgdm9sdW1lcywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgdGhpcyBmdW5jdGlvbi4gQW55IHBvdGVudGlhbCBib3R0bGVuZWNrcz8gQXJlIHRoZXJlIGxvb3BzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvcHlpbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHNsb3cgdGhpbmdzIGRvd24/IElzIHRoaXMgZnVuY3Rpb24gb3B0aW1pemVkIGZvciBzcGVlZCBvciBzaW1wbGljaXR5PwoqICAgKipTZWN1cml0eToqKiBUaGlzIGlzIG1vcmUgb2YgYSBzZWNvbmRhcnkgY29uc2lkZXJhdGlvbi4gSXMgdGhpcyBmdW5jdGlvbiBkZXNpZ25lZCB3aXRoIGFueSBzZWN1cml0eSBhc3BlY3RzIGluIG1pbmQ/IElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gZGF0YSBtYW5pcHVsYXRpb24/CiogICAqKlNpZGUgRWZmZWN0czoqKiBXaGF0IGlzIGJlaW5nIGFsdGVyZWQ/IElzIHRoZXJlIGEgc3RhdGUgY2hhbmdlPyBBbnkgb3RoZXIgZnVuY3Rpb25zIHJlbGlhbnQgb24gdGhpcyBvbmU/CgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIGlucHV0LCBpdHMgb3V0cHV0LCBpdHMgaW50ZXJuYWwgbG9naWMsIHRoZSBlcnJvciBoYW5kbGluZywgYW5kIGl0cyBwbGFjZSBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gQnkgcXVpY2tseSB3YWxraW5nIHRocm91Z2ggdGhlc2UgaXRlbXMsIEkmIzM5O2xsIGlkZW50aWZ5IGFueSBhcmVhcyB0aGF0IGNvdWxkIGJlIGltcHJvdmVkLCBvcHRpbWl6ZWQsIG9yIHRoYXQgbWF5IGhhdmUgdW5leHBlY3RlZCBjb25zZXF1ZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBvZl9waHlfcGFja2FnZV9qb2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jPTI3Nj1FWFBPUlRfU1lNQk9MX0dQTChwaHlfcGFja2FnZV9qb2luKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy0yOTctICovXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzoyOTg6aW50IG9mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc2l6ZV90IHByaXZfc2l6ZSlcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTI5OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oPTI5PWludCBwaHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oOjMwOmludCBvZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHNpemVfdCBwcml2X3NpemUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oLTMxLXZvaWQgcGh5X3BhY2thZ2VfbGVhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTg1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gJiMzOTtvZlxfcGh5XF9wYWNrYWdlXF9qb2luJiMzOTsqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBvZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbi4gSnVzdCB0aGUgbmFtZSBhbG9uZSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBzb21lIHNvcnQgb2Ygam9pbmluZyBvcGVyYXRpb24sIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBQSFkgcGFja2FnZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGNvbXBsZXhpdGllcy4gSXMgdGhpcyBhIHNpbXBsZSBjb25jYXRlbmF0aW9uLCBvciBhcmUgdGhlcmUgbW9yZSBzb3BoaXN0aWNhdGVkIG1lcmdpbmcgcnVsZXMgYXQgcGxheT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29tYmluaW5nIGRhdGEgc3RydWN0dXJlcywgcGVyaGFwcyBwYWNrZXQgaGVhZGVycywgcGF5bG9hZCBpbmZvcm1hdGlvbiwgb3IgY29udHJvbCBmaWVsZHM/IFRoZSAmIzM0O1BIWSYjMzQ7IHByZWZpeCBpcyBhIHNpZ25pZmljYW50IGNsdWU7IGl0IHNpZ25hbHMgdGhpcyBpcyBwcm9iYWJseSBsb3ctbGV2ZWwsIGNsb3NlIHRvIHRoZSBwaHlzaWNhbCBsYXllci4gSSBuZWVkIHRvIGNvbnNpZGVyIGZhY3RvcnMgc3VjaCBhcyBmcmFtaW5nLCBzeW5jaHJvbml6YXRpb24sIGVycm9yIGhhbmRsaW5nIGF0IHRoaXMgc3RhZ2UsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aHJvdWdocHV0IG9yIGxhdGVuY3kuIFdoYXQmIzM5O3MgdGhlIHRhcmdldCBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlPyBJcyB0aGlzIGEgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgcHJvY2Vzcywgb3IgcnVubmluZyBlbnRpcmVseSBpbiBzb2Z0d2FyZT8gVGhlIGRhdGEgdHlwZSBvZiB0aGUgaW5wdXQsIGFuZCBvdXRwdXQsIGlzIGtleS4gTGV0IG1lIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGRhdGEgc3RyZWFtIHByb2Nlc3NpbmcgcGlwZWxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5ODpcdGludCBvZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHNpemVfdCBwcml2X3NpemUpXG4gMjk5Olx0e1xuIDMwMDpcdFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4gMzAxOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbiAzMDI6XHRcdHUzMiBiYXNlX2FkZHI7XG4gMzAzOlx0XHRpbnQgcmV0O1xuIDMwNDpcdFxuIDMwNTpcdFx0aWYgKCFub2RlKVxuIDMwNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMDc6XHRcbiAzMDg6XHRcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4gMzA5Olx0XHRpZiAoIXBhY2thZ2Vfbm9kZSlcbiAzMTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzExOlx0XG4gMzEyOlx0XHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuIDMxMzpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDMxNDpcdFx0XHRnb3RvIGV4aXQ7XG4gMzE1Olx0XHR9XG4gMzE2Olx0XG4gMzE3Olx0XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCBcJiMzNDtyZWdcJiMzNDssIFx1MDAyNmJhc2VfYWRkcikpIHtcbiAzMTg6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAzMTk6XHRcdFx0Z290byBleGl0O1xuIDMyMDpcdFx0fVxuIDMyMTpcdFxuIDMyMjpcdFx0cmV0ID0gcGh5X3BhY2thZ2Vfam9pbihwaHlkZXYsIGJhc2VfYWRkciwgcHJpdl9zaXplKTtcbiAzMjM6XHRcdGlmIChyZXQpXG4gMzI0Olx0XHRcdGdvdG8gZXhpdDtcbiAzMjU6XHRcbiAzMjY6XHRcdHBoeWRldi1cdTAwM2VzaGFyZWQtXHUwMDNlbnAgPSBwYWNrYWdlX25vZGU7XG4gMzI3Olx0XG4gMzI4Olx0XHRyZXR1cm4gMDtcbiAzMjk6XHRleGl0OlxuIDMzMDpcdFx0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbiAzMzE6XHRcdHJldHVybiByZXQ7XG4gMzMyOlx0fVxuIDMzMzpcdEVYUE9SVF9TWU1CT0xfR1BMKG9mX3BoeV9wYWNrYWdlX2pvaW4pO1xuIDMzNDpcdFxuIDMzNTpcdC8qKlxuIDMzNjpcdCAqIHBoeV9wYWNrYWdlX2xlYXZlIC0gbGVhdmUgYSBjb21tb24gUEhZIGdyb3VwXG4gMzM3Olx0ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDI5CgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDEzNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBQYXRoIEFuYWx5c2lzOiBZVDg4MjQgUEhZIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY29kZSBhZGRlZCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIGlzLCBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzLCAqdW5yZWFjaGFibGUqIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cCB0YXJnZXRpbmcgYW1kNjQgd2l0aCBRRU1VLiAgSGVyZSYjMzk7cyB0aGUgcmVhc29uaW5nOgoKRmlyc3QsIGBvZl9waHlfcGFja2FnZV9qb2luYCBpcyBhIGhhcmQgZGVwZW5kZW5jeS4gSXQgbWFuZGF0ZXMgdGhlIGV4aXN0ZW5jZSBvZiBhbiBgZXRoZXJuZXQtcGh5LXBhY2thZ2VgIERldmljZVRyZWUgbm9kZS4gVGhlIFlUODgyNCBwcm9iZSBmdW5jdGlvbiwgYHl0ODgyNF9wcm9iZWAsIGNhbGxzIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gLCBhbmQgKmNhbm5vdCogZXZlbiBpbml0aWFsaXplIHdpdGhvdXQgdGhhdCBub2RlLiBPbiBhbWQ2NCwgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggRGV2aWNlVHJlZSBieSBkZWZhdWx0LCBzbyB3ZSYjMzk7cmUgaW1tZWRpYXRlbHkgYmxvY2tlZC4gIFRoZSB0YXJnZXQgaXMgYW1kNjQuICBCb29tLCBubyBEVCwgbm8gcHJvYmUuCgpTZWNvbmQsIHRoZSBZVDg4MjQgaXMgKnBoeXNpY2FsKiBoYXJkd2FyZS4gSXQmIzM5O3MgYSBkaXNjcmV0ZSBQSFkgY2hpcCwgYSBxdWFkIDIuNUcgcGFja2FnZS4gSXQgcmVxdWlyZXMgYW4gTURJTyBidXMgYW5kIGEgc3BlY2lmaWMgUEhZIElEICgweDRmNTFlOGI4KS4gU3RhbmRhcmQgUUVNVSwgb24gYW1kNjQsIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhhdCBraW5kIG9mIGhhcmR3YXJlLiBFdmVuIGlmIHdlIGhhZCAqc29tZSogTURJTyBidXMsIHRoZXJlJiMzOTtzIG5vIHdheSB0aGUgWVQ4ODI0IFBIWSBpcyBnb2luZyB0byBiZSBwcmVzZW50IG9yIHZpc2libGUuCgpUaGlyZCwgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoZSBwb2ludCBhYm91dCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAsIHdoaWNoIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzLiAgQSBxdWljayBjb2RlIHNlYXJjaCBzaG93cyB0aGF0ICpvbmx5KiB0aGUgWVQ4ODI0IGRyaXZlciBjYWxscyB0aGF0IGZ1bmN0aW9uLiAgSXQmIzM5O3MgZW50aXJlbHkgd2l0aGluIHRoZSBNb3RvcmNvbW0gUEhZIGRyaXZlciBjb250ZXh0LiBObyBvdGhlciBuZXR3b3JrIHN1YnN5c3RlbSBjb2RlLCBubyBvdGhlciBkcml2ZXJzLCBub3RoaW5nLiAgSXQmIzM5O3MgZWZmZWN0aXZlbHkgYSBwcml2YXRlIGhlbHBlciBmdW5jdGlvbi4KClRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgZmlybWx5IGFuZCBkZWZpbml0aXZlbHkgY2F1Z2h0IGluIHRoZSAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGNhdGVnb3J5IGRlZmluZWQgaW4gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCBhbmQgaXQgcmVxdWlyZXMgYm90aCBoYXJkd2FyZSBwcmVzZW5jZSBhbmQgc3BlY2lmaWMgRGV2aWNlVHJlZSBjb25maWd1cmF0aW9uLiAgSXQmIzM5O3MgYSBjbGVhciBjYXNlIG9mIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGZ1enppbmcgc3lzdGVtIGlzIHNldCB1cCB0byB0YXJnZXQgYW1kNjQgd2l0aCBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBhbmQgd2UgZG8gbm90IGhhdmUgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgaW5mb3JtYXRpb24uClRoZSByZWxldmFudCBgUmVhc29uaW5nYCBmb3IgdGhlIHJlc3VsdHMgd291bGQgYmU6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSBwYWNrYWdlKSBpbiBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYCwgZGV2aWNldHJlZSBiaW5kaW5ncywgYW5kIGEgZ2VuZXJpYyBoZWxwZXIgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoKWAgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNgIHdoaWNoIGlzIHNvbGVseSBjYWxsZWQgYnkgdGhlIFlUODgyNCBkcml2ZXIuIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgb24gYW4gTURJTyBidXMgd2l0aCBtYXRjaGluZyBQSFkgSUQgKDB4NGY1MWU4YjgpLCBhcyB3ZWxsIGFzIE9wZW4gRmlybXdhcmUgKERldmljZSBUcmVlKSBiaW5kaW5ncyAoYGV0aGVybmV0LXBoeS1wYWNrYWdlYCksIG5vbmUgb2Ygd2hpY2ggZXhpc3Qgb3IgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCkuIEFzIHN1Y2gsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLCBEVCBiaW5kaW5ncywgYW5kIGEgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gcGh5LWM0NS5jIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBieSB0aGUgWVQ4ODI0IGRyaXZlci4gVGhlIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgKFBIWSBJRCAweDRmNTFlOGI4KSBvbiBhbiBNRElPIGJ1cyBhbmQgcmVxdWlyZXMgRGV2aWNlIFRyZWUgZXRoZXJuZXQtcGh5LXBhY2thZ2UgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9hbWQ2NCB2aXJ0dWFsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIGFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLCBEVCBiaW5kaW5ncywgYW5kIGEgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gcGh5LWM0NS5jIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBieSB0aGUgWVQ4ODI0IGRyaXZlci4gVGhlIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgKFBIWSBJRCAweDRmNTFlOGI4KSBvbiBhbiBNRElPIGJ1cyBhbmQgcmVxdWlyZXMgRGV2aWNlIFRyZWUgZXRoZXJuZXQtcGh5LXBhY2thZ2UgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9hbWQ2NCB2aXJ0dWFsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIGFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzowMS4wNTMwODgwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzAzMDM2NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgKGEgcXVhZC1wb3J0IDIuNUdicHMgUEhZKSBpbiBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMsIERUIGJpbmRpbmdzLCBhbmQgYSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpbiBwaHktYzQ1LmMgd2hpY2ggaXMgb25seSBpbnZva2VkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLiBUaGUgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBoYXJkd2FyZSAoUEhZIElEIDB4NGY1MWU4YjgpIG9uIGFuIE1ESU8gYnVzIGFuZCByZXF1aXJlcyBEZXZpY2UgVHJlZSBldGhlcm5ldC1waHktcGFja2FnZSBjb25maWd1cmF0aW9uLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgb3IgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL2FtZDY0IHZpcnR1YWwgZnV6emluZyBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgYWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6MDEuMDUzMDkyNjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTUyMjQ3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZDdlMjVhYmFmZjY1MjdjNDRmNmI2OTY4NzFkM2E3NDdlZDlmZDIxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDA3OjUyOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkzZTlmNzY1NDA0YTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcXG5AQCAtMCwwICsxLDU5IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxcbislWUFNTCAxLjJcXG4rLS0tXFxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogTW90b3JDb21tIFlUODgyNCBFdGhlcm5ldCBQSFlcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gS3lsZSBTd2l0Y2ggXFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXFx1MDAzZVxcbitcXG4rZGVzY3JpcHRpb246XFxuKyAgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgaXMgYSBQSFkgcGFja2FnZSBvZiA0IFBIWXMuXFxuK1xcbiskcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgZW51bTpcXG4rICAgICAgLSBtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbisgIC0gcGh5LW1vZGVcXG4rICAtIHJlZ1xcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICBtZGlvIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XFxuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjOVxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwaHktbW9kZSA9IFxcXCJpbnRlcm5hbFxcXCI7XFxuK1xcbisgICAgICAgICAgICBldGhlcm5ldC1waHlANCB7XFxuKyAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjNFxcdTAwM2U7XFxuKyAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICBldGhlcm5ldC1waHlANSB7XFxuKyAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjNVxcdTAwM2U7XFxuKyAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICBldGhlcm5ldC1waHlANiB7XFxuKyAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjNlxcdTAwM2U7XFxuKyAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICBldGhlcm5ldC1waHlANyB7XFxuKyAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjN1xcdTAwM2U7XFxuKyAgICAgICAgICAgIH07XFxuKyAgICAgICAgfTtcXG4rICAgIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li4xZGQ4MGUwNmUyMzcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5AQCAtMzYxLDkgKzM2MSwxMCBAQCBjb25maWcgTUlDUk9TRU1JX1BIWVxcbiBcXG4gY29uZmlnIE1PVE9SQ09NTV9QSFlcXG4gXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBQSFlzXFxcIlxcbitcXHRzZWxlY3QgUEhZX1BBQ0tBR0VcXG4gXFx0aGVscFxcbiBcXHQgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy5cXG4tXFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcy5cXG4rXFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS5cXG4gXFxuIGNvbmZpZyBOQVRJT05BTF9QSFlcXG4gXFx0dHJpc3RhdGUgXFxcIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEhZc1xcXCJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXFxuaW5kZXggOTBhNGY4NmYyNzU4Yi4uN2Y5NDlhYjUzYjU0NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5AQCAtMSwyNCArMSwyOSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4gLypcXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxcbisgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cXG4gICpcXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFxcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXFx1MDAzZVxcbiAgKiBBdXRob3I6IEZyYW5rIFxcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuKyAqIEF1dGhvcjogS3lsZSBcXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcInBoeWxpYi5oXFxcIlxcbitcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTExXFx0XFx0MHgwMDAwMDEwYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjFcXHRcXHQweDAwMDAwMTFhXFxuICNkZWZpbmUgUEhZX0lEX1lUODUyMlxcdFxcdDB4NGY1MWU5MjhcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxXFx0XFx0MHg0ZjUxZTkxYlxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTXFx0XFx0MHg0ZjUxZTkxYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjFcXHRcXHQweDRmNTFlYTE5XFxuKyNkZWZpbmUgUEhZX0lEX1lUODgyNFxcdFxcdDB4NGY1MWU4YjhcXG4gLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XFxuICAqXFx0VVRQIFJlZ2lzdGVyIHNwYWNlXFx0fFxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5AQCAtMzAsNiArMzUsMTggQEBcXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgKi9cXG4gXFxuKy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xcbisgKlxcdFVUUCBSZWdpc3RlciBzcGFjZVxcdHxcXHRVU1hHTUlJIFJlZ2lzdGVyIHNwYWNlXFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogfFxcdFVUUCBNSUlcXHRcXHRcXHR8XFx0VVNYR01JSSBNSUlcXHQgICAgICAgIHxcXG4rICogfFxcdFVUUCBNTURcXHRcXHRcXHR8XFx0XFx0XFx0XFx0fFxcbisgKiB8XFx0VVRQIEV4dGVuZGVkXFx0XFx0fFxcdFVTWEdNSUkgRXh0ZW5kZWRcXHR8XFxuKyAqIHxcXHRVVFAgVG9wIEV4dGVuZGVkXFx0fFxcdFVTWEdNSUkgVG9wIEV4dGVuZGVkXFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqIHxcXHRcXHRcXHRDb21tb24gVG9wIEV4dGVuZGVkXFx0XFx0XFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqL1xcbitcXG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cXG4gXFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cXG5AQCAtMzgxLDYgKzM5OCwxNSBAQFxcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcXHQwXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9GT1JDRV9CWDI1MDBcXHRcXHQxXFxuIFxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFXFx0XFx0KDB4MSlcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcXHRcXHRcXHQoMHgwKVxcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMVxcdFxcdDB4MVxcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUxcXHRcXHQweDBcXG4rI2RlZmluZSBZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0tcXHRcXHRHRU5NQVNLKDMsIDApXFxuKyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRVxcdFxcdFxcdEJJVCgxMylcXG4rI2RlZmluZSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HXFx0XFx0KDB4NylcXG4rXFxuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XFxuIFxcdC8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsXFxuIFxcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xcbkBAIC0zOTksNiArNDI1LDEyIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XFxuIFxcdHU4IHJlZ19wYWdlO1xcbiB9O1xcbiBcXG4rc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7XFxuK1xcdHVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTtcXG4rXFx0Lyogc2hhcmVkX2xvY2sgdXNlZCB0byBVVFBzIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovXFxuK1xcdHN0cnVjdCBtdXRleCBzaGFyZWRfbG9jaztcXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXFxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbkBAIC00MzcsNiArNDY5LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcXG4rICpcXG4rICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlXFxuKyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxcbitcXHRcXHRcXHQgICAgICAgdTE2IHZhbClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xcbit9XFxuK1xcbisvKipcXG4rICogcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jaygpIC0gd3JpdGUgcGFnZSBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRyZXQgXFx1MDAyNj0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7XFxuK1xcdHJldCB8PSAocGFnZSBcXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpO1xcbitcXG4rZXJyOlxcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuQEAgLTYyNiwxMSArNzIyLDEwNTggQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcXG4gXFx0XFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXFxuIFxcdFxcdFxcdFxcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9cXG4rICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBvbGRfcGFnZTtcXG4rXFxuK1xcdHJldHVybiBvbGRfcGFnZSBcXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XFxuK307XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogUmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXHR1MTYgZGF0YTtcXG4rXFxuK1xcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIG9sZF9wYWdlO1xcbitcXHRkYXRhID0gb2xkX3BhZ2UgXFx1MDAyNiAofllUODgyNF9SU1NSX1NQQUNFX01BU0spO1xcbitcXHRkYXRhIHw9IHBhZ2U7XFxuK1xcbitcXHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XFxuK307XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqL1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xcbitcXHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxcbisgKiBhbmQgc2RzIHNvZnRyZXNldC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcdGludCByZXQgPSAtMTtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHNkcyBzb2Z0cmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0ZSAqL1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcXG4rXFx0XFx0XFx0ICAgQk1DUl9SRVNFVCBcXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXFxuK1xcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcXHUwMDNjIDApIHx8XFxuK1xcdFxcdFxcdFxcdCEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdDUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gdmFsO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cygpIC0gY2FsbGVkIHRvIGRvIHN0b3JlIHdvcmtpbmcgc3RhdHVzXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmV0OiBvcGVyYXRpb24ncyByZXR1cm4gY29kZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJldClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHI7XFxuK1xcbitcXHQvKiBjb25maWd1cmUgbm9ybWFsIHRlc3QgbW9kZSAqL1xcbitcXHRyID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0ciA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0ID0gcjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiB1dHAgc29mdCByZXNldCAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rcmV0cnk6XFxuK1xcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcdGludCByO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiBwb3dlciBkb3duICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogcGxsIGNhbGlicmF0aW9uICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBlbmFibGUgbmliYmxlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzU5LCAweDIxNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogMi41RyB0ZW1wbGF0ZSB0b25lICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZjLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgRU1DIENTICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdhLCAweDQwZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBFTUMgUkUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0LyogcmVzZXQgKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcXG4rXFx0XFx0XFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX3Jlc3RvcmU6XFxuK1xcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldHVybiByZXQ7XFxuK1xcbitlcnJfcmVzdG9yZV9ub3JtYWw6XFxuK1xcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcXG4rXFx0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcXG4rXFx0aW50IHJldCA9IC0xO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogcmVhZCBlZnVzZSAqL1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZhbF8xID0gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2YWxfMiA9IHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsXzMgPSByZXQ7XFxuK1xcbitcXHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGFuYWxvZyBDRFIgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIFZDTyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSkgXFx1MDAzZVxcdTAwM2UgNjtcXG4rXFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xcbitcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXFx1MDAzZVxcdTAwM2UgNDtcXG4rXFx0cmV0IHw9IHRtcDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHR0bXAgPSAodmFsXzMgXFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDEyKTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIFNlcmRlcyBMRE8gKi9cXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcXG4rXFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpIFxcdTAwM2VcXHUwMDNlIDI7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDQpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcXG4rXFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFxcdTAwM2VcXHUwMDNlIDU7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcXHUwMDNlIDggKi9cXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLO1xcbitcXHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcXG4rXFx0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiByZXNldCBzZXJkZXMgKi9cXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxcbitcXHRcXHRcXHQgICBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgX19waHlfcmVhZCB0YWtlcyBubyBsb2NrICovXFxuK1xcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcXHUwMDNjIDApIHx8XFxuK1xcdFxcdFxcdFxcdCEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdDUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gdmFsO1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFx0aW50IHIgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMi41RyB0ZW1wYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIDEwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAgdGVtcGF0ZSBNQVUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiBFTUMgQ1MsIEluY29uc2lzdGVudCB3aXRoIGV4dGVybmFsIHBoeSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiBFTUMgUkUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcdC8qIHJlc2V0ICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXFxuK1xcdFxcdFxcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcmVzdG9yZTpcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rXFxuK2Vycl9yZXN0b3JlX25vcm1hbDpcXG4rXFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pblxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpO1xcbiBcXG4tZXJyX3Jlc3RvcmVfcGFnZTpcXG4tXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHJldHVybiByZXQ7XFxuK2VycjpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5AQCAtMzEwNCw2ICs0MjQ3LDQyOSBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7XFxuK1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCBsaW5rID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRsaW5rID0gISEocmV0IFxcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xcbitcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciwgbGluayk7XFxuK1xcdHJldHVybiBsaW5rO1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBsaW5rID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3JlYWRfc3RhdHVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZ19jb21wbGV0ZSkge1xcbitcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbHBhKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHZhbCA9IHJldDtcXG4rXFxuK1xcdGxpbmsgPSB2YWwgXFx1MDAyNiBZVFBIWV9TU1JfTElOSztcXG4rXFx0aWYgKGxpbmspXFxuK1xcdFxcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcXG4rXFxuK1xcdGlmIChsaW5rKSB7XFxuK1xcdFxcdGlmIChwaHlkZXYtXFx1MDAzZWxpbmsgPT0gMClcXG4rXFx0XFx0XFx0cGh5ZGV2X2RiZyhwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIHVwXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAxO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VsaW5rID09IDEpXFxuK1xcdFxcdFxcdHBoeWRldl9kYmcocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwiJXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHR9XFxuK1xcdHBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXhcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbityZXRyeTpcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxcbitcXHQgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0ciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcdGludCByO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgZG93biAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rcmV0cnk6XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxcbitcXHQgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfY29uZmlnX2FuZWcoKSAtIGNvbmZpZyBuZWdvdGlhdGlvblxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcGh5X2N0cmwgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxcbitcXHRcXHRcXHRcXHQgICAgIHBoeV9jdHJsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0cmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2FnZSBmb3IgcGh5ODgyNC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcXG4rXFx0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcXG4rXFxuK1xcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbitcXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcXFwicGh5LW1vZGVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xcbitcXHRcXHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcXG4rXFx0XFx0XFx0XFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTtcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcFxcbitcXHRcXHRcXHRcXHQoaW50ZXJmYWNlX21vZGVfbmFtZSxcXG4rXFx0XFx0XFx0XFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiJXMsIHBoeS1tb2RlIG1pc3NpbmcgaW4gRFRTLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIF9fZnVuY19fKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxcbkBAIC0zMTkwLDEzICs0NzU2LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4gXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyMV9zdXNwZW5kLFxcbiBcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjFfcmVzdW1lLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XFxcIixcXG4rXFx0XFx0LmdldF9mZWF0dXJlc1xcdFxcdD0geXQ4ODI0X2dldF9mZWF0dXJlcyxcXG4rXFx0XFx0LnJlYWRfcGFnZVxcdFxcdD0geXQ4ODI0X3JlYWRfcGFnZSxcXG4rXFx0XFx0LndyaXRlX3BhZ2VcXHRcXHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxcbitcXHRcXHQucHJvYmVcXHRcXHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxcbitcXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcXG4rXFx0XFx0LmFuZWdfZG9uZVxcdFxcdD0geXQ4ODI0X2FuZWdfZG9uZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5yZWFkX3N0YXR1c1xcdFxcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxcbitcXHRcXHQuc29mdF9yZXNldFxcdFxcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXFxuK1xcdFxcdC5zdXNwZW5kXFx0XFx0PSB5dDg4MjRfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0geXQ4ODI0X3Jlc3VtZSxcXG4rXFx0fSxcXG4gfTtcXG4gXFxuIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7XFxuIFxcbi1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXJcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiUGV0ZXIgR2Vpc1xcXCIpO1xcbiBNT0RVTEVfQVVUSE9SKFxcXCJGcmFua1xcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJLeWxlXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xcbkBAIC0zMjA2LDYgKzQ3ODgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSxcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXFxuK1xcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sXFxuIFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5pbmRleCA4NzA5MjAzMTFmOWEwLi41MjhlM2Y0MTQzMTEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuQEAgLTE0MDgsNiArMTQwOCw2MSBAQCBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xcbiBcXG4rLyoqXFxuKyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcXG4rICpcXG4rICogRGVzY3JpcHRpb246IFNldCB0ZW1wbGF0ZSB0ZXN0bW9kZSBpbmNsdWRlIE5vcm1hbCB0byBUZXN0IG1vZGUgN1xcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXJcXG4rICpcXHRyZWFkL3dyaXRlIGVycm9yKS5cXG4rICovXFxuK2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXFxuK3tcXG4rXFx0aW50IGN0cmwgPSAwO1xcbitcXG4rXFx0c3dpdGNoICh0ZXN0X21vZGUpIHtcXG4rXFx0Y2FzZSAwOlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIDM6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSA1OlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIDY6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82O1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgNzpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzc7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSxcXG4rXFx0XFx0XFx0ICAgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSywgY3RybCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XFxuK1xcbiAvKipcXG4gICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzXFxuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDNkOGFmZTZiN2YxYzUuLmZiODI3Y2MzYzk4ZjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjM1Nyw2ICsyMzU3LDcgQEAgaW50IGdlbnBoeV9jNDVfbG9vcGJhY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsIGludCBzcGVlZCk7XFxuIGludCBnZW5waHlfYzQ1X3BtYV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xcbitpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTtcXG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGh5X3BsY2FfY2ZnICpwbGNhX2NmZyk7XFxuIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxcbmluZGV4IDA2ZjRiYzNjMjBjNzEuLjg1NzZhNDg4NzdjNmQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5AQCAtNjMsNiArNjMsNyBAQFxcbiAvKiBNZWRpYS1kZXBlbmRlbnQgcmVnaXN0ZXJzLiAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcXHQxMzBcXHQvKiAxMEdCQVNFLVQgcGFpciBzd2FwIFxcdTAwMjYgcG9sYXJpdHkgKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUlxcdDEzMVxcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREUgMTMyXFx0LyogVGVzdCBtb2RlIGNvbnRyb2wgKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlJcXHQxMzNcXHQvKiAxMEdCQVNFLVQgU05SIG1hcmdpbiwgbGFuZSBBLlxcbiBcXHRcXHRcXHRcXHRcXHQgKiBMYW5lcyBCLUQgYXJlIG51bWJlcmVkIDEzNC0xMzYuICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1JcXHQxNDdcXHQvKiAxMEdCQVNFLVIgZmFzdCByZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCAqL1xcbkBAIC0zMjAsNiArMzIxLDE3IEBAXFxuIC8qIFBNQSAxMEdCQVNFLVIgRmFzdCBSZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3Rlci4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRVxcdDB4MDAwMVxcdC8qIEZhc3QgcmV0cmFpbiBlbmFibGUgKi9cXG4gXFxuKy8qIFBNQSAxMEdCQVNFLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLIDB4RTAwMFxcdC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCAweDAwMDBcXHQvKiBUZW1wbGF0ZSBOb3JtYWwgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xIDB4MjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTEgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4NDAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zIDB4NjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTMgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80IDB4ODAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTQgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4YTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82IDB4YzAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTYgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83IDB4ZTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTcgKi9cXG4rXFxuIC8qIFBDUyAxMEdCQVNFLVIvLVQgc3RhdHVzIHJlZ2lzdGVyIDEuICovXFxuICNkZWZpbmUgTURJT19QQ1NfMTBHQlJUX1NUQVQxX0JMS0xLXFx0MHgwMDAxXFx0LyogQmxvY2sgbG9jayBhdHRhaW5lZCAqL1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6MDIuNjQ5MDU1Njk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjEwNzAzOTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgKGEgcXVhZC1wb3J0IDIuNUdicHMgUEhZKSBpbiBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMsIERUIGJpbmRpbmdzLCBhbmQgYSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpbiBwaHktYzQ1LmMgd2hpY2ggaXMgb25seSBpbnZva2VkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLiBUaGUgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBoYXJkd2FyZSAoUEhZIElEIDB4NGY1MWU4YjgpIG9uIGFuIE1ESU8gYnVzIGFuZCByZXF1aXJlcyBEZXZpY2UgVHJlZSBldGhlcm5ldC1waHktcGFja2FnZSBjb25maWd1cmF0aW9uLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgb3IgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL2FtZDY0IHZpcnR1YWwgZnV6emluZyBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgYWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZDdlMjVhYmFmZjY1MjdjNDRmNmI2OTY4NzFkM2E3NDdlZDlmZDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDc6NTI6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTNlOWY3NjU0MDRhM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcbkBAIC0wLDAgKzEsNTkgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEt5bGUgU3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cbitcbiskcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0gbW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gcGh5LW1vZGVcbisgIC0gcmVnXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2M5XHUwMDNlO1xuK1xuKyAgICAgICAgICAgIHBoeS1tb2RlID0gXCJpbnRlcm5hbFwiO1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA1IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNVx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNlx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjN1x1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li4xZGQ4MGUwNmUyMzcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtMzYxLDkgKzM2MSwxMCBAQCBjb25maWcgTUlDUk9TRU1JX1BIWVxuIFxuIGNvbmZpZyBNT1RPUkNPTU1fUEhZXG4gXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBQSFlzXCJcbitcdHNlbGVjdCBQSFlfUEFDS0FHRVxuIFx0aGVscFxuIFx0ICBFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuXG4tXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxuK1x0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS5cbiBcbiBjb25maWcgTkFUSU9OQUxfUEhZXG4gXHR0cmlzdGF0ZSBcIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEhZc1wiXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCA5MGE0Zjg2ZjI3NThiLi43Zjk0OWFiNTNiNTQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDI0ICsxLDI5IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXG4gLypcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4rICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuXG4gICpcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4rICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcInBoeWxpYi5oXCJcbitcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcdFx0MHgwMDAwMDEwYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVx0XHQweDAwMDAwMTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXHRcdDB4NGY1MWU5MjhcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcdFx0MHg0ZjUxZTkxYlxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcdFx0MHg0ZjUxZTkxYVxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG4rI2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0zMCw2ICszNSwxOCBAQFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgKi9cbiBcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcbisgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRVU1hHTUlJIFJlZ2lzdGVyIHNwYWNlXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRVU1hHTUlJIE1JSVx0ICAgICAgICB8XG4rICogfFx0VVRQIE1NRFx0XHRcdHxcdFx0XHRcdHxcbisgKiB8XHRVVFAgRXh0ZW5kZWRcdFx0fFx0VVNYR01JSSBFeHRlbmRlZFx0fFxuKyAqIHxcdFVUUCBUb3AgRXh0ZW5kZWRcdHxcdFVTWEdNSUkgVG9wIEV4dGVuZGVkXHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHxcdFx0XHRDb21tb24gVG9wIEV4dGVuZGVkXHRcdFx0fFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKi9cbitcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xuIFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cbkBAIC0zODEsNiArMzk4LDE1IEBAXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXHQwXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFx0XHQxXG4gXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFXHRcdCgweDEpXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcdFx0XHQoMHgwKVxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdDB4MVxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTFx0XHQweDBcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXHRcdFx0QklUKDEzKVxuKyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1x0XHQoMHg3KVxuK1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzk5LDYgKzQyNSwxMiBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0dTggcmVnX3BhZ2U7XG4gfTtcbiBcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcbitcdHVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTtcbitcdC8qIHNoYXJlZF9sb2NrIHVzZWQgdG8gVVRQcyBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqL1xuK1x0c3RydWN0IG11dGV4IHNoYXJlZF9sb2NrO1xuK307XG4rXG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNDM3LDYgKzQ2OSw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXG4rICpcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcbit9XG4rXG4rLyoqXG4rICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlXG4rICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbitcdFx0XHQgICAgICAgdTE2IHZhbClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSwgdmFsKTtcbit9XG4rXG4rLyoqXG4rICogcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jaygpIC0gd3JpdGUgcGFnZSBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyO1xuK1x0cmV0IFx1MDAyNj0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4rXHRyZXQgfD0gKHBhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTtcbitcbitlcnI6XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKipcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTYyNiwxMSArNzIyLDEwNTggQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbiBcdFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXG4gXHRcdFx0XHQgICBZVFBIWV9JRVJfV09MLCAwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZF9wYWdlO1xuK1xuK1x0cmV0dXJuIG9sZF9wYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuK307XG4rXG4rLyoqXG4rICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcGFnZTogUmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHR1MTYgZGF0YTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZF9wYWdlO1xuK1x0ZGF0YSA9IG9sZF9wYWdlIFx1MDAyNiAofllUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuK1x0ZGF0YSB8PSBwYWdlO1xuK1xuK1x0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xuK307XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4rXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqL1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSwgQk1DUl9JU09MQVRFKTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXHRpbnQgdmFsO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VULCBCTUNSX1JFU0VUKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xuK1x0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxuKyAqIGFuZCBzZHMgc29mdHJlc2V0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuK1x0aW50IHZhbCA9IDA7XG4rXHRpbnQgcmV0ID0gLTE7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9JU09MQVRFLFxuK1x0XHRcdCAgIEJNQ1JfUkVTRVQgXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsICh2YWwgXHUwMDNjIDApIHx8XG4rXHRcdFx0XHQhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQ1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldCA9IHZhbDtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cygpIC0gY2FsbGVkIHRvIGRvIHN0b3JlIHdvcmtpbmcgc3RhdHVzXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmV0OiBvcGVyYXRpb24ncyByZXR1cm4gY29kZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHI7XG4rXG4rXHQvKiBjb25maWd1cmUgbm9ybWFsIHRlc3QgbW9kZSAqL1xuK1x0ciA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSAhPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHIgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0XHRyZXQgPSByO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldHVybiByZXQ7XG4rcmV0cnk6XG4rXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1x0aW50IHI7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBwb3dlciBkb3duICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIHBsbCBjYWxpYnJhdGlvbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBlbmFibGUgbmliYmxlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDAwMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBjLCAweGMxYTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmIsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgRU1DIENTICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGM4LCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0LyogcmVzZXQgKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4rXHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcbitcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcdHJldHVybiAwO1xuK1xuK2Vycl9yZXN0b3JlOlxuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rXG4rZXJyX3Jlc3RvcmVfbm9ybWFsOlxuK1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuK1x0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbitcdGludCB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4rXHRpbnQgcmV0ID0gLTE7XG4rXHRpbnQgdmFsO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogcmVhZCBlZnVzZSAqL1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGVsc2VcbitcdFx0dmFsXzEgPSByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2YpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZWxzZVxuK1x0XHR2YWxfMiA9IHJldDtcbitcbitcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8zID0gcmV0O1xuK1xuK1x0LyogU2VyZGVzIG9wdGltaXphdGlvbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogYW5hbG9nIENEUiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0Lyogb3B0aW1pemVkIFZDTyAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM4LCAweDkwMjQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM5LCAweDAwYzApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0Lyogb3B0aW1pemVkIFBMTCBsb2NrICovXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbitcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkpIFx1MDAzZVx1MDAzZSA2O1xuK1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyOSwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDQxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCBcdTAwMjY9IH4oQklUKDEpIHwgQklUKDApKTtcbitcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkpIFx1MDAzZVx1MDAzZSA0O1xuK1x0cmV0IHw9IHRtcDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDJiKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0dG1wID0gKHZhbF8zIFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XG4rXHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIFNlcmRlcyBMRE8gKi9cbitcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCBcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcbitcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpIFx1MDAzZVx1MDAzZSAyO1xuK1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDQpO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbitcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFx1MDAzZVx1MDAzZSA1O1xuK1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDgpO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzIFx1MDAzZSA4ICovXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCBcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XG4rXHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcbitcdHJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiByZXNldCBzZXJkZXMgKi9cbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbitcdFx0XHQgICBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiBwb2xsIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2s7IF9fcGh5X3JlYWQgdGFrZXMgbm8gbG9jayAqL1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsIFx1MDAzYyAwKSB8fFxuK1x0XHRcdFx0ISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuK1x0XHRcdFx0NTAwMDAsIDYwMDAwMCwgdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSB2YWw7XG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0XG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXHRpbnQgdmFsID0gMDtcbitcdGludCByID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDEsIDB4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogcG93ZXIgZG93biAqL1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweGNiYSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4YTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzODgsIDB4YTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAyLjVHIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAwMCBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyYywgMHg1MDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyMiwgMHg2NDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwMCB0ZW1wYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMwYiwgMHhhYTFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YiwgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAgdGVtcGF0ZSBNQVUqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY2LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY5LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiBFTUMgUkUqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjLCAweDQxYTEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0LyogcmVzZXQgKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4rXHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcbitcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9yZXN0b3JlOlxuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rXG4rZXJyX3Jlc3RvcmVfbm9ybWFsOlxuK1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuK1x0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbiBcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXG5cIixcbitcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0cmV0dXJuIHJldDtcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5AQCAtMzEwNCw2ICs0MjQ3LDQyOSBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuKy8qKlxuKyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5XG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRsaW5rID0gISEocmV0IFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XG4rXG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXG5cIixcbitcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuK1x0cmV0dXJuIGxpbms7XG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbitcdFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX2xwYShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHZhbCA9IHJldDtcbitcbitcdGxpbmsgPSB2YWwgXHUwMDI2IFlUUEhZX1NTUl9MSU5LO1xuK1x0aWYgKGxpbmspXG4rXHRcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcbitcbitcdGlmIChsaW5rKSB7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAwKVxuK1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuK1x0XHRcdFx0ICAgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIHVwXFxuXCIsXG4rXHRcdFx0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAxKVxuK1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuK1x0XHRcdFx0ICAgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIGRvd25cXG5cIixcbitcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuK1x0fVxuK1x0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1x0aW50IHI7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK3JldHJ5OlxuK1x0LypcbitcdCAqIElmIHRoZSBQSFkgdXAgb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25cbitcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4rXHQgKi9cbitcdHIgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Jlc3VtZSgpIC0gcmVzdW1lIHRoZSBoYXJkd2FyZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcdGludCByO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK3JldHJ5OlxuK1x0LypcbitcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuK1x0ICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS5cbitcdCAqL1xuK1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcGh5X2N0cmwgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuK1xuK1x0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4rXHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuK1x0XHRcdFx0ICAgICBwaHlfY3RybCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdHJldCA9IF9fZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldiwgcmV0KTtcbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2thZ2UgZm9yIHBoeTg4MjQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xuK1x0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcbitcbitcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcInBoeS1tb2RlXCIsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmludGVyZmFjZV9tb2RlX25hbWUpKSB7XG4rXHRcdGlmICghc3RyY2FzZWNtcChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuK1x0XHRcdFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHtcbitcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXBcbitcdFx0XHRcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuK1x0XHRcdFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xuK1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCIlcywgcGh5LW1vZGUgbWlzc2luZyBpbiBEVFMuXFxuXCIsXG4rXHRcdFx0ICAgIF9fZnVuY19fKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHBoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KSkge1xuK1x0XHRyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuIFx0e1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG5AQCAtMzE5MCwxMyArNDc1NiwyOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODIxX3N1c3BlbmQsXG4gXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyMV9yZXN1bWUsXG4gXHR9LFxuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXG4rXHRcdC5uYW1lXHRcdFx0PSBcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcIixcbitcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHl0ODgyNF9nZXRfZmVhdHVyZXMsXG4rXHRcdC5yZWFkX3BhZ2VcdFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxuK1x0XHQucHJvYmVcdFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcbitcdFx0LmNvbmZpZ19hbmVnXHRcdD0geXQ4ODI0X2NvbmZpZ19hbmVnLFxuK1x0XHQuYW5lZ19kb25lXHRcdD0geXQ4ODI0X2FuZWdfZG9uZSxcbitcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxuK1x0XHQucmVhZF9zdGF0dXNcdFx0PSB5dDg4MjRfcmVhZF9zdGF0dXMsXG4rXHRcdC5zb2Z0X3Jlc2V0XHRcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXG4rXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODI0X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyNF9yZXN1bWUsXG4rXHR9LFxuIH07XG4gXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcbiBcbi1NT0RVTEVfREVTQ1JJUFRJT04oXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclwiKTtcbiBNT0RVTEVfQVVUSE9SKFwiUGV0ZXIgR2Vpc1wiKTtcbiBNT0RVTEVfQVVUSE9SKFwiRnJhbmtcIik7XG4rTU9EVUxFX0FVVEhPUihcIkt5bGVcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG5AQCAtMzIwNiw2ICs0Nzg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxuK1x0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcbiBcdHsgLyogc2VudGluZWwgKi8gfVxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbmluZGV4IDg3MDkyMDMxMWY5YTAuLjUyOGUzZjQxNDMxMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5AQCAtMTQwOCw2ICsxNDA4LDYxIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xuIFxuKy8qKlxuKyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XG4rICpcbisgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXJcbisgKlx0cmVhZC93cml0ZSBlcnJvcikuXG4rICovXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcbit7XG4rXHRpbnQgY3RybCA9IDA7XG4rXG4rXHRzd2l0Y2ggKHRlc3RfbW9kZSkge1xuK1x0Y2FzZSAwOlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgMTpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzE7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSAyOlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMjtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIDM6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgNDpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSA1OlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIDY6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82O1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgNzpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzc7XG4rXHRcdGJyZWFrO1xuK1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLFxuK1x0XHRcdCAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbitcbiAvKipcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggM2Q4YWZlNmI3ZjFjNS4uZmI4MjdjYzNjOThmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzU3LDYgKzIzNTcsNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggMDZmNGJjM2MyMGM3MS4uODU3NmE0ODg3N2M2ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC02Myw2ICs2Myw3IEBAXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcdDEzMFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcdTAwMjYgcG9sYXJpdHkgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXHQxMzFcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzJcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlJcdDEzM1x0LyogMTBHQkFTRS1UIFNOUiBtYXJnaW4sIGxhbmUgQS5cbiBcdFx0XHRcdFx0ICogTGFuZXMgQi1EIGFyZSBudW1iZXJlZCAxMzQtMTM2LiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1JcdDE0N1x0LyogMTBHQkFTRS1SIGZhc3QgcmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgKi9cbkBAIC0zMjAsNiArMzIxLDE3IEBAXG4gLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9FTkFCTEVcdDB4MDAwMVx0LyogRmFzdCByZXRyYWluIGVuYWJsZSAqL1xuIFxuKy8qIFBNQSAxMEdCQVNFLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0sgMHhFMDAwXHQvKiBUZW1wbGF0ZSB0ZXN0IG1vZGUgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCAweDAwMDBcdC8qIFRlbXBsYXRlIE5vcm1hbCAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDIwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4NDAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHg2MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDgwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4YTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHhjMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweGUwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovXG4rXG4gLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi9cbiAjZGVmaW5lIE1ESU9fUENTXzEwR0JSVF9TVEFUMV9CTEtMS1x0MHgwMDAxXHQvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzowMi42NDkwNTc4NzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NzQ4MDQwMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoLCB3aGljaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBZVDg4MjQgUEhZLCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBzZWU6XG5cbjEuICBEb2N1bWVudGF0aW9uIHVwZGF0ZXM6IFRoYXQncyB1c3VhbGx5IG5vdCB3aGVyZSB0aGUganVpY3kgYnVncyBhcmUsIGJ1dCBhbHdheXMgZ29vZCB0byBrbm93LlxuMi4gIEtjb25maWcgY2hhbmdlczogQWRkaW5nIGBQSFlfUEFDS0FHRWAgc2VsZWN0aW9uLCBhbmQgZGVzY3JpcHRpb24gY2hhbmdlcy4gUG90ZW50aWFsbHkgcmVsZXZhbnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBQSFlfUEFDS0FHRWAuXG4zLiAgVGhlIGNvcmUgb2YgdGhlIHBhdGNoOiBUaGUgYG1vdG9yY29tbS5jYCBkcml2ZXIgaGFzIGJlZW4gZXh0ZW5kZWQgd2l0aCBudW1lcm91cyBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IGZvciB0aGUgWVQ4ODI0IFBIWS4gVGhpcyBpbmNsdWRlcyByZWFkL3dyaXRlIGZ1bmN0aW9ucyBmb3IgcmVnaXN0ZXJzLCBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuIFRoaXMgaXMgd2hlcmUgSSdsbCBmb2N1cyBtb3N0IG9mIG15IGF0dGVudGlvbi4gVGhlIGBwaHktYzQ1LmNgIGFuZCBgcGh5LmhgIGNoYW5nZXMgbG9vayByZWxhdGVkIHRvIGEgZ2VuZXJhbCB0ZXN0IG1vZGUgY2FwYWJpbGl0eS5cbjQuICBNRElPIGRlZmluaXRpb25zOiBOZXcgZGVmaW5pdGlvbnMgaW4gYG1kaW8uaGAgZm9yIHRlc3QgbW9kZSBzZXR0aW5ncy4gVGhlc2UgYXJlIHZlcnkgaW50ZXJlc3RpbmcsIGFzIHRoZXkgZGVmaW5lIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sXG5cbk5vdyBjb21lcyB0aGUgY3J1Y2lhbCBwYXJ0OiByZWFjaGFiaWxpdHkuIElzIHRoaXMgbmV3IFBIWSBkcml2ZXIsIGFuZCB0aGUgZnVuY3Rpb25zIGl0IGFkZHMsIGFjY2Vzc2libGUgd2l0aGluIGEgU3l6a2FsbGVyLWZ1enphYmxlIGVudmlyb25tZW50PyBMZXQncyBzZWUuLi5cblxuSSBrbm93IGBtb3RvcmNvbW0uY2AgaXMgYW4gTURJTyBQSFkgZHJpdmVyLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyIHRyaWdnZXIgY29kZSBwYXRocyB3aXRoaW4gTURJTyBQSFkgZHJpdmVycz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgYW5kIGJvdW5kIHRvIHRoZSBzeXN0ZW0uIEFyZSB0aGV5IHNvbGVseSB0aWVkIHRvIHBoeXNpY2FsIE1ESU8gYnVzZXMsIG9yIGlzIHRoZXJlIGEgd2F5IHRvIGluc3RhbnRpYXRlIE1ESU8vUEhZIGRldmljZXMgdmlydHVhbGx5PyBDYW4gSSBjcmVhdGUgYW4gTURJTyBkZXZpY2UgaW4gYSB3YXkgU3l6a2FsbGVyIGNhbiBpbnRlcmFjdCB3aXRoPyBUaGlzIGlzIHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbi4gSWYgdGhleSBhcmUgYm91bmQgdG8gYSByZWFsIE1ESU8sIEkgd291bGQgbmVlZCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudC5cblxuSSBuZWVkIHRvIHNlYXJjaCB3aXRoaW4gU3l6a2FsbGVyLCBhbmQgZXZlbiB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYsIGZvciBob3cgTURJTyBkZXZpY2VzIGFyZSBjcmVhdGVkIG9yIGNvbnRyb2xsZWQuIEknbGwgc2VhcmNoIGZvciB0aGluZ3MgbGlrZSBcIm1kaW9cIiwgXCJwaHlcXF9kcml2ZXJcIiwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHVzZXJzcGFjZSBpbnRlcmZhY2VzIHRoYXQgYWxsb3cgbWUgdG8gY3JlYXRlIGFuIE1ESU8gUEhZLiBJZiBJIGNhbiBpbnN0YXRpYXRlIG9uZSB2aXJ0dWFsbHksIEkgYW0gaW4gbHVjay4gVGhhdCB3b3VsZCBvcGVuIHRoZSBkb29yIHRvIGZ1enppbmcgdGhlIFlUODgyNCBhbmQgdGhlIG90aGVyIGRyaXZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjA3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6MDkuMzk3MTAwOTc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDA2NzU1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby4qbmV3X2RldmljZXxwaHlfZGV2aWNlX2NyZWF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9MTE3PWludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMzQtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMzU6XFx0XFx0cGh5ID0gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsIDAsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMzYtXFx0aWYgKElTX0VSUihwaHkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz01NTE9c3RhdGljIHZvaWQgdGphMTEwMl9wMV9yZWdpc3RlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODUtXFx0XFx0LyogUmVhbCBQSFkgSUQgb2YgUG9ydCAxIGlzIDAgKi9cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1ODY6XFx0XFx0cGh5ID0gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBQSFlfSURfVEpBMTEwMiwgZmFsc2UsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU4Ny1cXHRcXHRpZiAoSVNfRVJSKHBoeSkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU5Mi1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1OTM6XFx0XFx0LyogT3ZlcndyaXRlIHBhcmVudCBkZXZpY2UuIHBoeV9kZXZpY2VfY3JlYXRlKCkgc2V0IHBhcmVudCB0b1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU5NC1cXHRcXHQgKiB0aGUgbWlpX2J1cy1cXHUwMDNlZGV2LCB3aGljaCBpcyBub3QgY29ycmVjdCBpbiBjYXNlLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz03Mjg9c3RhdGljIGludCBwaHlfcmVxdWVzdF9kcml2ZXJfbW9kdWxlKHN0cnVjdCBwaHlfZGV2aWNlICpkZXYsIHUzMiBwaHlfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTc0Ny1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjc0ODpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDktXFx0XFx0XFx0XFx0ICAgICBib29sIGlzX2M0NSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtODM5LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjg0MDpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfY3JlYXRlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTg0MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTA3MT1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDk2LVxcdFxcdGlmICghcilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwOTc6XFx0XFx0XFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5OC1cXHRcXHRcXHRcXHRcXHRcXHQgdHJ1ZSwgXFx1MDAyNmM0NV9pZHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTAwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwMTpcXHRyZXR1cm4gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsIGlzX2M0NSwgXFx1MDAyNmM0NV9pZHMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxNjc9aW50IHBoeV9tb2RpZnlfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsIHUzMiByZWdudW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxNjktXFxuaW5jbHVkZS9saW51eC9waHkuaDoyMTcwOnN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyIHBoeV9pZCxcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxNzEtXFx0XFx0XFx0XFx0ICAgICBib29sIGlzX2M0NSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6MTEuNTk3Nzg0ODA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjcxMDAwNjE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gUEhZIERldmljZSBQcm9iaW5nKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZCEgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsOiBIb3cgZXhhY3RseSBkbyB3ZSBwcm9iZSB0aGVzZSBQSFkgZGV2aWNlcz8gTGV0IG1lIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSdtIHRoaW5raW5nLCBhIFBIWSBkZXZpY2UgaXMgY3JlYXRlZCwgZWl0aGVyIHRocm91Z2ggdGhlIERldmljZSBUcmVlIGZ3bm9kZSAod2hpY2ggbWFrZXMgc2Vuc2UsIHByZWNvbmZpZ3VyZWQgaGFyZHdhcmUpIG9yIGR1cmluZyB0aGUgTURJTyBidXMgcmVnaXN0cmF0aW9uIHVzaW5nIGBtZGlvYnVzX3JlZ2lzdGVyYC4gUmlnaHQsIGFuZCB0aGVuIHRoZSBjcml0aWNhbCBzdGVwIGlzIHRoZSBQSFkgZHJpdmVyIGJpbmRpbmcsIHRoaXMgbGlrZWx5IGRlcGVuZHMgb24gd2hhdCdzIHJlYWQgZnJvbSB0aGUgaGFyZHdhcmUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgdGhlIGBwaHlfaWRgIHJlZ2lzdGVyLCBvciBhbHNvIGEgRGV2aWNlIFRyZWUgbWF0Y2gsIHJpZ2h0PyBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBzbyBJJ2xsIGNoZWNrIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2AgdG8gcmVtaW5kIG15c2VsZiBhYm91dCBpdHMgc3RydWN0dXJlLiBPa2F5LCBzbyBJIG5vdyB1bmRlcnN0YW5kIHRoaXMsIHdoZXJlIGlzIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBhY3R1YWxseSAqY2FsbGVkKj8gVGltZSBmb3IgYSBxdWljayBgZ3JlcGAgdG8gdHJhY2sgZG93biB0aG9zZSB1c2FnZXMuIEkgY2FuIHVzZSB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY1OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzoxNC4zMDc3OTI4ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzc3NTE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz03Nzc9c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg0LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo3ODU6XFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg2LVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9ODQxPXN0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo4NDk6XFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODUwLVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTk3OT1zdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTIzMi1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTIzMzpcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMzQtXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjQ3LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjQ4OlxcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI0OS1cXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjYwLWVycl9yZXN0b3JlX25vcm1hbDpcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTI2MTpcXHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNjItXFx0XFx0XFx0XFx0XFx0IFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTE1MjA9c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzA0LVxcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3MDU6XFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzA2LVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcxOS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTcyMDpcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MjEtXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTczMy1lcnJfcmVzdG9yZV9ub3JtYWw6XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3MzQ6XFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzM1LVxcdFxcdFxcdFxcdFxcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM9MTQwOT1FWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MTEtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxNDEyOiAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDEzLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDIwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQyMTppbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0NjMtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQ2NDpFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0NjUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIzNTk9aW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIzNjA6aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XFxuaW5jbHVkZS9saW51eC9waHkuaC0yMzYxLWludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzoxNS45NDE1NzMwODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDM0MjQyNjk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFJvYWRibG9jayoqXG5cbk9rYXksIHNvIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBvbmx5IGdldHMgY2FsbGVkIHdpdGhpbiBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgZ29hbDogY2FuIEkgZXZlbiAqcmVhY2gqIG9yIGluc3RhbnRpYXRlIGEgTW90b3Jjb21tIFBIWSwgc3BlY2lmaWNhbGx5IHRoZSBZVDg4MjQsIGR1cmluZyBteSBhbWQ2NCBRRU1VIHN5emthbGxlciBmdXp6aW5nIHJ1bnM/IExldCdzIGNoZWNrIHRoZSBndWlkZWxpbmVzLlxuXG5SaWdodCwgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLi4uIEkgcmVtZW1iZXIsIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIFNwZWNpZmljYWxseSwgXCJWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycy4uLiByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiXG5cbkhhbmcgb24uLi4gSXMgYW4gRXRoZXJuZXQgUEhZIGRyaXZlciAqc3RydWN0dXJhbGx5KiB1bnJlYWNoYWJsZT8gVGhlIFlUODgyNCBpcyBhIGRpc2NyZXRlIEV0aGVybmV0IFBIWSBjaGlwIOKAkyBhIHBoeXNpY2FsIGNoaXAuIEl0J3MgYSBcIlF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCBQSFkuXCIgSXQgY29ubmVjdHMgb3ZlciBNRElPIHRvIGEgTUFDIG9yIFNvQyBhbmQgaXMgaWRlbnRpZmllZCB2aWEgZGV2aWNldHJlZSBiaW5kaW5ncyBsaWtlIGBtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VgIG9yIHRoZSBNRElPIFBIWSBJRCAweDRmNTFlOGI4LlxuXG5Pa2F5LCBkb2VzICpzdGFuZGFyZCogUUVNVSwgdGhlIG9uZSBzeXprYWxsZXIgdXNlcywgZW11bGF0ZSB0aGlzPyBOb3BlLiBRRU1VIGVtdWxhdGVzIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzIGxpa2UgZTEwMDAsIHZpcnRpby1uZXQsIHJ0bDgxMzksIGFuZCBzbyBvbi4gTm9uZSBvZiB0aG9zZSBoYXZlIGEgTW90b3Jjb21tIFBIWSBjaGlwLiBJdCBkb2Vzbid0IGxvb2sgbGlrZSB0aGV5IGhhdmUgdGhlIG9wdGlvbiB0byBhZGQgYW55LlxuXG5CdXQsIGEgdmlydHVhbCBNRElPIGJ1cz8gT3IgbWF5YmUgc29tZSBraW5kIG9mIFVTQi10by1NRElPIGFkYXB0ZXIgb3Igc2ltaWxhciB0aGluZyBjb3VsZCBiZSB1c2VkIGluIHN5emthbGxlciB0byByZWFjaCB0aGlzPyBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBrZXJuZWwgYW5kIHN5emthbGxlciBzb3VyY2UgZm9yIGFueSBldmlkZW5jZSBvZiB2aXJ0dWFsIE1ESU8gYnVzZXMgb3IgVVNCLU1ESU8gYWRhcHRlcnMuIFRoYXQncyB0aGUgbmV4dCBhdmVudWUgdG8gY2hlY2suLi4gb3RoZXJ3aXNlLCB0aGlzIGRyaXZlciBpcyBnb2luZyB0byBiZSBhIGRlYWQgZW5kIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDM2MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzoyNi4yODQwMDE3ODFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTIyODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKnVzYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfTURJT19NU0NDX01JSU0pXFx0XFx0Kz0gbWRpby1tc2NjLW1paW0ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX01ESU9fTVZVU0IpXFx0XFx0Kz0gbWRpby1tdnVzYi5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0yMi1vYmotJChDT05GSUdfTURJT19PQ1RFT04pXFx0XFx0Kz0gbWRpby1vY3Rlb24ub1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM9MzI9c3RhdGljIGludCBtdnVzYl9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKm1kaW8sIGludCBkZXYsIGludCByZWcpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtMzMte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjM0OlxcdHN0cnVjdCBtdnVzYl9tZGlvICptdnVzYiA9IG1kaW8tXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtMzUtXFx0aW50IGVyciwgYWxlbjtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jPTUyPXN0YXRpYyBpbnQgbXZ1c2JfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy01My17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6NTQ6XFx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiID0gbWRpby1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy01NS1cXHRpbnQgYWxlbjtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTYzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjY0OnN0YXRpYyBpbnQgbXZ1c2JfbWRpb19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTY1LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy02Ny1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2aW50ZXJmYWNlLVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6Njg6XFx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTY5LVxcdHN0cnVjdCBtaWlfYnVzICptZGlvO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTcwLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjcxOlxcdG1kaW8gPSBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZShkZXYsIHNpemVvZigqbXZ1c2IpKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy03Mi1cXHRpZiAoIW1kaW8pXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy04Mi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYzo4MzpcXHRzbnByaW50ZihtZGlvLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwibXZ1c2ItJXNcXFwiLCBkZXZfbmFtZShkZXYpKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy04NC1cXHRtZGlvLVxcdTAwM2VuYW1lID0gbWRpby1cXHUwMDNlaWQ7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtODUtXFx0bWRpby1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjg2OlxcdG1kaW8tXFx1MDAzZXJlYWQgPSBtdnVzYl9tZGlvX3JlYWQ7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6ODc6XFx0bWRpby1cXHUwMDNld3JpdGUgPSBtdnVzYl9tZGlvX3dyaXRlO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTg4LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtOTMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6OTQ6c3RhdGljIHZvaWQgbXZ1c2JfbWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtOTUte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjk2OlxcdHN0cnVjdCBtdnVzYl9tZGlvICptdnVzYiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy05Ny1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYzo5ODpcXHRtZGlvYnVzX3VucmVnaXN0ZXIobXZ1c2ItXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTk5LVxcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02NTg9c3RhdGljIGludCBhc2l4X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NjgtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY2OTpzdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjcwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02ODMtXFx0LyogbWlpIGJ1cyBuYW1lIGlzIHVzYi1cXHUwMDNjdXNiIGJ1cyBudW1iZXJcXHUwMDNlLVxcdTAwM2N1c2IgZGV2aWNlIG51bWJlclxcdTAwM2UgKi9cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg0OlxcdHNucHJpbnRmKHByaXYtXFx1MDAzZW1kaW8tXFx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFxcXCJ1c2ItJTAzZDolMDNkXFxcIixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg1LVxcdFxcdCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlYnVzbnVtLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldm51bSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz01NT1zdGF0aWMgdm9pZCBheDg4MTcyYV9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy02MC0vKiB1c2UgcGh5bGliIGluZnJhc3RydWN0dXJlICovXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6NjE6c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc2LVxcdC8qIG1paSBidXMgbmFtZSBpcyB1c2ItXFx1MDAzY3VzYiBidXMgbnVtYmVyXFx1MDAzZS1cXHUwMDNjdXNiIGRldmljZSBudW1iZXJcXHUwMDNlICovXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6Nzc6XFx0c25wcmludGYocHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcInVzYi0lMDNkOiUwM2RcXFwiLFxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc4LVxcdFxcdCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlYnVzbnVtLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldm51bSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy05My1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo5NDpzdGF0aWMgdm9pZCBheDg4MTcyYV9yZW1vdmVfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtOTUte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDkxPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDctXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA4OlxcdHNucHJpbnRmKGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcInVzYi0lMDNkOiUwM2RcXFwiLFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEwOS1cXHRcXHQgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VidXMtXFx1MDAzZWJ1c251bSwgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXZudW0pO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTY2PXN0YXRpYyB1MzIgbWlpX2FkZHJlc3NfY21kKGludCBwaHlfaWQsIGludCBpZHgsIHUxNiBvcClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE3MC1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxNzE6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE3Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yMTctXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MjE4OnN0YXRpYyB2b2lkIHNtc2M5NXh4X21kaW9fd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTIxOS1cXHRcXHRcXHRcXHRpbnQgcmVndmFsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzoyNi40Mjc5MzA4NzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODA0NzY3OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBNb3RvcmNvbW0gUEhZIERyaXZlcioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYHl0ODgyNF9wcm9iZWAgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIGFib3V0IHdoYXQncyBnb2luZyBvbiwgYW5kIHRoaXMgY291bGQgYmUga2V5LiBMZXQncyBleGFtaW5lIHRoaXMgc25pcHBldDpcblxuYGBgY1xuc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbntcblx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcblx0aW50IHJldDtcblxuXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcblx0aWYgKHJldClcblx0XHRyZXR1cm4gcmV0O1xuXG5cdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcblx0XHRyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpO1xuXHRcdGlmIChyZXQpXG5cdFx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0cmV0dXJuIDA7XG59XG5gYGBcblxuUmlnaHQsIHNvIHdlJ3JlIGpvaW5pbmcgYSBwYWNrYWdlIHVzaW5nIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gLCBhbmQgcG90ZW50aWFsbHkgcHJvYmluZyBpdC4gV2hhdCdzIGNydWNpYWwgaGVyZSBpcyB0aGF0IGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGxpa2VseSBtYW5hZ2VzIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIGFzc29jaWF0aW9uIHdpdGggdGhlIGRldmljZSB0cmVlLiBJdCBzZWVtcyB0byBiZSBzZXR0aW5nIHVwIHNoYXJlZCBwcml2YXRlIGRhdGEgd2l0aGluIHRoZSBgeXQ4ODI0X3NoYXJlZF9wcml2YCBzdHJ1Y3QuIFRoZSBmYWN0IHRoYXQgYHBoeV9wYWNrYWdlX3Byb2JlX29uY2VgIGlzIGNhbGxlZCBjb25kaXRpb25hbGx5IGJhc2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbmAgaXMgaW50cmlndWluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGZ1bmN0aW9uIG1vcmUgcHJlY2lzZWx5LCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24uIEl0IGNvdWxkIGJlIHRoZSBsaW5jaHBpbiBpbiBob3cgdGhlIE1vdG9yY29tbSBQSFkgaXMgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQsIGVzcGVjaWFsbHkgY29uY2VybmluZyByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCB0aGUgZGV2aWNlIHRyZWUgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjMwLjIzMjcwMzE0NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTg5OTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTQ2NTQ9c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00NjU5LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo0NjYwOlxcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00NjYxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYz00MDU9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9waHlfcGFja2FnZV9qb2luKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQwNy0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzo0MDg6ICogZGV2bV9vZl9waHlfcGFja2FnZV9qb2luIC0gcmVzb3VyY2UgbWFuYWdlZCBvZl9waHlfcGFja2FnZV9qb2luKClcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00MDktICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQSFkgcGFja2FnZVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDE2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jOjQxNzppbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00MTgtXFx0XFx0XFx0ICAgICBzaXplX3QgcHJpdl9zaXplKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDM4LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzo0Mzk6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00NDAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLmg9MzI9aW50IGRldm1fcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oLTMzLVxcdFxcdFxcdCAgaW50IGJhc2VfYWRkciwgc2l6ZV90IHByaXZfc2l6ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oOjM0OmludCBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaC0zNS1cXHRcXHRcXHQgICAgIHNpemVfdCBwcml2X3NpemUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTY5ND1zdGF0aWMgaW50IHFjYTgwN3hfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy03MDEtXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjcwMjpcXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNzAzLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjMxLjc1ODYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyMDY4MDAyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYHBoeV9wYWNrYWdlLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byBpdC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBvbmUgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jYC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZSBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldmljZSB0cmVlIGFuZCBQSFkgcGFja2FnZSBoYW5kbGluZy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIGRldmljZSBtYW5hZ2VtZW50IGxpYnJhcnkgZ2l2ZW4gdGhlIGBkZXZtX2AgcHJlZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU3OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjM0Ljk2NTQxMjk4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDg6XFx0ICogZGV2bV9vZl9waHlfcGFja2FnZV9qb2luIC0gcmVzb3VyY2UgbWFuYWdlZCBvZl9waHlfcGFja2FnZV9qb2luKClcXG4gNDA5OlxcdCAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUEhZIHBhY2thZ2VcXG4gNDEwOlxcdCAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbiA0MTE6XFx0ICogQHByaXZfc2l6ZTogaWYgbm9uLXplcm8gYWxsb2NhdGUgdGhpcyBhbW91bnQgb2YgYnl0ZXMgZm9yIHByaXZhdGUgZGF0YVxcbiA0MTI6XFx0ICpcXG4gNDEzOlxcdCAqIE1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpLiBTaGFyZWQgc3RvcmFnZSBmZXRjaGVkIGJ5IHRoaXMgZnVuY3Rpb24sXFxuIDQxNDpcXHQgKiBwaHlfcGFja2FnZV9sZWF2ZSgpIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uIGRyaXZlciBkZXRhY2guIFNlZVxcbiA0MTU6XFx0ICogb2ZfcGh5X3BhY2thZ2Vfam9pbigpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiA0MTY6XFx0ICovXFxuIDQxNzpcXHRpbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gNDE4OlxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IHByaXZfc2l6ZSlcXG4gNDE5OlxcdHtcXG4gNDIwOlxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICoqcHRyO1xcbiA0MjE6XFx0XFx0aW50IHJldDtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0cHRyID0gZGV2cmVzX2FsbG9jKGRldm1fcGh5X3BhY2thZ2VfbGVhdmUsIHNpemVvZigqcHRyKSxcXG4gNDI0OlxcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwpO1xcbiA0MjU6XFx0XFx0aWYgKCFwdHIpXFxuIDQyNjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0cmV0ID0gb2ZfcGh5X3BhY2thZ2Vfam9pbihwaHlkZXYsIHByaXZfc2l6ZSk7XFxuIDQyOTpcXHRcXG4gNDMwOlxcdFxcdGlmICghcmV0KSB7XFxuIDQzMTpcXHRcXHRcXHQqcHRyID0gcGh5ZGV2O1xcbiA0MzI6XFx0XFx0XFx0ZGV2cmVzX2FkZChkZXYsIHB0cik7XFxuIDQzMzpcXHRcXHR9IGVsc2Uge1xcbiA0MzQ6XFx0XFx0XFx0ZGV2cmVzX2ZyZWUocHRyKTtcXG4gNDM1OlxcdFxcdH1cXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDM4OlxcdH1cXG4gNDM5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbik7XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiUEhZIHBhY2thZ2Ugc3VwcG9ydFxcXCIpO1xcbiA0NDI6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzozNC45NjU1MDc3MzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA0MTIwNzM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiwgc3VtbWFyaXplZCBmcm9tIHRoZSBwcm92aWRlZCB0ZXh0LCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFuZCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBbmFseXppbmcgYG9mX3BoeV9wYWNrYWdlX2pvaW5gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIGZ1bmN0aW9uIG9yIGNvbmNlcHQuIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBQSFkgKFBoeXNpY2FsIExheWVyKSBjb250ZXh0LiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBmdW5jdGlvbiByZWxhdGVkIHRvIGpvaW5pbmcgb3IgYXNzZW1ibGluZyBzb21ldGhpbmcgYXQgdGhlIHBoeXNpY2FsIGxldmVsLiBNeSBtaW5kJ3MganVtcGluZyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3M6IElzIHRoaXMgYWJvdXQgcGFja2V0IGFnZ3JlZ2F0aW9uLCBwZXJoYXBzPyBPciBpcyBpdCBtb3JlIGZ1bmRhbWVudGFsLCBkZWFsaW5nIHdpdGggdGhlIGFsaWdubWVudCBhbmQgc3luY2hyb25pemF0aW9uIG9mIGluY29taW5nIGRhdGEgc3RyZWFtcyBhdCB0aGUgdmVyeSBsb3dlc3QgbGV2ZWwgb2YgdGhlIHByb3RvY29sIHN0YWNrP1xuXG5HaXZlbiBteSBleHBlcmllbmNlLCBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBsaWtlbHkgc2l0cyBiZXR3ZWVuIHRoZSByYXcgc2lnbmFsIHByb2Nlc3NpbmcgYW5kIHRoZSBtb3JlIHN0cnVjdHVyZWQgTUFDIChNZWRpdW0gQWNjZXNzIENvbnRyb2wpIGxheWVyLiBJdCBwcm9iYWJseSBoYW5kbGVzIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBiaXQtbGV2ZWwgbWFuaXB1bGF0aW9uIOKAkyBtYXliZSBmcmFtaW5nLCBlcnJvciBjb3JyZWN0aW9uIGF0IHRoZSBwaHlzaWNhbCBsZXZlbCwgb3IgZXZlbiBwcmUtcHJvY2Vzc2luZyBmb3IgZXF1YWxpemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzIHRvIGJlIHN1cmUsIGJ1dCBJJ20gcGljdHVyaW5nIGl0IGhhbmRsaW5nIHRoaW5ncyBsaWtlIGludGVyLXN5bWJvbCBpbnRlcmZlcmVuY2UsIGNoYW5uZWwgaW1wYWlybWVudHMsIGFuZCBhbnkgcHJlLWNvZGluZyBzY2hlbWVzIGluIHVzZS5cblxuTm93LCBpZiBpdCBkZWFscyB3aXRoIGpvaW5pbmcsIGNvdWxkIGl0IGJlIHBhcnQgb2YgYSBNSU1PIChNdWx0aXBsZS1JbnB1dCBNdWx0aXBsZS1PdXRwdXQpIG9yIGJlYW1mb3JtaW5nIHNjaGVtZT8gVGhhdCdzIGEgc3Ryb25nIHBvc3NpYmlsaXR5LiBJbiB0aGlzIGNhc2UsIGl0IG1pZ2h0IGhhbmRsZSB0aGUgY29tYmluYXRpb24gb2YgZGF0YSBzdHJlYW1zIGZyb20gbXVsdGlwbGUgYW50ZW5uYXMuIE9yLCBpdCBtaWdodCBiZSBhYm91dCBhZ2dyZWdhdGluZyBtdWx0aXBsZSBzbWFsbGVyIGRhdGEgdW5pdHMgaW50byBsYXJnZXIgcGh5c2ljYWwtbGF5ZXIgcGFja2V0cyBmb3IgZWZmaWNpZW50IHRyYW5zbWlzc2lvbiBvdmVyIHRoZSBhaXIuIEknbGwgbmVlZCB0byBleHBsb3JlIGl0cyBhcmNoaXRlY3R1cmUgZGVlcGVyIHRvIGNvbmZpcm0uIFJlZ2FyZGxlc3MsIGl0J3MgY2xlYXJseSBhIGNydWNpYWwgY29tcG9uZW50LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHByZWNpc2Ugcm9sZSBpbiB0aGUgZGF0YSBmbG93IHRvIHRydWx5IGdyYXNwIGl0cyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzI1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzozOC4wMDY3MTgzNDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzYwOlxcdFxcdH1cXG4gMzYxOlxcdFxcbiAzNjI6XFx0XFx0cGh5ZGV2LVxcdTAwM2VzaGFyZWQgPSBOVUxMO1xcbiAzNjM6XFx0fVxcbiAzNjQ6XFx0RVhQT1JUX1NZTUJPTF9HUEwocGh5X3BhY2thZ2VfbGVhdmUpO1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRzdGF0aWMgdm9pZCBkZXZtX3BoeV9wYWNrYWdlX2xlYXZlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxcbiAzNjc6XFx0e1xcbiAzNjg6XFx0XFx0cGh5X3BhY2thZ2VfbGVhdmUoKihzdHJ1Y3QgcGh5X2RldmljZSAqKilyZXMpO1xcbiAzNjk6XFx0fVxcbiAzNzA6XFx0XFxuIDM3MTpcXHQvKipcXG4gMzcyOlxcdCAqIGRldm1fcGh5X3BhY2thZ2Vfam9pbiAtIHJlc291cmNlIG1hbmFnZWQgcGh5X3BhY2thZ2Vfam9pbigpXFxuIDM3MzpcXHQgKiBAZGV2OiBkZXZpY2UgdGhhdCBpcyByZWdpc3RlcmluZyB0aGlzIFBIWSBwYWNrYWdlXFxuIDM3NDpcXHQgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4gMzc1OlxcdCAqIEBiYXNlX2FkZHI6IGNvb2tpZSBhbmQgYmFzZSBQSFkgYWRkcmVzcyBvZiBQSFkgcGFja2FnZSBmb3Igb2Zmc2V0XFxuIDM3NjpcXHQgKiAgIGNhbGN1bGF0aW9uIG9mIGdsb2JhbCByZWdpc3RlciBhY2Nlc3NcXG4gMzc3OlxcdCAqIEBwcml2X3NpemU6IGlmIG5vbi16ZXJvIGFsbG9jYXRlIHRoaXMgYW1vdW50IG9mIGJ5dGVzIGZvciBwcml2YXRlIGRhdGFcXG4gMzc4OlxcdCAqXFxuIDM3OTpcXHQgKiBNYW5hZ2VkIHBoeV9wYWNrYWdlX2pvaW4oKS4gU2hhcmVkIHN0b3JhZ2UgZmV0Y2hlZCBieSB0aGlzIGZ1bmN0aW9uLFxcbiAzODA6XFx0ICogcGh5X3BhY2thZ2VfbGVhdmUoKSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBkcml2ZXIgZGV0YWNoLiBTZWVcXG4gMzgxOlxcdCAqIHBoeV9wYWNrYWdlX2pvaW4oKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gMzgyOlxcdCAqL1xcbiAzODM6XFx0aW50IGRldm1fcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIDM4NDpcXHRcXHRcXHRcXHQgIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpXFxuIDM4NTpcXHR7XFxuIDM4NjpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqKnB0cjtcXG4gMzg3OlxcdFxcdGludCByZXQ7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdHB0ciA9IGRldnJlc19hbGxvYyhkZXZtX3BoeV9wYWNrYWdlX2xlYXZlLCBzaXplb2YoKnB0ciksXFxuIDM5MDpcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG4gMzkxOlxcdFxcdGlmICghcHRyKVxcbiAzOTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM5MzpcXHRcXG4gMzk0OlxcdFxcdHJldCA9IHBoeV9wYWNrYWdlX2pvaW4ocGh5ZGV2LCBiYXNlX2FkZHIsIHByaXZfc2l6ZSk7XFxuIDM5NTpcXHRcXG4gMzk2OlxcdFxcdGlmICghcmV0KSB7XFxuIDM5NzpcXHRcXHRcXHQqcHRyID0gcGh5ZGV2O1xcbiAzOTg6XFx0XFx0XFx0ZGV2cmVzX2FkZChkZXYsIHB0cik7XFxuIDM5OTpcXHRcXHR9IGVsc2Uge1xcbiA0MDA6XFx0XFx0XFx0ZGV2cmVzX2ZyZWUocHRyKTtcXG4gNDAxOlxcdFxcdH1cXG4gNDAyOlxcdFxcbiA0MDM6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDA0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6MzguMDA2Nzk4MTA1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0Mjg4NTAwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgb24sIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeSwgcmVhZHkgZm9yIGEgZmVsbG93IGV4cGVydC5cblxuKipBbmFseXppbmcgYG9mX3BoeV9wYWNrYWdlX2pvaW5gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGNvbnRleHQgaXQncyBvcGVyYXRpbmcgd2l0aGluLiAgV2hhdCBraW5kIG9mIHBoeXNpY2FsIGxheWVyIHBhY2thZ2UgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSXMgdGhpcyByZWxhdGVkIHRvIEV0aGVybmV0LCBhIGN1c3RvbSBwcm90b2NvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGZyYW1lIGZvcm1hdC5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgZm9ybWluZyBhIGNoZWNrbGlzdDpcblxuKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgYXJlIHRoZSBpbnB1dCBwYWNrYWdlIGZvcm1hdHM/IElzIGl0IGEgc3RydWN0dXJlLCBhIGNsYXNzLCBvciByYXcgYnl0ZXM/IEFyZSB0aGVyZSBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YT8gSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGFuZCBob3cgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIHJlZmVyZW5jZXMgdGhlbS4gQW55IHBvdGVudGlhbCBiaXRmaWVsZHMsIGFsaWdubWVudCBpc3N1ZXMsIG9yIGVuZGlhbm5lc3MgY29uc2lkZXJhdGlvbnM/XG4qICAgKipQdXJwb3NlOioqIFdoYXQncyB0aGUgKmdvYWwqIG9mIHRoaXMgZnVuY3Rpb24/IElzIGl0IGNvbWJpbmluZyBtdWx0aXBsZSBwaHlzaWNhbCBsYXllciBwYWNrZXRzIGludG8gYSBsYXJnZXIgdW5pdCwgcGVyaGFwcyBhIGxvZ2ljYWwgZnJhbWU/IElzIGl0IG1lYW50IHRvIGFkZCBoZWFkZXJzLCB0cmFpbGVycywgb3IgcGFkZGluZz8gSXMgaXQgcmVsYXRlZCB0byBwYWNrZXQgcmVhc3NlbWJseSwgZW5jYXBzdWxhdGlvbiwgb3Igc2VnbWVudGF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgZGF0YSBmbG93LlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCB0aGUgaW5wdXQgZGF0YSwgbGlrZSBhbiBpbmNvbXBsZXRlIHBhY2thZ2Ugb3IgY29ycnVwdGVkIGRhdGE/IEkgbmVlZCB0byBhc2NlcnRhaW4gaG93IHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBlcnJvciBjb25kaXRpb25zLiBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlLCB0aHJvdyBhbiBleGNlcHRpb24sIG9yIGxvZyBzb21ldGhpbmc/IFdoYXQgaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gdGhpbmdzIGdvIHdyb25nPyBJcyBlcnJvciBjaGVja2luZyB0aG9yb3VnaD9cbiogICAqKlBlcmZvcm1hbmNlOioqIEdpdmVuIHRoZSBsaWtlbHkgZGF0YSB2b2x1bWVzLCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uLiBBbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzPyBBcmUgdGhlcmUgbG9vcHMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29weWluZyBvcGVyYXRpb25zIHRoYXQgY291bGQgc2xvdyB0aGluZ3MgZG93bj8gSXMgdGhpcyBmdW5jdGlvbiBvcHRpbWl6ZWQgZm9yIHNwZWVkIG9yIHNpbXBsaWNpdHk/XG4qICAgKipTZWN1cml0eToqKiBUaGlzIGlzIG1vcmUgb2YgYSBzZWNvbmRhcnkgY29uc2lkZXJhdGlvbi4gSXMgdGhpcyBmdW5jdGlvbiBkZXNpZ25lZCB3aXRoIGFueSBzZWN1cml0eSBhc3BlY3RzIGluIG1pbmQ/IElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gZGF0YSBtYW5pcHVsYXRpb24/XG4qICAgKipTaWRlIEVmZmVjdHM6KiogV2hhdCBpcyBiZWluZyBhbHRlcmVkPyBJcyB0aGVyZSBhIHN0YXRlIGNoYW5nZT8gQW55IG90aGVyIGZ1bmN0aW9ucyByZWxpYW50IG9uIHRoaXMgb25lP1xuXG5Fc3NlbnRpYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgaW5wdXQsIGl0cyBvdXRwdXQsIGl0cyBpbnRlcm5hbCBsb2dpYywgdGhlIGVycm9yIGhhbmRsaW5nLCBhbmQgaXRzIHBsYWNlIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBCeSBxdWlja2x5IHdhbGtpbmcgdGhyb3VnaCB0aGVzZSBpdGVtcywgSSdsbCBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBjb3VsZCBiZSBpbXByb3ZlZCwgb3B0aW1pemVkLCBvciB0aGF0IG1heSBoYXZlIHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjM5NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6NDIuNDM1NjUxMDQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAxODA5Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBvZl9waHlfcGFja2FnZV9qb2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jPTI3Nj1FWFBPUlRfU1lNQk9MX0dQTChwaHlfcGFja2FnZV9qb2luKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTI5Ny0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzoyOTg6aW50IG9mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc2l6ZV90IHByaXZfc2l6ZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy0yOTkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oPTI5PWludCBwaHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaDozMDppbnQgb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzaXplX3QgcHJpdl9zaXplKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLmgtMzEtdm9pZCBwaHlfcGFja2FnZV9sZWF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6NDMuOTM3NDY4MTAxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2NTI0MjA0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uICdvZlxcX3BoeVxcX3BhY2thZ2VcXF9qb2luJyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBvZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbi4gSnVzdCB0aGUgbmFtZSBhbG9uZSBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIHNvbWUgc29ydCBvZiBqb2luaW5nIG9wZXJhdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIFBIWSBwYWNrYWdlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBjb21wbGV4aXRpZXMuIElzIHRoaXMgYSBzaW1wbGUgY29uY2F0ZW5hdGlvbiwgb3IgYXJlIHRoZXJlIG1vcmUgc29waGlzdGljYXRlZCBtZXJnaW5nIHJ1bGVzIGF0IHBsYXk/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGNvbWJpbmluZyBkYXRhIHN0cnVjdHVyZXMsIHBlcmhhcHMgcGFja2V0IGhlYWRlcnMsIHBheWxvYWQgaW5mb3JtYXRpb24sIG9yIGNvbnRyb2wgZmllbGRzPyBUaGUgXCJQSFlcIiBwcmVmaXggaXMgYSBzaWduaWZpY2FudCBjbHVlOyBpdCBzaWduYWxzIHRoaXMgaXMgcHJvYmFibHkgbG93LWxldmVsLCBjbG9zZSB0byB0aGUgcGh5c2ljYWwgbGF5ZXIuIEkgbmVlZCB0byBjb25zaWRlciBmYWN0b3JzIHN1Y2ggYXMgZnJhbWluZywgc3luY2hyb25pemF0aW9uLCBlcnJvciBoYW5kbGluZyBhdCB0aGlzIHN0YWdlLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhyb3VnaHB1dCBvciBsYXRlbmN5LiBXaGF0J3MgdGhlIHRhcmdldCBzeXN0ZW0ncyBhcmNoaXRlY3R1cmU/IElzIHRoaXMgYSBoYXJkd2FyZS1hY2NlbGVyYXRlZCBwcm9jZXNzLCBvciBydW5uaW5nIGVudGlyZWx5IGluIHNvZnR3YXJlPyBUaGUgZGF0YSB0eXBlIG9mIHRoZSBpbnB1dCwgYW5kIG91dHB1dCwgaXMga2V5LiBMZXQgbWUgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgZGF0YSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1Mzo0Ni41ODk4OTA3NjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk4OlxcdGludCBvZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHNpemVfdCBwcml2X3NpemUpXFxuIDI5OTpcXHR7XFxuIDMwMDpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XFxuIDMwMTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4gMzAyOlxcdFxcdHUzMiBiYXNlX2FkZHI7XFxuIDMwMzpcXHRcXHRpbnQgcmV0O1xcbiAzMDQ6XFx0XFxuIDMwNTpcXHRcXHRpZiAoIW5vZGUpXFxuIDMwNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcXG4gMzA5OlxcdFxcdGlmICghcGFja2FnZV9ub2RlKVxcbiAzMTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXFxcImV0aGVybmV0LXBoeS1wYWNrYWdlXFxcIikpIHtcXG4gMzEzOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDMxNDpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIDMxNTpcXHRcXHR9XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2YmFzZV9hZGRyKSkge1xcbiAzMTg6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMzE5OlxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gMzIwOlxcdFxcdH1cXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0cmV0ID0gcGh5X3BhY2thZ2Vfam9pbihwaHlkZXYsIGJhc2VfYWRkciwgcHJpdl9zaXplKTtcXG4gMzIzOlxcdFxcdGlmIChyZXQpXFxuIDMyNDpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdHBoeWRldi1cXHUwMDNlc2hhcmVkLVxcdTAwM2VucCA9IHBhY2thZ2Vfbm9kZTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0cmV0dXJuIDA7XFxuIDMyOTpcXHRleGl0OlxcbiAzMzA6XFx0XFx0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcXG4gMzMxOlxcdFxcdHJldHVybiByZXQ7XFxuIDMzMjpcXHR9XFxuIDMzMzpcXHRFWFBPUlRfU1lNQk9MX0dQTChvZl9waHlfcGFja2FnZV9qb2luKTtcXG4gMzM0OlxcdFxcbiAzMzU6XFx0LyoqXFxuIDMzNjpcXHQgKiBwaHlfcGFja2FnZV9sZWF2ZSAtIGxlYXZlIGEgY29tbW9uIFBIWSBncm91cFxcbiAzMzc6XFx0ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjQ2LjU4OTk2NzkxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MTY2MTAyNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgUGF0aCBBbmFseXNpczogWVQ4ODI0IFBIWSBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGluZGljYXRlcyB0aGF0IHRoZSBjb2RlIGFkZGVkIGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgaXMsIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMsICp1bnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwIHRhcmdldGluZyBhbWQ2NCB3aXRoIFFFTVUuICBIZXJlJ3MgdGhlIHJlYXNvbmluZzpcblxuRmlyc3QsIGBvZl9waHlfcGFja2FnZV9qb2luYCBpcyBhIGhhcmQgZGVwZW5kZW5jeS4gSXQgbWFuZGF0ZXMgdGhlIGV4aXN0ZW5jZSBvZiBhbiBgZXRoZXJuZXQtcGh5LXBhY2thZ2VgIERldmljZVRyZWUgbm9kZS4gVGhlIFlUODgyNCBwcm9iZSBmdW5jdGlvbiwgYHl0ODgyNF9wcm9iZWAsIGNhbGxzIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gLCBhbmQgKmNhbm5vdCogZXZlbiBpbml0aWFsaXplIHdpdGhvdXQgdGhhdCBub2RlLiBPbiBhbWQ2NCwgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBEZXZpY2VUcmVlIGJ5IGRlZmF1bHQsIHNvIHdlJ3JlIGltbWVkaWF0ZWx5IGJsb2NrZWQuICBUaGUgdGFyZ2V0IGlzIGFtZDY0LiAgQm9vbSwgbm8gRFQsIG5vIHByb2JlLlxuXG5TZWNvbmQsIHRoZSBZVDg4MjQgaXMgKnBoeXNpY2FsKiBoYXJkd2FyZS4gSXQncyBhIGRpc2NyZXRlIFBIWSBjaGlwLCBhIHF1YWQgMi41RyBwYWNrYWdlLiBJdCByZXF1aXJlcyBhbiBNRElPIGJ1cyBhbmQgYSBzcGVjaWZpYyBQSFkgSUQgKDB4NGY1MWU4YjgpLiBTdGFuZGFyZCBRRU1VLCBvbiBhbWQ2NCwgZG9lc24ndCBlbXVsYXRlIHRoYXQga2luZCBvZiBoYXJkd2FyZS4gRXZlbiBpZiB3ZSBoYWQgKnNvbWUqIE1ESU8gYnVzLCB0aGVyZSdzIG5vIHdheSB0aGUgWVQ4ODI0IFBIWSBpcyBnb2luZyB0byBiZSBwcmVzZW50IG9yIHZpc2libGUuXG5cblRoaXJkLCBsZXQncyBzb2xpZGlmeSB0aGUgcG9pbnQgYWJvdXQgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLCB3aGljaCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcy4gIEEgcXVpY2sgY29kZSBzZWFyY2ggc2hvd3MgdGhhdCAqb25seSogdGhlIFlUODgyNCBkcml2ZXIgY2FsbHMgdGhhdCBmdW5jdGlvbi4gIEl0J3MgZW50aXJlbHkgd2l0aGluIHRoZSBNb3RvcmNvbW0gUEhZIGRyaXZlciBjb250ZXh0LiBObyBvdGhlciBuZXR3b3JrIHN1YnN5c3RlbSBjb2RlLCBubyBvdGhlciBkcml2ZXJzLCBub3RoaW5nLiAgSXQncyBlZmZlY3RpdmVseSBhIHByaXZhdGUgaGVscGVyIGZ1bmN0aW9uLlxuXG5UaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGZpcm1seSBhbmQgZGVmaW5pdGl2ZWx5IGNhdWdodCBpbiB0aGUgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjYXRlZ29yeSBkZWZpbmVkIGluIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSwgYW5kIGl0IHJlcXVpcmVzIGJvdGggaGFyZHdhcmUgcHJlc2VuY2UgYW5kIHNwZWNpZmljIERldmljZVRyZWUgY29uZmlndXJhdGlvbi4gIEl0J3MgYSBjbGVhciBjYXNlIG9mIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGZ1enppbmcgc3lzdGVtIGlzIHNldCB1cCB0byB0YXJnZXQgYW1kNjQgd2l0aCBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBhbmQgd2UgZG8gbm90IGhhdmUgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgaW5mb3JtYXRpb24uXG5UaGUgcmVsZXZhbnQgYFJlYXNvbmluZ2AgZm9yIHRoZSByZXN1bHRzIHdvdWxkIGJlOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSAoYSBxdWFkLXBvcnQgMi41R2JwcyBQSFkgcGFja2FnZSkgaW4gYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AsIGRldmljZXRyZWUgYmluZGluZ3MsIGFuZCBhIGdlbmVyaWMgaGVscGVyIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKClgIGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYCB3aGljaCBpcyBzb2xlbHkgY2FsbGVkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIE1vdG9yY29tbSBZVDg4MjQgUEhZIGhhcmR3YXJlIG9uIGFuIE1ESU8gYnVzIHdpdGggbWF0Y2hpbmcgUEhZIElEICgweDRmNTFlOGI4KSwgYXMgd2VsbCBhcyBPcGVuIEZpcm13YXJlIChEZXZpY2UgVHJlZSkgYmluZGluZ3MgKGBldGhlcm5ldC1waHktcGFja2FnZWApLCBub25lIG9mIHdoaWNoIGV4aXN0IG9yIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLiBBcyBzdWNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6MzgwMjksIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjU0Ljc1NjA3MzE1MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLCBEVCBiaW5kaW5ncywgYW5kIGEgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gcGh5LWM0NS5jIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBieSB0aGUgWVQ4ODI0IGRyaXZlci4gVGhlIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgKFBIWSBJRCAweDRmNTFlOGI4KSBvbiBhbiBNRElPIGJ1cyBhbmQgcmVxdWlyZXMgRGV2aWNlIFRyZWUgZXRoZXJuZXQtcGh5LXBhY2thZ2UgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9hbWQ2NCB2aXJ0dWFsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIGFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLCBEVCBiaW5kaW5ncywgYW5kIGEgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gcGh5LWM0NS5jIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBieSB0aGUgWVQ4ODI0IGRyaXZlci4gVGhlIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgKFBIWSBJRCAweDRmNTFlOGI4KSBvbiBhbiBNRElPIGJ1cyBhbmQgcmVxdWlyZXMgRGV2aWNlIFRyZWUgZXRoZXJuZXQtcGh5LXBhY2thZ2UgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9hbWQ2NCB2aXJ0dWFsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIGFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjU0Ljc1NjA5NzU0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbxl9k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 07:05:05 +0000 UTC FinishedAt: 2026-09-12 07:53:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgKGEgcXVhZC1wb3J0IDIuNUdicHMgUEhZKSBpbiBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMsIERUIGJpbmRpbmdzLCBhbmQgYSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpbiBwaHktYzQ1LmMgd2hpY2ggaXMgb25seSBpbnZva2VkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLiBUaGUgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBoYXJkd2FyZSAoUEhZIElEIDB4NGY1MWU4YjgpIG9uIGFuIE1ESU8gYnVzIGFuZCByZXF1aXJlcyBEZXZpY2UgVHJlZSBldGhlcm5ldC1waHktcGFja2FnZSBjb25maWd1cmF0aW9uLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgb3IgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL2FtZDY0IHZpcnR1YWwgZnV6emluZyBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgYWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBkN2UyNWFiYWZmNjUyN2M0NGY2YjY5Njg3MWQzYTc0N2VkOWZkMjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAwNzo1Mjo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTNlOWY3NjU0MDRhM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcbkBAIC0wLDAgJiM0MzsxLDU5IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogTW90b3JDb21tIFlUODgyNCBFdGhlcm5ldCBQSFlcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gS3lsZSBTd2l0Y2ggXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIGlzIGEgUEhZIHBhY2thZ2Ugb2YgNCBQSFlzLlxuJiM0MztcbiYjNDM7JHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGVudW06XG4mIzQzOyAgICAgIC0gbW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7ICAtIHBoeS1tb2RlXG4mIzQzOyAgLSByZWdcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4mIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2M5XHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgcGh5LW1vZGUgPSBcJiMzNDtpbnRlcm5hbFwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANSB7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDYge1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNlx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzdcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuaW5kZXggYjRlZjkyN2ZkNGE2Ny4uMWRkODBlMDZlMjM3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTM2MSw5ICYjNDM7MzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZXG4gXG4gY29uZmlnIE1PVE9SQ09NTV9QSFlcbiBcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBQSFlzXCYjMzQ7XG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4gXHRoZWxwXG4gXHQgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy5cbi1cdCAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMuXG4mIzQzO1x0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS5cbiBcbiBjb25maWcgTkFUSU9OQUxfUEhZXG4gXHR0cmlzdGF0ZSBcJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXNcJiMzNDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbmluZGV4IDkwYTRmODZmMjc1OGIuLjdmOTQ5YWI1M2I1NDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuQEAgLTEsMjQgJiM0MzsxLDI5IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzO1xuIC8qXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxuJiM0MzsgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cbiAgKlxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXHUwMDNlXG4gICogQXV0aG9yOiBGcmFuayBcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cdTAwM2VcbiYjNDM7ICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BoeWxpYi5oXCYjMzQ7XG4mIzQzO1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbiYjNDM7I2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0zMCw2ICYjNDM7MzUsMTggQEBcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICovXG4gXG4mIzQzOy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuJiM0MzsgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRVU1hHTUlJIFJlZ2lzdGVyIHNwYWNlXG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogfFx0VVRQIE1JSVx0XHRcdHxcdFVTWEdNSUkgTUlJXHQgICAgICAgIHxcbiYjNDM7ICogfFx0VVRQIE1NRFx0XHRcdHxcdFx0XHRcdHxcbiYjNDM7ICogfFx0VVRQIEV4dGVuZGVkXHRcdHxcdFVTWEdNSUkgRXh0ZW5kZWRcdHxcbiYjNDM7ICogfFx0VVRQIFRvcCBFeHRlbmRlZFx0fFx0VVNYR01JSSBUb3AgRXh0ZW5kZWRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKiB8XHRcdFx0Q29tbW9uIFRvcCBFeHRlbmRlZFx0XHRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKi9cbiYjNDM7XG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cbiBcbiAvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXG5AQCAtMzgxLDYgJiM0MzszOTgsMTUgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRVx0XHQoMHgxKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdDB4MVxuJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUxcdFx0MHgwXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLXHRcdEdFTk1BU0soMywgMClcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXHRcdFx0QklUKDEzKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcdFx0KDB4NylcbiYjNDM7XG4gc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdC8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsXG4gXHQgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHNcbkBAIC0zOTksNiAmIzQzOzQyNSwxMiBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0dTggcmVnX3BhZ2U7XG4gfTtcbiBcbiYjNDM7c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7XG4mIzQzO1x0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xuJiM0MztcdC8qIHNoYXJlZF9sb2NrIHVzZWQgdG8gVVRQcyBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqL1xuJiM0MztcdHN0cnVjdCBtdXRleCBzaGFyZWRfbG9jaztcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzNyw2ICYjNDM7NDY5LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlXG4mIzQzOyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuJiM0MztcdFx0XHQgICAgICAgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soKSAtIHdyaXRlIHBhZ2UgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4mIzQzO1x0cmV0IHw9IChwYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTYyNiwxMSAmIzQzOzcyMiwxMDU4IEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXG4gXHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxuIFx0XHRcdFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9cbiYjNDM7ICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvbGRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9sZF9wYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcGFnZTogUmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0dTE2IGRhdGE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4mIzQzO1x0ZGF0YSA9IG9sZF9wYWdlIFx1MDAyNiAofllUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuJiM0MztcdGRhdGEgfD0gcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqL1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUsIEJNQ1JfSVNPTEFURSk7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXG4mIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cbiYjNDM7XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcbiYjNDM7XHRcdFx0ICAgQk1DUl9SRVNFVCBcdTAwMjYgfkJNQ1JfSVNPTEFURSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsIFx1MDAzYyAwKSB8fFxuJiM0MztcdFx0XHRcdCEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQ1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gdmFsO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoKSAtIGNhbGxlZCB0byBkbyBzdG9yZSB3b3JraW5nIHN0YXR1c1xuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmV0OiBvcGVyYXRpb24mIzM5O3MgcmV0dXJuIGNvZGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0LyogY29uZmlndXJlIG5vcm1hbCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRyID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXQgPSByO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO3JldHJ5OlxuJiM0MztcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6YXRpb24gdXRwICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogZW5hYmxlIG5pYmJsZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBFTUMgUkUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDAwNmUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4mIzQzO1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XHQvKiByZXNldCAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4mIzQzO1x0XHRcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4mIzQzO1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4mIzQzO1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZTpcbiYjNDM7XHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX25vcm1hbDpcbiYjNDM7XHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHNkcyBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbiYjNDM7XHRpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wO1xuJiM0MztcdGludCByZXQgPSAtMTtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogcmVhZCBlZnVzZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2YWxfMSA9IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZhbF8yID0gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzMgPSByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBhbmFsb2cgQ0RSICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBWQ08gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM5LCAweDAwYzApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbiYjNDM7XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNykgfCBCSVQoNikpKSBcdTAwM2VcdTAwM2UgNjtcbiYjNDM7XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyOSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xuJiM0MztcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkpIFx1MDAzZVx1MDAzZSA0O1xuJiM0MztcdHJldCB8PSB0bXA7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDJiKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbiYjNDM7XHR0bXAgPSAodmFsXzMgXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcbiYjNDM7XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NTQsIDB4MGYxNCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmRlcyBMRE8gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xuJiM0MztcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpIFx1MDAzZVx1MDAzZSAyO1xuJiM0MztcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA0KTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7XG4mIzQzO1x0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgXHUwMDNlXHUwMDNlIDU7XG4mIzQzO1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDgsIDB4N2MwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwZCwgMHgwNjA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzIFx1MDAzZSA4ICovXG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLO1xuJiM0MztcdHJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xuJiM0MztcdHJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogcmVzZXQgc2VyZGVzICovXG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuJiM0MztcdFx0XHQgICBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiBwb2xsIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2s7IF9fcGh5X3JlYWQgdGFrZXMgbm8gbG9jayAqL1xuJiM0MztcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcdTAwM2MgMCkgfHxcbiYjNDM7XHRcdFx0XHQhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0NTAwMDAsIDYwMDAwMCwgdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHZhbDtcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XHRpbnQgciA9IDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzU5LCAweDIxNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzQwLCAweDMwMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAwIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMCB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMCB0ZW1wYXRlIE1BVSovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY2LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY5LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogRU1DIFJFKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGMsIDB4NDFhMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0LyogcmVzZXQgKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuJiM0MztcdFx0XHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuJiM0MztcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlOlxuJiM0MztcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfbm9ybWFsOlxuJiM0MztcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiBcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcbiBcbi1lcnJfcmVzdG9yZV9wYWdlOlxuLVx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuQEAgLTMxMDQsNiAmIzQzOzQyNDcsNDI5IEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eVxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgbGluayA9IDA7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0bGluayA9ICEhKHJldCBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuJiM0MztcbiYjNDM7XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuJiM0MztcdHJldHVybiBsaW5rO1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBsaW5rID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbiYjNDM7XHRcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9scGEocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSByZXQ7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSB2YWwgXHUwMDI2IFlUUEhZX1NTUl9MSU5LO1xuJiM0MztcdGlmIChsaW5rKVxuJiM0MztcdFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xuJiM0MztcbiYjNDM7XHRpZiAobGluaykge1xuJiM0MztcdFx0aWYgKHBoeWRldi1cdTAwM2VsaW5rID09IDApXG4mIzQzO1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmsgdXBcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAxO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAocGh5ZGV2LVx1MDAzZWxpbmsgPT0gMSlcbiYjNDM7XHRcdFx0cGh5ZGV2X2RiZyhwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztyZXRyeTpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHBoeV9jdHJsID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbiYjNDM7XHRcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbiYjNDM7XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuJiM0MztcdFx0XHRcdCAgICAgcGh5X2N0cmwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrYWdlIGZvciBwaHk4ODI0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xuJiM0MztcdGNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbiYjNDM7XHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcJiMzNDtwaHktbW9kZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNmludGVyZmFjZV9tb2RlX25hbWUpKSB7XG4mIzQzO1x0XHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcbiYjNDM7XHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpKSkge1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXG4mIzQzO1x0XHRcdFx0KGludGVyZmFjZV9tb2RlX25hbWUsXG4mIzQzO1x0XHRcdFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCYjMzQ7JXMsIHBoeS1tb2RlIG1pc3NpbmcgaW4gRFRTLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIF9fZnVuY19fKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Byb2JlKCkgLSBwaHk4ODI0IHByb2JlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuIFx0e1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG5AQCAtMzE5MCwxMyAmIzQzOzQ3NTYsMjkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuIFx0XHQuc3VzcGVuZFx0XHQ9IHl0ODgyMV9zdXNwZW5kLFxuIFx0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjFfcmVzdW1lLFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXG4mIzQzO1x0XHQubmFtZVx0XHRcdD0gXCYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFwmIzM0OyxcbiYjNDM7XHRcdC5nZXRfZmVhdHVyZXNcdFx0PSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLFxuJiM0MztcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxuJiM0MztcdFx0LnByb2JlXHRcdCAgICAgICAgPSB5dDg4MjRfcHJvYmUsXG4mIzQzO1x0XHQuY29uZmlnX2FuZWdcdFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXG4mIzQzO1x0XHQuYW5lZ19kb25lXHRcdD0geXQ4ODI0X2FuZWdfZG9uZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdFx0XHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbiYjNDM7XHRcdC5zb2Z0X3Jlc2V0XHRcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuc3VzcGVuZFx0XHQ9IHl0ODgyNF9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODI0X3Jlc3VtZSxcbiYjNDM7XHR9LFxuIH07XG4gXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcbiBcbi1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXJcJiMzNDspO1xuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7UGV0ZXIgR2Vpc1wmIzM0Oyk7XG4gTU9EVUxFX0FVVEhPUihcJiMzNDtGcmFua1wmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7S3lsZVwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMjA2LDYgJiM0Mzs0Nzg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxuJiM0MztcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sXG4gXHR7IC8qIHNlbnRpbmVsICovIH1cbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5pbmRleCA4NzA5MjAzMTFmOWEwLi41MjhlM2Y0MTQzMTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuQEAgLTE0MDgsNiAmIzQzOzE0MDgsNjEgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XG4mIzQzOyAqXG4mIzQzOyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIChlLmcuIHJlZ2lzdGVyXG4mIzQzOyAqXHRyZWFkL3dyaXRlIGVycm9yKS5cbiYjNDM7ICovXG4mIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3RybCA9IDA7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodGVzdF9tb2RlKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDM6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDU6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDY6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIDc6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsXG4mIzQzO1x0XHRcdCAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xuJiM0MztcbiAvKipcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggM2Q4YWZlNmI3ZjFjNS4uZmI4MjdjYzNjOThmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzU3LDYgJiM0MzsyMzU3LDcgQEAgaW50IGdlbnBoeV9jNDVfbG9vcGJhY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsIGludCBzcGVlZCk7XG4gaW50IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xuJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdFx0XHQgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpO1xuIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5pbmRleCAwNmY0YmMzYzIwYzcxLi44NTc2YTQ4ODc3YzZkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuQEAgLTYzLDYgJiM0Mzs2Myw3IEBAXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcdDEzMFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcdTAwMjYgcG9sYXJpdHkgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXHQxMzFcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREUgMTMyXHQvKiBUZXN0IG1vZGUgY29udHJvbCAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SXHQxMzNcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXG4gXHRcdFx0XHRcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSXHQxNDdcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXG5AQCAtMzIwLDYgJiM0MzszMjEsMTcgQEBcbiAvKiBQTUEgMTBHQkFTRS1SIEZhc3QgUmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRVx0MHgwMDAxXHQvKiBGYXN0IHJldHJhaW4gZW5hYmxlICovXG4gXG4mIzQzOy8qIFBNQSAxMEdCQVNFLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLIDB4RTAwMFx0LyogVGVtcGxhdGUgdGVzdCBtb2RlICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIDB4MDAwMFx0LyogVGVtcGxhdGUgTm9ybWFsICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDIwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMiAweDQwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUyICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMyAweDYwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUzICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDgwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNSAweGEwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU1ICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNiAweGMwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU2ICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweGUwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovXG4mIzQzO1xuIC8qIFBDUyAxMEdCQVNFLVIvLVQgc3RhdHVzIHJlZ2lzdGVyIDEuICovXG4gI2RlZmluZSBNRElPX1BDU18xMEdCUlRfU1RBVDFfQkxLTEtcdDB4MDAwMVx0LyogQmxvY2sgbG9jayBhdHRhaW5lZCAqL1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLCBEVCBiaW5kaW5ncywgYW5kIGEgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gcGh5LWM0NS5jIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBieSB0aGUgWVQ4ODI0IGRyaXZlci4gVGhlIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgKFBIWSBJRCAweDRmNTFlOGI4KSBvbiBhbiBNRElPIGJ1cyBhbmQgcmVxdWlyZXMgRGV2aWNlIFRyZWUgZXRoZXJuZXQtcGh5LXBhY2thZ2UgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9hbWQ2NCB2aXJ0dWFsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIGFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZDdlMjVhYmFmZjY1MjdjNDRmNmI2OTY4NzFkM2E3NDdlZDlmZDIxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMDc6NTI6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjkzZTlmNzY1NDA0YTMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbApAQCAtMCwwICYjNDM7MSw1OSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQomIzQzOyVZQU1MIDEuMgomIzQzOy0tLQomIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogTW90b3JDb21tIFlUODgyNCBFdGhlcm5ldCBQSFkKJiM0MzsKJiM0MzttYWludGFpbmVyczoKJiM0MzsgIC0gS3lsZSBTd2l0Y2ggJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOgomIzQzOyAgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgaXMgYSBQSFkgcGFja2FnZSBvZiA0IFBIWXMuCiYjNDM7CiYjNDM7JHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCMKJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIG1vdG9yY29tbSx5dDg4MjQtcGFja2FnZQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIHBoeS1tb2RlCiYjNDM7ICAtIHJlZwomIzQzOwomIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgIC0gfAomIzQzOyAgICBtZGlvIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHsKJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDttb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2UmIzM0OzsKJiM0MzsgICAgICAgICAgICByZWcgPSAmbHQ7OSZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgcGh5LW1vZGUgPSAmIzM0O2ludGVybmFsJiMzNDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDQgewomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7NCZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANSB7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDs1Jmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzYmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDcgewomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7NyZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCmluZGV4IGI0ZWY5MjdmZDRhNjcuLjFkZDgwZTA2ZTIzNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCkBAIC0zNjEsOSAmIzQzOzM2MSwxMCBAQCBjb25maWcgTUlDUk9TRU1JX1BIWQogCiBjb25maWcgTU9UT1JDT01NX1BIWQogCXRyaXN0YXRlICYjMzQ7TW90b3Jjb21tIFBIWXMmIzM0OwomIzQzOwlzZWxlY3QgUEhZX1BBQ0tBR0UKIAloZWxwCiAJICBFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuCi0JICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcy4KJiM0MzsJICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS4KIAogY29uZmlnIE5BVElPTkFMX1BIWQogCXRyaXN0YXRlICYjMzQ7TmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzJiMzNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwppbmRleCA5MGE0Zjg2ZjI3NThiLi43Zjk0OWFiNTNiNTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCkBAIC0xLDI0ICYjNDM7MSwyOSBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOwogLyoKLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci4KJiM0MzsgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci4KICAqCiAgKiBBdXRob3I6IFBldGVyIEdlaXMgJmx0O3Bnd2lwZW91dEBnbWFpbC5jb20mZ3Q7CiAgKiBBdXRob3I6IEZyYW5rICZsdDtGcmFuay5TYWVAbW90b3ItY29tbS5jb20mZ3Q7CiYjNDM7ICogQXV0aG9yOiBLeWxlICZsdDtreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbSZndDsKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDtwaHlsaWIuaCYjMzQ7CiYjNDM7CiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTEJCTB4MDAwMDAxMGEKICNkZWZpbmUgUEhZX0lEX1lUODUyMQkJMHgwMDAwMDExYQogI2RlZmluZSBQSFlfSURfWVQ4NTIyCQkweDRmNTFlOTI4CiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzEJCTB4NGY1MWU5MWIKICNkZWZpbmUgUEhZX0lEX1lUODUzMVMJCTB4NGY1MWU5MWEKICNkZWZpbmUgUEhZX0lEX1lUODgyMQkJMHg0ZjUxZWExOQomIzQzOyNkZWZpbmUgUEhZX0lEX1lUODgyNAkJMHg0ZjUxZThiOAogLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3CiAgKglVVFAgUmVnaXN0ZXIgc3BhY2UJfAlGSUJFUiBSZWdpc3RlciBzcGFjZQogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzAsNiAmIzQzOzM1LDE4IEBACiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAomIzQzOy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlldwomIzQzOyAqCVVUUCBSZWdpc3RlciBzcGFjZQl8CVVTWEdNSUkgUmVnaXN0ZXIgc3BhY2UKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogfAlVVFAgTUlJCQkJfAlVU1hHTUlJIE1JSQkgICAgICAgIHwKJiM0MzsgKiB8CVVUUCBNTUQJCQl8CQkJCXwKJiM0MzsgKiB8CVVUUCBFeHRlbmRlZAkJfAlVU1hHTUlJIEV4dGVuZGVkCXwKJiM0MzsgKiB8CVVUUCBUb3AgRXh0ZW5kZWQJfAlVU1hHTUlJIFRvcCBFeHRlbmRlZAl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIHwJCQlDb21tb24gVG9wIEV4dGVuZGVkCQkJfAomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKi8KJiM0MzsKIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovCiAKIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KQEAgLTM4MSw2ICYjNDM7Mzk4LDE1IEBACiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUkJMAogI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMAkJMQogCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLCQkJQklUKDApCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFCQkoMHgxKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFCQkJKDB4MCkKJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMQkJMHgxCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMCQkweDAKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSwkJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRQkJCUJJVCgxMykKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkcJCSgweDcpCiYjNDM7CiBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCS8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsCiAJICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzCkBAIC0zOTksNiAmIzQzOzQyNSwxMiBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCXU4IHJlZ19wYWdlOwogfTsKIAomIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgewomIzQzOwl1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7CiYjNDM7CS8qIHNoYXJlZF9sb2NrIHVzZWQgdG8gVVRQcyBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXggc2hhcmVkX2xvY2s7CiYjNDM7fTsKJiM0MzsKIC8qKgogICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXIKICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKQEAgLTQzNyw2ICYjNDM7NDY5LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGUKJiM0MzsgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGUKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLAomIzQzOwkJCSAgICAgICB1MTYgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3BoeWRldi0mZ3Q7bWRpby5idXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSwgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jaygpIC0gd3JpdGUgcGFnZSBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwlyZXQgJmFtcDs9IH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzOwlyZXQgfD0gKHBhZ2UgJmFtcDsgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyCiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCkBAIC02MjYsMTEgJiM0Mzs3MjIsMTA1OCBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogCQlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRywKIAkJCQkgICBZVFBIWV9JRVJfV09MLCAwKTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFLwomIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiBvbGRfcGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwl1MTYgZGF0YTsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG9sZF9wYWdlOwomIzQzOwlkYXRhID0gb2xkX3BhZ2UgJmFtcDsgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTsKJiM0MzsJZGF0YSB8PSBwYWdlOwomIzQzOwomIzQzOwlyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogZW5hYmxlIHNkcyBpc29sYXRlICovCiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUsIEJNQ1JfSVNPTEFURSk7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJLyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovCiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi8KJiM0MzsJcmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCiYjNDM7CQkJCSAgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCSAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUKJiM0MzsgKiBhbmQgc2RzIHNvZnRyZXNldC4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHNkcyBzb2Z0cmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0ZSAqLwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSwKJiM0MzsJCQkgICBCTUNSX1JFU0VUICZhbXA7IH5CTUNSX0lTT0xBVEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovCiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCAmbHQ7IDApIHx8CiYjNDM7CQkJCSEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQk1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXQgPSB2YWw7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJLyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovCiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKCkgLSBjYWxsZWQgdG8gZG8gc3RvcmUgd29ya2luZyBzdGF0dXMKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJldDogb3BlcmF0aW9uJiMzOTtzIHJldHVybiBjb2RlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CS8qIGNvbmZpZ3VyZSBub3JtYWwgdGVzdCBtb2RlICovCiYjNDM7CXIgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXIgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQkJcmV0ID0gcjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogdXRwIHNvZnQgcmVzZXQgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO3JldHJ5OgomIzQzOwlyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiBwb3dlciBkb3duICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogcGxsIGNhbGlicmF0aW9uICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXphdGlvbiB1dHAgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBlbmFibGUgbmliYmxlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzU5LCAweDIxNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogMi41RyB0ZW1wbGF0ZSB0b25lICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZjLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgRU1DIENTICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdhLCAweDQwZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBFTUMgUkUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlCiYjNDM7CQkocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwkvKiByZXNldCAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CXJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCiYjNDM7CQkJCSAgICAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlCiYjNDM7CQkocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmU6CiYjNDM7CXIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfbm9ybWFsOgomIzQzOwlyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsCiYjNDM7CQkJCQkgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHNkcyBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTsKJiM0MzsJaW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDsKJiM0MzsJaW50IHJldCA9IC0xOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiByZWFkIGVmdXNlICovCiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwllbHNlCiYjNDM7CQl2YWxfMSA9IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8yID0gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsXzMgPSByZXQ7CiYjNDM7CiYjNDM7CS8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogYW5hbG9nIENEUiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgVkNPICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBQTEwgbG9jayAqLwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwl0bXAgPSAodmFsXzEgJmFtcDsgKEJJVCg3KSB8IEJJVCg2KSkpICZndDsmZ3Q7IDY7CiYjNDM7CXJldCB8PSAodG1wICZsdDsmbHQ7IDEyKTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+KEJJVCgxKSB8IEJJVCgwKSk7CiYjNDM7CXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDUpIHwgQklUKDQpKSkgJmd0OyZndDsgNDsKJiM0MzsJcmV0IHw9IHRtcDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+KEJJVCgxMykgfCBCSVQoMTIpKTsKJiM0MzsJdG1wID0gKHZhbF8zICZhbXA7IChCSVQoMSkgfCBCSVQoMCkpKTsKJiM0MzsJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIExETyAqLwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTsKJiM0MzsJdG1wID0gKHZhbF8yICZhbXA7IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSAmZ3Q7Jmd0OyAyOwomIzQzOwlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyA0KTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpOwomIzQzOwl0bXAgPSAodmFsXzIgJmFtcDsgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpICZndDsmZ3Q7IDU7CiYjNDM7CXJldCB8PSAodG1wICZsdDsmbHQ7IDgpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBTZXJkZXMgVFggKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogcmVzdGFydCBjYWxpYnJhdGlvbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyAmZ3Q7IDggKi8KJiM0MzsJcmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgJmFtcDs9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7CiYjNDM7CXJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HOwomIzQzOwlyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiByZXNldCBzZXJkZXMgKi8KJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSAgIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgX19waHlfcmVhZCB0YWtlcyBubyBsb2NrICovCiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCAmbHQ7IDApIHx8CiYjNDM7CQkJCSEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQk1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXQgPSB2YWw7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJLyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovCiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdAomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwlpbnQgciA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDEsIDB4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogcG93ZXIgZG93biAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzU5LCAweDIxNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIDIuNUcgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2UsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODEsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAwMCBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZCwgMHhkMDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMywgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAwIHRlbXBhdGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZiwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMwYiwgMHhhYTFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIDEwIHRlbXBhdGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YywgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMCB0ZW1wYXRlIE1BVSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY4LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiBFTUMgQ1MsIEluY29uc2lzdGVudCB3aXRoIGV4dGVybmFsIHBoeSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiBFTUMgUkUqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGMsIDB4NDFhMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwkvKiByZXNldCAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CXJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCiYjNDM7CQkJCSAgICAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlCiYjNDM7CQkocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmU6CiYjNDM7CXIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfbm9ybWFsOgomIzQzOwlyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsCiYjNDM7CQkJCQkgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJcmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwogCX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpOwogCi1lcnJfcmVzdG9yZV9wYWdlOgotCXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7CXBoeWRldl9kYmcocGh5ZGV2LCAmIzM0OyVzIGRvbmUsIHBoeSBhZGRyOiAlZFxuJiMzNDssCiYjNDM7CQkgICBfX2Z1bmNfXywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCkBAIC0zMTA0LDYgJiM0Mzs0MjQ3LDQyOSBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApOwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2dldF9mZWF0dXJlcyAtIHJlYWQgbW1kIHJlZ2lzdGVyIHRvIGdldCAyLjVHIGNhcGFiaWxpdHkKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwlyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBsaW5rIHN0YXR1cyBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IGxpbmsgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJbGluayA9ICEhKHJldCAmYW1wOyBZVFBIWV9TU1JfTElOSyk7CiYjNDM7CiYjNDM7CXBoeWRldl9kYmcocGh5ZGV2LCAmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxuJiMzNDssCiYjNDM7CQkgICBfX2Z1bmNfXywgcGh5ZGV2LSZndDttZGlvLmFkZHIsIGxpbmspOwomIzQzOwlyZXR1cm4gbGluazsKJiM0MztlcnI6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgbGluayA9IDA7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgdmFsID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X3JlYWRfc3RhdHVzKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7YXV0b25lZ19jb21wbGV0ZSkgewomIzQzOwkJcmV0ID0gZ2VucGh5X2M0NV9yZWFkX2xwYShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXZhbCA9IHJldDsKJiM0MzsKJiM0MzsJbGluayA9IHZhbCAmYW1wOyBZVFBIWV9TU1JfTElOSzsKJiM0MzsJaWYgKGxpbmspCiYjNDM7CQl5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7CiYjNDM7CiYjNDM7CWlmIChsaW5rKSB7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDtsaW5rID09IDApCiYjNDM7CQkJcGh5ZGV2X2RiZyhwaHlkZXYsCiYjNDM7CQkJCSAgICYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayB1cFxuJiMzNDssCiYjNDM7CQkJCSAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7CQlwaHlkZXYtJmd0O2xpbmsgPSAxOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHBoeWRldi0mZ3Q7bGluayA9PSAxKQomIzQzOwkJCXBoeWRldl9kYmcocGh5ZGV2LAomIzQzOwkJCQkgICAmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmsgZG93blxuJiMzNDssCiYjNDM7CQkJCSAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7CQlwaHlkZXYtJmd0O2xpbmsgPSAwOwomIzQzOwl9CiYjNDM7CXBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiB8IEJNQ1JfSVNPTEFURSwgMHgwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKCk6IHV0cCBwb3dlciBkb3duLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCS8qIHV0cCBwb3dlciBvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHV0cCBwb3dlciBvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO3JldHJ5OgomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgUEhZIHVwIG9wZXJhdGlvbiBzdWNjZWVkcyBidXQgdGhlIHN1YnNlcXVlbnQgb3BlcmF0aW9uCiYjNDM7CSAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCS8qIHV0cCBwb3dlciBkb3duICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7cmV0cnk6CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvbgomIzQzOwkgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLgomIzQzOwkgKi8KJiM0MzsJciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcGh5X2N0cmwgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCXBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwKJiM0MzsJCQkJICAgICBNRElPX0FOXzEwR0JUX0NUUkwsCiYjNDM7CQkJCSAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsCiYjNDM7CQkJCSAgICAgcGh5X2N0cmwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXQgPSBfX2dlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYsIHJldCk7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2FnZSBmb3IgcGh5ODgyNC4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7CiYjNDM7CWNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqLwomIzQzOwltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDsKJiM0MzsJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgJiMzNDtwaHktbW9kZSYjMzQ7LAomIzQzOwkJCQkgICAgICZhbXA7aW50ZXJmYWNlX21vZGVfbmFtZSkpIHsKJiM0MzsJCWlmICghc3RyY2FzZWNtcChpbnRlcmZhY2VfbW9kZV9uYW1lLAomIzQzOwkJCQlwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpKSkgewomIzQzOwkJCXByaXYtJmd0O2ludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7CiYjNDM7CQl9IGVsc2UgaWYgKCFzdHJjYXNlY21wCiYjNDM7CQkJCShpbnRlcmZhY2VfbW9kZV9uYW1lLAomIzQzOwkJCQkgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7CiYjNDM7CQkJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0OyVzLCBwaHktbW9kZSBtaXNzaW5nIGluIERUUy5cbiYjMzQ7LAomIzQzOwkJCSAgICBfX2Z1bmNfXyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKQEAgLTMxOTAsMTMgJiM0Mzs0NzU2LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiAJCS5yZXN1bWUJCQk9IHl0ODgyMV9yZXN1bWUsCiAJfSwKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLAomIzQzOwkJLm5hbWUJCQk9ICYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCYjMzQ7LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZQkJPSB5dDg4MjRfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJCT0geXQ4ODI0X3dyaXRlX3BhZ2UsCiYjNDM7CQkucHJvYmUJCSAgICAgICAgPSB5dDg4MjRfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2FuZWcJCT0geXQ4ODI0X2NvbmZpZ19hbmVnLAomIzQzOwkJLmFuZWdfZG9uZQkJPSB5dDg4MjRfYW5lZ19kb25lLAomIzQzOwkJLmNvbmZpZ19pbml0CQk9IHl0ODgyNF9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSB5dDg4MjRfcmVhZF9zdGF0dXMsCiYjNDM7CQkuc29mdF9yZXNldAkJPSB5dDg4MjRfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCQk9IHl0ODgyNF9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJCT0geXQ4ODI0X3Jlc3VtZSwKJiM0MzsJfSwKIH07CiAKIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyJiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O1BldGVyIEdlaXMmIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7RnJhbmsmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0t5bGUmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CkBAIC0zMjA2LDYgJiM0Mzs0Nzg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LAomIzQzOwl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LAogCXsgLyogc2VudGluZWwgKi8gfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKaW5kZXggODcwOTIwMzExZjlhMC4uNTI4ZTNmNDE0MzExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCkBAIC0xNDA4LDYgJiM0MzsxNDA4LDYxIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTsKIAomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgTm9ybWFsIHRvIFRlc3QgbW9kZSA3CiYjNDM7ICoKJiM0MzsgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgTm9ybWFsIHRvIFRlc3QgbW9kZSA3CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXIKJiM0MzsgKglyZWFkL3dyaXRlIGVycm9yKS4KJiM0MzsgKi8KJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKQomIzQzO3sKJiM0MzsJaW50IGN0cmwgPSAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKHRlc3RfbW9kZSkgewomIzQzOwljYXNlIDA6CiYjNDM7CQljdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMToKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMzoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNToKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNjoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNzoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLAomIzQzOwkJCSAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTsKJiM0MzsKIC8qKgogICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzCiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDNkOGFmZTZiN2YxYzUuLmZiODI3Y2MzYzk4ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjM1Nyw2ICYjNDM7MjM1Nyw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpOwogaW50IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTsKJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTsKIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQkJICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTsKIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKaW5kZXggMDZmNGJjM2MyMGM3MS4uODU3NmE0ODg3N2M2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCkBAIC02Myw2ICYjNDM7NjMsNyBAQAogLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTAkxMzAJLyogMTBHQkFTRS1UIHBhaXIgc3dhcCAmYW1wOyBwb2xhcml0eSAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUgkxMzEJLyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMgkvKiBUZXN0IG1vZGUgY29udHJvbCAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlIJMTMzCS8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuCiAJCQkJCSAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1IJMTQ3CS8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovCkBAIC0zMjAsNiAmIzQzOzMyMSwxNyBAQAogLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRQkweDAwMDEJLyogRmFzdCByZXRyYWluIGVuYWJsZSAqLwogCiYjNDM7LyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSyAweEUwMDAJLyogVGVtcGxhdGUgdGVzdCBtb2RlICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgMHgwMDAwCS8qIFRlbXBsYXRlIE5vcm1hbCAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDIwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4NDAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHg2MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDgwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4YTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHhjMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweGUwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovCiYjNDM7CiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqLwogI2RlZmluZSBNRElPX1BDU18xMEdCUlRfU1RBVDFfQkxLTEsJMHgwMDAxCS8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi8KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjIwNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDk1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoLCB3aGljaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBZVDg4MjQgUEhZLCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBzZWU6CgoxLiAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzOiBUaGF0JiMzOTtzIHVzdWFsbHkgbm90IHdoZXJlIHRoZSBqdWljeSBidWdzIGFyZSwgYnV0IGFsd2F5cyBnb29kIHRvIGtub3cuCjIuICBLY29uZmlnIGNoYW5nZXM6IEFkZGluZyBgUEhZX1BBQ0tBR0VgIHNlbGVjdGlvbiwgYW5kIGRlc2NyaXB0aW9uIGNoYW5nZXMuIFBvdGVudGlhbGx5IHJlbGV2YW50LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgUEhZX1BBQ0tBR0VgLgozLiAgVGhlIGNvcmUgb2YgdGhlIHBhdGNoOiBUaGUgYG1vdG9yY29tbS5jYCBkcml2ZXIgaGFzIGJlZW4gZXh0ZW5kZWQgd2l0aCBudW1lcm91cyBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IGZvciB0aGUgWVQ4ODI0IFBIWS4gVGhpcyBpbmNsdWRlcyByZWFkL3dyaXRlIGZ1bmN0aW9ucyBmb3IgcmVnaXN0ZXJzLCBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZm9jdXMgbW9zdCBvZiBteSBhdHRlbnRpb24uIFRoZSBgcGh5LWM0NS5jYCBhbmQgYHBoeS5oYCBjaGFuZ2VzIGxvb2sgcmVsYXRlZCB0byBhIGdlbmVyYWwgdGVzdCBtb2RlIGNhcGFiaWxpdHkuCjQuICBNRElPIGRlZmluaXRpb25zOiBOZXcgZGVmaW5pdGlvbnMgaW4gYG1kaW8uaGAgZm9yIHRlc3QgbW9kZSBzZXR0aW5ncy4gVGhlc2UgYXJlIHZlcnkgaW50ZXJlc3RpbmcsIGFzIHRoZXkgZGVmaW5lIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sCgpOb3cgY29tZXMgdGhlIGNydWNpYWwgcGFydDogcmVhY2hhYmlsaXR5LiBJcyB0aGlzIG5ldyBQSFkgZHJpdmVyLCBhbmQgdGhlIGZ1bmN0aW9ucyBpdCBhZGRzLCBhY2Nlc3NpYmxlIHdpdGhpbiBhIFN5emthbGxlci1mdXp6YWJsZSBlbnZpcm9ubWVudD8gTGV0JiMzOTtzIHNlZS4uLgoKSSBrbm93IGBtb3RvcmNvbW0uY2AgaXMgYW4gTURJTyBQSFkgZHJpdmVyLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyIHRyaWdnZXIgY29kZSBwYXRocyB3aXRoaW4gTURJTyBQSFkgZHJpdmVycz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgYW5kIGJvdW5kIHRvIHRoZSBzeXN0ZW0uIEFyZSB0aGV5IHNvbGVseSB0aWVkIHRvIHBoeXNpY2FsIE1ESU8gYnVzZXMsIG9yIGlzIHRoZXJlIGEgd2F5IHRvIGluc3RhbnRpYXRlIE1ESU8vUEhZIGRldmljZXMgdmlydHVhbGx5PyBDYW4gSSBjcmVhdGUgYW4gTURJTyBkZXZpY2UgaW4gYSB3YXkgU3l6a2FsbGVyIGNhbiBpbnRlcmFjdCB3aXRoPyBUaGlzIGlzIHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbi4gSWYgdGhleSBhcmUgYm91bmQgdG8gYSByZWFsIE1ESU8sIEkgd291bGQgbmVlZCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudC4KCkkgbmVlZCB0byBzZWFyY2ggd2l0aGluIFN5emthbGxlciwgYW5kIGV2ZW4gd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLCBmb3IgaG93IE1ESU8gZGV2aWNlcyBhcmUgY3JlYXRlZCBvciBjb250cm9sbGVkLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHRoaW5ncyBsaWtlICYjMzQ7bWRpbyYjMzQ7LCAmIzM0O3BoeVxfZHJpdmVyJiMzNDssIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSB1c2Vyc3BhY2UgaW50ZXJmYWNlcyB0aGF0IGFsbG93IG1lIHRvIGNyZWF0ZSBhbiBNRElPIFBIWS4gSWYgSSBjYW4gaW5zdGF0aWF0ZSBvbmUgdmlydHVhbGx5LCBJIGFtIGluIGx1Y2suIFRoYXQgd291bGQgb3BlbiB0aGUgZG9vciB0byBmdXp6aW5nIHRoZSBZVDg4MjQgYW5kIHRoZSBvdGhlciBkcml2ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKm5ld19kZXZpY2V8cGh5X2RldmljZV9jcmVhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEzNC1cdGVsc2VcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMzU6XHRcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCAwLCBOVUxMKTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMzYtXHRpZiAoSVNfRVJSKHBoeSkpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz01NTE9c3RhdGljIHZvaWQgdGphMTEwMl9wMV9yZWdpc3RlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg1LVx0XHQvKiBSZWFsIFBIWSBJRCBvZiBQb3J0IDEgaXMgMCAqL1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTg2Olx0XHRwaHkgPSBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIFBIWV9JRF9USkExMTAyLCBmYWxzZSwgTlVMTCk7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODctXHRcdGlmIChJU19FUlIocGh5KSkge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU5Mi1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU5MzpcdFx0LyogT3ZlcndyaXRlIHBhcmVudCBkZXZpY2UuIHBoeV9kZXZpY2VfY3JlYXRlKCkgc2V0IHBhcmVudCB0b1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTk0LVx0XHQgKiB0aGUgbWlpX2J1cy1cdTAwM2VkZXYsIHdoaWNoIGlzIG5vdCBjb3JyZWN0IGluIGNhc2UuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz03Mjg9c3RhdGljIGludCBwaHlfcmVxdWVzdF9kcml2ZXJfbW9kdWxlKHN0cnVjdCBwaHlfZGV2aWNlICpkZXYsIHUzMiBwaHlfaWQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDctXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjc0ODpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTc0OS1cdFx0XHRcdCAgICAgYm9vbCBpc19jNDUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04MzktfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo4NDA6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX2NyZWF0ZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTg0MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEwNzE9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTYtXHRcdGlmICghcilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA5NzpcdFx0XHRyZXR1cm4gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTgtXHRcdFx0XHRcdFx0IHRydWUsIFx1MDAyNmM0NV9pZHMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwMTpcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCwgaXNfYzQ1LCBcdTAwMjZjNDVfaWRzKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMi19XG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD0yMTY3PWludCBwaHlfbW9kaWZ5X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLCB1MzIgcmVnbnVtLFxuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMjE2OS1cbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE3MDpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxNzEtXHRcdFx0XHQgICAgIGJvb2wgaXNfYzQ1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjU4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBQSFkgRGV2aWNlIFByb2JpbmcqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZCEgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsOiBIb3cgZXhhY3RseSBkbyB3ZSBwcm9iZSB0aGVzZSBQSFkgZGV2aWNlcz8gTGV0IG1lIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSYjMzk7bSB0aGlua2luZywgYSBQSFkgZGV2aWNlIGlzIGNyZWF0ZWQsIGVpdGhlciB0aHJvdWdoIHRoZSBEZXZpY2UgVHJlZSBmd25vZGUgKHdoaWNoIG1ha2VzIHNlbnNlLCBwcmVjb25maWd1cmVkIGhhcmR3YXJlKSBvciBkdXJpbmcgdGhlIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiB1c2luZyBgbWRpb2J1c19yZWdpc3RlcmAuIFJpZ2h0LCBhbmQgdGhlbiB0aGUgY3JpdGljYWwgc3RlcCBpcyB0aGUgUEhZIGRyaXZlciBiaW5kaW5nLCB0aGlzIGxpa2VseSBkZXBlbmRzIG9uIHdoYXQmIzM5O3MgcmVhZCBmcm9tIHRoZSBoYXJkd2FyZSBpdHNlbGYsIHNwZWNpZmljYWxseSB0aGUgYHBoeV9pZGAgcmVnaXN0ZXIsIG9yIGFsc28gYSBEZXZpY2UgVHJlZSBtYXRjaCwgcmlnaHQ/IEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGlzIHNvIEkmIzM5O2xsIGNoZWNrIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2AgdG8gcmVtaW5kIG15c2VsZiBhYm91dCBpdHMgc3RydWN0dXJlLiBPa2F5LCBzbyBJIG5vdyB1bmRlcnN0YW5kIHRoaXMsIHdoZXJlIGlzIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBhY3R1YWxseSAqY2FsbGVkKj8gVGltZSBmb3IgYSBxdWljayBgZ3JlcGAgdG8gdHJhY2sgZG93biB0aG9zZSB1c2FnZXMuIEkgY2FuIHVzZSB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTc3Nz1zdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg0LVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjc4NTpcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg2LVx0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz04NDE9c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODQ4LVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjg0OTpcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODUwLVx0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9OTc5PXN0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTIzMi1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjMzOlx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMzQtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNDctXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTI0ODpcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjQ5LVx0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI2MC1lcnJfcmVzdG9yZV9ub3JtYWw6XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTI2MTpcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjYyLVx0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTE1MjA9c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwNC1cdFx0Z290byBlcnJfcmVzdG9yZTtcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzA1Olx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MDYtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MTktXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTcyMDpcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzIxLVx0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTczMy1lcnJfcmVzdG9yZV9ub3JtYWw6XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTczNDpcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzM1LVx0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYz0xNDA5PUVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MTEtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0MTI6ICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQxMy0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MjAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0MjE6aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDYzLX1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQ2NDpFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQ2NS1cbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIzNTk9aW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjM2MDppbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTtcbmluY2x1ZGUvbGludXgvcGh5LmgtMjM2MS1pbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM2MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFJvYWRibG9jayoqCgpPa2F5LCBzbyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgb25seSBnZXRzIGNhbGxlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBnb2FsOiBjYW4gSSBldmVuICpyZWFjaCogb3IgaW5zdGFudGlhdGUgYSBNb3RvcmNvbW0gUEhZLCBzcGVjaWZpY2FsbHkgdGhlIFlUODgyNCwgZHVyaW5nIG15IGFtZDY0IFFFTVUgc3l6a2FsbGVyIGZ1enppbmcgcnVucz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBndWlkZWxpbmVzLgoKUmlnaHQsIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4uLiBJIHJlbWVtYmVyLCAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4mIzM0OyBTcGVjaWZpY2FsbHksICYjMzQ7VmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMuLi4gcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4mIzM0OwoKSGFuZyBvbi4uLiBJcyBhbiBFdGhlcm5ldCBQSFkgZHJpdmVyICpzdHJ1Y3R1cmFsbHkqIHVucmVhY2hhYmxlPyBUaGUgWVQ4ODI0IGlzIGEgZGlzY3JldGUgRXRoZXJuZXQgUEhZIGNoaXAg4oCTIGEgcGh5c2ljYWwgY2hpcC4gSXQmIzM5O3MgYSAmIzM0O1F1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCBQSFkuJiMzNDsgSXQgY29ubmVjdHMgb3ZlciBNRElPIHRvIGEgTUFDIG9yIFNvQyBhbmQgaXMgaWRlbnRpZmllZCB2aWEgZGV2aWNldHJlZSBiaW5kaW5ncyBsaWtlIGBtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VgIG9yIHRoZSBNRElPIFBIWSBJRCAweDRmNTFlOGI4LgoKT2theSwgZG9lcyAqc3RhbmRhcmQqIFFFTVUsIHRoZSBvbmUgc3l6a2FsbGVyIHVzZXMsIGVtdWxhdGUgdGhpcz8gTm9wZS4gUUVNVSBlbXVsYXRlcyB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlcyBsaWtlIGUxMDAwLCB2aXJ0aW8tbmV0LCBydGw4MTM5LCBhbmQgc28gb24uIE5vbmUgb2YgdGhvc2UgaGF2ZSBhIE1vdG9yY29tbSBQSFkgY2hpcC4gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoZXkgaGF2ZSB0aGUgb3B0aW9uIHRvIGFkZCBhbnkuCgpCdXQsIGEgdmlydHVhbCBNRElPIGJ1cz8gT3IgbWF5YmUgc29tZSBraW5kIG9mIFVTQi10by1NRElPIGFkYXB0ZXIgb3Igc2ltaWxhciB0aGluZyBjb3VsZCBiZSB1c2VkIGluIHN5emthbGxlciB0byByZWFjaCB0aGlzPyBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBrZXJuZWwgYW5kIHN5emthbGxlciBzb3VyY2UgZm9yIGFueSBldmlkZW5jZSBvZiB2aXJ0dWFsIE1ESU8gYnVzZXMgb3IgVVNCLU1ESU8gYWRhcHRlcnMuIFRoYXQmIzM5O3MgdGhlIG5leHQgYXZlbnVlIHRvIGNoZWNrLi4uIG90aGVyd2lzZSwgdGhpcyBkcml2ZXIgaXMgZ29pbmcgdG8gYmUgYSBkZWFkIGVuZCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLip1c2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfTURJT19NU0NDX01JSU0pXHRcdCYjNDM7PSBtZGlvLW1zY2MtbWlpbS5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19NRElPX01WVVNCKVx0XHQmIzQzOz0gbWRpby1tdnVzYi5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19NRElPX09DVEVPTilcdFx0JiM0Mzs9IG1kaW8tb2N0ZW9uLm9cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYz0zMj1zdGF0aWMgaW50IG12dXNiX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgaW50IGRldiwgaW50IHJlZylcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTMzLXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjM0Olx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiID0gbWRpby1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtMzUtXHRpbnQgZXJyLCBhbGVuO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jPTUyPXN0YXRpYyBpbnQgbXZ1c2JfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTUzLXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjU0Olx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiID0gbWRpby1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtNTUtXHRpbnQgYWxlbjtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy02My1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjY0OnN0YXRpYyBpbnQgbXZ1c2JfbWRpb19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtNjUtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy02Ny1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmludGVyZmFjZS1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYzo2ODpcdHN0cnVjdCBtdnVzYl9tZGlvICptdnVzYjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTY5LVx0c3RydWN0IG1paV9idXMgKm1kaW87XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy03MC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjcxOlx0bWRpbyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKGRldiwgc2l6ZW9mKCptdnVzYikpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtNzItXHRpZiAoIW1kaW8pXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtODItXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYzo4MzpcdHNucHJpbnRmKG1kaW8tXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7bXZ1c2ItJXNcJiMzNDssIGRldl9uYW1lKGRldikpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtODQtXHRtZGlvLVx1MDAzZW5hbWUgPSBtZGlvLVx1MDAzZWlkO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtODUtXHRtZGlvLVx1MDAzZXBhcmVudCA9IGRldjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjg2Olx0bWRpby1cdTAwM2VyZWFkID0gbXZ1c2JfbWRpb19yZWFkO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6ODc6XHRtZGlvLVx1MDAzZXdyaXRlID0gbXZ1c2JfbWRpb193cml0ZTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTg4LVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTkzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6OTQ6c3RhdGljIHZvaWQgbXZ1c2JfbWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy05NS17XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYzo5NjpcdHN0cnVjdCBtdnVzYl9tZGlvICptdnVzYiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTk3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6OTg6XHRtZGlvYnVzX3VucmVnaXN0ZXIobXZ1c2ItXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy05OS1cdHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjU4PXN0YXRpYyBpbnQgYXNpeF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY2OC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2Njk6c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjcwLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjgzLVx0LyogbWlpIGJ1cyBuYW1lIGlzIHVzYi1cdTAwM2N1c2IgYnVzIG51bWJlclx1MDAzZS1cdTAwM2N1c2IgZGV2aWNlIG51bWJlclx1MDAzZSAqL1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY4NDpcdHNucHJpbnRmKHByaXYtXHUwMDNlbWRpby1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDt1c2ItJTAzZDolMDNkXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4NS1cdFx0IGRldi1cdTAwM2V1ZGV2LVx1MDAzZWJ1cy1cdTAwM2VidXNudW0sIGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldm51bSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9NTU9c3RhdGljIHZvaWQgYXg4ODE3MmFfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTYwLS8qIHVzZSBwaHlsaWIgaW5mcmFzdHJ1Y3R1cmUgKi9cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjYxOnN0YXRpYyBpbnQgYXg4ODE3MmFfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTYyLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03Ni1cdC8qIG1paSBidXMgbmFtZSBpcyB1c2ItXHUwMDNjdXNiIGJ1cyBudW1iZXJcdTAwM2UtXHUwMDNjdXNiIGRldmljZSBudW1iZXJcdTAwM2UgKi9cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjc3Olx0c25wcmludGYocHJpdi1cdTAwM2VtZGlvLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0O3VzYi0lMDNkOiUwM2RcJiMzNDssXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OC1cdFx0IGRldi1cdTAwM2V1ZGV2LVx1MDAzZWJ1cy1cdTAwM2VidXNudW0sIGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldm51bSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtOTMtXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo5NDpzdGF0aWMgdm9pZCBheDg4MTcyYV9yZW1vdmVfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy05NS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDkxPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTA3LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA4Olx0c25wcmludGYoZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7dXNiLSUwM2Q6JTAzZFwmIzM0OyxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEwOS1cdFx0IGRldi1cdTAwM2V1ZGV2LVx1MDAzZWJ1cy1cdTAwM2VidXNudW0sIGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldm51bSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTY2PXN0YXRpYyB1MzIgbWlpX2FkZHJlc3NfY21kKGludCBwaHlfaWQsIGludCBpZHgsIHUxNiBvcClcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xNzAtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxNzE6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTcyLXtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yMTctXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoyMTg6c3RhdGljIHZvaWQgc21zYzk1eHhfbWRpb193cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHlfaWQsIGludCBpZHgsXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yMTktXHRcdFx0XHRpbnQgcmVndmFsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjMwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBNb3RvcmNvbW0gUEhZIERyaXZlcioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCBhYm91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLCBhbmQgdGhpcyBjb3VsZCBiZSBrZXkuIExldCYjMzk7cyBleGFtaW5lIHRoaXMgc25pcHBldDoKCmBgYGMKc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKewoJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwoJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7CglpbnQgcmV0OwoKCXJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpOwoJaWYgKHJldCkKCQlyZXR1cm4gcmV0OwoKCWlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHsKCQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwoJCWlmIChyZXQpCgkJCXJldHVybiByZXQ7Cgl9CgoJcmV0dXJuIDA7Cn0KYGBgCgpSaWdodCwgc28gd2UmIzM5O3JlIGpvaW5pbmcgYSBwYWNrYWdlIHVzaW5nIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gLCBhbmQgcG90ZW50aWFsbHkgcHJvYmluZyBpdC4gV2hhdCYjMzk7cyBjcnVjaWFsIGhlcmUgaXMgdGhhdCBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBsaWtlbHkgbWFuYWdlcyByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBhc3NvY2lhdGlvbiB3aXRoIHRoZSBkZXZpY2UgdHJlZS4gSXQgc2VlbXMgdG8gYmUgc2V0dGluZyB1cCBzaGFyZWQgcHJpdmF0ZSBkYXRhIHdpdGhpbiB0aGUgYHl0ODgyNF9zaGFyZWRfcHJpdmAgc3RydWN0LiBUaGUgZmFjdCB0aGF0IGBwaHlfcGFja2FnZV9wcm9iZV9vbmNlYCBpcyBjYWxsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGlzIGludHJpZ3VpbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbiBtb3JlIHByZWNpc2VseSwgYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxlbWVudGF0aW9uLiBJdCBjb3VsZCBiZSB0aGUgbGluY2hwaW4gaW4gaG93IHRoZSBNb3RvcmNvbW0gUEhZIGlzIGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgdGhlIGRldmljZSB0cmVlIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTQ2NTQ9c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY1OS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo0NjYwOlx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY2MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM9NDA1PUVYUE9SVF9TWU1CT0xfR1BMKGRldm1fcGh5X3BhY2thZ2Vfam9pbik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDA3LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM6NDA4OiAqIGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbiAtIHJlc291cmNlIG1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00MDktICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQSFkgcGFja2FnZVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQxNi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jOjQxNzppbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQxOC1cdFx0XHQgICAgIHNpemVfdCBwcml2X3NpemUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDM4LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jOjQzOTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4pO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDQwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaD0zMj1pbnQgZGV2bV9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaC0zMy1cdFx0XHQgIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oOjM0OmludCBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oLTM1LVx0XHRcdCAgICAgc2l6ZV90IHByaXZfc2l6ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTY5ND1zdGF0aWMgaW50IHFjYTgwN3hfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNzAxLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjcwMjpcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTcwMy1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NTc5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgcGh5X3BhY2thZ2UuY2AqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgaW50byBpdC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBvbmUgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jYC4gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZSBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldmljZSB0cmVlIGFuZCBQSFkgcGFja2FnZSBoYW5kbGluZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgZGV2aWNlIG1hbmFnZW1lbnQgbGlicmFyeSBnaXZlbiB0aGUgYGRldm1fYCBwcmVmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwODpcdCAqIGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbiAtIHJlc291cmNlIG1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpXG4gNDA5Olx0ICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQSFkgcGFja2FnZVxuIDQxMDpcdCAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuIDQxMTpcdCAqIEBwcml2X3NpemU6IGlmIG5vbi16ZXJvIGFsbG9jYXRlIHRoaXMgYW1vdW50IG9mIGJ5dGVzIGZvciBwcml2YXRlIGRhdGFcbiA0MTI6XHQgKlxuIDQxMzpcdCAqIE1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpLiBTaGFyZWQgc3RvcmFnZSBmZXRjaGVkIGJ5IHRoaXMgZnVuY3Rpb24sXG4gNDE0Olx0ICogcGh5X3BhY2thZ2VfbGVhdmUoKSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBkcml2ZXIgZGV0YWNoLiBTZWVcbiA0MTU6XHQgKiBvZl9waHlfcGFja2FnZV9qb2luKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gNDE2Olx0ICovXG4gNDE3Olx0aW50IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gNDE4Olx0XHRcdFx0ICAgICBzaXplX3QgcHJpdl9zaXplKVxuIDQxOTpcdHtcbiA0MjA6XHRcdHN0cnVjdCBwaHlfZGV2aWNlICoqcHRyO1xuIDQyMTpcdFx0aW50IHJldDtcbiA0MjI6XHRcbiA0MjM6XHRcdHB0ciA9IGRldnJlc19hbGxvYyhkZXZtX3BoeV9wYWNrYWdlX2xlYXZlLCBzaXplb2YoKnB0ciksXG4gNDI0Olx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4gNDI1Olx0XHRpZiAoIXB0cilcbiA0MjY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDI3Olx0XG4gNDI4Olx0XHRyZXQgPSBvZl9waHlfcGFja2FnZV9qb2luKHBoeWRldiwgcHJpdl9zaXplKTtcbiA0Mjk6XHRcbiA0MzA6XHRcdGlmICghcmV0KSB7XG4gNDMxOlx0XHRcdCpwdHIgPSBwaHlkZXY7XG4gNDMyOlx0XHRcdGRldnJlc19hZGQoZGV2LCBwdHIpO1xuIDQzMzpcdFx0fSBlbHNlIHtcbiA0MzQ6XHRcdFx0ZGV2cmVzX2ZyZWUocHRyKTtcbiA0MzU6XHRcdH1cbiA0MzY6XHRcbiA0Mzc6XHRcdHJldHVybiByZXQ7XG4gNDM4Olx0fVxuIDQzOTpcdEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbik7XG4gNDQwOlx0XG4gNDQxOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1BIWSBwYWNrYWdlIHN1cHBvcnRcJiMzNDspO1xuIDQ0MjpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzI1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgc3VtbWFyaXplZCBmcm9tIHRoZSBwcm92aWRlZCB0ZXh0LCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhbmQgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBbmFseXppbmcgYG9mX3BoeV9wYWNrYWdlX2pvaW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgZnVuY3Rpb24gb3IgY29uY2VwdC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBQSFkgKFBoeXNpY2FsIExheWVyKSBjb250ZXh0LiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBmdW5jdGlvbiByZWxhdGVkIHRvIGpvaW5pbmcgb3IgYXNzZW1ibGluZyBzb21ldGhpbmcgYXQgdGhlIHBoeXNpY2FsIGxldmVsLiBNeSBtaW5kJiMzOTtzIGp1bXBpbmcgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiBJcyB0aGlzIGFib3V0IHBhY2tldCBhZ2dyZWdhdGlvbiwgcGVyaGFwcz8gT3IgaXMgaXQgbW9yZSBmdW5kYW1lbnRhbCwgZGVhbGluZyB3aXRoIHRoZSBhbGlnbm1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBpbmNvbWluZyBkYXRhIHN0cmVhbXMgYXQgdGhlIHZlcnkgbG93ZXN0IGxldmVsIG9mIHRoZSBwcm90b2NvbCBzdGFjaz8KCkdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBsaWtlbHkgc2l0cyBiZXR3ZWVuIHRoZSByYXcgc2lnbmFsIHByb2Nlc3NpbmcgYW5kIHRoZSBtb3JlIHN0cnVjdHVyZWQgTUFDIChNZWRpdW0gQWNjZXNzIENvbnRyb2wpIGxheWVyLiBJdCBwcm9iYWJseSBoYW5kbGVzIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBiaXQtbGV2ZWwgbWFuaXB1bGF0aW9uIOKAkyBtYXliZSBmcmFtaW5nLCBlcnJvciBjb3JyZWN0aW9uIGF0IHRoZSBwaHlzaWNhbCBsZXZlbCwgb3IgZXZlbiBwcmUtcHJvY2Vzc2luZyBmb3IgZXF1YWxpemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzIHRvIGJlIHN1cmUsIGJ1dCBJJiMzOTttIHBpY3R1cmluZyBpdCBoYW5kbGluZyB0aGluZ3MgbGlrZSBpbnRlci1zeW1ib2wgaW50ZXJmZXJlbmNlLCBjaGFubmVsIGltcGFpcm1lbnRzLCBhbmQgYW55IHByZS1jb2Rpbmcgc2NoZW1lcyBpbiB1c2UuCgpOb3csIGlmIGl0IGRlYWxzIHdpdGggam9pbmluZywgY291bGQgaXQgYmUgcGFydCBvZiBhIE1JTU8gKE11bHRpcGxlLUlucHV0IE11bHRpcGxlLU91dHB1dCkgb3IgYmVhbWZvcm1pbmcgc2NoZW1lPyBUaGF0JiMzOTtzIGEgc3Ryb25nIHBvc3NpYmlsaXR5LiBJbiB0aGlzIGNhc2UsIGl0IG1pZ2h0IGhhbmRsZSB0aGUgY29tYmluYXRpb24gb2YgZGF0YSBzdHJlYW1zIGZyb20gbXVsdGlwbGUgYW50ZW5uYXMuIE9yLCBpdCBtaWdodCBiZSBhYm91dCBhZ2dyZWdhdGluZyBtdWx0aXBsZSBzbWFsbGVyIGRhdGEgdW5pdHMgaW50byBsYXJnZXIgcGh5c2ljYWwtbGF5ZXIgcGFja2V0cyBmb3IgZWZmaWNpZW50IHRyYW5zbWlzc2lvbiBvdmVyIHRoZSBhaXIuIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSBpdHMgYXJjaGl0ZWN0dXJlIGRlZXBlciB0byBjb25maXJtLiBSZWdhcmRsZXNzLCBpdCYjMzk7cyBjbGVhcmx5IGEgY3J1Y2lhbCBjb21wb25lbnQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHJlY2lzZSByb2xlIGluIHRoZSBkYXRhIGZsb3cgdG8gdHJ1bHkgZ3Jhc3AgaXRzIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDc6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzYwOlx0XHR9XG4gMzYxOlx0XG4gMzYyOlx0XHRwaHlkZXYtXHUwMDNlc2hhcmVkID0gTlVMTDtcbiAzNjM6XHR9XG4gMzY0Olx0RVhQT1JUX1NZTUJPTF9HUEwocGh5X3BhY2thZ2VfbGVhdmUpO1xuIDM2NTpcdFxuIDM2NjpcdHN0YXRpYyB2b2lkIGRldm1fcGh5X3BhY2thZ2VfbGVhdmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpXG4gMzY3Olx0e1xuIDM2ODpcdFx0cGh5X3BhY2thZ2VfbGVhdmUoKihzdHJ1Y3QgcGh5X2RldmljZSAqKilyZXMpO1xuIDM2OTpcdH1cbiAzNzA6XHRcbiAzNzE6XHQvKipcbiAzNzI6XHQgKiBkZXZtX3BoeV9wYWNrYWdlX2pvaW4gLSByZXNvdXJjZSBtYW5hZ2VkIHBoeV9wYWNrYWdlX2pvaW4oKVxuIDM3MzpcdCAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUEhZIHBhY2thZ2VcbiAzNzQ6XHQgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiAzNzU6XHQgKiBAYmFzZV9hZGRyOiBjb29raWUgYW5kIGJhc2UgUEhZIGFkZHJlc3Mgb2YgUEhZIHBhY2thZ2UgZm9yIG9mZnNldFxuIDM3NjpcdCAqICAgY2FsY3VsYXRpb24gb2YgZ2xvYmFsIHJlZ2lzdGVyIGFjY2Vzc1xuIDM3NzpcdCAqIEBwcml2X3NpemU6IGlmIG5vbi16ZXJvIGFsbG9jYXRlIHRoaXMgYW1vdW50IG9mIGJ5dGVzIGZvciBwcml2YXRlIGRhdGFcbiAzNzg6XHQgKlxuIDM3OTpcdCAqIE1hbmFnZWQgcGh5X3BhY2thZ2Vfam9pbigpLiBTaGFyZWQgc3RvcmFnZSBmZXRjaGVkIGJ5IHRoaXMgZnVuY3Rpb24sXG4gMzgwOlx0ICogcGh5X3BhY2thZ2VfbGVhdmUoKSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBkcml2ZXIgZGV0YWNoLiBTZWVcbiAzODE6XHQgKiBwaHlfcGFja2FnZV9qb2luKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gMzgyOlx0ICovXG4gMzgzOlx0aW50IGRldm1fcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gMzg0Olx0XHRcdFx0ICBpbnQgYmFzZV9hZGRyLCBzaXplX3QgcHJpdl9zaXplKVxuIDM4NTpcdHtcbiAzODY6XHRcdHN0cnVjdCBwaHlfZGV2aWNlICoqcHRyO1xuIDM4NzpcdFx0aW50IHJldDtcbiAzODg6XHRcbiAzODk6XHRcdHB0ciA9IGRldnJlc19hbGxvYyhkZXZtX3BoeV9wYWNrYWdlX2xlYXZlLCBzaXplb2YoKnB0ciksXG4gMzkwOlx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4gMzkxOlx0XHRpZiAoIXB0cilcbiAzOTI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzkzOlx0XG4gMzk0Olx0XHRyZXQgPSBwaHlfcGFja2FnZV9qb2luKHBoeWRldiwgYmFzZV9hZGRyLCBwcml2X3NpemUpO1xuIDM5NTpcdFxuIDM5NjpcdFx0aWYgKCFyZXQpIHtcbiAzOTc6XHRcdFx0KnB0ciA9IHBoeWRldjtcbiAzOTg6XHRcdFx0ZGV2cmVzX2FkZChkZXYsIHB0cik7XG4gMzk5Olx0XHR9IGVsc2Uge1xuIDQwMDpcdFx0XHRkZXZyZXNfZnJlZShwdHIpO1xuIDQwMTpcdFx0fVxuIDQwMjpcdFxuIDQwMzpcdFx0cmV0dXJuIHJldDtcbiA0MDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2Mzk3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5LCByZWFkeSBmb3IgYSBmZWxsb3cgZXhwZXJ0LgoKKipBbmFseXppbmcgYG9mX3BoeV9wYWNrYWdlX2pvaW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb25zaWRlciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29udGV4dCBpdCYjMzk7cyBvcGVyYXRpbmcgd2l0aGluLiAgV2hhdCBraW5kIG9mIHBoeXNpY2FsIGxheWVyIHBhY2thZ2UgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSXMgdGhpcyByZWxhdGVkIHRvIEV0aGVybmV0LCBhIGN1c3RvbSBwcm90b2NvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGZyYW1lIGZvcm1hdC4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGZvcm1pbmcgYSBjaGVja2xpc3Q6CgoqICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBhcmUgdGhlIGlucHV0IHBhY2thZ2UgZm9ybWF0cz8gSXMgaXQgYSBzdHJ1Y3R1cmUsIGEgY2xhc3MsIG9yIHJhdyBieXRlcz8gQXJlIHRoZXJlIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhPyBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgYW5kIGhvdyBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgcmVmZXJlbmNlcyB0aGVtLiBBbnkgcG90ZW50aWFsIGJpdGZpZWxkcywgYWxpZ25tZW50IGlzc3Vlcywgb3IgZW5kaWFubmVzcyBjb25zaWRlcmF0aW9ucz8KKiAgICoqUHVycG9zZToqKiBXaGF0JiMzOTtzIHRoZSAqZ29hbCogb2YgdGhpcyBmdW5jdGlvbj8gSXMgaXQgY29tYmluaW5nIG11bHRpcGxlIHBoeXNpY2FsIGxheWVyIHBhY2tldHMgaW50byBhIGxhcmdlciB1bml0LCBwZXJoYXBzIGEgbG9naWNhbCBmcmFtZT8gSXMgaXQgbWVhbnQgdG8gYWRkIGhlYWRlcnMsIHRyYWlsZXJzLCBvciBwYWRkaW5nPyBJcyBpdCByZWxhdGVkIHRvIHBhY2tldCByZWFzc2VtYmx5LCBlbmNhcHN1bGF0aW9uLCBvciBzZWdtZW50YXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoIHRoZSBpbnB1dCBkYXRhLCBsaWtlIGFuIGluY29tcGxldGUgcGFja2FnZSBvciBjb3JydXB0ZWQgZGF0YT8gSSBuZWVkIHRvIGFzY2VydGFpbiBob3cgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGVycm9yIGNvbmRpdGlvbnMuIERvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGUsIHRocm93IGFuIGV4Y2VwdGlvbiwgb3IgbG9nIHNvbWV0aGluZz8gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiB0aGluZ3MgZ28gd3Jvbmc/IElzIGVycm9yIGNoZWNraW5nIHRob3JvdWdoPwoqICAgKipQZXJmb3JtYW5jZToqKiBHaXZlbiB0aGUgbGlrZWx5IGRhdGEgdm9sdW1lcywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgdGhpcyBmdW5jdGlvbi4gQW55IHBvdGVudGlhbCBib3R0bGVuZWNrcz8gQXJlIHRoZXJlIGxvb3BzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvcHlpbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHNsb3cgdGhpbmdzIGRvd24/IElzIHRoaXMgZnVuY3Rpb24gb3B0aW1pemVkIGZvciBzcGVlZCBvciBzaW1wbGljaXR5PwoqICAgKipTZWN1cml0eToqKiBUaGlzIGlzIG1vcmUgb2YgYSBzZWNvbmRhcnkgY29uc2lkZXJhdGlvbi4gSXMgdGhpcyBmdW5jdGlvbiBkZXNpZ25lZCB3aXRoIGFueSBzZWN1cml0eSBhc3BlY3RzIGluIG1pbmQ/IElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gZGF0YSBtYW5pcHVsYXRpb24/CiogICAqKlNpZGUgRWZmZWN0czoqKiBXaGF0IGlzIGJlaW5nIGFsdGVyZWQ/IElzIHRoZXJlIGEgc3RhdGUgY2hhbmdlPyBBbnkgb3RoZXIgZnVuY3Rpb25zIHJlbGlhbnQgb24gdGhpcyBvbmU/CgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIGlucHV0LCBpdHMgb3V0cHV0LCBpdHMgaW50ZXJuYWwgbG9naWMsIHRoZSBlcnJvciBoYW5kbGluZywgYW5kIGl0cyBwbGFjZSBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gQnkgcXVpY2tseSB3YWxraW5nIHRocm91Z2ggdGhlc2UgaXRlbXMsIEkmIzM5O2xsIGlkZW50aWZ5IGFueSBhcmVhcyB0aGF0IGNvdWxkIGJlIGltcHJvdmVkLCBvcHRpbWl6ZWQsIG9yIHRoYXQgbWF5IGhhdmUgdW5leHBlY3RlZCBjb25zZXF1ZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBvZl9waHlfcGFja2FnZV9qb2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jPTI3Nj1FWFBPUlRfU1lNQk9MX0dQTChwaHlfcGFja2FnZV9qb2luKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy0yOTctICovXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzoyOTg6aW50IG9mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc2l6ZV90IHByaXZfc2l6ZSlcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTI5OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oPTI5PWludCBwaHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oOjMwOmludCBvZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHNpemVfdCBwcml2X3NpemUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oLTMxLXZvaWQgcGh5X3BhY2thZ2VfbGVhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTg1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gJiMzOTtvZlxfcGh5XF9wYWNrYWdlXF9qb2luJiMzOTsqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBvZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbi4gSnVzdCB0aGUgbmFtZSBhbG9uZSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBzb21lIHNvcnQgb2Ygam9pbmluZyBvcGVyYXRpb24sIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBQSFkgcGFja2FnZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGNvbXBsZXhpdGllcy4gSXMgdGhpcyBhIHNpbXBsZSBjb25jYXRlbmF0aW9uLCBvciBhcmUgdGhlcmUgbW9yZSBzb3BoaXN0aWNhdGVkIG1lcmdpbmcgcnVsZXMgYXQgcGxheT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29tYmluaW5nIGRhdGEgc3RydWN0dXJlcywgcGVyaGFwcyBwYWNrZXQgaGVhZGVycywgcGF5bG9hZCBpbmZvcm1hdGlvbiwgb3IgY29udHJvbCBmaWVsZHM/IFRoZSAmIzM0O1BIWSYjMzQ7IHByZWZpeCBpcyBhIHNpZ25pZmljYW50IGNsdWU7IGl0IHNpZ25hbHMgdGhpcyBpcyBwcm9iYWJseSBsb3ctbGV2ZWwsIGNsb3NlIHRvIHRoZSBwaHlzaWNhbCBsYXllci4gSSBuZWVkIHRvIGNvbnNpZGVyIGZhY3RvcnMgc3VjaCBhcyBmcmFtaW5nLCBzeW5jaHJvbml6YXRpb24sIGVycm9yIGhhbmRsaW5nIGF0IHRoaXMgc3RhZ2UsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aHJvdWdocHV0IG9yIGxhdGVuY3kuIFdoYXQmIzM5O3MgdGhlIHRhcmdldCBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlPyBJcyB0aGlzIGEgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgcHJvY2Vzcywgb3IgcnVubmluZyBlbnRpcmVseSBpbiBzb2Z0d2FyZT8gVGhlIGRhdGEgdHlwZSBvZiB0aGUgaW5wdXQsIGFuZCBvdXRwdXQsIGlzIGtleS4gTGV0IG1lIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGRhdGEgc3RyZWFtIHByb2Nlc3NpbmcgcGlwZWxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5ODpcdGludCBvZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHNpemVfdCBwcml2X3NpemUpXG4gMjk5Olx0e1xuIDMwMDpcdFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4gMzAxOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbiAzMDI6XHRcdHUzMiBiYXNlX2FkZHI7XG4gMzAzOlx0XHRpbnQgcmV0O1xuIDMwNDpcdFxuIDMwNTpcdFx0aWYgKCFub2RlKVxuIDMwNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMDc6XHRcbiAzMDg6XHRcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4gMzA5Olx0XHRpZiAoIXBhY2thZ2Vfbm9kZSlcbiAzMTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzExOlx0XG4gMzEyOlx0XHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuIDMxMzpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDMxNDpcdFx0XHRnb3RvIGV4aXQ7XG4gMzE1Olx0XHR9XG4gMzE2Olx0XG4gMzE3Olx0XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCBcJiMzNDtyZWdcJiMzNDssIFx1MDAyNmJhc2VfYWRkcikpIHtcbiAzMTg6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAzMTk6XHRcdFx0Z290byBleGl0O1xuIDMyMDpcdFx0fVxuIDMyMTpcdFxuIDMyMjpcdFx0cmV0ID0gcGh5X3BhY2thZ2Vfam9pbihwaHlkZXYsIGJhc2VfYWRkciwgcHJpdl9zaXplKTtcbiAzMjM6XHRcdGlmIChyZXQpXG4gMzI0Olx0XHRcdGdvdG8gZXhpdDtcbiAzMjU6XHRcbiAzMjY6XHRcdHBoeWRldi1cdTAwM2VzaGFyZWQtXHUwMDNlbnAgPSBwYWNrYWdlX25vZGU7XG4gMzI3Olx0XG4gMzI4Olx0XHRyZXR1cm4gMDtcbiAzMjk6XHRleGl0OlxuIDMzMDpcdFx0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbiAzMzE6XHRcdHJldHVybiByZXQ7XG4gMzMyOlx0fVxuIDMzMzpcdEVYUE9SVF9TWU1CT0xfR1BMKG9mX3BoeV9wYWNrYWdlX2pvaW4pO1xuIDMzNDpcdFxuIDMzNTpcdC8qKlxuIDMzNjpcdCAqIHBoeV9wYWNrYWdlX2xlYXZlIC0gbGVhdmUgYSBjb21tb24gUEhZIGdyb3VwXG4gMzM3Olx0ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDI5CgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDEzNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBQYXRoIEFuYWx5c2lzOiBZVDg4MjQgUEhZIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY29kZSBhZGRlZCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIGlzLCBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzLCAqdW5yZWFjaGFibGUqIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cCB0YXJnZXRpbmcgYW1kNjQgd2l0aCBRRU1VLiAgSGVyZSYjMzk7cyB0aGUgcmVhc29uaW5nOgoKRmlyc3QsIGBvZl9waHlfcGFja2FnZV9qb2luYCBpcyBhIGhhcmQgZGVwZW5kZW5jeS4gSXQgbWFuZGF0ZXMgdGhlIGV4aXN0ZW5jZSBvZiBhbiBgZXRoZXJuZXQtcGh5LXBhY2thZ2VgIERldmljZVRyZWUgbm9kZS4gVGhlIFlUODgyNCBwcm9iZSBmdW5jdGlvbiwgYHl0ODgyNF9wcm9iZWAsIGNhbGxzIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gLCBhbmQgKmNhbm5vdCogZXZlbiBpbml0aWFsaXplIHdpdGhvdXQgdGhhdCBub2RlLiBPbiBhbWQ2NCwgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggRGV2aWNlVHJlZSBieSBkZWZhdWx0LCBzbyB3ZSYjMzk7cmUgaW1tZWRpYXRlbHkgYmxvY2tlZC4gIFRoZSB0YXJnZXQgaXMgYW1kNjQuICBCb29tLCBubyBEVCwgbm8gcHJvYmUuCgpTZWNvbmQsIHRoZSBZVDg4MjQgaXMgKnBoeXNpY2FsKiBoYXJkd2FyZS4gSXQmIzM5O3MgYSBkaXNjcmV0ZSBQSFkgY2hpcCwgYSBxdWFkIDIuNUcgcGFja2FnZS4gSXQgcmVxdWlyZXMgYW4gTURJTyBidXMgYW5kIGEgc3BlY2lmaWMgUEhZIElEICgweDRmNTFlOGI4KS4gU3RhbmRhcmQgUUVNVSwgb24gYW1kNjQsIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhhdCBraW5kIG9mIGhhcmR3YXJlLiBFdmVuIGlmIHdlIGhhZCAqc29tZSogTURJTyBidXMsIHRoZXJlJiMzOTtzIG5vIHdheSB0aGUgWVQ4ODI0IFBIWSBpcyBnb2luZyB0byBiZSBwcmVzZW50IG9yIHZpc2libGUuCgpUaGlyZCwgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoZSBwb2ludCBhYm91dCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAsIHdoaWNoIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzLiAgQSBxdWljayBjb2RlIHNlYXJjaCBzaG93cyB0aGF0ICpvbmx5KiB0aGUgWVQ4ODI0IGRyaXZlciBjYWxscyB0aGF0IGZ1bmN0aW9uLiAgSXQmIzM5O3MgZW50aXJlbHkgd2l0aGluIHRoZSBNb3RvcmNvbW0gUEhZIGRyaXZlciBjb250ZXh0LiBObyBvdGhlciBuZXR3b3JrIHN1YnN5c3RlbSBjb2RlLCBubyBvdGhlciBkcml2ZXJzLCBub3RoaW5nLiAgSXQmIzM5O3MgZWZmZWN0aXZlbHkgYSBwcml2YXRlIGhlbHBlciBmdW5jdGlvbi4KClRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgZmlybWx5IGFuZCBkZWZpbml0aXZlbHkgY2F1Z2h0IGluIHRoZSAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGNhdGVnb3J5IGRlZmluZWQgaW4gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCBhbmQgaXQgcmVxdWlyZXMgYm90aCBoYXJkd2FyZSBwcmVzZW5jZSBhbmQgc3BlY2lmaWMgRGV2aWNlVHJlZSBjb25maWd1cmF0aW9uLiAgSXQmIzM5O3MgYSBjbGVhciBjYXNlIG9mIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGZ1enppbmcgc3lzdGVtIGlzIHNldCB1cCB0byB0YXJnZXQgYW1kNjQgd2l0aCBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBhbmQgd2UgZG8gbm90IGhhdmUgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgaW5mb3JtYXRpb24uClRoZSByZWxldmFudCBgUmVhc29uaW5nYCBmb3IgdGhlIHJlc3VsdHMgd291bGQgYmU6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSBwYWNrYWdlKSBpbiBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYCwgZGV2aWNldHJlZSBiaW5kaW5ncywgYW5kIGEgZ2VuZXJpYyBoZWxwZXIgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoKWAgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNgIHdoaWNoIGlzIHNvbGVseSBjYWxsZWQgYnkgdGhlIFlUODgyNCBkcml2ZXIuIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgb24gYW4gTURJTyBidXMgd2l0aCBtYXRjaGluZyBQSFkgSUQgKDB4NGY1MWU4YjgpLCBhcyB3ZWxsIGFzIE9wZW4gRmlybXdhcmUgKERldmljZSBUcmVlKSBiaW5kaW5ncyAoYGV0aGVybmV0LXBoeS1wYWNrYWdlYCksIG5vbmUgb2Ygd2hpY2ggZXhpc3Qgb3IgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCkuIEFzIHN1Y2gsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLCBEVCBiaW5kaW5ncywgYW5kIGEgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gcGh5LWM0NS5jIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBieSB0aGUgWVQ4ODI0IGRyaXZlci4gVGhlIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgKFBIWSBJRCAweDRmNTFlOGI4KSBvbiBhbiBNRElPIGJ1cyBhbmQgcmVxdWlyZXMgRGV2aWNlIFRyZWUgZXRoZXJuZXQtcGh5LXBhY2thZ2UgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9hbWQ2NCB2aXJ0dWFsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIGFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLCBEVCBiaW5kaW5ncywgYW5kIGEgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gcGh5LWM0NS5jIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBieSB0aGUgWVQ4ODI0IGRyaXZlci4gVGhlIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgKFBIWSBJRCAweDRmNTFlOGI4KSBvbiBhbiBNRElPIGJ1cyBhbmQgcmVxdWlyZXMgRGV2aWNlIFRyZWUgZXRoZXJuZXQtcGh5LXBhY2thZ2UgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9hbWQ2NCB2aXJ0dWFsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIGFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA3OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzowMS4wNTMwODgwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzAzMDM2NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgKGEgcXVhZC1wb3J0IDIuNUdicHMgUEhZKSBpbiBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMsIERUIGJpbmRpbmdzLCBhbmQgYSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpbiBwaHktYzQ1LmMgd2hpY2ggaXMgb25seSBpbnZva2VkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLiBUaGUgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBoYXJkd2FyZSAoUEhZIElEIDB4NGY1MWU4YjgpIG9uIGFuIE1ESU8gYnVzIGFuZCByZXF1aXJlcyBEZXZpY2UgVHJlZSBldGhlcm5ldC1waHktcGFja2FnZSBjb25maWd1cmF0aW9uLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgb3IgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL2FtZDY0IHZpcnR1YWwgZnV6emluZyBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgYWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6MDEuMDUzMDkyNjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTUyMjQ3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZDdlMjVhYmFmZjY1MjdjNDRmNmI2OTY4NzFkM2E3NDdlZDlmZDIxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDA3OjUyOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkzZTlmNzY1NDA0YTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcXG5AQCAtMCwwICsxLDU5IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxcbislWUFNTCAxLjJcXG4rLS0tXFxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogTW90b3JDb21tIFlUODgyNCBFdGhlcm5ldCBQSFlcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gS3lsZSBTd2l0Y2ggXFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXFx1MDAzZVxcbitcXG4rZGVzY3JpcHRpb246XFxuKyAgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgaXMgYSBQSFkgcGFja2FnZSBvZiA0IFBIWXMuXFxuK1xcbiskcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgZW51bTpcXG4rICAgICAgLSBtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbisgIC0gcGh5LW1vZGVcXG4rICAtIHJlZ1xcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICBtZGlvIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XFxuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjOVxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwaHktbW9kZSA9IFxcXCJpbnRlcm5hbFxcXCI7XFxuK1xcbisgICAgICAgICAgICBldGhlcm5ldC1waHlANCB7XFxuKyAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjNFxcdTAwM2U7XFxuKyAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICBldGhlcm5ldC1waHlANSB7XFxuKyAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjNVxcdTAwM2U7XFxuKyAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICBldGhlcm5ldC1waHlANiB7XFxuKyAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjNlxcdTAwM2U7XFxuKyAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICBldGhlcm5ldC1waHlANyB7XFxuKyAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjN1xcdTAwM2U7XFxuKyAgICAgICAgICAgIH07XFxuKyAgICAgICAgfTtcXG4rICAgIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li4xZGQ4MGUwNmUyMzcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5AQCAtMzYxLDkgKzM2MSwxMCBAQCBjb25maWcgTUlDUk9TRU1JX1BIWVxcbiBcXG4gY29uZmlnIE1PVE9SQ09NTV9QSFlcXG4gXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBQSFlzXFxcIlxcbitcXHRzZWxlY3QgUEhZX1BBQ0tBR0VcXG4gXFx0aGVscFxcbiBcXHQgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy5cXG4tXFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcy5cXG4rXFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS5cXG4gXFxuIGNvbmZpZyBOQVRJT05BTF9QSFlcXG4gXFx0dHJpc3RhdGUgXFxcIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEhZc1xcXCJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXFxuaW5kZXggOTBhNGY4NmYyNzU4Yi4uN2Y5NDlhYjUzYjU0NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5AQCAtMSwyNCArMSwyOSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4gLypcXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxcbisgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cXG4gICpcXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFxcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXFx1MDAzZVxcbiAgKiBBdXRob3I6IEZyYW5rIFxcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuKyAqIEF1dGhvcjogS3lsZSBcXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcInBoeWxpYi5oXFxcIlxcbitcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTExXFx0XFx0MHgwMDAwMDEwYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjFcXHRcXHQweDAwMDAwMTFhXFxuICNkZWZpbmUgUEhZX0lEX1lUODUyMlxcdFxcdDB4NGY1MWU5MjhcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxXFx0XFx0MHg0ZjUxZTkxYlxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTXFx0XFx0MHg0ZjUxZTkxYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjFcXHRcXHQweDRmNTFlYTE5XFxuKyNkZWZpbmUgUEhZX0lEX1lUODgyNFxcdFxcdDB4NGY1MWU4YjhcXG4gLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XFxuICAqXFx0VVRQIFJlZ2lzdGVyIHNwYWNlXFx0fFxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5AQCAtMzAsNiArMzUsMTggQEBcXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgKi9cXG4gXFxuKy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xcbisgKlxcdFVUUCBSZWdpc3RlciBzcGFjZVxcdHxcXHRVU1hHTUlJIFJlZ2lzdGVyIHNwYWNlXFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogfFxcdFVUUCBNSUlcXHRcXHRcXHR8XFx0VVNYR01JSSBNSUlcXHQgICAgICAgIHxcXG4rICogfFxcdFVUUCBNTURcXHRcXHRcXHR8XFx0XFx0XFx0XFx0fFxcbisgKiB8XFx0VVRQIEV4dGVuZGVkXFx0XFx0fFxcdFVTWEdNSUkgRXh0ZW5kZWRcXHR8XFxuKyAqIHxcXHRVVFAgVG9wIEV4dGVuZGVkXFx0fFxcdFVTWEdNSUkgVG9wIEV4dGVuZGVkXFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqIHxcXHRcXHRcXHRDb21tb24gVG9wIEV4dGVuZGVkXFx0XFx0XFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqL1xcbitcXG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cXG4gXFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cXG5AQCAtMzgxLDYgKzM5OCwxNSBAQFxcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcXHQwXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9GT1JDRV9CWDI1MDBcXHRcXHQxXFxuIFxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFXFx0XFx0KDB4MSlcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcXHRcXHRcXHQoMHgwKVxcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMVxcdFxcdDB4MVxcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUxcXHRcXHQweDBcXG4rI2RlZmluZSBZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0tcXHRcXHRHRU5NQVNLKDMsIDApXFxuKyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRVxcdFxcdFxcdEJJVCgxMylcXG4rI2RlZmluZSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HXFx0XFx0KDB4NylcXG4rXFxuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XFxuIFxcdC8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsXFxuIFxcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xcbkBAIC0zOTksNiArNDI1LDEyIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XFxuIFxcdHU4IHJlZ19wYWdlO1xcbiB9O1xcbiBcXG4rc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7XFxuK1xcdHVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTtcXG4rXFx0Lyogc2hhcmVkX2xvY2sgdXNlZCB0byBVVFBzIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovXFxuK1xcdHN0cnVjdCBtdXRleCBzaGFyZWRfbG9jaztcXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXFxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbkBAIC00MzcsNiArNDY5LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcXG4rICpcXG4rICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlXFxuKyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxcbitcXHRcXHRcXHQgICAgICAgdTE2IHZhbClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xcbit9XFxuK1xcbisvKipcXG4rICogcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jaygpIC0gd3JpdGUgcGFnZSBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRyZXQgXFx1MDAyNj0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7XFxuK1xcdHJldCB8PSAocGFnZSBcXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpO1xcbitcXG4rZXJyOlxcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuQEAgLTYyNiwxMSArNzIyLDEwNTggQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcXG4gXFx0XFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXFxuIFxcdFxcdFxcdFxcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9cXG4rICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBvbGRfcGFnZTtcXG4rXFxuK1xcdHJldHVybiBvbGRfcGFnZSBcXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XFxuK307XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogUmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXHR1MTYgZGF0YTtcXG4rXFxuK1xcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIG9sZF9wYWdlO1xcbitcXHRkYXRhID0gb2xkX3BhZ2UgXFx1MDAyNiAofllUODgyNF9SU1NSX1NQQUNFX01BU0spO1xcbitcXHRkYXRhIHw9IHBhZ2U7XFxuK1xcbitcXHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XFxuK307XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqL1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xcbitcXHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxcbisgKiBhbmQgc2RzIHNvZnRyZXNldC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcdGludCByZXQgPSAtMTtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHNkcyBzb2Z0cmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0ZSAqL1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcXG4rXFx0XFx0XFx0ICAgQk1DUl9SRVNFVCBcXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXFxuK1xcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcXHUwMDNjIDApIHx8XFxuK1xcdFxcdFxcdFxcdCEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdDUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gdmFsO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cygpIC0gY2FsbGVkIHRvIGRvIHN0b3JlIHdvcmtpbmcgc3RhdHVzXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmV0OiBvcGVyYXRpb24ncyByZXR1cm4gY29kZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJldClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHI7XFxuK1xcbitcXHQvKiBjb25maWd1cmUgbm9ybWFsIHRlc3QgbW9kZSAqL1xcbitcXHRyID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0ciA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0ID0gcjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiB1dHAgc29mdCByZXNldCAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rcmV0cnk6XFxuK1xcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcdGludCByO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiBwb3dlciBkb3duICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogcGxsIGNhbGlicmF0aW9uICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBlbmFibGUgbmliYmxlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzU5LCAweDIxNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogMi41RyB0ZW1wbGF0ZSB0b25lICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZjLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgRU1DIENTICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdhLCAweDQwZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBFTUMgUkUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0LyogcmVzZXQgKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcXG4rXFx0XFx0XFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX3Jlc3RvcmU6XFxuK1xcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldHVybiByZXQ7XFxuK1xcbitlcnJfcmVzdG9yZV9ub3JtYWw6XFxuK1xcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcXG4rXFx0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcXG4rXFx0aW50IHJldCA9IC0xO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogcmVhZCBlZnVzZSAqL1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZhbF8xID0gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2YWxfMiA9IHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsXzMgPSByZXQ7XFxuK1xcbitcXHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGFuYWxvZyBDRFIgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIFZDTyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSkgXFx1MDAzZVxcdTAwM2UgNjtcXG4rXFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xcbitcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXFx1MDAzZVxcdTAwM2UgNDtcXG4rXFx0cmV0IHw9IHRtcDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHR0bXAgPSAodmFsXzMgXFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDEyKTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIFNlcmRlcyBMRE8gKi9cXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcXG4rXFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpIFxcdTAwM2VcXHUwMDNlIDI7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDQpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcXG4rXFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFxcdTAwM2VcXHUwMDNlIDU7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcXHUwMDNlIDggKi9cXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLO1xcbitcXHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcXG4rXFx0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiByZXNldCBzZXJkZXMgKi9cXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxcbitcXHRcXHRcXHQgICBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgX19waHlfcmVhZCB0YWtlcyBubyBsb2NrICovXFxuK1xcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcXHUwMDNjIDApIHx8XFxuK1xcdFxcdFxcdFxcdCEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdDUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gdmFsO1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFx0aW50IHIgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMi41RyB0ZW1wYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIDEwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAgdGVtcGF0ZSBNQVUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiBFTUMgQ1MsIEluY29uc2lzdGVudCB3aXRoIGV4dGVybmFsIHBoeSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiBFTUMgUkUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcdC8qIHJlc2V0ICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXFxuK1xcdFxcdFxcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcmVzdG9yZTpcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rXFxuK2Vycl9yZXN0b3JlX25vcm1hbDpcXG4rXFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pblxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpO1xcbiBcXG4tZXJyX3Jlc3RvcmVfcGFnZTpcXG4tXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHJldHVybiByZXQ7XFxuK2VycjpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5AQCAtMzEwNCw2ICs0MjQ3LDQyOSBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7XFxuK1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCBsaW5rID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRsaW5rID0gISEocmV0IFxcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xcbitcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciwgbGluayk7XFxuK1xcdHJldHVybiBsaW5rO1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBsaW5rID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3JlYWRfc3RhdHVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZ19jb21wbGV0ZSkge1xcbitcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbHBhKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHZhbCA9IHJldDtcXG4rXFxuK1xcdGxpbmsgPSB2YWwgXFx1MDAyNiBZVFBIWV9TU1JfTElOSztcXG4rXFx0aWYgKGxpbmspXFxuK1xcdFxcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcXG4rXFxuK1xcdGlmIChsaW5rKSB7XFxuK1xcdFxcdGlmIChwaHlkZXYtXFx1MDAzZWxpbmsgPT0gMClcXG4rXFx0XFx0XFx0cGh5ZGV2X2RiZyhwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIHVwXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAxO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VsaW5rID09IDEpXFxuK1xcdFxcdFxcdHBoeWRldl9kYmcocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwiJXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHR9XFxuK1xcdHBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXhcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbityZXRyeTpcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxcbitcXHQgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0ciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcdGludCByO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgZG93biAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rcmV0cnk6XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxcbitcXHQgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfY29uZmlnX2FuZWcoKSAtIGNvbmZpZyBuZWdvdGlhdGlvblxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcGh5X2N0cmwgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxcbitcXHRcXHRcXHRcXHQgICAgIHBoeV9jdHJsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0cmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2FnZSBmb3IgcGh5ODgyNC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcXG4rXFx0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcXG4rXFxuK1xcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbitcXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcXFwicGh5LW1vZGVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xcbitcXHRcXHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcXG4rXFx0XFx0XFx0XFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTtcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcFxcbitcXHRcXHRcXHRcXHQoaW50ZXJmYWNlX21vZGVfbmFtZSxcXG4rXFx0XFx0XFx0XFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiJXMsIHBoeS1tb2RlIG1pc3NpbmcgaW4gRFRTLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIF9fZnVuY19fKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxcbkBAIC0zMTkwLDEzICs0NzU2LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4gXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyMV9zdXNwZW5kLFxcbiBcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjFfcmVzdW1lLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XFxcIixcXG4rXFx0XFx0LmdldF9mZWF0dXJlc1xcdFxcdD0geXQ4ODI0X2dldF9mZWF0dXJlcyxcXG4rXFx0XFx0LnJlYWRfcGFnZVxcdFxcdD0geXQ4ODI0X3JlYWRfcGFnZSxcXG4rXFx0XFx0LndyaXRlX3BhZ2VcXHRcXHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxcbitcXHRcXHQucHJvYmVcXHRcXHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxcbitcXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcXG4rXFx0XFx0LmFuZWdfZG9uZVxcdFxcdD0geXQ4ODI0X2FuZWdfZG9uZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5yZWFkX3N0YXR1c1xcdFxcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxcbitcXHRcXHQuc29mdF9yZXNldFxcdFxcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXFxuK1xcdFxcdC5zdXNwZW5kXFx0XFx0PSB5dDg4MjRfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0geXQ4ODI0X3Jlc3VtZSxcXG4rXFx0fSxcXG4gfTtcXG4gXFxuIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7XFxuIFxcbi1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXJcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiUGV0ZXIgR2Vpc1xcXCIpO1xcbiBNT0RVTEVfQVVUSE9SKFxcXCJGcmFua1xcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJLeWxlXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xcbkBAIC0zMjA2LDYgKzQ3ODgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSxcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXFxuK1xcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sXFxuIFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5pbmRleCA4NzA5MjAzMTFmOWEwLi41MjhlM2Y0MTQzMTEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuQEAgLTE0MDgsNiArMTQwOCw2MSBAQCBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xcbiBcXG4rLyoqXFxuKyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcXG4rICpcXG4rICogRGVzY3JpcHRpb246IFNldCB0ZW1wbGF0ZSB0ZXN0bW9kZSBpbmNsdWRlIE5vcm1hbCB0byBUZXN0IG1vZGUgN1xcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXJcXG4rICpcXHRyZWFkL3dyaXRlIGVycm9yKS5cXG4rICovXFxuK2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXFxuK3tcXG4rXFx0aW50IGN0cmwgPSAwO1xcbitcXG4rXFx0c3dpdGNoICh0ZXN0X21vZGUpIHtcXG4rXFx0Y2FzZSAwOlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIDM6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSA1OlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIDY6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82O1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgNzpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzc7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSxcXG4rXFx0XFx0XFx0ICAgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSywgY3RybCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XFxuK1xcbiAvKipcXG4gICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzXFxuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDNkOGFmZTZiN2YxYzUuLmZiODI3Y2MzYzk4ZjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjM1Nyw2ICsyMzU3LDcgQEAgaW50IGdlbnBoeV9jNDVfbG9vcGJhY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsIGludCBzcGVlZCk7XFxuIGludCBnZW5waHlfYzQ1X3BtYV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xcbitpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTtcXG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGh5X3BsY2FfY2ZnICpwbGNhX2NmZyk7XFxuIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxcbmluZGV4IDA2ZjRiYzNjMjBjNzEuLjg1NzZhNDg4NzdjNmQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5AQCAtNjMsNiArNjMsNyBAQFxcbiAvKiBNZWRpYS1kZXBlbmRlbnQgcmVnaXN0ZXJzLiAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcXHQxMzBcXHQvKiAxMEdCQVNFLVQgcGFpciBzd2FwIFxcdTAwMjYgcG9sYXJpdHkgKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUlxcdDEzMVxcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREUgMTMyXFx0LyogVGVzdCBtb2RlIGNvbnRyb2wgKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlJcXHQxMzNcXHQvKiAxMEdCQVNFLVQgU05SIG1hcmdpbiwgbGFuZSBBLlxcbiBcXHRcXHRcXHRcXHRcXHQgKiBMYW5lcyBCLUQgYXJlIG51bWJlcmVkIDEzNC0xMzYuICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1JcXHQxNDdcXHQvKiAxMEdCQVNFLVIgZmFzdCByZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCAqL1xcbkBAIC0zMjAsNiArMzIxLDE3IEBAXFxuIC8qIFBNQSAxMEdCQVNFLVIgRmFzdCBSZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3Rlci4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRVxcdDB4MDAwMVxcdC8qIEZhc3QgcmV0cmFpbiBlbmFibGUgKi9cXG4gXFxuKy8qIFBNQSAxMEdCQVNFLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLIDB4RTAwMFxcdC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCAweDAwMDBcXHQvKiBUZW1wbGF0ZSBOb3JtYWwgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xIDB4MjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTEgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4NDAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zIDB4NjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTMgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80IDB4ODAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTQgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4YTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82IDB4YzAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTYgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83IDB4ZTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTcgKi9cXG4rXFxuIC8qIFBDUyAxMEdCQVNFLVIvLVQgc3RhdHVzIHJlZ2lzdGVyIDEuICovXFxuICNkZWZpbmUgTURJT19QQ1NfMTBHQlJUX1NUQVQxX0JMS0xLXFx0MHgwMDAxXFx0LyogQmxvY2sgbG9jayBhdHRhaW5lZCAqL1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6MDIuNjQ5MDU1Njk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjEwNzAzOTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgKGEgcXVhZC1wb3J0IDIuNUdicHMgUEhZKSBpbiBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMsIERUIGJpbmRpbmdzLCBhbmQgYSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpbiBwaHktYzQ1LmMgd2hpY2ggaXMgb25seSBpbnZva2VkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLiBUaGUgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBoYXJkd2FyZSAoUEhZIElEIDB4NGY1MWU4YjgpIG9uIGFuIE1ESU8gYnVzIGFuZCByZXF1aXJlcyBEZXZpY2UgVHJlZSBldGhlcm5ldC1waHktcGFja2FnZSBjb25maWd1cmF0aW9uLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgb3IgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL2FtZDY0IHZpcnR1YWwgZnV6emluZyBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgYWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZDdlMjVhYmFmZjY1MjdjNDRmNmI2OTY4NzFkM2E3NDdlZDlmZDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDc6NTI6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTNlOWY3NjU0MDRhM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcbkBAIC0wLDAgKzEsNTkgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEt5bGUgU3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cbitcbiskcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0gbW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gcGh5LW1vZGVcbisgIC0gcmVnXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2M5XHUwMDNlO1xuK1xuKyAgICAgICAgICAgIHBoeS1tb2RlID0gXCJpbnRlcm5hbFwiO1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA1IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNVx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNlx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjN1x1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li4xZGQ4MGUwNmUyMzcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtMzYxLDkgKzM2MSwxMCBAQCBjb25maWcgTUlDUk9TRU1JX1BIWVxuIFxuIGNvbmZpZyBNT1RPUkNPTU1fUEhZXG4gXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBQSFlzXCJcbitcdHNlbGVjdCBQSFlfUEFDS0FHRVxuIFx0aGVscFxuIFx0ICBFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuXG4tXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxuK1x0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS5cbiBcbiBjb25maWcgTkFUSU9OQUxfUEhZXG4gXHR0cmlzdGF0ZSBcIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEhZc1wiXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCA5MGE0Zjg2ZjI3NThiLi43Zjk0OWFiNTNiNTQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDI0ICsxLDI5IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXG4gLypcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4rICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuXG4gICpcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4rICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcInBoeWxpYi5oXCJcbitcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcdFx0MHgwMDAwMDEwYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVx0XHQweDAwMDAwMTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXHRcdDB4NGY1MWU5MjhcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcdFx0MHg0ZjUxZTkxYlxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcdFx0MHg0ZjUxZTkxYVxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG4rI2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0zMCw2ICszNSwxOCBAQFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgKi9cbiBcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcbisgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRVU1hHTUlJIFJlZ2lzdGVyIHNwYWNlXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRVU1hHTUlJIE1JSVx0ICAgICAgICB8XG4rICogfFx0VVRQIE1NRFx0XHRcdHxcdFx0XHRcdHxcbisgKiB8XHRVVFAgRXh0ZW5kZWRcdFx0fFx0VVNYR01JSSBFeHRlbmRlZFx0fFxuKyAqIHxcdFVUUCBUb3AgRXh0ZW5kZWRcdHxcdFVTWEdNSUkgVG9wIEV4dGVuZGVkXHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHxcdFx0XHRDb21tb24gVG9wIEV4dGVuZGVkXHRcdFx0fFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKi9cbitcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xuIFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cbkBAIC0zODEsNiArMzk4LDE1IEBAXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXHQwXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFx0XHQxXG4gXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFXHRcdCgweDEpXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcdFx0XHQoMHgwKVxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdDB4MVxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTFx0XHQweDBcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXHRcdFx0QklUKDEzKVxuKyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1x0XHQoMHg3KVxuK1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzk5LDYgKzQyNSwxMiBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0dTggcmVnX3BhZ2U7XG4gfTtcbiBcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcbitcdHVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTtcbitcdC8qIHNoYXJlZF9sb2NrIHVzZWQgdG8gVVRQcyBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqL1xuK1x0c3RydWN0IG11dGV4IHNoYXJlZF9sb2NrO1xuK307XG4rXG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNDM3LDYgKzQ2OSw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXG4rICpcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcbit9XG4rXG4rLyoqXG4rICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlXG4rICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbitcdFx0XHQgICAgICAgdTE2IHZhbClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSwgdmFsKTtcbit9XG4rXG4rLyoqXG4rICogcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jaygpIC0gd3JpdGUgcGFnZSBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyO1xuK1x0cmV0IFx1MDAyNj0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4rXHRyZXQgfD0gKHBhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTtcbitcbitlcnI6XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKipcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTYyNiwxMSArNzIyLDEwNTggQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbiBcdFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXG4gXHRcdFx0XHQgICBZVFBIWV9JRVJfV09MLCAwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZF9wYWdlO1xuK1xuK1x0cmV0dXJuIG9sZF9wYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuK307XG4rXG4rLyoqXG4rICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcGFnZTogUmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHR1MTYgZGF0YTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZF9wYWdlO1xuK1x0ZGF0YSA9IG9sZF9wYWdlIFx1MDAyNiAofllUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuK1x0ZGF0YSB8PSBwYWdlO1xuK1xuK1x0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xuK307XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4rXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqL1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSwgQk1DUl9JU09MQVRFKTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXHRpbnQgdmFsO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VULCBCTUNSX1JFU0VUKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xuK1x0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxuKyAqIGFuZCBzZHMgc29mdHJlc2V0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuK1x0aW50IHZhbCA9IDA7XG4rXHRpbnQgcmV0ID0gLTE7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9JU09MQVRFLFxuK1x0XHRcdCAgIEJNQ1JfUkVTRVQgXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsICh2YWwgXHUwMDNjIDApIHx8XG4rXHRcdFx0XHQhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQ1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldCA9IHZhbDtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cygpIC0gY2FsbGVkIHRvIGRvIHN0b3JlIHdvcmtpbmcgc3RhdHVzXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmV0OiBvcGVyYXRpb24ncyByZXR1cm4gY29kZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHI7XG4rXG4rXHQvKiBjb25maWd1cmUgbm9ybWFsIHRlc3QgbW9kZSAqL1xuK1x0ciA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSAhPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHIgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0XHRyZXQgPSByO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldHVybiByZXQ7XG4rcmV0cnk6XG4rXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1x0aW50IHI7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBwb3dlciBkb3duICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIHBsbCBjYWxpYnJhdGlvbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBlbmFibGUgbmliYmxlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDAwMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBjLCAweGMxYTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmIsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgRU1DIENTICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGM4LCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0LyogcmVzZXQgKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4rXHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcbitcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcdHJldHVybiAwO1xuK1xuK2Vycl9yZXN0b3JlOlxuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rXG4rZXJyX3Jlc3RvcmVfbm9ybWFsOlxuK1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuK1x0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbitcdGludCB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4rXHRpbnQgcmV0ID0gLTE7XG4rXHRpbnQgdmFsO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogcmVhZCBlZnVzZSAqL1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGVsc2VcbitcdFx0dmFsXzEgPSByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2YpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZWxzZVxuK1x0XHR2YWxfMiA9IHJldDtcbitcbitcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8zID0gcmV0O1xuK1xuK1x0LyogU2VyZGVzIG9wdGltaXphdGlvbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogYW5hbG9nIENEUiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0Lyogb3B0aW1pemVkIFZDTyAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM4LCAweDkwMjQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM5LCAweDAwYzApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0Lyogb3B0aW1pemVkIFBMTCBsb2NrICovXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbitcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkpIFx1MDAzZVx1MDAzZSA2O1xuK1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyOSwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDQxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCBcdTAwMjY9IH4oQklUKDEpIHwgQklUKDApKTtcbitcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkpIFx1MDAzZVx1MDAzZSA0O1xuK1x0cmV0IHw9IHRtcDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDJiKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0dG1wID0gKHZhbF8zIFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XG4rXHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIFNlcmRlcyBMRE8gKi9cbitcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCBcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcbitcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpIFx1MDAzZVx1MDAzZSAyO1xuK1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDQpO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbitcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFx1MDAzZVx1MDAzZSA1O1xuK1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDgpO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzIFx1MDAzZSA4ICovXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCBcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XG4rXHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcbitcdHJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiByZXNldCBzZXJkZXMgKi9cbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbitcdFx0XHQgICBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiBwb2xsIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2s7IF9fcGh5X3JlYWQgdGFrZXMgbm8gbG9jayAqL1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsIFx1MDAzYyAwKSB8fFxuK1x0XHRcdFx0ISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuK1x0XHRcdFx0NTAwMDAsIDYwMDAwMCwgdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSB2YWw7XG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0XG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXHRpbnQgdmFsID0gMDtcbitcdGludCByID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDEsIDB4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogcG93ZXIgZG93biAqL1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweGNiYSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4YTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzODgsIDB4YTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAyLjVHIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAwMCBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyYywgMHg1MDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyMiwgMHg2NDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwMCB0ZW1wYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMwYiwgMHhhYTFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YiwgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAgdGVtcGF0ZSBNQVUqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY2LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY5LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiBFTUMgUkUqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjLCAweDQxYTEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0LyogcmVzZXQgKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4rXHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcbitcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9yZXN0b3JlOlxuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rXG4rZXJyX3Jlc3RvcmVfbm9ybWFsOlxuK1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuK1x0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbiBcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXG5cIixcbitcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0cmV0dXJuIHJldDtcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5AQCAtMzEwNCw2ICs0MjQ3LDQyOSBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuKy8qKlxuKyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5XG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRsaW5rID0gISEocmV0IFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XG4rXG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXG5cIixcbitcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuK1x0cmV0dXJuIGxpbms7XG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbitcdFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX2xwYShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHZhbCA9IHJldDtcbitcbitcdGxpbmsgPSB2YWwgXHUwMDI2IFlUUEhZX1NTUl9MSU5LO1xuK1x0aWYgKGxpbmspXG4rXHRcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcbitcbitcdGlmIChsaW5rKSB7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAwKVxuK1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuK1x0XHRcdFx0ICAgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIHVwXFxuXCIsXG4rXHRcdFx0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAxKVxuK1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuK1x0XHRcdFx0ICAgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIGRvd25cXG5cIixcbitcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuK1x0fVxuK1x0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1x0aW50IHI7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK3JldHJ5OlxuK1x0LypcbitcdCAqIElmIHRoZSBQSFkgdXAgb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25cbitcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4rXHQgKi9cbitcdHIgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Jlc3VtZSgpIC0gcmVzdW1lIHRoZSBoYXJkd2FyZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcdGludCByO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK3JldHJ5OlxuK1x0LypcbitcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuK1x0ICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS5cbitcdCAqL1xuK1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcGh5X2N0cmwgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuK1xuK1x0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4rXHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuK1x0XHRcdFx0ICAgICBwaHlfY3RybCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdHJldCA9IF9fZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldiwgcmV0KTtcbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2thZ2UgZm9yIHBoeTg4MjQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xuK1x0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcbitcbitcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcInBoeS1tb2RlXCIsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmludGVyZmFjZV9tb2RlX25hbWUpKSB7XG4rXHRcdGlmICghc3RyY2FzZWNtcChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuK1x0XHRcdFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHtcbitcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXBcbitcdFx0XHRcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuK1x0XHRcdFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xuK1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCIlcywgcGh5LW1vZGUgbWlzc2luZyBpbiBEVFMuXFxuXCIsXG4rXHRcdFx0ICAgIF9fZnVuY19fKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHBoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KSkge1xuK1x0XHRyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuIFx0e1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG5AQCAtMzE5MCwxMyArNDc1NiwyOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODIxX3N1c3BlbmQsXG4gXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyMV9yZXN1bWUsXG4gXHR9LFxuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXG4rXHRcdC5uYW1lXHRcdFx0PSBcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcIixcbitcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHl0ODgyNF9nZXRfZmVhdHVyZXMsXG4rXHRcdC5yZWFkX3BhZ2VcdFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxuK1x0XHQucHJvYmVcdFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcbitcdFx0LmNvbmZpZ19hbmVnXHRcdD0geXQ4ODI0X2NvbmZpZ19hbmVnLFxuK1x0XHQuYW5lZ19kb25lXHRcdD0geXQ4ODI0X2FuZWdfZG9uZSxcbitcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxuK1x0XHQucmVhZF9zdGF0dXNcdFx0PSB5dDg4MjRfcmVhZF9zdGF0dXMsXG4rXHRcdC5zb2Z0X3Jlc2V0XHRcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXG4rXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODI0X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyNF9yZXN1bWUsXG4rXHR9LFxuIH07XG4gXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcbiBcbi1NT0RVTEVfREVTQ1JJUFRJT04oXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclwiKTtcbiBNT0RVTEVfQVVUSE9SKFwiUGV0ZXIgR2Vpc1wiKTtcbiBNT0RVTEVfQVVUSE9SKFwiRnJhbmtcIik7XG4rTU9EVUxFX0FVVEhPUihcIkt5bGVcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG5AQCAtMzIwNiw2ICs0Nzg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxuK1x0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcbiBcdHsgLyogc2VudGluZWwgKi8gfVxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbmluZGV4IDg3MDkyMDMxMWY5YTAuLjUyOGUzZjQxNDMxMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5AQCAtMTQwOCw2ICsxNDA4LDYxIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xuIFxuKy8qKlxuKyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XG4rICpcbisgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXJcbisgKlx0cmVhZC93cml0ZSBlcnJvcikuXG4rICovXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcbit7XG4rXHRpbnQgY3RybCA9IDA7XG4rXG4rXHRzd2l0Y2ggKHRlc3RfbW9kZSkge1xuK1x0Y2FzZSAwOlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgMTpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzE7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSAyOlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMjtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIDM6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgNDpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSA1OlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIDY6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82O1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgNzpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzc7XG4rXHRcdGJyZWFrO1xuK1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLFxuK1x0XHRcdCAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbitcbiAvKipcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggM2Q4YWZlNmI3ZjFjNS4uZmI4MjdjYzNjOThmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzU3LDYgKzIzNTcsNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggMDZmNGJjM2MyMGM3MS4uODU3NmE0ODg3N2M2ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC02Myw2ICs2Myw3IEBAXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcdDEzMFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcdTAwMjYgcG9sYXJpdHkgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXHQxMzFcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzJcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlJcdDEzM1x0LyogMTBHQkFTRS1UIFNOUiBtYXJnaW4sIGxhbmUgQS5cbiBcdFx0XHRcdFx0ICogTGFuZXMgQi1EIGFyZSBudW1iZXJlZCAxMzQtMTM2LiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1JcdDE0N1x0LyogMTBHQkFTRS1SIGZhc3QgcmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgKi9cbkBAIC0zMjAsNiArMzIxLDE3IEBAXG4gLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9FTkFCTEVcdDB4MDAwMVx0LyogRmFzdCByZXRyYWluIGVuYWJsZSAqL1xuIFxuKy8qIFBNQSAxMEdCQVNFLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0sgMHhFMDAwXHQvKiBUZW1wbGF0ZSB0ZXN0IG1vZGUgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCAweDAwMDBcdC8qIFRlbXBsYXRlIE5vcm1hbCAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDIwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4NDAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHg2MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDgwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4YTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHhjMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweGUwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovXG4rXG4gLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi9cbiAjZGVmaW5lIE1ESU9fUENTXzEwR0JSVF9TVEFUMV9CTEtMS1x0MHgwMDAxXHQvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzowMi42NDkwNTc4NzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NzQ4MDQwMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoLCB3aGljaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBZVDg4MjQgUEhZLCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBzZWU6XG5cbjEuICBEb2N1bWVudGF0aW9uIHVwZGF0ZXM6IFRoYXQncyB1c3VhbGx5IG5vdCB3aGVyZSB0aGUganVpY3kgYnVncyBhcmUsIGJ1dCBhbHdheXMgZ29vZCB0byBrbm93LlxuMi4gIEtjb25maWcgY2hhbmdlczogQWRkaW5nIGBQSFlfUEFDS0FHRWAgc2VsZWN0aW9uLCBhbmQgZGVzY3JpcHRpb24gY2hhbmdlcy4gUG90ZW50aWFsbHkgcmVsZXZhbnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBQSFlfUEFDS0FHRWAuXG4zLiAgVGhlIGNvcmUgb2YgdGhlIHBhdGNoOiBUaGUgYG1vdG9yY29tbS5jYCBkcml2ZXIgaGFzIGJlZW4gZXh0ZW5kZWQgd2l0aCBudW1lcm91cyBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IGZvciB0aGUgWVQ4ODI0IFBIWS4gVGhpcyBpbmNsdWRlcyByZWFkL3dyaXRlIGZ1bmN0aW9ucyBmb3IgcmVnaXN0ZXJzLCBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuIFRoaXMgaXMgd2hlcmUgSSdsbCBmb2N1cyBtb3N0IG9mIG15IGF0dGVudGlvbi4gVGhlIGBwaHktYzQ1LmNgIGFuZCBgcGh5LmhgIGNoYW5nZXMgbG9vayByZWxhdGVkIHRvIGEgZ2VuZXJhbCB0ZXN0IG1vZGUgY2FwYWJpbGl0eS5cbjQuICBNRElPIGRlZmluaXRpb25zOiBOZXcgZGVmaW5pdGlvbnMgaW4gYG1kaW8uaGAgZm9yIHRlc3QgbW9kZSBzZXR0aW5ncy4gVGhlc2UgYXJlIHZlcnkgaW50ZXJlc3RpbmcsIGFzIHRoZXkgZGVmaW5lIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sXG5cbk5vdyBjb21lcyB0aGUgY3J1Y2lhbCBwYXJ0OiByZWFjaGFiaWxpdHkuIElzIHRoaXMgbmV3IFBIWSBkcml2ZXIsIGFuZCB0aGUgZnVuY3Rpb25zIGl0IGFkZHMsIGFjY2Vzc2libGUgd2l0aGluIGEgU3l6a2FsbGVyLWZ1enphYmxlIGVudmlyb25tZW50PyBMZXQncyBzZWUuLi5cblxuSSBrbm93IGBtb3RvcmNvbW0uY2AgaXMgYW4gTURJTyBQSFkgZHJpdmVyLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyIHRyaWdnZXIgY29kZSBwYXRocyB3aXRoaW4gTURJTyBQSFkgZHJpdmVycz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgYW5kIGJvdW5kIHRvIHRoZSBzeXN0ZW0uIEFyZSB0aGV5IHNvbGVseSB0aWVkIHRvIHBoeXNpY2FsIE1ESU8gYnVzZXMsIG9yIGlzIHRoZXJlIGEgd2F5IHRvIGluc3RhbnRpYXRlIE1ESU8vUEhZIGRldmljZXMgdmlydHVhbGx5PyBDYW4gSSBjcmVhdGUgYW4gTURJTyBkZXZpY2UgaW4gYSB3YXkgU3l6a2FsbGVyIGNhbiBpbnRlcmFjdCB3aXRoPyBUaGlzIGlzIHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbi4gSWYgdGhleSBhcmUgYm91bmQgdG8gYSByZWFsIE1ESU8sIEkgd291bGQgbmVlZCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudC5cblxuSSBuZWVkIHRvIHNlYXJjaCB3aXRoaW4gU3l6a2FsbGVyLCBhbmQgZXZlbiB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYsIGZvciBob3cgTURJTyBkZXZpY2VzIGFyZSBjcmVhdGVkIG9yIGNvbnRyb2xsZWQuIEknbGwgc2VhcmNoIGZvciB0aGluZ3MgbGlrZSBcIm1kaW9cIiwgXCJwaHlcXF9kcml2ZXJcIiwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHVzZXJzcGFjZSBpbnRlcmZhY2VzIHRoYXQgYWxsb3cgbWUgdG8gY3JlYXRlIGFuIE1ESU8gUEhZLiBJZiBJIGNhbiBpbnN0YXRpYXRlIG9uZSB2aXJ0dWFsbHksIEkgYW0gaW4gbHVjay4gVGhhdCB3b3VsZCBvcGVuIHRoZSBkb29yIHRvIGZ1enppbmcgdGhlIFlUODgyNCBhbmQgdGhlIG90aGVyIGRyaXZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjA3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6MDkuMzk3MTAwOTc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDA2NzU1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby4qbmV3X2RldmljZXxwaHlfZGV2aWNlX2NyZWF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9MTE3PWludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMzQtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMzU6XFx0XFx0cGh5ID0gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsIDAsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMzYtXFx0aWYgKElTX0VSUihwaHkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz01NTE9c3RhdGljIHZvaWQgdGphMTEwMl9wMV9yZWdpc3RlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODUtXFx0XFx0LyogUmVhbCBQSFkgSUQgb2YgUG9ydCAxIGlzIDAgKi9cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1ODY6XFx0XFx0cGh5ID0gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBQSFlfSURfVEpBMTEwMiwgZmFsc2UsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU4Ny1cXHRcXHRpZiAoSVNfRVJSKHBoeSkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU5Mi1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1OTM6XFx0XFx0LyogT3ZlcndyaXRlIHBhcmVudCBkZXZpY2UuIHBoeV9kZXZpY2VfY3JlYXRlKCkgc2V0IHBhcmVudCB0b1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU5NC1cXHRcXHQgKiB0aGUgbWlpX2J1cy1cXHUwMDNlZGV2LCB3aGljaCBpcyBub3QgY29ycmVjdCBpbiBjYXNlLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz03Mjg9c3RhdGljIGludCBwaHlfcmVxdWVzdF9kcml2ZXJfbW9kdWxlKHN0cnVjdCBwaHlfZGV2aWNlICpkZXYsIHUzMiBwaHlfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTc0Ny1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjc0ODpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDktXFx0XFx0XFx0XFx0ICAgICBib29sIGlzX2M0NSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtODM5LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjg0MDpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfY3JlYXRlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTg0MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTA3MT1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDk2LVxcdFxcdGlmICghcilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwOTc6XFx0XFx0XFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5OC1cXHRcXHRcXHRcXHRcXHRcXHQgdHJ1ZSwgXFx1MDAyNmM0NV9pZHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTAwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwMTpcXHRyZXR1cm4gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsIGlzX2M0NSwgXFx1MDAyNmM0NV9pZHMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxNjc9aW50IHBoeV9tb2RpZnlfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsIHUzMiByZWdudW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxNjktXFxuaW5jbHVkZS9saW51eC9waHkuaDoyMTcwOnN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyIHBoeV9pZCxcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxNzEtXFx0XFx0XFx0XFx0ICAgICBib29sIGlzX2M0NSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6MTEuNTk3Nzg0ODA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjcxMDAwNjE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gUEhZIERldmljZSBQcm9iaW5nKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZCEgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsOiBIb3cgZXhhY3RseSBkbyB3ZSBwcm9iZSB0aGVzZSBQSFkgZGV2aWNlcz8gTGV0IG1lIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSdtIHRoaW5raW5nLCBhIFBIWSBkZXZpY2UgaXMgY3JlYXRlZCwgZWl0aGVyIHRocm91Z2ggdGhlIERldmljZSBUcmVlIGZ3bm9kZSAod2hpY2ggbWFrZXMgc2Vuc2UsIHByZWNvbmZpZ3VyZWQgaGFyZHdhcmUpIG9yIGR1cmluZyB0aGUgTURJTyBidXMgcmVnaXN0cmF0aW9uIHVzaW5nIGBtZGlvYnVzX3JlZ2lzdGVyYC4gUmlnaHQsIGFuZCB0aGVuIHRoZSBjcml0aWNhbCBzdGVwIGlzIHRoZSBQSFkgZHJpdmVyIGJpbmRpbmcsIHRoaXMgbGlrZWx5IGRlcGVuZHMgb24gd2hhdCdzIHJlYWQgZnJvbSB0aGUgaGFyZHdhcmUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgdGhlIGBwaHlfaWRgIHJlZ2lzdGVyLCBvciBhbHNvIGEgRGV2aWNlIFRyZWUgbWF0Y2gsIHJpZ2h0PyBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBzbyBJJ2xsIGNoZWNrIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2AgdG8gcmVtaW5kIG15c2VsZiBhYm91dCBpdHMgc3RydWN0dXJlLiBPa2F5LCBzbyBJIG5vdyB1bmRlcnN0YW5kIHRoaXMsIHdoZXJlIGlzIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBhY3R1YWxseSAqY2FsbGVkKj8gVGltZSBmb3IgYSBxdWljayBgZ3JlcGAgdG8gdHJhY2sgZG93biB0aG9zZSB1c2FnZXMuIEkgY2FuIHVzZSB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY1OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzoxNC4zMDc3OTI4ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzc3NTE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz03Nzc9c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg0LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo3ODU6XFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg2LVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9ODQxPXN0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo4NDk6XFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODUwLVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTk3OT1zdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTIzMi1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTIzMzpcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMzQtXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjQ3LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjQ4OlxcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI0OS1cXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjYwLWVycl9yZXN0b3JlX25vcm1hbDpcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTI2MTpcXHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNjItXFx0XFx0XFx0XFx0XFx0IFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTE1MjA9c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzA0LVxcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3MDU6XFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzA2LVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcxOS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTcyMDpcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MjEtXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTczMy1lcnJfcmVzdG9yZV9ub3JtYWw6XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3MzQ6XFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzM1LVxcdFxcdFxcdFxcdFxcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM9MTQwOT1FWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MTEtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxNDEyOiAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDEzLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDIwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQyMTppbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0NjMtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQ2NDpFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0NjUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIzNTk9aW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIzNjA6aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XFxuaW5jbHVkZS9saW51eC9waHkuaC0yMzYxLWludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzoxNS45NDE1NzMwODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDM0MjQyNjk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFJvYWRibG9jayoqXG5cbk9rYXksIHNvIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBvbmx5IGdldHMgY2FsbGVkIHdpdGhpbiBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgZ29hbDogY2FuIEkgZXZlbiAqcmVhY2gqIG9yIGluc3RhbnRpYXRlIGEgTW90b3Jjb21tIFBIWSwgc3BlY2lmaWNhbGx5IHRoZSBZVDg4MjQsIGR1cmluZyBteSBhbWQ2NCBRRU1VIHN5emthbGxlciBmdXp6aW5nIHJ1bnM/IExldCdzIGNoZWNrIHRoZSBndWlkZWxpbmVzLlxuXG5SaWdodCwgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLi4uIEkgcmVtZW1iZXIsIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIFNwZWNpZmljYWxseSwgXCJWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycy4uLiByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiXG5cbkhhbmcgb24uLi4gSXMgYW4gRXRoZXJuZXQgUEhZIGRyaXZlciAqc3RydWN0dXJhbGx5KiB1bnJlYWNoYWJsZT8gVGhlIFlUODgyNCBpcyBhIGRpc2NyZXRlIEV0aGVybmV0IFBIWSBjaGlwIOKAkyBhIHBoeXNpY2FsIGNoaXAuIEl0J3MgYSBcIlF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCBQSFkuXCIgSXQgY29ubmVjdHMgb3ZlciBNRElPIHRvIGEgTUFDIG9yIFNvQyBhbmQgaXMgaWRlbnRpZmllZCB2aWEgZGV2aWNldHJlZSBiaW5kaW5ncyBsaWtlIGBtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VgIG9yIHRoZSBNRElPIFBIWSBJRCAweDRmNTFlOGI4LlxuXG5Pa2F5LCBkb2VzICpzdGFuZGFyZCogUUVNVSwgdGhlIG9uZSBzeXprYWxsZXIgdXNlcywgZW11bGF0ZSB0aGlzPyBOb3BlLiBRRU1VIGVtdWxhdGVzIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzIGxpa2UgZTEwMDAsIHZpcnRpby1uZXQsIHJ0bDgxMzksIGFuZCBzbyBvbi4gTm9uZSBvZiB0aG9zZSBoYXZlIGEgTW90b3Jjb21tIFBIWSBjaGlwLiBJdCBkb2Vzbid0IGxvb2sgbGlrZSB0aGV5IGhhdmUgdGhlIG9wdGlvbiB0byBhZGQgYW55LlxuXG5CdXQsIGEgdmlydHVhbCBNRElPIGJ1cz8gT3IgbWF5YmUgc29tZSBraW5kIG9mIFVTQi10by1NRElPIGFkYXB0ZXIgb3Igc2ltaWxhciB0aGluZyBjb3VsZCBiZSB1c2VkIGluIHN5emthbGxlciB0byByZWFjaCB0aGlzPyBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBrZXJuZWwgYW5kIHN5emthbGxlciBzb3VyY2UgZm9yIGFueSBldmlkZW5jZSBvZiB2aXJ0dWFsIE1ESU8gYnVzZXMgb3IgVVNCLU1ESU8gYWRhcHRlcnMuIFRoYXQncyB0aGUgbmV4dCBhdmVudWUgdG8gY2hlY2suLi4gb3RoZXJ3aXNlLCB0aGlzIGRyaXZlciBpcyBnb2luZyB0byBiZSBhIGRlYWQgZW5kIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDM2MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzoyNi4yODQwMDE3ODFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTIyODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKnVzYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfTURJT19NU0NDX01JSU0pXFx0XFx0Kz0gbWRpby1tc2NjLW1paW0ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX01ESU9fTVZVU0IpXFx0XFx0Kz0gbWRpby1tdnVzYi5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0yMi1vYmotJChDT05GSUdfTURJT19PQ1RFT04pXFx0XFx0Kz0gbWRpby1vY3Rlb24ub1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM9MzI9c3RhdGljIGludCBtdnVzYl9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKm1kaW8sIGludCBkZXYsIGludCByZWcpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtMzMte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjM0OlxcdHN0cnVjdCBtdnVzYl9tZGlvICptdnVzYiA9IG1kaW8tXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtMzUtXFx0aW50IGVyciwgYWxlbjtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jPTUyPXN0YXRpYyBpbnQgbXZ1c2JfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy01My17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6NTQ6XFx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiID0gbWRpby1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy01NS1cXHRpbnQgYWxlbjtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTYzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjY0OnN0YXRpYyBpbnQgbXZ1c2JfbWRpb19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTY1LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy02Ny1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2aW50ZXJmYWNlLVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6Njg6XFx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTY5LVxcdHN0cnVjdCBtaWlfYnVzICptZGlvO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTcwLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjcxOlxcdG1kaW8gPSBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZShkZXYsIHNpemVvZigqbXZ1c2IpKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy03Mi1cXHRpZiAoIW1kaW8pXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy04Mi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYzo4MzpcXHRzbnByaW50ZihtZGlvLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwibXZ1c2ItJXNcXFwiLCBkZXZfbmFtZShkZXYpKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy04NC1cXHRtZGlvLVxcdTAwM2VuYW1lID0gbWRpby1cXHUwMDNlaWQ7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtODUtXFx0bWRpby1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjg2OlxcdG1kaW8tXFx1MDAzZXJlYWQgPSBtdnVzYl9tZGlvX3JlYWQ7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6ODc6XFx0bWRpby1cXHUwMDNld3JpdGUgPSBtdnVzYl9tZGlvX3dyaXRlO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTg4LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtOTMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmM6OTQ6c3RhdGljIHZvaWQgbXZ1c2JfbWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmMtOTUte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jOjk2OlxcdHN0cnVjdCBtdnVzYl9tZGlvICptdnVzYiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYy05Ny1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tbXZ1c2IuYzo5ODpcXHRtZGlvYnVzX3VucmVnaXN0ZXIobXZ1c2ItXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jLTk5LVxcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02NTg9c3RhdGljIGludCBhc2l4X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NjgtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY2OTpzdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjcwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02ODMtXFx0LyogbWlpIGJ1cyBuYW1lIGlzIHVzYi1cXHUwMDNjdXNiIGJ1cyBudW1iZXJcXHUwMDNlLVxcdTAwM2N1c2IgZGV2aWNlIG51bWJlclxcdTAwM2UgKi9cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg0OlxcdHNucHJpbnRmKHByaXYtXFx1MDAzZW1kaW8tXFx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFxcXCJ1c2ItJTAzZDolMDNkXFxcIixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg1LVxcdFxcdCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlYnVzbnVtLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldm51bSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz01NT1zdGF0aWMgdm9pZCBheDg4MTcyYV9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy02MC0vKiB1c2UgcGh5bGliIGluZnJhc3RydWN0dXJlICovXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6NjE6c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc2LVxcdC8qIG1paSBidXMgbmFtZSBpcyB1c2ItXFx1MDAzY3VzYiBidXMgbnVtYmVyXFx1MDAzZS1cXHUwMDNjdXNiIGRldmljZSBudW1iZXJcXHUwMDNlICovXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6Nzc6XFx0c25wcmludGYocHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcInVzYi0lMDNkOiUwM2RcXFwiLFxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc4LVxcdFxcdCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlYnVzbnVtLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldm51bSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy05My1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo5NDpzdGF0aWMgdm9pZCBheDg4MTcyYV9yZW1vdmVfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtOTUte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDkxPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDctXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA4OlxcdHNucHJpbnRmKGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcInVzYi0lMDNkOiUwM2RcXFwiLFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEwOS1cXHRcXHQgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VidXMtXFx1MDAzZWJ1c251bSwgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXZudW0pO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTY2PXN0YXRpYyB1MzIgbWlpX2FkZHJlc3NfY21kKGludCBwaHlfaWQsIGludCBpZHgsIHUxNiBvcClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE3MC1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxNzE6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE3Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yMTctXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MjE4OnN0YXRpYyB2b2lkIHNtc2M5NXh4X21kaW9fd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTIxOS1cXHRcXHRcXHRcXHRpbnQgcmVndmFsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzoyNi40Mjc5MzA4NzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODA0NzY3OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBNb3RvcmNvbW0gUEhZIERyaXZlcioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYHl0ODgyNF9wcm9iZWAgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIGFib3V0IHdoYXQncyBnb2luZyBvbiwgYW5kIHRoaXMgY291bGQgYmUga2V5LiBMZXQncyBleGFtaW5lIHRoaXMgc25pcHBldDpcblxuYGBgY1xuc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbntcblx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcblx0aW50IHJldDtcblxuXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcblx0aWYgKHJldClcblx0XHRyZXR1cm4gcmV0O1xuXG5cdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcblx0XHRyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpO1xuXHRcdGlmIChyZXQpXG5cdFx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0cmV0dXJuIDA7XG59XG5gYGBcblxuUmlnaHQsIHNvIHdlJ3JlIGpvaW5pbmcgYSBwYWNrYWdlIHVzaW5nIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gLCBhbmQgcG90ZW50aWFsbHkgcHJvYmluZyBpdC4gV2hhdCdzIGNydWNpYWwgaGVyZSBpcyB0aGF0IGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGxpa2VseSBtYW5hZ2VzIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIGFzc29jaWF0aW9uIHdpdGggdGhlIGRldmljZSB0cmVlLiBJdCBzZWVtcyB0byBiZSBzZXR0aW5nIHVwIHNoYXJlZCBwcml2YXRlIGRhdGEgd2l0aGluIHRoZSBgeXQ4ODI0X3NoYXJlZF9wcml2YCBzdHJ1Y3QuIFRoZSBmYWN0IHRoYXQgYHBoeV9wYWNrYWdlX3Byb2JlX29uY2VgIGlzIGNhbGxlZCBjb25kaXRpb25hbGx5IGJhc2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbmAgaXMgaW50cmlndWluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGZ1bmN0aW9uIG1vcmUgcHJlY2lzZWx5LCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24uIEl0IGNvdWxkIGJlIHRoZSBsaW5jaHBpbiBpbiBob3cgdGhlIE1vdG9yY29tbSBQSFkgaXMgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQsIGVzcGVjaWFsbHkgY29uY2VybmluZyByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCB0aGUgZGV2aWNlIHRyZWUgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjMwLjIzMjcwMzE0NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTg5OTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTQ2NTQ9c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00NjU5LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo0NjYwOlxcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00NjYxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYz00MDU9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9waHlfcGFja2FnZV9qb2luKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQwNy0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzo0MDg6ICogZGV2bV9vZl9waHlfcGFja2FnZV9qb2luIC0gcmVzb3VyY2UgbWFuYWdlZCBvZl9waHlfcGFja2FnZV9qb2luKClcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00MDktICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQSFkgcGFja2FnZVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDE2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jOjQxNzppbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00MTgtXFx0XFx0XFx0ICAgICBzaXplX3QgcHJpdl9zaXplKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDM4LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzo0Mzk6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00NDAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLmg9MzI9aW50IGRldm1fcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oLTMzLVxcdFxcdFxcdCAgaW50IGJhc2VfYWRkciwgc2l6ZV90IHByaXZfc2l6ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oOjM0OmludCBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaC0zNS1cXHRcXHRcXHQgICAgIHNpemVfdCBwcml2X3NpemUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTY5ND1zdGF0aWMgaW50IHFjYTgwN3hfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy03MDEtXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjcwMjpcXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNzAzLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjMxLjc1ODYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyMDY4MDAyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYHBoeV9wYWNrYWdlLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byBpdC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBvbmUgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jYC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZSBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldmljZSB0cmVlIGFuZCBQSFkgcGFja2FnZSBoYW5kbGluZy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIGRldmljZSBtYW5hZ2VtZW50IGxpYnJhcnkgZ2l2ZW4gdGhlIGBkZXZtX2AgcHJlZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU3OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjM0Ljk2NTQxMjk4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDg6XFx0ICogZGV2bV9vZl9waHlfcGFja2FnZV9qb2luIC0gcmVzb3VyY2UgbWFuYWdlZCBvZl9waHlfcGFja2FnZV9qb2luKClcXG4gNDA5OlxcdCAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUEhZIHBhY2thZ2VcXG4gNDEwOlxcdCAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbiA0MTE6XFx0ICogQHByaXZfc2l6ZTogaWYgbm9uLXplcm8gYWxsb2NhdGUgdGhpcyBhbW91bnQgb2YgYnl0ZXMgZm9yIHByaXZhdGUgZGF0YVxcbiA0MTI6XFx0ICpcXG4gNDEzOlxcdCAqIE1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpLiBTaGFyZWQgc3RvcmFnZSBmZXRjaGVkIGJ5IHRoaXMgZnVuY3Rpb24sXFxuIDQxNDpcXHQgKiBwaHlfcGFja2FnZV9sZWF2ZSgpIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uIGRyaXZlciBkZXRhY2guIFNlZVxcbiA0MTU6XFx0ICogb2ZfcGh5X3BhY2thZ2Vfam9pbigpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiA0MTY6XFx0ICovXFxuIDQxNzpcXHRpbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gNDE4OlxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IHByaXZfc2l6ZSlcXG4gNDE5OlxcdHtcXG4gNDIwOlxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICoqcHRyO1xcbiA0MjE6XFx0XFx0aW50IHJldDtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0cHRyID0gZGV2cmVzX2FsbG9jKGRldm1fcGh5X3BhY2thZ2VfbGVhdmUsIHNpemVvZigqcHRyKSxcXG4gNDI0OlxcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwpO1xcbiA0MjU6XFx0XFx0aWYgKCFwdHIpXFxuIDQyNjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0cmV0ID0gb2ZfcGh5X3BhY2thZ2Vfam9pbihwaHlkZXYsIHByaXZfc2l6ZSk7XFxuIDQyOTpcXHRcXG4gNDMwOlxcdFxcdGlmICghcmV0KSB7XFxuIDQzMTpcXHRcXHRcXHQqcHRyID0gcGh5ZGV2O1xcbiA0MzI6XFx0XFx0XFx0ZGV2cmVzX2FkZChkZXYsIHB0cik7XFxuIDQzMzpcXHRcXHR9IGVsc2Uge1xcbiA0MzQ6XFx0XFx0XFx0ZGV2cmVzX2ZyZWUocHRyKTtcXG4gNDM1OlxcdFxcdH1cXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDM4OlxcdH1cXG4gNDM5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbik7XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiUEhZIHBhY2thZ2Ugc3VwcG9ydFxcXCIpO1xcbiA0NDI6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzozNC45NjU1MDc3MzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA0MTIwNzM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiwgc3VtbWFyaXplZCBmcm9tIHRoZSBwcm92aWRlZCB0ZXh0LCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFuZCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBbmFseXppbmcgYG9mX3BoeV9wYWNrYWdlX2pvaW5gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIGZ1bmN0aW9uIG9yIGNvbmNlcHQuIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBQSFkgKFBoeXNpY2FsIExheWVyKSBjb250ZXh0LiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBmdW5jdGlvbiByZWxhdGVkIHRvIGpvaW5pbmcgb3IgYXNzZW1ibGluZyBzb21ldGhpbmcgYXQgdGhlIHBoeXNpY2FsIGxldmVsLiBNeSBtaW5kJ3MganVtcGluZyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3M6IElzIHRoaXMgYWJvdXQgcGFja2V0IGFnZ3JlZ2F0aW9uLCBwZXJoYXBzPyBPciBpcyBpdCBtb3JlIGZ1bmRhbWVudGFsLCBkZWFsaW5nIHdpdGggdGhlIGFsaWdubWVudCBhbmQgc3luY2hyb25pemF0aW9uIG9mIGluY29taW5nIGRhdGEgc3RyZWFtcyBhdCB0aGUgdmVyeSBsb3dlc3QgbGV2ZWwgb2YgdGhlIHByb3RvY29sIHN0YWNrP1xuXG5HaXZlbiBteSBleHBlcmllbmNlLCBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBsaWtlbHkgc2l0cyBiZXR3ZWVuIHRoZSByYXcgc2lnbmFsIHByb2Nlc3NpbmcgYW5kIHRoZSBtb3JlIHN0cnVjdHVyZWQgTUFDIChNZWRpdW0gQWNjZXNzIENvbnRyb2wpIGxheWVyLiBJdCBwcm9iYWJseSBoYW5kbGVzIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBiaXQtbGV2ZWwgbWFuaXB1bGF0aW9uIOKAkyBtYXliZSBmcmFtaW5nLCBlcnJvciBjb3JyZWN0aW9uIGF0IHRoZSBwaHlzaWNhbCBsZXZlbCwgb3IgZXZlbiBwcmUtcHJvY2Vzc2luZyBmb3IgZXF1YWxpemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzIHRvIGJlIHN1cmUsIGJ1dCBJJ20gcGljdHVyaW5nIGl0IGhhbmRsaW5nIHRoaW5ncyBsaWtlIGludGVyLXN5bWJvbCBpbnRlcmZlcmVuY2UsIGNoYW5uZWwgaW1wYWlybWVudHMsIGFuZCBhbnkgcHJlLWNvZGluZyBzY2hlbWVzIGluIHVzZS5cblxuTm93LCBpZiBpdCBkZWFscyB3aXRoIGpvaW5pbmcsIGNvdWxkIGl0IGJlIHBhcnQgb2YgYSBNSU1PIChNdWx0aXBsZS1JbnB1dCBNdWx0aXBsZS1PdXRwdXQpIG9yIGJlYW1mb3JtaW5nIHNjaGVtZT8gVGhhdCdzIGEgc3Ryb25nIHBvc3NpYmlsaXR5LiBJbiB0aGlzIGNhc2UsIGl0IG1pZ2h0IGhhbmRsZSB0aGUgY29tYmluYXRpb24gb2YgZGF0YSBzdHJlYW1zIGZyb20gbXVsdGlwbGUgYW50ZW5uYXMuIE9yLCBpdCBtaWdodCBiZSBhYm91dCBhZ2dyZWdhdGluZyBtdWx0aXBsZSBzbWFsbGVyIGRhdGEgdW5pdHMgaW50byBsYXJnZXIgcGh5c2ljYWwtbGF5ZXIgcGFja2V0cyBmb3IgZWZmaWNpZW50IHRyYW5zbWlzc2lvbiBvdmVyIHRoZSBhaXIuIEknbGwgbmVlZCB0byBleHBsb3JlIGl0cyBhcmNoaXRlY3R1cmUgZGVlcGVyIHRvIGNvbmZpcm0uIFJlZ2FyZGxlc3MsIGl0J3MgY2xlYXJseSBhIGNydWNpYWwgY29tcG9uZW50LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHByZWNpc2Ugcm9sZSBpbiB0aGUgZGF0YSBmbG93IHRvIHRydWx5IGdyYXNwIGl0cyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzI1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1MzozOC4wMDY3MTgzNDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzYwOlxcdFxcdH1cXG4gMzYxOlxcdFxcbiAzNjI6XFx0XFx0cGh5ZGV2LVxcdTAwM2VzaGFyZWQgPSBOVUxMO1xcbiAzNjM6XFx0fVxcbiAzNjQ6XFx0RVhQT1JUX1NZTUJPTF9HUEwocGh5X3BhY2thZ2VfbGVhdmUpO1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRzdGF0aWMgdm9pZCBkZXZtX3BoeV9wYWNrYWdlX2xlYXZlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxcbiAzNjc6XFx0e1xcbiAzNjg6XFx0XFx0cGh5X3BhY2thZ2VfbGVhdmUoKihzdHJ1Y3QgcGh5X2RldmljZSAqKilyZXMpO1xcbiAzNjk6XFx0fVxcbiAzNzA6XFx0XFxuIDM3MTpcXHQvKipcXG4gMzcyOlxcdCAqIGRldm1fcGh5X3BhY2thZ2Vfam9pbiAtIHJlc291cmNlIG1hbmFnZWQgcGh5X3BhY2thZ2Vfam9pbigpXFxuIDM3MzpcXHQgKiBAZGV2OiBkZXZpY2UgdGhhdCBpcyByZWdpc3RlcmluZyB0aGlzIFBIWSBwYWNrYWdlXFxuIDM3NDpcXHQgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4gMzc1OlxcdCAqIEBiYXNlX2FkZHI6IGNvb2tpZSBhbmQgYmFzZSBQSFkgYWRkcmVzcyBvZiBQSFkgcGFja2FnZSBmb3Igb2Zmc2V0XFxuIDM3NjpcXHQgKiAgIGNhbGN1bGF0aW9uIG9mIGdsb2JhbCByZWdpc3RlciBhY2Nlc3NcXG4gMzc3OlxcdCAqIEBwcml2X3NpemU6IGlmIG5vbi16ZXJvIGFsbG9jYXRlIHRoaXMgYW1vdW50IG9mIGJ5dGVzIGZvciBwcml2YXRlIGRhdGFcXG4gMzc4OlxcdCAqXFxuIDM3OTpcXHQgKiBNYW5hZ2VkIHBoeV9wYWNrYWdlX2pvaW4oKS4gU2hhcmVkIHN0b3JhZ2UgZmV0Y2hlZCBieSB0aGlzIGZ1bmN0aW9uLFxcbiAzODA6XFx0ICogcGh5X3BhY2thZ2VfbGVhdmUoKSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBkcml2ZXIgZGV0YWNoLiBTZWVcXG4gMzgxOlxcdCAqIHBoeV9wYWNrYWdlX2pvaW4oKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gMzgyOlxcdCAqL1xcbiAzODM6XFx0aW50IGRldm1fcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIDM4NDpcXHRcXHRcXHRcXHQgIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpXFxuIDM4NTpcXHR7XFxuIDM4NjpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqKnB0cjtcXG4gMzg3OlxcdFxcdGludCByZXQ7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdHB0ciA9IGRldnJlc19hbGxvYyhkZXZtX3BoeV9wYWNrYWdlX2xlYXZlLCBzaXplb2YoKnB0ciksXFxuIDM5MDpcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG4gMzkxOlxcdFxcdGlmICghcHRyKVxcbiAzOTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM5MzpcXHRcXG4gMzk0OlxcdFxcdHJldCA9IHBoeV9wYWNrYWdlX2pvaW4ocGh5ZGV2LCBiYXNlX2FkZHIsIHByaXZfc2l6ZSk7XFxuIDM5NTpcXHRcXG4gMzk2OlxcdFxcdGlmICghcmV0KSB7XFxuIDM5NzpcXHRcXHRcXHQqcHRyID0gcGh5ZGV2O1xcbiAzOTg6XFx0XFx0XFx0ZGV2cmVzX2FkZChkZXYsIHB0cik7XFxuIDM5OTpcXHRcXHR9IGVsc2Uge1xcbiA0MDA6XFx0XFx0XFx0ZGV2cmVzX2ZyZWUocHRyKTtcXG4gNDAxOlxcdFxcdH1cXG4gNDAyOlxcdFxcbiA0MDM6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDA0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6MzguMDA2Nzk4MTA1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0Mjg4NTAwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgb24sIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeSwgcmVhZHkgZm9yIGEgZmVsbG93IGV4cGVydC5cblxuKipBbmFseXppbmcgYG9mX3BoeV9wYWNrYWdlX2pvaW5gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGNvbnRleHQgaXQncyBvcGVyYXRpbmcgd2l0aGluLiAgV2hhdCBraW5kIG9mIHBoeXNpY2FsIGxheWVyIHBhY2thZ2UgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSXMgdGhpcyByZWxhdGVkIHRvIEV0aGVybmV0LCBhIGN1c3RvbSBwcm90b2NvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGZyYW1lIGZvcm1hdC5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgZm9ybWluZyBhIGNoZWNrbGlzdDpcblxuKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgYXJlIHRoZSBpbnB1dCBwYWNrYWdlIGZvcm1hdHM/IElzIGl0IGEgc3RydWN0dXJlLCBhIGNsYXNzLCBvciByYXcgYnl0ZXM/IEFyZSB0aGVyZSBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YT8gSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGFuZCBob3cgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIHJlZmVyZW5jZXMgdGhlbS4gQW55IHBvdGVudGlhbCBiaXRmaWVsZHMsIGFsaWdubWVudCBpc3N1ZXMsIG9yIGVuZGlhbm5lc3MgY29uc2lkZXJhdGlvbnM/XG4qICAgKipQdXJwb3NlOioqIFdoYXQncyB0aGUgKmdvYWwqIG9mIHRoaXMgZnVuY3Rpb24/IElzIGl0IGNvbWJpbmluZyBtdWx0aXBsZSBwaHlzaWNhbCBsYXllciBwYWNrZXRzIGludG8gYSBsYXJnZXIgdW5pdCwgcGVyaGFwcyBhIGxvZ2ljYWwgZnJhbWU/IElzIGl0IG1lYW50IHRvIGFkZCBoZWFkZXJzLCB0cmFpbGVycywgb3IgcGFkZGluZz8gSXMgaXQgcmVsYXRlZCB0byBwYWNrZXQgcmVhc3NlbWJseSwgZW5jYXBzdWxhdGlvbiwgb3Igc2VnbWVudGF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgZGF0YSBmbG93LlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCB0aGUgaW5wdXQgZGF0YSwgbGlrZSBhbiBpbmNvbXBsZXRlIHBhY2thZ2Ugb3IgY29ycnVwdGVkIGRhdGE/IEkgbmVlZCB0byBhc2NlcnRhaW4gaG93IHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBlcnJvciBjb25kaXRpb25zLiBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlLCB0aHJvdyBhbiBleGNlcHRpb24sIG9yIGxvZyBzb21ldGhpbmc/IFdoYXQgaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gdGhpbmdzIGdvIHdyb25nPyBJcyBlcnJvciBjaGVja2luZyB0aG9yb3VnaD9cbiogICAqKlBlcmZvcm1hbmNlOioqIEdpdmVuIHRoZSBsaWtlbHkgZGF0YSB2b2x1bWVzLCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uLiBBbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzPyBBcmUgdGhlcmUgbG9vcHMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29weWluZyBvcGVyYXRpb25zIHRoYXQgY291bGQgc2xvdyB0aGluZ3MgZG93bj8gSXMgdGhpcyBmdW5jdGlvbiBvcHRpbWl6ZWQgZm9yIHNwZWVkIG9yIHNpbXBsaWNpdHk/XG4qICAgKipTZWN1cml0eToqKiBUaGlzIGlzIG1vcmUgb2YgYSBzZWNvbmRhcnkgY29uc2lkZXJhdGlvbi4gSXMgdGhpcyBmdW5jdGlvbiBkZXNpZ25lZCB3aXRoIGFueSBzZWN1cml0eSBhc3BlY3RzIGluIG1pbmQ/IElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gZGF0YSBtYW5pcHVsYXRpb24/XG4qICAgKipTaWRlIEVmZmVjdHM6KiogV2hhdCBpcyBiZWluZyBhbHRlcmVkPyBJcyB0aGVyZSBhIHN0YXRlIGNoYW5nZT8gQW55IG90aGVyIGZ1bmN0aW9ucyByZWxpYW50IG9uIHRoaXMgb25lP1xuXG5Fc3NlbnRpYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgaW5wdXQsIGl0cyBvdXRwdXQsIGl0cyBpbnRlcm5hbCBsb2dpYywgdGhlIGVycm9yIGhhbmRsaW5nLCBhbmQgaXRzIHBsYWNlIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBCeSBxdWlja2x5IHdhbGtpbmcgdGhyb3VnaCB0aGVzZSBpdGVtcywgSSdsbCBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBjb3VsZCBiZSBpbXByb3ZlZCwgb3B0aW1pemVkLCBvciB0aGF0IG1heSBoYXZlIHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjM5NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6NDIuNDM1NjUxMDQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAxODA5Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBvZl9waHlfcGFja2FnZV9qb2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jPTI3Nj1FWFBPUlRfU1lNQk9MX0dQTChwaHlfcGFja2FnZV9qb2luKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTI5Ny0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzoyOTg6aW50IG9mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc2l6ZV90IHByaXZfc2l6ZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy0yOTkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oPTI5PWludCBwaHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaDozMDppbnQgb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzaXplX3QgcHJpdl9zaXplKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLmgtMzEtdm9pZCBwaHlfcGFja2FnZV9sZWF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDc6NTM6NDMuOTM3NDY4MTAxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2NTI0MjA0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uICdvZlxcX3BoeVxcX3BhY2thZ2VcXF9qb2luJyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBvZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbi4gSnVzdCB0aGUgbmFtZSBhbG9uZSBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIHNvbWUgc29ydCBvZiBqb2luaW5nIG9wZXJhdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIFBIWSBwYWNrYWdlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBjb21wbGV4aXRpZXMuIElzIHRoaXMgYSBzaW1wbGUgY29uY2F0ZW5hdGlvbiwgb3IgYXJlIHRoZXJlIG1vcmUgc29waGlzdGljYXRlZCBtZXJnaW5nIHJ1bGVzIGF0IHBsYXk/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGNvbWJpbmluZyBkYXRhIHN0cnVjdHVyZXMsIHBlcmhhcHMgcGFja2V0IGhlYWRlcnMsIHBheWxvYWQgaW5mb3JtYXRpb24sIG9yIGNvbnRyb2wgZmllbGRzPyBUaGUgXCJQSFlcIiBwcmVmaXggaXMgYSBzaWduaWZpY2FudCBjbHVlOyBpdCBzaWduYWxzIHRoaXMgaXMgcHJvYmFibHkgbG93LWxldmVsLCBjbG9zZSB0byB0aGUgcGh5c2ljYWwgbGF5ZXIuIEkgbmVlZCB0byBjb25zaWRlciBmYWN0b3JzIHN1Y2ggYXMgZnJhbWluZywgc3luY2hyb25pemF0aW9uLCBlcnJvciBoYW5kbGluZyBhdCB0aGlzIHN0YWdlLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhyb3VnaHB1dCBvciBsYXRlbmN5LiBXaGF0J3MgdGhlIHRhcmdldCBzeXN0ZW0ncyBhcmNoaXRlY3R1cmU/IElzIHRoaXMgYSBoYXJkd2FyZS1hY2NlbGVyYXRlZCBwcm9jZXNzLCBvciBydW5uaW5nIGVudGlyZWx5IGluIHNvZnR3YXJlPyBUaGUgZGF0YSB0eXBlIG9mIHRoZSBpbnB1dCwgYW5kIG91dHB1dCwgaXMga2V5LiBMZXQgbWUgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgZGF0YSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNzo1Mzo0Ni41ODk4OTA3NjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk4OlxcdGludCBvZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHNpemVfdCBwcml2X3NpemUpXFxuIDI5OTpcXHR7XFxuIDMwMDpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XFxuIDMwMTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4gMzAyOlxcdFxcdHUzMiBiYXNlX2FkZHI7XFxuIDMwMzpcXHRcXHRpbnQgcmV0O1xcbiAzMDQ6XFx0XFxuIDMwNTpcXHRcXHRpZiAoIW5vZGUpXFxuIDMwNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcXG4gMzA5OlxcdFxcdGlmICghcGFja2FnZV9ub2RlKVxcbiAzMTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXFxcImV0aGVybmV0LXBoeS1wYWNrYWdlXFxcIikpIHtcXG4gMzEzOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDMxNDpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIDMxNTpcXHRcXHR9XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2YmFzZV9hZGRyKSkge1xcbiAzMTg6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMzE5OlxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gMzIwOlxcdFxcdH1cXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0cmV0ID0gcGh5X3BhY2thZ2Vfam9pbihwaHlkZXYsIGJhc2VfYWRkciwgcHJpdl9zaXplKTtcXG4gMzIzOlxcdFxcdGlmIChyZXQpXFxuIDMyNDpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdHBoeWRldi1cXHUwMDNlc2hhcmVkLVxcdTAwM2VucCA9IHBhY2thZ2Vfbm9kZTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0cmV0dXJuIDA7XFxuIDMyOTpcXHRleGl0OlxcbiAzMzA6XFx0XFx0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcXG4gMzMxOlxcdFxcdHJldHVybiByZXQ7XFxuIDMzMjpcXHR9XFxuIDMzMzpcXHRFWFBPUlRfU1lNQk9MX0dQTChvZl9waHlfcGFja2FnZV9qb2luKTtcXG4gMzM0OlxcdFxcbiAzMzU6XFx0LyoqXFxuIDMzNjpcXHQgKiBwaHlfcGFja2FnZV9sZWF2ZSAtIGxlYXZlIGEgY29tbW9uIFBIWSBncm91cFxcbiAzMzc6XFx0ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjQ2LjU4OTk2NzkxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MTY2MTAyNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgUGF0aCBBbmFseXNpczogWVQ4ODI0IFBIWSBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGluZGljYXRlcyB0aGF0IHRoZSBjb2RlIGFkZGVkIGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgaXMsIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMsICp1bnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwIHRhcmdldGluZyBhbWQ2NCB3aXRoIFFFTVUuICBIZXJlJ3MgdGhlIHJlYXNvbmluZzpcblxuRmlyc3QsIGBvZl9waHlfcGFja2FnZV9qb2luYCBpcyBhIGhhcmQgZGVwZW5kZW5jeS4gSXQgbWFuZGF0ZXMgdGhlIGV4aXN0ZW5jZSBvZiBhbiBgZXRoZXJuZXQtcGh5LXBhY2thZ2VgIERldmljZVRyZWUgbm9kZS4gVGhlIFlUODgyNCBwcm9iZSBmdW5jdGlvbiwgYHl0ODgyNF9wcm9iZWAsIGNhbGxzIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gLCBhbmQgKmNhbm5vdCogZXZlbiBpbml0aWFsaXplIHdpdGhvdXQgdGhhdCBub2RlLiBPbiBhbWQ2NCwgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBEZXZpY2VUcmVlIGJ5IGRlZmF1bHQsIHNvIHdlJ3JlIGltbWVkaWF0ZWx5IGJsb2NrZWQuICBUaGUgdGFyZ2V0IGlzIGFtZDY0LiAgQm9vbSwgbm8gRFQsIG5vIHByb2JlLlxuXG5TZWNvbmQsIHRoZSBZVDg4MjQgaXMgKnBoeXNpY2FsKiBoYXJkd2FyZS4gSXQncyBhIGRpc2NyZXRlIFBIWSBjaGlwLCBhIHF1YWQgMi41RyBwYWNrYWdlLiBJdCByZXF1aXJlcyBhbiBNRElPIGJ1cyBhbmQgYSBzcGVjaWZpYyBQSFkgSUQgKDB4NGY1MWU4YjgpLiBTdGFuZGFyZCBRRU1VLCBvbiBhbWQ2NCwgZG9lc24ndCBlbXVsYXRlIHRoYXQga2luZCBvZiBoYXJkd2FyZS4gRXZlbiBpZiB3ZSBoYWQgKnNvbWUqIE1ESU8gYnVzLCB0aGVyZSdzIG5vIHdheSB0aGUgWVQ4ODI0IFBIWSBpcyBnb2luZyB0byBiZSBwcmVzZW50IG9yIHZpc2libGUuXG5cblRoaXJkLCBsZXQncyBzb2xpZGlmeSB0aGUgcG9pbnQgYWJvdXQgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLCB3aGljaCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcy4gIEEgcXVpY2sgY29kZSBzZWFyY2ggc2hvd3MgdGhhdCAqb25seSogdGhlIFlUODgyNCBkcml2ZXIgY2FsbHMgdGhhdCBmdW5jdGlvbi4gIEl0J3MgZW50aXJlbHkgd2l0aGluIHRoZSBNb3RvcmNvbW0gUEhZIGRyaXZlciBjb250ZXh0LiBObyBvdGhlciBuZXR3b3JrIHN1YnN5c3RlbSBjb2RlLCBubyBvdGhlciBkcml2ZXJzLCBub3RoaW5nLiAgSXQncyBlZmZlY3RpdmVseSBhIHByaXZhdGUgaGVscGVyIGZ1bmN0aW9uLlxuXG5UaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGZpcm1seSBhbmQgZGVmaW5pdGl2ZWx5IGNhdWdodCBpbiB0aGUgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjYXRlZ29yeSBkZWZpbmVkIGluIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSwgYW5kIGl0IHJlcXVpcmVzIGJvdGggaGFyZHdhcmUgcHJlc2VuY2UgYW5kIHNwZWNpZmljIERldmljZVRyZWUgY29uZmlndXJhdGlvbi4gIEl0J3MgYSBjbGVhciBjYXNlIG9mIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGZ1enppbmcgc3lzdGVtIGlzIHNldCB1cCB0byB0YXJnZXQgYW1kNjQgd2l0aCBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBhbmQgd2UgZG8gbm90IGhhdmUgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgaW5mb3JtYXRpb24uXG5UaGUgcmVsZXZhbnQgYFJlYXNvbmluZ2AgZm9yIHRoZSByZXN1bHRzIHdvdWxkIGJlOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSAoYSBxdWFkLXBvcnQgMi41R2JwcyBQSFkgcGFja2FnZSkgaW4gYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AsIGRldmljZXRyZWUgYmluZGluZ3MsIGFuZCBhIGdlbmVyaWMgaGVscGVyIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKClgIGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYCB3aGljaCBpcyBzb2xlbHkgY2FsbGVkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIE1vdG9yY29tbSBZVDg4MjQgUEhZIGhhcmR3YXJlIG9uIGFuIE1ESU8gYnVzIHdpdGggbWF0Y2hpbmcgUEhZIElEICgweDRmNTFlOGI4KSwgYXMgd2VsbCBhcyBPcGVuIEZpcm13YXJlIChEZXZpY2UgVHJlZSkgYmluZGluZ3MgKGBldGhlcm5ldC1waHktcGFja2FnZWApLCBub25lIG9mIHdoaWNoIGV4aXN0IG9yIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLiBBcyBzdWNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6MzgwMjksIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjU0Ljc1NjA3MzE1MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLCBEVCBiaW5kaW5ncywgYW5kIGEgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gcGh5LWM0NS5jIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBieSB0aGUgWVQ4ODI0IGRyaXZlci4gVGhlIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgKFBIWSBJRCAweDRmNTFlOGI4KSBvbiBhbiBNRElPIGJ1cyBhbmQgcmVxdWlyZXMgRGV2aWNlIFRyZWUgZXRoZXJuZXQtcGh5LXBhY2thZ2UgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9hbWQ2NCB2aXJ0dWFsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIGFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIChhIHF1YWQtcG9ydCAyLjVHYnBzIFBIWSkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLCBEVCBiaW5kaW5ncywgYW5kIGEgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gcGh5LWM0NS5jIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBieSB0aGUgWVQ4ODI0IGRyaXZlci4gVGhlIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgTW90b3Jjb21tIFlUODgyNCBQSFkgaGFyZHdhcmUgKFBIWSBJRCAweDRmNTFlOGI4KSBvbiBhbiBNRElPIGJ1cyBhbmQgcmVxdWlyZXMgRGV2aWNlIFRyZWUgZXRoZXJuZXQtcGh5LXBhY2thZ2UgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9hbWQ2NCB2aXJ0dWFsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIGFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA3OjUzOjU0Ljc1NjA5NzU0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbxl9k[1] Phase: Running StartedAt: 2026-09-12 07:54:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxl9k[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-12 07:54:05 +0000 UTC FinishedAt: 2026-09-12 07:54:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}