Name: series-workflowxhqbd Phase: Failed StartedAt: 2026-09-15 16:08:22 +0000 UTC FinishedAt: 2026-09-15 16:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhqbd[0] Phase: Succeeded StartedAt: 2026-09-15 16:08:22 +0000 UTC FinishedAt: 2026-09-15 16:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhqbd[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 16:08:22 +0000 UTC FinishedAt: 2026-09-15 16:27:59 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIFJvY2tjaGlwIFJLMzU2OCBEZXNpZ25XYXJlIEV0aGVybmV0IFBDUyAoWFBDUykgYW5kIHJlZmFjdG9ycyBQQ1MgaW5pdGlhbGl6YXRpb24gaW4gdGhlIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIgZmFtaWx5IChkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMsIGR3bWFjLXNvY2ZwZ2EsIGR3bWFjLXJ6bjEpLiBBbGwgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKTogZG9jdW1lbnRhdGlvbi9kZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgYXJtNjQgRFRTIGNoYW5nZXMgYXJlIG5vbi1leGVjdXRhYmxlIG9uIGFtZDY0LCBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHN0bW1hYyBkd21hYyB2YXJpYW50cyBhbmQgU3lub3BzeXMgRFcgWFBDUykgcmVxdWlyZSBwaHlzaWNhbCBTb0MgcGxhdGZvcm0gZGV2aWNlcyBvciBwaHlzaWNhbCBJbnRlbC9Sb2NrY2hpcC9SZW5lc2FzIHNpbGljb24gbm90IGVtdWxhdGVkIGJ5IFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDExZmMyMTVmYWJkNWZhOTUxNzljYzM4YmQwYmE4MTFlNjBmOTk5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDE2OjI1OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLHJrMzU2OC14cGNzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzAzZmNmZjBlM2Y3MFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTEwIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBSb2NrY2hpcCBSSzM1NjggU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1NcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gQ29pYSBQcmFudCBcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXHUwMDNlXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjogfFxuJiM0MzsgIFJvY2tjaGlwIFJLMzU2OCBTb0MgaW50ZWdyYXRlcyBhIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUGh5c2ljYWxcbiYjNDM7ICBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpLlxuJiM0MzsgIFRoZSBQQ1MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIChNQUMpXG4mIzQzOyAgYW5kIHRoZSBQaHlzaWNhbCBNZWRpdW0gQXR0YWNobWVudCAoUE1BKSBzdWJsYXllciB0aHJvdWdoIGEgTWVkaWFcbiYjNDM7ICBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKEdNSUkpLlxuJiM0MztcbiYjNDM7ICBUaGUgWFBDUyBpcyBhY2Nlc3NlZCBvdmVyIHRoZSBBUEIzIGJ1cyBhbmQgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gYVxuJiM0MzsgIE5hbmVuZyBDb21ibyBTZXJEZXMgUEhZLlxuJiM0MzsgIEl0IHN1cHBvcnRzIDEwMDBCQVNFLVgsIFNHTUlJIGFuZCBRU0dNSUkgbW9kZXMuXG4mIzQzO1xuJiM0MzsgIFRoZSBibG9jayBjb250YWlucyBmb3VyIE1JSSBwb3J0cyB0aGF0IGNhbiBiZSBpbmRpdmlkdWFsbHkgZW5hYmxlZCBhbmRcbiYjNDM7ICByb3V0ZWQgdG8gb25lIG9mIHRoZSBFdGhlcm5ldCBHTUFDIGNvbnRyb2xsZXJzIHZpYSB0aGUgcGNzLWhhbmRsZVxuJiM0MzsgIHByb3BlcnR5IGluIHRoZSBNQUMgZGV2aWNlIHRyZWUgbm9kZS5cbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGNvbnN0OiByb2NrY2hpcCxyazM1NjgteHBjc1xuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICBcJiMzNDsjYWRkcmVzcy1jZWxsc1wmIzM0OzpcbiYjNDM7ICAgIGNvbnN0OiAxXG4mIzQzO1xuJiM0MzsgIFwmIzM0OyNzaXplLWNlbGxzXCYjMzQ7OlxuJiM0MzsgICAgY29uc3Q6IDBcbiYjNDM7XG4mIzQzOyAgY2xvY2tzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEFQQjMgYnVzIGludGVyZmFjZSBjbG9jayAoY2xrX2Nzcl9pKSwgcmVxdWlyZWQgZm9yIHJlZ2lzdGVyIGFjY2Vzc1xuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBFRUUgY2xvY2sgKGNsa19lZWVfaSksIHJlcXVpcmVkIGZvciBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0IG9wZXJhdGlvblxuJiM0MztcbiYjNDM7ICBjbG9jay1uYW1lczpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGNvbnN0OiBjc3JcbiYjNDM7ICAgICAgLSBjb25zdDogZWVlXG4mIzQzO1xuJiM0MzsgIHBoeXM6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICBwaHktbmFtZXM6XG4mIzQzOyAgICBjb25zdDogc2VyZGVzXG4mIzQzO1xuJiM0MzsgIHBvd2VyLWRvbWFpbnM6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7cGF0dGVyblByb3BlcnRpZXM6XG4mIzQzOyAgXCYjMzQ7XmV0aGVybmV0LXBjcy1taWlAWzAtM10kXCYjMzQ7OlxuJiM0MzsgICAgdHlwZTogb2JqZWN0XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgT25lIG9mIHRoZSBmb3VyIE1JSSBwb3J0cyBvZiB0aGUgWFBDUy4gVGhlIHBvcnQgaXMgbGlua2VkIHRvIGFuXG4mIzQzOyAgICAgIEV0aGVybmV0IE1BQyBjb250cm9sbGVyIHZpYSB0aGUgcGNzLWhhbmRsZSBwcm9wZXJ0eSBpbiB0aGUgTUFDJiMzOTtzXG4mIzQzOyAgICAgIGRldmljZSB0cmVlIG5vZGUuXG4mIzQzO1xuJiM0MzsgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgcmVnOlxuJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOiBNSUkgcG9ydCBudW1iZXIuXG4mIzQzOyAgICAgICAgZW51bTogWzAsIDEsIDIsIDNdXG4mIzQzO1xuJiM0MzsgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgIC0gcmVnXG4mIzQzO1xuJiM0MzsgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7ICAtIHJlZ1xuJiM0MzsgIC0gXCYjMzQ7I2FkZHJlc3MtY2VsbHNcJiMzNDtcbiYjNDM7ICAtIFwmIzM0OyNzaXplLWNlbGxzXCYjMzQ7XG4mIzQzOyAgLSBjbG9ja3NcbiYjNDM7ICAtIGNsb2NrLW5hbWVzXG4mIzQzOyAgLSBwaHlzXG4mIzQzOyAgLSBwaHktbmFtZXNcbiYjNDM7ICAtIHBvd2VyLWRvbWFpbnNcbiYjNDM7XG4mIzQzO2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9jbG9jay9yazM1NjgtY3J1LmhcdTAwM2VcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3Bvd2VyL3JrMzU2OC1wb3dlci5oXHUwMDNlXG4mIzQzOyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9waHkvcGh5LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyAgICBldGhlcm5ldC1wY3NAZmRhMDAwMDAge1xuJiM0MzsgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7cm9ja2NoaXAscmszNTY4LXhwY3NcJiMzNDs7XG4mIzQzOyAgICAgIHJlZyA9IFx1MDAzYzB4ZmRhMDAwMDAgMHgyMDAwMDBcdTAwM2U7XG4mIzQzOyAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZjcnUgUENMS19YUENTXHUwMDNlLCBcdTAwM2NcdTAwMjZjcnUgQ0xLX1hQQ1NfRUVFXHUwMDNlO1xuJiM0MzsgICAgICBjbG9jay1uYW1lcyA9IFwmIzM0O2NzclwmIzM0OywgXCYjMzQ7ZWVlXCYjMzQ7O1xuJiM0MzsgICAgICBwaHlzID0gXHUwMDNjXHUwMDI2Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUlcdTAwM2U7XG4mIzQzOyAgICAgIHBoeS1uYW1lcyA9IFwmIzM0O3NlcmRlc1wmIzM0OztcbiYjNDM7ICAgICAgcG93ZXItZG9tYWlucyA9IFx1MDAzY1x1MDAyNnBvd2VyIFJLMzU2OF9QRF9QSVBFXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgZXRoZXJuZXQtcGNzLW1paUAwIHtcbiYjNDM7ICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICB9O1xuJiM0MzsgICAgfTtcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWxcbmluZGV4IDgwYzI1Mjg0NTM0OWMuLjY3YjIxZWE3N2VjOTYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcm9ja2NoaXAtZHdtYWMueWFtbFxuQEAgLTEyMCw2ICYjNDM7MTIwLDEyIEBAIHByb3BlcnRpZXM6XG4gICAgIG1heGltdW06IDB4N0ZcbiAgICAgZGVmYXVsdDogMHgxMFxuIFxuJiM0MzsgIHBjcy1oYW5kbGU6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgU3BlY2lmaWVzIGEgcmVmZXJlbmNlIHRvIGEgbm9kZSByZXByZXNlbnRpbmcgdGhlIFBDUyBkZXZpY2VcbiYjNDM7ICAgICAgY29ubmVjdGVkIHRvIHRoaXMgR01BQy4gUmVxdWlyZWQgd2hlbiBwaHktbW9kZSBpcyBcJiMzNDtzZ21paVwmIzM0Oy5cbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuICAgcGh5LXN1cHBseTpcbiAgICAgZGVzY3JpcHRpb246IFBIWSByZWd1bGF0b3JcbiBcbkBAIC0xNTksNiAmIzQzOzE2NSwxNSBAQCBhbGxPZjpcbiAgICAgICAgIGNsb2NrczpcbiAgICAgICAgICAgbWluSXRlbXM6IDVcbiBcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIHBoeS1tb2RlOlxuJiM0MzsgICAgICAgICAgY29udGFpbnM6XG4mIzQzOyAgICAgICAgICAgIGNvbnN0OiBzZ21paVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSBwY3MtaGFuZGxlXG4mIzQzO1xuIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiBcbiBleGFtcGxlczpcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbFxuaW5kZXggMzc5YjA4YmQ5ZTk3YS4uOGU4OThiY2U5YWY3MyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcbkBAIC04MCw2ICYjNDM7ODAsMTUgQEAgcHJvcGVydGllczpcbiAgICAgZGVzY3JpcHRpb246XG4gICAgICAgU29tZSBhZGRpdGlvbmFsIHBpcGUgc2V0dGluZ3MgYXJlIGFjY2Vzc2VkIHRocm91Z2ggR1JGIHJlZ3MuXG4gXG4mIzQzOyAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDpcbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuJiM0MzsgICAgZW51bTogWzAsIDFdXG4mIzQzOyAgICBkZWZhdWx0OiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgU2VsZWN0IGdtYWMwIG9yIGdtYWMxIHRvIGJlIHVzZWQgYXMgU0dNSUkgY29udHJvbGxlci5cbiYjNDM7ICAgICAgVGhlIGhhcmR3YXJlIHJlc2V0IHZhbHVlIGlzIEdNQUMxICgxKS4gU2V0IHRoaXMgdG8gMCB0byByb3V0ZVxuJiM0MzsgICAgICBTR01JSSB0byBHTUFDMC5cbiYjNDM7XG4gICBcJiMzNDsjcGh5LWNlbGxzXCYjMzQ7OlxuICAgICBjb25zdDogMVxuIFxuQEAgLTEwNSw2ICYjNDM7MTE0LDEwIEBAIGFsbE9mOlxuICAgICAgICAgICBtYXhJdGVtczogMVxuICAgICAgICAgcmVzZXQtbmFtZXM6XG4gICAgICAgICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogdHJ1ZVxuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiBmYWxzZVxuICAgLSBpZjpcbiAgICAgICBwcm9wZXJ0aWVzOlxuICAgICAgICAgY29tcGF0aWJsZTpcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAzYjJlYjJhN2E4OWE4Li5mNTNhNTE5ZGE2Mjk4IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMjM3MzksNiAmIzQzOzIzNzM5LDE1IEBAIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9yb2NrY2hpcCxyazM1NzYtc2FpLnlhbWxcbiBGOlx0c291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX3NhaS4qXG4gXG4mIzQzO1JPQ0tDSElQIFhQQ1MgRFJJVkVSXG4mIzQzO006XHRDb2lhIFByYW50IFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cdTAwM2VcbiYjNDM7TDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7TDpcdGxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLHJrMzU2OC14cGNzLnlhbWxcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXG4mIzQzO0Y6XHRpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXG4mIzQzO1xuIFJPQ0tFUiBEUklWRVJcbiBNOlx0SmlyaSBQaXJrbyBcdTAwM2NqaXJpQHJlc251bGxpLnVzXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzXG5pbmRleCA1OGMxMDUyYmE4ZWYzLi5mZGFhNGEyYTQzMjhiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gL2R0cy12MS87XG4gXG4gI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3BpbmN0cmwvcm9ja2NoaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3NvYy9yb2NrY2hpcCx2b3AyLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtyazM1NjguZHRzaVwmIzM0O1xuQEAgLTI0MSw2ICYjNDM7MjQyLDcgQEAgXHUwMDI2Y29tYnBoeTEge1xuIH07XG4gXG4gXHUwMDI2Y29tYnBoeTIge1xuJiM0MztcdHJvY2tjaGlwLHNnbWlpLW1hYy1zZWwgPSBcdTAwM2MwXHUwMDNlO1xuIFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiB9O1xuIFxuQEAgLTI2MCw5ICYjNDM7MjYyLDE4IEBAIFx1MDAyNmNwdTMge1xuIFx0Y3B1LXN1cHBseSA9IFx1MDAzY1x1MDAyNnZkZF9jcHVcdTAwM2U7XG4gfTtcbiBcbi0vKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKHJlcXVpcmUgU0dNSUkpICovXG4mIzQzOy8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAqL1xuIFx1MDAyNmdtYWMwIHtcbi1cdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdGFzc2lnbmVkLWNsb2NrcyA9IFx1MDAzY1x1MDAyNmNydSBTQ0xLX0dNQUMwX1JYX1RYXHUwMDNlO1xuJiM0MztcdGFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSBcdTAwM2NcdTAwMjZjbGtfZ21hYzBfeHBjc19taWlcdTAwM2U7XG4mIzQzO1x0bWFuYWdlZCA9IFwmIzM0O2luLWJhbmQtc3RhdHVzXCYjMzQ7O1xuJiM0MztcdHBjcy1oYW5kbGUgPSBcdTAwM2NcdTAwMjZ4cGNzX21paTBcdTAwM2U7XG4mIzQzO1x0cGh5LWhhbmRsZSA9IFx1MDAzY1x1MDAyNnNnbWlpX3BoeVx1MDAzZTtcbiYjNDM7XHRwaHktbW9kZSA9IFwmIzM0O3NnbWlpXCYjMzQ7O1xuJiM0MztcdHBoeS1zdXBwbHkgPSBcdTAwM2NcdTAwMjZ2Y2NfM3YzXHUwMDNlO1xuJiM0MztcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuJiM0MztcdHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNmdtYWMwX21paW1cdTAwM2U7XG4mIzQzO1x0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiB9O1xuIFxuIC8qIE1vdG9yY29tbSBZVDg1MjFTQyBXQU4gcG9ydCAqL1xuQEAgLTM0MSw2ICYjNDM7MzUyLDM2IEBAIFx1MDAyNmkyczBfOGNoIHtcbiBcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4gfTtcbiBcbiYjNDM7XHUwMDI2bWRpbzAge1xuJiM0MztcdHNnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyXCYjMzQ7O1xuJiM0MztcdFx0cmVnID0gXHUwMDNjMHgzXHUwMDNlO1xuJiM0MztcdFx0bWF4LXNwZWVkID0gXHUwMDNjMTAwMFx1MDAzZTtcbiYjNDM7XHRcdHJlc2V0LWFzc2VydC11cyA9IFx1MDAzYzIwMDAwXHUwMDNlO1xuJiM0MztcdFx0cmVzZXQtZGVhc3NlcnQtdXMgPSBcdTAwM2MxMDAwMDBcdTAwM2U7XG4mIzQzO1x0XHRyZXNldC1ncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW8zIFJLX1BDNiBHUElPX0FDVElWRV9MT1dcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0bGVkcyB7XG4mIzQzO1x0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XHRcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7XHRcdFx0bGVkQDEge1xuJiM0MztcdFx0XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHRcdFx0Y29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcdTAwM2U7XG4mIzQzO1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xuJiM0MztcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtrZWVwXCYjMzQ7O1xuJiM0MztcdFx0XHR9O1xuJiM0MztcbiYjNDM7XHRcdFx0bGVkQDIge1xuJiM0MztcdFx0XHRcdHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4mIzQzO1x0XHRcdFx0Y29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfR1JFRU5cdTAwM2U7XG4mIzQzO1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xuJiM0MztcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtrZWVwXCYjMzQ7O1xuJiM0MztcdFx0XHR9O1xuJiM0MztcdFx0fTtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiBcdTAwMjZtZGlvMSB7XG4gXHRyZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHtcbiBcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyXCYjMzQ7O1xuQEAgLTM1MCw2ICYjNDM7MzkxLDI1IEBAIHJnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuIFx0XHRyZXNldC1ncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW80IFJLX1BDMCBHUElPX0FDVElWRV9MT1dcdTAwM2U7XG4gXHRcdHJ4LWludGVybmFsLWRlbGF5LXBzID0gXHUwMDNjMTUwMFx1MDAzZTtcbiBcdFx0dHgtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxNTAwXHUwMDNlO1xuJiM0MztcbiYjNDM7XHRcdGxlZHMge1xuJiM0MztcdFx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHRcdCNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGxlZEAxIHtcbiYjNDM7XHRcdFx0XHRyZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0FNQkVSXHUwMDNlO1xuJiM0MztcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1dBTjtcbiYjNDM7XHRcdFx0XHRkZWZhdWx0LXN0YXRlID0gXCYjMzQ7a2VlcFwmIzM0OztcbiYjNDM7XHRcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHRcdGxlZEAyIHtcbiYjNDM7XHRcdFx0XHRyZWcgPSBcdTAwM2MyXHUwMDNlO1xuJiM0MztcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXHUwMDNlO1xuJiM0MztcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1dBTjtcbiYjNDM7XHRcdFx0XHRkZWZhdWx0LXN0YXRlID0gXCYjMzQ7a2VlcFwmIzM0OztcbiYjNDM7XHRcdFx0fTtcbiYjNDM7XHRcdH07XG4gXHR9O1xuIH07XG4gXG5AQCAtNTg2LDMgJiM0Mzs2NDYsMTMgQEAgXHUwMDI2eGluMzJrIHtcbiBcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuIFx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Y2xrMzJrX291dDFcdTAwM2U7XG4gfTtcbiYjNDM7XG4mIzQzO1x1MDAyNnhwY3Mge1xuJiM0MztcdHBoeXMgPSBcdTAwM2NcdTAwMjZjb21icGh5MiBQSFlfVFlQRV9TR01JSVx1MDAzZTtcbiYjNDM7XHRwaHktbmFtZXMgPSBcJiMzNDtzZXJkZXNcJiMzNDs7XG4mIzQzO1x0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO1x1MDAyNnhwY3NfbWlpMCB7XG4mIzQzO1x0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuaW5kZXggM2JjNjUzZjAyN2YxZi4uMjI3ZDAzZTMzNjA0MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2lcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2lcbkBAIC0xMTAsNiAmIzQzOzExMCw1MSBAQCBzYXRhMDogc2F0YUBmYzAwMDAwMCB7XG4gXHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuIFx0fTtcbiBcbiYjNDM7XHR4cGNzOiBldGhlcm5ldC1wY3NAZmRhMDAwMDAge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3JvY2tjaGlwLHJrMzU2OC14cGNzXCYjMzQ7O1xuJiM0MztcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcdFx0cmVnID0gXHUwMDNjMHgwIDB4ZmRhMDAwMDAgMHgwIDB4MjAwMDAwXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFBDTEtfWFBDU1x1MDAzZSwgXHUwMDNjXHUwMDI2Y3J1IENMS19YUENTX0VFRVx1MDAzZTtcbiYjNDM7XHRcdGNsb2NrLW5hbWVzID0gXCYjMzQ7Y3NyXCYjMzQ7LCBcJiMzNDtlZWVcJiMzNDs7XG4mIzQzO1x0XHRwb3dlci1kb21haW5zID0gXHUwMDNjXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcdTAwM2U7XG4mIzQzO1x0XHRzdGF0dXMgPSBcJiMzNDtkaXNhYmxlZFwmIzM0OztcbiYjNDM7XG4mIzQzO1x0XHR4cGNzX21paTA6IGV0aGVybmV0LXBjcy1taWlAMCB7XG4mIzQzO1x0XHRcdHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHR4cGNzX21paTE6IGV0aGVybmV0LXBjcy1taWlAMSB7XG4mIzQzO1x0XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHR4cGNzX21paTI6IGV0aGVybmV0LXBjcy1taWlAMiB7XG4mIzQzO1x0XHRcdHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHR4cGNzX21paTM6IGV0aGVybmV0LXBjcy1taWlAMyB7XG4mIzQzO1x0XHRcdHJlZyA9IFx1MDAzYzNcdTAwM2U7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdFx0fTtcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRjbGtfZ21hYzBfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzAge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2ZpeGVkLWNsb2NrXCYjMzQ7O1xuJiM0MztcdFx0Y2xvY2stZnJlcXVlbmN5ID0gXHUwMDNjMTI1MDAwMDAwXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7Y2xrX2dtYWMwX3hwY3NfbWlpXCYjMzQ7O1xuJiM0MztcdFx0I2Nsb2NrLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRjbGtfZ21hYzFfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzEge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2ZpeGVkLWNsb2NrXCYjMzQ7O1xuJiM0MztcdFx0Y2xvY2stZnJlcXVlbmN5ID0gXHUwMDNjMTI1MDAwMDAwXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7Y2xrX2dtYWMxX3hwY3NfbWlpXCYjMzQ7O1xuJiM0MztcdFx0I2Nsb2NrLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XHR9O1xuJiM0MztcbiBcdHBpcGVfcGh5X2dyZjA6IHN5c2NvbkBmZGM3MDAwMCB7XG4gXHRcdGNvbXBhdGlibGUgPSBcJiMzNDtyb2NrY2hpcCxyazM1NjgtcGlwZS1waHktZ3JmXCYjMzQ7LCBcJiMzNDtzeXNjb25cJiMzNDs7XG4gXHRcdHJlZyA9IFx1MDAzYzB4MCAweGZkYzcwMDAwIDB4MCAweDEwMDBcdTAwM2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcbmluZGV4IGUzZGQ1YWRkYTVhY2EuLjUwODhhY2MwNjk4MmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXG5AQCAtMTcwLDYgJiM0MzsxNzAsNyBAQCBjb25maWcgRFdNQUNfUk9DS0NISVBcbiBcdGRlZmF1bHQgQVJDSF9ST0NLQ0hJUFxuIFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxuIFx0c2VsZWN0IE1GRF9TWVNDT05cbiYjNDM7XHRzZWxlY3QgUENTX1hQQ1NfUk9DS0NISVBcbiBcdGhlbHBcbiBcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzMyODggU29DLlxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXG5pbmRleCBmNWY5ZmE2N2VjZDc3Li40MzA4ZGNjYmYyNTcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuQEAgLTYwMywxMyAmIzQzOzYwMyw0NyBAQCBzdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcbiBcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VuZWVkc19yZXNldCA9IHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlO1xuJiM0MztcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuJiM0MztcdGludCBhZGRyO1xuJiM0MztcbiYjNDM7XHRkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSk7XG4mIzQzO1xuJiM0MztcdGlmIChmd25vZGVfcHJvcGVydHlfcHJlc2VudChkZXZub2RlLCBcJiMzNDtwY3MtaGFuZGxlXCYjMzQ7KSkge1xuJiM0MztcdFx0cGNzbm9kZSA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZub2RlLCBcJiMzNDtwY3MtaGFuZGxlXCYjMzQ7LCAwKTtcbiYjNDM7XHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7XG4mIzQzO1x0XHRmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0YWRkciA9IGZmcyhwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzaykgLSAxO1xuJiM0MztcdFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cdTAwM2VtaWksIGFkZHIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VSUih4cGNzKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xuJiM0MztcbiYjNDM7XHR4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtdWx0X2ZhY3RfMTAwbnMpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSB4cGNzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpbnRlbF9tZ2JlX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmludGVsX21nYmVfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHRcdFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4ge1xuLVx0LyogcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZWhhc194cGNzIGhhcyBiZWVuIHNldCB0cnVlLCBzbyB0aGVyZVxuLVx0ICogc2hvdWxkIGFsd2F5cyBiZSBhbiBYUENTLiBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBhbHdheXNcbi1cdCAqIHJldHVybiB0aGlzIGlmIHByZXNlbnQuXG4tXHQgKi9cbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiBcdHJldHVybiB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4gfVxuIFxuQEAgLTczMyw2ICYjNDM7NzY3LDggQEAgc3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ICAgIHBsYXQtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKSB7XG4gXHRcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzayA9IEJJVF9VMzIoSU5URUxfTUdCRV9YUENTX0FERFIpO1xuIFx0XHRwbGF0LVx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbiYjNDM7XHRcdHBsYXQtXHUwMDNlcGNzX2luaXQgPSBpbnRlbF9tZ2JlX3Bjc19pbml0O1xuJiM0MztcdFx0cGxhdC1cdTAwM2VwY3NfZXhpdCA9IGludGVsX21nYmVfcGNzX2V4aXQ7XG4gXHRcdHBsYXQtXHUwMDNlc2VsZWN0X3BjcyA9IGludGVsX21nYmVfc2VsZWN0X3BjcztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbmluZGV4IDE5ZjM0ZTE4YmZlZjIuLjlhZjMyYzI2ZjljMTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguY1xuQEAgLTgxLDggJiM0Mzs4MSwxMSBAQCBzdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgcmVuZXNhc19nbWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB7XG4tXHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcylcbi1cdFx0bWlpY19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWlpY19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuJiM0MztcdHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyZW5lc2FzX2dtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmNcbmluZGV4IDhkNzA0MmU2ODkyNjEuLmIzZDc0NmRkOTY2ZmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWZkL3N5c2Nvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtzdG1tYWNfcGxhdGZvcm0uaFwmIzM0O1xuQEAgLTQ3LDYgJiM0Mzs0OCw3IEBAIHN0cnVjdCBya19nbWFjX29wcyB7XG4gXHR2b2lkICgqc2V0X3RvX3JnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdixcbiBcdFx0XHQgICAgIGludCB0eF9kZWxheSwgaW50IHJ4X2RlbGF5KTtcbiBcdHZvaWQgKCpzZXRfdG9fcm1paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpO1xuJiM0MztcdHZvaWQgKCpzZXRfdG9fc2dtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbiBcdGludCAoKnNldF9zcGVlZCkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCk7XG4gXHR2b2lkICgqaW50ZWdyYXRlZF9waHlfcG93ZXJ1cCkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpO1xuQEAgLTYzLDYgJiM0Mzs2NSw3IEBAIHN0cnVjdCBya19nbWFjX29wcyB7XG4gXHRib29sIGNsb2NrX2dyZl9yZWdfaW5fcGhwO1xuIFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcbiBcdGJvb2wgc3VwcG9ydHNfcm1paTtcbiYjNDM7XHRib29sIHN1cHBvcnRzX3NnbWlpO1xuIFx0Ym9vbCBwaHBfZ3JmX3JlcXVpcmVkO1xuIFx0Ym9vbCByZWdzX3ZhbGlkO1xuIFx0dTMyIHJlZ3NbXTtcbkBAIC05OCw2ICYjNDM7MTAxLDcgQEAgc3RydWN0IHJrX3ByaXZfZGF0YSB7XG4gXHRib29sIGludGVncmF0ZWRfcGh5O1xuIFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcbiBcdGJvb2wgc3VwcG9ydHNfcm1paTtcbiYjNDM7XHRib29sIHN1cHBvcnRzX3NnbWlpO1xuIFxuIFx0c3RydWN0IGNsa19idWxrX2RhdGEgKmNsa3M7XG4gXHRpbnQgbnVtX2Nsa3M7XG5AQCAtODA5LDYgJiM0Mzs4MTMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzIHJrMzUyOF9vcHMgPSB7XG4gI2RlZmluZSBSSzM1NjhfR1JGX0dNQUMxX0NPTjFcdFx0MHgwMzhjXG4gXG4gLyogUkszNTY4X0dSRl9HTUFDMF9DT04xIFx1MDAyNlx1MDAyNiBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgKi9cbiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUlcdFx0R1JGX0NMUl9CSVQoNylcbiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSVx0XHRHUkZfQklUKDcpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxcdFx0XHRHUkZfQklUKDMpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxfQ0xSXHRcdEdSRl9DTFJfQklUKDMpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFXHRcdEdSRl9CSVQoMSlcbkBAIC04MzYsNiAmIzQzOzg0MiwxNiBAQCBzdGF0aWMgaW50IHJrMzU2OF9pbml0KHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcmszNTY4X3NldF90b19ybWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGNvbjE7XG4mIzQzO1xuJiM0MztcdGNvbjEgPSAoYnNwX3ByaXYtXHUwMDNlaWQgPT0gMSkgPyBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgOlxuJiM0MztcdFx0XHRcdCAgICAgUkszNTY4X0dSRl9HTUFDMF9DT04xO1xuJiM0MztcbiYjNDM7XHRyZWdtYXBfd3JpdGUoYnNwX3ByaXYtXHUwMDNlZ3JmLCBjb24xLCBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdFx0XHRpbnQgdHhfZGVsYXksIGludCByeF9kZWxheSlcbiB7XG5AQCAtODUxLDE5ICYjNDM7ODY3LDMxIEBAIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdCAgICAgUkszNTY4X0dNQUNfQ0xLX1RYX0RMX0NGRyh0eF9kZWxheSkpO1xuIFxuIFx0cmVnbWFwX3dyaXRlKGJzcF9wcml2LVx1MDAzZWdyZiwgY29uMSxcbiYjNDM7XHRcdCAgICAgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJIHxcbiBcdFx0ICAgICBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFIHxcbiBcdFx0ICAgICBSSzM1NjhfR01BQ19UWENMS19ETFlfRU5BQkxFKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fc2dtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgY29uMTtcbiYjNDM7XG4mIzQzO1x0Y29uMSA9IChic3BfcHJpdi1cdTAwM2VpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6XG4mIzQzO1x0XHRcdFx0ICAgICBSSzM1NjhfR1JGX0dNQUMwX0NPTjE7XG4mIzQzO1xuJiM0MztcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cdTAwM2VncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzIHJrMzU2OF9vcHMgPSB7XG4gXHQuaW5pdCA9IHJrMzU2OF9pbml0LFxuJiM0MztcdC5zZXRfdG9fcm1paSA9IHJrMzU2OF9zZXRfdG9fcm1paSxcbiBcdC5zZXRfdG9fcmdtaWkgPSByazM1Njhfc2V0X3RvX3JnbWlpLFxuJiM0MztcdC5zZXRfdG9fc2dtaWkgPSByazM1Njhfc2V0X3RvX3NnbWlpLFxuJiM0MztcbiBcdC5zZXRfc3BlZWQgPSBya19zZXRfY2xrX21hY19zcGVlZCxcbiBcbiBcdC5nbWFjX3BoeV9pbnRmX3NlbF9tYXNrID0gR0VOTUFTS19VMTYoNiwgNCksXG4gXG4tXHQuc3VwcG9ydHNfcm1paSA9IHRydWUsXG4tXG4gXHQucmVnc192YWxpZCA9IHRydWUsXG4gXHQucmVncyA9IHtcbiBcdFx0MHhmZTJhMDAwMCwgLyogZ21hYzAgKi9cbkBAIC0xMjA4LDYgJiM0MzsxMjM2LDQzIEBAIHN0YXRpYyB2b2lkIHJrX3BoeV9wb3dlcmRvd24oc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdGRldl9lcnIoYnNwX3ByaXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsIHRvIGRpc2FibGUgcGh5LXN1cHBseVxcblwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJrX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwcml2LVx1MDAzZWRldmljZS1cdTAwM2VvZl9ub2RlO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNzX25vZGU7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3MgKnhwY3M7XG4mIzQzO1xuJiM0MztcdHBjc19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgXCYjMzQ7cGNzLWhhbmRsZVwmIzM0OywgMCk7XG4mIzQzO1x0aWYgKCFwY3Nfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHR4cGNzID0geHBjc19ya19jcmVhdGUocHJpdi1cdTAwM2VkZXZpY2UsIHBjc19ub2RlKTtcbiYjNDM7XHRvZl9ub2RlX3B1dChwY3Nfbm9kZSk7XG4mIzQzO1x0aWYgKElTX0VSUih4cGNzKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSB4cGNzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBya19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0eHBjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4mIzQzO1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0XHQgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBya19wcml2X2RhdGEgKnJrX2dtYWNfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzICpvcHMpXG5AQCAtMTMzMCw2ICYjNDM7MTM5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4gXG4gXHRic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19yZ21paSA9IG9wcy1cdTAwM2VzdXBwb3J0c19yZ21paSB8fCAhIW9wcy1cdTAwM2VzZXRfdG9fcmdtaWk7XG4gXHRic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19ybWlpID0gb3BzLVx1MDAzZXN1cHBvcnRzX3JtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3JtaWk7XG4mIzQzO1x0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfc2dtaWkgPSBvcHMtXHUwMDNlc3VwcG9ydHNfc2dtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3NnbWlpO1xuIFxuIFx0aWYgKG9wcy1cdTAwM2Vpbml0KSB7XG4gXHRcdHJldCA9IG9wcy1cdTAwM2Vpbml0KGJzcF9wcml2KTtcbkBAIC0xMzYxLDYgJiM0MzsxNDI3LDEwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19jaGVja19vcHMoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdGlmICghYnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfcm1paSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4mIzQzO1x0XHRpZiAoIWJzcF9wcml2LVx1MDAzZXN1cHBvcnRzX3NnbWlpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X2Vycihic3BfcHJpdi1cdTAwM2VkZXYsXG4gXHRcdFx0XCYjMzQ7dW5zdXBwb3J0ZWQgaW50ZXJmYWNlICVkXCYjMzQ7LCBic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UpO1xuQEAgLTEzNzksMTYgJiM0MzsxNDQ5LDE5IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiYjNDM7XHRyZXQgPSBnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIHRydWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoYnNwX3ByaXYtXHUwMDNlcGh5X2lmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbiYjNDM7XHRcdGdvdG8gc2V0X21vZGU7XG4mIzQzO1xuIFx0cmV0ID0gcmtfZ2V0X3BoeV9pbnRmX3NlbChic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXG4gXHRpbnRmID0gcmV0O1xuIFxuLVx0cmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4gXHRpZiAoYnNwX3ByaXYtXHUwMDNlZ21hY19waHlfaW50Zl9zZWxfbWFzayB8fFxuIFx0ICAgIGJzcF9wcml2LVx1MDAzZWdtYWNfcm1paV9tb2RlX21hc2spIHtcbiBcdFx0LyogSWYgZGVmaW5lZCwgZW5jb2RlIHRoZSBwaHlfaW50Zl9zZWwgdmFsdWUgKi9cbkBAIC0xMzk5LDEwICYjNDM7MTQ3Miw4IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRcdFx0ICAgICAgYnNwX3ByaXYtXHUwMDNlZ21hY19ybWlpX21vZGVfbWFzayk7XG4gXG4gXHRcdHJldCA9IHJrX3dyaXRlX2dtYWNfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH1cbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXHR9XG4gXG4gXHRpZiAoYnNwX3ByaXYtXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spIHtcbkBAIC0xNDEwLDEzICYjNDM7MTQ4MSwxMiBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0XHRcdCAgICAgYnNwX3ByaXYtXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spO1xuIFxuIFx0XHRyZXQgPSBya193cml0ZV9jbG9ja19ncmZfcmVnKGJzcF9wcml2LCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcdH1cbiBcbi1cdC8qcm1paSBvciByZ21paSovXG4mIzQzO3NldF9tb2RlOlxuJiM0MztcdC8qIHJtaWksIHJnbWlpLCBzZ21paSAqL1xuIFx0c3dpdGNoIChic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UpIHtcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuIFx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O2luaXQgZm9yIFJHTUlJXFxuXCYjMzQ7KTtcbkBAIC0xNDQ3LDE1ICYjNDM7MTUxNywyMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0aWYgKGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fcm1paSlcbiBcdFx0XHRic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3JtaWkoYnNwX3ByaXYpO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbiYjNDM7XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7aW5pdCBmb3IgU0dNSUlcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fc2dtaWkpXG4mIzQzO1x0XHRcdGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fc2dtaWkoYnNwX3ByaXYpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7Tk8gaW50ZXJmYWNlIGRlZmluZWQhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFx0fVxuIFxuIFx0cmV0ID0gcmtfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcbiBcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTtcbiBcbkBAIC0xNDYzLDYgJiM0MzsxNTM4LDEwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlaW50ZWdyYXRlZF9waHlfcG93ZXJ1cChic3BfcHJpdik7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Nsa19kaXNhYmxlOlxuJiM0MztcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJrX2dtYWNfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmdtYWMpXG5AQCAtMTQ4Niw2ICYjNDM7MTU2NSw5IEBAIHN0YXRpYyB2b2lkIHJrX2dldF9pbnRlcmZhY2VzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCAqYnNwX3ByaXYsXG4gXG4gXHRpZiAocmstXHUwMDNlc3VwcG9ydHNfcm1paSlcbiBcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLCBpbnRlcmZhY2VzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJrLVx1MDAzZXN1cHBvcnRzX3NnbWlpKVxuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSwgaW50ZXJmYWNlcyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcmtfc2V0X2Nsa190eF9yYXRlKHZvaWQgKmJzcF9wcml2Xywgc3RydWN0IGNsayAqY2xrX3R4X2ksXG5AQCAtMTYwMiw2ICYjNDM7MTY4NCwxNyBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHBsYXRfZGF0LVx1MDAzZXN1c3BlbmQgPSBya19nbWFjX3N1c3BlbmQ7XG4gXHRwbGF0X2RhdC1cdTAwM2VyZXN1bWUgPSBya19nbWFjX3Jlc3VtZTtcbiBcbiYjNDM7XHRpZiAocGxhdF9kYXQtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiYjNDM7XHRcdC8qIFNHTUlJIGNsb2NrIGFsd2F5cyBydW5zIGF0IDEyNSBNSHogKi9cbiYjNDM7XHRcdHBsYXRfZGF0LVx1MDAzZXNldF9jbGtfdHhfcmF0ZSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0LyogU0dNSUkgcmVxdWlyZXMgYSBQQ1MgKi9cbiYjNDM7XHRcdHBsYXRfZGF0LVx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbiYjNDM7XHRcdHBsYXRfZGF0LVx1MDAzZXBjc19pbml0ID0gcmtfcGNzX2luaXQ7XG4mIzQzO1x0XHRwbGF0X2RhdC1cdTAwM2VwY3NfZXhpdCA9IHJrX3Bjc19leGl0O1xuJiM0MztcdFx0cGxhdF9kYXQtXHUwMDNlc2VsZWN0X3BjcyA9IHJrX3NlbGVjdF9wY3M7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHBsYXRfZGF0LVx1MDAzZWJzcF9wcml2ID0gcmtfZ21hY19zZXR1cChwZGV2LCBwbGF0X2RhdCwgZGF0YSk7XG4gXHRpZiAoSVNfRVJSKHBsYXRfZGF0LVx1MDAzZWJzcF9wcml2KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocGxhdF9kYXQtXHUwMDNlYnNwX3ByaXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xuaW5kZXggMTM2MzQ5NjViYzE5YS4uMDFkZjQ3NzZlZGIzZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXG5AQCAtMzUsOCAmIzQzOzM1LDExIEBAIHN0YXRpYyBpbnQgcnpuMV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgcnpuMV9kd21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4tXHRcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnpuMV9kd21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbmluZGV4IDFkN2YwYTU3ZDI4ODkuLjZkNGJjMWZlOGY3NTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuQEAgLTUzOSw4ICYjNDM7NTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgc29jZnBnYV9kd21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4tXHRcdGx5bnhfcGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRseW54X3Bjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuJiM0MztcdHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpzb2NmcGdhX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXG5pbmRleCBhZmU5OGZmNWJkY2IwLi43Mzk2YjY4ODk5YzY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xuQEAgLTQyNiwzNSAmIzQzOzQyNiwxNCBAQCBpbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcbiBpbnQgc3RtbWFjX3Bjc19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcbi1cdHN0cnVjdCBkd194cGNzICp4cGNzID0gTlVMTDtcbi1cdGludCBhZGRyLCByZXQ7XG4tXG4tXHRkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSk7XG4tXG4tXHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KSB7XG4tXHRcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdChwcml2KTtcbi1cdH0gZWxzZSBpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgXCYjMzQ7cGNzLWhhbmRsZVwmIzM0OykpIHtcbi1cdFx0cGNzbm9kZSA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZub2RlLCBcJiMzNDtwY3MtaGFuZGxlXCYjMzQ7LCAwKTtcbi1cdFx0eHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTtcbi1cdFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XG4tXHRcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTtcbi1cdH0gZWxzZSBpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEgXHUwMDI2XHUwMDI2XG4tXHRcdCAgIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrKSB7XG4tXHRcdGFkZHIgPSBmZnMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIC0gMTtcbi1cdFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cdTAwM2VtaWksIGFkZHIpO1xuLVx0XHRyZXQgPSBQVFJfRVJSX09SX1pFUk8oeHBjcyk7XG4tXHR9IGVsc2Uge1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KVxuIFx0XHRyZXR1cm4gMDtcbi1cdH1cbiBcbiYjNDM7XHRyZXQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2luaXQocHJpdik7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVx1MDAzZWRldmljZSwgcmV0LCBcJiMzNDtObyB4UENTIGZvdW5kXFxuXCYjMzQ7KTtcbi1cbi1cdGlmICh4cGNzKVxuLVx0XHR4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtdWx0X2ZhY3RfMTAwbnMpO1xuLVxuLVx0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtXHUwMDNlZGV2aWNlLCByZXQsIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIFBDU1xcblwmIzM0Oyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNDYzLDE0ICYjNDM7NDQyLDEwIEBAIHZvaWQgc3RtbWFjX3Bjc19jbGVhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQpXG4tXHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfZXhpdChwcml2KTtcbi1cbi1cdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuJiM0MztcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbi1cdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4mIzQzO1x0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KHByaXYpO1xuIH1cbiBcbiBzdHJ1Y3Qgc3RtbWFjX2Nsa19yYXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXG5pbmRleCBlNDE3ZmQ2NmY2NjBhLi4zZGI5YjM0M2FjMGM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXG5AQCAtMTIsNiAmIzQzOzEyLDMxIEBAIGNvbmZpZyBQQ1NfWFBDU1xuIFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU3lub3BzeXNcbiBcdCAgRGVzaWduV2FyZSBYUENTIGNvbnRyb2xsZXJzLlxuIFxuJiM0MztpZiBQQ1NfWFBDU1xuJiM0MztcbiYjNDM7Y29uZmlnIFBDU19YUENTX1BMQVRGT1JNXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGRlZmF1bHQgUENTX1hQQ1NcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBHZW5lcmljIERXWFBDUyBkcml2ZXIgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbiYjMzk7dCByZXF1aXJlIGFueVxuJiM0MztcdCAgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB0byBmdW5jdGlvbiBvciBpcyB1c2luZyBwbGF0Zm9ybVxuJiM0MztcdCAgZGF0YSBmb3Igc2V0dXAuXG4mIzQzO1xuJiM0MztcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbiYjNDM7XG4mIzQzO2NvbmZpZyBQQ1NfWFBDU19ST0NLQ0hJUFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1JvY2tjaGlwIFhQQ1MgY29udHJvbGxlciBzdXBwb3J0XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCBBUkNIX1JPQ0tDSElQXG4mIzQzO1x0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxuJiM0MztcdHNlbGVjdCBHRU5FUklDX1BIWVxuJiM0MztcdHNlbGVjdCBQTV9HRU5FUklDX0RPTUFJTlNcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTdXBwb3J0IGZvciBYUENTIGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszNTZ4IFNvQy5cbiYjNDM7XG4mIzQzO1x0ICBJZiB5b3UgaGF2ZSBhIFJvY2tjaGlwIFNvQyB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXG4mIzQzO1xuJiM0MztlbmRpZiAjIFBDU19YUENTXG4mIzQzO1xuIGNvbmZpZyBQQ1NfTFlOWFxuIFx0dHJpc3RhdGVcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcbmluZGV4IDRmNzkyMDYxOGI5MDAuLmY5ZjZjZjI1NzhkNzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxuQEAgLTEsMTAgJiM0MzsxLDExIEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICMgTWFrZWZpbGUgZm9yIExpbnV4IFBDUyBkcml2ZXJzXG4gXG4tcGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpXHQ6PSBwY3MteHBjcy5vIHBjcy14cGNzLXBsYXQubyBcXFxuLVx0XHRcdFx0ICAgcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gub1xuJiM0MztwY3NfeHBjcy0kKENPTkZJR19QQ1NfWFBDUylcdDo9IHBjcy14cGNzLm8gcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gub1xuIFxuIG9iai0kKENPTkZJR19QQ1NfWFBDUylcdFx0JiM0Mzs9IHBjc194cGNzLm9cbiYjNDM7b2JqLSQoQ09ORklHX1BDU19YUENTX1BMQVRGT1JNKSAmIzQzOz0gcGNzLXhwY3MtcGxhdC5vXG4mIzQzO29iai0kKENPTkZJR19QQ1NfWFBDU19ST0NLQ0hJUCkgJiM0Mzs9IHBjcy14cGNzLXJrLm9cbiBvYmotJChDT05GSUdfUENTX0xZTlgpXHRcdCYjNDM7PSBwY3MtbHlueC5vXG4gb2JqLSQoQ09ORklHX1BDU19NVEtfTFlOWEkpXHQmIzQzOz0gcGNzLW10ay1seW54aS5vXG4gb2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpXHQmIzQzOz0gcGNzLXJ6bjEtbWlpYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ1ZTBmMjJjOTczYzJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXG5AQCAtMCwwICYjNDM7MSw1NzMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyXG4mIzQzOyAqXG4mIzQzOyAqIEJhc2VkIG9uIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIFhQQ1MgcGxhdGZvcm0gZHJpdmVyLlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQgU2VyZ2UgU2VtaW5cbiYjNDM7ICpcbiYjNDM7ICogQWRhcHRlZCBmb3IgUm9ja2NoaXAgU29Dcywgd2l0aCByZWZlcmVuY2UgdG8gdGhlIFJvY2tjaGlwIE9FTSBkcml2ZXIuXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2lhIFByYW50XG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21hdGguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9kb21haW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWUuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cGNzLXhwY3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGR3X3hwY3Nfcmsge1xuJiM0MztcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cztcbiYjNDM7XHR2b2lkIF9faW9tZW0gKnJlZ19iYXNlO1xuJiM0MztcdHN0cnVjdCBwaHkgKnNlcmRlc19waHk7XG4mIzQzO1x0c3RydWN0IGNsayAqY3NyX2NsaztcbiYjNDM7XHRzdHJ1Y3QgY2xrICplZWVfY2xrO1xuJiM0MztcdHU4IGVlZV9tdWx0X2ZhY3Q7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgcHRyZGlmZl90IHhwY3NfcmtfYWRkcl9mb3JtYXQoaW50IGRldiwgaW50IHJlZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBGSUVMRF9QUkVQKDB4NzAwMDAsIGRldikgfCBGSUVMRF9QUkVQKDB4ZmZmZiwgcmVnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3JlYWRfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZylcbiYjNDM7e1xuJiM0MztcdHB0cmRpZmZfdCBjc3I7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Y3NyID0geHBjc19ya19hZGRyX2Zvcm1hdChkZXYsIHJlZyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkbChweHBjcy1cdTAwM2VyZWdfYmFzZSAmIzQzOyAoY3NyIFx1MDAzY1x1MDAzYyAyKSkgXHUwMDI2IDB4ZmZmZjtcbiYjNDM7XG4mIzQzO1x0cG1fcnVudGltZV9wdXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9yZWcoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0cHRyZGlmZl90IGNzcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRjc3IgPSB4cGNzX3JrX2FkZHJfZm9ybWF0KGRldiwgcmVnKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHdyaXRlbCh2YWwsIHB4cGNzLVx1MDAzZXJlZ19iYXNlICYjNDM7IChjc3IgXHUwMDNjXHUwMDNjIDIpKTtcbiYjNDM7XG4mIzQzO1x0cG1fcnVudGltZV9wdXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkxXHQyXG4mIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTJcdDNcbiYjNDM7I2RlZmluZSBST0NLQ0hJUF9NTURfTUlJM1x0NFxuJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9QTUFQTURcdDZcbiYjNDM7I2RlZmluZSBST0NLQ0hJUF9NTURfTUlJXHQ3XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShpbnQgYWRkcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhKGFkZHIgXHUwMDNjIDAgfHwgYWRkciBcdTAwM2UgMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChkZXYpIHtcbiYjNDM7XHRjYXNlIE1ESU9fTU1EX1BNQVBNRDpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xuJiM0MztcdGNhc2UgTURJT19NTURfVkVORDI6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FTlhJTztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVhZHMgYXJlIHJlZGlyZWN0ZWQgYnkgaGFyZHdhcmUgdG8gdGhlIHBvcnQmIzM5O3MgcmVhZC1vbmx5IG1pcnJvcjtcbiYjNDM7XHQgKiBvbmx5IHdyaXRlcyBoYXZlIHRvIGJlIHRhcmdldGVkIGF0IE1JSSAoc2VlIHRoZSB3cml0ZSBwYXRoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2l0Y2ggKGFkZHIpIHtcbiYjNDM7XHRjYXNlIDA6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyO1xuJiM0MztcdGNhc2UgMzpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGRldikge1xuJiM0MztcdGNhc2UgTURJT19NTURfUE1BUE1EOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9QTUFQTUQ7XG4mIzQzO1x0Y2FzZSBNRElPX01NRF9WRU5EMjpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGVzZSByZWdpc3RlcnMgcGh5c2ljYWxseSBsaXZlIG9ubHkgaW4gTUlJICh0aGUgbWFuYWdlbWVudCBwb3J0KS5cbiYjNDM7XHQgKiBQb3J0cyAxLTMgZXhwb3NlIHJlYWQtb25seSBtaXJyb3JzIG9mIHRoZXNlIGJpdHMsIHNvIHdyaXRlcyBtdXN0XG4mIzQzO1x0ICogYWx3YXlzIHRhcmdldCBNSUk7IHRoZSByZWFkIHBhdGggcmVtYXBzIHBlciBhZGRyZXNzIGFuZCB0aGVcbiYjNDM7XHQgKiBoYXJkd2FyZSByZWRpcmVjdHMgdG8gdGhlIHBvcnQmIzM5O3MgbWlycm9yLlxuJiM0MztcdCAqL1xuJiM0MztcdHN3aXRjaCAocmVnKSB7XG4mIzQzO1x0Y2FzZSBEV19WUl9NSUlfQU5fQ1RSTDpcbiYjNDM7XHRjYXNlIERXX1ZSX01JSV9BTl9JTlRSX1NUUzpcbiYjNDM7XHRjYXNlIERXX1ZSX01JSV9FRUVfTUNUUkwwOlxuJiM0MztcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDE6XG4mIzQzO1x0Y2FzZSBEV19WUl9NSUlfRElHX0NUUkwyOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChhZGRyKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkxO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMjtcbiYjNDM7XHRjYXNlIDM6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IGRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgTURJT19NTURfVkVORDIsIHJlZyk7XG4mIzQzO1x0aWYgKGRldiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAweGZmZmY7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGRldiA9IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoYWRkciwgTURJT19NTURfVkVORDIsIHJlZyk7XG4mIzQzO1x0aWYgKGRldiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpO1xuJiM0MztcdGlmIChkZXYgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gMHhmZmZmO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geHBjc19ya19yZWFkX3JlZyhweHBjcywgZGV2LCByZWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0ZGV2ID0geHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7XG4mIzQzO1x0aWYgKGRldiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGR3X3hwY3NfcmsgKnhwY3NfcmtfY3JlYXRlX2RhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbiYjNDM7XG4mIzQzO1x0cHhwY3MgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqcHhwY3MpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXB4cGNzKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdHB4cGNzLVx1MDAzZXBkZXYgPSBwZGV2O1xuJiM0MztcbiYjNDM7XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHB4cGNzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHB4cGNzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfc2VyZGVzX3BoeV9pbml0KHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRweHBjcy1cdTAwM2VzZXJkZXNfcGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgXCYjMzQ7c2VyZGVzXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGdldCBTZXJEZXMgUEhZXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9mZih2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0cGh5X3Bvd2VyX29mZihweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbiYjNDM7XHRwaHlfZXhpdChweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbiYjNDM7XG4mIzQzO1x0ZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb24oc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgcG93ZXIgZG9tYWluIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGVuYWJsZWQsIHdoaWNoIGFsbG93cyB1cyB0b1xuJiM0MztcdCAqIGR5bmFtaWNhbGx5IHR1cm4gdGhlIENTUiBjbG9jayBvbi9vZmYgdXNpbmcgUE0gd2hpbGUga2VlcGluZyB0aGUgUENTXG4mIzQzO1x0ICogcG93ZXJlZCBvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIHRydWUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gcG93ZXIgb24gcG93ZXItZG9tYWluc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X2luaXQocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBpbml0IFNlckRlcyBQSFlcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBwbV9kb21haW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcG93ZXJfb24ocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBwb3dlciBvbiBTZXJEZXMgUEhZXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gc2VyZGVzX3BoeTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9mZiwgcHhwY3MpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bSBmb3IgU2VyRGVzIFBIWTogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztzZXJkZXNfcGh5OlxuJiM0MztcdHBoeV9leGl0KHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuJiM0MztwbV9kb21haW46XG4mIzQzO1x0ZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCBmYWxzZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfcmVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBweHBjcy1cdTAwM2VwZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApO1xuJiM0MztcdGlmICghcmVzKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7Tm8gcmVnLXNwYWNlIGZvdW5kXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJlc291cmNlX3NpemUocmVzKSBcdTAwM2MgU1pfMk0pIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtJbnZhbGlkIHJlZy1zcGFjZSBzaXplXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHhwY3MtXHUwMDNlcmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xuJiM0MztcdGlmIChJU19FUlIocHhwY3MtXHUwMDNlcmVnX2Jhc2UpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIG1hcCByZWctc3BhY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocHhwY3MtXHUwMDNlcmVnX2Jhc2UpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHhwY3NfcmtfZXhpdF9jbGsodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRhdGE7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZChkZXYpO1xuJiM0MztcdGNsa19kaXNhYmxlX3VucHJlcGFyZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfY2xrKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcbiYjNDM7XHR1NjQgbXVsdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRweHBjcy1cdTAwM2Vjc3JfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgXCYjMzQ7Y3NyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZWNzcl9jbGspKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZWNzcl9jbGspLFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byBnZXQgQ1NSIGNsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cHhwY3MtXHUwMDNlZWVlX2NsayA9IGRldm1fY2xrX2dldChkZXYsIFwmIzM0O2VlZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VlZWVfY2xrKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy1cdTAwM2VlZWVfY2xrKSxcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgdG8gZ2V0IEVFRSBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBFRUUgY2xvY2tcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpO1xuJiM0MztcdHBtX3J1bnRpbWVfZW5hYmxlKGRldik7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHhwY3NfcmtfZXhpdF9jbGssIHB4cGNzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIEVFRSBjbG9jazogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDb21wdXRlIHRoZSBtdWx0aXBsaWVyIGZvciB0aGUgRUVFIGNsb2NrIHNvIHRoYXRcbiYjNDM7XHQgKiBjbGtfZWVlX3BlcmlvZCAqIChtdWx0X2ZhY3QgJiM0MzsgMSkgZmFsbHMgd2l0aGluIDgwLi4xMjAgbnMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBPbiBSSzM1NjgsIGNsa194cGNzX2VlZSBpcyBtdXhlZCBiZXR3ZWVuIGdwbGwyMDAgKDIwMCBNSHosIDUgbnMpXG4mIzQzO1x0ICogYW5kIGNwbGwxMjUgKDEyNSBNSHosIDggbnMpLCBzZWxlY3RlZCBieSBDUlVfQ0xLU0VMX0NPTjI5IGJpdCAxMy5cbiYjNDM7XHQgKiBUaGUgcmVzZXQgdmFsdWUgaXMgMCAoMjAwIE1IeiksIGJ1dCBkZXJpdmUgdGhlIHZhbHVlIGF0IHJ1bnRpbWUgdG9cbiYjNDM7XHQgKiBzdGF5IGNvcnJlY3QgaWYgdGhlIG11eCBpcyBjaGFuZ2VkIGJ5IGEgYm9hcmQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBVc2UgYSA2NC1iaXQgaW50ZXJtZWRpYXRlOiBvbiAzMi1iaXQgYnVpbGRzLCAxMDAgKiAyMDAwMDAwMDBcbiYjNDM7XHQgKiBkb2VzIG5vdCBmaXQgaW4gdW5zaWduZWQgbG9uZy4gQ2xhbXAgdG8gdGhlIDQtYml0XG4mIzQzO1x0ICogRFdfVlJfTUlJX0VFRV9NVUxUX0ZBQ1RfMTAwTlMgZmllbGQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmF0ZSA9IGNsa19nZXRfcmF0ZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbiYjNDM7XHRpZiAoIXJhdGUpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsIFwmIzM0O0ludmFsaWQgRUVFIGNsb2NrIHJhdGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtdWx0ID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKDEwMFVMTCAqIHJhdGUsIE5TRUNfUEVSX1NFQykgLSAxO1xuJiM0MztcdHB4cGNzLVx1MDAzZWVlZV9tdWx0X2ZhY3QgPSBtaW5fdCh1NjQsIG11bHQsIDE1KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfYnVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0YXRpYyBhdG9taWNfdCBpZCA9IEFUT01JQ19JTklUKC0xKTtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGJ1cyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKGRldiwgMCk7XG4mIzQzO1x0aWYgKCFidXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0YnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtSb2NrY2hpcCBEVyBYUENTIE1DSS9BUEIzXCYjMzQ7O1xuJiM0MztcdGJ1cy1cdTAwM2VyZWFkID0geHBjc19ya19yZWFkX2MyMjtcbiYjNDM7XHRidXMtXHUwMDNld3JpdGUgPSB4cGNzX3JrX3dyaXRlX2MyMjtcbiYjNDM7XHRidXMtXHUwMDNlcmVhZF9jNDUgPSB4cGNzX3JrX3JlYWRfYzQ1O1xuJiM0MztcdGJ1cy1cdTAwM2V3cml0ZV9jNDUgPSB4cGNzX3JrX3dyaXRlX2M0NTtcbiYjNDM7XHRidXMtXHUwMDNlcGh5X21hc2sgPSB+MDtcbiYjNDM7XHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuJiM0MztcdGJ1cy1cdTAwM2Vwcml2ID0gcHhwY3M7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLFxuJiM0MztcdFx0IFwmIzM0O3JvY2tjaGlwX2R3eHBjcy0leFwmIzM0OywgYXRvbWljX2luY19yZXR1cm4oXHUwMDI2aWQpKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNRElPLWJ1cyBoZXJlIHNlcnZlcyBhcyBqdXN0IGEgYmFjay1lbmQgZW5naW5lIGFic3RyYWN0aW5nIG91dFxuJiM0MztcdCAqIHRoZSBNRElPIGFuZCBNQ0kvQVBCMyBJTyBpbnRlcmZhY2VzIHV0aWxpemVkIGZvciB0aGUgUm9ja2NoaXAgRFdYUENTIENTUnNcbiYjNDM7XHQgKiBhY2Nlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBNRElPIGJ1c1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHhwY3MtXHUwMDNlYnVzID0gYnVzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRweHBjcyA9IHhwY3NfcmtfY3JlYXRlX2RhdGEocGRldik7XG4mIzQzO1x0aWYgKElTX0VSUihweHBjcykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihweHBjcyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIFhQQ1MgbWF5IGJlIGF0dGFjaGVkIHRvIGEgcG93ZXIgZG9tYWluIChlLmcuIFBEX1BJUEUpLiBUaGUgZG9tYWluXG4mIzQzO1x0ICogbXVzdCBiZSBwb3dlcmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQyB3aWxsXG4mIzQzO1x0ICogdHJpZ2dlciBhIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0IChTRXJyb3IpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQWNjZXNzaW5nIHRoZSBYUENTIHJlZ2lzdGVycyBhbHNvIHJlcXVpcmVzIGEgVFggY2xvY2sgZnJvbSB0aGUgU2VyRGVzLFxuJiM0MztcdCAqIHdoaWNoIGlzIG5lZWRlZCBmb3IgdGhlIHNvZnQgcmVzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X2luaXQocHhwY3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihweHBjcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHhwY3NfcmtfaW5pdF9yZXMocHhwY3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB4cGNzX3JrX2luaXRfY2xrKHB4cGNzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geHBjc19ya19pbml0X2J1cyhweHBjcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4cGNzX3JrX29mX2lkc1tdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyb2NrY2hpcCxyazM1NjgteHBjc1wmIzM0OyB9LFxuJiM0MztcdHsgLyogc2VudGluZWwgKi8gfSxcbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHBjc19ya19vZl9pZHMpO1xuJiM0MztcbiYjNDM7c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwY3NfbnA7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xuJiM0MztcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuJiM0MztcdHUzMiBwb3J0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4mIzQzO1xuJiM0MztcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZwb3J0KSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKChpbnQpcG9ydCkpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIFhQQ1MgcGRldiBpcyBhdHRhY2hlZCB0byB0aGUgcGFyZW50IG5vZGUgKi9cbiYjNDM7XHRwY3NfbnAgPSBvZl9nZXRfcGFyZW50KG5wKTtcbiYjNDM7XHRpZiAoIXBjc19ucClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGNzX25wKSkge1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQocGNzX25wKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFvZl9tYXRjaF9ub2RlKHhwY3Nfcmtfb2ZfaWRzLCBwY3NfbnApKSB7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChwY3NfbnApO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwY3NfbnApO1xuJiM0MztcdG9mX25vZGVfcHV0KHBjc19ucCk7XG4mIzQzO1x0aWYgKCFwZGV2KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXHUwMDI2cGRldi1cdTAwM2VkZXYsIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHtcbiYjNDM7XHRcdHB1dF9kZXZpY2UoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdGlmICghcHhwY3MgfHwgIXB4cGNzLVx1MDAzZWJ1cykge1xuJiM0MztcdFx0ZGV2aWNlX2xpbmtfcmVtb3ZlKGRldiwgXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0cHV0X2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHB4cGNzLVx1MDAzZWJ1cywgKGludClwb3J0KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHhwY3MpKSB7XG4mIzQzO1x0XHRkZXZpY2VfbGlua19yZW1vdmUoZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdHJldHVybiB4cGNzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eHBjc19jb25maWdfZWVlX211bHRfZmFjdCh4cGNzLCBweHBjcy1cdTAwM2VlZWVfbXVsdF9mYWN0KTtcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRyZXR1cm4geHBjcztcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh4cGNzX3JrX2NyZWF0ZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcbiYjNDM7XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtXHUwMDNlY3NyX2Nsayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtXHUwMDNlY3NyX2Nsayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUlVOVElNRV9ERVZfUE1fT1BTKHhwY3NfcmtfcG1fb3BzLFxuJiM0MztcdFx0XHQgICB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZCxcbiYjNDM7XHRcdFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3Jlc3VtZSxcbiYjNDM7XHRcdFx0ICAgTlVMTCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4cGNzX3JrX2RyaXZlciA9IHtcbiYjNDM7XHQucHJvYmUgPSB4cGNzX3JrX3Byb2JlLFxuJiM0MztcdC5kcml2ZXIgPSB7XG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3JrX3hwY3MtZHd4cGNzXCYjMzQ7LFxuJiM0MztcdFx0LnBtID0gcG1fcHRyKFx1MDAyNnhwY3NfcmtfcG1fb3BzKSxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZSA9IHhwY3Nfcmtfb2ZfaWRzLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeHBjc19ya19kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JvY2tjaGlwIFhQQ1MgcGxhdGZvcm0gZGV2aWNlIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Q29pYSBQcmFudCBcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXG5pbmRleCAwMzM3ZTJiY2MwMTI1Li44YzM4NzViNjk4NWI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXG5AQCAtNzYxLDcgJiM0Mzs3NjEsOSBAQCBzdGF0aWMgaW50IHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxuIFx0ICogICAgRFcgeFBDUyB1c2VkIHdpdGggRFcgRVFvUyBNQUMgaXMgYWx3YXlzIE1BQyBzaWRlIFNHTUlJLlxuIFx0ICogNCkgVlJfTUlJX0RJR19DVFJMMSBCaXQoOSkgW01BQ19BVVRPX1NXXSA9IDFiIChBdXRvbWF0aWNcbiBcdCAqICAgIHNwZWVkL2R1cGxleCBtb2RlIGNoYW5nZSBieSBIVyBhZnRlciBTR01JSSBBTiBjb21wbGV0ZSlcbi1cdCAqIDUpIFZSX01JSV9NTURfQ1RSTCBCaXQoMTIpIFtBTl9FTkFCTEVdID0gMWIgKEVuYWJsZSBTR01JSSBBTilcbiYjNDM7XHQgKiA1KSBWUl9NSUlfQU5fSU5UUl9TVFMgPSAweDAgKENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzKVxuJiM0MztcdCAqIDYpIFZSX01JSV9NTURfQ1RSTCBCaXQoMTIpIFtBTl9FTkFCTEVdID0gMWIgKEVuYWJsZSBTR01JSSBBTilcbiYjNDM7XHQgKiAgICBWUl9NSUlfTU1EX0NUUkwgQml0KDkpIFtBTl9SRVNUQVJUXSA9IDFiIChSZXN0YXJ0IFNHTUlJIEFOKVxuIFx0ICpcbiBcdCAqIE5vdGUgdGhhdCBWUl9NSUlfTU1EX0NUUkwgaXMgTUlJX0JNQ1IuXG4gXHQgKlxuQEAgLTc2OSw3ICYjNDM7NzcxLDE0IEBAIHN0YXRpYyBpbnQgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsXG4gXHQgKlx0IFNSX01JSV9BTl9BRFYuIE1BQyBzaWRlIFNHTUlJIHJlY2VpdmVzIEFOIFR4IENvbmZpZyBmcm9tXG4gXHQgKlx0IFBIWSBhYm91dCB0aGUgbGluayBzdGF0ZSBjaGFuZ2UgYWZ0ZXIgQzI4IEFOIGlzIGNvbXBsZXRlZFxuIFx0ICpcdCBiZXR3ZWVuIFBIWSBhbmQgTGluayBQYXJ0bmVyLiBUaGVyZSBpcyBhbHNvIG5vIG5lZWQgdG9cbi1cdCAqXHQgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSS5cbiYjNDM7XHQgKlx0IHRyaWdnZXIgQU4gcmVzdGFydCBmb3IgTUFDLXNpZGUgU0dNSUkgb24gbW9zdCBkZXZpY2VzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90ZTogV2hpbGUgdGhlIERlc2lnbldhcmUgZGF0YWJvb2sgc3RhdGVzIHRoYXQgQU4gcmVzdGFydCBpc1xuJiM0MztcdCAqXHQgbm90IG5lZWRlZCBmb3IgTUFDIHNpZGUgU0dNSUksIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuXG4mIzQzO1x0ICpcdCBSb2NrY2hpcCBSSzM1NjgpIGV4aGliaXQgYSB0aW1pbmcgcXVpcmsgd2hlbiBpbnRlZ3JhdGVkIHdpdGhcbiYjNDM7XHQgKlx0IHBoeWxpbmsgYW5kIGRvIG5vdCByZXN0YXJ0IEFOIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgbGlua1xuJiM0MztcdCAqXHQgY29tZXMgYmFjayB1cC4gQW4gZXhwbGljaXQgQU4gcmVzdGFydCBpcyByZXF1aXJlZCBvbiB0aG9zZVxuJiM0MztcdCAqXHQgcGFydHMgdG8gcmVjb3ZlciB0aGUgbGluayBhZnRlciBhIGRpc2Nvbm5lY3QuXG4gXHQgKi9cbiBcdG1kaW9fY3RybCA9IHhwY3NfcmVhZCh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IpO1xuIFx0aWYgKG1kaW9fY3RybCBcdTAwM2MgMClcbkBAIC04MTYsOSAmIzQzOzgyNSwxNCBAQCBzdGF0aWMgaW50IHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiYjNDM7XHQvKiBDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cyAqL1xuJiM0MztcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIERXX1ZSX01JSV9BTl9JTlRSX1NUUywgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0aWYgKG5lZ19tb2RlID09IFBIWUxJTktfUENTX05FR19JTkJBTkRfRU5BQkxFRClcbiBcdFx0cmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsXG4tXHRcdFx0XHQgbWRpb19jdHJsIHwgQk1DUl9BTkVOQUJMRSk7XG4mIzQzO1x0XHRcdFx0IG1kaW9fY3RybCB8IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xMDkzLDkgJiM0MzsxMTA3LDE4IEBAIHN0YXRpYyBpbnQgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cbi1cdGlmIChzdGF0ZS1cdTAwM2Vhbl9jb21wbGV0ZSlcbi1cdFx0eHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcbiYjNDM7XHRpZiAoc3RhdGUtXHUwMDNlYW5fY29tcGxldGUpIHtcbiYjNDM7XHRcdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cbiYjNDM7XHRcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIERXX1ZSX01JSV9BTl9JTlRSX1NUUywgMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIEluaXRpYXRlIHRoZSBuZXh0IHJvdW5kIG9mIEFOICovXG4mIzQzO1x0XHRyZXQgPSB4cGNzX21vZGlmeSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsIEJNQ1JfQU5SRVNUQVJULFxuJiM0MztcdFx0XHRcdCAgQk1DUl9BTlJFU1RBUlQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uN2I4NjdlNzUyMDA2NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3hwY3NfcGh5X3JlYWR5O1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfcGNpZTFsMF9zZWw7XG4gXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwxX3NlbDtcbiYjNDM7XHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9zZ21paV9tYWNfc2VsO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMF9wb3J0X2VuO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMV9wb3J0X2VuO1xuIH07XG5AQCAtMjEyLDYgJiM0MzsyMTMsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2IHtcbiBcdGJvb2wgZW5hYmxlX3NzYztcbiBcdGJvb2wgZXh0X3JlZmNsaztcbiBcdHN0cnVjdCBjbGsgKnJlZmNsaztcbiYjNDM7XHR1MzIgc2dtaWlfbWFjX3NlbDtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2LFxuQEAgLTM3NSw2ICYjNDM7Mzc3LDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9jb21icGh5X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlcbiBcbiBcdHByaXYtXHUwMDNlZXh0X3JlZmNsayA9IGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KGRldiwgXCYjMzQ7cm9ja2NoaXAsZXh0LXJlZmNsa1wmIzM0Oyk7XG4gXG4mIzQzO1x0cHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsID0gMTtcbiYjNDM7XHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcJiMzNDtyb2NrY2hpcCxzZ21paS1tYWMtc2VsXCYjMzQ7LCBcdTAwMjZwcml2LVx1MDAzZXNnbWlpX21hY19zZWwpO1xuJiM0MztcbiBcdHByaXYtXHUwMDNlcGh5X3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgXCYjMzQ7cGh5XCYjMzQ7KTtcbiBcdC8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi9cbiBcdGlmIChQVFJfRVJSKHByaXYtXHUwMDNlcGh5X3JzdCkgPT0gLUVOT0VOVClcbkBAIC04NzMsNiAmIzQzOzg3OCw4IEBAIHN0YXRpYyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBQSFlfVFlQRV9TR01JSTpcbiYjNDM7XHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaXBlX2dyZiwgXHUwMDI2Y2ZnLVx1MDAzZXBpcGVfc2dtaWlfbWFjX3NlbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsIFx1MDAzZSAwKTtcbiBcdFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVx1MDAzZXBpcGVfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV94cGNzX3BoeV9yZWFkeSwgdHJ1ZSk7XG4gXHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaHlfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV9waHltb2RlX3NlbCwgdHJ1ZSk7XG4gXHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaHlfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV9zZWxfcXNnbWlpLCB0cnVlKTtcbkBAIC05ODQsNiAmIzQzOzk5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcgcmszNTY4X2NvbWJwaHlfZ3JmY2ZncyA9IHtcbiBcdC5jb24zX2Zvcl9zYXRhXHRcdD0geyAweDAwMGMsIDE1LCAwLCAweDAwLCAweDQ0MDcgfSxcbiBcdC8qIHBpcGUtZ3JmICovXG4gXHQucGlwZV9jb24wX2Zvcl9zYXRhXHQ9IHsgMHgwMDAwLCAxNSwgMCwgMHgwMCwgMHgyMjIwIH0sXG4mIzQzO1x0LnBpcGVfc2dtaWlfbWFjX3NlbFx0PSB7IDB4MDA0MCwgMSwgMSwgMHgwMCwgMHgwMSB9LFxuIFx0LnBpcGVfeHBjc19waHlfcmVhZHlcdD0geyAweDAwNDAsIDIsIDIsIDB4MDAsIDB4MDEgfSxcbiBcdC51M290ZzBfcG9ydF9lblx0XHQ9IHsgMHgwMTA0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSxcbiBcdC51M290ZzFfcG9ydF9lblx0XHQ9IHsgMHgwMTQ0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIGIvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4NzIzZDViZDc1Y2Ncbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcbkBAIC0wLDAgJiM0MzsxLDExIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXG4mIzQzOyNkZWZpbmUgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZHdfeHBjcyAqeHBjc19ya19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgUm9ja2NoaXAgUkszNTY4IERlc2lnbldhcmUgRXRoZXJuZXQgUENTIChYUENTKSBhbmQgcmVmYWN0b3JzIFBDUyBpbml0aWFsaXphdGlvbiBpbiB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlciBmYW1pbHkgKGR3bWFjLXJrLCBkd21hYy1pbnRlbCwgZHdtYWMtcmVuZXNhcywgZHdtYWMtc29jZnBnYSwgZHdtYWMtcnpuMSkuIEFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpOiBkb2N1bWVudGF0aW9uL2RldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBhcm02NCBEVFMgY2hhbmdlcyBhcmUgbm9uLWV4ZWN1dGFibGUgb24gYW1kNjQsIGFuZCB0aGUgYWZmZWN0ZWQgZHJpdmVycyAoc3RtbWFjIGR3bWFjIHZhcmlhbnRzIGFuZCBTeW5vcHN5cyBEVyBYUENTKSByZXF1aXJlIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIG9yIHBoeXNpY2FsIEludGVsL1JvY2tjaGlwL1JlbmVzYXMgc2lsaWNvbiBub3QgZW11bGF0ZWQgYnkgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMTFmYzIxNWZhYmQ1ZmE5NTE3OWNjMzhiZDBiYTgxMWU2MGY5OTljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTY6MjU6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43MDNmY2ZmMGUzZjcwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbApAQCAtMCwwICYjNDM7MSwxMTAgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogUm9ja2NoaXAgUkszNTY4IFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUENTCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIENvaWEgUHJhbnQgJmx0O2NvaWFwcmFudEBnbWFpbC5jb20mZ3Q7CiYjNDM7CiYjNDM7ZGVzY3JpcHRpb246IHwKJiM0MzsgIFJvY2tjaGlwIFJLMzU2OCBTb0MgaW50ZWdyYXRlcyBhIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUGh5c2ljYWwKJiM0MzsgIENvZGluZyBTdWJsYXllciAoWFBDUykuCiYjNDM7ICBUaGUgUENTIHByb3ZpZGVzIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbCAoTUFDKQomIzQzOyAgYW5kIHRoZSBQaHlzaWNhbCBNZWRpdW0gQXR0YWNobWVudCAoUE1BKSBzdWJsYXllciB0aHJvdWdoIGEgTWVkaWEKJiM0MzsgIEluZGVwZW5kZW50IEludGVyZmFjZSAoR01JSSkuCiYjNDM7CiYjNDM7ICBUaGUgWFBDUyBpcyBhY2Nlc3NlZCBvdmVyIHRoZSBBUEIzIGJ1cyBhbmQgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gYQomIzQzOyAgTmFuZW5nIENvbWJvIFNlckRlcyBQSFkuCiYjNDM7ICBJdCBzdXBwb3J0cyAxMDAwQkFTRS1YLCBTR01JSSBhbmQgUVNHTUlJIG1vZGVzLgomIzQzOwomIzQzOyAgVGhlIGJsb2NrIGNvbnRhaW5zIGZvdXIgTUlJIHBvcnRzIHRoYXQgY2FuIGJlIGluZGl2aWR1YWxseSBlbmFibGVkIGFuZAomIzQzOyAgcm91dGVkIHRvIG9uZSBvZiB0aGUgRXRoZXJuZXQgR01BQyBjb250cm9sbGVycyB2aWEgdGhlIHBjcy1oYW5kbGUKJiM0MzsgIHByb3BlcnR5IGluIHRoZSBNQUMgZGV2aWNlIHRyZWUgbm9kZS4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgY29uc3Q6IHJvY2tjaGlwLHJrMzU2OC14cGNzCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICAmIzM0OyNhZGRyZXNzLWNlbGxzJiMzNDs6CiYjNDM7ICAgIGNvbnN0OiAxCiYjNDM7CiYjNDM7ICAmIzM0OyNzaXplLWNlbGxzJiMzNDs6CiYjNDM7ICAgIGNvbnN0OiAwCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEFQQjMgYnVzIGludGVyZmFjZSBjbG9jayAoY2xrX2Nzcl9pKSwgcmVxdWlyZWQgZm9yIHJlZ2lzdGVyIGFjY2VzcwomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEVFRSBjbG9jayAoY2xrX2VlZV9pKSwgcmVxdWlyZWQgZm9yIEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXQgb3BlcmF0aW9uCiYjNDM7CiYjNDM7ICBjbG9jay1uYW1lczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBjb25zdDogY3NyCiYjNDM7ICAgICAgLSBjb25zdDogZWVlCiYjNDM7CiYjNDM7ICBwaHlzOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgcGh5LW5hbWVzOgomIzQzOyAgICBjb25zdDogc2VyZGVzCiYjNDM7CiYjNDM7ICBwb3dlci1kb21haW5zOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOgomIzQzOyAgJiMzNDteZXRoZXJuZXQtcGNzLW1paUBbMC0zXSQmIzM0OzoKJiM0MzsgICAgdHlwZTogb2JqZWN0CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIE9uZSBvZiB0aGUgZm91ciBNSUkgcG9ydHMgb2YgdGhlIFhQQ1MuIFRoZSBwb3J0IGlzIGxpbmtlZCB0byBhbgomIzQzOyAgICAgIEV0aGVybmV0IE1BQyBjb250cm9sbGVyIHZpYSB0aGUgcGNzLWhhbmRsZSBwcm9wZXJ0eSBpbiB0aGUgTUFDJiMzOTtzCiYjNDM7ICAgICAgZGV2aWNlIHRyZWUgbm9kZS4KJiM0MzsKJiM0MzsgICAgcHJvcGVydGllczoKJiM0MzsgICAgICByZWc6CiYjNDM7ICAgICAgICBkZXNjcmlwdGlvbjogTUlJIHBvcnQgbnVtYmVyLgomIzQzOyAgICAgICAgZW51bTogWzAsIDEsIDIsIDNdCiYjNDM7CiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gcmVnCiYjNDM7CiYjNDM7ICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIHJlZwomIzQzOyAgLSAmIzM0OyNhZGRyZXNzLWNlbGxzJiMzNDsKJiM0MzsgIC0gJiMzNDsjc2l6ZS1jZWxscyYjMzQ7CiYjNDM7ICAtIGNsb2NrcwomIzQzOyAgLSBjbG9jay1uYW1lcwomIzQzOyAgLSBwaHlzCiYjNDM7ICAtIHBoeS1uYW1lcwomIzQzOyAgLSBwb3dlci1kb21haW5zCiYjNDM7CiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2Nsb2NrL3JrMzU2OC1jcnUuaCZndDsKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL3Bvd2VyL3JrMzU2OC1wb3dlci5oJmd0OwomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvcGh5L3BoeS5oJmd0OwomIzQzOwomIzQzOyAgICBldGhlcm5ldC1wY3NAZmRhMDAwMDAgewomIzQzOyAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3JvY2tjaGlwLHJrMzU2OC14cGNzJiMzNDs7CiYjNDM7ICAgICAgcmVnID0gJmx0OzB4ZmRhMDAwMDAgMHgyMDAwMDAmZ3Q7OwomIzQzOyAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO2NydSBQQ0xLX1hQQ1MmZ3Q7LCAmbHQ7JmFtcDtjcnUgQ0xLX1hQQ1NfRUVFJmd0OzsKJiM0MzsgICAgICBjbG9jay1uYW1lcyA9ICYjMzQ7Y3NyJiMzNDssICYjMzQ7ZWVlJiMzNDs7CiYjNDM7ICAgICAgcGh5cyA9ICZsdDsmYW1wO2NvbWJwaHkyIFBIWV9UWVBFX1NHTUlJJmd0OzsKJiM0MzsgICAgICBwaHktbmFtZXMgPSAmIzM0O3NlcmRlcyYjMzQ7OwomIzQzOyAgICAgIHBvd2VyLWRvbWFpbnMgPSAmbHQ7JmFtcDtwb3dlciBSSzM1NjhfUERfUElQRSZndDs7CiYjNDM7CiYjNDM7ICAgICAgZXRoZXJuZXQtcGNzLW1paUAwIHsKJiM0MzsgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICB9OwomIzQzOyAgICB9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yb2NrY2hpcC1kd21hYy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yb2NrY2hpcC1kd21hYy55YW1sCmluZGV4IDgwYzI1Mjg0NTM0OWMuLjY3YjIxZWE3N2VjOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcm9ja2NoaXAtZHdtYWMueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWwKQEAgLTEyMCw2ICYjNDM7MTIwLDEyIEBAIHByb3BlcnRpZXM6CiAgICAgbWF4aW11bTogMHg3RgogICAgIGRlZmF1bHQ6IDB4MTAKIAomIzQzOyAgcGNzLWhhbmRsZToKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgU3BlY2lmaWVzIGEgcmVmZXJlbmNlIHRvIGEgbm9kZSByZXByZXNlbnRpbmcgdGhlIFBDUyBkZXZpY2UKJiM0MzsgICAgICBjb25uZWN0ZWQgdG8gdGhpcyBHTUFDLiBSZXF1aXJlZCB3aGVuIHBoeS1tb2RlIGlzICYjMzQ7c2dtaWkmIzM0Oy4KJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKICAgcGh5LXN1cHBseToKICAgICBkZXNjcmlwdGlvbjogUEhZIHJlZ3VsYXRvcgogCkBAIC0xNTksNiAmIzQzOzE2NSwxNSBAQCBhbGxPZjoKICAgICAgICAgY2xvY2tzOgogICAgICAgICAgIG1pbkl0ZW1zOiA1CiAKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHBoeS1tb2RlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBjb25zdDogc2dtaWkKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gcGNzLWhhbmRsZQomIzQzOwogdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQogCiBleGFtcGxlczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sCmluZGV4IDM3OWIwOGJkOWU5N2EuLjhlODk4YmNlOWFmNzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbApAQCAtODAsNiAmIzQzOzgwLDE1IEBAIHByb3BlcnRpZXM6CiAgICAgZGVzY3JpcHRpb246CiAgICAgICBTb21lIGFkZGl0aW9uYWwgcGlwZSBzZXR0aW5ncyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBHUkYgcmVncy4KIAomIzQzOyAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyCiYjNDM7ICAgIGVudW06IFswLCAxXQomIzQzOyAgICBkZWZhdWx0OiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFNlbGVjdCBnbWFjMCBvciBnbWFjMSB0byBiZSB1c2VkIGFzIFNHTUlJIGNvbnRyb2xsZXIuCiYjNDM7ICAgICAgVGhlIGhhcmR3YXJlIHJlc2V0IHZhbHVlIGlzIEdNQUMxICgxKS4gU2V0IHRoaXMgdG8gMCB0byByb3V0ZQomIzQzOyAgICAgIFNHTUlJIHRvIEdNQUMwLgomIzQzOwogICAmIzM0OyNwaHktY2VsbHMmIzM0OzoKICAgICBjb25zdDogMQogCkBAIC0xMDUsNiAmIzQzOzExNCwxMCBAQCBhbGxPZjoKICAgICAgICAgICBtYXhJdGVtczogMQogICAgICAgICByZXNldC1uYW1lczoKICAgICAgICAgICBtYXhJdGVtczogMQomIzQzOyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogdHJ1ZQomIzQzOyAgICBlbHNlOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiBmYWxzZQogICAtIGlmOgogICAgICAgcHJvcGVydGllczoKICAgICAgICAgY29tcGF0aWJsZToKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggM2IyZWIyYTdhODlhOC4uZjUzYTUxOWRhNjI5OCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTIzNzM5LDYgJiM0MzsyMzczOSwxNSBAQCBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcm9ja2NoaXAscmszNTc2LXNhaS55YW1sCiBGOglzb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfc2FpLioKIAomIzQzO1JPQ0tDSElQIFhQQ1MgRFJJVkVSCiYjNDM7TToJQ29pYSBQcmFudCAmbHQ7Y29pYXByYW50QGdtYWlsLmNvbSZndDsKJiM0MztMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiYjNDM7TDoJbGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZwomIzQzO1M6CU1haW50YWluZWQKJiM0MztGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sCiYjNDM7RjoJZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMKJiM0MztGOglpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oCiYjNDM7CiBST0NLRVIgRFJJVkVSCiBNOglKaXJpIFBpcmtvICZsdDtqaXJpQHJlc251bGxpLnVzJmd0OwogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0cwppbmRleCA1OGMxMDUyYmE4ZWYzLi5mZGFhNGEyYTQzMjhiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0cwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0cwpAQCAtMyw2ICYjNDM7Myw3IEBACiAvZHRzLXYxLzsKIAogI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oJmd0OwogI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL3BpbmN0cmwvcm9ja2NoaXAuaCZndDsKICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9zb2Mvcm9ja2NoaXAsdm9wMi5oJmd0OwogI2luY2x1ZGUgJiMzNDtyazM1NjguZHRzaSYjMzQ7CkBAIC0yNDEsNiAmIzQzOzI0Miw3IEBAICZhbXA7Y29tYnBoeTEgewogfTsKIAogJmFtcDtjb21icGh5MiB7CiYjNDM7CXJvY2tjaGlwLHNnbWlpLW1hYy1zZWwgPSAmbHQ7MCZndDs7CiAJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiB9OwogCkBAIC0yNjAsOSAmIzQzOzI2MiwxOCBAQCAmYW1wO2NwdTMgewogCWNwdS1zdXBwbHkgPSAmbHQ7JmFtcDt2ZGRfY3B1Jmd0OzsKIH07CiAKLS8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAocmVxdWlyZSBTR01JSSkgKi8KJiM0MzsvKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKi8KICZhbXA7Z21hYzAgewotCXN0YXR1cyA9ICYjMzQ7ZGlzYWJsZWQmIzM0OzsKJiM0MzsJYXNzaWduZWQtY2xvY2tzID0gJmx0OyZhbXA7Y3J1IFNDTEtfR01BQzBfUlhfVFgmZ3Q7OwomIzQzOwlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gJmx0OyZhbXA7Y2xrX2dtYWMwX3hwY3NfbWlpJmd0OzsKJiM0MzsJbWFuYWdlZCA9ICYjMzQ7aW4tYmFuZC1zdGF0dXMmIzM0OzsKJiM0MzsJcGNzLWhhbmRsZSA9ICZsdDsmYW1wO3hwY3NfbWlpMCZndDs7CiYjNDM7CXBoeS1oYW5kbGUgPSAmbHQ7JmFtcDtzZ21paV9waHkmZ3Q7OwomIzQzOwlwaHktbW9kZSA9ICYjMzQ7c2dtaWkmIzM0OzsKJiM0MzsJcGh5LXN1cHBseSA9ICZsdDsmYW1wO3ZjY18zdjMmZ3Q7OwomIzQzOwlwaW5jdHJsLW5hbWVzID0gJiMzNDtkZWZhdWx0JiMzNDs7CiYjNDM7CXBpbmN0cmwtMCA9ICZsdDsmYW1wO2dtYWMwX21paW0mZ3Q7OwomIzQzOwlzdGF0dXMgPSAmIzM0O29rYXkmIzM0OzsKIH07CiAKIC8qIE1vdG9yY29tbSBZVDg1MjFTQyBXQU4gcG9ydCAqLwpAQCAtMzQxLDYgJiM0MzszNTIsMzYgQEAgJmFtcDtpMnMwXzhjaCB7CiAJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiB9OwogCiYjNDM7JmFtcDttZGlvMCB7CiYjNDM7CXNnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMgewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjImIzM0OzsKJiM0MzsJCXJlZyA9ICZsdDsweDMmZ3Q7OwomIzQzOwkJbWF4LXNwZWVkID0gJmx0OzEwMDAmZ3Q7OwomIzQzOwkJcmVzZXQtYXNzZXJ0LXVzID0gJmx0OzIwMDAwJmd0OzsKJiM0MzsJCXJlc2V0LWRlYXNzZXJ0LXVzID0gJmx0OzEwMDAwMCZndDs7CiYjNDM7CQlyZXNldC1ncGlvcyA9ICZsdDsmYW1wO2dwaW8zIFJLX1BDNiBHUElPX0FDVElWRV9MT1cmZ3Q7OwomIzQzOwomIzQzOwkJbGVkcyB7CiYjNDM7CQkJI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CQkJI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7CQkJbGVkQDEgewomIzQzOwkJCQlyZWcgPSAmbHQ7MSZndDs7CiYjNDM7CQkJCWNvbG9yID0gJmx0O0xFRF9DT0xPUl9JRF9BTUJFUiZndDs7CiYjNDM7CQkJCWZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjsKJiM0MzsJCQkJZGVmYXVsdC1zdGF0ZSA9ICYjMzQ7a2VlcCYjMzQ7OwomIzQzOwkJCX07CiYjNDM7CiYjNDM7CQkJbGVkQDIgewomIzQzOwkJCQlyZWcgPSAmbHQ7MiZndDs7CiYjNDM7CQkJCWNvbG9yID0gJmx0O0xFRF9DT0xPUl9JRF9HUkVFTiZndDs7CiYjNDM7CQkJCWZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjsKJiM0MzsJCQkJZGVmYXVsdC1zdGF0ZSA9ICYjMzQ7a2VlcCYjMzQ7OwomIzQzOwkJCX07CiYjNDM7CQl9OwomIzQzOwl9OwomIzQzO307CiYjNDM7CiAmYW1wO21kaW8xIHsKIAlyZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHsKIAkJY29tcGF0aWJsZSA9ICYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjImIzM0OzsKQEAgLTM1MCw2ICYjNDM7MzkxLDI1IEBAIHJnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMgewogCQlyZXNldC1ncGlvcyA9ICZsdDsmYW1wO2dwaW80IFJLX1BDMCBHUElPX0FDVElWRV9MT1cmZ3Q7OwogCQlyeC1pbnRlcm5hbC1kZWxheS1wcyA9ICZsdDsxNTAwJmd0OzsKIAkJdHgtaW50ZXJuYWwtZGVsYXktcHMgPSAmbHQ7MTUwMCZndDs7CiYjNDM7CiYjNDM7CQlsZWRzIHsKJiM0MzsJCQkjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsJCQkjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsJCQlsZWRAMSB7CiYjNDM7CQkJCXJlZyA9ICZsdDsxJmd0OzsKJiM0MzsJCQkJY29sb3IgPSAmbHQ7TEVEX0NPTE9SX0lEX0FNQkVSJmd0OzsKJiM0MzsJCQkJZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOOwomIzQzOwkJCQlkZWZhdWx0LXN0YXRlID0gJiMzNDtrZWVwJiMzNDs7CiYjNDM7CQkJfTsKJiM0MzsKJiM0MzsJCQlsZWRAMiB7CiYjNDM7CQkJCXJlZyA9ICZsdDsyJmd0OzsKJiM0MzsJCQkJY29sb3IgPSAmbHQ7TEVEX0NPTE9SX0lEX0dSRUVOJmd0OzsKJiM0MzsJCQkJZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOOwomIzQzOwkJCQlkZWZhdWx0LXN0YXRlID0gJiMzNDtrZWVwJiMzNDs7CiYjNDM7CQkJfTsKJiM0MzsJCX07CiAJfTsKIH07CiAKQEAgLTU4NiwzICYjNDM7NjQ2LDEzIEBAICZhbXA7eGluMzJrIHsKIAlwaW5jdHJsLW5hbWVzID0gJiMzNDtkZWZhdWx0JiMzNDs7CiAJcGluY3RybC0wID0gJmx0OyZhbXA7Y2xrMzJrX291dDEmZ3Q7OwogfTsKJiM0MzsKJiM0MzsmYW1wO3hwY3MgewomIzQzOwlwaHlzID0gJmx0OyZhbXA7Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUkmZ3Q7OwomIzQzOwlwaHktbmFtZXMgPSAmIzM0O3NlcmRlcyYjMzQ7OwomIzQzOwlzdGF0dXMgPSAmIzM0O29rYXkmIzM0OzsKJiM0Mzt9OwomIzQzOwomIzQzOyZhbXA7eHBjc19taWkwIHsKJiM0MzsJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiYjNDM7fTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpCmluZGV4IDNiYzY1M2YwMjdmMWYuLjIyN2QwM2UzMzYwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaQpAQCAtMTEwLDYgJiM0MzsxMTAsNTEgQEAgc2F0YTA6IHNhdGFAZmMwMDAwMDAgewogCQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiAJfTsKIAomIzQzOwl4cGNzOiBldGhlcm5ldC1wY3NAZmRhMDAwMDAgewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7cm9ja2NoaXAscmszNTY4LXhwY3MmIzM0OzsKJiM0MzsJCSNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOwkJI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CQlyZWcgPSAmbHQ7MHgwIDB4ZmRhMDAwMDAgMHgwIDB4MjAwMDAwJmd0OzsKJiM0MzsJCWNsb2NrcyA9ICZsdDsmYW1wO2NydSBQQ0xLX1hQQ1MmZ3Q7LCAmbHQ7JmFtcDtjcnUgQ0xLX1hQQ1NfRUVFJmd0OzsKJiM0MzsJCWNsb2NrLW5hbWVzID0gJiMzNDtjc3ImIzM0OywgJiMzNDtlZWUmIzM0OzsKJiM0MzsJCXBvd2VyLWRvbWFpbnMgPSAmbHQ7JmFtcDtwb3dlciBSSzM1NjhfUERfUElQRSZndDs7CiYjNDM7CQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CiYjNDM7CQl4cGNzX21paTA6IGV0aGVybmV0LXBjcy1taWlAMCB7CiYjNDM7CQkJcmVnID0gJmx0OzAmZ3Q7OwomIzQzOwkJCXN0YXR1cyA9ICYjMzQ7ZGlzYWJsZWQmIzM0OzsKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQl4cGNzX21paTE6IGV0aGVybmV0LXBjcy1taWlAMSB7CiYjNDM7CQkJcmVnID0gJmx0OzEmZ3Q7OwomIzQzOwkJCXN0YXR1cyA9ICYjMzQ7ZGlzYWJsZWQmIzM0OzsKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQl4cGNzX21paTI6IGV0aGVybmV0LXBjcy1taWlAMiB7CiYjNDM7CQkJcmVnID0gJmx0OzImZ3Q7OwomIzQzOwkJCXN0YXR1cyA9ICYjMzQ7ZGlzYWJsZWQmIzM0OzsKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQl4cGNzX21paTM6IGV0aGVybmV0LXBjcy1taWlAMyB7CiYjNDM7CQkJcmVnID0gJmx0OzMmZ3Q7OwomIzQzOwkJCXN0YXR1cyA9ICYjMzQ7ZGlzYWJsZWQmIzM0OzsKJiM0MzsJCX07CiYjNDM7CX07CiYjNDM7CiYjNDM7CWNsa19nbWFjMF94cGNzX21paTogY2xvY2steHBjcy1nbWFjMCB7CiYjNDM7CQljb21wYXRpYmxlID0gJiMzNDtmaXhlZC1jbG9jayYjMzQ7OwomIzQzOwkJY2xvY2stZnJlcXVlbmN5ID0gJmx0OzEyNTAwMDAwMCZndDs7CiYjNDM7CQljbG9jay1vdXRwdXQtbmFtZXMgPSAmIzM0O2Nsa19nbWFjMF94cGNzX21paSYjMzQ7OwomIzQzOwkJI2Nsb2NrLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwl9OwomIzQzOwomIzQzOwljbGtfZ21hYzFfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzEgewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7Zml4ZWQtY2xvY2smIzM0OzsKJiM0MzsJCWNsb2NrLWZyZXF1ZW5jeSA9ICZsdDsxMjUwMDAwMDAmZ3Q7OwomIzQzOwkJY2xvY2stb3V0cHV0LW5hbWVzID0gJiMzNDtjbGtfZ21hYzFfeHBjc19taWkmIzM0OzsKJiM0MzsJCSNjbG9jay1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsJfTsKJiM0MzsKIAlwaXBlX3BoeV9ncmYwOiBzeXNjb25AZmRjNzAwMDAgewogCQljb21wYXRpYmxlID0gJiMzNDtyb2NrY2hpcCxyazM1NjgtcGlwZS1waHktZ3JmJiMzNDssICYjMzQ7c3lzY29uJiMzNDs7CiAJCXJlZyA9ICZsdDsweDAgMHhmZGM3MDAwMCAweDAgMHgxMDAwJmd0OzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnCmluZGV4IGUzZGQ1YWRkYTVhY2EuLjUwODhhY2MwNjk4MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZwpAQCAtMTcwLDYgJiM0MzsxNzAsNyBAQCBjb25maWcgRFdNQUNfUk9DS0NISVAKIAlkZWZhdWx0IEFSQ0hfUk9DS0NISVAKIAlkZXBlbmRzIG9uIE9GICZhbXA7JmFtcDsgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKQogCXNlbGVjdCBNRkRfU1lTQ09OCiYjNDM7CXNlbGVjdCBQQ1NfWFBDU19ST0NLQ0hJUAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszMjg4IFNvQy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMKaW5kZXggZjVmOWZhNjdlY2Q3Ny4uNDMwOGRjY2JmMjU3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jCkBAIC02MDMsMTMgJiM0Mzs2MDMsNDcgQEAgc3RhdGljIHZvaWQgY29tbW9uX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpCiAJcGxhdC0mZ3Q7bWRpb19idXNfZGF0YS0mZ3Q7bmVlZHNfcmVzZXQgPSB0cnVlOwogfQogCiYjNDM7c3RhdGljIGludCBpbnRlbF9tZ2JlX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTsKJiM0MzsJc3RydWN0IGR3X3hwY3MgKnhwY3M7CiYjNDM7CWludCBhZGRyOwomIzQzOwomIzQzOwlkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LSZndDtkZXZpY2UpOwomIzQzOwomIzQzOwlpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgJiMzNDtwY3MtaGFuZGxlJiMzNDspKSB7CiYjNDM7CQlwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7LCAwKTsKJiM0MzsJCXhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7CiYjNDM7CQlmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWFkZHIgPSBmZnMocHJpdi0mZ3Q7cGxhdC0mZ3Q7bWRpb19idXNfZGF0YS0mZ3Q7cGNzX21hc2spIC0gMTsKJiM0MzsJCXhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtJmd0O21paSwgYWRkcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKElTX0VSUih4cGNzKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHhwY3MpOwomIzQzOwomIzQzOwl4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtJmd0O3BsYXQtJmd0O211bHRfZmFjdF8xMDBucyk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGludGVsX21nYmVfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7eHBjcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJeHBjc19kZXN0cm95KHByaXYtJmd0O2h3LSZndDt4cGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3hwY3MgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmludGVsX21nYmVfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJCQkJCQkgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKIHsKLQkvKiBwbGF0LSZndDttZGlvX2J1c19kYXRhLSZndDtoYXNfeHBjcyBoYXMgYmVlbiBzZXQgdHJ1ZSwgc28gdGhlcmUKLQkgKiBzaG91bGQgYWx3YXlzIGJlIGFuIFhQQ1MuIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGFsd2F5cwotCSAqIHJldHVybiB0aGlzIGlmIHByZXNlbnQuCi0JICovCiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKIAlyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LSZndDtody0mZ3Q7eHBjcyk7CiB9CiAKQEAgLTczMyw2ICYjNDM7NzY3LDggQEAgc3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCSAgICBwbGF0LSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpIHsKIAkJcGxhdC0mZ3Q7bWRpb19idXNfZGF0YS0mZ3Q7cGNzX21hc2sgPSBCSVRfVTMyKElOVEVMX01HQkVfWFBDU19BRERSKTsKIAkJcGxhdC0mZ3Q7ZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlOwomIzQzOwkJcGxhdC0mZ3Q7cGNzX2luaXQgPSBpbnRlbF9tZ2JlX3Bjc19pbml0OwomIzQzOwkJcGxhdC0mZ3Q7cGNzX2V4aXQgPSBpbnRlbF9tZ2JlX3Bjc19leGl0OwogCQlwbGF0LSZndDtzZWxlY3RfcGNzID0gaW50ZWxfbWdiZV9zZWxlY3RfcGNzOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jCmluZGV4IDE5ZjM0ZTE4YmZlZjIuLjlhZjMyYzI2ZjljMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMKQEAgLTgxLDggJiM0Mzs4MSwxMSBAQCBzdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAKIHN0YXRpYyB2b2lkIHJlbmVzYXNfZ21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7Ci0JaWYgKHByaXYtJmd0O2h3LSZndDtwaHlsaW5rX3BjcykKLQkJbWlpY19kZXN0cm95KHByaXYtJmd0O2h3LSZndDtwaHlsaW5rX3Bjcyk7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltaWljX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzID0gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmVuZXNhc19nbWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmMKaW5kZXggOGQ3MDQyZTY4OTI2MS4uYjNkNzQ2ZGQ5NjZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWZkL3N5c2Nvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY3MvcGNzLXhwY3MtcmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbV9ydW50aW1lLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7c3RtbWFjX3BsYXRmb3JtLmgmIzM0OwpAQCAtNDcsNiAmIzQzOzQ4LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHsKIAl2b2lkICgqc2V0X3RvX3JnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdiwKIAkJCSAgICAgaW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpOwogCXZvaWQgKCpzZXRfdG9fcm1paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpOwomIzQzOwl2b2lkICgqc2V0X3RvX3NnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7CiAJaW50ICgqc2V0X3NwZWVkKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdiwKIAkJCSBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQpOwogCXZvaWQgKCppbnRlZ3JhdGVkX3BoeV9wb3dlcnVwKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7CkBAIC02Myw2ICYjNDM7NjUsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMgewogCWJvb2wgY2xvY2tfZ3JmX3JlZ19pbl9waHA7CiAJYm9vbCBzdXBwb3J0c19yZ21paTsKIAlib29sIHN1cHBvcnRzX3JtaWk7CiYjNDM7CWJvb2wgc3VwcG9ydHNfc2dtaWk7CiAJYm9vbCBwaHBfZ3JmX3JlcXVpcmVkOwogCWJvb2wgcmVnc192YWxpZDsKIAl1MzIgcmVnc1tdOwpAQCAtOTgsNiAmIzQzOzEwMSw3IEBAIHN0cnVjdCBya19wcml2X2RhdGEgewogCWJvb2wgaW50ZWdyYXRlZF9waHk7CiAJYm9vbCBzdXBwb3J0c19yZ21paTsKIAlib29sIHN1cHBvcnRzX3JtaWk7CiYjNDM7CWJvb2wgc3VwcG9ydHNfc2dtaWk7CiAKIAlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqY2xrczsKIAlpbnQgbnVtX2Nsa3M7CkBAIC04MDksNiAmIzQzOzgxMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTI4X29wcyA9IHsKICNkZWZpbmUgUkszNTY4X0dSRl9HTUFDMV9DT04xCQkweDAzOGMKIAogLyogUkszNTY4X0dSRl9HTUFDMF9DT04xICZhbXA7JmFtcDsgUkszNTY4X0dSRl9HTUFDMV9DT04xICovCiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkJCUdSRl9DTFJfQklUKDcpCiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSQkJR1JGX0JJVCg3KQogI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkwJCQlHUkZfQklUKDMpCiAjZGVmaW5lIFJLMzU2OF9HTUFDX0ZMT1dfQ1RSTF9DTFIJCUdSRl9DTFJfQklUKDMpCiAjZGVmaW5lIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUJCUdSRl9CSVQoMSkKQEAgLTgzNiw2ICYjNDM7ODQyLDE2IEBAIHN0YXRpYyBpbnQgcmszNTY4X2luaXQoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgcmszNTY4X3NldF90b19ybWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQomIzQzO3sKJiM0MzsJdTMyIGNvbjE7CiYjNDM7CiYjNDM7CWNvbjEgPSAoYnNwX3ByaXYtJmd0O2lkID09IDEpID8gUkszNTY4X0dSRl9HTUFDMV9DT04xIDoKJiM0MzsJCQkJICAgICBSSzM1NjhfR1JGX0dNQUMwX0NPTjE7CiYjNDM7CiYjNDM7CXJlZ21hcF93cml0ZShic3BfcHJpdi0mZ3Q7Z3JmLCBjb24xLCBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsCiAJCQkJaW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpCiB7CkBAIC04NTEsMTkgJiM0Mzs4NjcsMzEgQEAgc3RhdGljIHZvaWQgcmszNTY4X3NldF90b19yZ21paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdiwKIAkJICAgICBSSzM1NjhfR01BQ19DTEtfVFhfRExfQ0ZHKHR4X2RlbGF5KSk7CiAKIAlyZWdtYXBfd3JpdGUoYnNwX3ByaXYtJmd0O2dyZiwgY29uMSwKJiM0MzsJCSAgICAgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJIHwKIAkJICAgICBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFIHwKIAkJICAgICBSSzM1NjhfR01BQ19UWENMS19ETFlfRU5BQkxFKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fc2dtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiYjNDM7ewomIzQzOwl1MzIgY29uMTsKJiM0MzsKJiM0MzsJY29uMSA9IChic3BfcHJpdi0mZ3Q7aWQgPT0gMSkgPyBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgOgomIzQzOwkJCQkgICAgIFJLMzU2OF9HUkZfR01BQzBfQ09OMTsKJiM0MzsKJiM0MzsJcmVnbWFwX3dyaXRlKGJzcF9wcml2LSZndDtncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzIHJrMzU2OF9vcHMgPSB7CiAJLmluaXQgPSByazM1NjhfaW5pdCwKJiM0MzsJLnNldF90b19ybWlpID0gcmszNTY4X3NldF90b19ybWlpLAogCS5zZXRfdG9fcmdtaWkgPSByazM1Njhfc2V0X3RvX3JnbWlpLAomIzQzOwkuc2V0X3RvX3NnbWlpID0gcmszNTY4X3NldF90b19zZ21paSwKJiM0MzsKIAkuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsCiAKIAkuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLAogCi0JLnN1cHBvcnRzX3JtaWkgPSB0cnVlLAotCiAJLnJlZ3NfdmFsaWQgPSB0cnVlLAogCS5yZWdzID0gewogCQkweGZlMmEwMDAwLCAvKiBnbWFjMCAqLwpAQCAtMTIwOCw2ICYjNDM7MTIzNiw0MyBAQCBzdGF0aWMgdm9pZCBya19waHlfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCQlkZXZfZXJyKGJzcF9wcml2LSZndDtkZXYsICYjMzQ7ZmFpbCB0byBkaXNhYmxlIHBoeS1zdXBwbHlcbiYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcmtfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtJmd0O2RldmljZS0mZ3Q7b2Zfbm9kZTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpwY3Nfbm9kZTsKJiM0MzsJc3RydWN0IGR3X3hwY3MgKnhwY3M7CiYjNDM7CiYjNDM7CXBjc19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgJiMzNDtwY3MtaGFuZGxlJiMzNDssIDApOwomIzQzOwlpZiAoIXBjc19ub2RlKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXhwY3MgPSB4cGNzX3JrX2NyZWF0ZShwcml2LSZndDtkZXZpY2UsIHBjc19ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQocGNzX25vZGUpOwomIzQzOwlpZiAoSVNfRVJSKHhwY3MpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoeHBjcyk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJrX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXhwY3NfZGVzdHJveShwcml2LSZndDtody0mZ3Q7eHBjcyk7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiYjNDM7CQkJCQkgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi0mZ3Q7aHctJmd0O3hwY3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJCSAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0LAogCQkJCQkgIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyAqb3BzKQpAQCAtMTMzMCw2ICYjNDM7MTM5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAKIAlic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfcmdtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3JnbWlpIHx8ICEhb3BzLSZndDtzZXRfdG9fcmdtaWk7CiAJYnNwX3ByaXYtJmd0O3N1cHBvcnRzX3JtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3JtaWkgfHwgISFvcHMtJmd0O3NldF90b19ybWlpOwomIzQzOwlic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfc2dtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3NnbWlpIHx8ICEhb3BzLSZndDtzZXRfdG9fc2dtaWk7CiAKIAlpZiAob3BzLSZndDtpbml0KSB7CiAJCXJldCA9IG9wcy0mZ3Q7aW5pdChic3BfcHJpdik7CkBAIC0xMzYxLDYgJiM0MzsxNDI3LDEwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19jaGVja19vcHMoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWlmICghYnNwX3ByaXYtJmd0O3N1cHBvcnRzX3JtaWkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgomIzQzOwkJaWYgKCFic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfc2dtaWkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGJzcF9wcml2LSZndDtkZXYsCiAJCQkmIzM0O3Vuc3VwcG9ydGVkIGludGVyZmFjZSAlZCYjMzQ7LCBic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKTsKQEAgLTEzNzksMTYgJiM0MzsxNDQ5LDE5IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJcmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKJiM0MzsJCWdvdG8gc2V0X21vZGU7CiYjNDM7CiAJcmV0ID0gcmtfZ2V0X3BoeV9pbnRmX3NlbChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKTsKIAlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gY2xrX2Rpc2FibGU7CiAKIAlpbnRmID0gcmV0OwogCi0JcmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWYgKGJzcF9wcml2LSZndDtnbWFjX3BoeV9pbnRmX3NlbF9tYXNrIHx8CiAJICAgIGJzcF9wcml2LSZndDtnbWFjX3JtaWlfbW9kZV9tYXNrKSB7CiAJCS8qIElmIGRlZmluZWQsIGVuY29kZSB0aGUgcGh5X2ludGZfc2VsIHZhbHVlICovCkBAIC0xMzk5LDEwICYjNDM7MTQ3Miw4IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCQkJCSAgICAgIGJzcF9wcml2LSZndDtnbWFjX3JtaWlfbW9kZV9tYXNrKTsKIAogCQlyZXQgPSBya193cml0ZV9nbWFjX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7Ci0JCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xrX2Rpc2FibGU7CiAJfQogCiAJaWYgKGJzcF9wcml2LSZndDtjbG9jay5ybWlpX21vZGVfbWFzaykgewpAQCAtMTQxMCwxMyAmIzQzOzE0ODEsMTIgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCQkJICAgICBic3BfcHJpdi0mZ3Q7Y2xvY2sucm1paV9tb2RlX21hc2spOwogCiAJCXJldCA9IHJrX3dyaXRlX2Nsb2NrX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7Ci0JCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xrX2Rpc2FibGU7CiAJfQogCi0JLypybWlpIG9yIHJnbWlpKi8KJiM0MztzZXRfbW9kZToKJiM0MzsJLyogcm1paSwgcmdtaWksIHNnbWlpICovCiAJc3dpdGNoIChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKSB7CiAJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6CiAJCWRldl9pbmZvKGRldiwgJiMzNDtpbml0IGZvciBSR01JSVxuJiMzNDspOwpAQCAtMTQ0NywxNSAmIzQzOzE1MTcsMjAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWlmIChic3BfcHJpdi0mZ3Q7b3BzLSZndDtzZXRfdG9fcm1paSkKIAkJCWJzcF9wcml2LSZndDtvcHMtJmd0O3NldF90b19ybWlpKGJzcF9wcml2KTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgomIzQzOwkJZGV2X2luZm8oZGV2LCAmIzM0O2luaXQgZm9yIFNHTUlJXG4mIzM0Oyk7CiYjNDM7CQlpZiAoYnNwX3ByaXYtJmd0O29wcy0mZ3Q7c2V0X3RvX3NnbWlpKQomIzQzOwkJCWJzcF9wcml2LSZndDtvcHMtJmd0O3NldF90b19zZ21paShic3BfcHJpdik7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGRldiwgJiMzNDtOTyBpbnRlcmZhY2UgZGVmaW5lZCFcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGNsa19kaXNhYmxlOwogCX0KIAogCXJldCA9IHJrX3BoeV9wb3dlcnVwKGJzcF9wcml2KTsKLQlpZiAocmV0KSB7Ci0JCWdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpOwotCQlyZXR1cm4gcmV0OwotCX0KJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2xrX2Rpc2FibGU7CiAKIAlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CiAKQEAgLTE0NjMsNiAmIzQzOzE1MzgsMTAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWJzcF9wcml2LSZndDtvcHMtJmd0O2ludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2xrX2Rpc2FibGU6CiYjNDM7CWdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBya19nbWFjX3Bvd2VyZG93bihzdHJ1Y3QgcmtfcHJpdl9kYXRhICpnbWFjKQpAQCAtMTQ4Niw2ICYjNDM7MTU2NSw5IEBAIHN0YXRpYyB2b2lkIHJrX2dldF9pbnRlcmZhY2VzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCAqYnNwX3ByaXYsCiAKIAlpZiAocmstJmd0O3N1cHBvcnRzX3JtaWkpCiAJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CWlmIChyay0mZ3Q7c3VwcG9ydHNfc2dtaWkpCiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLCBpbnRlcmZhY2VzKTsKIH0KIAogc3RhdGljIGludCBya19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXZfLCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSwKQEAgLTE2MDIsNiAmIzQzOzE2ODQsMTcgQEAgc3RhdGljIGludCBya19nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcGxhdF9kYXQtJmd0O3N1c3BlbmQgPSBya19nbWFjX3N1c3BlbmQ7CiAJcGxhdF9kYXQtJmd0O3Jlc3VtZSA9IHJrX2dtYWNfcmVzdW1lOwogCiYjNDM7CWlmIChwbGF0X2RhdC0mZ3Q7cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHsKJiM0MzsJCS8qIFNHTUlJIGNsb2NrIGFsd2F5cyBydW5zIGF0IDEyNSBNSHogKi8KJiM0MzsJCXBsYXRfZGF0LSZndDtzZXRfY2xrX3R4X3JhdGUgPSBOVUxMOwomIzQzOwomIzQzOwkJLyogU0dNSUkgcmVxdWlyZXMgYSBQQ1MgKi8KJiM0MzsJCXBsYXRfZGF0LSZndDtkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7CiYjNDM7CQlwbGF0X2RhdC0mZ3Q7cGNzX2luaXQgPSBya19wY3NfaW5pdDsKJiM0MzsJCXBsYXRfZGF0LSZndDtwY3NfZXhpdCA9IHJrX3Bjc19leGl0OwomIzQzOwkJcGxhdF9kYXQtJmd0O3NlbGVjdF9wY3MgPSBya19zZWxlY3RfcGNzOwomIzQzOwl9CiYjNDM7CiAJcGxhdF9kYXQtJmd0O2JzcF9wcml2ID0gcmtfZ21hY19zZXR1cChwZGV2LCBwbGF0X2RhdCwgZGF0YSk7CiAJaWYgKElTX0VSUihwbGF0X2RhdC0mZ3Q7YnNwX3ByaXYpKQogCQlyZXR1cm4gUFRSX0VSUihwbGF0X2RhdC0mZ3Q7YnNwX3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jCmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMKQEAgLTM1LDggJiM0MzszNSwxMSBAQCBzdGF0aWMgaW50IHJ6bjFfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCiBzdGF0aWMgdm9pZCByem4xX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKLQlpZiAocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKQotCQltaWljX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1paWNfZGVzdHJveShwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpOwomIzQzOwlwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MgPSBOVUxMOwogfQogCiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyem4xX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jCmluZGV4IDFkN2YwYTU3ZDI4ODkuLjZkNGJjMWZlOGY3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMKQEAgLTUzOSw4ICYjNDM7NTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAKIHN0YXRpYyB2b2lkIHNvY2ZwZ2FfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewotCWlmIChwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCi0JCWx5bnhfcGNzX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWx5bnhfcGNzX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzID0gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqc29jZnBnYV9kd21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jCmluZGV4IGFmZTk4ZmY1YmRjYjAuLjczOTZiNjg4OTljNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYwpAQCAtNDI2LDM1ICYjNDM7NDI2LDE0IEBAIGludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlOwotCXN0cnVjdCBkd194cGNzICp4cGNzID0gTlVMTDsKLQlpbnQgYWRkciwgcmV0OwotCi0JZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi0mZ3Q7ZGV2aWNlKTsKLQotCWlmIChwcml2LSZndDtwbGF0LSZndDtwY3NfaW5pdCkgewotCQlyZXQgPSBwcml2LSZndDtwbGF0LSZndDtwY3NfaW5pdChwcml2KTsKLQl9IGVsc2UgaWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7KSkgewotCQlwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7LCAwKTsKLQkJeHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTsKLQkJZndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7Ci0JCXJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTsKLQl9IGVsc2UgaWYgKHByaXYtJmd0O3BsYXQtJmd0O21kaW9fYnVzX2RhdGEgJmFtcDsmYW1wOwotCQkgICBwcml2LSZndDtwbGF0LSZndDttZGlvX2J1c19kYXRhLSZndDtwY3NfbWFzaykgewotCQlhZGRyID0gZmZzKHByaXYtJmd0O3BsYXQtJmd0O21kaW9fYnVzX2RhdGEtJmd0O3Bjc19tYXNrKSAtIDE7Ci0JCXhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtJmd0O21paSwgYWRkcik7Ci0JCXJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTsKLQl9IGVsc2UgewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3BsYXQtJmd0O3Bjc19pbml0KQogCQlyZXR1cm4gMDsKLQl9CiAKJiM0MzsJcmV0ID0gcHJpdi0mZ3Q7cGxhdC0mZ3Q7cGNzX2luaXQocHJpdik7CiAJaWYgKHJldCkKLQkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi0mZ3Q7ZGV2aWNlLCByZXQsICYjMzQ7Tm8geFBDUyBmb3VuZFxuJiMzNDspOwotCi0JaWYgKHhwY3MpCi0JCXhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi0mZ3Q7cGxhdC0mZ3Q7bXVsdF9mYWN0XzEwMG5zKTsKLQotCXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtJmd0O2RldmljZSwgcmV0LCAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIFBDU1xuJiMzNDspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NjMsMTQgJiM0Mzs0NDIsMTAgQEAgdm9pZCBzdG1tYWNfcGNzX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCi0JaWYgKHByaXYtJmd0O3BsYXQtJmd0O3Bjc19leGl0KQotCQlwcml2LSZndDtwbGF0LSZndDtwY3NfZXhpdChwcml2KTsKLQotCWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CWlmICghcHJpdi0mZ3Q7cGxhdC0mZ3Q7cGNzX2V4aXQpCiAJCXJldHVybjsKIAotCXhwY3NfZGVzdHJveShwcml2LSZndDtody0mZ3Q7eHBjcyk7Ci0JcHJpdi0mZ3Q7aHctJmd0O3hwY3MgPSBOVUxMOwomIzQzOwlwcml2LSZndDtwbGF0LSZndDtwY3NfZXhpdChwcml2KTsKIH0KIAogc3RydWN0IHN0bW1hY19jbGtfcmF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCmluZGV4IGU0MTdmZDY2ZjY2MGEuLjNkYjliMzQzYWMwYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCkBAIC0xMiw2ICYjNDM7MTIsMzEgQEAgY29uZmlnIFBDU19YUENTCiAJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU3lub3BzeXMKIAkgIERlc2lnbldhcmUgWFBDUyBjb250cm9sbGVycy4KIAomIzQzO2lmIFBDU19YUENTCiYjNDM7CiYjNDM7Y29uZmlnIFBDU19YUENTX1BMQVRGT1JNCiYjNDM7CXRyaXN0YXRlICYjMzQ7R2VuZXJpYyBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydCYjMzQ7CiYjNDM7CWRlZmF1bHQgUENTX1hQQ1MKJiM0MzsJaGVscAomIzQzOwkgIEdlbmVyaWMgRFdYUENTIGRyaXZlciBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJiMzOTt0IHJlcXVpcmUgYW55CiYjNDM7CSAgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB0byBmdW5jdGlvbiBvciBpcyB1c2luZyBwbGF0Zm9ybQomIzQzOwkgIGRhdGEgZm9yIHNldHVwLgomIzQzOwomIzQzOwkgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuCiYjNDM7CiYjNDM7Y29uZmlnIFBDU19YUENTX1JPQ0tDSElQCiYjNDM7CXRyaXN0YXRlICYjMzQ7Um9ja2NoaXAgWFBDUyBjb250cm9sbGVyIHN1cHBvcnQmIzM0OwomIzQzOwlkZWZhdWx0IEFSQ0hfUk9DS0NISVAKJiM0MzsJZGVwZW5kcyBvbiBPRiAmYW1wOyZhbXA7IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVCkKJiM0MzsJc2VsZWN0IEdFTkVSSUNfUEhZCiYjNDM7CXNlbGVjdCBQTV9HRU5FUklDX0RPTUFJTlMKJiM0MzsJaGVscAomIzQzOwkgIFN1cHBvcnQgZm9yIFhQQ1MgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzM1NnggU29DLgomIzQzOwomIzQzOwkgIElmIHlvdSBoYXZlIGEgUm9ja2NoaXAgU29DIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS4KJiM0MzsKJiM0MztlbmRpZiAjIFBDU19YUENTCiYjNDM7CiBjb25maWcgUENTX0xZTlgKIAl0cmlzdGF0ZQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZQppbmRleCA0Zjc5MjA2MThiOTAwLi5mOWY2Y2YyNTc4ZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlCkBAIC0xLDEwICYjNDM7MSwxMSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogIyBNYWtlZmlsZSBmb3IgTGludXggUENTIGRyaXZlcnMKIAotcGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpCTo9IHBjcy14cGNzLm8gcGNzLXhwY3MtcGxhdC5vIFwKLQkJCQkgICBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vCiYjNDM7cGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpCTo9IHBjcy14cGNzLm8gcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gubwogCiBvYmotJChDT05GSUdfUENTX1hQQ1MpCQkmIzQzOz0gcGNzX3hwY3MubwomIzQzO29iai0kKENPTkZJR19QQ1NfWFBDU19QTEFURk9STSkgJiM0Mzs9IHBjcy14cGNzLXBsYXQubwomIzQzO29iai0kKENPTkZJR19QQ1NfWFBDU19ST0NLQ0hJUCkgJiM0Mzs9IHBjcy14cGNzLXJrLm8KIG9iai0kKENPTkZJR19QQ1NfTFlOWCkJCSYjNDM7PSBwY3MtbHlueC5vCiBvYmotJChDT05GSUdfUENTX01US19MWU5YSSkJJiM0Mzs9IHBjcy1tdGstbHlueGkubwogb2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpCSYjNDM7PSBwY3MtcnpuMS1taWljLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZDVlMGYyMmM5NzNjMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jCkBAIC0wLDAgJiM0MzsxLDU3MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIEJhc2VkIG9uIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIFhQQ1MgcGxhdGZvcm0gZHJpdmVyLgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNCBTZXJnZSBTZW1pbgomIzQzOyAqCiYjNDM7ICogQWRhcHRlZCBmb3IgUm9ja2NoaXAgU29Dcywgd2l0aCByZWZlcmVuY2UgdG8gdGhlIFJvY2tjaGlwIE9FTSBkcml2ZXIuCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvaWEgUHJhbnQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21hdGguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2ZfcGxhdGZvcm0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNzL3Bjcy14cGNzLXJrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wbV9kb21haW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG1fcnVudGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtwY3MteHBjcy5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgZHdfeHBjc19yayB7CiYjNDM7CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXM7CiYjNDM7CXZvaWQgX19pb21lbSAqcmVnX2Jhc2U7CiYjNDM7CXN0cnVjdCBwaHkgKnNlcmRlc19waHk7CiYjNDM7CXN0cnVjdCBjbGsgKmNzcl9jbGs7CiYjNDM7CXN0cnVjdCBjbGsgKmVlZV9jbGs7CiYjNDM7CXU4IGVlZV9tdWx0X2ZhY3Q7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgcHRyZGlmZl90IHhwY3NfcmtfYWRkcl9mb3JtYXQoaW50IGRldiwgaW50IHJlZykKJiM0Mzt7CiYjNDM7CXJldHVybiBGSUVMRF9QUkVQKDB4NzAwMDAsIGRldikgfCBGSUVMRF9QUkVQKDB4ZmZmZiwgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3JlYWRfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZykKJiM0Mzt7CiYjNDM7CXB0cmRpZmZfdCBjc3I7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpOwomIzQzOwomIzQzOwlyZXQgPSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KCZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2Rldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkbChweHBjcy0mZ3Q7cmVnX2Jhc2UgJiM0MzsgKGNzciAmbHQ7Jmx0OyAyKSkgJmFtcDsgMHhmZmZmOwomIzQzOwomIzQzOwlwbV9ydW50aW1lX3B1dCgmYW1wO3B4cGNzLSZndDtwZGV2LSZndDtkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXB0cmRpZmZfdCBjc3I7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpOwomIzQzOwomIzQzOwlyZXQgPSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KCZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2Rldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwl3cml0ZWwodmFsLCBweHBjcy0mZ3Q7cmVnX2Jhc2UgJiM0MzsgKGNzciAmbHQ7Jmx0OyAyKSk7CiYjNDM7CiYjNDM7CXBtX3J1bnRpbWVfcHV0KCZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2Rldik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkxCTIKJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkyCTMKJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkzCTQKJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9QTUFQTUQJNgomIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSQk3CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgeHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoaW50IGFkZHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gIShhZGRyICZsdDsgMCB8fCBhZGRyICZndDsgMyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJc3dpdGNoIChkZXYpIHsKJiM0MzsJY2FzZSBNRElPX01NRF9QTUFQTUQ6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDsKJiM0MzsJY2FzZSBNRElPX01NRF9WRU5EMjoKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFkcyBhcmUgcmVkaXJlY3RlZCBieSBoYXJkd2FyZSB0byB0aGUgcG9ydCYjMzk7cyByZWFkLW9ubHkgbWlycm9yOwomIzQzOwkgKiBvbmx5IHdyaXRlcyBoYXZlIHRvIGJlIHRhcmdldGVkIGF0IE1JSSAoc2VlIHRoZSB3cml0ZSBwYXRoKS4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAoYWRkcikgewomIzQzOwljYXNlIDA6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTsKJiM0MzsJY2FzZSAxOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkxOwomIzQzOwljYXNlIDI6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7CiYjNDM7CWNhc2UgMzoKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJMzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoZGV2KSB7CiYjNDM7CWNhc2UgTURJT19NTURfUE1BUE1EOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9QTUFQTUQ7CiYjNDM7CWNhc2UgTURJT19NTURfVkVORDI6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlc2UgcmVnaXN0ZXJzIHBoeXNpY2FsbHkgbGl2ZSBvbmx5IGluIE1JSSAodGhlIG1hbmFnZW1lbnQgcG9ydCkuCiYjNDM7CSAqIFBvcnRzIDEtMyBleHBvc2UgcmVhZC1vbmx5IG1pcnJvcnMgb2YgdGhlc2UgYml0cywgc28gd3JpdGVzIG11c3QKJiM0MzsJICogYWx3YXlzIHRhcmdldCBNSUk7IHRoZSByZWFkIHBhdGggcmVtYXBzIHBlciBhZGRyZXNzIGFuZCB0aGUKJiM0MzsJICogaGFyZHdhcmUgcmVkaXJlY3RzIHRvIHRoZSBwb3J0JiMzOTtzIG1pcnJvci4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAocmVnKSB7CiYjNDM7CWNhc2UgRFdfVlJfTUlJX0FOX0NUUkw6CiYjNDM7CWNhc2UgRFdfVlJfTUlJX0FOX0lOVFJfU1RTOgomIzQzOwljYXNlIERXX1ZSX01JSV9FRUVfTUNUUkwwOgomIzQzOwljYXNlIERXX1ZSX01JSV9FRUVfTUNUUkwxOgomIzQzOwljYXNlIERXX1ZSX01JSV9ESUdfQ1RSTDI6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoYWRkcikgewomIzQzOwljYXNlIDA6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTsKJiM0MzsJY2FzZSAxOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkxOwomIzQzOwljYXNlIDI6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7CiYjNDM7CWNhc2UgMzoKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJMzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IGRldjsKJiM0MzsKJiM0MzsJaWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgTURJT19NTURfVkVORDIsIHJlZyk7CiYjNDM7CWlmIChkZXYgJmx0OyAwKQomIzQzOwkJcmV0dXJuIDB4ZmZmZjsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3NfcmtfcmVhZF9yZWcocHhwY3MsIGRldiwgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZywgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IGRldjsKJiM0MzsKJiM0MzsJaWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpOwomIzQzOwlpZiAoZGV2ICZsdDsgMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIGRldiwgcmVnKTsKJiM0MzsJaWYgKGRldiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gMHhmZmZmOwomIzQzOwomIzQzOwlyZXR1cm4geHBjc19ya19yZWFkX3JlZyhweHBjcywgZGV2LCByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CWRldiA9IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpOwomIzQzOwlpZiAoZGV2ICZsdDsgMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGR3X3hwY3NfcmsgKnhwY3NfcmtfY3JlYXRlX2RhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkd194cGNzX3JrICpweHBjczsKJiM0MzsKJiM0MzsJcHhwY3MgPSBkZXZtX2t6YWxsb2MoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqcHhwY3MpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFweHBjcykKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwlweHBjcy0mZ3Q7cGRldiA9IHBkZXY7CiYjNDM7CiYjNDM7CWRldl9zZXRfZHJ2ZGF0YSgmYW1wO3BkZXYtJmd0O2RldiwgcHhwY3MpOwomIzQzOwomIzQzOwlyZXR1cm4gcHhwY3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X2luaXQoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlweHBjcy0mZ3Q7c2VyZGVzX3BoeSA9IGRldm1fcGh5X2dldChkZXYsICYjMzQ7c2VyZGVzJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHB4cGNzLSZndDtzZXJkZXNfcGh5KSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy0mZ3Q7c2VyZGVzX3BoeSksCiYjNDM7CQkJCQkmIzM0O0ZhaWxlZCB0byBnZXQgU2VyRGVzIFBIWVxuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3B4cGNzLSZndDtwZGV2LSZndDtkZXY7CiYjNDM7CiYjNDM7CXBoeV9wb3dlcl9vZmYocHhwY3MtJmd0O3NlcmRlc19waHkpOwomIzQzOwlwaHlfZXhpdChweHBjcy0mZ3Q7c2VyZGVzX3BoeSk7CiYjNDM7CiYjNDM7CWRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9uKHN0cnVjdCBkd194cGNzX3JrICpweHBjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2RldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHBvd2VyIGRvbWFpbiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBlbmFibGVkLCB3aGljaCBhbGxvd3MgdXMgdG8KJiM0MzsJICogZHluYW1pY2FsbHkgdHVybiB0aGUgQ1NSIGNsb2NrIG9uL29mZiB1c2luZyBQTSB3aGlsZSBrZWVwaW5nIHRoZSBQQ1MKJiM0MzsJICogcG93ZXJlZCBvbi4KJiM0MzsJICovCiYjNDM7CXJldCA9IGRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgdHJ1ZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBwb3dlciBvbiBwb3dlci1kb21haW5zXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9pbml0KHB4cGNzLSZndDtzZXJkZXNfcGh5KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGluaXQgU2VyRGVzIFBIWVxuJiMzNDspOwomIzQzOwkJZ290byBwbV9kb21haW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3Bvd2VyX29uKHB4cGNzLSZndDtzZXJkZXNfcGh5KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHBvd2VyIG9uIFNlckRlcyBQSFlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gc2VyZGVzX3BoeTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYsIHB4cGNzKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIFNlckRlcyBQSFk6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7c2VyZGVzX3BoeToKJiM0MzsJcGh5X2V4aXQocHhwY3MtJmd0O3NlcmRlc19waHkpOwomIzQzO3BtX2RvbWFpbjoKJiM0MzsJZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCBmYWxzZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19pbml0X3JlcyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcHhwY3MtJmd0O3BkZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKJiM0MzsKJiM0MzsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKJiM0MzsJaWYgKCFyZXMpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O05vIHJlZy1zcGFjZSBmb3VuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJlc291cmNlX3NpemUocmVzKSAmbHQ7IFNaXzJNKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtJbnZhbGlkIHJlZy1zcGFjZSBzaXplXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlweHBjcy0mZ3Q7cmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwomIzQzOwlpZiAoSVNfRVJSKHB4cGNzLSZndDtyZWdfYmFzZSkpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBtYXAgcmVnLXNwYWNlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihweHBjcy0mZ3Q7cmVnX2Jhc2UpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB4cGNzX3JrX2V4aXRfY2xrKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3B4cGNzLSZndDtwZGV2LSZndDtkZXY7CiYjNDM7CiYjNDM7CXBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZChkZXYpOwomIzQzOwljbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtJmd0O2VlZV9jbGspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfaW5pdF9jbGsoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2OwomIzQzOwl1bnNpZ25lZCBsb25nIHJhdGU7CiYjNDM7CXU2NCBtdWx0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlweHBjcy0mZ3Q7Y3NyX2NsayA9IGRldm1fY2xrX2dldChkZXYsICYjMzQ7Y3NyJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHB4cGNzLSZndDtjc3JfY2xrKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy0mZ3Q7Y3NyX2NsayksCiYjNDM7CQkJCQkgJiMzNDtGYWlsZWQgdG8gZ2V0IENTUiBjbG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlweHBjcy0mZ3Q7ZWVlX2NsayA9IGRldm1fY2xrX2dldChkZXYsICYjMzQ7ZWVlJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHB4cGNzLSZndDtlZWVfY2xrKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy0mZ3Q7ZWVlX2NsayksCiYjNDM7CQkJCQkgJiMzNDtGYWlsZWQgdG8gZ2V0IEVFRSBjbG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtJmd0O2VlZV9jbGspOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gZW5hYmxlIEVFRSBjbG9ja1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTsKJiM0MzsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19leGl0X2NsaywgcHhwY3MpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bSBmb3IgRUVFIGNsb2NrOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENvbXB1dGUgdGhlIG11bHRpcGxpZXIgZm9yIHRoZSBFRUUgY2xvY2sgc28gdGhhdAomIzQzOwkgKiBjbGtfZWVlX3BlcmlvZCAqIChtdWx0X2ZhY3QgJiM0MzsgMSkgZmFsbHMgd2l0aGluIDgwLi4xMjAgbnMuCiYjNDM7CSAqCiYjNDM7CSAqIE9uIFJLMzU2OCwgY2xrX3hwY3NfZWVlIGlzIG11eGVkIGJldHdlZW4gZ3BsbDIwMCAoMjAwIE1IeiwgNSBucykKJiM0MzsJICogYW5kIGNwbGwxMjUgKDEyNSBNSHosIDggbnMpLCBzZWxlY3RlZCBieSBDUlVfQ0xLU0VMX0NPTjI5IGJpdCAxMy4KJiM0MzsJICogVGhlIHJlc2V0IHZhbHVlIGlzIDAgKDIwMCBNSHopLCBidXQgZGVyaXZlIHRoZSB2YWx1ZSBhdCBydW50aW1lIHRvCiYjNDM7CSAqIHN0YXkgY29ycmVjdCBpZiB0aGUgbXV4IGlzIGNoYW5nZWQgYnkgYSBib2FyZC4KJiM0MzsJICoKJiM0MzsJICogVXNlIGEgNjQtYml0IGludGVybWVkaWF0ZTogb24gMzItYml0IGJ1aWxkcywgMTAwICogMjAwMDAwMDAwCiYjNDM7CSAqIGRvZXMgbm90IGZpdCBpbiB1bnNpZ25lZCBsb25nLiBDbGFtcCB0byB0aGUgNC1iaXQKJiM0MzsJICogRFdfVlJfTUlJX0VFRV9NVUxUX0ZBQ1RfMTAwTlMgZmllbGQuCiYjNDM7CSAqLwomIzQzOwlyYXRlID0gY2xrX2dldF9yYXRlKHB4cGNzLSZndDtlZWVfY2xrKTsKJiM0MzsJaWYgKCFyYXRlKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCAmIzM0O0ludmFsaWQgRUVFIGNsb2NrIHJhdGVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXVsdCA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCgxMDBVTEwgKiByYXRlLCBOU0VDX1BFUl9TRUMpIC0gMTsKJiM0MzsJcHhwY3MtJmd0O2VlZV9tdWx0X2ZhY3QgPSBtaW5fdCh1NjQsIG11bHQsIDE1KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19pbml0X2J1cyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3B4cGNzLSZndDtwZGV2LSZndDtkZXY7CiYjNDM7CXN0YXRpYyBhdG9taWNfdCBpZCA9IEFUT01JQ19JTklUKC0xKTsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1czsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJYnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCAwKTsKJiM0MzsJaWYgKCFidXMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJYnVzLSZndDtuYW1lID0gJiMzNDtSb2NrY2hpcCBEVyBYUENTIE1DSS9BUEIzJiMzNDs7CiYjNDM7CWJ1cy0mZ3Q7cmVhZCA9IHhwY3NfcmtfcmVhZF9jMjI7CiYjNDM7CWJ1cy0mZ3Q7d3JpdGUgPSB4cGNzX3JrX3dyaXRlX2MyMjsKJiM0MzsJYnVzLSZndDtyZWFkX2M0NSA9IHhwY3NfcmtfcmVhZF9jNDU7CiYjNDM7CWJ1cy0mZ3Q7d3JpdGVfYzQ1ID0geHBjc19ya193cml0ZV9jNDU7CiYjNDM7CWJ1cy0mZ3Q7cGh5X21hc2sgPSB+MDsKJiM0MzsJYnVzLSZndDtwYXJlbnQgPSBkZXY7CiYjNDM7CWJ1cy0mZ3Q7cHJpdiA9IHB4cGNzOwomIzQzOwomIzQzOwlzbnByaW50ZihidXMtJmd0O2lkLCBNSUlfQlVTX0lEX1NJWkUsCiYjNDM7CQkgJiMzNDtyb2NrY2hpcF9kd3hwY3MtJXgmIzM0OywgYXRvbWljX2luY19yZXR1cm4oJmFtcDtpZCkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNRElPLWJ1cyBoZXJlIHNlcnZlcyBhcyBqdXN0IGEgYmFjay1lbmQgZW5naW5lIGFic3RyYWN0aW5nIG91dAomIzQzOwkgKiB0aGUgTURJTyBhbmQgTUNJL0FQQjMgSU8gaW50ZXJmYWNlcyB1dGlsaXplZCBmb3IgdGhlIFJvY2tjaGlwIERXWFBDUyBDU1JzCiYjNDM7CSAqIGFjY2Vzcy4KJiM0MzsJICovCiYjNDM7CXJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgTURJTyBidXNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHhwY3MtJmd0O2J1cyA9IGJ1czsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlweHBjcyA9IHhwY3NfcmtfY3JlYXRlX2RhdGEocGRldik7CiYjNDM7CWlmIChJU19FUlIocHhwY3MpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHhwY3MpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgWFBDUyBtYXkgYmUgYXR0YWNoZWQgdG8gYSBwb3dlciBkb21haW4gKGUuZy4gUERfUElQRSkuIFRoZSBkb21haW4KJiM0MzsJICogbXVzdCBiZSBwb3dlcmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQyB3aWxsCiYjNDM7CSAqIHRyaWdnZXIgYSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCAoU0Vycm9yKS4KJiM0MzsJICoKJiM0MzsJICogQWNjZXNzaW5nIHRoZSBYUENTIHJlZ2lzdGVycyBhbHNvIHJlcXVpcmVzIGEgVFggY2xvY2sgZnJvbSB0aGUgU2VyRGVzLAomIzQzOwkgKiB3aGljaCBpcyBuZWVkZWQgZm9yIHRoZSBzb2Z0IHJlc2V0LgomIzQzOwkgKi8KJiM0MzsJcmV0ID0geHBjc19ya19zZXJkZXNfcGh5X2luaXQocHhwY3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb24ocHhwY3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geHBjc19ya19pbml0X3JlcyhweHBjcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB4cGNzX3JrX2luaXRfY2xrKHB4cGNzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHhwY3NfcmtfaW5pdF9idXMocHhwY3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhwY3Nfcmtfb2ZfaWRzW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JvY2tjaGlwLHJrMzU2OC14cGNzJiMzNDsgfSwKJiM0MzsJeyAvKiBzZW50aW5lbCAqLyB9LAomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHBjc19ya19vZl9pZHMpOwomIzQzOwomIzQzO3N0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjc19ucDsKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzOwomIzQzOwlzdHJ1Y3QgZHdfeHBjcyAqeHBjczsKJiM0MzsJdTMyIHBvcnQ7CiYjNDM7CiYjNDM7CWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKJiM0MzsKJiM0MzsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO3BvcnQpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CWlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoKGludClwb3J0KSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwkvKiBUaGUgWFBDUyBwZGV2IGlzIGF0dGFjaGVkIHRvIHRoZSBwYXJlbnQgbm9kZSAqLwomIzQzOwlwY3NfbnAgPSBvZl9nZXRfcGFyZW50KG5wKTsKJiM0MzsJaWYgKCFwY3NfbnApCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKJiM0MzsKJiM0MzsJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBjc19ucCkpIHsKJiM0MzsJCW9mX25vZGVfcHV0KHBjc19ucCk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIW9mX21hdGNoX25vZGUoeHBjc19ya19vZl9pZHMsIHBjc19ucCkpIHsKJiM0MzsJCW9mX25vZGVfcHV0KHBjc19ucCk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwY3NfbnApOwomIzQzOwlvZl9ub2RlX3B1dChwY3NfbnApOwomIzQzOwlpZiAoIXBkZXYpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKJiM0MzsKJiM0MzsJaWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCAmYW1wO3BkZXYtJmd0O2RldiwgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkgewomIzQzOwkJcHV0X2RldmljZSgmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwomIzQzOwlweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlpZiAoIXB4cGNzIHx8ICFweHBjcy0mZ3Q7YnVzKSB7CiYjNDM7CQlkZXZpY2VfbGlua19yZW1vdmUoZGV2LCAmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CQlwdXRfZGV2aWNlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHB4cGNzLSZndDtidXMsIChpbnQpcG9ydCk7CiYjNDM7CWlmIChJU19FUlIoeHBjcykpIHsKJiM0MzsJCWRldmljZV9saW5rX3JlbW92ZShkZXYsICZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJCXB1dF9kZXZpY2UoJmFtcDtwZGV2LSZndDtkZXYpOwomIzQzOwkJcmV0dXJuIHhwY3M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJeHBjc19jb25maWdfZWVlX211bHRfZmFjdCh4cGNzLCBweHBjcy0mZ3Q7ZWVlX211bHRfZmFjdCk7CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDtwZGV2LSZndDtkZXYpOwomIzQzOwlyZXR1cm4geHBjczsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19ya19jcmVhdGUpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CWNsa19kaXNhYmxlX3VucHJlcGFyZShweHBjcy0mZ3Q7Y3NyX2Nsayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtJmd0O2Nzcl9jbGspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1JVTlRJTUVfREVWX1BNX09QUyh4cGNzX3JrX3BtX29wcywKJiM0MzsJCQkgICB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZCwKJiM0MzsJCQkgICB4cGNzX3JrX3BtX3J1bnRpbWVfcmVzdW1lLAomIzQzOwkJCSAgIE5VTEwpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhwY3NfcmtfZHJpdmVyID0gewomIzQzOwkucHJvYmUgPSB4cGNzX3JrX3Byb2JlLAomIzQzOwkuZHJpdmVyID0gewomIzQzOwkJLm5hbWUgPSAmIzM0O3JrX3hwY3MtZHd4cGNzJiMzNDssCiYjNDM7CQkucG0gPSBwbV9wdHIoJmFtcDt4cGNzX3JrX3BtX29wcyksCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUgPSB4cGNzX3JrX29mX2lkcywKJiM0MzsJfSwKJiM0Mzt9OwomIzQzO21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeHBjc19ya19kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1JvY2tjaGlwIFhQQ1MgcGxhdGZvcm0gZGV2aWNlIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Q29pYSBQcmFudCAmbHQ7Y29pYXByYW50QGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCmluZGV4IDAzMzdlMmJjYzAxMjUuLjhjMzg3NWI2OTg1YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCkBAIC03NjEsNyAmIzQzOzc2MSw5IEBAIHN0YXRpYyBpbnQgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsCiAJICogICAgRFcgeFBDUyB1c2VkIHdpdGggRFcgRVFvUyBNQUMgaXMgYWx3YXlzIE1BQyBzaWRlIFNHTUlJLgogCSAqIDQpIFZSX01JSV9ESUdfQ1RSTDEgQml0KDkpIFtNQUNfQVVUT19TV10gPSAxYiAoQXV0b21hdGljCiAJICogICAgc3BlZWQvZHVwbGV4IG1vZGUgY2hhbmdlIGJ5IEhXIGFmdGVyIFNHTUlJIEFOIGNvbXBsZXRlKQotCSAqIDUpIFZSX01JSV9NTURfQ1RSTCBCaXQoMTIpIFtBTl9FTkFCTEVdID0gMWIgKEVuYWJsZSBTR01JSSBBTikKJiM0MzsJICogNSkgVlJfTUlJX0FOX0lOVFJfU1RTID0gMHgwIChDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cykKJiM0MzsJICogNikgVlJfTUlJX01NRF9DVFJMIEJpdCgxMikgW0FOX0VOQUJMRV0gPSAxYiAoRW5hYmxlIFNHTUlJIEFOKQomIzQzOwkgKiAgICBWUl9NSUlfTU1EX0NUUkwgQml0KDkpIFtBTl9SRVNUQVJUXSA9IDFiIChSZXN0YXJ0IFNHTUlJIEFOKQogCSAqCiAJICogTm90ZSB0aGF0IFZSX01JSV9NTURfQ1RSTCBpcyBNSUlfQk1DUi4KIAkgKgpAQCAtNzY5LDcgJiM0Mzs3NzEsMTQgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcywKIAkgKgkgU1JfTUlJX0FOX0FEVi4gTUFDIHNpZGUgU0dNSUkgcmVjZWl2ZXMgQU4gVHggQ29uZmlnIGZyb20KIAkgKgkgUEhZIGFib3V0IHRoZSBsaW5rIHN0YXRlIGNoYW5nZSBhZnRlciBDMjggQU4gaXMgY29tcGxldGVkCiAJICoJIGJldHdlZW4gUEhZIGFuZCBMaW5rIFBhcnRuZXIuIFRoZXJlIGlzIGFsc28gbm8gbmVlZCB0bwotCSAqCSB0cmlnZ2VyIEFOIHJlc3RhcnQgZm9yIE1BQy1zaWRlIFNHTUlJLgomIzQzOwkgKgkgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSSBvbiBtb3N0IGRldmljZXMuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGU6IFdoaWxlIHRoZSBEZXNpZ25XYXJlIGRhdGFib29rIHN0YXRlcyB0aGF0IEFOIHJlc3RhcnQgaXMKJiM0MzsJICoJIG5vdCBuZWVkZWQgZm9yIE1BQyBzaWRlIFNHTUlJLCBzb21lIGltcGxlbWVudGF0aW9ucyAoZS5nLgomIzQzOwkgKgkgUm9ja2NoaXAgUkszNTY4KSBleGhpYml0IGEgdGltaW5nIHF1aXJrIHdoZW4gaW50ZWdyYXRlZCB3aXRoCiYjNDM7CSAqCSBwaHlsaW5rIGFuZCBkbyBub3QgcmVzdGFydCBBTiBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGxpbmsKJiM0MzsJICoJIGNvbWVzIGJhY2sgdXAuIEFuIGV4cGxpY2l0IEFOIHJlc3RhcnQgaXMgcmVxdWlyZWQgb24gdGhvc2UKJiM0MzsJICoJIHBhcnRzIHRvIHJlY292ZXIgdGhlIGxpbmsgYWZ0ZXIgYSBkaXNjb25uZWN0LgogCSAqLwogCW1kaW9fY3RybCA9IHhwY3NfcmVhZCh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IpOwogCWlmIChtZGlvX2N0cmwgJmx0OyAwKQpAQCAtODE2LDkgJiM0Mzs4MjUsMTQgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcywKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAomIzQzOwkvKiBDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cyAqLwomIzQzOwlyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJaWYgKG5lZ19tb2RlID09IFBIWUxJTktfUENTX05FR19JTkJBTkRfRU5BQkxFRCkKIAkJcmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsCi0JCQkJIG1kaW9fY3RybCB8IEJNQ1JfQU5FTkFCTEUpOwomIzQzOwkJCQkgbWRpb19jdHJsIHwgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDkzLDkgJiM0MzsxMTA3LDE4IEBAIHN0YXRpYyBpbnQgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBDbGVhciBBTiBjb21wbGV0ZSBzdGF0dXMgb3IgaW50ZXJydXB0ICovCi0JaWYgKHN0YXRlLSZndDthbl9jb21wbGV0ZSkKLQkJeHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTsKJiM0MzsJaWYgKHN0YXRlLSZndDthbl9jb21wbGV0ZSkgewomIzQzOwkJLyogQ2xlYXIgQU4gY29tcGxldGUgc3RhdHVzIG9yIGludGVycnVwdCAqLwomIzQzOwkJcmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBJbml0aWF0ZSB0aGUgbmV4dCByb3VuZCBvZiBBTiAqLwomIzQzOwkJcmV0ID0geHBjc19tb2RpZnkoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSLCBCTUNSX0FOUkVTVEFSVCwKJiM0MzsJCQkJICBCTUNSX0FOUkVTVEFSVCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jIGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uN2I4NjdlNzUyMDA2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV94cGNzX3BoeV9yZWFkeTsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwwX3NlbDsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwxX3NlbDsKJiM0MzsJc3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfc2dtaWlfbWFjX3NlbDsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgdTNvdGcwX3BvcnRfZW47CiAJc3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMV9wb3J0X2VuOwogfTsKQEAgLTIxMiw2ICYjNDM7MjEzLDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiB7CiAJYm9vbCBlbmFibGVfc3NjOwogCWJvb2wgZXh0X3JlZmNsazsKIAlzdHJ1Y3QgY2xrICpyZWZjbGs7CiYjNDM7CXUzMiBzZ21paV9tYWNfc2VsOwogfTsKIAogc3RhdGljIHZvaWQgcm9ja2NoaXBfY29tYnBoeV91cGRhdGVsKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYsCkBAIC0zNzUsNiAmIzQzOzM3Nyw5IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfY29tYnBoeV9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByb2NrY2hpcF9jb21icGh5CiAKIAlwcml2LSZndDtleHRfcmVmY2xrID0gZGV2aWNlX3Byb3BlcnR5X3ByZXNlbnQoZGV2LCAmIzM0O3JvY2tjaGlwLGV4dC1yZWZjbGsmIzM0Oyk7CiAKJiM0MzsJcHJpdi0mZ3Q7c2dtaWlfbWFjX3NlbCA9IDE7CiYjNDM7CWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICYjMzQ7cm9ja2NoaXAsc2dtaWktbWFjLXNlbCYjMzQ7LCAmYW1wO3ByaXYtJmd0O3NnbWlpX21hY19zZWwpOwomIzQzOwogCXByaXYtJmd0O3BoeV9yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X2V4Y2x1c2l2ZShkZXYsICYjMzQ7cGh5JiMzNDspOwogCS8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi8KIAlpZiAoUFRSX0VSUihwcml2LSZndDtwaHlfcnN0KSA9PSAtRU5PRU5UKQpAQCAtODczLDYgJiM0Mzs4NzgsOCBAQCBzdGF0aWMgaW50IHJrMzU2OF9jb21icGh5X2NmZyhzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2KQogCQlicmVhazsKIAogCWNhc2UgUEhZX1RZUEVfU0dNSUk6CiYjNDM7CQlyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtJmd0O3BpcGVfZ3JmLCAmYW1wO2NmZy0mZ3Q7cGlwZV9zZ21paV9tYWNfc2VsLAomIzQzOwkJCQkJICAgICBwcml2LSZndDtzZ21paV9tYWNfc2VsICZndDsgMCk7CiAJCXJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi0mZ3Q7cGlwZV9ncmYsICZhbXA7Y2ZnLSZndDtwaXBlX3hwY3NfcGh5X3JlYWR5LCB0cnVlKTsKIAkJcm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LSZndDtwaHlfZ3JmLCAmYW1wO2NmZy0mZ3Q7cGlwZV9waHltb2RlX3NlbCwgdHJ1ZSk7CiAJCXJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi0mZ3Q7cGh5X2dyZiwgJmFtcDtjZmctJmd0O3BpcGVfc2VsX3FzZ21paSwgdHJ1ZSk7CkBAIC05ODQsNiAmIzQzOzk5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcgcmszNTY4X2NvbWJwaHlfZ3JmY2ZncyA9IHsKIAkuY29uM19mb3Jfc2F0YQkJPSB7IDB4MDAwYywgMTUsIDAsIDB4MDAsIDB4NDQwNyB9LAogCS8qIHBpcGUtZ3JmICovCiAJLnBpcGVfY29uMF9mb3Jfc2F0YQk9IHsgMHgwMDAwLCAxNSwgMCwgMHgwMCwgMHgyMjIwIH0sCiYjNDM7CS5waXBlX3NnbWlpX21hY19zZWwJPSB7IDB4MDA0MCwgMSwgMSwgMHgwMCwgMHgwMSB9LAogCS5waXBlX3hwY3NfcGh5X3JlYWR5CT0geyAweDAwNDAsIDIsIDIsIDB4MDAsIDB4MDEgfSwKIAkudTNvdGcwX3BvcnRfZW4JCT0geyAweDAxMDQsIDE1LCAwLCAweDAxODEsIDB4MTEwMCB9LAogCS51M290ZzFfcG9ydF9lbgkJPSB7IDB4MDE0NCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIGIvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yODcyM2Q1YmQ3NWNjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaApAQCAtMCwwICYjNDM7MSwxMSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7I2lmbmRlZiBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0gKJiM0MzsjZGVmaW5lIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNzL3Bjcy14cGNzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA3MQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDExMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gaXRzIGZlYXNpYmlsaXR5IGZvciBmdXp6aW5nLCBnaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUgb2YgY29uY2Vybi4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBwYXRjaCBhY3R1YWxseSAqZG9lcyouIExvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZpbGVzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3MgYSB3aWRlIHJhbmdlOiBkZXZpY2UgdHJlZSBiaW5kaW5ncyAoUm9ja2NoaXAgYW5kIHBvdGVudGlhbGx5IGdlbmVyaWMpLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgKE1BSU5UQUlORVJTKSwgRFRTIGZpbGVzIChSSzM1NjgpLCBkcml2ZXIgY29kZSAoc3RtbWFjLCBSb2NrY2hpcC1zcGVjaWZpYyBkd21hYywgUENTIGRyaXZlcnMsIGFuZCBhIFJvY2tjaGlwIGNvbWJwaHkpLCBLY29uZmlnIGFuZCBNYWtlZmlsZXMgcmVsYXRlZCB0byBQQ1MgYW5kIHN0bW1hYy4gVGhpcyBzdWdnZXN0cyBjaGFuZ2VzIHJlbGF0ZWQgdG8gRXRoZXJuZXQgY29ubmVjdGl2aXR5LCBwb3NzaWJseSBpbmNsdWRpbmcgYSBuZXcgUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybS4KClRoZSBmaWxlcyB0aGF0IGp1bXAgb3V0IGFyZSB0aGUgYGR3bWFjLWludGVsLmNgIGZpbGUgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgYHBjcy14cGNzLXJrLmNgIGZpbGUsIGFsb25nIHdpdGggcmVsYXRlZCBLY29uZmlnIGFuZCBoZWFkZXIgZmlsZXMuIEl0IGxvb2tzIGxpa2Ugd2UgYXJlIGFkZGluZyBzdXBwb3J0IGZvciBhIFJvY2tjaGlwIFhQQ1MgdG8gc3RtbWFjIHZpYSB0aGUgaW50ZWwgbWdiZSBtb2R1bGUuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqcmVhY2hhYmlsaXR5Ki4gQ2FuIHRoaXMgY29kZSBiZSBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRT8gVGhpcyBpcyBwYXJhbW91bnQgZm9yIGZ1enppbmcgZWZmZWN0aXZlbmVzcy4gU3BlY2lmaWNhbGx5LCB0aGUgaW5zdHJ1Y3Rpb24mIzM5O3Mgc2VjdGlvbiAyIG91dGxpbmVzIHRoYXQgY29kZSBNVVNUIE5PVCBiZSBmdXp6ZWQgaWYgaXQmIzM5O3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHRoZXNlIGVudmlyb25tZW50cy4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCBgZHdtYWMtaW50ZWwuY2AuIElzIHRoZSBjb2RlIGluIHRoaXMgZmlsZSByZWFjaGFibGUgb24gYW1kNjQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSXMgaXQgc3RyaWN0bHkgZm9yIHBoeXNpY2FsIGhhcmR3YXJlPyBJIG5lZWQgdG8ga25vdyBpZiBJbnRlbCBFdGhlcm5ldC9QQ0kgaXMgZW11bGF0ZWQgaW4gUUVNVSwgb3IgaWYgYHN0bW1hY2AgaXMgdHlwaWNhbGx5IHRpZWQgdG8gc3BlY2lmaWMgU29DIGhhcmR3YXJlLiBEb2VzIFFFTVUgZW11bGF0ZSB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGBkd21hYy1pbnRlbGAgb3IgYHN0bW1hY2Agc3RhY2s/CgpUaGUgaW5zdHJ1Y3Rpb24gc2V0IGhpZ2hsaWdodHMgdGhpcyBhcyBhIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciBmdXp6aW5nOiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyBvciB0aG9zZSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRoYXQgYXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEFsc28gaW1wb3J0YW50IGFyZSBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgcmVseSBvbiBhIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCB1bmJpbmRpbmcuIEFkZGl0aW9uYWxseSwgdGhpcyBpcyBsaWtlbHkgdG8gYXBwbHkgdG8gY29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgZHdtYWMtaW50ZWxgIG9yIGBzdG1tYWNgICpjYW4qIGJlIHJlYWNoZWQgaW4gYSBRRU1VIGVudmlyb25tZW50LiBJIG5lZWQgdG8gZ3JlcCB0aGUga2VybmVsIHNvdXJjZXMgdG8gdW5kZXJzdGFuZCB0aGUgdHlwaWNhbCB1c2UgY2FzZXMgZm9yIHRoZXNlIGRyaXZlcnMuIElmIGl0JiMzOTtzIHRpZ2h0bHkgY291cGxlZCB0byBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0JiMzOTtzIG5vdCBlbXVsYXRlZCwgdGhlbiBmdXp6aW5nIHdvdWxkIGJlIGEgd2FzdGUgb2YgdGltZSBhbmQgcmVzb3VyY2VzIGFuZCB0aGlzIHBhdGNoIHdvdWxkIGJlIG5vbi13b3J0aHdoaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9ERVZJQ0VfVEFCTEUuKnBjaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xNDMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xNDUwLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0NTE6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGludGVsX2V0aF9wY2lfaWRfdGFibGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xNDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTcyCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJbnRlbCBFdGhlcm5ldCBQQ0kgSUQgVGFibGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBQQ0kgZGV2aWNlIElEcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBJbnRlbCBFdGhlcm5ldCBjb250cm9sbGVycy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlYCBkYXRhIHN0cnVjdHVyZS4gVGhhdCB0YWJsZSBpcyBkZWZpbmVkIGluIGBkd21hYy1pbnRlbC5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gaGVhZC4gSSBzdXNwZWN0IHRoaXMgdGFibGUgaG9sZHMgdGhlIGtleSB0byBob3cgdGhlIGRyaXZlciByZWNvZ25pemVzIGFuZCBzdXBwb3J0cyBkaWZmZXJlbnQgSW50ZWwgRXRoZXJuZXQgaGFyZHdhcmUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkLCB3aGF0IGZpZWxkcyBhcmUgaW5jbHVkZWQgKFZlbmRvciBJRCwgRGV2aWNlIElELCBTdWJzeXN0ZW0gSURzLCBldGMuKSwgYW5kIGhvdyB0aGUgZHJpdmVyIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiBkdXJpbmcgZGV2aWNlIHByb2JlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIFBDSSBkZXZpY2UgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBhbmQgaG93IGl0IHRoZW4gYXNzb2NpYXRlcyB0aGUgZGV2aWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gYW5kIHNldHVwIHJvdXRpbmVzLiBNeSBnb2FsIGlzIGEgc29saWQgZ3Jhc3Agb2YgdGhlIGRldmljZSBtYXRjaGluZyBhbmQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQzMDpcdFxuMTQzMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlW10gPSB7XG4xNDMyOlx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgUVVBUkssIFx1MDAyNnF1YXJrX2luZm8pIH0sXG4xNDMzOlx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1JHTUlJMUcsIFx1MDAyNmVobF9yZ21paTFnX2luZm8pIH0sXG4xNDM0Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1NHTUlJMUcsIFx1MDAyNmVobF9zZ21paTFnX2luZm8pIH0sXG4xNDM1Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1NHTUlJMkc1LCBcdTAwMjZlaGxfc2dtaWkxZ19pbmZvKSB9LFxuMTQzNjpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UwX1JHTUlJMUcsIFx1MDAyNmVobF9wc2UwX3JnbWlpMWdfaW5mbykgfSxcbjE0Mzc6XHRcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMF9TR01JSTFHLCBcdTAwMjZlaGxfcHNlMF9zZ21paTFnX2luZm8pIH0sXG4xNDM4Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTBfU0dNSUkyRzUsIFx1MDAyNmVobF9wc2UwX3NnbWlpMWdfaW5mbykgfSxcbjE0Mzk6XHRcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMV9SR01JSTFHLCBcdTAwMjZlaGxfcHNlMV9yZ21paTFnX2luZm8pIH0sXG4xNDQwOlx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTFfU0dNSUkxRywgXHUwMDI2ZWhsX3BzZTFfc2dtaWkxZ19pbmZvKSB9LFxuMTQ0MTpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UxX1NHTUlJMkc1LCBcdTAwMjZlaGxfcHNlMV9zZ21paTFnX2luZm8pIH0sXG4xNDQyOlx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMX1NHTUlJMUcsIFx1MDAyNnRnbF9zZ21paTFnX3BoeTBfaW5mbykgfSxcbjE0NDM6XHRcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBUR0xIX1NHTUlJMUdfMCwgXHUwMDI2dGdsX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxuMTQ0NDpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFRHTEhfU0dNSUkxR18xLCBcdTAwMjZ0Z2xfc2dtaWkxZ19waHkxX2luZm8pIH0sXG4xNDQ1Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgQURMU19TR01JSTFHXzAsIFx1MDAyNmFkbHNfc2dtaWkxZ19waHkwX2luZm8pIH0sXG4xNDQ2Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgQURMU19TR01JSTFHXzEsIFx1MDAyNmFkbHNfc2dtaWkxZ19waHkxX2luZm8pIH0sXG4xNDQ3Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgQURMTl9TR01JSTFHLCBcdTAwMjZhZGxuX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxuMTQ0ODpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFJQTFBfU0dNSUkxRywgXHUwMDI2YWRsbl9zZ21paTFnX3BoeTBfaW5mbykgfSxcbjE0NDk6XHRcdHt9XG4xNDUwOlx0fTtcbjE0NTE6XHRNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaW50ZWxfZXRoX3BjaV9pZF90YWJsZSk7XG4xNDUyOlx0XG4xNDUzOlx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGludGVsX2V0aF9wY2lfZHJpdmVyID0ge1xuMTQ1NDpcdFx0Lm5hbWUgPSBcJiMzNDtpbnRlbC1ldGgtcGNpXCYjMzQ7LFxuMTQ1NTpcdFx0LmlkX3RhYmxlID0gaW50ZWxfZXRoX3BjaV9pZF90YWJsZSxcbjE0NTY6XHRcdC5wcm9iZSA9IGludGVsX2V0aF9wY2lfcHJvYmUsXG4xNDU3Olx0XHQucmVtb3ZlID0gaW50ZWxfZXRoX3BjaV9yZW1vdmUsXG4xNDU4Olx0XHQuZHJpdmVyICAgICAgICAgPSB7XG4xNDU5Olx0XHRcdC5wbSAgICAgPSBcdTAwMjZzdG1tYWNfc2ltcGxlX3BtX29wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE5MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDY5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBEcml2ZXIgQ29tcGF0aWJpbGl0eSBvbiBhbWQ2NCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGR3bWFjLWludGVsLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgc2VlbXMgc3BlY2lmaWMgdG8gSW50ZWwgUXVhcmssIEVsa2hhcnQgTGFrZSwgVGlnZXIgTGFrZSwgQWxkZXIgTGFrZSwgYW5kIFJhcHRvciBMYWtlIGludGVncmF0ZWQgTUFDcy4gUmlnaHQsIHBoeXNpY2FsIEludGVsIFBDSSBkZXZpY2VzIG9uIHRob3NlIHNwZWNpZmljIEludGVsIFNvQ3MuIEJ1dCB0aGVuIEkgc3RvcCBhbmQgdGhpbmssICYjMzQ7RG9lcyBRRU1VIGFjdHVhbGx5IGVtdWxhdGUgYW4gSW50ZWwgUXVhcmsvRUhML1RHTCBzdG1tYWMgRXRoZXJuZXQgZGV2aWNlPyYjMzQ7IEkgZG9uJiMzOTt0ICp0aGluayogc28sIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4KCkxldCYjMzk7cyBjaGVjayB3aGF0IGVsc2UgaXMgYmVpbmcgcmVmZXJlbmNlZC4gSSBzZWUgZHJpdmVycyBmb3IgUm9ja2NoaXA6IGBwY3MteHBjcy1yay5jYCwgYGR3bWFjLXJrLmNgLCBhbmQgYHBoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jYCwgYXMgd2VsbCBhcyBkZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgYXNzb2NpYXRlZCBhcmNoaXRlY3R1cmUgZmlsZXMuIFRoZXNlIGFyZSBhbGwgY2xlYXJseSBmb3IgUm9ja2NoaXAgU29Dcywgc3BlY2lmaWNhbGx5IHRoZSBSSzM1NjgsIGFuIEFSTTY0IHBsYXRmb3JtLiBIb3dldmVyLCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCEgVGhpcyBtZWFucyBgYXJjaC9hcm02NC8uLi5gIGlzICpub3QqIGNvbXBpbGVkIG9yIHVzZWQgb24gdGhlIGFtZDY0IGJ1aWxkIEkmIzM5O20gd29ya2luZyB3aXRoLgoKSSBkcmlsbCBkb3duIGZ1cnRoZXI6IGBkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY2AgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIFJvY2tjaGlwIFJLMzU2eCBTb0NzLCBhbmQgcmVxdWlyZXMgT3BlbkZpcm13YXJlIGRldmljZSB0cmVlIGFuZCBSb2NrY2hpcCBoYXJkd2FyZS4gRXZlbiBpZiBgQ09NUElMRV9URVNUYCBlbmFibGVzIGl0LCBpdCYjMzk7cyBtYXRjaGluZyBgcm9ja2NoaXAscmszNTY4LXhwY3NgIHdoaWNoICp3b24mIzM5O3QqIGluc3RhbnRpYXRlIG9uIGFtZDY0IGluIFFFTVUuIFNhbWUgZ29lcyBmb3IgYGR3bWFjLXJrLmNgLCBgcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNgLCBgZHdtYWMtcmVuZXNhcy1nYmV0aC5jYCwgYGR3bWFjLXJ6bjEuY2AsIGFuZCBgZHdtYWMtc29jZnBnYS5jYC4gQWxsIHBsYXRmb3JtIGRyaXZlcnMsIHRhcmdldGluZyBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIG9yIGhhcmR3YXJlIHRoYXQgYXJlIG5vdCByZWxldmFudCB0byBteSBjdXJyZW50IGFtZDY0IFFFTVUgc2V0dXAuCgpTbywgYmFjayB0byB0aGUgc3RtbWFjIHF1ZXN0aW9uOiB3aGF0IGFib3V0IGBzdG1tYWNfbWRpby5jYCwgYHBjcy14cGNzLmNgLCBhbmQgYGR3bWFjLWludGVsLmNgPyBJIGhhdmUgdG8gbG9vayBpbnRvIGBzdG1tYWNfbWRpby5jYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHZpcnR1YWwgb3IgZW11bGF0ZWQgZGV2aWNlIGluIGl0LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgc3RtbWFjYCBkcml2ZXJzIGFuZCBzZWUgaWYgYW55IGFyZSBlbXVsYXRlZCBieSBRRU1VLCBvciBwcm92aWRlIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIG15IGFuYWx5c2lzLiBJIHdpbGwgbm93IHNlYXJjaCB0aGUga2VybmVsIHRyZWUgZm9yIGRyaXZlcnMgdGhhdCB1c2Ugc3RtbWFjLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19kdnJfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYz0yODM9c3RhdGljIGludCBkd2NfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jOjMzMDpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzMxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM9NDI9c3RhdGljIGludCBpbnRlbF9ldGhfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYy0xMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM6MTE4Olx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMjk5PXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzNzc6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzc4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYz0zNzQ9c3RhdGljIGludCBpcHE4MDZ4X2dtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jOjQ4MzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDg0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NDk4PXN0YXRpYyBpbnQgbG9vbmdzb25fZHdtYWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU2MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTYyOlx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM9NDI9c3RhdGljIGludCBscGMxOHh4X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jOjY4Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02OS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYz01OTk9c3RhdGljIGludCBtZWRpYXRla19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYzo2NDI6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jLTY0My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYz00Nz1zdGF0aWMgaW50IG1lc29uNl9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jOjczOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYz0zODI9c3RhdGljIGludCBtZXNvbjhiX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jLTQ2My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYzo0NjQ6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jLTQ2NS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjkzPXN0YXRpYyBpbnQgbW90b3Jjb21tX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MzU5Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNjAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYz01MT1zdGF0aWMgaW50IHJ6bjFfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM6NzE6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTcyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYz0zNT1zdGF0aWMgaW50IHNvcGhnb19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmM6NjU6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY2LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jPTE0Nz1zdGF0aWMgaW50IHNwYWNlbWl0X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jOjIwNzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmM9OTA9c3RhdGljIGludCBzdGFyZml2ZV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmMtMTUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYzoxNTM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTI1PXN0YXRpYyBpbnQgc3RtMzJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM6NTc5Olx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy01ODAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM9MTEwNT1zdGF0aWMgaW50IHN1bjhpX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjAyOlx0LyogdGhlIE1BQyBpcyBydW50aW1lIHN1c3BlbmRlZCBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKCksIHNvIHdlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDMtXHQgKiBuZWVkIHRvIGVuc3VyZSB0aGUgTUFDIHJlc3VtZSBiYWNrIGJlZm9yZSBvdGhlciBvcGVyYXRpb25zIHN1Y2hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDgtXHQvKiBUaGUgbXV4IG11c3QgYmUgcmVnaXN0ZXJlZCBhZnRlciBwYXJlbnQgTURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjA5Olx0ICogc28gYWZ0ZXIgc3RtbWFjX2R2cl9wcm9iZSgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMTAtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jPTIxND1zdGF0aWMgaW50IHRlZ3JhX21nYmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTM3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM6Mzc2Olx0ZXJyID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc3LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jPTIwNT1zdGF0aWMgaW50IHZpc2NvbnRpX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYzoyMzc6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jLTIzOC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDExPXZvaWQgc3RtbWFjX2R2cl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxMjppbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTMtXHRcdCAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc4MTQ9RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX3BsYXRfZGF0X2FsbG9jKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzgxNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzgxNjpzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4MTctXHRcdFx0ICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTktLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMjA6ICogc3RtbWFjX2R2cl9wcm9iZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTIxLSAqIEBkZXY6IGRldmljZSBwb2ludGVyXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTI4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTI5OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzMC1cdFx0ICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODE0MDpcdHJldCA9IF9fc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCByZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTQxLVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcGxhdF9kYXQtXHUwMDNlZXhpdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNDUtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTQ2OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTQ3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTgzOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg0LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz04NDY9aW50IHN0bW1hY19wbHRmcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jOjg1NTpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCByZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU4MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDU0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRXRoZXJuZXQgRGV2aWNlIERyaXZlcnMgYW5kIFFFTVUgRW11bGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGxpc3Qgb2YgRXRoZXJuZXQgZHJpdmVycyBhbmQgZGV2aWNlcy4gSSBzZWUgYSB3aG9sZSBzbGV3IG9mIHRoZW06IGBkd21hYy1kd2MtcW9zLWV0aGAsIGBkd21hYy1pbnRlbC1wbGF0YCwgYGR3bWFjLWludGVsYCwgYGR3bWFjLWlwcTgwNnhgLCBgZHdtYWMtbG9vbmdzb25gLCBhbmQgdGhlIGxpc3QgZ29lcyBvbi4gIEl0JiMzOTtzIGNsZWFyLCB0aGV5JiMzOTtyZSBhbGwgaGFyZHdhcmUgTUFDIGNvbnRyb2xsZXJzLiAgU29DIHBsYXRmb3JtIGRldmljZXMsIG1vc3RseSwgb3IgcGh5c2ljYWwgUENJIGRldmljZXMuICBNYWtlcyBzZW5zZSwgcmlnaHQ/CgpCdXQgdGhlbiBJIGhhZCBhIHRob3VnaHQuIFdoYXQgYWJvdXQgUUVNVT8gRG9lcyBRRU1VLCB0aGUgc3RhbmRhcmQgeDg2XzY0IHZlcnNpb24sIGVtdWxhdGUgYW55IG9mIHRoZXNlIGRyaXZlcnMg4oCTIHNvbWV0aGluZyBsaWtlIGBzdG1tYWNgLCBgZHdtYWMtaW50ZWxgLCBvciBhbnkgb2YgdGhvc2UgRFcgWFBDUyBkZXZpY2VzPyAgTGV0JiMzOTtzIGNoZWNrIHdoYXQgbmV0d29yayBkZXZpY2VzIFFFTVUgKmRvZXMqIGVtdWxhdGU6IGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgZXRjLiAgQWgsIG5vIHNpZ24gb2YgdGhlIFN5bm9wc3lzIG9yIERlc2lnbldhcmUgZGV2aWNlcyEgIEFuZCwgdGhpbmtpbmcgYWJvdXQgaXQsIGV2ZW4gb24gQVJNIHRhcmdldHMsIFFFTVUgZW11bGF0ZXMgb3RoZXIgdGhpbmdzLiAgQnV0IHdlJiMzOTtyZSBmb2N1c2VkIG9uIHg4Nl82NCBoZXJlLiBObywgbm8gYHN0bW1hY2Agb3IgYGR3bWFjYCBlbXVsYXRpb24gdG8gYmUgZm91bmQhCgpBbHJpZ2h0LCBuZXh0IHN0ZXA6IGxldCYjMzk7cyB2ZXJpZnkgdGhlcmUgaXNuJiMzOTt0IHNvbWUgc29ydCBvZiB2aXJ0dWFsIGJ1cyBvciBzb2Z0d2FyZSBkZXZpY2UgdXNpbmcgdGhlc2UgZHJpdmVycyB1bmRlciB0aGUgaG9vZC4gVGhpbmdzIGxpa2UgVVNCIG9yIG5ldHdvcmsgZGV2aWNlIGVtdWxhdGlvbiwgdGhhdCBtaWdodCBhYnN0cmFjdCB0aGUgdW5kZXJseWluZyBjb250cm9sbGVyLiBPa2F5LCBzbyBJIHNob3VsZCBsb29rIGludG8gd2hhdCB1c2VzIGBwY3MteHBjc2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHBjc19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0zMjE9c3RhdGljIGludCBrc3o5NDc3X3Bjc19jcmVhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDUtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozNDY6XHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihidXMsIDApO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQ3LVx0aWYgKElTX0VSUihwY3MpKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTM2OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19wY3NfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00MTEtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzo0MTI6XHRcdHBjcyA9IHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KGJ1cywgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00MTMtXHRcdGlmIChJU19FUlIocGNzKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jPTE5Nz1pbnQgZmJuaWNfcGh5bGlua19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYy0yMDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYzoyMDU6XHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihmYmQtXHUwMDNlbWRpb19idXMsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMjA2LVx0aWYgKElTX0VSUihwY3MpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz02MDY9c3RhdGljIGludCBpbnRlbF9tZ2JlX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTYxNS1cdFx0cGNzbm9kZSA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZub2RlLCBcJiMzNDtwY3MtaGFuZGxlXCYjMzQ7LCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NjE2Olx0XHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MTctXHRcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE5LVx0XHRhZGRyID0gZmZzKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrKSAtIDE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjYyMDpcdFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cdTAwM2VtaWksIGFkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MjEtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0xMjY9c3RhdGljIGludCB0eGdiZV9tZGlvX3Bjc19pbml0KHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0xNTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE1NDpcdHBjcyA9IHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KG1paV9idXMsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0xNTUtXHRpZiAoSVNfRVJSKHBjcykpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmM9NDc4PXN0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMtNTI2LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmM6NTI3Olx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXHUwMDNlYnVzLCAoaW50KXBvcnQpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMtNTI4LVx0aWYgKElTX0VSUih4cGNzKSkge1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jPTE1MTI9c3RhdGljIGludCB4cGNzX2lkZW50aWZ5KHN0cnVjdCBkd194cGNzICp4cGNzKVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1MzEtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTMyOnN0YXRpYyBzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfZGF0YShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTMzLXtcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYz0xNTg0PXN0YXRpYyBpbnQgeHBjc19pbml0X2lkKHN0cnVjdCBkd194cGNzICp4cGNzKVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1OTgtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTk5OnN0YXRpYyBzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYwMC17XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYwMy1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2MDQ6XHR4cGNzID0geHBjc19jcmVhdGVfZGF0YShtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MDUtXHRpZiAoSVNfRVJSKHhwY3MpKVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MzUtLyoqXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjM2OiAqIHhwY3NfY3JlYXRlX21kaW9kZXYoKSAtIGNyZWF0ZSBhIERXIHhQQ1MgaW5zdGFuY2Ugd2l0aCB0aGUgTURJTyBAYWRkclxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYzNy0gKiBAYnVzOiBwb2ludGVyIHRvIHRoZSBNRElPLWJ1cyBkZXNjcmlwdG9yIGZvciB0aGUgZGV2aWNlIHRvIGJlIGxvb2tlZCBhdFxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NDMtICovXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjQ0OnN0cnVjdCBkd194cGNzICp4cGNzX2NyZWF0ZV9tZGlvZGV2KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY0NS17XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1Mi1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NTM6XHR4cGNzID0geHBjc19jcmVhdGUobWRpb2Rldik7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjU0LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY1NTpcdC8qIHhwY3NfY3JlYXRlKCkgaGFzIHRha2VuIGEgcmVmY291bnQgb24gdGhlIG1kaW9kZXYgaWYgaXQgd2FzXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjU2Olx0ICogc3VjY2Vzc2Z1bC4gSWYgeHBjc19jcmVhdGUoKSBmYWlscywgdGhpcyB3aWxsIGZyZWUgdGhlIG1kaW9cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NTctXHQgKiBkZXZpY2UgaGVyZS4gSW4gYW55IGNhc2UsIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGhvbGQgb3VyIHJlZmVyZW5jZVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NjQtfVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY2NTpFWFBPUlRfU1lNQk9MX0dQTCh4cGNzX2NyZWF0ZV9tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NjYtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjY3OnN0cnVjdCBwaHlsaW5rX3BjcyAqeHBjc19jcmVhdGVfcGNzX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY4LXtcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjcwLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY3MTpcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KGJ1cywgYWRkcik7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjcyLVx0aWYgKElTX0VSUih4cGNzKSlcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjc2LX1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2Nzc6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfcGNzX21kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY3OC1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NzktLyoqXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjgwOiAqIHhwY3NfY3JlYXRlX2Z3bm9kZSgpIC0gQ3JlYXRlIGEgRFcgeFBDUyBpbnN0YW5jZSBmcm9tIEBmd25vZGVcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2ODEtICogQGZ3bm9kZTogZndub2RlIGhhbmRsZSBwb2luaW5nIHRvIHRoZSBEVyBYUENTIGRldmljZVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2ODgtICovXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjg5OnN0cnVjdCBkd194cGNzICp4cGNzX2NyZWF0ZV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2OTAte1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE3MDAtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNzAxOlx0eHBjcyA9IHhwY3NfY3JlYXRlKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTcwMi1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE3MDM6XHQvKiB4cGNzX2NyZWF0ZSgpIGhhcyB0YWtlbiBhIHJlZmNvdW50IG9uIHRoZSBtZGlvZGV2IGlmIGl0IHdhc1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTcwNDpcdCAqIHN1Y2Nlc3NmdWwuIElmIHhwY3NfY3JlYXRlKCkgZmFpbHMsIHRoaXMgd2lsbCBmcmVlIHRoZSBtZGlvXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzA1LVx0ICogZGV2aWNlIGhlcmUuIEluIGFueSBjYXNlLCB3ZSBkb24mIzM5O3QgbmVlZCB0byBob2xkIG91ciByZWZlcmVuY2Vcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzEyLX1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE3MTM6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfZndub2RlKTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE3MTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDU2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTM0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBYUENTIERyaXZlciBNb2RpZmljYXRpb25zIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIGB4cGNzX2NyZWF0ZSpgIGZ1bmN0aW9ucywgYW5kIG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCB3ZSYjMzk7cmUgbGlrZWx5ICpub3QqIGdvaW5nIHRvIGJlIGFibGUgdG8gZnV6eiB0aGlzIGVmZmVjdGl2ZWx5IGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGtleSBpcyB0byBzZWUgaWYgYW55IG9mIHRoZXNlIGNoYW5nZXMgcGFzcyB0aGUgKm5lZ2F0aXZlKiBjcml0ZXJpYS4KCkkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgY2FsbGVycyBvZiBgeHBjc19jcmVhdGUqYDoga3N6OTQ3Nywgc2phMTEwNSwgZmJuaWMsIGR3bWFjLWludGVsLCB0eGdiZSwgYW5kIHBjcy14cGNzLXJrLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhlIHBhdHRlcm47IG5vbmUgb2YgdGhlbSBhcmUgZW11bGF0ZWQgYnkgUUVNVSwgdGhleSBhcmUgYWxsIGRlcGVuZGVudCBvbiBlaXRoZXIgcGh5c2ljYWwgU29DcyBvciBzcGVjaWZpYyBQQ0llIGNhcmRzIHRoYXQgYXJlIG5vdCBzdGFuZGFyZCBmYXJlLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBjaGVja2xpc3QuCgoxLiAgV2UgaGF2ZSBgRG9jdW1lbnRhdGlvbmAgY2hhbmdlcyAoYC55YW1sYCBhbmQgYC5kdHNgIGZpbGVzKSwgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZS4gVGhhdCYjMzk7cyBhIG5vLWdvIGZvciBmdXp6aW5nLiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZSBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSwgYW5kIGRvbiYjMzk7dCBkaXJlY3RseSBpbXBhY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS4KCjIuICBUaGUgYGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXBgIGZpbGVzIGFyZSBhbHNvIG91dCwgYXMgdGhlc2UgYXJlIERUUyBmaWxlcyBmb3IgYW4gYGFybTY0YCBSb2NrY2hpcCBhcmNoaXRlY3R1cmUsIGFuZCB3aGlsZSBEVCBpcyB1c2VkIG9uIG90aGVyIHBsYXRmb3JtcywgdGhpcyB0YXJnZXRzIEFSTSwgYW5kIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGBhbWQ2NGAuCgozLiAgVGhlIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBjaGFuZ2VzIGluIHRoZSBgZHJpdmVycy9uZXQvcGNzYCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjYCBkaXJlY3RvcmllcyBhcmUgYSBncmV5IGFyZWEuIFdoaWxlIHRoZXNlIGFmZmVjdCB0aGUgYnVpbGQgc3lzdGVtLCB0aGV5IGRvbiYjMzk7dCBkaXJlY3RseSBpbnRyb2R1Y2UgYW55IG5ldyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQsIHNvIGl0IG1heSBvciBtYXkgbm90IGRpc3F1YWxpZnkgdGhlIG1vZGlmaWNhdGlvbi4KCjQuICBOb3csIHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMsIGFuZCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IGBwY3MteHBjcy1yay5jYCwgYHBoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jYCwgYGR3bWFjLXJrLmNgLCBgZHdtYWMtcmVuZXNhcy1nYmV0aC5jYCwgYGR3bWFjLXJ6bjEuY2AsIGBkd21hYy1zb2NmcGdhLmNgLCBhbmQgYGR3bWFjLWludGVsLmNgLiBUaGVzZSBhbGwgdGFyZ2V0IHNwZWNpZmljIGhhcmR3YXJlOiBSb2NrY2hpcCBTb0NzLCBSZW5lc2FzIFNvQ3MsIEludGVsIFNvQyBGUEdBcywgYW5kIEludGVsIFNvQ3MuIFRoZXkgcmVxdWlyZSAqcGh5c2ljYWwqIGRldmljZXMgb3IsIGluIHRoZSBjYXNlIG9mIGBkd21hYy1pbnRlbGAsIGEgc3BlY2lmaWMgUENJZSBkZXZpY2UgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgYXZhaWxhYmxlIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgKmRlZmluaXRlbHkqIGEgbmVnYXRpdmUuCgo1LiBGaW5hbGx5LCB3ZSBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXI6IGBkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgWFBDUyBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkLiBFeGFtaW5pbmcgdGhlIG1vZGlmaWNhdGlvbnMsIEkgc2VlIGB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paWAgYW5kIGB4cGNzX2dldF9zdGF0ZV9jMzdfc2dtaWlgLiBIb3dldmVyLCB0aGVzZSBhcmUgcGFydCBvZiB0aGUgRFcgWFBDUyBQQ1MgZHJpdmVyLCB3aGljaCBpcyBvbmx5IGluc3RhbnRpYXRlZCBieSBkcml2ZXJzIGZvciB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgKHRoZSBkZXZpY2VzIGxpc3RlZCBhYm92ZSkuIFNvIGFnYWluLCB3ZSYjMzk7cmUgc3R1Y2suCgo2LiBUaGUgbW9kaWZpY2F0aW9uIHRvIGBzdG1tYWNfbWRpby5jYCBsb29rcyBpbnRlcmVzdGluZzogYHN0bW1hY19wY3Nfc2V0dXBgIGFuZCBgc3RtbWFjX3Bjc19jbGVhbmAsIGJ1dCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgc3RtbWFjX2R2cl9wcm9iZWAgLyBgc3RtbWFjX2R2cl9yZW1vdmVgLiBTbywgd2UgbmVlZCB0byB2ZXJpZnkgd2hlcmUgYHN0bW1hY19wY3Nfc2V0dXBgIGlzIGNhbGxlZCwgYW5kLCBtb3N0IGxpa2VseSwgd2lsbCBiZSByZWxhdGVkIHRvIHRoZXNlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBkcml2ZXJzLgoKU28sIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBhbGwgbW9kaWZpY2F0aW9ucyBmYWxsIGludG8gdGhlICYjMzQ7bmVnYXRpdmUgY3JpdGVyaWEmIzM0OyBjYXRlZ29yaWVzLiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZSBlaXRoZXIgZG9jdW1lbnRhdGlvbiwgQVJNL1JvY2tjaGlwIFNvQyBzcGVjaWZpYywgZGVwZW5kZW50IG9uIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQmIzM5O3Mgbm90IGVtdWxhdGVkIGJ5IFFFTVUsIG9yIHBhcnQgb2YgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmUuICoqSW4gY29uY2x1c2lvbiwgSSYjMzk7ZCBzYXkgdGhpcyBpcyBub3Qgd29ydGggZnV6emluZyBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuKioKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX3Bjc19zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD0zOTk9dm9pZCBzdG1tYWNfbWRpb191bmxvY2soc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQwMDppbnQgc3RtbWFjX3Bjc19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDEtdm9pZCBzdG1tYWNfcGNzX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc4MTY9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODA2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA2NjpcdHJldCA9IHN0bW1hY19wY3Nfc2V0dXAobmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwNjctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9MzgxPWludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNDI1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo0MjY6aW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTQyNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzQyCgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBObyBGdXp6aW5nIE5lZWRlZCBIZXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHN0bW1hY19wY3Nfc2V0dXBgIGlzIG9ubHkgY2FsbGVkIGR1cmluZyB0aGUgZHJpdmVyIHByb2JpbmcgcGhhc2UgKGBfX3N0bW1hY19kdnJfcHJvYmVgKSB3aXRoaW4gYHN0bW1hY19tYWluLmNgLCBhbmQgdGhlIGNsZWFudXAgY291bnRlcnBhcnQgKGBzdG1tYWNfcGNzX2NsZWFuYCkgb25seSBydW5zIHdoZW4gdGhlIGRyaXZlciBpcyBiZWluZyB0b3JuIGRvd24gb3IgaWYgcHJvYmluZyBmYWlscy4gTm93LCB0aGF0IGBfX3N0bW1hY19kdnJfcHJvYmVgIGZ1bmN0aW9uPyBJdCYjMzk7cyBzdHJpY3RseSBmb3IgcGh5c2ljYWwgc3RtbWFjIGRldmljZXMg4oCTIHRob3NlIGBkd21hYy0qYCBjb250cm9sbGVycyB5b3UgZmluZCBvbiBTb0NzIG9yIHBoeXNpY2FsIFBDSWUgY2FyZHMuIEFuZCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IG5vbmUgb2YgdGhlc2UgYXJlIGVtdWxhdGVkIGluIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCB3aGljaCBhcmUgdGhlIHN0YW5kYXJkIGVudmlyb25tZW50cyB3ZSYjMzk7cmUgY29uc2lkZXJpbmcuCgpGdXJ0aGVybW9yZSwgbG9va2luZyBhdCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCBhbGwgdGhvc2UgcGxhdGZvcm0gZHJpdmVycyBzcGVjaWZpYyB0byBBUk0sIFJvY2tjaGlwLCBSZW5lc2FzLCBTb0NGUEdBIGFyZSB0b3RhbGx5IGlycmVsZXZhbnQuIFRoZXkmIzM5O3JlIG5vbi1leGlzdGVudCBpbiB0aGlzIGNvbnRleHQuIFRoZSBJbnRlbCBQQ0kgZHJpdmVyIChgZHdtYWMtaW50ZWxgKSBoYXMgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIEludGVsIGhhcmR3YXJlIChFbGtoYXJ0IExha2UsIFRpZ2VyIExha2UsIFF1YXJrLCBBbGRlciBMYWtlIEV0aGVybmV0IGNvbnRyb2xsZXJzKSB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQgYnkgdGhlIHN0YW5kYXJkIFFFTVUgb3IgYXJlIGF2YWlsYWJsZSBvbiBjbG91ZCBWTXMuCgpUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhlcmUgYXJlIGxpbWl0ZWQgdG86CgoxLiAgTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgc3R1ZmY6IGRvY3VtZW50YXRpb24sIERUIGJpbmRpbmdzLCBhbmQgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZS4KMi4gIENvZGUgcGF0aHMgdGhhdCBhcmUgKm9ubHkqIHJlbGV2YW50IHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiBhbWQ2NCAobGlrZSB0aG9zZSBgYXJjaC9hcm02NGAgRGV2aWNlIFRyZWUgZmlsZXMpLgozLiAgSGFyZHdhcmUgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBoYXJkd2FyZSB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gUUVNVSBvciBHQ0UuIFRoaXMgaW5jbHVkZXMgUm9ja2NoaXAsIFJlbmVzYXMsIFNvQyBGUEdBLCBhbmQgSW50ZWwgU29DIEV0aGVybmV0IGNvbnRyb2xsZXJzIGFuZCBEVyBYUENTIFBIWS9QQ1MuCgpFdmVyeXRoaW5nIHBvaW50cyBkaXJlY3RseSB0byBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBhbGlnbnM6CgoqICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlIC0gKkNoZWNrISoKKiAgIGBSZWFzb25pbmdgOiAqQ2xlYXIgZXhwbGFuYXRpb24gYWJvdmU7IERldmljZSBUcmVlLCBhbWQ2NCwgcGxhdGZvcm0vUENJIGRyaXZlcnMgaXJyZWxldmFudCB0byBhbWQ2NC9RRU1VL0dDRSwgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiogLSAqQ2hlY2shKgoqICAgYEZvY3VzU3ltYm9sc2A6IFxbIF0gKG9yIG51bGwvZW1wdHkpIC0gKk1ha2VzIHNlbnNlOyBub3RoaW5nIHRvIGZvY3VzIG9uLioKKiAgIGBFbmFibGVDb25maWdzYDogXFsgXSAob3IgbnVsbC9lbXB0eSkgLSAqQ29ycmVjdDsgbm8gc3BlY2lmaWMgY29uZmlncyBhcmUgbmVlZGVkLioKCk9rYXksIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyBhIG5vLWdvIGZvciBmdXp6aW5nIGluIHRoaXMgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgUm9ja2NoaXAgUkszNTY4IERlc2lnbldhcmUgRXRoZXJuZXQgUENTIChYUENTKSBhbmQgcmVmYWN0b3JzIFBDUyBpbml0aWFsaXphdGlvbiBpbiB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlciBmYW1pbHkgKGR3bWFjLXJrLCBkd21hYy1pbnRlbCwgZHdtYWMtcmVuZXNhcywgZHdtYWMtc29jZnBnYSwgZHdtYWMtcnpuMSkuIEFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpOiBkb2N1bWVudGF0aW9uL2RldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBhcm02NCBEVFMgY2hhbmdlcyBhcmUgbm9uLWV4ZWN1dGFibGUgb24gYW1kNjQsIGFuZCB0aGUgYWZmZWN0ZWQgZHJpdmVycyAoc3RtbWFjIGR3bWFjIHZhcmlhbnRzIGFuZCBTeW5vcHN5cyBEVyBYUENTKSByZXF1aXJlIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIG9yIHBoeXNpY2FsIEludGVsL1JvY2tjaGlwL1JlbmVzYXMgc2lsaWNvbiBub3QgZW11bGF0ZWQgYnkgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBSb2NrY2hpcCBSSzM1NjggRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1MgKFhQQ1MpIGFuZCByZWZhY3RvcnMgUENTIGluaXRpYWxpemF0aW9uIGluIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIGZhbWlseSAoZHdtYWMtcmssIGR3bWFjLWludGVsLCBkd21hYy1yZW5lc2FzLCBkd21hYy1zb2NmcGdhLCBkd21hYy1yem4xKS4gQWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSk6IGRvY3VtZW50YXRpb24vZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIGFybTY0IERUUyBjaGFuZ2VzIGFyZSBub24tZXhlY3V0YWJsZSBvbiBhbWQ2NCwgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzIChzdG1tYWMgZHdtYWMgdmFyaWFudHMgYW5kIFN5bm9wc3lzIERXIFhQQ1MpIHJlcXVpcmUgcGh5c2ljYWwgU29DIHBsYXRmb3JtIGRldmljZXMgb3IgcGh5c2ljYWwgSW50ZWwvUm9ja2NoaXAvUmVuZXNhcyBzaWxpY29uIG5vdCBlbXVsYXRlZCBieSBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI1OjM2LjY2OTUzMzA3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNTk4Mjg4NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIFJvY2tjaGlwIFJLMzU2OCBEZXNpZ25XYXJlIEV0aGVybmV0IFBDUyAoWFBDUykgYW5kIHJlZmFjdG9ycyBQQ1MgaW5pdGlhbGl6YXRpb24gaW4gdGhlIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIgZmFtaWx5IChkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMsIGR3bWFjLXNvY2ZwZ2EsIGR3bWFjLXJ6bjEpLiBBbGwgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKTogZG9jdW1lbnRhdGlvbi9kZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgYXJtNjQgRFRTIGNoYW5nZXMgYXJlIG5vbi1leGVjdXRhYmxlIG9uIGFtZDY0LCBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHN0bW1hYyBkd21hYyB2YXJpYW50cyBhbmQgU3lub3BzeXMgRFcgWFBDUykgcmVxdWlyZSBwaHlzaWNhbCBTb0MgcGxhdGZvcm0gZGV2aWNlcyBvciBwaHlzaWNhbCBJbnRlbC9Sb2NrY2hpcC9SZW5lc2FzIHNpbGljb24gbm90IGVtdWxhdGVkIGJ5IFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNTozNi42Njk1Mzg1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5NzUwNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDExZmMyMTVmYWJkNWZhOTUxNzljYzM4YmQwYmE4MTFlNjBmOTk5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAxNjoyNTozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzAzZmNmZjBlM2Y3MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sXFxuQEAgLTAsMCArMSwxMTAgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JvY2tjaGlwLHJrMzU2OC14cGNzLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFJvY2tjaGlwIFJLMzU2OCBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IFBDU1xcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBDb2lhIFByYW50IFxcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXFx1MDAzZVxcbitcXG4rZGVzY3JpcHRpb246IHxcXG4rICBSb2NrY2hpcCBSSzM1NjggU29DIGludGVncmF0ZXMgYSBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IFBoeXNpY2FsXFxuKyAgQ29kaW5nIFN1YmxheWVyIChYUENTKS5cXG4rICBUaGUgUENTIHByb3ZpZGVzIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbCAoTUFDKVxcbisgIGFuZCB0aGUgUGh5c2ljYWwgTWVkaXVtIEF0dGFjaG1lbnQgKFBNQSkgc3VibGF5ZXIgdGhyb3VnaCBhIE1lZGlhXFxuKyAgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChHTUlJKS5cXG4rXFxuKyAgVGhlIFhQQ1MgaXMgYWNjZXNzZWQgb3ZlciB0aGUgQVBCMyBidXMgYW5kIGludGVybmFsbHkgY29ubmVjdGVkIHRvIGFcXG4rICBOYW5lbmcgQ29tYm8gU2VyRGVzIFBIWS5cXG4rICBJdCBzdXBwb3J0cyAxMDAwQkFTRS1YLCBTR01JSSBhbmQgUVNHTUlJIG1vZGVzLlxcbitcXG4rICBUaGUgYmxvY2sgY29udGFpbnMgZm91ciBNSUkgcG9ydHMgdGhhdCBjYW4gYmUgaW5kaXZpZHVhbGx5IGVuYWJsZWQgYW5kXFxuKyAgcm91dGVkIHRvIG9uZSBvZiB0aGUgRXRoZXJuZXQgR01BQyBjb250cm9sbGVycyB2aWEgdGhlIHBjcy1oYW5kbGVcXG4rICBwcm9wZXJ0eSBpbiB0aGUgTUFDIGRldmljZSB0cmVlIG5vZGUuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBjb25zdDogcm9ja2NoaXAscmszNTY4LXhwY3NcXG4rXFxuKyAgcmVnOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgXFxcIiNhZGRyZXNzLWNlbGxzXFxcIjpcXG4rICAgIGNvbnN0OiAxXFxuK1xcbisgIFxcXCIjc2l6ZS1jZWxsc1xcXCI6XFxuKyAgICBjb25zdDogMFxcbitcXG4rICBjbG9ja3M6XFxuKyAgICBpdGVtczpcXG4rICAgICAgLSBkZXNjcmlwdGlvbjogQVBCMyBidXMgaW50ZXJmYWNlIGNsb2NrIChjbGtfY3NyX2kpLCByZXF1aXJlZCBmb3IgcmVnaXN0ZXIgYWNjZXNzXFxuKyAgICAgIC0gZGVzY3JpcHRpb246IEVFRSBjbG9jayAoY2xrX2VlZV9pKSwgcmVxdWlyZWQgZm9yIEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXQgb3BlcmF0aW9uXFxuK1xcbisgIGNsb2NrLW5hbWVzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gY29uc3Q6IGNzclxcbisgICAgICAtIGNvbnN0OiBlZWVcXG4rXFxuKyAgcGh5czpcXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbisgIHBoeS1uYW1lczpcXG4rICAgIGNvbnN0OiBzZXJkZXNcXG4rXFxuKyAgcG93ZXItZG9tYWluczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbitwYXR0ZXJuUHJvcGVydGllczpcXG4rICBcXFwiXmV0aGVybmV0LXBjcy1taWlAWzAtM10kXFxcIjpcXG4rICAgIHR5cGU6IG9iamVjdFxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIE9uZSBvZiB0aGUgZm91ciBNSUkgcG9ydHMgb2YgdGhlIFhQQ1MuIFRoZSBwb3J0IGlzIGxpbmtlZCB0byBhblxcbisgICAgICBFdGhlcm5ldCBNQUMgY29udHJvbGxlciB2aWEgdGhlIHBjcy1oYW5kbGUgcHJvcGVydHkgaW4gdGhlIE1BQydzXFxuKyAgICAgIGRldmljZSB0cmVlIG5vZGUuXFxuK1xcbisgICAgcHJvcGVydGllczpcXG4rICAgICAgcmVnOlxcbisgICAgICAgIGRlc2NyaXB0aW9uOiBNSUkgcG9ydCBudW1iZXIuXFxuKyAgICAgICAgZW51bTogWzAsIDEsIDIsIDNdXFxuK1xcbisgICAgcmVxdWlyZWQ6XFxuKyAgICAgIC0gcmVnXFxuK1xcbisgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIHJlZ1xcbisgIC0gXFxcIiNhZGRyZXNzLWNlbGxzXFxcIlxcbisgIC0gXFxcIiNzaXplLWNlbGxzXFxcIlxcbisgIC0gY2xvY2tzXFxuKyAgLSBjbG9jay1uYW1lc1xcbisgIC0gcGh5c1xcbisgIC0gcGh5LW5hbWVzXFxuKyAgLSBwb3dlci1kb21haW5zXFxuK1xcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2Nsb2NrL3JrMzU2OC1jcnUuaFxcdTAwM2VcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9wb3dlci9yazM1NjgtcG93ZXIuaFxcdTAwM2VcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9waHkvcGh5LmhcXHUwMDNlXFxuK1xcbisgICAgZXRoZXJuZXQtcGNzQGZkYTAwMDAwIHtcXG4rICAgICAgY29tcGF0aWJsZSA9IFxcXCJyb2NrY2hpcCxyazM1NjgteHBjc1xcXCI7XFxuKyAgICAgIHJlZyA9IFxcdTAwM2MweGZkYTAwMDAwIDB4MjAwMDAwXFx1MDAzZTtcXG4rICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmNydSBQQ0xLX1hQQ1NcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmNydSBDTEtfWFBDU19FRUVcXHUwMDNlO1xcbisgICAgICBjbG9jay1uYW1lcyA9IFxcXCJjc3JcXFwiLCBcXFwiZWVlXFxcIjtcXG4rICAgICAgcGh5cyA9IFxcdTAwM2NcXHUwMDI2Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUlcXHUwMDNlO1xcbisgICAgICBwaHktbmFtZXMgPSBcXFwic2VyZGVzXFxcIjtcXG4rICAgICAgcG93ZXItZG9tYWlucyA9IFxcdTAwM2NcXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcXHUwMDNlO1xcbitcXG4rICAgICAgZXRoZXJuZXQtcGNzLW1paUAwIHtcXG4rICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWxcXG5pbmRleCA4MGMyNTI4NDUzNDljLi42N2IyMWVhNzdlYzk2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcm9ja2NoaXAtZHdtYWMueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcm9ja2NoaXAtZHdtYWMueWFtbFxcbkBAIC0xMjAsNiArMTIwLDEyIEBAIHByb3BlcnRpZXM6XFxuICAgICBtYXhpbXVtOiAweDdGXFxuICAgICBkZWZhdWx0OiAweDEwXFxuIFxcbisgIHBjcy1oYW5kbGU6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgU3BlY2lmaWVzIGEgcmVmZXJlbmNlIHRvIGEgbm9kZSByZXByZXNlbnRpbmcgdGhlIFBDUyBkZXZpY2VcXG4rICAgICAgY29ubmVjdGVkIHRvIHRoaXMgR01BQy4gUmVxdWlyZWQgd2hlbiBwaHktbW9kZSBpcyBcXFwic2dtaWlcXFwiLlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuICAgcGh5LXN1cHBseTpcXG4gICAgIGRlc2NyaXB0aW9uOiBQSFkgcmVndWxhdG9yXFxuIFxcbkBAIC0xNTksNiArMTY1LDE1IEBAIGFsbE9mOlxcbiAgICAgICAgIGNsb2NrczpcXG4gICAgICAgICAgIG1pbkl0ZW1zOiA1XFxuIFxcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgcGh5LW1vZGU6XFxuKyAgICAgICAgICBjb250YWluczpcXG4rICAgICAgICAgICAgY29uc3Q6IHNnbWlpXFxuKyAgICB0aGVuOlxcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIHBjcy1oYW5kbGVcXG4rXFxuIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4gXFxuIGV4YW1wbGVzOlxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbFxcbmluZGV4IDM3OWIwOGJkOWU5N2EuLjhlODk4YmNlOWFmNzMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcXG5AQCAtODAsNiArODAsMTUgQEAgcHJvcGVydGllczpcXG4gICAgIGRlc2NyaXB0aW9uOlxcbiAgICAgICBTb21lIGFkZGl0aW9uYWwgcGlwZSBzZXR0aW5ncyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBHUkYgcmVncy5cXG4gXFxuKyAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxcbisgICAgZW51bTogWzAsIDFdXFxuKyAgICBkZWZhdWx0OiAxXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgU2VsZWN0IGdtYWMwIG9yIGdtYWMxIHRvIGJlIHVzZWQgYXMgU0dNSUkgY29udHJvbGxlci5cXG4rICAgICAgVGhlIGhhcmR3YXJlIHJlc2V0IHZhbHVlIGlzIEdNQUMxICgxKS4gU2V0IHRoaXMgdG8gMCB0byByb3V0ZVxcbisgICAgICBTR01JSSB0byBHTUFDMC5cXG4rXFxuICAgXFxcIiNwaHktY2VsbHNcXFwiOlxcbiAgICAgY29uc3Q6IDFcXG4gXFxuQEAgLTEwNSw2ICsxMTQsMTAgQEAgYWxsT2Y6XFxuICAgICAgICAgICBtYXhJdGVtczogMVxcbiAgICAgICAgIHJlc2V0LW5hbWVzOlxcbiAgICAgICAgICAgbWF4SXRlbXM6IDFcXG4rICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiB0cnVlXFxuKyAgICBlbHNlOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6IGZhbHNlXFxuICAgLSBpZjpcXG4gICAgICAgcHJvcGVydGllczpcXG4gICAgICAgICBjb21wYXRpYmxlOlxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggM2IyZWIyYTdhODlhOC4uZjUzYTUxOWRhNjI5OCAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTIzNzM5LDYgKzIzNzM5LDE1IEBAIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9yb2NrY2hpcCxyazM1NzYtc2FpLnlhbWxcXG4gRjpcXHRzb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfc2FpLipcXG4gXFxuK1JPQ0tDSElQIFhQQ1MgRFJJVkVSXFxuK006XFx0Q29pYSBQcmFudCBcXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVxcdTAwM2VcXG4rTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuK0w6XFx0bGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sXFxuK0Y6XFx0ZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcXG4rRjpcXHRpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXFxuK1xcbiBST0NLRVIgRFJJVkVSXFxuIE06XFx0SmlyaSBQaXJrbyBcXHUwMDNjamlyaUByZXNudWxsaS51c1xcdTAwM2VcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcXG5pbmRleCA1OGMxMDUyYmE4ZWYzLi5mZGFhNGEyYTQzMjhiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcXG5AQCAtMyw2ICszLDcgQEBcXG4gL2R0cy12MS87XFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvcGluY3RybC9yb2NrY2hpcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3Mvc29jL3JvY2tjaGlwLHZvcDIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInJrMzU2OC5kdHNpXFxcIlxcbkBAIC0yNDEsNiArMjQyLDcgQEAgXFx1MDAyNmNvbWJwaHkxIHtcXG4gfTtcXG4gXFxuIFxcdTAwMjZjb21icGh5MiB7XFxuK1xcdHJvY2tjaGlwLHNnbWlpLW1hYy1zZWwgPSBcXHUwMDNjMFxcdTAwM2U7XFxuIFxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4gfTtcXG4gXFxuQEAgLTI2MCw5ICsyNjIsMTggQEAgXFx1MDAyNmNwdTMge1xcbiBcXHRjcHUtc3VwcGx5ID0gXFx1MDAzY1xcdTAwMjZ2ZGRfY3B1XFx1MDAzZTtcXG4gfTtcXG4gXFxuLS8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAocmVxdWlyZSBTR01JSSkgKi9cXG4rLyogTW90b3Jjb21tIFlUODUyMVNDIExBTiBwb3J0ICovXFxuIFxcdTAwMjZnbWFjMCB7XFxuLVxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcdGFzc2lnbmVkLWNsb2NrcyA9IFxcdTAwM2NcXHUwMDI2Y3J1IFNDTEtfR01BQzBfUlhfVFhcXHUwMDNlO1xcbitcXHRhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gXFx1MDAzY1xcdTAwMjZjbGtfZ21hYzBfeHBjc19taWlcXHUwMDNlO1xcbitcXHRtYW5hZ2VkID0gXFxcImluLWJhbmQtc3RhdHVzXFxcIjtcXG4rXFx0cGNzLWhhbmRsZSA9IFxcdTAwM2NcXHUwMDI2eHBjc19taWkwXFx1MDAzZTtcXG4rXFx0cGh5LWhhbmRsZSA9IFxcdTAwM2NcXHUwMDI2c2dtaWlfcGh5XFx1MDAzZTtcXG4rXFx0cGh5LW1vZGUgPSBcXFwic2dtaWlcXFwiO1xcbitcXHRwaHktc3VwcGx5ID0gXFx1MDAzY1xcdTAwMjZ2Y2NfM3YzXFx1MDAzZTtcXG4rXFx0cGluY3RybC1uYW1lcyA9IFxcXCJkZWZhdWx0XFxcIjtcXG4rXFx0cGluY3RybC0wID0gXFx1MDAzY1xcdTAwMjZnbWFjMF9taWltXFx1MDAzZTtcXG4rXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbiB9O1xcbiBcXG4gLyogTW90b3Jjb21tIFlUODUyMVNDIFdBTiBwb3J0ICovXFxuQEAgLTM0MSw2ICszNTIsMzYgQEAgXFx1MDAyNmkyczBfOGNoIHtcXG4gXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbiB9O1xcbiBcXG4rXFx1MDAyNm1kaW8wIHtcXG4rXFx0c2dtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjJcXFwiO1xcbitcXHRcXHRyZWcgPSBcXHUwMDNjMHgzXFx1MDAzZTtcXG4rXFx0XFx0bWF4LXNwZWVkID0gXFx1MDAzYzEwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1hc3NlcnQtdXMgPSBcXHUwMDNjMjAwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1kZWFzc2VydC11cyA9IFxcdTAwM2MxMDAwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1ncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzMgUktfUEM2IEdQSU9fQUNUSVZFX0xPV1xcdTAwM2U7XFxuK1xcbitcXHRcXHRsZWRzIHtcXG4rXFx0XFx0XFx0I2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcdFxcdFxcdCNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rXFx0XFx0XFx0bGVkQDEge1xcbitcXHRcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcdFxcdFxcdFxcdGNvbG9yID0gXFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlxcdTAwM2U7XFxuK1xcdFxcdFxcdFxcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcXG4rXFx0XFx0XFx0XFx0ZGVmYXVsdC1zdGF0ZSA9IFxcXCJrZWVwXFxcIjtcXG4rXFx0XFx0XFx0fTtcXG4rXFxuK1xcdFxcdFxcdGxlZEAyIHtcXG4rXFx0XFx0XFx0XFx0cmVnID0gXFx1MDAzYzJcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfR1JFRU5cXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XFxuK1xcdFxcdFxcdFxcdGRlZmF1bHQtc3RhdGUgPSBcXFwia2VlcFxcXCI7XFxuK1xcdFxcdFxcdH07XFxuK1xcdFxcdH07XFxuK1xcdH07XFxuK307XFxuK1xcbiBcXHUwMDI2bWRpbzEge1xcbiBcXHRyZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHtcXG4gXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlxcXCI7XFxuQEAgLTM1MCw2ICszOTEsMjUgQEAgcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XFxuIFxcdFxcdHJlc2V0LWdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvNCBSS19QQzAgR1BJT19BQ1RJVkVfTE9XXFx1MDAzZTtcXG4gXFx0XFx0cngtaW50ZXJuYWwtZGVsYXktcHMgPSBcXHUwMDNjMTUwMFxcdTAwM2U7XFxuIFxcdFxcdHR4LWludGVybmFsLWRlbGF5LXBzID0gXFx1MDAzYzE1MDBcXHUwMDNlO1xcbitcXG4rXFx0XFx0bGVkcyB7XFxuK1xcdFxcdFxcdCNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHQjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuK1xcdFxcdFxcdGxlZEAxIHtcXG4rXFx0XFx0XFx0XFx0cmVnID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9XQU47XFxuK1xcdFxcdFxcdFxcdGRlZmF1bHQtc3RhdGUgPSBcXFwia2VlcFxcXCI7XFxuK1xcdFxcdFxcdH07XFxuK1xcbitcXHRcXHRcXHRsZWRAMiB7XFxuK1xcdFxcdFxcdFxcdHJlZyA9IFxcdTAwM2MyXFx1MDAzZTtcXG4rXFx0XFx0XFx0XFx0Y29sb3IgPSBcXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXFx1MDAzZTtcXG4rXFx0XFx0XFx0XFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xcbitcXHRcXHRcXHRcXHRkZWZhdWx0LXN0YXRlID0gXFxcImtlZXBcXFwiO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHR9O1xcbiBcXHR9O1xcbiB9O1xcbiBcXG5AQCAtNTg2LDMgKzY0NiwxMyBAQCBcXHUwMDI2eGluMzJrIHtcXG4gXFx0cGluY3RybC1uYW1lcyA9IFxcXCJkZWZhdWx0XFxcIjtcXG4gXFx0cGluY3RybC0wID0gXFx1MDAzY1xcdTAwMjZjbGszMmtfb3V0MVxcdTAwM2U7XFxuIH07XFxuK1xcbitcXHUwMDI2eHBjcyB7XFxuK1xcdHBoeXMgPSBcXHUwMDNjXFx1MDAyNmNvbWJwaHkyIFBIWV9UWVBFX1NHTUlJXFx1MDAzZTtcXG4rXFx0cGh5LW5hbWVzID0gXFxcInNlcmRlc1xcXCI7XFxuK1xcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4rfTtcXG4rXFxuK1xcdTAwMjZ4cGNzX21paTAge1xcbitcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuK307XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXFxuaW5kZXggM2JjNjUzZjAyN2YxZi4uMjI3ZDAzZTMzNjA0MyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxcbkBAIC0xMTAsNiArMTEwLDUxIEBAIHNhdGEwOiBzYXRhQGZjMDAwMDAwIHtcXG4gXFx0XFx0c3RhdHVzID0gXFxcImRpc2FibGVkXFxcIjtcXG4gXFx0fTtcXG4gXFxuK1xcdHhwY3M6IGV0aGVybmV0LXBjc0BmZGEwMDAwMCB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwicm9ja2NoaXAscmszNTY4LXhwY3NcXFwiO1xcbitcXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0I3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdFxcdHJlZyA9IFxcdTAwM2MweDAgMHhmZGEwMDAwMCAweDAgMHgyMDAwMDBcXHUwMDNlO1xcbitcXHRcXHRjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmNydSBQQ0xLX1hQQ1NcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmNydSBDTEtfWFBDU19FRUVcXHUwMDNlO1xcbitcXHRcXHRjbG9jay1uYW1lcyA9IFxcXCJjc3JcXFwiLCBcXFwiZWVlXFxcIjtcXG4rXFx0XFx0cG93ZXItZG9tYWlucyA9IFxcdTAwM2NcXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcXHUwMDNlO1xcbitcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXG4rXFx0XFx0eHBjc19taWkwOiBldGhlcm5ldC1wY3MtbWlpQDAge1xcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdFxcdFxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHR4cGNzX21paTE6IGV0aGVybmV0LXBjcy1taWlAMSB7XFxuK1xcdFxcdFxcdHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0XFx0c3RhdHVzID0gXFxcImRpc2FibGVkXFxcIjtcXG4rXFx0XFx0fTtcXG4rXFxuK1xcdFxcdHhwY3NfbWlpMjogZXRoZXJuZXQtcGNzLW1paUAyIHtcXG4rXFx0XFx0XFx0cmVnID0gXFx1MDAzYzJcXHUwMDNlO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXHRcXHR9O1xcbitcXG4rXFx0XFx0eHBjc19taWkzOiBldGhlcm5ldC1wY3MtbWlpQDMge1xcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjM1xcdTAwM2U7XFxuK1xcdFxcdFxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcdFxcdH07XFxuK1xcdH07XFxuK1xcbitcXHRjbGtfZ21hYzBfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzAge1xcbitcXHRcXHRjb21wYXRpYmxlID0gXFxcImZpeGVkLWNsb2NrXFxcIjtcXG4rXFx0XFx0Y2xvY2stZnJlcXVlbmN5ID0gXFx1MDAzYzEyNTAwMDAwMFxcdTAwM2U7XFxuK1xcdFxcdGNsb2NrLW91dHB1dC1uYW1lcyA9IFxcXCJjbGtfZ21hYzBfeHBjc19taWlcXFwiO1xcbitcXHRcXHQjY2xvY2stY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdH07XFxuK1xcbitcXHRjbGtfZ21hYzFfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzEge1xcbitcXHRcXHRjb21wYXRpYmxlID0gXFxcImZpeGVkLWNsb2NrXFxcIjtcXG4rXFx0XFx0Y2xvY2stZnJlcXVlbmN5ID0gXFx1MDAzYzEyNTAwMDAwMFxcdTAwM2U7XFxuK1xcdFxcdGNsb2NrLW91dHB1dC1uYW1lcyA9IFxcXCJjbGtfZ21hYzFfeHBjc19taWlcXFwiO1xcbitcXHRcXHQjY2xvY2stY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdH07XFxuK1xcbiBcXHRwaXBlX3BoeV9ncmYwOiBzeXNjb25AZmRjNzAwMDAge1xcbiBcXHRcXHRjb21wYXRpYmxlID0gXFxcInJvY2tjaGlwLHJrMzU2OC1waXBlLXBoeS1ncmZcXFwiLCBcXFwic3lzY29uXFxcIjtcXG4gXFx0XFx0cmVnID0gXFx1MDAzYzB4MCAweGZkYzcwMDAwIDB4MCAweDEwMDBcXHUwMDNlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1xcbmluZGV4IGUzZGQ1YWRkYTVhY2EuLjUwODhhY2MwNjk4MmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcXG5AQCAtMTcwLDYgKzE3MCw3IEBAIGNvbmZpZyBEV01BQ19ST0NLQ0hJUFxcbiBcXHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcXG4gXFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxFX1RFU1QpXFxuIFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuK1xcdHNlbGVjdCBQQ1NfWFBDU19ST0NLQ0hJUFxcbiBcXHRoZWxwXFxuIFxcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzMyODggU29DLlxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcXG5pbmRleCBmNWY5ZmE2N2VjZDc3Li40MzA4ZGNjYmYyNTcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXFxuQEAgLTYwMywxMyArNjAzLDQ3IEBAIHN0YXRpYyB2b2lkIGNvbW1vbl9kZWZhdWx0X2RhdGEoc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KVxcbiBcXHRwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VuZWVkc19yZXNldCA9IHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaW50ZWxfbWdiZV9wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlO1xcbitcXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcztcXG4rXFx0aW50IGFkZHI7XFxuK1xcbitcXHRkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LVxcdTAwM2VkZXZpY2UpO1xcbitcXG4rXFx0aWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGRldm5vZGUsIFxcXCJwY3MtaGFuZGxlXFxcIikpIHtcXG4rXFx0XFx0cGNzbm9kZSA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZub2RlLCBcXFwicGNzLWhhbmRsZVxcXCIsIDApO1xcbitcXHRcXHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xcbitcXHRcXHRmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0YWRkciA9IGZmcyhwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VwY3NfbWFzaykgLSAxO1xcbitcXHRcXHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2Rldihwcml2LVxcdTAwM2VtaWksIGFkZHIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoSVNfRVJSKHhwY3MpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUih4cGNzKTtcXG4rXFxuK1xcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbXVsdF9mYWN0XzEwMG5zKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0geHBjcztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGludGVsX21nYmVfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHhwY3NfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqaW50ZWxfbWdiZV9zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuIHtcXG4tXFx0LyogcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YS1cXHUwMDNlaGFzX3hwY3MgaGFzIGJlZW4gc2V0IHRydWUsIHNvIHRoZXJlXFxuLVxcdCAqIHNob3VsZCBhbHdheXMgYmUgYW4gWFBDUy4gVGhlIG9yaWdpbmFsIGNvZGUgd291bGQgYWx3YXlzXFxuLVxcdCAqIHJldHVybiB0aGlzIGlmIHByZXNlbnQuXFxuLVxcdCAqL1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuIFxcdHJldHVybiB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzKTtcXG4gfVxcbiBcXG5AQCAtNzMzLDYgKzc2Nyw4IEBAIHN0YXRpYyBpbnQgaW50ZWxfbWdiZV9jb21tb25fZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0ICAgIHBsYXQtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xcbiBcXHRcXHRwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VwY3NfbWFzayA9IEJJVF9VMzIoSU5URUxfTUdCRV9YUENTX0FERFIpO1xcbiBcXHRcXHRwbGF0LVxcdTAwM2VkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XFxuK1xcdFxcdHBsYXQtXFx1MDAzZXBjc19pbml0ID0gaW50ZWxfbWdiZV9wY3NfaW5pdDtcXG4rXFx0XFx0cGxhdC1cXHUwMDNlcGNzX2V4aXQgPSBpbnRlbF9tZ2JlX3Bjc19leGl0O1xcbiBcXHRcXHRwbGF0LVxcdTAwM2VzZWxlY3RfcGNzID0gaW50ZWxfbWdiZV9zZWxlY3RfcGNzO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcXG5pbmRleCAxOWYzNGUxOGJmZWYyLi45YWYzMmMyNmY5YzE0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguY1xcbkBAIC04MSw4ICs4MSwxMSBAQCBzdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgdm9pZCByZW5lc2FzX2dtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiB7XFxuLVxcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpXFxuLVxcdFxcdG1paWNfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpO1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3BjcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWlpY19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJlbmVzYXNfZ21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmNcXG5pbmRleCA4ZDcwNDJlNjg5MjYxLi5iM2Q3NDZkZDk2NmZmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXFxuQEAgLTIwLDYgKzIwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fcnVudGltZS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInN0bW1hY19wbGF0Zm9ybS5oXFxcIlxcbkBAIC00Nyw2ICs0OCw3IEBAIHN0cnVjdCBya19nbWFjX29wcyB7XFxuIFxcdHZvaWQgKCpzZXRfdG9fcmdtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxcbiBcXHRcXHRcXHQgICAgIGludCB0eF9kZWxheSwgaW50IHJ4X2RlbGF5KTtcXG4gXFx0dm9pZCAoKnNldF90b19ybWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7XFxuK1xcdHZvaWQgKCpzZXRfdG9fc2dtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcXG4gXFx0aW50ICgqc2V0X3NwZWVkKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdixcXG4gXFx0XFx0XFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCk7XFxuIFxcdHZvaWQgKCppbnRlZ3JhdGVkX3BoeV9wb3dlcnVwKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7XFxuQEAgLTYzLDYgKzY1LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHtcXG4gXFx0Ym9vbCBjbG9ja19ncmZfcmVnX2luX3BocDtcXG4gXFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcXG4gXFx0Ym9vbCBzdXBwb3J0c19ybWlpO1xcbitcXHRib29sIHN1cHBvcnRzX3NnbWlpO1xcbiBcXHRib29sIHBocF9ncmZfcmVxdWlyZWQ7XFxuIFxcdGJvb2wgcmVnc192YWxpZDtcXG4gXFx0dTMyIHJlZ3NbXTtcXG5AQCAtOTgsNiArMTAxLDcgQEAgc3RydWN0IHJrX3ByaXZfZGF0YSB7XFxuIFxcdGJvb2wgaW50ZWdyYXRlZF9waHk7XFxuIFxcdGJvb2wgc3VwcG9ydHNfcmdtaWk7XFxuIFxcdGJvb2wgc3VwcG9ydHNfcm1paTtcXG4rXFx0Ym9vbCBzdXBwb3J0c19zZ21paTtcXG4gXFxuIFxcdHN0cnVjdCBjbGtfYnVsa19kYXRhICpjbGtzO1xcbiBcXHRpbnQgbnVtX2Nsa3M7XFxuQEAgLTgwOSw2ICs4MTMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzIHJrMzUyOF9vcHMgPSB7XFxuICNkZWZpbmUgUkszNTY4X0dSRl9HTUFDMV9DT04xXFx0XFx0MHgwMzhjXFxuIFxcbiAvKiBSSzM1NjhfR1JGX0dNQUMwX0NPTjEgXFx1MDAyNlxcdTAwMjYgUkszNTY4X0dSRl9HTUFDMV9DT04xICovXFxuKyNkZWZpbmUgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJXFx0XFx0R1JGX0NMUl9CSVQoNylcXG4rI2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSVxcdFxcdEdSRl9CSVQoNylcXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxcXHRcXHRcXHRHUkZfQklUKDMpXFxuICNkZWZpbmUgUkszNTY4X0dNQUNfRkxPV19DVFJMX0NMUlxcdFxcdEdSRl9DTFJfQklUKDMpXFxuICNkZWZpbmUgUkszNTY4X0dNQUNfUlhDTEtfRExZX0VOQUJMRVxcdFxcdEdSRl9CSVQoMSlcXG5AQCAtODM2LDYgKzg0MiwxNiBAQCBzdGF0aWMgaW50IHJrMzU2OF9pbml0KHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcm1paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcXG4re1xcbitcXHR1MzIgY29uMTtcXG4rXFxuK1xcdGNvbjEgPSAoYnNwX3ByaXYtXFx1MDAzZWlkID09IDEpID8gUkszNTY4X0dSRl9HTUFDMV9DT04xIDpcXG4rXFx0XFx0XFx0XFx0ICAgICBSSzM1NjhfR1JGX0dNQUMwX0NPTjE7XFxuK1xcbitcXHRyZWdtYXBfd3JpdGUoYnNwX3ByaXYtXFx1MDAzZWdyZiwgY29uMSwgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcmszNTY4X3NldF90b19yZ21paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdixcXG4gXFx0XFx0XFx0XFx0aW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpXFxuIHtcXG5AQCAtODUxLDE5ICs4NjcsMzEgQEAgc3RhdGljIHZvaWQgcmszNTY4X3NldF90b19yZ21paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdixcXG4gXFx0XFx0ICAgICBSSzM1NjhfR01BQ19DTEtfVFhfRExfQ0ZHKHR4X2RlbGF5KSk7XFxuIFxcbiBcXHRyZWdtYXBfd3JpdGUoYnNwX3ByaXYtXFx1MDAzZWdyZiwgY29uMSxcXG4rXFx0XFx0ICAgICBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkgfFxcbiBcXHRcXHQgICAgIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUgfFxcbiBcXHRcXHQgICAgIFJLMzU2OF9HTUFDX1RYQ0xLX0RMWV9FTkFCTEUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3NnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxcbit7XFxuK1xcdHUzMiBjb24xO1xcbitcXG4rXFx0Y29uMSA9IChic3BfcHJpdi1cXHUwMDNlaWQgPT0gMSkgPyBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgOlxcbitcXHRcXHRcXHRcXHQgICAgIFJLMzU2OF9HUkZfR01BQzBfQ09OMTtcXG4rXFxuK1xcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cXHUwMDNlZ3JmLCBjb24xLCBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSSk7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTY4X29wcyA9IHtcXG4gXFx0LmluaXQgPSByazM1NjhfaW5pdCxcXG4rXFx0LnNldF90b19ybWlpID0gcmszNTY4X3NldF90b19ybWlpLFxcbiBcXHQuc2V0X3RvX3JnbWlpID0gcmszNTY4X3NldF90b19yZ21paSxcXG4rXFx0LnNldF90b19zZ21paSA9IHJrMzU2OF9zZXRfdG9fc2dtaWksXFxuK1xcbiBcXHQuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsXFxuIFxcbiBcXHQuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLFxcbiBcXG4tXFx0LnN1cHBvcnRzX3JtaWkgPSB0cnVlLFxcbi1cXG4gXFx0LnJlZ3NfdmFsaWQgPSB0cnVlLFxcbiBcXHQucmVncyA9IHtcXG4gXFx0XFx0MHhmZTJhMDAwMCwgLyogZ21hYzAgKi9cXG5AQCAtMTIwOCw2ICsxMjM2LDQzIEBAIHN0YXRpYyB2b2lkIHJrX3BoeV9wb3dlcmRvd24oc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGRldl9lcnIoYnNwX3ByaXYtXFx1MDAzZWRldiwgXFxcImZhaWwgdG8gZGlzYWJsZSBwaHktc3VwcGx5XFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBya19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtXFx1MDAzZWRldmljZS1cXHUwMDNlb2Zfbm9kZTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwY3Nfbm9kZTtcXG4rXFx0c3RydWN0IGR3X3hwY3MgKnhwY3M7XFxuK1xcbitcXHRwY3Nfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsIFxcXCJwY3MtaGFuZGxlXFxcIiwgMCk7XFxuK1xcdGlmICghcGNzX25vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0eHBjcyA9IHhwY3NfcmtfY3JlYXRlKHByaXYtXFx1MDAzZWRldmljZSwgcGNzX25vZGUpO1xcbitcXHRvZl9ub2RlX3B1dChwY3Nfbm9kZSk7XFxuK1xcdGlmIChJU19FUlIoeHBjcykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MgPSB4cGNzO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmtfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHhwY3NfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHJrX3ByaXZfZGF0YSAqcmtfZ21hY19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgKm9wcylcXG5AQCAtMTMzMCw2ICsxMzk1LDcgQEAgc3RhdGljIHN0cnVjdCBya19wcml2X2RhdGEgKnJrX2dtYWNfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG4gXFxuIFxcdGJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19yZ21paSA9IG9wcy1cXHUwMDNlc3VwcG9ydHNfcmdtaWkgfHwgISFvcHMtXFx1MDAzZXNldF90b19yZ21paTtcXG4gXFx0YnNwX3ByaXYtXFx1MDAzZXN1cHBvcnRzX3JtaWkgPSBvcHMtXFx1MDAzZXN1cHBvcnRzX3JtaWkgfHwgISFvcHMtXFx1MDAzZXNldF90b19ybWlpO1xcbitcXHRic3BfcHJpdi1cXHUwMDNlc3VwcG9ydHNfc2dtaWkgPSBvcHMtXFx1MDAzZXN1cHBvcnRzX3NnbWlpIHx8ICEhb3BzLVxcdTAwM2VzZXRfdG9fc2dtaWk7XFxuIFxcbiBcXHRpZiAob3BzLVxcdTAwM2Vpbml0KSB7XFxuIFxcdFxcdHJldCA9IG9wcy1cXHUwMDNlaW5pdChic3BfcHJpdik7XFxuQEAgLTEzNjEsNiArMTQyNywxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfY2hlY2tfb3BzKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxcbiBcXHRcXHRpZiAoIWJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19ybWlpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbitcXHRcXHRpZiAoIWJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19zZ21paSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRkZXZfZXJyKGJzcF9wcml2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcXCJ1bnN1cHBvcnRlZCBpbnRlcmZhY2UgJWRcXFwiLCBic3BfcHJpdi1cXHUwMDNlcGh5X2lmYWNlKTtcXG5AQCAtMTM3OSwxNiArMTQ0OSwxOSBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdHJldCA9IGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgdHJ1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoYnNwX3ByaXYtXFx1MDAzZXBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpXFxuK1xcdFxcdGdvdG8gc2V0X21vZGU7XFxuK1xcbiBcXHRyZXQgPSBya19nZXRfcGh5X2ludGZfc2VsKGJzcF9wcml2LVxcdTAwM2VwaHlfaWZhY2UpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBjbGtfZGlzYWJsZTtcXG4gXFxuIFxcdGludGYgPSByZXQ7XFxuIFxcbi1cXHRyZXQgPSBnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIHRydWUpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0aWYgKGJzcF9wcml2LVxcdTAwM2VnbWFjX3BoeV9pbnRmX3NlbF9tYXNrIHx8XFxuIFxcdCAgICBic3BfcHJpdi1cXHUwMDNlZ21hY19ybWlpX21vZGVfbWFzaykge1xcbiBcXHRcXHQvKiBJZiBkZWZpbmVkLCBlbmNvZGUgdGhlIHBoeV9pbnRmX3NlbCB2YWx1ZSAqL1xcbkBAIC0xMzk5LDEwICsxNDcyLDggQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdFxcdFxcdCAgICAgIGJzcF9wcml2LVxcdTAwM2VnbWFjX3JtaWlfbW9kZV9tYXNrKTtcXG4gXFxuIFxcdFxcdHJldCA9IHJrX3dyaXRlX2dtYWNfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChic3BfcHJpdi1cXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spIHtcXG5AQCAtMTQxMCwxMyArMTQ4MSwxMiBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcXG4gXFx0XFx0XFx0XFx0ICAgICBic3BfcHJpdi1cXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spO1xcbiBcXG4gXFx0XFx0cmV0ID0gcmtfd3JpdGVfY2xvY2tfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcdH1cXG4gXFxuLVxcdC8qcm1paSBvciByZ21paSovXFxuK3NldF9tb2RlOlxcbitcXHQvKiBybWlpLCByZ21paSwgc2dtaWkgKi9cXG4gXFx0c3dpdGNoIChic3BfcHJpdi1cXHUwMDNlcGh5X2lmYWNlKSB7XFxuIFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbiBcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJpbml0IGZvciBSR01JSVxcXFxuXFxcIik7XFxuQEAgLTE0NDcsMTUgKzE1MTcsMjAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGlmIChic3BfcHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfdG9fcm1paSlcXG4gXFx0XFx0XFx0YnNwX3ByaXYtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X3RvX3JtaWkoYnNwX3ByaXYpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuK1xcdFxcdGRldl9pbmZvKGRldiwgXFxcImluaXQgZm9yIFNHTUlJXFxcXG5cXFwiKTtcXG4rXFx0XFx0aWYgKGJzcF9wcml2LVxcdTAwM2VvcHMtXFx1MDAzZXNldF90b19zZ21paSlcXG4rXFx0XFx0XFx0YnNwX3ByaXYtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X3RvX3NnbWlpKGJzcF9wcml2KTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiTk8gaW50ZXJmYWNlIGRlZmluZWQhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBjbGtfZGlzYWJsZTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gcmtfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHR9XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcbiBcXHRwbV9ydW50aW1lX2dldF9zeW5jKGRldik7XFxuIFxcbkBAIC0xNDYzLDYgKzE1MzgsMTAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGJzcF9wcml2LVxcdTAwM2VvcHMtXFx1MDAzZWludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitjbGtfZGlzYWJsZTpcXG4rXFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJrX2dtYWNfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmdtYWMpXFxuQEAgLTE0ODYsNiArMTU2NSw5IEBAIHN0YXRpYyB2b2lkIHJrX2dldF9pbnRlcmZhY2VzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCAqYnNwX3ByaXYsXFxuIFxcbiBcXHRpZiAocmstXFx1MDAzZXN1cHBvcnRzX3JtaWkpXFxuIFxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7XFxuK1xcbitcXHRpZiAocmstXFx1MDAzZXN1cHBvcnRzX3NnbWlpKVxcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLCBpbnRlcmZhY2VzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBya19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXZfLCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSxcXG5AQCAtMTYwMiw2ICsxNjg0LDE3IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRwbGF0X2RhdC1cXHUwMDNlc3VzcGVuZCA9IHJrX2dtYWNfc3VzcGVuZDtcXG4gXFx0cGxhdF9kYXQtXFx1MDAzZXJlc3VtZSA9IHJrX2dtYWNfcmVzdW1lO1xcbiBcXG4rXFx0aWYgKHBsYXRfZGF0LVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbitcXHRcXHQvKiBTR01JSSBjbG9jayBhbHdheXMgcnVucyBhdCAxMjUgTUh6ICovXFxuK1xcdFxcdHBsYXRfZGF0LVxcdTAwM2VzZXRfY2xrX3R4X3JhdGUgPSBOVUxMO1xcbitcXG4rXFx0XFx0LyogU0dNSUkgcmVxdWlyZXMgYSBQQ1MgKi9cXG4rXFx0XFx0cGxhdF9kYXQtXFx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcXG4rXFx0XFx0cGxhdF9kYXQtXFx1MDAzZXBjc19pbml0ID0gcmtfcGNzX2luaXQ7XFxuK1xcdFxcdHBsYXRfZGF0LVxcdTAwM2VwY3NfZXhpdCA9IHJrX3Bjc19leGl0O1xcbitcXHRcXHRwbGF0X2RhdC1cXHUwMDNlc2VsZWN0X3BjcyA9IHJrX3NlbGVjdF9wY3M7XFxuK1xcdH1cXG4rXFxuIFxcdHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdiA9IHJrX2dtYWNfc2V0dXAocGRldiwgcGxhdF9kYXQsIGRhdGEpO1xcbiBcXHRpZiAoSVNfRVJSKHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdikpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xcbmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXFxuQEAgLTM1LDggKzM1LDExIEBAIHN0YXRpYyBpbnQgcnpuMV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgdm9pZCByem4xX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbi1cXHRcXHRtaWljX2Rlc3Ryb3kocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1paWNfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpO1xcbitcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyem4xX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcXG5pbmRleCAxZDdmMGE1N2QyODg5Li42ZDRiYzFmZThmNzUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xcbkBAIC01MzksOCArNTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgdm9pZCBzb2NmcGdhX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbi1cXHRcXHRseW54X3Bjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRseW54X3Bjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnNvY2ZwZ2FfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXFxuaW5kZXggYWZlOThmZjViZGNiMC4uNzM5NmI2ODg5OWM2NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xcbkBAIC00MjYsMzUgKzQyNiwxNCBAQCBpbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcXG4gaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG4gXFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuLVxcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcXG4tXFx0c3RydWN0IGR3X3hwY3MgKnhwY3MgPSBOVUxMO1xcbi1cXHRpbnQgYWRkciwgcmV0O1xcbi1cXG4tXFx0ZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi1cXHUwMDNlZGV2aWNlKTtcXG4tXFxuLVxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdCkge1xcbi1cXHRcXHRyZXQgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdChwcml2KTtcXG4tXFx0fSBlbHNlIGlmIChmd25vZGVfcHJvcGVydHlfcHJlc2VudChkZXZub2RlLCBcXFwicGNzLWhhbmRsZVxcXCIpKSB7XFxuLVxcdFxcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXFxcInBjcy1oYW5kbGVcXFwiLCAwKTtcXG4tXFx0XFx0eHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTtcXG4tXFx0XFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTtcXG4tXFx0fSBlbHNlIGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEtXFx1MDAzZXBjc19tYXNrKSB7XFxuLVxcdFxcdGFkZHIgPSBmZnMocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YS1cXHUwMDNlcGNzX21hc2spIC0gMTtcXG4tXFx0XFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cXHUwMDNlbWlpLCBhZGRyKTtcXG4tXFx0XFx0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHhwY3MpO1xcbi1cXHR9IGVsc2Uge1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4gXFxuK1xcdHJldCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBjc19pbml0KHByaXYpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVxcdTAwM2VkZXZpY2UsIHJldCwgXFxcIk5vIHhQQ1MgZm91bmRcXFxcblxcXCIpO1xcbi1cXG4tXFx0aWYgKHhwY3MpXFxuLVxcdFxcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbXVsdF9mYWN0XzEwMG5zKTtcXG4tXFxuLVxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0geHBjcztcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi1cXHUwMDNlZGV2aWNlLCByZXQsIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBQQ1NcXFxcblxcXCIpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNDYzLDE0ICs0NDIsMTAgQEAgdm9pZCBzdG1tYWNfcGNzX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBjc19leGl0KVxcbi1cXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfZXhpdChwcml2KTtcXG4tXFxuLVxcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcGNzX2V4aXQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHhwY3NfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcyk7XFxuLVxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0gTlVMTDtcXG4rXFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcGNzX2V4aXQocHJpdik7XFxuIH1cXG4gXFxuIHN0cnVjdCBzdG1tYWNfY2xrX3JhdGUge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXFxuaW5kZXggZTQxN2ZkNjZmNjYwYS4uM2RiOWIzNDNhYzBjNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXFxuQEAgLTEyLDYgKzEyLDMxIEBAIGNvbmZpZyBQQ1NfWFBDU1xcbiBcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGZvciBTeW5vcHN5c1xcbiBcXHQgIERlc2lnbldhcmUgWFBDUyBjb250cm9sbGVycy5cXG4gXFxuK2lmIFBDU19YUENTXFxuK1xcbitjb25maWcgUENTX1hQQ1NfUExBVEZPUk1cXG4rXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgWFBDUyBjb250cm9sbGVyIHN1cHBvcnRcXFwiXFxuK1xcdGRlZmF1bHQgUENTX1hQQ1NcXG4rXFx0aGVscFxcbitcXHQgIEdlbmVyaWMgRFdYUENTIGRyaXZlciBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgcmVxdWlyZSBhbnlcXG4rXFx0ICBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIHRvIGZ1bmN0aW9uIG9yIGlzIHVzaW5nIHBsYXRmb3JtXFxuK1xcdCAgZGF0YSBmb3Igc2V0dXAuXFxuK1xcbitcXHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuK1xcbitjb25maWcgUENTX1hQQ1NfUk9DS0NISVBcXG4rXFx0dHJpc3RhdGUgXFxcIlJvY2tjaGlwIFhQQ1MgY29udHJvbGxlciBzdXBwb3J0XFxcIlxcbitcXHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcXG4rXFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxFX1RFU1QpXFxuK1xcdHNlbGVjdCBHRU5FUklDX1BIWVxcbitcXHRzZWxlY3QgUE1fR0VORVJJQ19ET01BSU5TXFxuK1xcdGhlbHBcXG4rXFx0ICBTdXBwb3J0IGZvciBYUENTIGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszNTZ4IFNvQy5cXG4rXFxuK1xcdCAgSWYgeW91IGhhdmUgYSBSb2NrY2hpcCBTb0Mgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxcbitcXG4rZW5kaWYgIyBQQ1NfWFBDU1xcbitcXG4gY29uZmlnIFBDU19MWU5YXFxuIFxcdHRyaXN0YXRlXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlXFxuaW5kZXggNGY3OTIwNjE4YjkwMC4uZjlmNmNmMjU3OGQ3MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcXG5AQCAtMSwxMCArMSwxMSBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICMgTWFrZWZpbGUgZm9yIExpbnV4IFBDUyBkcml2ZXJzXFxuIFxcbi1wY3NfeHBjcy0kKENPTkZJR19QQ1NfWFBDUylcXHQ6PSBwY3MteHBjcy5vIHBjcy14cGNzLXBsYXQubyBcXFxcXFxuLVxcdFxcdFxcdFxcdCAgIHBjcy14cGNzLW54cC5vIHBjcy14cGNzLXd4Lm9cXG4rcGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpXFx0Oj0gcGNzLXhwY3MubyBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vXFxuIFxcbiBvYmotJChDT05GSUdfUENTX1hQQ1MpXFx0XFx0Kz0gcGNzX3hwY3Mub1xcbitvYmotJChDT05GSUdfUENTX1hQQ1NfUExBVEZPUk0pICs9IHBjcy14cGNzLXBsYXQub1xcbitvYmotJChDT05GSUdfUENTX1hQQ1NfUk9DS0NISVApICs9IHBjcy14cGNzLXJrLm9cXG4gb2JqLSQoQ09ORklHX1BDU19MWU5YKVxcdFxcdCs9IHBjcy1seW54Lm9cXG4gb2JqLSQoQ09ORklHX1BDU19NVEtfTFlOWEkpXFx0Kz0gcGNzLW10ay1seW54aS5vXFxuIG9iai0kKENPTkZJR19QQ1NfUlpOMV9NSUlDKVxcdCs9IHBjcy1yem4xLW1paWMub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNWUwZjIyYzk3M2MyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXFxuQEAgLTAsMCArMSw1NzMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyXFxuKyAqXFxuKyAqIEJhc2VkIG9uIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIFhQQ1MgcGxhdGZvcm0gZHJpdmVyLlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgU2VyZ2UgU2VtaW5cXG4rICpcXG4rICogQWRhcHRlZCBmb3IgUm9ja2NoaXAgU29Dcywgd2l0aCByZWZlcmVuY2UgdG8gdGhlIFJvY2tjaGlwIE9FTSBkcml2ZXIuXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2lhIFByYW50XFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYXRoLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fZG9tYWluLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2l6ZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWUuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJwY3MteHBjcy5oXFxcIlxcbitcXG4rc3RydWN0IGR3X3hwY3Nfcmsge1xcbitcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbitcXHR2b2lkIF9faW9tZW0gKnJlZ19iYXNlO1xcbitcXHRzdHJ1Y3QgcGh5ICpzZXJkZXNfcGh5O1xcbitcXHRzdHJ1Y3QgY2xrICpjc3JfY2xrO1xcbitcXHRzdHJ1Y3QgY2xrICplZWVfY2xrO1xcbitcXHR1OCBlZWVfbXVsdF9mYWN0O1xcbit9O1xcbitcXG4rc3RhdGljIHB0cmRpZmZfdCB4cGNzX3JrX2FkZHJfZm9ybWF0KGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0cmV0dXJuIEZJRUxEX1BSRVAoMHg3MDAwMCwgZGV2KSB8IEZJRUxEX1BSRVAoMHhmZmZmLCByZWcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9yZWcoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzLCBpbnQgZGV2LCBpbnQgcmVnKVxcbit7XFxuK1xcdHB0cmRpZmZfdCBjc3I7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRjc3IgPSB4cGNzX3JrX2FkZHJfZm9ybWF0KGRldiwgcmVnKTtcXG4rXFxuK1xcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZGwocHhwY3MtXFx1MDAzZXJlZ19iYXNlICsgKGNzciBcXHUwMDNjXFx1MDAzYyAyKSkgXFx1MDAyNiAweGZmZmY7XFxuK1xcbitcXHRwbV9ydW50aW1lX3B1dChcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9yZWcoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKVxcbit7XFxuK1xcdHB0cmRpZmZfdCBjc3I7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRjc3IgPSB4cGNzX3JrX2FkZHJfZm9ybWF0KGRldiwgcmVnKTtcXG4rXFxuK1xcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0d3JpdGVsKHZhbCwgcHhwY3MtXFx1MDAzZXJlZ19iYXNlICsgKGNzciBcXHUwMDNjXFx1MDAzYyAyKSk7XFxuK1xcbitcXHRwbV9ydW50aW1lX3B1dChcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkxXFx0MlxcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkyXFx0M1xcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkzXFx0NFxcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9QTUFQTURcXHQ2XFxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSVxcdDdcXG4rXFxuK3N0YXRpYyBib29sIHhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGludCBhZGRyKVxcbit7XFxuK1xcdHJldHVybiAhKGFkZHIgXFx1MDAzYyAwIHx8IGFkZHIgXFx1MDAzZSAzKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0c3dpdGNoIChkZXYpIHtcXG4rXFx0Y2FzZSBNRElPX01NRF9QTUFQTUQ6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xcbitcXHRjYXNlIE1ESU9fTU1EX1ZFTkQyOlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogUmVhZHMgYXJlIHJlZGlyZWN0ZWQgYnkgaGFyZHdhcmUgdG8gdGhlIHBvcnQncyByZWFkLW9ubHkgbWlycm9yO1xcbitcXHQgKiBvbmx5IHdyaXRlcyBoYXZlIHRvIGJlIHRhcmdldGVkIGF0IE1JSSAoc2VlIHRoZSB3cml0ZSBwYXRoKS5cXG4rXFx0ICovXFxuK1xcdHN3aXRjaCAoYWRkcikge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMTtcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7XFxuK1xcdGNhc2UgMzpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0c3dpdGNoIChkZXYpIHtcXG4rXFx0Y2FzZSBNRElPX01NRF9QTUFQTUQ6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xcbitcXHRjYXNlIE1ESU9fTU1EX1ZFTkQyOlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlc2UgcmVnaXN0ZXJzIHBoeXNpY2FsbHkgbGl2ZSBvbmx5IGluIE1JSSAodGhlIG1hbmFnZW1lbnQgcG9ydCkuXFxuK1xcdCAqIFBvcnRzIDEtMyBleHBvc2UgcmVhZC1vbmx5IG1pcnJvcnMgb2YgdGhlc2UgYml0cywgc28gd3JpdGVzIG11c3RcXG4rXFx0ICogYWx3YXlzIHRhcmdldCBNSUk7IHRoZSByZWFkIHBhdGggcmVtYXBzIHBlciBhZGRyZXNzIGFuZCB0aGVcXG4rXFx0ICogaGFyZHdhcmUgcmVkaXJlY3RzIHRvIHRoZSBwb3J0J3MgbWlycm9yLlxcbitcXHQgKi9cXG4rXFx0c3dpdGNoIChyZWcpIHtcXG4rXFx0Y2FzZSBEV19WUl9NSUlfQU5fQ1RSTDpcXG4rXFx0Y2FzZSBEV19WUl9NSUlfQU5fSU5UUl9TVFM6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDA6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDE6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0RJR19DVFJMMjpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKGFkZHIpIHtcXG4rXFx0Y2FzZSAwOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyO1xcbitcXHRjYXNlIDM6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKVxcbit7XFxuK1xcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGRldjtcXG4rXFxuK1xcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0ZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDB4ZmZmZjtcXG4rXFxuK1xcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgZGV2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDB4ZmZmZjtcXG4rXFxuK1xcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIGRldiwgcmVnKTtcXG4rXFx0aWYgKGRldiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHhwY3Nfcmtfd3JpdGVfcmVnKHB4cGNzLCBkZXYsIHJlZywgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkd194cGNzX3JrICp4cGNzX3JrX2NyZWF0ZV9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xcbitcXG4rXFx0cHhwY3MgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpweHBjcyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXB4cGNzKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHB4cGNzLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4rXFxuK1xcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBweHBjcyk7XFxuK1xcbitcXHRyZXR1cm4gcHhwY3M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X2luaXQoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZweHBjcy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcbitcXG4rXFx0cHhwY3MtXFx1MDAzZXNlcmRlc19waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCBcXFwic2VyZGVzXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGdldCBTZXJEZXMgUEhZXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHBoeV9wb3dlcl9vZmYocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRwaHlfZXhpdChweHBjcy1cXHUwMDNlc2VyZGVzX3BoeSk7XFxuK1xcbitcXHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcG93ZXIgZG9tYWluIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGVuYWJsZWQsIHdoaWNoIGFsbG93cyB1cyB0b1xcbitcXHQgKiBkeW5hbWljYWxseSB0dXJuIHRoZSBDU1IgY2xvY2sgb24vb2ZmIHVzaW5nIFBNIHdoaWxlIGtlZXBpbmcgdGhlIFBDU1xcbitcXHQgKiBwb3dlcmVkIG9uLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCB0cnVlKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBwb3dlciBvbiBwb3dlci1kb21haW5zXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcGh5X2luaXQocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGluaXQgU2VyRGVzIFBIWVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gcG1fZG9tYWluO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBwaHlfcG93ZXJfb24ocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHBvd2VyIG9uIFNlckRlcyBQSFlcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIHNlcmRlc19waHk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9mZiwgcHhwY3MpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIFNlckRlcyBQSFk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK3NlcmRlc19waHk6XFxuK1xcdHBoeV9leGl0KHB4cGNzLVxcdTAwM2VzZXJkZXNfcGh5KTtcXG4rcG1fZG9tYWluOlxcbitcXHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfcmVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcXG4re1xcbitcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcHhwY3MtXFx1MDAzZXBkZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbitcXG4rXFx0cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTtcXG4rXFx0aWYgKCFyZXMpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJObyByZWctc3BhY2UgZm91bmRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJlc291cmNlX3NpemUocmVzKSBcXHUwMDNjIFNaXzJNKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiSW52YWxpZCByZWctc3BhY2Ugc2l6ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRweHBjcy1cXHUwMDNlcmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xcbitcXHRpZiAoSVNfRVJSKHB4cGNzLVxcdTAwM2VyZWdfYmFzZSkpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gbWFwIHJlZy1zcGFjZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHB4cGNzLVxcdTAwM2VyZWdfYmFzZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB4cGNzX3JrX2V4aXRfY2xrKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQoZGV2KTtcXG4rXFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4cGNzLVxcdTAwM2VlZWVfY2xrKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfY2xrKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldjtcXG4rXFx0dW5zaWduZWQgbG9uZyByYXRlO1xcbitcXHR1NjQgbXVsdDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHB4cGNzLVxcdTAwM2Vjc3JfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgXFxcImNzclxcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHB4cGNzLVxcdTAwM2Vjc3JfY2xrKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVxcdTAwM2Vjc3JfY2xrKSxcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgdG8gZ2V0IENTUiBjbG9ja1xcXFxuXFxcIik7XFxuK1xcbitcXHRweHBjcy1cXHUwMDNlZWVlX2NsayA9IGRldm1fY2xrX2dldChkZXYsIFxcXCJlZWVcXFwiKTtcXG4rXFx0aWYgKElTX0VSUihweHBjcy1cXHUwMDNlZWVlX2NsaykpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy1cXHUwMDNlZWVlX2NsayksXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIGdldCBFRUUgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHB4cGNzLVxcdTAwM2VlZWVfY2xrKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBlbmFibGUgRUVFIGNsb2NrXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7XFxuK1xcdHBtX3J1bnRpbWVfZW5hYmxlKGRldik7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB4cGNzX3JrX2V4aXRfY2xrLCBweHBjcyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bSBmb3IgRUVFIGNsb2NrOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ29tcHV0ZSB0aGUgbXVsdGlwbGllciBmb3IgdGhlIEVFRSBjbG9jayBzbyB0aGF0XFxuK1xcdCAqIGNsa19lZWVfcGVyaW9kICogKG11bHRfZmFjdCArIDEpIGZhbGxzIHdpdGhpbiA4MC4uMTIwIG5zLlxcbitcXHQgKlxcbitcXHQgKiBPbiBSSzM1NjgsIGNsa194cGNzX2VlZSBpcyBtdXhlZCBiZXR3ZWVuIGdwbGwyMDAgKDIwMCBNSHosIDUgbnMpXFxuK1xcdCAqIGFuZCBjcGxsMTI1ICgxMjUgTUh6LCA4IG5zKSwgc2VsZWN0ZWQgYnkgQ1JVX0NMS1NFTF9DT04yOSBiaXQgMTMuXFxuK1xcdCAqIFRoZSByZXNldCB2YWx1ZSBpcyAwICgyMDAgTUh6KSwgYnV0IGRlcml2ZSB0aGUgdmFsdWUgYXQgcnVudGltZSB0b1xcbitcXHQgKiBzdGF5IGNvcnJlY3QgaWYgdGhlIG11eCBpcyBjaGFuZ2VkIGJ5IGEgYm9hcmQuXFxuK1xcdCAqXFxuK1xcdCAqIFVzZSBhIDY0LWJpdCBpbnRlcm1lZGlhdGU6IG9uIDMyLWJpdCBidWlsZHMsIDEwMCAqIDIwMDAwMDAwMFxcbitcXHQgKiBkb2VzIG5vdCBmaXQgaW4gdW5zaWduZWQgbG9uZy4gQ2xhbXAgdG8gdGhlIDQtYml0XFxuK1xcdCAqIERXX1ZSX01JSV9FRUVfTVVMVF9GQUNUXzEwME5TIGZpZWxkLlxcbitcXHQgKi9cXG4rXFx0cmF0ZSA9IGNsa19nZXRfcmF0ZShweHBjcy1cXHUwMDNlZWVlX2Nsayk7XFxuK1xcdGlmICghcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcXFwiSW52YWxpZCBFRUUgY2xvY2sgcmF0ZVxcXFxuXFxcIik7XFxuK1xcbitcXHRtdWx0ID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKDEwMFVMTCAqIHJhdGUsIE5TRUNfUEVSX1NFQykgLSAxO1xcbitcXHRweHBjcy1cXHUwMDNlZWVlX211bHRfZmFjdCA9IG1pbl90KHU2NCwgbXVsdCwgMTUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfYnVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RhdGljIGF0b21pY190IGlkID0gQVRPTUlDX0lOSVQoLTEpO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCAwKTtcXG4rXFx0aWYgKCFidXMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0YnVzLVxcdTAwM2VuYW1lID0gXFxcIlJvY2tjaGlwIERXIFhQQ1MgTUNJL0FQQjNcXFwiO1xcbitcXHRidXMtXFx1MDAzZXJlYWQgPSB4cGNzX3JrX3JlYWRfYzIyO1xcbitcXHRidXMtXFx1MDAzZXdyaXRlID0geHBjc19ya193cml0ZV9jMjI7XFxuK1xcdGJ1cy1cXHUwMDNlcmVhZF9jNDUgPSB4cGNzX3JrX3JlYWRfYzQ1O1xcbitcXHRidXMtXFx1MDAzZXdyaXRlX2M0NSA9IHhwY3Nfcmtfd3JpdGVfYzQ1O1xcbitcXHRidXMtXFx1MDAzZXBoeV9tYXNrID0gfjA7XFxuK1xcdGJ1cy1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbitcXHRidXMtXFx1MDAzZXByaXYgPSBweHBjcztcXG4rXFxuK1xcdHNucHJpbnRmKGJ1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSxcXG4rXFx0XFx0IFxcXCJyb2NrY2hpcF9kd3hwY3MtJXhcXFwiLCBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2aWQpKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1ESU8tYnVzIGhlcmUgc2VydmVzIGFzIGp1c3QgYSBiYWNrLWVuZCBlbmdpbmUgYWJzdHJhY3Rpbmcgb3V0XFxuK1xcdCAqIHRoZSBNRElPIGFuZCBNQ0kvQVBCMyBJTyBpbnRlcmZhY2VzIHV0aWxpemVkIGZvciB0aGUgUm9ja2NoaXAgRFdYUENTIENTUnNcXG4rXFx0ICogYWNjZXNzLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBjcmVhdGUgTURJTyBidXNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRweHBjcy1cXHUwMDNlYnVzID0gYnVzO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHhwY3MgPSB4cGNzX3JrX2NyZWF0ZV9kYXRhKHBkZXYpO1xcbitcXHRpZiAoSVNfRVJSKHB4cGNzKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocHhwY3MpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIFhQQ1MgbWF5IGJlIGF0dGFjaGVkIHRvIGEgcG93ZXIgZG9tYWluIChlLmcuIFBEX1BJUEUpLiBUaGUgZG9tYWluXFxuK1xcdCAqIG11c3QgYmUgcG93ZXJlZCBvbiBiZWZvcmUgYW55IHJlZ2lzdGVyIGFjY2Vzcywgb3RoZXJ3aXNlIHRoZSBTb0Mgd2lsbFxcbitcXHQgKiB0cmlnZ2VyIGEgc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnQgKFNFcnJvcikuXFxuK1xcdCAqXFxuK1xcdCAqIEFjY2Vzc2luZyB0aGUgWFBDUyByZWdpc3RlcnMgYWxzbyByZXF1aXJlcyBhIFRYIGNsb2NrIGZyb20gdGhlIFNlckRlcyxcXG4rXFx0ICogd2hpY2ggaXMgbmVlZGVkIGZvciB0aGUgc29mdCByZXNldC5cXG4rXFx0ICovXFxuK1xcdHJldCA9IHhwY3Nfcmtfc2VyZGVzX3BoeV9pbml0KHB4cGNzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9uKHB4cGNzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHhwY3NfcmtfaW5pdF9yZXMocHhwY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geHBjc19ya19pbml0X2NsayhweHBjcyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB4cGNzX3JrX2luaXRfYnVzKHB4cGNzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4cGNzX3JrX29mX2lkc1tdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJvY2tjaGlwLHJrMzU2OC14cGNzXFxcIiB9LFxcbitcXHR7IC8qIHNlbnRpbmVsICovIH0sXFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhwY3Nfcmtfb2ZfaWRzKTtcXG4rXFxuK3N0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuK3tcXG4rXFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwY3NfbnA7XFxuK1xcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcXG4rXFx0c3RydWN0IGR3X3hwY3MgKnhwY3M7XFxuK1xcdHUzMiBwb3J0O1xcbitcXG4rXFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuK1xcbitcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFxcXCJyZWdcXFwiLCBcXHUwMDI2cG9ydCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZSgoaW50KXBvcnQpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFxuK1xcdC8qIFRoZSBYUENTIHBkZXYgaXMgYXR0YWNoZWQgdG8gdGhlIHBhcmVudCBub2RlICovXFxuK1xcdHBjc19ucCA9IG9mX2dldF9wYXJlbnQobnApO1xcbitcXHRpZiAoIXBjc19ucClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuK1xcbitcXHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGNzX25wKSkge1xcbitcXHRcXHRvZl9ub2RlX3B1dChwY3NfbnApO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFvZl9tYXRjaF9ub2RlKHhwY3Nfcmtfb2ZfaWRzLCBwY3NfbnApKSB7XFxuK1xcdFxcdG9mX25vZGVfcHV0KHBjc19ucCk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXHR9XFxuK1xcbitcXHRwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwY3NfbnApO1xcbitcXHRvZl9ub2RlX3B1dChwY3NfbnApO1xcbitcXHRpZiAoIXBkZXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xcbitcXG4rXFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XFxuK1xcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbitcXHRweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHRpZiAoIXB4cGNzIHx8ICFweHBjcy1cXHUwMDNlYnVzKSB7XFxuK1xcdFxcdGRldmljZV9saW5rX3JlbW92ZShkZXYsIFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcXG4rXFx0fVxcbitcXG4rXFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXFx1MDAzZWJ1cywgKGludClwb3J0KTtcXG4rXFx0aWYgKElTX0VSUih4cGNzKSkge1xcbitcXHRcXHRkZXZpY2VfbGlua19yZW1vdmUoZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cHV0X2RldmljZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cmV0dXJuIHhwY3M7XFxuK1xcdH1cXG4rXFxuK1xcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHhwY3MtXFx1MDAzZWVlZV9tdWx0X2ZhY3QpO1xcbitcXHRwdXRfZGV2aWNlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRyZXR1cm4geHBjcztcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTCh4cGNzX3JrX2NyZWF0ZSk7XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFxuK1xcdGNsa19kaXNhYmxlX3VucHJlcGFyZShweHBjcy1cXHUwMDNlY3NyX2Nsayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFxuK1xcdHJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtXFx1MDAzZWNzcl9jbGspO1xcbit9XFxuK1xcbitzdGF0aWMgREVGSU5FX1JVTlRJTUVfREVWX1BNX09QUyh4cGNzX3JrX3BtX29wcyxcXG4rXFx0XFx0XFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQsXFxuK1xcdFxcdFxcdCAgIHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUsXFxuK1xcdFxcdFxcdCAgIE5VTEwpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHBjc19ya19kcml2ZXIgPSB7XFxuK1xcdC5wcm9iZSA9IHhwY3NfcmtfcHJvYmUsXFxuK1xcdC5kcml2ZXIgPSB7XFxuK1xcdFxcdC5uYW1lID0gXFxcInJrX3hwY3MtZHd4cGNzXFxcIixcXG4rXFx0XFx0LnBtID0gcG1fcHRyKFxcdTAwMjZ4cGNzX3JrX3BtX29wcyksXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZSA9IHhwY3Nfcmtfb2ZfaWRzLFxcbitcXHR9LFxcbit9O1xcbittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHhwY3NfcmtfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkNvaWEgUHJhbnQgXFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xcbmluZGV4IDAzMzdlMmJjYzAxMjUuLjhjMzg3NWI2OTg1YjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xcbkBAIC03NjEsNyArNzYxLDkgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcXG4gXFx0ICogICAgRFcgeFBDUyB1c2VkIHdpdGggRFcgRVFvUyBNQUMgaXMgYWx3YXlzIE1BQyBzaWRlIFNHTUlJLlxcbiBcXHQgKiA0KSBWUl9NSUlfRElHX0NUUkwxIEJpdCg5KSBbTUFDX0FVVE9fU1ddID0gMWIgKEF1dG9tYXRpY1xcbiBcXHQgKiAgICBzcGVlZC9kdXBsZXggbW9kZSBjaGFuZ2UgYnkgSFcgYWZ0ZXIgU0dNSUkgQU4gY29tcGxldGUpXFxuLVxcdCAqIDUpIFZSX01JSV9NTURfQ1RSTCBCaXQoMTIpIFtBTl9FTkFCTEVdID0gMWIgKEVuYWJsZSBTR01JSSBBTilcXG4rXFx0ICogNSkgVlJfTUlJX0FOX0lOVFJfU1RTID0gMHgwIChDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cylcXG4rXFx0ICogNikgVlJfTUlJX01NRF9DVFJMIEJpdCgxMikgW0FOX0VOQUJMRV0gPSAxYiAoRW5hYmxlIFNHTUlJIEFOKVxcbitcXHQgKiAgICBWUl9NSUlfTU1EX0NUUkwgQml0KDkpIFtBTl9SRVNUQVJUXSA9IDFiIChSZXN0YXJ0IFNHTUlJIEFOKVxcbiBcXHQgKlxcbiBcXHQgKiBOb3RlIHRoYXQgVlJfTUlJX01NRF9DVFJMIGlzIE1JSV9CTUNSLlxcbiBcXHQgKlxcbkBAIC03NjksNyArNzcxLDE0IEBAIHN0YXRpYyBpbnQgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsXFxuIFxcdCAqXFx0IFNSX01JSV9BTl9BRFYuIE1BQyBzaWRlIFNHTUlJIHJlY2VpdmVzIEFOIFR4IENvbmZpZyBmcm9tXFxuIFxcdCAqXFx0IFBIWSBhYm91dCB0aGUgbGluayBzdGF0ZSBjaGFuZ2UgYWZ0ZXIgQzI4IEFOIGlzIGNvbXBsZXRlZFxcbiBcXHQgKlxcdCBiZXR3ZWVuIFBIWSBhbmQgTGluayBQYXJ0bmVyLiBUaGVyZSBpcyBhbHNvIG5vIG5lZWQgdG9cXG4tXFx0ICpcXHQgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSS5cXG4rXFx0ICpcXHQgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSSBvbiBtb3N0IGRldmljZXMuXFxuK1xcdCAqXFxuK1xcdCAqIE5vdGU6IFdoaWxlIHRoZSBEZXNpZ25XYXJlIGRhdGFib29rIHN0YXRlcyB0aGF0IEFOIHJlc3RhcnQgaXNcXG4rXFx0ICpcXHQgbm90IG5lZWRlZCBmb3IgTUFDIHNpZGUgU0dNSUksIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuXFxuK1xcdCAqXFx0IFJvY2tjaGlwIFJLMzU2OCkgZXhoaWJpdCBhIHRpbWluZyBxdWlyayB3aGVuIGludGVncmF0ZWQgd2l0aFxcbitcXHQgKlxcdCBwaHlsaW5rIGFuZCBkbyBub3QgcmVzdGFydCBBTiBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGxpbmtcXG4rXFx0ICpcXHQgY29tZXMgYmFjayB1cC4gQW4gZXhwbGljaXQgQU4gcmVzdGFydCBpcyByZXF1aXJlZCBvbiB0aG9zZVxcbitcXHQgKlxcdCBwYXJ0cyB0byByZWNvdmVyIHRoZSBsaW5rIGFmdGVyIGEgZGlzY29ubmVjdC5cXG4gXFx0ICovXFxuIFxcdG1kaW9fY3RybCA9IHhwY3NfcmVhZCh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IpO1xcbiBcXHRpZiAobWRpb19jdHJsIFxcdTAwM2MgMClcXG5AQCAtODE2LDkgKzgyNSwxNCBAQCBzdGF0aWMgaW50IHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdC8qIENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzICovXFxuK1xcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIERXX1ZSX01JSV9BTl9JTlRSX1NUUywgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0aWYgKG5lZ19tb2RlID09IFBIWUxJTktfUENTX05FR19JTkJBTkRfRU5BQkxFRClcXG4gXFx0XFx0cmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsXFxuLVxcdFxcdFxcdFxcdCBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFKTtcXG4rXFx0XFx0XFx0XFx0IG1kaW9fY3RybCB8IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTEwOTMsOSArMTEwNywxOCBAQCBzdGF0aWMgaW50IHhwY3NfZ2V0X3N0YXRlX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cXG4tXFx0aWYgKHN0YXRlLVxcdTAwM2Vhbl9jb21wbGV0ZSlcXG4tXFx0XFx0eHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcXG4rXFx0aWYgKHN0YXRlLVxcdTAwM2Vhbl9jb21wbGV0ZSkge1xcbitcXHRcXHQvKiBDbGVhciBBTiBjb21wbGV0ZSBzdGF0dXMgb3IgaW50ZXJydXB0ICovXFxuK1xcdFxcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIERXX1ZSX01JSV9BTl9JTlRSX1NUUywgMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LyogSW5pdGlhdGUgdGhlIG5leHQgcm91bmQgb2YgQU4gKi9cXG4rXFx0XFx0cmV0ID0geHBjc19tb2RpZnkoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSLCBCTUNSX0FOUkVTVEFSVCxcXG4rXFx0XFx0XFx0XFx0ICBCTUNSX0FOUkVTVEFSVCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuYyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXFxuaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uN2I4NjdlNzUyMDA2NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xcbisrKyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXFxuQEAgLTE4Niw2ICsxODYsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcge1xcbiBcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV94cGNzX3BoeV9yZWFkeTtcXG4gXFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfcGNpZTFsMF9zZWw7XFxuIFxcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3BjaWUxbDFfc2VsO1xcbitcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9zZ21paV9tYWNfc2VsO1xcbiBcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgdTNvdGcwX3BvcnRfZW47XFxuIFxcdHN0cnVjdCBjb21icGh5X3JlZyB1M290ZzFfcG9ydF9lbjtcXG4gfTtcXG5AQCAtMjEyLDYgKzIxMyw3IEBAIHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYge1xcbiBcXHRib29sIGVuYWJsZV9zc2M7XFxuIFxcdGJvb2wgZXh0X3JlZmNsaztcXG4gXFx0c3RydWN0IGNsayAqcmVmY2xrO1xcbitcXHR1MzIgc2dtaWlfbWFjX3NlbDtcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2LFxcbkBAIC0zNzUsNiArMzc3LDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9jb21icGh5X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlcXG4gXFxuIFxcdHByaXYtXFx1MDAzZWV4dF9yZWZjbGsgPSBkZXZpY2VfcHJvcGVydHlfcHJlc2VudChkZXYsIFxcXCJyb2NrY2hpcCxleHQtcmVmY2xrXFxcIik7XFxuIFxcbitcXHRwcml2LVxcdTAwM2VzZ21paV9tYWNfc2VsID0gMTtcXG4rXFx0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXFxcInJvY2tjaGlwLHNnbWlpLW1hYy1zZWxcXFwiLCBcXHUwMDI2cHJpdi1cXHUwMDNlc2dtaWlfbWFjX3NlbCk7XFxuK1xcbiBcXHRwcml2LVxcdTAwM2VwaHlfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9leGNsdXNpdmUoZGV2LCBcXFwicGh5XFxcIik7XFxuIFxcdC8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi9cXG4gXFx0aWYgKFBUUl9FUlIocHJpdi1cXHUwMDNlcGh5X3JzdCkgPT0gLUVOT0VOVClcXG5AQCAtODczLDYgKzg3OCw4IEBAIHN0YXRpYyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBQSFlfVFlQRV9TR01JSTpcXG4rXFx0XFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVxcdTAwM2VwaXBlX2dyZiwgXFx1MDAyNmNmZy1cXHUwMDNlcGlwZV9zZ21paV9tYWNfc2VsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHByaXYtXFx1MDAzZXNnbWlpX21hY19zZWwgXFx1MDAzZSAwKTtcXG4gXFx0XFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVxcdTAwM2VwaXBlX2dyZiwgXFx1MDAyNmNmZy1cXHUwMDNlcGlwZV94cGNzX3BoeV9yZWFkeSwgdHJ1ZSk7XFxuIFxcdFxcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cXHUwMDNlcGh5X2dyZiwgXFx1MDAyNmNmZy1cXHUwMDNlcGlwZV9waHltb2RlX3NlbCwgdHJ1ZSk7XFxuIFxcdFxcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cXHUwMDNlcGh5X2dyZiwgXFx1MDAyNmNmZy1cXHUwMDNlcGlwZV9zZWxfcXNnbWlpLCB0cnVlKTtcXG5AQCAtOTg0LDYgKzk5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcgcmszNTY4X2NvbWJwaHlfZ3JmY2ZncyA9IHtcXG4gXFx0LmNvbjNfZm9yX3NhdGFcXHRcXHQ9IHsgMHgwMDBjLCAxNSwgMCwgMHgwMCwgMHg0NDA3IH0sXFxuIFxcdC8qIHBpcGUtZ3JmICovXFxuIFxcdC5waXBlX2NvbjBfZm9yX3NhdGFcXHQ9IHsgMHgwMDAwLCAxNSwgMCwgMHgwMCwgMHgyMjIwIH0sXFxuK1xcdC5waXBlX3NnbWlpX21hY19zZWxcXHQ9IHsgMHgwMDQwLCAxLCAxLCAweDAwLCAweDAxIH0sXFxuIFxcdC5waXBlX3hwY3NfcGh5X3JlYWR5XFx0PSB7IDB4MDA0MCwgMiwgMiwgMHgwMCwgMHgwMSB9LFxcbiBcXHQudTNvdGcwX3BvcnRfZW5cXHRcXHQ9IHsgMHgwMTA0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSxcXG4gXFx0LnUzb3RnMV9wb3J0X2VuXFx0XFx0PSB7IDB4MDE0NCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmggYi9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yODcyM2Q1YmQ3NWNjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcXG5AQCAtMCwwICsxLDExIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZm5kZWYgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXFxuKyNkZWZpbmUgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNzL3Bjcy14cGNzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgZHdfeHBjcyAqeHBjc19ya19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcXG4rXFxuKyNlbmRpZiAvKiBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6MjU6MzcuMjMwMTE1NTAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzEwMzc2OTI5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBSb2NrY2hpcCBSSzM1NjggRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1MgKFhQQ1MpIGFuZCByZWZhY3RvcnMgUENTIGluaXRpYWxpemF0aW9uIGluIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIGZhbWlseSAoZHdtYWMtcmssIGR3bWFjLWludGVsLCBkd21hYy1yZW5lc2FzLCBkd21hYy1zb2NmcGdhLCBkd21hYy1yem4xKS4gQWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSk6IGRvY3VtZW50YXRpb24vZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIGFybTY0IERUUyBjaGFuZ2VzIGFyZSBub24tZXhlY3V0YWJsZSBvbiBhbWQ2NCwgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzIChzdG1tYWMgZHdtYWMgdmFyaWFudHMgYW5kIFN5bm9wc3lzIERXIFhQQ1MpIHJlcXVpcmUgcGh5c2ljYWwgU29DIHBsYXRmb3JtIGRldmljZXMgb3IgcGh5c2ljYWwgSW50ZWwvUm9ja2NoaXAvUmVuZXNhcyBzaWxpY29uIG5vdCBlbXVsYXRlZCBieSBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMTFmYzIxNWZhYmQ1ZmE5NTE3OWNjMzhiZDBiYTgxMWU2MGY5OTljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTY6MjU6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcwM2ZjZmYwZTNmNzBcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLHJrMzU2OC14cGNzLnlhbWxcbkBAIC0wLDAgKzEsMTEwIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JvY2tjaGlwLHJrMzU2OC14cGNzLnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFJvY2tjaGlwIFJLMzU2OCBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IFBDU1xuK1xuK21haW50YWluZXJzOlxuKyAgLSBDb2lhIFByYW50IFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjogfFxuKyAgUm9ja2NoaXAgUkszNTY4IFNvQyBpbnRlZ3JhdGVzIGEgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbFxuKyAgQ29kaW5nIFN1YmxheWVyIChYUENTKS5cbisgIFRoZSBQQ1MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIChNQUMpXG4rICBhbmQgdGhlIFBoeXNpY2FsIE1lZGl1bSBBdHRhY2htZW50IChQTUEpIHN1YmxheWVyIHRocm91Z2ggYSBNZWRpYVxuKyAgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChHTUlJKS5cbitcbisgIFRoZSBYUENTIGlzIGFjY2Vzc2VkIG92ZXIgdGhlIEFQQjMgYnVzIGFuZCBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBhXG4rICBOYW5lbmcgQ29tYm8gU2VyRGVzIFBIWS5cbisgIEl0IHN1cHBvcnRzIDEwMDBCQVNFLVgsIFNHTUlJIGFuZCBRU0dNSUkgbW9kZXMuXG4rXG4rICBUaGUgYmxvY2sgY29udGFpbnMgZm91ciBNSUkgcG9ydHMgdGhhdCBjYW4gYmUgaW5kaXZpZHVhbGx5IGVuYWJsZWQgYW5kXG4rICByb3V0ZWQgdG8gb25lIG9mIHRoZSBFdGhlcm5ldCBHTUFDIGNvbnRyb2xsZXJzIHZpYSB0aGUgcGNzLWhhbmRsZVxuKyAgcHJvcGVydHkgaW4gdGhlIE1BQyBkZXZpY2UgdHJlZSBub2RlLlxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBjb25zdDogcm9ja2NoaXAscmszNTY4LXhwY3NcbitcbisgIHJlZzpcbisgICAgbWF4SXRlbXM6IDFcbitcbisgIFwiI2FkZHJlc3MtY2VsbHNcIjpcbisgICAgY29uc3Q6IDFcbitcbisgIFwiI3NpemUtY2VsbHNcIjpcbisgICAgY29uc3Q6IDBcbitcbisgIGNsb2NrczpcbisgICAgaXRlbXM6XG4rICAgICAgLSBkZXNjcmlwdGlvbjogQVBCMyBidXMgaW50ZXJmYWNlIGNsb2NrIChjbGtfY3NyX2kpLCByZXF1aXJlZCBmb3IgcmVnaXN0ZXIgYWNjZXNzXG4rICAgICAgLSBkZXNjcmlwdGlvbjogRUVFIGNsb2NrIChjbGtfZWVlX2kpLCByZXF1aXJlZCBmb3IgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldCBvcGVyYXRpb25cbitcbisgIGNsb2NrLW5hbWVzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGNvbnN0OiBjc3JcbisgICAgICAtIGNvbnN0OiBlZWVcbitcbisgIHBoeXM6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICBwaHktbmFtZXM6XG4rICAgIGNvbnN0OiBzZXJkZXNcbitcbisgIHBvd2VyLWRvbWFpbnM6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rcGF0dGVyblByb3BlcnRpZXM6XG4rICBcIl5ldGhlcm5ldC1wY3MtbWlpQFswLTNdJFwiOlxuKyAgICB0eXBlOiBvYmplY3RcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgT25lIG9mIHRoZSBmb3VyIE1JSSBwb3J0cyBvZiB0aGUgWFBDUy4gVGhlIHBvcnQgaXMgbGlua2VkIHRvIGFuXG4rICAgICAgRXRoZXJuZXQgTUFDIGNvbnRyb2xsZXIgdmlhIHRoZSBwY3MtaGFuZGxlIHByb3BlcnR5IGluIHRoZSBNQUMnc1xuKyAgICAgIGRldmljZSB0cmVlIG5vZGUuXG4rXG4rICAgIHByb3BlcnRpZXM6XG4rICAgICAgcmVnOlxuKyAgICAgICAgZGVzY3JpcHRpb246IE1JSSBwb3J0IG51bWJlci5cbisgICAgICAgIGVudW06IFswLCAxLCAyLCAzXVxuK1xuKyAgICByZXF1aXJlZDpcbisgICAgICAtIHJlZ1xuK1xuKyAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuKyAgLSByZWdcbisgIC0gXCIjYWRkcmVzcy1jZWxsc1wiXG4rICAtIFwiI3NpemUtY2VsbHNcIlxuKyAgLSBjbG9ja3NcbisgIC0gY2xvY2stbmFtZXNcbisgIC0gcGh5c1xuKyAgLSBwaHktbmFtZXNcbisgIC0gcG93ZXItZG9tYWluc1xuK1xuK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2Nsb2NrL3JrMzU2OC1jcnUuaFx1MDAzZVxuKyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9wb3dlci9yazM1NjgtcG93ZXIuaFx1MDAzZVxuKyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9waHkvcGh5LmhcdTAwM2VcbitcbisgICAgZXRoZXJuZXQtcGNzQGZkYTAwMDAwIHtcbisgICAgICBjb21wYXRpYmxlID0gXCJyb2NrY2hpcCxyazM1NjgteHBjc1wiO1xuKyAgICAgIHJlZyA9IFx1MDAzYzB4ZmRhMDAwMDAgMHgyMDAwMDBcdTAwM2U7XG4rICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZjcnUgUENMS19YUENTXHUwMDNlLCBcdTAwM2NcdTAwMjZjcnUgQ0xLX1hQQ1NfRUVFXHUwMDNlO1xuKyAgICAgIGNsb2NrLW5hbWVzID0gXCJjc3JcIiwgXCJlZWVcIjtcbisgICAgICBwaHlzID0gXHUwMDNjXHUwMDI2Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUlcdTAwM2U7XG4rICAgICAgcGh5LW5hbWVzID0gXCJzZXJkZXNcIjtcbisgICAgICBwb3dlci1kb21haW5zID0gXHUwMDNjXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcdTAwM2U7XG4rXG4rICAgICAgZXRoZXJuZXQtcGNzLW1paUAwIHtcbisgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgfTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWxcbmluZGV4IDgwYzI1Mjg0NTM0OWMuLjY3YjIxZWE3N2VjOTYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcm9ja2NoaXAtZHdtYWMueWFtbFxuQEAgLTEyMCw2ICsxMjAsMTIgQEAgcHJvcGVydGllczpcbiAgICAgbWF4aW11bTogMHg3RlxuICAgICBkZWZhdWx0OiAweDEwXG4gXG4rICBwY3MtaGFuZGxlOlxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBTcGVjaWZpZXMgYSByZWZlcmVuY2UgdG8gYSBub2RlIHJlcHJlc2VudGluZyB0aGUgUENTIGRldmljZVxuKyAgICAgIGNvbm5lY3RlZCB0byB0aGlzIEdNQUMuIFJlcXVpcmVkIHdoZW4gcGh5LW1vZGUgaXMgXCJzZ21paVwiLlxuKyAgICBtYXhJdGVtczogMVxuK1xuICAgcGh5LXN1cHBseTpcbiAgICAgZGVzY3JpcHRpb246IFBIWSByZWd1bGF0b3JcbiBcbkBAIC0xNTksNiArMTY1LDE1IEBAIGFsbE9mOlxuICAgICAgICAgY2xvY2tzOlxuICAgICAgICAgICBtaW5JdGVtczogNVxuIFxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcGh5LW1vZGU6XG4rICAgICAgICAgIGNvbnRhaW5zOlxuKyAgICAgICAgICAgIGNvbnN0OiBzZ21paVxuKyAgICB0aGVuOlxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBwY3MtaGFuZGxlXG4rXG4gdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuIFxuIGV4YW1wbGVzOlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXG5pbmRleCAzNzliMDhiZDllOTdhLi44ZTg5OGJjZTlhZjczIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbFxuQEAgLTgwLDYgKzgwLDE1IEBAIHByb3BlcnRpZXM6XG4gICAgIGRlc2NyaXB0aW9uOlxuICAgICAgIFNvbWUgYWRkaXRpb25hbCBwaXBlIHNldHRpbmdzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIEdSRiByZWdzLlxuIFxuKyAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDpcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyXG4rICAgIGVudW06IFswLCAxXVxuKyAgICBkZWZhdWx0OiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFNlbGVjdCBnbWFjMCBvciBnbWFjMSB0byBiZSB1c2VkIGFzIFNHTUlJIGNvbnRyb2xsZXIuXG4rICAgICAgVGhlIGhhcmR3YXJlIHJlc2V0IHZhbHVlIGlzIEdNQUMxICgxKS4gU2V0IHRoaXMgdG8gMCB0byByb3V0ZVxuKyAgICAgIFNHTUlJIHRvIEdNQUMwLlxuK1xuICAgXCIjcGh5LWNlbGxzXCI6XG4gICAgIGNvbnN0OiAxXG4gXG5AQCAtMTA1LDYgKzExNCwxMCBAQCBhbGxPZjpcbiAgICAgICAgICAgbWF4SXRlbXM6IDFcbiAgICAgICAgIHJlc2V0LW5hbWVzOlxuICAgICAgICAgICBtYXhJdGVtczogMVxuKyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogdHJ1ZVxuKyAgICBlbHNlOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiBmYWxzZVxuICAgLSBpZjpcbiAgICAgICBwcm9wZXJ0aWVzOlxuICAgICAgICAgY29tcGF0aWJsZTpcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAzYjJlYjJhN2E4OWE4Li5mNTNhNTE5ZGE2Mjk4IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMjM3MzksNiArMjM3MzksMTUgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3JvY2tjaGlwLHJrMzU3Ni1zYWkueWFtbFxuIEY6XHRzb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfc2FpLipcbiBcbitST0NLQ0hJUCBYUENTIERSSVZFUlxuK006XHRDb2lhIFByYW50IFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cdTAwM2VcbitMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuK0w6XHRsaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbFxuK0Y6XHRkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xuK0Y6XHRpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXG4rXG4gUk9DS0VSIERSSVZFUlxuIE06XHRKaXJpIFBpcmtvIFx1MDAzY2ppcmlAcmVzbnVsbGkudXNcdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbmluZGV4IDU4YzEwNTJiYThlZjMuLmZkYWE0YTJhNDMyOGIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0c1xuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbkBAIC0zLDYgKzMsNyBAQFxuIC9kdHMtdjEvO1xuIFxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3BpbmN0cmwvcm9ja2NoaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3NvYy9yb2NrY2hpcCx2b3AyLmhcdTAwM2VcbiAjaW5jbHVkZSBcInJrMzU2OC5kdHNpXCJcbkBAIC0yNDEsNiArMjQyLDcgQEAgXHUwMDI2Y29tYnBoeTEge1xuIH07XG4gXG4gXHUwMDI2Y29tYnBoeTIge1xuK1x0cm9ja2NoaXAsc2dtaWktbWFjLXNlbCA9IFx1MDAzYzBcdTAwM2U7XG4gXHRzdGF0dXMgPSBcIm9rYXlcIjtcbiB9O1xuIFxuQEAgLTI2MCw5ICsyNjIsMTggQEAgXHUwMDI2Y3B1MyB7XG4gXHRjcHUtc3VwcGx5ID0gXHUwMDNjXHUwMDI2dmRkX2NwdVx1MDAzZTtcbiB9O1xuIFxuLS8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAocmVxdWlyZSBTR01JSSkgKi9cbisvKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKi9cbiBcdTAwMjZnbWFjMCB7XG4tXHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4rXHRhc3NpZ25lZC1jbG9ja3MgPSBcdTAwM2NcdTAwMjZjcnUgU0NMS19HTUFDMF9SWF9UWFx1MDAzZTtcbitcdGFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSBcdTAwM2NcdTAwMjZjbGtfZ21hYzBfeHBjc19taWlcdTAwM2U7XG4rXHRtYW5hZ2VkID0gXCJpbi1iYW5kLXN0YXR1c1wiO1xuK1x0cGNzLWhhbmRsZSA9IFx1MDAzY1x1MDAyNnhwY3NfbWlpMFx1MDAzZTtcbitcdHBoeS1oYW5kbGUgPSBcdTAwM2NcdTAwMjZzZ21paV9waHlcdTAwM2U7XG4rXHRwaHktbW9kZSA9IFwic2dtaWlcIjtcbitcdHBoeS1zdXBwbHkgPSBcdTAwM2NcdTAwMjZ2Y2NfM3YzXHUwMDNlO1xuK1x0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuK1x0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Z21hYzBfbWlpbVx1MDAzZTtcbitcdHN0YXR1cyA9IFwib2theVwiO1xuIH07XG4gXG4gLyogTW90b3Jjb21tIFlUODUyMVNDIFdBTiBwb3J0ICovXG5AQCAtMzQxLDYgKzM1MiwzNiBAQCBcdTAwMjZpMnMwXzhjaCB7XG4gXHRzdGF0dXMgPSBcIm9rYXlcIjtcbiB9O1xuIFxuK1x1MDAyNm1kaW8wIHtcbitcdHNnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuK1x0XHRjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwiO1xuK1x0XHRyZWcgPSBcdTAwM2MweDNcdTAwM2U7XG4rXHRcdG1heC1zcGVlZCA9IFx1MDAzYzEwMDBcdTAwM2U7XG4rXHRcdHJlc2V0LWFzc2VydC11cyA9IFx1MDAzYzIwMDAwXHUwMDNlO1xuK1x0XHRyZXNldC1kZWFzc2VydC11cyA9IFx1MDAzYzEwMDAwMFx1MDAzZTtcbitcdFx0cmVzZXQtZ3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMyBSS19QQzYgR1BJT19BQ1RJVkVfTE9XXHUwMDNlO1xuK1xuK1x0XHRsZWRzIHtcbitcdFx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuK1x0XHRcdGxlZEAxIHtcbitcdFx0XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlx1MDAzZTtcbitcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcbitcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbitcdFx0XHR9O1xuK1xuK1x0XHRcdGxlZEAyIHtcbitcdFx0XHRcdHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4rXHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9HUkVFTlx1MDAzZTtcbitcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcbitcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbitcdFx0XHR9O1xuK1x0XHR9O1xuK1x0fTtcbit9O1xuK1xuIFx1MDAyNm1kaW8xIHtcbiBcdHJnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuIFx0XHRjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwiO1xuQEAgLTM1MCw2ICszOTEsMjUgQEAgcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XG4gXHRcdHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzQgUktfUEMwIEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiBcdFx0cngtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxNTAwXHUwMDNlO1xuIFx0XHR0eC1pbnRlcm5hbC1kZWxheS1wcyA9IFx1MDAzYzE1MDBcdTAwM2U7XG4rXG4rXHRcdGxlZHMge1xuK1x0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rXHRcdFx0bGVkQDEge1xuK1x0XHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0FNQkVSXHUwMDNlO1xuK1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuK1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwia2VlcFwiO1xuK1x0XHRcdH07XG4rXG4rXHRcdFx0bGVkQDIge1xuK1x0XHRcdFx0cmVnID0gXHUwMDNjMlx1MDAzZTtcbitcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXHUwMDNlO1xuK1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuK1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwia2VlcFwiO1xuK1x0XHRcdH07XG4rXHRcdH07XG4gXHR9O1xuIH07XG4gXG5AQCAtNTg2LDMgKzY0NiwxMyBAQCBcdTAwMjZ4aW4zMmsge1xuIFx0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuIFx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Y2xrMzJrX291dDFcdTAwM2U7XG4gfTtcbitcbitcdTAwMjZ4cGNzIHtcbitcdHBoeXMgPSBcdTAwM2NcdTAwMjZjb21icGh5MiBQSFlfVFlQRV9TR01JSVx1MDAzZTtcbitcdHBoeS1uYW1lcyA9IFwic2VyZGVzXCI7XG4rXHRzdGF0dXMgPSBcIm9rYXlcIjtcbit9O1xuK1xuK1x1MDAyNnhwY3NfbWlpMCB7XG4rXHRzdGF0dXMgPSBcIm9rYXlcIjtcbit9O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXG5pbmRleCAzYmM2NTNmMDI3ZjFmLi4yMjdkMDNlMzM2MDQzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuQEAgLTExMCw2ICsxMTAsNTEgQEAgc2F0YTA6IHNhdGFAZmMwMDAwMDAge1xuIFx0XHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4gXHR9O1xuIFxuK1x0eHBjczogZXRoZXJuZXQtcGNzQGZkYTAwMDAwIHtcbitcdFx0Y29tcGF0aWJsZSA9IFwicm9ja2NoaXAscmszNTY4LXhwY3NcIjtcbitcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuK1x0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXHRcdHJlZyA9IFx1MDAzYzB4MCAweGZkYTAwMDAwIDB4MCAweDIwMDAwMFx1MDAzZTtcbitcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFBDTEtfWFBDU1x1MDAzZSwgXHUwMDNjXHUwMDI2Y3J1IENMS19YUENTX0VFRVx1MDAzZTtcbitcdFx0Y2xvY2stbmFtZXMgPSBcImNzclwiLCBcImVlZVwiO1xuK1x0XHRwb3dlci1kb21haW5zID0gXHUwMDNjXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcdTAwM2U7XG4rXHRcdHN0YXR1cyA9IFwiZGlzYWJsZWRcIjtcbitcbitcdFx0eHBjc19taWkwOiBldGhlcm5ldC1wY3MtbWlpQDAge1xuK1x0XHRcdHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rXHRcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0XHR9O1xuK1xuK1x0XHR4cGNzX21paTE6IGV0aGVybmV0LXBjcy1taWlAMSB7XG4rXHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4rXHRcdH07XG4rXG4rXHRcdHhwY3NfbWlpMjogZXRoZXJuZXQtcGNzLW1paUAyIHtcbitcdFx0XHRyZWcgPSBcdTAwM2MyXHUwMDNlO1xuK1x0XHRcdHN0YXR1cyA9IFwiZGlzYWJsZWRcIjtcbitcdFx0fTtcbitcbitcdFx0eHBjc19taWkzOiBldGhlcm5ldC1wY3MtbWlpQDMge1xuK1x0XHRcdHJlZyA9IFx1MDAzYzNcdTAwM2U7XG4rXHRcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0XHR9O1xuK1x0fTtcbitcbitcdGNsa19nbWFjMF94cGNzX21paTogY2xvY2steHBjcy1nbWFjMCB7XG4rXHRcdGNvbXBhdGlibGUgPSBcImZpeGVkLWNsb2NrXCI7XG4rXHRcdGNsb2NrLWZyZXF1ZW5jeSA9IFx1MDAzYzEyNTAwMDAwMFx1MDAzZTtcbitcdFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCJjbGtfZ21hYzBfeHBjc19taWlcIjtcbitcdFx0I2Nsb2NrLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcdH07XG4rXG4rXHRjbGtfZ21hYzFfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzEge1xuK1x0XHRjb21wYXRpYmxlID0gXCJmaXhlZC1jbG9ja1wiO1xuK1x0XHRjbG9jay1mcmVxdWVuY3kgPSBcdTAwM2MxMjUwMDAwMDBcdTAwM2U7XG4rXHRcdGNsb2NrLW91dHB1dC1uYW1lcyA9IFwiY2xrX2dtYWMxX3hwY3NfbWlpXCI7XG4rXHRcdCNjbG9jay1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXHR9O1xuK1xuIFx0cGlwZV9waHlfZ3JmMDogc3lzY29uQGZkYzcwMDAwIHtcbiBcdFx0Y29tcGF0aWJsZSA9IFwicm9ja2NoaXAscmszNTY4LXBpcGUtcGh5LWdyZlwiLCBcInN5c2NvblwiO1xuIFx0XHRyZWcgPSBcdTAwM2MweDAgMHhmZGM3MDAwMCAweDAgMHgxMDAwXHUwMDNlO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXG5pbmRleCBlM2RkNWFkZGE1YWNhLi41MDg4YWNjMDY5ODJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1xuQEAgLTE3MCw2ICsxNzAsNyBAQCBjb25maWcgRFdNQUNfUk9DS0NISVBcbiBcdGRlZmF1bHQgQVJDSF9ST0NLQ0hJUFxuIFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxuIFx0c2VsZWN0IE1GRF9TWVNDT05cbitcdHNlbGVjdCBQQ1NfWFBDU19ST0NLQ0hJUFxuIFx0aGVscFxuIFx0ICBTdXBwb3J0IGZvciBFdGhlcm5ldCBjb250cm9sbGVyIG9uIFJvY2tjaGlwIFJLMzI4OCBTb0MuXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcbmluZGV4IGY1ZjlmYTY3ZWNkNzcuLjQzMDhkY2NiZjI1NzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXG5AQCAtNjAzLDEzICs2MDMsNDcgQEAgc3RhdGljIHZvaWQgY29tbW9uX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpXG4gXHRwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlbmVlZHNfcmVzZXQgPSB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcbitcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuK1x0aW50IGFkZHI7XG4rXG4rXHRkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSk7XG4rXG4rXHRpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgXCJwY3MtaGFuZGxlXCIpKSB7XG4rXHRcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXCJwY3MtaGFuZGxlXCIsIDApO1xuK1x0XHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xuK1x0XHRmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTtcbitcdH0gZWxzZSB7XG4rXHRcdGFkZHIgPSBmZnMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIC0gMTtcbitcdFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cdTAwM2VtaWksIGFkZHIpO1xuK1x0fVxuK1xuK1x0aWYgKElTX0VSUih4cGNzKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoeHBjcyk7XG4rXG4rXHR4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtdWx0X2ZhY3RfMTAwbnMpO1xuK1xuK1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBpbnRlbF9tZ2JlX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbit7XG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0eHBjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4rXHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICppbnRlbF9tZ2JlX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuIHtcbi1cdC8qIHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VoYXNfeHBjcyBoYXMgYmVlbiBzZXQgdHJ1ZSwgc28gdGhlcmVcbi1cdCAqIHNob3VsZCBhbHdheXMgYmUgYW4gWFBDUy4gVGhlIG9yaWdpbmFsIGNvZGUgd291bGQgYWx3YXlzXG4tXHQgKiByZXR1cm4gdGhpcyBpZiBwcmVzZW50LlxuLVx0ICovXG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4gXHRyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuIH1cbiBcbkBAIC03MzMsNiArNzY3LDggQEAgc3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ICAgIHBsYXQtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKSB7XG4gXHRcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzayA9IEJJVF9VMzIoSU5URUxfTUdCRV9YUENTX0FERFIpO1xuIFx0XHRwbGF0LVx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbitcdFx0cGxhdC1cdTAwM2VwY3NfaW5pdCA9IGludGVsX21nYmVfcGNzX2luaXQ7XG4rXHRcdHBsYXQtXHUwMDNlcGNzX2V4aXQgPSBpbnRlbF9tZ2JlX3Bjc19leGl0O1xuIFx0XHRwbGF0LVx1MDAzZXNlbGVjdF9wY3MgPSBpbnRlbF9tZ2JlX3NlbGVjdF9wY3M7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXG5pbmRleCAxOWYzNGUxOGJmZWYyLi45YWYzMmMyNmY5YzE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbkBAIC04MSw4ICs4MSwxMSBAQCBzdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgcmVuZXNhc19nbWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB7XG4tXHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcylcbi1cdFx0bWlpY19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuK1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtaWljX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4rXHRwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmVuZXNhc19nbWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG5pbmRleCA4ZDcwNDJlNjg5MjYxLi5iM2Q3NDZkZDk2NmZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWZkL3N5c2Nvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MtcmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwic3RtbWFjX3BsYXRmb3JtLmhcIlxuQEAgLTQ3LDYgKzQ4LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHtcbiBcdHZvaWQgKCpzZXRfdG9fcmdtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxuIFx0XHRcdCAgICAgaW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpO1xuIFx0dm9pZCAoKnNldF90b19ybWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7XG4rXHR2b2lkICgqc2V0X3RvX3NnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7XG4gXHRpbnQgKCpzZXRfc3BlZWQpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxuIFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQpO1xuIFx0dm9pZCAoKmludGVncmF0ZWRfcGh5X3Bvd2VydXApKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbkBAIC02Myw2ICs2NSw3IEBAIHN0cnVjdCBya19nbWFjX29wcyB7XG4gXHRib29sIGNsb2NrX2dyZl9yZWdfaW5fcGhwO1xuIFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcbiBcdGJvb2wgc3VwcG9ydHNfcm1paTtcbitcdGJvb2wgc3VwcG9ydHNfc2dtaWk7XG4gXHRib29sIHBocF9ncmZfcmVxdWlyZWQ7XG4gXHRib29sIHJlZ3NfdmFsaWQ7XG4gXHR1MzIgcmVnc1tdO1xuQEAgLTk4LDYgKzEwMSw3IEBAIHN0cnVjdCBya19wcml2X2RhdGEge1xuIFx0Ym9vbCBpbnRlZ3JhdGVkX3BoeTtcbiBcdGJvb2wgc3VwcG9ydHNfcmdtaWk7XG4gXHRib29sIHN1cHBvcnRzX3JtaWk7XG4rXHRib29sIHN1cHBvcnRzX3NnbWlpO1xuIFxuIFx0c3RydWN0IGNsa19idWxrX2RhdGEgKmNsa3M7XG4gXHRpbnQgbnVtX2Nsa3M7XG5AQCAtODA5LDYgKzgxMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTI4X29wcyA9IHtcbiAjZGVmaW5lIFJLMzU2OF9HUkZfR01BQzFfQ09OMVx0XHQweDAzOGNcbiBcbiAvKiBSSzM1NjhfR1JGX0dNQUMwX0NPTjEgXHUwMDI2XHUwMDI2IFJLMzU2OF9HUkZfR01BQzFfQ09OMSAqL1xuKyNkZWZpbmUgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJXHRcdEdSRl9DTFJfQklUKDcpXG4rI2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSVx0XHRHUkZfQklUKDcpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxcdFx0XHRHUkZfQklUKDMpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxfQ0xSXHRcdEdSRl9DTFJfQklUKDMpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFXHRcdEdSRl9CSVQoMSlcbkBAIC04MzYsNiArODQyLDE2IEBAIHN0YXRpYyBpbnQgcmszNTY4X2luaXQoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcm1paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbit7XG4rXHR1MzIgY29uMTtcbitcbitcdGNvbjEgPSAoYnNwX3ByaXYtXHUwMDNlaWQgPT0gMSkgPyBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgOlxuK1x0XHRcdFx0ICAgICBSSzM1NjhfR1JGX0dNQUMwX0NPTjE7XG4rXG4rXHRyZWdtYXBfd3JpdGUoYnNwX3ByaXYtXHUwMDNlZ3JmLCBjb24xLCBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkpO1xuK31cbitcbiBzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3JnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxuIFx0XHRcdFx0aW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpXG4ge1xuQEAgLTg1MSwxOSArODY3LDMxIEBAIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdCAgICAgUkszNTY4X0dNQUNfQ0xLX1RYX0RMX0NGRyh0eF9kZWxheSkpO1xuIFxuIFx0cmVnbWFwX3dyaXRlKGJzcF9wcml2LVx1MDAzZWdyZiwgY29uMSxcbitcdFx0ICAgICBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkgfFxuIFx0XHQgICAgIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUgfFxuIFx0XHQgICAgIFJLMzU2OF9HTUFDX1RYQ0xLX0RMWV9FTkFCTEUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3NnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuK3tcbitcdHUzMiBjb24xO1xuK1xuK1x0Y29uMSA9IChic3BfcHJpdi1cdTAwM2VpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6XG4rXHRcdFx0XHQgICAgIFJLMzU2OF9HUkZfR01BQzBfQ09OMTtcbitcbitcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cdTAwM2VncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyByazM1Njhfb3BzID0ge1xuIFx0LmluaXQgPSByazM1NjhfaW5pdCxcbitcdC5zZXRfdG9fcm1paSA9IHJrMzU2OF9zZXRfdG9fcm1paSxcbiBcdC5zZXRfdG9fcmdtaWkgPSByazM1Njhfc2V0X3RvX3JnbWlpLFxuK1x0LnNldF90b19zZ21paSA9IHJrMzU2OF9zZXRfdG9fc2dtaWksXG4rXG4gXHQuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsXG4gXG4gXHQuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLFxuIFxuLVx0LnN1cHBvcnRzX3JtaWkgPSB0cnVlLFxuLVxuIFx0LnJlZ3NfdmFsaWQgPSB0cnVlLFxuIFx0LnJlZ3MgPSB7XG4gXHRcdDB4ZmUyYTAwMDAsIC8qIGdtYWMwICovXG5AQCAtMTIwOCw2ICsxMjM2LDQzIEBAIHN0YXRpYyB2b2lkIHJrX3BoeV9wb3dlcmRvd24oc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdGRldl9lcnIoYnNwX3ByaXYtXHUwMDNlZGV2LCBcImZhaWwgdG8gZGlzYWJsZSBwaHktc3VwcGx5XFxuXCIpO1xuIH1cbiBcbitzdGF0aWMgaW50IHJrX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcHJpdi1cdTAwM2VkZXZpY2UtXHUwMDNlb2Zfbm9kZTtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNzX25vZGU7XG4rXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcztcbitcbitcdHBjc19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgXCJwY3MtaGFuZGxlXCIsIDApO1xuK1x0aWYgKCFwY3Nfbm9kZSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHR4cGNzID0geHBjc19ya19jcmVhdGUocHJpdi1cdTAwM2VkZXZpY2UsIHBjc19ub2RlKTtcbitcdG9mX25vZGVfcHV0KHBjc19ub2RlKTtcbitcdGlmIChJU19FUlIoeHBjcykpXG4rXHRcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xuK1xuK1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBya19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpXG4rXHRcdHJldHVybjtcbitcbitcdHhwY3NfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuK1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0gTlVMTDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4rXHRcdFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuK3tcbitcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0LFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyAqb3BzKVxuQEAgLTEzMzAsNiArMTM5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4gXG4gXHRic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19yZ21paSA9IG9wcy1cdTAwM2VzdXBwb3J0c19yZ21paSB8fCAhIW9wcy1cdTAwM2VzZXRfdG9fcmdtaWk7XG4gXHRic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19ybWlpID0gb3BzLVx1MDAzZXN1cHBvcnRzX3JtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3JtaWk7XG4rXHRic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19zZ21paSA9IG9wcy1cdTAwM2VzdXBwb3J0c19zZ21paSB8fCAhIW9wcy1cdTAwM2VzZXRfdG9fc2dtaWk7XG4gXG4gXHRpZiAob3BzLVx1MDAzZWluaXQpIHtcbiBcdFx0cmV0ID0gb3BzLVx1MDAzZWluaXQoYnNwX3ByaXYpO1xuQEAgLTEzNjEsNiArMTQyNywxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfY2hlY2tfb3BzKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRpZiAoIWJzcF9wcml2LVx1MDAzZXN1cHBvcnRzX3JtaWkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4rXHRcdGlmICghYnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfc2dtaWkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X2Vycihic3BfcHJpdi1cdTAwM2VkZXYsXG4gXHRcdFx0XCJ1bnN1cHBvcnRlZCBpbnRlcmZhY2UgJWRcIiwgYnNwX3ByaXYtXHUwMDNlcGh5X2lmYWNlKTtcbkBAIC0xMzc5LDE2ICsxNDQ5LDE5IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdHJldCA9IGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgdHJ1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGJzcF9wcml2LVx1MDAzZXBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpXG4rXHRcdGdvdG8gc2V0X21vZGU7XG4rXG4gXHRyZXQgPSBya19nZXRfcGh5X2ludGZfc2VsKGJzcF9wcml2LVx1MDAzZXBoeV9pZmFjZSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFxuIFx0aW50ZiA9IHJldDtcbiBcbi1cdHJldCA9IGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgdHJ1ZSk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0aWYgKGJzcF9wcml2LVx1MDAzZWdtYWNfcGh5X2ludGZfc2VsX21hc2sgfHxcbiBcdCAgICBic3BfcHJpdi1cdTAwM2VnbWFjX3JtaWlfbW9kZV9tYXNrKSB7XG4gXHRcdC8qIElmIGRlZmluZWQsIGVuY29kZSB0aGUgcGh5X2ludGZfc2VsIHZhbHVlICovXG5AQCAtMTM5OSwxMCArMTQ3Miw4IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRcdFx0ICAgICAgYnNwX3ByaXYtXHUwMDNlZ21hY19ybWlpX21vZGVfbWFzayk7XG4gXG4gXHRcdHJldCA9IHJrX3dyaXRlX2dtYWNfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH1cbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFx0fVxuIFxuIFx0aWYgKGJzcF9wcml2LVx1MDAzZWNsb2NrLnJtaWlfbW9kZV9tYXNrKSB7XG5AQCAtMTQxMCwxMyArMTQ4MSwxMiBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0XHRcdCAgICAgYnNwX3ByaXYtXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spO1xuIFxuIFx0XHRyZXQgPSBya193cml0ZV9jbG9ja19ncmZfcmVnKGJzcF9wcml2LCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXHR9XG4gXG4tXHQvKnJtaWkgb3IgcmdtaWkqL1xuK3NldF9tb2RlOlxuK1x0Lyogcm1paSwgcmdtaWksIHNnbWlpICovXG4gXHRzd2l0Y2ggKGJzcF9wcml2LVx1MDAzZXBoeV9pZmFjZSkge1xuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG4gXHRcdGRldl9pbmZvKGRldiwgXCJpbml0IGZvciBSR01JSVxcblwiKTtcbkBAIC0xNDQ3LDE1ICsxNTE3LDIwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRpZiAoYnNwX3ByaXYtXHUwMDNlb3BzLVx1MDAzZXNldF90b19ybWlpKVxuIFx0XHRcdGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fcm1paShic3BfcHJpdik7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4rXHRcdGRldl9pbmZvKGRldiwgXCJpbml0IGZvciBTR01JSVxcblwiKTtcbitcdFx0aWYgKGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fc2dtaWkpXG4rXHRcdFx0YnNwX3ByaXYtXHUwMDNlb3BzLVx1MDAzZXNldF90b19zZ21paShic3BfcHJpdik7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X2VycihkZXYsIFwiTk8gaW50ZXJmYWNlIGRlZmluZWQhXFxuXCIpO1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFx0fVxuIFxuIFx0cmV0ID0gcmtfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKGRldik7XG4gXG5AQCAtMTQ2Myw2ICsxNTM4LDEwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlaW50ZWdyYXRlZF9waHlfcG93ZXJ1cChic3BfcHJpdik7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitjbGtfZGlzYWJsZTpcbitcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmtfZ21hY19wb3dlcmRvd24oc3RydWN0IHJrX3ByaXZfZGF0YSAqZ21hYylcbkBAIC0xNDg2LDYgKzE1NjUsOSBAQCBzdGF0aWMgdm9pZCBya19nZXRfaW50ZXJmYWNlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgKmJzcF9wcml2LFxuIFxuIFx0aWYgKHJrLVx1MDAzZXN1cHBvcnRzX3JtaWkpXG4gXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7XG4rXG4rXHRpZiAocmstXHUwMDNlc3VwcG9ydHNfc2dtaWkpXG4rXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksIGludGVyZmFjZXMpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJrX3NldF9jbGtfdHhfcmF0ZSh2b2lkICpic3BfcHJpdl8sIHN0cnVjdCBjbGsgKmNsa190eF9pLFxuQEAgLTE2MDIsNiArMTY4NCwxNyBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHBsYXRfZGF0LVx1MDAzZXN1c3BlbmQgPSBya19nbWFjX3N1c3BlbmQ7XG4gXHRwbGF0X2RhdC1cdTAwM2VyZXN1bWUgPSBya19nbWFjX3Jlc3VtZTtcbiBcbitcdGlmIChwbGF0X2RhdC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuK1x0XHQvKiBTR01JSSBjbG9jayBhbHdheXMgcnVucyBhdCAxMjUgTUh6ICovXG4rXHRcdHBsYXRfZGF0LVx1MDAzZXNldF9jbGtfdHhfcmF0ZSA9IE5VTEw7XG4rXG4rXHRcdC8qIFNHTUlJIHJlcXVpcmVzIGEgUENTICovXG4rXHRcdHBsYXRfZGF0LVx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbitcdFx0cGxhdF9kYXQtXHUwMDNlcGNzX2luaXQgPSBya19wY3NfaW5pdDtcbitcdFx0cGxhdF9kYXQtXHUwMDNlcGNzX2V4aXQgPSBya19wY3NfZXhpdDtcbitcdFx0cGxhdF9kYXQtXHUwMDNlc2VsZWN0X3BjcyA9IHJrX3NlbGVjdF9wY3M7XG4rXHR9XG4rXG4gXHRwbGF0X2RhdC1cdTAwM2Vic3BfcHJpdiA9IHJrX2dtYWNfc2V0dXAocGRldiwgcGxhdF9kYXQsIGRhdGEpO1xuIFx0aWYgKElTX0VSUihwbGF0X2RhdC1cdTAwM2Vic3BfcHJpdikpXG4gXHRcdHJldHVybiBQVFJfRVJSKHBsYXRfZGF0LVx1MDAzZWJzcF9wcml2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmNcbmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xuQEAgLTM1LDggKzM1LDExIEBAIHN0YXRpYyBpbnQgcnpuMV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgcnpuMV9kd21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4tXHRcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbitcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWlpY19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuK1x0cHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJ6bjFfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG5pbmRleCAxZDdmMGE1N2QyODg5Li42ZDRiYzFmZThmNzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbkBAIC01MzksOCArNTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgc29jZnBnYV9kd21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4tXHRcdGx5bnhfcGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4rXHRcdHJldHVybjtcbitcbitcdGx5bnhfcGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4rXHRwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqc29jZnBnYV9kd21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xuaW5kZXggYWZlOThmZjViZGNiMC4uNzM5NmI2ODg5OWM2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcbkBAIC00MjYsMzUgKzQyNiwxNCBAQCBpbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcbiBpbnQgc3RtbWFjX3Bjc19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcbi1cdHN0cnVjdCBkd194cGNzICp4cGNzID0gTlVMTDtcbi1cdGludCBhZGRyLCByZXQ7XG4tXG4tXHRkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSk7XG4tXG4tXHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KSB7XG4tXHRcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdChwcml2KTtcbi1cdH0gZWxzZSBpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgXCJwY3MtaGFuZGxlXCIpKSB7XG4tXHRcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXCJwY3MtaGFuZGxlXCIsIDApO1xuLVx0XHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xuLVx0XHRmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTtcbi1cdFx0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHhwY3MpO1xuLVx0fSBlbHNlIGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIHtcbi1cdFx0YWRkciA9IGZmcyhwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzaykgLSAxO1xuLVx0XHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2Rldihwcml2LVx1MDAzZW1paSwgYWRkcik7XG4tXHRcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTtcbi1cdH0gZWxzZSB7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2luaXQpXG4gXHRcdHJldHVybiAwO1xuLVx0fVxuIFxuK1x0cmV0ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KHByaXYpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi1cdTAwM2VkZXZpY2UsIHJldCwgXCJObyB4UENTIGZvdW5kXFxuXCIpO1xuLVxuLVx0aWYgKHhwY3MpXG4tXHRcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZW11bHRfZmFjdF8xMDBucyk7XG4tXG4tXHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSB4cGNzO1xuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVx1MDAzZWRldmljZSwgcmV0LCBcIkZhaWxlZCB0byBpbml0aWFsaXplIFBDU1xcblwiKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC00NjMsMTQgKzQ0MiwxMCBAQCB2b2lkIHN0bW1hY19wY3NfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuLVx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQocHJpdik7XG4tXG4tXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbitcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbi1cdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4rXHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQocHJpdik7XG4gfVxuIFxuIHN0cnVjdCBzdG1tYWNfY2xrX3JhdGUge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbmluZGV4IGU0MTdmZDY2ZjY2MGEuLjNkYjliMzQzYWMwYzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbkBAIC0xMiw2ICsxMiwzMSBAQCBjb25maWcgUENTX1hQQ1NcbiBcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgYW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIFN5bm9wc3lzXG4gXHQgIERlc2lnbldhcmUgWFBDUyBjb250cm9sbGVycy5cbiBcbitpZiBQQ1NfWFBDU1xuK1xuK2NvbmZpZyBQQ1NfWFBDU19QTEFURk9STVxuK1x0dHJpc3RhdGUgXCJHZW5lcmljIFhQQ1MgY29udHJvbGxlciBzdXBwb3J0XCJcbitcdGRlZmF1bHQgUENTX1hQQ1NcbitcdGhlbHBcbitcdCAgR2VuZXJpYyBEV1hQQ1MgZHJpdmVyIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCByZXF1aXJlIGFueVxuK1x0ICBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIHRvIGZ1bmN0aW9uIG9yIGlzIHVzaW5nIHBsYXRmb3JtXG4rXHQgIGRhdGEgZm9yIHNldHVwLlxuK1xuK1x0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuK1xuK2NvbmZpZyBQQ1NfWFBDU19ST0NLQ0hJUFxuK1x0dHJpc3RhdGUgXCJSb2NrY2hpcCBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydFwiXG4rXHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcbitcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVClcbitcdHNlbGVjdCBHRU5FUklDX1BIWVxuK1x0c2VsZWN0IFBNX0dFTkVSSUNfRE9NQUlOU1xuK1x0aGVscFxuK1x0ICBTdXBwb3J0IGZvciBYUENTIGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszNTZ4IFNvQy5cbitcbitcdCAgSWYgeW91IGhhdmUgYSBSb2NrY2hpcCBTb0Mgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuK1xuK2VuZGlmICMgUENTX1hQQ1NcbitcbiBjb25maWcgUENTX0xZTlhcbiBcdHRyaXN0YXRlXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlXG5pbmRleCA0Zjc5MjA2MThiOTAwLi5mOWY2Y2YyNTc4ZDcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcbkBAIC0xLDEwICsxLDExIEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICMgTWFrZWZpbGUgZm9yIExpbnV4IFBDUyBkcml2ZXJzXG4gXG4tcGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpXHQ6PSBwY3MteHBjcy5vIHBjcy14cGNzLXBsYXQubyBcXFxuLVx0XHRcdFx0ICAgcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gub1xuK3Bjc194cGNzLSQoQ09ORklHX1BDU19YUENTKVx0Oj0gcGNzLXhwY3MubyBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vXG4gXG4gb2JqLSQoQ09ORklHX1BDU19YUENTKVx0XHQrPSBwY3NfeHBjcy5vXG4rb2JqLSQoQ09ORklHX1BDU19YUENTX1BMQVRGT1JNKSArPSBwY3MteHBjcy1wbGF0Lm9cbitvYmotJChDT05GSUdfUENTX1hQQ1NfUk9DS0NISVApICs9IHBjcy14cGNzLXJrLm9cbiBvYmotJChDT05GSUdfUENTX0xZTlgpXHRcdCs9IHBjcy1seW54Lm9cbiBvYmotJChDT05GSUdfUENTX01US19MWU5YSSlcdCs9IHBjcy1tdGstbHlueGkub1xuIG9iai0kKENPTkZJR19QQ1NfUlpOMV9NSUlDKVx0Kz0gcGNzLXJ6bjEtbWlpYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ1ZTBmMjJjOTczYzJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXG5AQCAtMCwwICsxLDU3MyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXJcbisgKlxuKyAqIEJhc2VkIG9uIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIFhQQ1MgcGxhdGZvcm0gZHJpdmVyLlxuKyAqIENvcHlyaWdodCAoQykgMjAyNCBTZXJnZSBTZW1pblxuKyAqXG4rICogQWRhcHRlZCBmb3IgUm9ja2NoaXAgU29Dcywgd2l0aCByZWZlcmVuY2UgdG8gdGhlIFJvY2tjaGlwIE9FTSBkcml2ZXIuXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IENvaWEgUHJhbnRcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfcGxhdGZvcm0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX2RvbWFpbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInBjcy14cGNzLmhcIlxuK1xuK3N0cnVjdCBkd194cGNzX3JrIHtcbitcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuK1x0dm9pZCBfX2lvbWVtICpyZWdfYmFzZTtcbitcdHN0cnVjdCBwaHkgKnNlcmRlc19waHk7XG4rXHRzdHJ1Y3QgY2xrICpjc3JfY2xrO1xuK1x0c3RydWN0IGNsayAqZWVlX2NsaztcbitcdHU4IGVlZV9tdWx0X2ZhY3Q7XG4rfTtcbitcbitzdGF0aWMgcHRyZGlmZl90IHhwY3NfcmtfYWRkcl9mb3JtYXQoaW50IGRldiwgaW50IHJlZylcbit7XG4rXHRyZXR1cm4gRklFTERfUFJFUCgweDcwMDAwLCBkZXYpIHwgRklFTERfUFJFUCgweGZmZmYsIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX3JlZyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0cHRyZGlmZl90IGNzcjtcbitcdGludCByZXQ7XG4rXG4rXHRjc3IgPSB4cGNzX3JrX2FkZHJfZm9ybWF0KGRldiwgcmVnKTtcbitcbitcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHJlYWRsKHB4cGNzLVx1MDAzZXJlZ19iYXNlICsgKGNzciBcdTAwM2NcdTAwM2MgMikpIFx1MDAyNiAweGZmZmY7XG4rXG4rXHRwbV9ydW50aW1lX3B1dChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcbit7XG4rXHRwdHJkaWZmX3QgY3NyO1xuK1x0aW50IHJldDtcbitcbitcdGNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpO1xuK1xuK1x0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0d3JpdGVsKHZhbCwgcHhwY3MtXHUwMDNlcmVnX2Jhc2UgKyAoY3NyIFx1MDAzY1x1MDAzYyAyKSk7XG4rXG4rXHRwbV9ydW50aW1lX3B1dChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJMVx0MlxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTJcdDNcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkzXHQ0XG4rI2RlZmluZSBST0NLQ0hJUF9NTURfUE1BUE1EXHQ2XG4rI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJXHQ3XG4rXG4rc3RhdGljIGJvb2wgeHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoaW50IGFkZHIpXG4re1xuK1x0cmV0dXJuICEoYWRkciBcdTAwM2MgMCB8fCBhZGRyIFx1MDAzZSAzKTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0c3dpdGNoIChkZXYpIHtcbitcdGNhc2UgTURJT19NTURfUE1BUE1EOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDtcbitcdGNhc2UgTURJT19NTURfVkVORDI6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcdH1cbitcbitcdC8qXG4rXHQgKiBSZWFkcyBhcmUgcmVkaXJlY3RlZCBieSBoYXJkd2FyZSB0byB0aGUgcG9ydCdzIHJlYWQtb25seSBtaXJyb3I7XG4rXHQgKiBvbmx5IHdyaXRlcyBoYXZlIHRvIGJlIHRhcmdldGVkIGF0IE1JSSAoc2VlIHRoZSB3cml0ZSBwYXRoKS5cbitcdCAqL1xuK1x0c3dpdGNoIChhZGRyKSB7XG4rXHRjYXNlIDA6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMjtcbitcdGNhc2UgMzpcbitcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZylcbit7XG4rXHRzd2l0Y2ggKGRldikge1xuK1x0Y2FzZSBNRElPX01NRF9QTUFQTUQ6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xuK1x0Y2FzZSBNRElPX01NRF9WRU5EMjpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVOWElPO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoZXNlIHJlZ2lzdGVycyBwaHlzaWNhbGx5IGxpdmUgb25seSBpbiBNSUkgKHRoZSBtYW5hZ2VtZW50IHBvcnQpLlxuK1x0ICogUG9ydHMgMS0zIGV4cG9zZSByZWFkLW9ubHkgbWlycm9ycyBvZiB0aGVzZSBiaXRzLCBzbyB3cml0ZXMgbXVzdFxuK1x0ICogYWx3YXlzIHRhcmdldCBNSUk7IHRoZSByZWFkIHBhdGggcmVtYXBzIHBlciBhZGRyZXNzIGFuZCB0aGVcbitcdCAqIGhhcmR3YXJlIHJlZGlyZWN0cyB0byB0aGUgcG9ydCdzIG1pcnJvci5cbitcdCAqL1xuK1x0c3dpdGNoIChyZWcpIHtcbitcdGNhc2UgRFdfVlJfTUlJX0FOX0NUUkw6XG4rXHRjYXNlIERXX1ZSX01JSV9BTl9JTlRSX1NUUzpcbitcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDA6XG4rXHRjYXNlIERXX1ZSX01JSV9FRUVfTUNUUkwxOlxuK1x0Y2FzZSBEV19WUl9NSUlfRElHX0NUUkwyOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChhZGRyKSB7XG4rXHRjYXNlIDA6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMjtcbitcdGNhc2UgMzpcbitcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZylcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbitcdGludCBkZXY7XG4rXG4rXHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGRldiA9IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhhZGRyLCBNRElPX01NRF9WRU5EMiwgcmVnKTtcbitcdGlmIChkZXYgXHUwMDNjIDApXG4rXHRcdHJldHVybiAweGZmZmY7XG4rXG4rXHRyZXR1cm4geHBjc19ya19yZWFkX3JlZyhweHBjcywgZGV2LCByZWcpO1xuK31cbitcbitzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cdTAwM2Vwcml2O1xuK1x0aW50IGRldjtcbitcbitcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0ZGV2ID0geHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhhZGRyLCBNRElPX01NRF9WRU5EMiwgcmVnKTtcbitcdGlmIChkZXYgXHUwMDNjIDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHhwY3Nfcmtfd3JpdGVfcmVnKHB4cGNzLCBkZXYsIHJlZywgdmFsKTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpO1xuK1x0aWYgKGRldiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDB4ZmZmZjtcbitcbitcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGRldiA9IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpO1xuK1x0aWYgKGRldiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGR3X3hwY3NfcmsgKnhwY3NfcmtfY3JlYXRlX2RhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3M7XG4rXG4rXHRweHBjcyA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpweHBjcyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFweHBjcylcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRweHBjcy1cdTAwM2VwZGV2ID0gcGRldjtcbitcbitcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcHhwY3MpO1xuK1xuK1x0cmV0dXJuIHB4cGNzO1xuK31cbitcbitzdGF0aWMgaW50IHhwY3Nfcmtfc2VyZGVzX3BoeV9pbml0KHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbitcbitcdHB4cGNzLVx1MDAzZXNlcmRlc19waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCBcInNlcmRlc1wiKTtcbitcdGlmIChJU19FUlIocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSkpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy1cdTAwM2VzZXJkZXNfcGh5KSxcbitcdFx0XHRcdFx0XCJGYWlsZWQgdG8gZ2V0IFNlckRlcyBQSFlcXG5cIik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuK1xuK1x0cGh5X3Bvd2VyX29mZihweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbitcdHBoeV9leGl0KHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuK1xuK1x0ZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb24oc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuK1x0aW50IHJldDtcbitcbitcdC8qXG4rXHQgKiBUaGUgcG93ZXIgZG9tYWluIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGVuYWJsZWQsIHdoaWNoIGFsbG93cyB1cyB0b1xuK1x0ICogZHluYW1pY2FsbHkgdHVybiB0aGUgQ1NSIGNsb2NrIG9uL29mZiB1c2luZyBQTSB3aGlsZSBrZWVwaW5nIHRoZSBQQ1NcbitcdCAqIHBvd2VyZWQgb24uXG4rXHQgKi9cbitcdHJldCA9IGRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgdHJ1ZSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBwb3dlciBvbiBwb3dlci1kb21haW5zXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0ID0gcGh5X2luaXQocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBpbml0IFNlckRlcyBQSFlcXG5cIik7XG4rXHRcdGdvdG8gcG1fZG9tYWluO1xuK1x0fVxuK1xuK1x0cmV0ID0gcGh5X3Bvd2VyX29uKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gcG93ZXIgb24gU2VyRGVzIFBIWVxcblwiKTtcbitcdFx0Z290byBzZXJkZXNfcGh5O1xuK1x0fVxuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmLCBweHBjcyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBkZXZtIGZvciBTZXJEZXMgUEhZOiAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rc2VyZGVzX3BoeTpcbitcdHBoeV9leGl0KHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuK3BtX2RvbWFpbjpcbitcdGRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgZmFsc2UpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfcmVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbit7XG4rXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcHhwY3MtXHUwMDNlcGRldjtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJlc291cmNlICpyZXM7XG4rXG4rXHRyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApO1xuK1x0aWYgKCFyZXMpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiTm8gcmVnLXNwYWNlIGZvdW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChyZXNvdXJjZV9zaXplKHJlcykgXHUwMDNjIFNaXzJNKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkludmFsaWQgcmVnLXNwYWNlIHNpemVcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cHhwY3MtXHUwMDNlcmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xuK1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VyZWdfYmFzZSkpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIG1hcCByZWctc3BhY2VcXG5cIik7XG4rXHRcdHJldHVybiBQVFJfRVJSKHB4cGNzLVx1MDAzZXJlZ19iYXNlKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB4cGNzX3JrX2V4aXRfY2xrKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuK1xuK1x0cG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7XG4rXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtXHUwMDNlZWVlX2Nsayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19pbml0X2NsayhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4rXHR1bnNpZ25lZCBsb25nIHJhdGU7XG4rXHR1NjQgbXVsdDtcbitcdGludCByZXQ7XG4rXG4rXHRweHBjcy1cdTAwM2Vjc3JfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgXCJjc3JcIik7XG4rXHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZWNzcl9jbGspKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXHUwMDNlY3NyX2NsayksXG4rXHRcdFx0XHRcdCBcIkZhaWxlZCB0byBnZXQgQ1NSIGNsb2NrXFxuXCIpO1xuK1xuK1x0cHhwY3MtXHUwMDNlZWVlX2NsayA9IGRldm1fY2xrX2dldChkZXYsIFwiZWVlXCIpO1xuK1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VlZWVfY2xrKSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZWVlZV9jbGspLFxuK1x0XHRcdFx0XHQgXCJGYWlsZWQgdG8gZ2V0IEVFRSBjbG9ja1xcblwiKTtcbitcbitcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIGVuYWJsZSBFRUUgY2xvY2tcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTtcbitcdHBtX3J1bnRpbWVfZW5hYmxlKGRldik7XG4rXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB4cGNzX3JrX2V4aXRfY2xrLCBweHBjcyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBkZXZtIGZvciBFRUUgY2xvY2s6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogQ29tcHV0ZSB0aGUgbXVsdGlwbGllciBmb3IgdGhlIEVFRSBjbG9jayBzbyB0aGF0XG4rXHQgKiBjbGtfZWVlX3BlcmlvZCAqIChtdWx0X2ZhY3QgKyAxKSBmYWxscyB3aXRoaW4gODAuLjEyMCBucy5cbitcdCAqXG4rXHQgKiBPbiBSSzM1NjgsIGNsa194cGNzX2VlZSBpcyBtdXhlZCBiZXR3ZWVuIGdwbGwyMDAgKDIwMCBNSHosIDUgbnMpXG4rXHQgKiBhbmQgY3BsbDEyNSAoMTI1IE1IeiwgOCBucyksIHNlbGVjdGVkIGJ5IENSVV9DTEtTRUxfQ09OMjkgYml0IDEzLlxuK1x0ICogVGhlIHJlc2V0IHZhbHVlIGlzIDAgKDIwMCBNSHopLCBidXQgZGVyaXZlIHRoZSB2YWx1ZSBhdCBydW50aW1lIHRvXG4rXHQgKiBzdGF5IGNvcnJlY3QgaWYgdGhlIG11eCBpcyBjaGFuZ2VkIGJ5IGEgYm9hcmQuXG4rXHQgKlxuK1x0ICogVXNlIGEgNjQtYml0IGludGVybWVkaWF0ZTogb24gMzItYml0IGJ1aWxkcywgMTAwICogMjAwMDAwMDAwXG4rXHQgKiBkb2VzIG5vdCBmaXQgaW4gdW5zaWduZWQgbG9uZy4gQ2xhbXAgdG8gdGhlIDQtYml0XG4rXHQgKiBEV19WUl9NSUlfRUVFX01VTFRfRkFDVF8xMDBOUyBmaWVsZC5cbitcdCAqL1xuK1x0cmF0ZSA9IGNsa19nZXRfcmF0ZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbitcdGlmICghcmF0ZSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcIkludmFsaWQgRUVFIGNsb2NrIHJhdGVcXG5cIik7XG4rXG4rXHRtdWx0ID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKDEwMFVMTCAqIHJhdGUsIE5TRUNfUEVSX1NFQykgLSAxO1xuK1x0cHhwY3MtXHUwMDNlZWVlX211bHRfZmFjdCA9IG1pbl90KHU2NCwgbXVsdCwgMTUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19pbml0X2J1cyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4rXHRzdGF0aWMgYXRvbWljX3QgaWQgPSBBVE9NSUNfSU5JVCgtMSk7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuK1x0aW50IHJldDtcbitcbitcdGJ1cyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKGRldiwgMCk7XG4rXHRpZiAoIWJ1cylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRidXMtXHUwMDNlbmFtZSA9IFwiUm9ja2NoaXAgRFcgWFBDUyBNQ0kvQVBCM1wiO1xuK1x0YnVzLVx1MDAzZXJlYWQgPSB4cGNzX3JrX3JlYWRfYzIyO1xuK1x0YnVzLVx1MDAzZXdyaXRlID0geHBjc19ya193cml0ZV9jMjI7XG4rXHRidXMtXHUwMDNlcmVhZF9jNDUgPSB4cGNzX3JrX3JlYWRfYzQ1O1xuK1x0YnVzLVx1MDAzZXdyaXRlX2M0NSA9IHhwY3Nfcmtfd3JpdGVfYzQ1O1xuK1x0YnVzLVx1MDAzZXBoeV9tYXNrID0gfjA7XG4rXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuK1x0YnVzLVx1MDAzZXByaXYgPSBweHBjcztcbitcbitcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLFxuK1x0XHQgXCJyb2NrY2hpcF9kd3hwY3MtJXhcIiwgYXRvbWljX2luY19yZXR1cm4oXHUwMDI2aWQpKTtcbitcbitcdC8qXG4rXHQgKiBNRElPLWJ1cyBoZXJlIHNlcnZlcyBhcyBqdXN0IGEgYmFjay1lbmQgZW5naW5lIGFic3RyYWN0aW5nIG91dFxuK1x0ICogdGhlIE1ESU8gYW5kIE1DSS9BUEIzIElPIGludGVyZmFjZXMgdXRpbGl6ZWQgZm9yIHRoZSBSb2NrY2hpcCBEV1hQQ1MgQ1NSc1xuK1x0ICogYWNjZXNzLlxuK1x0ICovXG4rXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gY3JlYXRlIE1ESU8gYnVzXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cHhwY3MtXHUwMDNlYnVzID0gYnVzO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbitcdGludCByZXQ7XG4rXG4rXHRweHBjcyA9IHhwY3NfcmtfY3JlYXRlX2RhdGEocGRldik7XG4rXHRpZiAoSVNfRVJSKHB4cGNzKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocHhwY3MpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBYUENTIG1heSBiZSBhdHRhY2hlZCB0byBhIHBvd2VyIGRvbWFpbiAoZS5nLiBQRF9QSVBFKS4gVGhlIGRvbWFpblxuK1x0ICogbXVzdCBiZSBwb3dlcmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQyB3aWxsXG4rXHQgKiB0cmlnZ2VyIGEgc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnQgKFNFcnJvcikuXG4rXHQgKlxuK1x0ICogQWNjZXNzaW5nIHRoZSBYUENTIHJlZ2lzdGVycyBhbHNvIHJlcXVpcmVzIGEgVFggY2xvY2sgZnJvbSB0aGUgU2VyRGVzLFxuK1x0ICogd2hpY2ggaXMgbmVlZGVkIGZvciB0aGUgc29mdCByZXNldC5cbitcdCAqL1xuK1x0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X2luaXQocHhwY3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9uKHB4cGNzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB4cGNzX3JrX2luaXRfcmVzKHB4cGNzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB4cGNzX3JrX2luaXRfY2xrKHB4cGNzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB4cGNzX3JrX2luaXRfYnVzKHB4cGNzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeHBjc19ya19vZl9pZHNbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcInJvY2tjaGlwLHJrMzU2OC14cGNzXCIgfSxcbitcdHsgLyogc2VudGluZWwgKi8gfSxcbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhwY3Nfcmtfb2ZfaWRzKTtcbitcbitzdHJ1Y3QgZHdfeHBjcyAqeHBjc19ya19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuK3tcbitcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjc19ucDtcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbitcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuK1x0dTMyIHBvcnQ7XG4rXG4rXHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbitcbitcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCJyZWdcIiwgXHUwMDI2cG9ydCkpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZSgoaW50KXBvcnQpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcbitcdC8qIFRoZSBYUENTIHBkZXYgaXMgYXR0YWNoZWQgdG8gdGhlIHBhcmVudCBub2RlICovXG4rXHRwY3NfbnAgPSBvZl9nZXRfcGFyZW50KG5wKTtcbitcdGlmICghcGNzX25wKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbitcbitcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwY3NfbnApKSB7XG4rXHRcdG9mX25vZGVfcHV0KHBjc19ucCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuK1x0fVxuK1xuK1x0aWYgKCFvZl9tYXRjaF9ub2RlKHhwY3Nfcmtfb2ZfaWRzLCBwY3NfbnApKSB7XG4rXHRcdG9mX25vZGVfcHV0KHBjc19ucCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1x0fVxuK1xuK1x0cGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGNzX25wKTtcbitcdG9mX25vZGVfcHV0KHBjc19ucCk7XG4rXHRpZiAoIXBkZXYpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xuK1xuK1x0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldiwgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuK1x0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHR9XG4rXG4rXHRweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0aWYgKCFweHBjcyB8fCAhcHhwY3MtXHUwMDNlYnVzKSB7XG4rXHRcdGRldmljZV9saW5rX3JlbW92ZShkZXYsIFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdFx0cHV0X2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xuK1x0fVxuK1xuK1x0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXHUwMDNlYnVzLCAoaW50KXBvcnQpO1xuK1x0aWYgKElTX0VSUih4cGNzKSkge1xuK1x0XHRkZXZpY2VfbGlua19yZW1vdmUoZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRcdHB1dF9kZXZpY2UoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuK1x0XHRyZXR1cm4geHBjcztcbitcdH1cbitcbitcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHhwY3MtXHUwMDNlZWVlX211bHRfZmFjdCk7XG4rXHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdHJldHVybiB4cGNzO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTCh4cGNzX3JrX2NyZWF0ZSk7XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXG4rXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtXHUwMDNlY3NyX2Nsayk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcbitcdHJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtXHUwMDNlY3NyX2Nsayk7XG4rfVxuK1xuK3N0YXRpYyBERUZJTkVfUlVOVElNRV9ERVZfUE1fT1BTKHhwY3NfcmtfcG1fb3BzLFxuK1x0XHRcdCAgIHhwY3NfcmtfcG1fcnVudGltZV9zdXNwZW5kLFxuK1x0XHRcdCAgIHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUsXG4rXHRcdFx0ICAgTlVMTCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHBjc19ya19kcml2ZXIgPSB7XG4rXHQucHJvYmUgPSB4cGNzX3JrX3Byb2JlLFxuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWUgPSBcInJrX3hwY3MtZHd4cGNzXCIsXG4rXHRcdC5wbSA9IHBtX3B0cihcdTAwMjZ4cGNzX3JrX3BtX29wcyksXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IHhwY3Nfcmtfb2ZfaWRzLFxuK1x0fSxcbit9O1xuK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeHBjc19ya19kcml2ZXIpO1xuK1xuK01PRFVMRV9ERVNDUklQVElPTihcIlJvY2tjaGlwIFhQQ1MgcGxhdGZvcm0gZGV2aWNlIGRyaXZlclwiKTtcbitNT0RVTEVfQVVUSE9SKFwiQ29pYSBQcmFudCBcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXHUwMDNlXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmNcbmluZGV4IDAzMzdlMmJjYzAxMjUuLjhjMzg3NWI2OTg1YjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xuKysrIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmNcbkBAIC03NjEsNyArNzYxLDkgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcbiBcdCAqICAgIERXIHhQQ1MgdXNlZCB3aXRoIERXIEVRb1MgTUFDIGlzIGFsd2F5cyBNQUMgc2lkZSBTR01JSS5cbiBcdCAqIDQpIFZSX01JSV9ESUdfQ1RSTDEgQml0KDkpIFtNQUNfQVVUT19TV10gPSAxYiAoQXV0b21hdGljXG4gXHQgKiAgICBzcGVlZC9kdXBsZXggbW9kZSBjaGFuZ2UgYnkgSFcgYWZ0ZXIgU0dNSUkgQU4gY29tcGxldGUpXG4tXHQgKiA1KSBWUl9NSUlfTU1EX0NUUkwgQml0KDEyKSBbQU5fRU5BQkxFXSA9IDFiIChFbmFibGUgU0dNSUkgQU4pXG4rXHQgKiA1KSBWUl9NSUlfQU5fSU5UUl9TVFMgPSAweDAgKENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzKVxuK1x0ICogNikgVlJfTUlJX01NRF9DVFJMIEJpdCgxMikgW0FOX0VOQUJMRV0gPSAxYiAoRW5hYmxlIFNHTUlJIEFOKVxuK1x0ICogICAgVlJfTUlJX01NRF9DVFJMIEJpdCg5KSBbQU5fUkVTVEFSVF0gPSAxYiAoUmVzdGFydCBTR01JSSBBTilcbiBcdCAqXG4gXHQgKiBOb3RlIHRoYXQgVlJfTUlJX01NRF9DVFJMIGlzIE1JSV9CTUNSLlxuIFx0ICpcbkBAIC03NjksNyArNzcxLDE0IEBAIHN0YXRpYyBpbnQgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsXG4gXHQgKlx0IFNSX01JSV9BTl9BRFYuIE1BQyBzaWRlIFNHTUlJIHJlY2VpdmVzIEFOIFR4IENvbmZpZyBmcm9tXG4gXHQgKlx0IFBIWSBhYm91dCB0aGUgbGluayBzdGF0ZSBjaGFuZ2UgYWZ0ZXIgQzI4IEFOIGlzIGNvbXBsZXRlZFxuIFx0ICpcdCBiZXR3ZWVuIFBIWSBhbmQgTGluayBQYXJ0bmVyLiBUaGVyZSBpcyBhbHNvIG5vIG5lZWQgdG9cbi1cdCAqXHQgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSS5cbitcdCAqXHQgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSSBvbiBtb3N0IGRldmljZXMuXG4rXHQgKlxuK1x0ICogTm90ZTogV2hpbGUgdGhlIERlc2lnbldhcmUgZGF0YWJvb2sgc3RhdGVzIHRoYXQgQU4gcmVzdGFydCBpc1xuK1x0ICpcdCBub3QgbmVlZGVkIGZvciBNQUMgc2lkZSBTR01JSSwgc29tZSBpbXBsZW1lbnRhdGlvbnMgKGUuZy5cbitcdCAqXHQgUm9ja2NoaXAgUkszNTY4KSBleGhpYml0IGEgdGltaW5nIHF1aXJrIHdoZW4gaW50ZWdyYXRlZCB3aXRoXG4rXHQgKlx0IHBoeWxpbmsgYW5kIGRvIG5vdCByZXN0YXJ0IEFOIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgbGlua1xuK1x0ICpcdCBjb21lcyBiYWNrIHVwLiBBbiBleHBsaWNpdCBBTiByZXN0YXJ0IGlzIHJlcXVpcmVkIG9uIHRob3NlXG4rXHQgKlx0IHBhcnRzIHRvIHJlY292ZXIgdGhlIGxpbmsgYWZ0ZXIgYSBkaXNjb25uZWN0LlxuIFx0ICovXG4gXHRtZGlvX2N0cmwgPSB4cGNzX3JlYWQoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSKTtcbiBcdGlmIChtZGlvX2N0cmwgXHUwMDNjIDApXG5AQCAtODE2LDkgKzgyNSwxNCBAQCBzdGF0aWMgaW50IHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdC8qIENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzICovXG4rXHRyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdGlmIChuZWdfbW9kZSA9PSBQSFlMSU5LX1BDU19ORUdfSU5CQU5EX0VOQUJMRUQpXG4gXHRcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSLFxuLVx0XHRcdFx0IG1kaW9fY3RybCB8IEJNQ1JfQU5FTkFCTEUpO1xuK1x0XHRcdFx0IG1kaW9fY3RybCB8IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xMDkzLDkgKzExMDcsMTggQEAgc3RhdGljIGludCB4cGNzX2dldF9zdGF0ZV9jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0LyogQ2xlYXIgQU4gY29tcGxldGUgc3RhdHVzIG9yIGludGVycnVwdCAqL1xuLVx0aWYgKHN0YXRlLVx1MDAzZWFuX2NvbXBsZXRlKVxuLVx0XHR4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApO1xuK1x0aWYgKHN0YXRlLVx1MDAzZWFuX2NvbXBsZXRlKSB7XG4rXHRcdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cbitcdFx0cmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBJbml0aWF0ZSB0aGUgbmV4dCByb3VuZCBvZiBBTiAqL1xuK1x0XHRyZXQgPSB4cGNzX21vZGlmeSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsIEJNQ1JfQU5SRVNUQVJULFxuK1x0XHRcdFx0ICBCTUNSX0FOUkVTVEFSVCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuYyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXG5pbmRleCA3ODQzMzU2YTRkZDQ3Li43Yjg2N2U3NTIwMDY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNcbisrKyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXG5AQCAtMTg2LDYgKzE4Niw3IEBAIHN0cnVjdCByb2NrY2hpcF9jb21icGh5X2dyZmNmZyB7XG4gXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV94cGNzX3BoeV9yZWFkeTtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3BjaWUxbDBfc2VsO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfcGNpZTFsMV9zZWw7XG4rXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9zZ21paV9tYWNfc2VsO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMF9wb3J0X2VuO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMV9wb3J0X2VuO1xuIH07XG5AQCAtMjEyLDYgKzIxMyw3IEBAIHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYge1xuIFx0Ym9vbCBlbmFibGVfc3NjO1xuIFx0Ym9vbCBleHRfcmVmY2xrO1xuIFx0c3RydWN0IGNsayAqcmVmY2xrO1xuK1x0dTMyIHNnbWlpX21hY19zZWw7XG4gfTtcbiBcbiBzdGF0aWMgdm9pZCByb2NrY2hpcF9jb21icGh5X3VwZGF0ZWwoc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiAqcHJpdixcbkBAIC0zNzUsNiArMzc3LDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9jb21icGh5X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlcbiBcbiBcdHByaXYtXHUwMDNlZXh0X3JlZmNsayA9IGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KGRldiwgXCJyb2NrY2hpcCxleHQtcmVmY2xrXCIpO1xuIFxuK1x0cHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsID0gMTtcbitcdGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFwicm9ja2NoaXAsc2dtaWktbWFjLXNlbFwiLCBcdTAwMjZwcml2LVx1MDAzZXNnbWlpX21hY19zZWwpO1xuK1xuIFx0cHJpdi1cdTAwM2VwaHlfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9leGNsdXNpdmUoZGV2LCBcInBoeVwiKTtcbiBcdC8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi9cbiBcdGlmIChQVFJfRVJSKHByaXYtXHUwMDNlcGh5X3JzdCkgPT0gLUVOT0VOVClcbkBAIC04NzMsNiArODc4LDggQEAgc3RhdGljIGludCByazM1NjhfY29tYnBoeV9jZmcoc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiAqcHJpdilcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIFBIWV9UWVBFX1NHTUlJOlxuK1x0XHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXHUwMDNlcGlwZV9ncmYsIFx1MDAyNmNmZy1cdTAwM2VwaXBlX3NnbWlpX21hY19zZWwsXG4rXHRcdFx0XHRcdCAgICAgcHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsIFx1MDAzZSAwKTtcbiBcdFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVx1MDAzZXBpcGVfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV94cGNzX3BoeV9yZWFkeSwgdHJ1ZSk7XG4gXHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaHlfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV9waHltb2RlX3NlbCwgdHJ1ZSk7XG4gXHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaHlfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV9zZWxfcXNnbWlpLCB0cnVlKTtcbkBAIC05ODQsNiArOTkxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByb2NrY2hpcF9jb21icGh5X2dyZmNmZyByazM1NjhfY29tYnBoeV9ncmZjZmdzID0ge1xuIFx0LmNvbjNfZm9yX3NhdGFcdFx0PSB7IDB4MDAwYywgMTUsIDAsIDB4MDAsIDB4NDQwNyB9LFxuIFx0LyogcGlwZS1ncmYgKi9cbiBcdC5waXBlX2NvbjBfZm9yX3NhdGFcdD0geyAweDAwMDAsIDE1LCAwLCAweDAwLCAweDIyMjAgfSxcbitcdC5waXBlX3NnbWlpX21hY19zZWxcdD0geyAweDAwNDAsIDEsIDEsIDB4MDAsIDB4MDEgfSxcbiBcdC5waXBlX3hwY3NfcGh5X3JlYWR5XHQ9IHsgMHgwMDQwLCAyLCAyLCAweDAwLCAweDAxIH0sXG4gXHQudTNvdGcwX3BvcnRfZW5cdFx0PSB7IDB4MDEwNCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXG4gXHQudTNvdGcxX3BvcnRfZW5cdFx0PSB7IDB4MDE0NCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaCBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yODcyM2Q1YmQ3NWNjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXG5AQCAtMCwwICsxLDExIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisjaWZuZGVmIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSFxuKyNkZWZpbmUgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNzL3Bjcy14cGNzLmhcdTAwM2VcbitcbitzdHJ1Y3QgZHdfeHBjcyAqeHBjc19ya19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbitcbisjZW5kaWYgLyogX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNTozNy4yMzAxMTc3MzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTE3NTYwMjU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gaXRzIGZlYXNpYmlsaXR5IGZvciBmdXp6aW5nLCBnaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUgb2YgY29uY2Vybi5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gTG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIHdpZGUgcmFuZ2U6IGRldmljZSB0cmVlIGJpbmRpbmdzIChSb2NrY2hpcCBhbmQgcG90ZW50aWFsbHkgZ2VuZXJpYyksIGRvY3VtZW50YXRpb24gdXBkYXRlcyAoTUFJTlRBSU5FUlMpLCBEVFMgZmlsZXMgKFJLMzU2OCksIGRyaXZlciBjb2RlIChzdG1tYWMsIFJvY2tjaGlwLXNwZWNpZmljIGR3bWFjLCBQQ1MgZHJpdmVycywgYW5kIGEgUm9ja2NoaXAgY29tYnBoeSksIEtjb25maWcgYW5kIE1ha2VmaWxlcyByZWxhdGVkIHRvIFBDUyBhbmQgc3RtbWFjLiBUaGlzIHN1Z2dlc3RzIGNoYW5nZXMgcmVsYXRlZCB0byBFdGhlcm5ldCBjb25uZWN0aXZpdHksIHBvc3NpYmx5IGluY2x1ZGluZyBhIG5ldyBSb2NrY2hpcCBYUENTIHBsYXRmb3JtLlxuXG5UaGUgZmlsZXMgdGhhdCBqdW1wIG91dCBhcmUgdGhlIGBkd21hYy1pbnRlbC5jYCBmaWxlIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGBwY3MteHBjcy1yay5jYCBmaWxlLCBhbG9uZyB3aXRoIHJlbGF0ZWQgS2NvbmZpZyBhbmQgaGVhZGVyIGZpbGVzLiBJdCBsb29rcyBsaWtlIHdlIGFyZSBhZGRpbmcgc3VwcG9ydCBmb3IgYSBSb2NrY2hpcCBYUENTIHRvIHN0bW1hYyB2aWEgdGhlIGludGVsIG1nYmUgbW9kdWxlLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqcmVhY2hhYmlsaXR5Ki4gQ2FuIHRoaXMgY29kZSBiZSBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRT8gVGhpcyBpcyBwYXJhbW91bnQgZm9yIGZ1enppbmcgZWZmZWN0aXZlbmVzcy4gU3BlY2lmaWNhbGx5LCB0aGUgaW5zdHJ1Y3Rpb24ncyBzZWN0aW9uIDIgb3V0bGluZXMgdGhhdCBjb2RlIE1VU1QgTk9UIGJlIGZ1enplZCBpZiBpdCdzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiB0aGVzZSBlbnZpcm9ubWVudHMuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCBgZHdtYWMtaW50ZWwuY2AuIElzIHRoZSBjb2RlIGluIHRoaXMgZmlsZSByZWFjaGFibGUgb24gYW1kNjQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSXMgaXQgc3RyaWN0bHkgZm9yIHBoeXNpY2FsIGhhcmR3YXJlPyBJIG5lZWQgdG8ga25vdyBpZiBJbnRlbCBFdGhlcm5ldC9QQ0kgaXMgZW11bGF0ZWQgaW4gUUVNVSwgb3IgaWYgYHN0bW1hY2AgaXMgdHlwaWNhbGx5IHRpZWQgdG8gc3BlY2lmaWMgU29DIGhhcmR3YXJlLiBEb2VzIFFFTVUgZW11bGF0ZSB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGBkd21hYy1pbnRlbGAgb3IgYHN0bW1hY2Agc3RhY2s/XG5cblRoZSBpbnN0cnVjdGlvbiBzZXQgaGlnaGxpZ2h0cyB0aGlzIGFzIGEgbmVnYXRpdmUgY3JpdGVyaWEgZm9yIGZ1enppbmc6IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIG9yIHRob3NlIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gQWxzbyBpbXBvcnRhbnQgYXJlIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCByZWx5IG9uIGEgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHVuYmluZGluZy4gQWRkaXRpb25hbGx5LCB0aGlzIGlzIGxpa2VseSB0byBhcHBseSB0byBjb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cblNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGR3bWFjLWludGVsYCBvciBgc3RtbWFjYCAqY2FuKiBiZSByZWFjaGVkIGluIGEgUUVNVSBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGdyZXAgdGhlIGtlcm5lbCBzb3VyY2VzIHRvIHVuZGVyc3RhbmQgdGhlIHR5cGljYWwgdXNlIGNhc2VzIGZvciB0aGVzZSBkcml2ZXJzLiBJZiBpdCdzIHRpZ2h0bHkgY291cGxlZCB0byBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0J3Mgbm90IGVtdWxhdGVkLCB0aGVuIGZ1enppbmcgd291bGQgYmUgYSB3YXN0ZSBvZiB0aW1lIGFuZCByZXNvdXJjZXMgYW5kIHRoaXMgcGF0Y2ggd291bGQgYmUgbm9uLXdvcnRod2hpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDcxLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI2OjQ2LjQwNTcyMjY5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzOTIwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTU9EVUxFX0RFVklDRV9UQUJMRS4qcGNpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xNDMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NTAtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0NTE6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGludGVsX2V0aF9wY2lfaWRfdGFibGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTQ1Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6MjY6NDYuNTg4MTE5NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NjE0MzY4NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSW50ZWwgRXRoZXJuZXQgUENJIElEIFRhYmxlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBQQ0kgZGV2aWNlIElEcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBJbnRlbCBFdGhlcm5ldCBjb250cm9sbGVycy4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGUgYGludGVsX2V0aF9wY2lfaWRfdGFibGVgIGRhdGEgc3RydWN0dXJlLiBUaGF0IHRhYmxlIGlzIGRlZmluZWQgaW4gYGR3bWFjLWludGVsLmNgLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGhlYWQuIEkgc3VzcGVjdCB0aGlzIHRhYmxlIGhvbGRzIHRoZSBrZXkgdG8gaG93IHRoZSBkcml2ZXIgcmVjb2duaXplcyBhbmQgc3VwcG9ydHMgZGlmZmVyZW50IEludGVsIEV0aGVybmV0IGhhcmR3YXJlLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBpdCdzIHN0cnVjdHVyZWQsIHdoYXQgZmllbGRzIGFyZSBpbmNsdWRlZCAoVmVuZG9yIElELCBEZXZpY2UgSUQsIFN1YnN5c3RlbSBJRHMsIGV0Yy4pLCBhbmQgaG93IHRoZSBkcml2ZXIgdXNlcyB0aGlzIGluZm9ybWF0aW9uIGR1cmluZyBkZXZpY2UgcHJvYmUuIEknbSBsb29raW5nIGZvciB0aGUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIGlmIGEgcGFydGljdWxhciBQQ0kgZGV2aWNlIGlzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgYW5kIGhvdyBpdCB0aGVuIGFzc29jaWF0ZXMgdGhlIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIGFuZCBzZXR1cCByb3V0aW5lcy4gTXkgZ29hbCBpcyBhIHNvbGlkIGdyYXNwIG9mIHRoZSBkZXZpY2UgbWF0Y2hpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NzIsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNjo1My4yMDI0OTIwNjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDMwOlxcdFxcbjE0MzE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGludGVsX2V0aF9wY2lfaWRfdGFibGVbXSA9IHtcXG4xNDMyOlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBRVUFSSywgXFx1MDAyNnF1YXJrX2luZm8pIH0sXFxuMTQzMzpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1JHTUlJMUcsIFxcdTAwMjZlaGxfcmdtaWkxZ19pbmZvKSB9LFxcbjE0MzQ6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9TR01JSTFHLCBcXHUwMDI2ZWhsX3NnbWlpMWdfaW5mbykgfSxcXG4xNDM1OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfU0dNSUkyRzUsIFxcdTAwMjZlaGxfc2dtaWkxZ19pbmZvKSB9LFxcbjE0MzY6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UwX1JHTUlJMUcsIFxcdTAwMjZlaGxfcHNlMF9yZ21paTFnX2luZm8pIH0sXFxuMTQzNzpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTBfU0dNSUkxRywgXFx1MDAyNmVobF9wc2UwX3NnbWlpMWdfaW5mbykgfSxcXG4xNDM4OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMF9TR01JSTJHNSwgXFx1MDAyNmVobF9wc2UwX3NnbWlpMWdfaW5mbykgfSxcXG4xNDM5OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMV9SR01JSTFHLCBcXHUwMDI2ZWhsX3BzZTFfcmdtaWkxZ19pbmZvKSB9LFxcbjE0NDA6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UxX1NHTUlJMUcsIFxcdTAwMjZlaGxfcHNlMV9zZ21paTFnX2luZm8pIH0sXFxuMTQ0MTpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTFfU0dNSUkyRzUsIFxcdTAwMjZlaGxfcHNlMV9zZ21paTFnX2luZm8pIH0sXFxuMTQ0MjpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMX1NHTUlJMUcsIFxcdTAwMjZ0Z2xfc2dtaWkxZ19waHkwX2luZm8pIH0sXFxuMTQ0MzpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMSF9TR01JSTFHXzAsIFxcdTAwMjZ0Z2xfc2dtaWkxZ19waHkwX2luZm8pIH0sXFxuMTQ0NDpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMSF9TR01JSTFHXzEsIFxcdTAwMjZ0Z2xfc2dtaWkxZ19waHkxX2luZm8pIH0sXFxuMTQ0NTpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgQURMU19TR01JSTFHXzAsIFxcdTAwMjZhZGxzX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxcbjE0NDY6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEFETFNfU0dNSUkxR18xLCBcXHUwMDI2YWRsc19zZ21paTFnX3BoeTFfaW5mbykgfSxcXG4xNDQ3OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBBRExOX1NHTUlJMUcsIFxcdTAwMjZhZGxuX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxcbjE0NDg6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFJQTFBfU0dNSUkxRywgXFx1MDAyNmFkbG5fc2dtaWkxZ19waHkwX2luZm8pIH0sXFxuMTQ0OTpcXHRcXHR7fVxcbjE0NTA6XFx0fTtcXG4xNDUxOlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlKTtcXG4xNDUyOlxcdFxcbjE0NTM6XFx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGludGVsX2V0aF9wY2lfZHJpdmVyID0ge1xcbjE0NTQ6XFx0XFx0Lm5hbWUgPSBcXFwiaW50ZWwtZXRoLXBjaVxcXCIsXFxuMTQ1NTpcXHRcXHQuaWRfdGFibGUgPSBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlLFxcbjE0NTY6XFx0XFx0LnByb2JlID0gaW50ZWxfZXRoX3BjaV9wcm9iZSxcXG4xNDU3OlxcdFxcdC5yZW1vdmUgPSBpbnRlbF9ldGhfcGNpX3JlbW92ZSxcXG4xNDU4OlxcdFxcdC5kcml2ZXIgICAgICAgICA9IHtcXG4xNDU5OlxcdFxcdFxcdC5wbSAgICAgPSBcXHUwMDI2c3RtbWFjX3NpbXBsZV9wbV9vcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI2OjUzLjIwMjYwMzMxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3Mjg3ODEzMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIERyaXZlciBDb21wYXRpYmlsaXR5IG9uIGFtZDY0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGR3bWFjLWludGVsLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgc2VlbXMgc3BlY2lmaWMgdG8gSW50ZWwgUXVhcmssIEVsa2hhcnQgTGFrZSwgVGlnZXIgTGFrZSwgQWxkZXIgTGFrZSwgYW5kIFJhcHRvciBMYWtlIGludGVncmF0ZWQgTUFDcy4gUmlnaHQsIHBoeXNpY2FsIEludGVsIFBDSSBkZXZpY2VzIG9uIHRob3NlIHNwZWNpZmljIEludGVsIFNvQ3MuIEJ1dCB0aGVuIEkgc3RvcCBhbmQgdGhpbmssIFwiRG9lcyBRRU1VIGFjdHVhbGx5IGVtdWxhdGUgYW4gSW50ZWwgUXVhcmsvRUhML1RHTCBzdG1tYWMgRXRoZXJuZXQgZGV2aWNlP1wiIEkgZG9uJ3QgKnRoaW5rKiBzbywgYnV0IEkgbmVlZCB0byBiZSBzdXJlLlxuXG5MZXQncyBjaGVjayB3aGF0IGVsc2UgaXMgYmVpbmcgcmVmZXJlbmNlZC4gSSBzZWUgZHJpdmVycyBmb3IgUm9ja2NoaXA6IGBwY3MteHBjcy1yay5jYCwgYGR3bWFjLXJrLmNgLCBhbmQgYHBoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jYCwgYXMgd2VsbCBhcyBkZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgYXNzb2NpYXRlZCBhcmNoaXRlY3R1cmUgZmlsZXMuIFRoZXNlIGFyZSBhbGwgY2xlYXJseSBmb3IgUm9ja2NoaXAgU29Dcywgc3BlY2lmaWNhbGx5IHRoZSBSSzM1NjgsIGFuIEFSTTY0IHBsYXRmb3JtLiBIb3dldmVyLCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCEgVGhpcyBtZWFucyBgYXJjaC9hcm02NC8uLi5gIGlzICpub3QqIGNvbXBpbGVkIG9yIHVzZWQgb24gdGhlIGFtZDY0IGJ1aWxkIEknbSB3b3JraW5nIHdpdGguXG5cbkkgZHJpbGwgZG93biBmdXJ0aGVyOiBgZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBSb2NrY2hpcCBSSzM1NnggU29DcywgYW5kIHJlcXVpcmVzIE9wZW5GaXJtd2FyZSBkZXZpY2UgdHJlZSBhbmQgUm9ja2NoaXAgaGFyZHdhcmUuIEV2ZW4gaWYgYENPTVBJTEVfVEVTVGAgZW5hYmxlcyBpdCwgaXQncyBtYXRjaGluZyBgcm9ja2NoaXAscmszNTY4LXhwY3NgIHdoaWNoICp3b24ndCogaW5zdGFudGlhdGUgb24gYW1kNjQgaW4gUUVNVS4gU2FtZSBnb2VzIGZvciBgZHdtYWMtcmsuY2AsIGBwaHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY2AsIGBkd21hYy1yZW5lc2FzLWdiZXRoLmNgLCBgZHdtYWMtcnpuMS5jYCwgYW5kIGBkd21hYy1zb2NmcGdhLmNgLiBBbGwgcGxhdGZvcm0gZHJpdmVycywgdGFyZ2V0aW5nIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IgaGFyZHdhcmUgdGhhdCBhcmUgbm90IHJlbGV2YW50IHRvIG15IGN1cnJlbnQgYW1kNjQgUUVNVSBzZXR1cC5cblxuU28sIGJhY2sgdG8gdGhlIHN0bW1hYyBxdWVzdGlvbjogd2hhdCBhYm91dCBgc3RtbWFjX21kaW8uY2AsIGBwY3MteHBjcy5jYCwgYW5kIGBkd21hYy1pbnRlbC5jYD8gSSBoYXZlIHRvIGxvb2sgaW50byBgc3RtbWFjX21kaW8uY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSB2aXJ0dWFsIG9yIGVtdWxhdGVkIGRldmljZSBpbiBpdC4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgc3RtbWFjYCBkcml2ZXJzIGFuZCBzZWUgaWYgYW55IGFyZSBlbXVsYXRlZCBieSBRRU1VLCBvciBwcm92aWRlIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIG15IGFuYWx5c2lzLiBJIHdpbGwgbm93IHNlYXJjaCB0aGUga2VybmVsIHRyZWUgZm9yIGRyaXZlcnMgdGhhdCB1c2Ugc3RtbWFjLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE5MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI3OjEwLjQ5MDQxOTM2N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUwMTY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfZHZyX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jPTI4Mz1zdGF0aWMgaW50IGR3Y19ldGhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM6MzMwOlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jLTMzMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jPTQyPXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BsYXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYy0xMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jOjExODpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExOS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMjk5PXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM3Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzNzc6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNzgtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jPTM3ND1zdGF0aWMgaW50IGlwcTgwNnhfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jLTQ4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM6NDgzOlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jLTQ4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NDk4PXN0YXRpYyBpbnQgbG9vbmdzb25fZHdtYWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTYyOlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYz00Mj1zdGF0aWMgaW50IGxwYzE4eHhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM6Njg6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmMtNjktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYz01OTk9c3RhdGljIGludCBtZWRpYXRla19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYzo2NDI6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jPTQ3PXN0YXRpYyBpbnQgbWVzb242X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jLTcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM6NzM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jLTc0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYz0zODI9c3RhdGljIGludCBtZXNvbjhiX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYzo0NjQ6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDY1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jPTI5Mz1zdGF0aWMgaW50IG1vdG9yY29tbV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjM1OTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNjAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jPTUxPXN0YXRpYyBpbnQgcnpuMV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTcwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzo3MTpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNzItXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jPTM1PXN0YXRpYyBpbnQgc29waGdvX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYy02NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYzo2NTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYz0xNDc9c3RhdGljIGludCBzcGFjZW1pdF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYzoyMDc6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmMtMjA4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmM9OTA9c3RhdGljIGludCBzdGFyZml2ZV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYzoxNTM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jPTUyNT1zdGF0aWMgaW50IHN0bTMyX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jOjU3OTpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy01ODAtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM9MTEwNT1zdGF0aWMgaW50IHN1bjhpX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjAyOlxcdC8qIHRoZSBNQUMgaXMgcnVudGltZSBzdXNwZW5kZWQgYWZ0ZXIgc3RtbWFjX2R2cl9wcm9iZSgpLCBzbyB3ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMy1cXHQgKiBuZWVkIHRvIGVuc3VyZSB0aGUgTUFDIHJlc3VtZSBiYWNrIGJlZm9yZSBvdGhlciBvcGVyYXRpb25zIHN1Y2hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwOC1cXHQvKiBUaGUgbXV4IG11c3QgYmUgcmVnaXN0ZXJlZCBhZnRlciBwYXJlbnQgTURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM6MTIwOTpcXHQgKiBzbyBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMTAtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jPTIxND1zdGF0aWMgaW50IHRlZ3JhX21nYmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM6Mzc2OlxcdGVyciA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzctXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jPTIwNT1zdGF0aWMgaW50IHZpc2NvbnRpX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYzoyMzc6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTE9dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxMjppbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDEzLVxcdFxcdCAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzgxND1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGxhdF9kYXRfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzgxNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc4MTY6c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzgxNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTE5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODEyMDogKiBzdG1tYWNfZHZyX3Byb2JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTIxLSAqIEBkZXY6IGRldmljZSBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMjgtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTI5OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMzAtXFx0XFx0ICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODE0MDpcXHRyZXQgPSBfX3N0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNDEtXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBwbGF0X2RhdC1cXHUwMDNlZXhpdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODE0NS19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTQ2OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODE0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTgzOlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM9ODQ2PWludCBzdG1tYWNfcGx0ZnJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYzo4NTU6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04NTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNzoxMC41Mzk5Mjk0MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ1NDczOTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRXRoZXJuZXQgRGV2aWNlIERyaXZlcnMgYW5kIFFFTVUgRW11bGF0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBsaXN0IG9mIEV0aGVybmV0IGRyaXZlcnMgYW5kIGRldmljZXMuIEkgc2VlIGEgd2hvbGUgc2xldyBvZiB0aGVtOiBgZHdtYWMtZHdjLXFvcy1ldGhgLCBgZHdtYWMtaW50ZWwtcGxhdGAsIGBkd21hYy1pbnRlbGAsIGBkd21hYy1pcHE4MDZ4YCwgYGR3bWFjLWxvb25nc29uYCwgYW5kIHRoZSBsaXN0IGdvZXMgb24uICBJdCdzIGNsZWFyLCB0aGV5J3JlIGFsbCBoYXJkd2FyZSBNQUMgY29udHJvbGxlcnMuICBTb0MgcGxhdGZvcm0gZGV2aWNlcywgbW9zdGx5LCBvciBwaHlzaWNhbCBQQ0kgZGV2aWNlcy4gIE1ha2VzIHNlbnNlLCByaWdodD9cblxuQnV0IHRoZW4gSSBoYWQgYSB0aG91Z2h0LiBXaGF0IGFib3V0IFFFTVU/IERvZXMgUUVNVSwgdGhlIHN0YW5kYXJkIHg4Nl82NCB2ZXJzaW9uLCBlbXVsYXRlIGFueSBvZiB0aGVzZSBkcml2ZXJzIOKAkyBzb21ldGhpbmcgbGlrZSBgc3RtbWFjYCwgYGR3bWFjLWludGVsYCwgb3IgYW55IG9mIHRob3NlIERXIFhQQ1MgZGV2aWNlcz8gIExldCdzIGNoZWNrIHdoYXQgbmV0d29yayBkZXZpY2VzIFFFTVUgKmRvZXMqIGVtdWxhdGU6IGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgZXRjLiAgQWgsIG5vIHNpZ24gb2YgdGhlIFN5bm9wc3lzIG9yIERlc2lnbldhcmUgZGV2aWNlcyEgIEFuZCwgdGhpbmtpbmcgYWJvdXQgaXQsIGV2ZW4gb24gQVJNIHRhcmdldHMsIFFFTVUgZW11bGF0ZXMgb3RoZXIgdGhpbmdzLiAgQnV0IHdlJ3JlIGZvY3VzZWQgb24geDg2XzY0IGhlcmUuIE5vLCBubyBgc3RtbWFjYCBvciBgZHdtYWNgIGVtdWxhdGlvbiB0byBiZSBmb3VuZCFcblxuQWxyaWdodCwgbmV4dCBzdGVwOiBsZXQncyB2ZXJpZnkgdGhlcmUgaXNuJ3Qgc29tZSBzb3J0IG9mIHZpcnR1YWwgYnVzIG9yIHNvZnR3YXJlIGRldmljZSB1c2luZyB0aGVzZSBkcml2ZXJzIHVuZGVyIHRoZSBob29kLiBUaGluZ3MgbGlrZSBVU0Igb3IgbmV0d29yayBkZXZpY2UgZW11bGF0aW9uLCB0aGF0IG1pZ2h0IGFic3RyYWN0IHRoZSB1bmRlcmx5aW5nIGNvbnRyb2xsZXIuIE9rYXksIHNvIEkgc2hvdWxkIGxvb2sgaW50byB3aGF0IHVzZXMgYHBjcy14cGNzYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTU4MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNzoyMC45OTQ2NzE2MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzM4MjQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4cGNzX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0zMjE9c3RhdGljIGludCBrc3o5NDc3X3Bjc19jcmVhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0NS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozNDY6XFx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYoYnVzLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDctXFx0aWYgKElTX0VSUihwY3MpKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDExLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQxMjpcXHRcXHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihidXMsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQxMy1cXHRcXHRpZiAoSVNfRVJSKHBjcykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jPTE5Nz1pbnQgZmJuaWNfcGh5bGlua19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTIwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYzoyMDU6XFx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYoZmJkLVxcdTAwM2VtZGlvX2J1cywgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMjA2LVxcdGlmIChJU19FUlIocGNzKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz02MDY9c3RhdGljIGludCBpbnRlbF9tZ2JlX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE1LVxcdFxcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXFxcInBjcy1oYW5kbGVcXFwiLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjYxNjpcXHRcXHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE3LVxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MTktXFx0XFx0YWRkciA9IGZmcyhwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VwY3NfbWFzaykgLSAxO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NjIwOlxcdFxcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtXFx1MDAzZW1paSwgYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MjEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0xMjY9c3RhdGljIGludCB0eGdiZV9tZGlvX3Bjc19pbml0KHN0cnVjdCB0eGdiZSAqdHhnYmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE1NDpcXHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihtaWlfYnVzLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1NS1cXHRpZiAoSVNfRVJSKHBjcykpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYz00Nzg9c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jLTUyNi1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYzo1Mjc6XFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXFx1MDAzZWJ1cywgKGludClwb3J0KTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYy01MjgtXFx0aWYgKElTX0VSUih4cGNzKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM9MTUxMj1zdGF0aWMgaW50IHhwY3NfaWRlbnRpZnkoc3RydWN0IGR3X3hwY3MgKnhwY3MpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTMxLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE1MzI6c3RhdGljIHN0cnVjdCBkd194cGNzICp4cGNzX2NyZWF0ZV9kYXRhKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jPTE1ODQ9c3RhdGljIGludCB4cGNzX2luaXRfaWQoc3RydWN0IGR3X3hwY3MgKnhwY3MpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTk4LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE1OTk6c3RhdGljIHN0cnVjdCBkd194cGNzICp4cGNzX2NyZWF0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjAzLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2MDQ6XFx0eHBjcyA9IHhwY3NfY3JlYXRlX2RhdGEobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYwNS1cXHRpZiAoSVNfRVJSKHhwY3MpKVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYzNS0vKipcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjM2OiAqIHhwY3NfY3JlYXRlX21kaW9kZXYoKSAtIGNyZWF0ZSBhIERXIHhQQ1MgaW5zdGFuY2Ugd2l0aCB0aGUgTURJTyBAYWRkclxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MzctICogQGJ1czogcG9pbnRlciB0byB0aGUgTURJTy1idXMgZGVzY3JpcHRvciBmb3IgdGhlIGRldmljZSB0byBiZSBsb29rZWQgYXRcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NDMtICovXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY0NDpzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjQ1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NTItXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY1MzpcXHR4cGNzID0geHBjc19jcmVhdGUobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1NC1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjU1OlxcdC8qIHhwY3NfY3JlYXRlKCkgaGFzIHRha2VuIGEgcmVmY291bnQgb24gdGhlIG1kaW9kZXYgaWYgaXQgd2FzXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY1NjpcXHQgKiBzdWNjZXNzZnVsLiBJZiB4cGNzX2NyZWF0ZSgpIGZhaWxzLCB0aGlzIHdpbGwgZnJlZSB0aGUgbWRpb1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NTctXFx0ICogZGV2aWNlIGhlcmUuIEluIGFueSBjYXNlLCB3ZSBkb24ndCBuZWVkIHRvIGhvbGQgb3VyIHJlZmVyZW5jZVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY2NC19XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY2NTpFWFBPUlRfU1lNQk9MX0dQTCh4cGNzX2NyZWF0ZV9tZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY2LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2Njc6c3RydWN0IHBoeWxpbmtfcGNzICp4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NzAtXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY3MTpcXHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2RldihidXMsIGFkZHIpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NzItXFx0aWYgKElTX0VSUih4cGNzKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NzYtfVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2Nzc6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfcGNzX21kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NzgtXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY3OS0vKipcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjgwOiAqIHhwY3NfY3JlYXRlX2Z3bm9kZSgpIC0gQ3JlYXRlIGEgRFcgeFBDUyBpbnN0YW5jZSBmcm9tIEBmd25vZGVcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjgxLSAqIEBmd25vZGU6IGZ3bm9kZSBoYW5kbGUgcG9pbmluZyB0byB0aGUgRFcgWFBDUyBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2ODgtICovXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY4OTpzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzAwLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE3MDE6XFx0eHBjcyA9IHhwY3NfY3JlYXRlKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE3MDItXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTcwMzpcXHQvKiB4cGNzX2NyZWF0ZSgpIGhhcyB0YWtlbiBhIHJlZmNvdW50IG9uIHRoZSBtZGlvZGV2IGlmIGl0IHdhc1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE3MDQ6XFx0ICogc3VjY2Vzc2Z1bC4gSWYgeHBjc19jcmVhdGUoKSBmYWlscywgdGhpcyB3aWxsIGZyZWUgdGhlIG1kaW9cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzA1LVxcdCAqIGRldmljZSBoZXJlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3QgbmVlZCB0byBob2xkIG91ciByZWZlcmVuY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE3MTItfVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE3MTM6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfZndub2RlKTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNzoyMS44NjIwNjI1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDY1MDE5NDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBYUENTIERyaXZlciBNb2RpZmljYXRpb25zIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gbG9va2luZyBhdCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIGB4cGNzX2NyZWF0ZSpgIGZ1bmN0aW9ucywgYW5kIG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCB3ZSdyZSBsaWtlbHkgKm5vdCogZ29pbmcgdG8gYmUgYWJsZSB0byBmdXp6IHRoaXMgZWZmZWN0aXZlbHkgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGUga2V5IGlzIHRvIHNlZSBpZiBhbnkgb2YgdGhlc2UgY2hhbmdlcyBwYXNzIHRoZSAqbmVnYXRpdmUqIGNyaXRlcmlhLlxuXG5JJ3ZlIGdvdCBhIGxpc3Qgb2YgY2FsbGVycyBvZiBgeHBjc19jcmVhdGUqYDoga3N6OTQ3Nywgc2phMTEwNSwgZmJuaWMsIGR3bWFjLWludGVsLCB0eGdiZSwgYW5kIHBjcy14cGNzLXJrLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhlIHBhdHRlcm47IG5vbmUgb2YgdGhlbSBhcmUgZW11bGF0ZWQgYnkgUUVNVSwgdGhleSBhcmUgYWxsIGRlcGVuZGVudCBvbiBlaXRoZXIgcGh5c2ljYWwgU29DcyBvciBzcGVjaWZpYyBQQ0llIGNhcmRzIHRoYXQgYXJlIG5vdCBzdGFuZGFyZCBmYXJlLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgY2hlY2tsaXN0LlxuXG4xLiAgV2UgaGF2ZSBgRG9jdW1lbnRhdGlvbmAgY2hhbmdlcyAoYC55YW1sYCBhbmQgYC5kdHNgIGZpbGVzKSwgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZS4gVGhhdCdzIGEgbm8tZ28gZm9yIGZ1enppbmcuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlLCBhbmQgZG9uJ3QgZGlyZWN0bHkgaW1wYWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuXG5cbjIuICBUaGUgYGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXBgIGZpbGVzIGFyZSBhbHNvIG91dCwgYXMgdGhlc2UgYXJlIERUUyBmaWxlcyBmb3IgYW4gYGFybTY0YCBSb2NrY2hpcCBhcmNoaXRlY3R1cmUsIGFuZCB3aGlsZSBEVCBpcyB1c2VkIG9uIG90aGVyIHBsYXRmb3JtcywgdGhpcyB0YXJnZXRzIEFSTSwgYW5kIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGBhbWQ2NGAuXG5cbjMuICBUaGUgYEtjb25maWdgIGFuZCBgTWFrZWZpbGVgIGNoYW5nZXMgaW4gdGhlIGBkcml2ZXJzL25ldC9wY3NgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWNgIGRpcmVjdG9yaWVzIGFyZSBhIGdyZXkgYXJlYS4gV2hpbGUgdGhlc2UgYWZmZWN0IHRoZSBidWlsZCBzeXN0ZW0sIHRoZXkgZG9uJ3QgZGlyZWN0bHkgaW50cm9kdWNlIGFueSBuZXcgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkLCBzbyBpdCBtYXkgb3IgbWF5IG5vdCBkaXNxdWFsaWZ5IHRoZSBtb2RpZmljYXRpb24uXG5cbjQuICBOb3csIHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMsIGFuZCBoZXJlJ3MgdGhlIGtpY2tlcjogYHBjcy14cGNzLXJrLmNgLCBgcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNgLCBgZHdtYWMtcmsuY2AsIGBkd21hYy1yZW5lc2FzLWdiZXRoLmNgLCBgZHdtYWMtcnpuMS5jYCwgYGR3bWFjLXNvY2ZwZ2EuY2AsIGFuZCBgZHdtYWMtaW50ZWwuY2AuIFRoZXNlIGFsbCB0YXJnZXQgc3BlY2lmaWMgaGFyZHdhcmU6IFJvY2tjaGlwIFNvQ3MsIFJlbmVzYXMgU29DcywgSW50ZWwgU29DIEZQR0FzLCBhbmQgSW50ZWwgU29Dcy4gVGhleSByZXF1aXJlICpwaHlzaWNhbCogZGV2aWNlcyBvciwgaW4gdGhlIGNhc2Ugb2YgYGR3bWFjLWludGVsYCwgYSBzcGVjaWZpYyBQQ0llIGRldmljZSB0aGF0J3Mgbm90IGdvaW5nIHRvIGJlIGF2YWlsYWJsZSBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0J3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgKmRlZmluaXRlbHkqIGEgbmVnYXRpdmUuXG5cbjUuIEZpbmFsbHksIHdlIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlcjogYGRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBYUENTIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQuIEV4YW1pbmluZyB0aGUgbW9kaWZpY2F0aW9ucywgSSBzZWUgYHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpYCBhbmQgYHhwY3NfZ2V0X3N0YXRlX2MzN19zZ21paWAuIEhvd2V2ZXIsIHRoZXNlIGFyZSBwYXJ0IG9mIHRoZSBEVyBYUENTIFBDUyBkcml2ZXIsIHdoaWNoIGlzIG9ubHkgaW5zdGFudGlhdGVkIGJ5IGRyaXZlcnMgZm9yIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSAodGhlIGRldmljZXMgbGlzdGVkIGFib3ZlKS4gU28gYWdhaW4sIHdlJ3JlIHN0dWNrLlxuXG42LiBUaGUgbW9kaWZpY2F0aW9uIHRvIGBzdG1tYWNfbWRpby5jYCBsb29rcyBpbnRlcmVzdGluZzogYHN0bW1hY19wY3Nfc2V0dXBgIGFuZCBgc3RtbWFjX3Bjc19jbGVhbmAsIGJ1dCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgc3RtbWFjX2R2cl9wcm9iZWAgLyBgc3RtbWFjX2R2cl9yZW1vdmVgLiBTbywgd2UgbmVlZCB0byB2ZXJpZnkgd2hlcmUgYHN0bW1hY19wY3Nfc2V0dXBgIGlzIGNhbGxlZCwgYW5kLCBtb3N0IGxpa2VseSwgd2lsbCBiZSByZWxhdGVkIHRvIHRoZXNlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBkcml2ZXJzLlxuXG5TbywgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGFsbCBtb2RpZmljYXRpb25zIGZhbGwgaW50byB0aGUgXCJuZWdhdGl2ZSBjcml0ZXJpYVwiIGNhdGVnb3JpZXMuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGVpdGhlciBkb2N1bWVudGF0aW9uLCBBUk0vUm9ja2NoaXAgU29DIHNwZWNpZmljLCBkZXBlbmRlbnQgb24gcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCdzIG5vdCBlbXVsYXRlZCBieSBRRU1VLCBvciBwYXJ0IG9mIGhlbHBlciBmdW5jdGlvbnMgdGhhdCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlLiAqKkluIGNvbmNsdXNpb24sIEknZCBzYXkgdGhpcyBpcyBub3Qgd29ydGggZnV6emluZyBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuKipcblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI3OjQyLjUxMjI2MDg2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MjkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3Bjc19zZXR1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9Mzk5PXZvaWQgc3RtbWFjX21kaW9fdW5sb2NrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDAwOmludCBzdG1tYWNfcGNzX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDEtdm9pZCBzdG1tYWNfcGNzX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzgxNj1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwNjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDY2OlxcdHJldCA9IHN0bW1hY19wY3Nfc2V0dXAobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDY3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTM4MT1pbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNDI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NDI2OmludCBzdG1tYWNfcGNzX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNDI3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6Mjc6NDIuNTYxOTk1NjQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU3MDU3ODAyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm8gRnV6emluZyBOZWVkZWQgSGVyZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBzdG1tYWNfcGNzX3NldHVwYCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgdGhlIGRyaXZlciBwcm9iaW5nIHBoYXNlIChgX19zdG1tYWNfZHZyX3Byb2JlYCkgd2l0aGluIGBzdG1tYWNfbWFpbi5jYCwgYW5kIHRoZSBjbGVhbnVwIGNvdW50ZXJwYXJ0IChgc3RtbWFjX3Bjc19jbGVhbmApIG9ubHkgcnVucyB3aGVuIHRoZSBkcml2ZXIgaXMgYmVpbmcgdG9ybiBkb3duIG9yIGlmIHByb2JpbmcgZmFpbHMuIE5vdywgdGhhdCBgX19zdG1tYWNfZHZyX3Byb2JlYCBmdW5jdGlvbj8gSXQncyBzdHJpY3RseSBmb3IgcGh5c2ljYWwgc3RtbWFjIGRldmljZXMg4oCTIHRob3NlIGBkd21hYy0qYCBjb250cm9sbGVycyB5b3UgZmluZCBvbiBTb0NzIG9yIHBoeXNpY2FsIFBDSWUgY2FyZHMuIEFuZCBoZXJlJ3MgdGhlIGtpY2tlcjogbm9uZSBvZiB0aGVzZSBhcmUgZW11bGF0ZWQgaW4gUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHdoaWNoIGFyZSB0aGUgc3RhbmRhcmQgZW52aXJvbm1lbnRzIHdlJ3JlIGNvbnNpZGVyaW5nLlxuXG5GdXJ0aGVybW9yZSwgbG9va2luZyBhdCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCBhbGwgdGhvc2UgcGxhdGZvcm0gZHJpdmVycyBzcGVjaWZpYyB0byBBUk0sIFJvY2tjaGlwLCBSZW5lc2FzLCBTb0NGUEdBIGFyZSB0b3RhbGx5IGlycmVsZXZhbnQuIFRoZXkncmUgbm9uLWV4aXN0ZW50IGluIHRoaXMgY29udGV4dC4gVGhlIEludGVsIFBDSSBkcml2ZXIgKGBkd21hYy1pbnRlbGApIGhhcyBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgSW50ZWwgaGFyZHdhcmUgKEVsa2hhcnQgTGFrZSwgVGlnZXIgTGFrZSwgUXVhcmssIEFsZGVyIExha2UgRXRoZXJuZXQgY29udHJvbGxlcnMpIHRoYXQgYXJlbid0IGVtdWxhdGVkIGJ5IHRoZSBzdGFuZGFyZCBRRU1VIG9yIGFyZSBhdmFpbGFibGUgb24gY2xvdWQgVk1zLlxuXG5UaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhlcmUgYXJlIGxpbWl0ZWQgdG86XG5cbjEuICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBzdHVmZjogZG9jdW1lbnRhdGlvbiwgRFQgYmluZGluZ3MsIGFuZCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlLlxuMi4gIENvZGUgcGF0aHMgdGhhdCBhcmUgKm9ubHkqIHJlbGV2YW50IHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiBhbWQ2NCAobGlrZSB0aG9zZSBgYXJjaC9hcm02NGAgRGV2aWNlIFRyZWUgZmlsZXMpLlxuMy4gIEhhcmR3YXJlIHRoYXQncyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBoYXJkd2FyZSB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBRRU1VIG9yIEdDRS4gVGhpcyBpbmNsdWRlcyBSb2NrY2hpcCwgUmVuZXNhcywgU29DIEZQR0EsIGFuZCBJbnRlbCBTb0MgRXRoZXJuZXQgY29udHJvbGxlcnMgYW5kIERXIFhQQ1MgUEhZL1BDUy5cblxuRXZlcnl0aGluZyBwb2ludHMgZGlyZWN0bHkgdG8gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGFsaWduczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZSAtICpDaGVjayEqXG4qICAgYFJlYXNvbmluZ2A6ICpDbGVhciBleHBsYW5hdGlvbiBhYm92ZTsgRGV2aWNlIFRyZWUsIGFtZDY0LCBwbGF0Zm9ybS9QQ0kgZHJpdmVycyBpcnJlbGV2YW50IHRvIGFtZDY0L1FFTVUvR0NFLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuKiAtICpDaGVjayEqXG4qICAgYEZvY3VzU3ltYm9sc2A6IFxcWyBdIChvciBudWxsL2VtcHR5KSAtICpNYWtlcyBzZW5zZTsgbm90aGluZyB0byBmb2N1cyBvbi4qXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBcXFsgXSAob3IgbnVsbC9lbXB0eSkgLSAqQ29ycmVjdDsgbm8gc3BlY2lmaWMgY29uZmlncyBhcmUgbmVlZGVkLipcblxuT2theSwgbGV0J3MgZ28gYWhlYWQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4gSXQncyBhIG5vLWdvIGZvciBmdXp6aW5nIGluIHRoaXMgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3NDIsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI3OjQ4LjI2Nzc3OTM4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBSb2NrY2hpcCBSSzM1NjggRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1MgKFhQQ1MpIGFuZCByZWZhY3RvcnMgUENTIGluaXRpYWxpemF0aW9uIGluIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIGZhbWlseSAoZHdtYWMtcmssIGR3bWFjLWludGVsLCBkd21hYy1yZW5lc2FzLCBkd21hYy1zb2NmcGdhLCBkd21hYy1yem4xKS4gQWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSk6IGRvY3VtZW50YXRpb24vZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIGFybTY0IERUUyBjaGFuZ2VzIGFyZSBub24tZXhlY3V0YWJsZSBvbiBhbWQ2NCwgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzIChzdG1tYWMgZHdtYWMgdmFyaWFudHMgYW5kIFN5bm9wc3lzIERXIFhQQ1MpIHJlcXVpcmUgcGh5c2ljYWwgU29DIHBsYXRmb3JtIGRldmljZXMgb3IgcGh5c2ljYWwgSW50ZWwvUm9ja2NoaXAvUmVuZXNhcyBzaWxpY29uIG5vdCBlbXVsYXRlZCBieSBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIFJvY2tjaGlwIFJLMzU2OCBEZXNpZ25XYXJlIEV0aGVybmV0IFBDUyAoWFBDUykgYW5kIHJlZmFjdG9ycyBQQ1MgaW5pdGlhbGl6YXRpb24gaW4gdGhlIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIgZmFtaWx5IChkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMsIGR3bWFjLXNvY2ZwZ2EsIGR3bWFjLXJ6bjEpLiBBbGwgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKTogZG9jdW1lbnRhdGlvbi9kZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgYXJtNjQgRFRTIGNoYW5nZXMgYXJlIG5vbi1leGVjdXRhYmxlIG9uIGFtZDY0LCBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHN0bW1hYyBkd21hYyB2YXJpYW50cyBhbmQgU3lub3BzeXMgRFcgWFBDUykgcmVxdWlyZSBwaHlzaWNhbCBTb0MgcGxhdGZvcm0gZGV2aWNlcyBvciBwaHlzaWNhbCBJbnRlbC9Sb2NrY2hpcC9SZW5lc2FzIHNpbGljb24gbm90IGVtdWxhdGVkIGJ5IFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNzo0OC4yNjc4MTA2OTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxhqbd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 16:08:22 +0000 UTC FinishedAt: 2026-09-15 16:27:49 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIFJvY2tjaGlwIFJLMzU2OCBEZXNpZ25XYXJlIEV0aGVybmV0IFBDUyAoWFBDUykgYW5kIHJlZmFjdG9ycyBQQ1MgaW5pdGlhbGl6YXRpb24gaW4gdGhlIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIgZmFtaWx5IChkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMsIGR3bWFjLXNvY2ZwZ2EsIGR3bWFjLXJ6bjEpLiBBbGwgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKTogZG9jdW1lbnRhdGlvbi9kZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgYXJtNjQgRFRTIGNoYW5nZXMgYXJlIG5vbi1leGVjdXRhYmxlIG9uIGFtZDY0LCBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHN0bW1hYyBkd21hYyB2YXJpYW50cyBhbmQgU3lub3BzeXMgRFcgWFBDUykgcmVxdWlyZSBwaHlzaWNhbCBTb0MgcGxhdGZvcm0gZGV2aWNlcyBvciBwaHlzaWNhbCBJbnRlbC9Sb2NrY2hpcC9SZW5lc2FzIHNpbGljb24gbm90IGVtdWxhdGVkIGJ5IFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDExZmMyMTVmYWJkNWZhOTUxNzljYzM4YmQwYmE4MTFlNjBmOTk5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDE2OjI1OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLHJrMzU2OC14cGNzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzAzZmNmZjBlM2Y3MFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTEwIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBSb2NrY2hpcCBSSzM1NjggU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1NcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gQ29pYSBQcmFudCBcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXHUwMDNlXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjogfFxuJiM0MzsgIFJvY2tjaGlwIFJLMzU2OCBTb0MgaW50ZWdyYXRlcyBhIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUGh5c2ljYWxcbiYjNDM7ICBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpLlxuJiM0MzsgIFRoZSBQQ1MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIChNQUMpXG4mIzQzOyAgYW5kIHRoZSBQaHlzaWNhbCBNZWRpdW0gQXR0YWNobWVudCAoUE1BKSBzdWJsYXllciB0aHJvdWdoIGEgTWVkaWFcbiYjNDM7ICBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKEdNSUkpLlxuJiM0MztcbiYjNDM7ICBUaGUgWFBDUyBpcyBhY2Nlc3NlZCBvdmVyIHRoZSBBUEIzIGJ1cyBhbmQgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gYVxuJiM0MzsgIE5hbmVuZyBDb21ibyBTZXJEZXMgUEhZLlxuJiM0MzsgIEl0IHN1cHBvcnRzIDEwMDBCQVNFLVgsIFNHTUlJIGFuZCBRU0dNSUkgbW9kZXMuXG4mIzQzO1xuJiM0MzsgIFRoZSBibG9jayBjb250YWlucyBmb3VyIE1JSSBwb3J0cyB0aGF0IGNhbiBiZSBpbmRpdmlkdWFsbHkgZW5hYmxlZCBhbmRcbiYjNDM7ICByb3V0ZWQgdG8gb25lIG9mIHRoZSBFdGhlcm5ldCBHTUFDIGNvbnRyb2xsZXJzIHZpYSB0aGUgcGNzLWhhbmRsZVxuJiM0MzsgIHByb3BlcnR5IGluIHRoZSBNQUMgZGV2aWNlIHRyZWUgbm9kZS5cbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGNvbnN0OiByb2NrY2hpcCxyazM1NjgteHBjc1xuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICBcJiMzNDsjYWRkcmVzcy1jZWxsc1wmIzM0OzpcbiYjNDM7ICAgIGNvbnN0OiAxXG4mIzQzO1xuJiM0MzsgIFwmIzM0OyNzaXplLWNlbGxzXCYjMzQ7OlxuJiM0MzsgICAgY29uc3Q6IDBcbiYjNDM7XG4mIzQzOyAgY2xvY2tzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEFQQjMgYnVzIGludGVyZmFjZSBjbG9jayAoY2xrX2Nzcl9pKSwgcmVxdWlyZWQgZm9yIHJlZ2lzdGVyIGFjY2Vzc1xuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBFRUUgY2xvY2sgKGNsa19lZWVfaSksIHJlcXVpcmVkIGZvciBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0IG9wZXJhdGlvblxuJiM0MztcbiYjNDM7ICBjbG9jay1uYW1lczpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGNvbnN0OiBjc3JcbiYjNDM7ICAgICAgLSBjb25zdDogZWVlXG4mIzQzO1xuJiM0MzsgIHBoeXM6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICBwaHktbmFtZXM6XG4mIzQzOyAgICBjb25zdDogc2VyZGVzXG4mIzQzO1xuJiM0MzsgIHBvd2VyLWRvbWFpbnM6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7cGF0dGVyblByb3BlcnRpZXM6XG4mIzQzOyAgXCYjMzQ7XmV0aGVybmV0LXBjcy1taWlAWzAtM10kXCYjMzQ7OlxuJiM0MzsgICAgdHlwZTogb2JqZWN0XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgT25lIG9mIHRoZSBmb3VyIE1JSSBwb3J0cyBvZiB0aGUgWFBDUy4gVGhlIHBvcnQgaXMgbGlua2VkIHRvIGFuXG4mIzQzOyAgICAgIEV0aGVybmV0IE1BQyBjb250cm9sbGVyIHZpYSB0aGUgcGNzLWhhbmRsZSBwcm9wZXJ0eSBpbiB0aGUgTUFDJiMzOTtzXG4mIzQzOyAgICAgIGRldmljZSB0cmVlIG5vZGUuXG4mIzQzO1xuJiM0MzsgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgcmVnOlxuJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOiBNSUkgcG9ydCBudW1iZXIuXG4mIzQzOyAgICAgICAgZW51bTogWzAsIDEsIDIsIDNdXG4mIzQzO1xuJiM0MzsgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgIC0gcmVnXG4mIzQzO1xuJiM0MzsgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7ICAtIHJlZ1xuJiM0MzsgIC0gXCYjMzQ7I2FkZHJlc3MtY2VsbHNcJiMzNDtcbiYjNDM7ICAtIFwmIzM0OyNzaXplLWNlbGxzXCYjMzQ7XG4mIzQzOyAgLSBjbG9ja3NcbiYjNDM7ICAtIGNsb2NrLW5hbWVzXG4mIzQzOyAgLSBwaHlzXG4mIzQzOyAgLSBwaHktbmFtZXNcbiYjNDM7ICAtIHBvd2VyLWRvbWFpbnNcbiYjNDM7XG4mIzQzO2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9jbG9jay9yazM1NjgtY3J1LmhcdTAwM2VcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3Bvd2VyL3JrMzU2OC1wb3dlci5oXHUwMDNlXG4mIzQzOyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9waHkvcGh5LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyAgICBldGhlcm5ldC1wY3NAZmRhMDAwMDAge1xuJiM0MzsgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7cm9ja2NoaXAscmszNTY4LXhwY3NcJiMzNDs7XG4mIzQzOyAgICAgIHJlZyA9IFx1MDAzYzB4ZmRhMDAwMDAgMHgyMDAwMDBcdTAwM2U7XG4mIzQzOyAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZjcnUgUENMS19YUENTXHUwMDNlLCBcdTAwM2NcdTAwMjZjcnUgQ0xLX1hQQ1NfRUVFXHUwMDNlO1xuJiM0MzsgICAgICBjbG9jay1uYW1lcyA9IFwmIzM0O2NzclwmIzM0OywgXCYjMzQ7ZWVlXCYjMzQ7O1xuJiM0MzsgICAgICBwaHlzID0gXHUwMDNjXHUwMDI2Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUlcdTAwM2U7XG4mIzQzOyAgICAgIHBoeS1uYW1lcyA9IFwmIzM0O3NlcmRlc1wmIzM0OztcbiYjNDM7ICAgICAgcG93ZXItZG9tYWlucyA9IFx1MDAzY1x1MDAyNnBvd2VyIFJLMzU2OF9QRF9QSVBFXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgZXRoZXJuZXQtcGNzLW1paUAwIHtcbiYjNDM7ICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICB9O1xuJiM0MzsgICAgfTtcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWxcbmluZGV4IDgwYzI1Mjg0NTM0OWMuLjY3YjIxZWE3N2VjOTYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcm9ja2NoaXAtZHdtYWMueWFtbFxuQEAgLTEyMCw2ICYjNDM7MTIwLDEyIEBAIHByb3BlcnRpZXM6XG4gICAgIG1heGltdW06IDB4N0ZcbiAgICAgZGVmYXVsdDogMHgxMFxuIFxuJiM0MzsgIHBjcy1oYW5kbGU6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgU3BlY2lmaWVzIGEgcmVmZXJlbmNlIHRvIGEgbm9kZSByZXByZXNlbnRpbmcgdGhlIFBDUyBkZXZpY2VcbiYjNDM7ICAgICAgY29ubmVjdGVkIHRvIHRoaXMgR01BQy4gUmVxdWlyZWQgd2hlbiBwaHktbW9kZSBpcyBcJiMzNDtzZ21paVwmIzM0Oy5cbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuICAgcGh5LXN1cHBseTpcbiAgICAgZGVzY3JpcHRpb246IFBIWSByZWd1bGF0b3JcbiBcbkBAIC0xNTksNiAmIzQzOzE2NSwxNSBAQCBhbGxPZjpcbiAgICAgICAgIGNsb2NrczpcbiAgICAgICAgICAgbWluSXRlbXM6IDVcbiBcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIHBoeS1tb2RlOlxuJiM0MzsgICAgICAgICAgY29udGFpbnM6XG4mIzQzOyAgICAgICAgICAgIGNvbnN0OiBzZ21paVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSBwY3MtaGFuZGxlXG4mIzQzO1xuIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiBcbiBleGFtcGxlczpcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbFxuaW5kZXggMzc5YjA4YmQ5ZTk3YS4uOGU4OThiY2U5YWY3MyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcbkBAIC04MCw2ICYjNDM7ODAsMTUgQEAgcHJvcGVydGllczpcbiAgICAgZGVzY3JpcHRpb246XG4gICAgICAgU29tZSBhZGRpdGlvbmFsIHBpcGUgc2V0dGluZ3MgYXJlIGFjY2Vzc2VkIHRocm91Z2ggR1JGIHJlZ3MuXG4gXG4mIzQzOyAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDpcbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuJiM0MzsgICAgZW51bTogWzAsIDFdXG4mIzQzOyAgICBkZWZhdWx0OiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgU2VsZWN0IGdtYWMwIG9yIGdtYWMxIHRvIGJlIHVzZWQgYXMgU0dNSUkgY29udHJvbGxlci5cbiYjNDM7ICAgICAgVGhlIGhhcmR3YXJlIHJlc2V0IHZhbHVlIGlzIEdNQUMxICgxKS4gU2V0IHRoaXMgdG8gMCB0byByb3V0ZVxuJiM0MzsgICAgICBTR01JSSB0byBHTUFDMC5cbiYjNDM7XG4gICBcJiMzNDsjcGh5LWNlbGxzXCYjMzQ7OlxuICAgICBjb25zdDogMVxuIFxuQEAgLTEwNSw2ICYjNDM7MTE0LDEwIEBAIGFsbE9mOlxuICAgICAgICAgICBtYXhJdGVtczogMVxuICAgICAgICAgcmVzZXQtbmFtZXM6XG4gICAgICAgICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogdHJ1ZVxuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiBmYWxzZVxuICAgLSBpZjpcbiAgICAgICBwcm9wZXJ0aWVzOlxuICAgICAgICAgY29tcGF0aWJsZTpcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAzYjJlYjJhN2E4OWE4Li5mNTNhNTE5ZGE2Mjk4IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMjM3MzksNiAmIzQzOzIzNzM5LDE1IEBAIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9yb2NrY2hpcCxyazM1NzYtc2FpLnlhbWxcbiBGOlx0c291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX3NhaS4qXG4gXG4mIzQzO1JPQ0tDSElQIFhQQ1MgRFJJVkVSXG4mIzQzO006XHRDb2lhIFByYW50IFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cdTAwM2VcbiYjNDM7TDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7TDpcdGxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLHJrMzU2OC14cGNzLnlhbWxcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXG4mIzQzO0Y6XHRpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXG4mIzQzO1xuIFJPQ0tFUiBEUklWRVJcbiBNOlx0SmlyaSBQaXJrbyBcdTAwM2NqaXJpQHJlc251bGxpLnVzXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzXG5pbmRleCA1OGMxMDUyYmE4ZWYzLi5mZGFhNGEyYTQzMjhiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gL2R0cy12MS87XG4gXG4gI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3BpbmN0cmwvcm9ja2NoaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3NvYy9yb2NrY2hpcCx2b3AyLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtyazM1NjguZHRzaVwmIzM0O1xuQEAgLTI0MSw2ICYjNDM7MjQyLDcgQEAgXHUwMDI2Y29tYnBoeTEge1xuIH07XG4gXG4gXHUwMDI2Y29tYnBoeTIge1xuJiM0MztcdHJvY2tjaGlwLHNnbWlpLW1hYy1zZWwgPSBcdTAwM2MwXHUwMDNlO1xuIFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiB9O1xuIFxuQEAgLTI2MCw5ICYjNDM7MjYyLDE4IEBAIFx1MDAyNmNwdTMge1xuIFx0Y3B1LXN1cHBseSA9IFx1MDAzY1x1MDAyNnZkZF9jcHVcdTAwM2U7XG4gfTtcbiBcbi0vKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKHJlcXVpcmUgU0dNSUkpICovXG4mIzQzOy8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAqL1xuIFx1MDAyNmdtYWMwIHtcbi1cdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdGFzc2lnbmVkLWNsb2NrcyA9IFx1MDAzY1x1MDAyNmNydSBTQ0xLX0dNQUMwX1JYX1RYXHUwMDNlO1xuJiM0MztcdGFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSBcdTAwM2NcdTAwMjZjbGtfZ21hYzBfeHBjc19taWlcdTAwM2U7XG4mIzQzO1x0bWFuYWdlZCA9IFwmIzM0O2luLWJhbmQtc3RhdHVzXCYjMzQ7O1xuJiM0MztcdHBjcy1oYW5kbGUgPSBcdTAwM2NcdTAwMjZ4cGNzX21paTBcdTAwM2U7XG4mIzQzO1x0cGh5LWhhbmRsZSA9IFx1MDAzY1x1MDAyNnNnbWlpX3BoeVx1MDAzZTtcbiYjNDM7XHRwaHktbW9kZSA9IFwmIzM0O3NnbWlpXCYjMzQ7O1xuJiM0MztcdHBoeS1zdXBwbHkgPSBcdTAwM2NcdTAwMjZ2Y2NfM3YzXHUwMDNlO1xuJiM0MztcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuJiM0MztcdHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNmdtYWMwX21paW1cdTAwM2U7XG4mIzQzO1x0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiB9O1xuIFxuIC8qIE1vdG9yY29tbSBZVDg1MjFTQyBXQU4gcG9ydCAqL1xuQEAgLTM0MSw2ICYjNDM7MzUyLDM2IEBAIFx1MDAyNmkyczBfOGNoIHtcbiBcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4gfTtcbiBcbiYjNDM7XHUwMDI2bWRpbzAge1xuJiM0MztcdHNnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyXCYjMzQ7O1xuJiM0MztcdFx0cmVnID0gXHUwMDNjMHgzXHUwMDNlO1xuJiM0MztcdFx0bWF4LXNwZWVkID0gXHUwMDNjMTAwMFx1MDAzZTtcbiYjNDM7XHRcdHJlc2V0LWFzc2VydC11cyA9IFx1MDAzYzIwMDAwXHUwMDNlO1xuJiM0MztcdFx0cmVzZXQtZGVhc3NlcnQtdXMgPSBcdTAwM2MxMDAwMDBcdTAwM2U7XG4mIzQzO1x0XHRyZXNldC1ncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW8zIFJLX1BDNiBHUElPX0FDVElWRV9MT1dcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0bGVkcyB7XG4mIzQzO1x0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XHRcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7XHRcdFx0bGVkQDEge1xuJiM0MztcdFx0XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHRcdFx0Y29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcdTAwM2U7XG4mIzQzO1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xuJiM0MztcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtrZWVwXCYjMzQ7O1xuJiM0MztcdFx0XHR9O1xuJiM0MztcbiYjNDM7XHRcdFx0bGVkQDIge1xuJiM0MztcdFx0XHRcdHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4mIzQzO1x0XHRcdFx0Y29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfR1JFRU5cdTAwM2U7XG4mIzQzO1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xuJiM0MztcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtrZWVwXCYjMzQ7O1xuJiM0MztcdFx0XHR9O1xuJiM0MztcdFx0fTtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiBcdTAwMjZtZGlvMSB7XG4gXHRyZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHtcbiBcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyXCYjMzQ7O1xuQEAgLTM1MCw2ICYjNDM7MzkxLDI1IEBAIHJnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuIFx0XHRyZXNldC1ncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW80IFJLX1BDMCBHUElPX0FDVElWRV9MT1dcdTAwM2U7XG4gXHRcdHJ4LWludGVybmFsLWRlbGF5LXBzID0gXHUwMDNjMTUwMFx1MDAzZTtcbiBcdFx0dHgtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxNTAwXHUwMDNlO1xuJiM0MztcbiYjNDM7XHRcdGxlZHMge1xuJiM0MztcdFx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHRcdCNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGxlZEAxIHtcbiYjNDM7XHRcdFx0XHRyZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0FNQkVSXHUwMDNlO1xuJiM0MztcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1dBTjtcbiYjNDM7XHRcdFx0XHRkZWZhdWx0LXN0YXRlID0gXCYjMzQ7a2VlcFwmIzM0OztcbiYjNDM7XHRcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHRcdGxlZEAyIHtcbiYjNDM7XHRcdFx0XHRyZWcgPSBcdTAwM2MyXHUwMDNlO1xuJiM0MztcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXHUwMDNlO1xuJiM0MztcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1dBTjtcbiYjNDM7XHRcdFx0XHRkZWZhdWx0LXN0YXRlID0gXCYjMzQ7a2VlcFwmIzM0OztcbiYjNDM7XHRcdFx0fTtcbiYjNDM7XHRcdH07XG4gXHR9O1xuIH07XG4gXG5AQCAtNTg2LDMgJiM0Mzs2NDYsMTMgQEAgXHUwMDI2eGluMzJrIHtcbiBcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuIFx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Y2xrMzJrX291dDFcdTAwM2U7XG4gfTtcbiYjNDM7XG4mIzQzO1x1MDAyNnhwY3Mge1xuJiM0MztcdHBoeXMgPSBcdTAwM2NcdTAwMjZjb21icGh5MiBQSFlfVFlQRV9TR01JSVx1MDAzZTtcbiYjNDM7XHRwaHktbmFtZXMgPSBcJiMzNDtzZXJkZXNcJiMzNDs7XG4mIzQzO1x0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO1x1MDAyNnhwY3NfbWlpMCB7XG4mIzQzO1x0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuaW5kZXggM2JjNjUzZjAyN2YxZi4uMjI3ZDAzZTMzNjA0MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2lcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2lcbkBAIC0xMTAsNiAmIzQzOzExMCw1MSBAQCBzYXRhMDogc2F0YUBmYzAwMDAwMCB7XG4gXHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuIFx0fTtcbiBcbiYjNDM7XHR4cGNzOiBldGhlcm5ldC1wY3NAZmRhMDAwMDAge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3JvY2tjaGlwLHJrMzU2OC14cGNzXCYjMzQ7O1xuJiM0MztcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcdFx0cmVnID0gXHUwMDNjMHgwIDB4ZmRhMDAwMDAgMHgwIDB4MjAwMDAwXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFBDTEtfWFBDU1x1MDAzZSwgXHUwMDNjXHUwMDI2Y3J1IENMS19YUENTX0VFRVx1MDAzZTtcbiYjNDM7XHRcdGNsb2NrLW5hbWVzID0gXCYjMzQ7Y3NyXCYjMzQ7LCBcJiMzNDtlZWVcJiMzNDs7XG4mIzQzO1x0XHRwb3dlci1kb21haW5zID0gXHUwMDNjXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcdTAwM2U7XG4mIzQzO1x0XHRzdGF0dXMgPSBcJiMzNDtkaXNhYmxlZFwmIzM0OztcbiYjNDM7XG4mIzQzO1x0XHR4cGNzX21paTA6IGV0aGVybmV0LXBjcy1taWlAMCB7XG4mIzQzO1x0XHRcdHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHR4cGNzX21paTE6IGV0aGVybmV0LXBjcy1taWlAMSB7XG4mIzQzO1x0XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHR4cGNzX21paTI6IGV0aGVybmV0LXBjcy1taWlAMiB7XG4mIzQzO1x0XHRcdHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHR4cGNzX21paTM6IGV0aGVybmV0LXBjcy1taWlAMyB7XG4mIzQzO1x0XHRcdHJlZyA9IFx1MDAzYzNcdTAwM2U7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdFx0fTtcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRjbGtfZ21hYzBfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzAge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2ZpeGVkLWNsb2NrXCYjMzQ7O1xuJiM0MztcdFx0Y2xvY2stZnJlcXVlbmN5ID0gXHUwMDNjMTI1MDAwMDAwXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7Y2xrX2dtYWMwX3hwY3NfbWlpXCYjMzQ7O1xuJiM0MztcdFx0I2Nsb2NrLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRjbGtfZ21hYzFfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzEge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2ZpeGVkLWNsb2NrXCYjMzQ7O1xuJiM0MztcdFx0Y2xvY2stZnJlcXVlbmN5ID0gXHUwMDNjMTI1MDAwMDAwXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7Y2xrX2dtYWMxX3hwY3NfbWlpXCYjMzQ7O1xuJiM0MztcdFx0I2Nsb2NrLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XHR9O1xuJiM0MztcbiBcdHBpcGVfcGh5X2dyZjA6IHN5c2NvbkBmZGM3MDAwMCB7XG4gXHRcdGNvbXBhdGlibGUgPSBcJiMzNDtyb2NrY2hpcCxyazM1NjgtcGlwZS1waHktZ3JmXCYjMzQ7LCBcJiMzNDtzeXNjb25cJiMzNDs7XG4gXHRcdHJlZyA9IFx1MDAzYzB4MCAweGZkYzcwMDAwIDB4MCAweDEwMDBcdTAwM2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcbmluZGV4IGUzZGQ1YWRkYTVhY2EuLjUwODhhY2MwNjk4MmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXG5AQCAtMTcwLDYgJiM0MzsxNzAsNyBAQCBjb25maWcgRFdNQUNfUk9DS0NISVBcbiBcdGRlZmF1bHQgQVJDSF9ST0NLQ0hJUFxuIFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxuIFx0c2VsZWN0IE1GRF9TWVNDT05cbiYjNDM7XHRzZWxlY3QgUENTX1hQQ1NfUk9DS0NISVBcbiBcdGhlbHBcbiBcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzMyODggU29DLlxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXG5pbmRleCBmNWY5ZmE2N2VjZDc3Li40MzA4ZGNjYmYyNTcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuQEAgLTYwMywxMyAmIzQzOzYwMyw0NyBAQCBzdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcbiBcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VuZWVkc19yZXNldCA9IHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlO1xuJiM0MztcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuJiM0MztcdGludCBhZGRyO1xuJiM0MztcbiYjNDM7XHRkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSk7XG4mIzQzO1xuJiM0MztcdGlmIChmd25vZGVfcHJvcGVydHlfcHJlc2VudChkZXZub2RlLCBcJiMzNDtwY3MtaGFuZGxlXCYjMzQ7KSkge1xuJiM0MztcdFx0cGNzbm9kZSA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZub2RlLCBcJiMzNDtwY3MtaGFuZGxlXCYjMzQ7LCAwKTtcbiYjNDM7XHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7XG4mIzQzO1x0XHRmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0YWRkciA9IGZmcyhwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzaykgLSAxO1xuJiM0MztcdFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cdTAwM2VtaWksIGFkZHIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VSUih4cGNzKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xuJiM0MztcbiYjNDM7XHR4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtdWx0X2ZhY3RfMTAwbnMpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSB4cGNzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpbnRlbF9tZ2JlX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmludGVsX21nYmVfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHRcdFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4ge1xuLVx0LyogcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZWhhc194cGNzIGhhcyBiZWVuIHNldCB0cnVlLCBzbyB0aGVyZVxuLVx0ICogc2hvdWxkIGFsd2F5cyBiZSBhbiBYUENTLiBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBhbHdheXNcbi1cdCAqIHJldHVybiB0aGlzIGlmIHByZXNlbnQuXG4tXHQgKi9cbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiBcdHJldHVybiB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4gfVxuIFxuQEAgLTczMyw2ICYjNDM7NzY3LDggQEAgc3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ICAgIHBsYXQtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKSB7XG4gXHRcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzayA9IEJJVF9VMzIoSU5URUxfTUdCRV9YUENTX0FERFIpO1xuIFx0XHRwbGF0LVx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbiYjNDM7XHRcdHBsYXQtXHUwMDNlcGNzX2luaXQgPSBpbnRlbF9tZ2JlX3Bjc19pbml0O1xuJiM0MztcdFx0cGxhdC1cdTAwM2VwY3NfZXhpdCA9IGludGVsX21nYmVfcGNzX2V4aXQ7XG4gXHRcdHBsYXQtXHUwMDNlc2VsZWN0X3BjcyA9IGludGVsX21nYmVfc2VsZWN0X3BjcztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbmluZGV4IDE5ZjM0ZTE4YmZlZjIuLjlhZjMyYzI2ZjljMTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguY1xuQEAgLTgxLDggJiM0Mzs4MSwxMSBAQCBzdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgcmVuZXNhc19nbWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB7XG4tXHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcylcbi1cdFx0bWlpY19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWlpY19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuJiM0MztcdHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyZW5lc2FzX2dtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmNcbmluZGV4IDhkNzA0MmU2ODkyNjEuLmIzZDc0NmRkOTY2ZmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWZkL3N5c2Nvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtzdG1tYWNfcGxhdGZvcm0uaFwmIzM0O1xuQEAgLTQ3LDYgJiM0Mzs0OCw3IEBAIHN0cnVjdCBya19nbWFjX29wcyB7XG4gXHR2b2lkICgqc2V0X3RvX3JnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdixcbiBcdFx0XHQgICAgIGludCB0eF9kZWxheSwgaW50IHJ4X2RlbGF5KTtcbiBcdHZvaWQgKCpzZXRfdG9fcm1paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpO1xuJiM0MztcdHZvaWQgKCpzZXRfdG9fc2dtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbiBcdGludCAoKnNldF9zcGVlZCkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCk7XG4gXHR2b2lkICgqaW50ZWdyYXRlZF9waHlfcG93ZXJ1cCkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpO1xuQEAgLTYzLDYgJiM0Mzs2NSw3IEBAIHN0cnVjdCBya19nbWFjX29wcyB7XG4gXHRib29sIGNsb2NrX2dyZl9yZWdfaW5fcGhwO1xuIFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcbiBcdGJvb2wgc3VwcG9ydHNfcm1paTtcbiYjNDM7XHRib29sIHN1cHBvcnRzX3NnbWlpO1xuIFx0Ym9vbCBwaHBfZ3JmX3JlcXVpcmVkO1xuIFx0Ym9vbCByZWdzX3ZhbGlkO1xuIFx0dTMyIHJlZ3NbXTtcbkBAIC05OCw2ICYjNDM7MTAxLDcgQEAgc3RydWN0IHJrX3ByaXZfZGF0YSB7XG4gXHRib29sIGludGVncmF0ZWRfcGh5O1xuIFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcbiBcdGJvb2wgc3VwcG9ydHNfcm1paTtcbiYjNDM7XHRib29sIHN1cHBvcnRzX3NnbWlpO1xuIFxuIFx0c3RydWN0IGNsa19idWxrX2RhdGEgKmNsa3M7XG4gXHRpbnQgbnVtX2Nsa3M7XG5AQCAtODA5LDYgJiM0Mzs4MTMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzIHJrMzUyOF9vcHMgPSB7XG4gI2RlZmluZSBSSzM1NjhfR1JGX0dNQUMxX0NPTjFcdFx0MHgwMzhjXG4gXG4gLyogUkszNTY4X0dSRl9HTUFDMF9DT04xIFx1MDAyNlx1MDAyNiBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgKi9cbiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUlcdFx0R1JGX0NMUl9CSVQoNylcbiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSVx0XHRHUkZfQklUKDcpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxcdFx0XHRHUkZfQklUKDMpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxfQ0xSXHRcdEdSRl9DTFJfQklUKDMpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFXHRcdEdSRl9CSVQoMSlcbkBAIC04MzYsNiAmIzQzOzg0MiwxNiBAQCBzdGF0aWMgaW50IHJrMzU2OF9pbml0KHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcmszNTY4X3NldF90b19ybWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGNvbjE7XG4mIzQzO1xuJiM0MztcdGNvbjEgPSAoYnNwX3ByaXYtXHUwMDNlaWQgPT0gMSkgPyBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgOlxuJiM0MztcdFx0XHRcdCAgICAgUkszNTY4X0dSRl9HTUFDMF9DT04xO1xuJiM0MztcbiYjNDM7XHRyZWdtYXBfd3JpdGUoYnNwX3ByaXYtXHUwMDNlZ3JmLCBjb24xLCBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdFx0XHRpbnQgdHhfZGVsYXksIGludCByeF9kZWxheSlcbiB7XG5AQCAtODUxLDE5ICYjNDM7ODY3LDMxIEBAIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdCAgICAgUkszNTY4X0dNQUNfQ0xLX1RYX0RMX0NGRyh0eF9kZWxheSkpO1xuIFxuIFx0cmVnbWFwX3dyaXRlKGJzcF9wcml2LVx1MDAzZWdyZiwgY29uMSxcbiYjNDM7XHRcdCAgICAgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJIHxcbiBcdFx0ICAgICBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFIHxcbiBcdFx0ICAgICBSSzM1NjhfR01BQ19UWENMS19ETFlfRU5BQkxFKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fc2dtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgY29uMTtcbiYjNDM7XG4mIzQzO1x0Y29uMSA9IChic3BfcHJpdi1cdTAwM2VpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6XG4mIzQzO1x0XHRcdFx0ICAgICBSSzM1NjhfR1JGX0dNQUMwX0NPTjE7XG4mIzQzO1xuJiM0MztcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cdTAwM2VncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzIHJrMzU2OF9vcHMgPSB7XG4gXHQuaW5pdCA9IHJrMzU2OF9pbml0LFxuJiM0MztcdC5zZXRfdG9fcm1paSA9IHJrMzU2OF9zZXRfdG9fcm1paSxcbiBcdC5zZXRfdG9fcmdtaWkgPSByazM1Njhfc2V0X3RvX3JnbWlpLFxuJiM0MztcdC5zZXRfdG9fc2dtaWkgPSByazM1Njhfc2V0X3RvX3NnbWlpLFxuJiM0MztcbiBcdC5zZXRfc3BlZWQgPSBya19zZXRfY2xrX21hY19zcGVlZCxcbiBcbiBcdC5nbWFjX3BoeV9pbnRmX3NlbF9tYXNrID0gR0VOTUFTS19VMTYoNiwgNCksXG4gXG4tXHQuc3VwcG9ydHNfcm1paSA9IHRydWUsXG4tXG4gXHQucmVnc192YWxpZCA9IHRydWUsXG4gXHQucmVncyA9IHtcbiBcdFx0MHhmZTJhMDAwMCwgLyogZ21hYzAgKi9cbkBAIC0xMjA4LDYgJiM0MzsxMjM2LDQzIEBAIHN0YXRpYyB2b2lkIHJrX3BoeV9wb3dlcmRvd24oc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdGRldl9lcnIoYnNwX3ByaXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsIHRvIGRpc2FibGUgcGh5LXN1cHBseVxcblwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJrX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwcml2LVx1MDAzZWRldmljZS1cdTAwM2VvZl9ub2RlO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNzX25vZGU7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3MgKnhwY3M7XG4mIzQzO1xuJiM0MztcdHBjc19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgXCYjMzQ7cGNzLWhhbmRsZVwmIzM0OywgMCk7XG4mIzQzO1x0aWYgKCFwY3Nfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHR4cGNzID0geHBjc19ya19jcmVhdGUocHJpdi1cdTAwM2VkZXZpY2UsIHBjc19ub2RlKTtcbiYjNDM7XHRvZl9ub2RlX3B1dChwY3Nfbm9kZSk7XG4mIzQzO1x0aWYgKElTX0VSUih4cGNzKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSB4cGNzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBya19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0eHBjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4mIzQzO1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0XHQgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBya19wcml2X2RhdGEgKnJrX2dtYWNfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzICpvcHMpXG5AQCAtMTMzMCw2ICYjNDM7MTM5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4gXG4gXHRic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19yZ21paSA9IG9wcy1cdTAwM2VzdXBwb3J0c19yZ21paSB8fCAhIW9wcy1cdTAwM2VzZXRfdG9fcmdtaWk7XG4gXHRic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19ybWlpID0gb3BzLVx1MDAzZXN1cHBvcnRzX3JtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3JtaWk7XG4mIzQzO1x0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfc2dtaWkgPSBvcHMtXHUwMDNlc3VwcG9ydHNfc2dtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3NnbWlpO1xuIFxuIFx0aWYgKG9wcy1cdTAwM2Vpbml0KSB7XG4gXHRcdHJldCA9IG9wcy1cdTAwM2Vpbml0KGJzcF9wcml2KTtcbkBAIC0xMzYxLDYgJiM0MzsxNDI3LDEwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19jaGVja19vcHMoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdGlmICghYnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfcm1paSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4mIzQzO1x0XHRpZiAoIWJzcF9wcml2LVx1MDAzZXN1cHBvcnRzX3NnbWlpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X2Vycihic3BfcHJpdi1cdTAwM2VkZXYsXG4gXHRcdFx0XCYjMzQ7dW5zdXBwb3J0ZWQgaW50ZXJmYWNlICVkXCYjMzQ7LCBic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UpO1xuQEAgLTEzNzksMTYgJiM0MzsxNDQ5LDE5IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiYjNDM7XHRyZXQgPSBnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIHRydWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoYnNwX3ByaXYtXHUwMDNlcGh5X2lmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbiYjNDM7XHRcdGdvdG8gc2V0X21vZGU7XG4mIzQzO1xuIFx0cmV0ID0gcmtfZ2V0X3BoeV9pbnRmX3NlbChic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXG4gXHRpbnRmID0gcmV0O1xuIFxuLVx0cmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4gXHRpZiAoYnNwX3ByaXYtXHUwMDNlZ21hY19waHlfaW50Zl9zZWxfbWFzayB8fFxuIFx0ICAgIGJzcF9wcml2LVx1MDAzZWdtYWNfcm1paV9tb2RlX21hc2spIHtcbiBcdFx0LyogSWYgZGVmaW5lZCwgZW5jb2RlIHRoZSBwaHlfaW50Zl9zZWwgdmFsdWUgKi9cbkBAIC0xMzk5LDEwICYjNDM7MTQ3Miw4IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRcdFx0ICAgICAgYnNwX3ByaXYtXHUwMDNlZ21hY19ybWlpX21vZGVfbWFzayk7XG4gXG4gXHRcdHJldCA9IHJrX3dyaXRlX2dtYWNfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH1cbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXHR9XG4gXG4gXHRpZiAoYnNwX3ByaXYtXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spIHtcbkBAIC0xNDEwLDEzICYjNDM7MTQ4MSwxMiBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0XHRcdCAgICAgYnNwX3ByaXYtXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spO1xuIFxuIFx0XHRyZXQgPSBya193cml0ZV9jbG9ja19ncmZfcmVnKGJzcF9wcml2LCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcdH1cbiBcbi1cdC8qcm1paSBvciByZ21paSovXG4mIzQzO3NldF9tb2RlOlxuJiM0MztcdC8qIHJtaWksIHJnbWlpLCBzZ21paSAqL1xuIFx0c3dpdGNoIChic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UpIHtcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuIFx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O2luaXQgZm9yIFJHTUlJXFxuXCYjMzQ7KTtcbkBAIC0xNDQ3LDE1ICYjNDM7MTUxNywyMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0aWYgKGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fcm1paSlcbiBcdFx0XHRic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3JtaWkoYnNwX3ByaXYpO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbiYjNDM7XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7aW5pdCBmb3IgU0dNSUlcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fc2dtaWkpXG4mIzQzO1x0XHRcdGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fc2dtaWkoYnNwX3ByaXYpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7Tk8gaW50ZXJmYWNlIGRlZmluZWQhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFx0fVxuIFxuIFx0cmV0ID0gcmtfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcbiBcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTtcbiBcbkBAIC0xNDYzLDYgJiM0MzsxNTM4LDEwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlaW50ZWdyYXRlZF9waHlfcG93ZXJ1cChic3BfcHJpdik7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Nsa19kaXNhYmxlOlxuJiM0MztcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJrX2dtYWNfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmdtYWMpXG5AQCAtMTQ4Niw2ICYjNDM7MTU2NSw5IEBAIHN0YXRpYyB2b2lkIHJrX2dldF9pbnRlcmZhY2VzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCAqYnNwX3ByaXYsXG4gXG4gXHRpZiAocmstXHUwMDNlc3VwcG9ydHNfcm1paSlcbiBcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLCBpbnRlcmZhY2VzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJrLVx1MDAzZXN1cHBvcnRzX3NnbWlpKVxuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSwgaW50ZXJmYWNlcyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcmtfc2V0X2Nsa190eF9yYXRlKHZvaWQgKmJzcF9wcml2Xywgc3RydWN0IGNsayAqY2xrX3R4X2ksXG5AQCAtMTYwMiw2ICYjNDM7MTY4NCwxNyBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHBsYXRfZGF0LVx1MDAzZXN1c3BlbmQgPSBya19nbWFjX3N1c3BlbmQ7XG4gXHRwbGF0X2RhdC1cdTAwM2VyZXN1bWUgPSBya19nbWFjX3Jlc3VtZTtcbiBcbiYjNDM7XHRpZiAocGxhdF9kYXQtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiYjNDM7XHRcdC8qIFNHTUlJIGNsb2NrIGFsd2F5cyBydW5zIGF0IDEyNSBNSHogKi9cbiYjNDM7XHRcdHBsYXRfZGF0LVx1MDAzZXNldF9jbGtfdHhfcmF0ZSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0LyogU0dNSUkgcmVxdWlyZXMgYSBQQ1MgKi9cbiYjNDM7XHRcdHBsYXRfZGF0LVx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbiYjNDM7XHRcdHBsYXRfZGF0LVx1MDAzZXBjc19pbml0ID0gcmtfcGNzX2luaXQ7XG4mIzQzO1x0XHRwbGF0X2RhdC1cdTAwM2VwY3NfZXhpdCA9IHJrX3Bjc19leGl0O1xuJiM0MztcdFx0cGxhdF9kYXQtXHUwMDNlc2VsZWN0X3BjcyA9IHJrX3NlbGVjdF9wY3M7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHBsYXRfZGF0LVx1MDAzZWJzcF9wcml2ID0gcmtfZ21hY19zZXR1cChwZGV2LCBwbGF0X2RhdCwgZGF0YSk7XG4gXHRpZiAoSVNfRVJSKHBsYXRfZGF0LVx1MDAzZWJzcF9wcml2KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocGxhdF9kYXQtXHUwMDNlYnNwX3ByaXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xuaW5kZXggMTM2MzQ5NjViYzE5YS4uMDFkZjQ3NzZlZGIzZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXG5AQCAtMzUsOCAmIzQzOzM1LDExIEBAIHN0YXRpYyBpbnQgcnpuMV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgcnpuMV9kd21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4tXHRcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnpuMV9kd21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbmluZGV4IDFkN2YwYTU3ZDI4ODkuLjZkNGJjMWZlOGY3NTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuQEAgLTUzOSw4ICYjNDM7NTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgc29jZnBnYV9kd21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4tXHRcdGx5bnhfcGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRseW54X3Bjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuJiM0MztcdHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpzb2NmcGdhX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXG5pbmRleCBhZmU5OGZmNWJkY2IwLi43Mzk2YjY4ODk5YzY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xuQEAgLTQyNiwzNSAmIzQzOzQyNiwxNCBAQCBpbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcbiBpbnQgc3RtbWFjX3Bjc19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcbi1cdHN0cnVjdCBkd194cGNzICp4cGNzID0gTlVMTDtcbi1cdGludCBhZGRyLCByZXQ7XG4tXG4tXHRkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSk7XG4tXG4tXHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KSB7XG4tXHRcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdChwcml2KTtcbi1cdH0gZWxzZSBpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgXCYjMzQ7cGNzLWhhbmRsZVwmIzM0OykpIHtcbi1cdFx0cGNzbm9kZSA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZub2RlLCBcJiMzNDtwY3MtaGFuZGxlXCYjMzQ7LCAwKTtcbi1cdFx0eHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTtcbi1cdFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XG4tXHRcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTtcbi1cdH0gZWxzZSBpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEgXHUwMDI2XHUwMDI2XG4tXHRcdCAgIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrKSB7XG4tXHRcdGFkZHIgPSBmZnMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIC0gMTtcbi1cdFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cdTAwM2VtaWksIGFkZHIpO1xuLVx0XHRyZXQgPSBQVFJfRVJSX09SX1pFUk8oeHBjcyk7XG4tXHR9IGVsc2Uge1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KVxuIFx0XHRyZXR1cm4gMDtcbi1cdH1cbiBcbiYjNDM7XHRyZXQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2luaXQocHJpdik7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVx1MDAzZWRldmljZSwgcmV0LCBcJiMzNDtObyB4UENTIGZvdW5kXFxuXCYjMzQ7KTtcbi1cbi1cdGlmICh4cGNzKVxuLVx0XHR4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtdWx0X2ZhY3RfMTAwbnMpO1xuLVxuLVx0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtXHUwMDNlZGV2aWNlLCByZXQsIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIFBDU1xcblwmIzM0Oyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNDYzLDE0ICYjNDM7NDQyLDEwIEBAIHZvaWQgc3RtbWFjX3Bjc19jbGVhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQpXG4tXHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfZXhpdChwcml2KTtcbi1cbi1cdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuJiM0MztcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbi1cdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4mIzQzO1x0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KHByaXYpO1xuIH1cbiBcbiBzdHJ1Y3Qgc3RtbWFjX2Nsa19yYXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXG5pbmRleCBlNDE3ZmQ2NmY2NjBhLi4zZGI5YjM0M2FjMGM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXG5AQCAtMTIsNiAmIzQzOzEyLDMxIEBAIGNvbmZpZyBQQ1NfWFBDU1xuIFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU3lub3BzeXNcbiBcdCAgRGVzaWduV2FyZSBYUENTIGNvbnRyb2xsZXJzLlxuIFxuJiM0MztpZiBQQ1NfWFBDU1xuJiM0MztcbiYjNDM7Y29uZmlnIFBDU19YUENTX1BMQVRGT1JNXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGRlZmF1bHQgUENTX1hQQ1NcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBHZW5lcmljIERXWFBDUyBkcml2ZXIgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbiYjMzk7dCByZXF1aXJlIGFueVxuJiM0MztcdCAgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB0byBmdW5jdGlvbiBvciBpcyB1c2luZyBwbGF0Zm9ybVxuJiM0MztcdCAgZGF0YSBmb3Igc2V0dXAuXG4mIzQzO1xuJiM0MztcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbiYjNDM7XG4mIzQzO2NvbmZpZyBQQ1NfWFBDU19ST0NLQ0hJUFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1JvY2tjaGlwIFhQQ1MgY29udHJvbGxlciBzdXBwb3J0XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCBBUkNIX1JPQ0tDSElQXG4mIzQzO1x0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxuJiM0MztcdHNlbGVjdCBHRU5FUklDX1BIWVxuJiM0MztcdHNlbGVjdCBQTV9HRU5FUklDX0RPTUFJTlNcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTdXBwb3J0IGZvciBYUENTIGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszNTZ4IFNvQy5cbiYjNDM7XG4mIzQzO1x0ICBJZiB5b3UgaGF2ZSBhIFJvY2tjaGlwIFNvQyB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXG4mIzQzO1xuJiM0MztlbmRpZiAjIFBDU19YUENTXG4mIzQzO1xuIGNvbmZpZyBQQ1NfTFlOWFxuIFx0dHJpc3RhdGVcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcbmluZGV4IDRmNzkyMDYxOGI5MDAuLmY5ZjZjZjI1NzhkNzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxuQEAgLTEsMTAgJiM0MzsxLDExIEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICMgTWFrZWZpbGUgZm9yIExpbnV4IFBDUyBkcml2ZXJzXG4gXG4tcGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpXHQ6PSBwY3MteHBjcy5vIHBjcy14cGNzLXBsYXQubyBcXFxuLVx0XHRcdFx0ICAgcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gub1xuJiM0MztwY3NfeHBjcy0kKENPTkZJR19QQ1NfWFBDUylcdDo9IHBjcy14cGNzLm8gcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gub1xuIFxuIG9iai0kKENPTkZJR19QQ1NfWFBDUylcdFx0JiM0Mzs9IHBjc194cGNzLm9cbiYjNDM7b2JqLSQoQ09ORklHX1BDU19YUENTX1BMQVRGT1JNKSAmIzQzOz0gcGNzLXhwY3MtcGxhdC5vXG4mIzQzO29iai0kKENPTkZJR19QQ1NfWFBDU19ST0NLQ0hJUCkgJiM0Mzs9IHBjcy14cGNzLXJrLm9cbiBvYmotJChDT05GSUdfUENTX0xZTlgpXHRcdCYjNDM7PSBwY3MtbHlueC5vXG4gb2JqLSQoQ09ORklHX1BDU19NVEtfTFlOWEkpXHQmIzQzOz0gcGNzLW10ay1seW54aS5vXG4gb2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpXHQmIzQzOz0gcGNzLXJ6bjEtbWlpYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ1ZTBmMjJjOTczYzJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXG5AQCAtMCwwICYjNDM7MSw1NzMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyXG4mIzQzOyAqXG4mIzQzOyAqIEJhc2VkIG9uIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIFhQQ1MgcGxhdGZvcm0gZHJpdmVyLlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQgU2VyZ2UgU2VtaW5cbiYjNDM7ICpcbiYjNDM7ICogQWRhcHRlZCBmb3IgUm9ja2NoaXAgU29Dcywgd2l0aCByZWZlcmVuY2UgdG8gdGhlIFJvY2tjaGlwIE9FTSBkcml2ZXIuXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2lhIFByYW50XG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21hdGguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9kb21haW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWUuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cGNzLXhwY3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGR3X3hwY3Nfcmsge1xuJiM0MztcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cztcbiYjNDM7XHR2b2lkIF9faW9tZW0gKnJlZ19iYXNlO1xuJiM0MztcdHN0cnVjdCBwaHkgKnNlcmRlc19waHk7XG4mIzQzO1x0c3RydWN0IGNsayAqY3NyX2NsaztcbiYjNDM7XHRzdHJ1Y3QgY2xrICplZWVfY2xrO1xuJiM0MztcdHU4IGVlZV9tdWx0X2ZhY3Q7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgcHRyZGlmZl90IHhwY3NfcmtfYWRkcl9mb3JtYXQoaW50IGRldiwgaW50IHJlZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBGSUVMRF9QUkVQKDB4NzAwMDAsIGRldikgfCBGSUVMRF9QUkVQKDB4ZmZmZiwgcmVnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3JlYWRfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZylcbiYjNDM7e1xuJiM0MztcdHB0cmRpZmZfdCBjc3I7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Y3NyID0geHBjc19ya19hZGRyX2Zvcm1hdChkZXYsIHJlZyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkbChweHBjcy1cdTAwM2VyZWdfYmFzZSAmIzQzOyAoY3NyIFx1MDAzY1x1MDAzYyAyKSkgXHUwMDI2IDB4ZmZmZjtcbiYjNDM7XG4mIzQzO1x0cG1fcnVudGltZV9wdXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9yZWcoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0cHRyZGlmZl90IGNzcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRjc3IgPSB4cGNzX3JrX2FkZHJfZm9ybWF0KGRldiwgcmVnKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHdyaXRlbCh2YWwsIHB4cGNzLVx1MDAzZXJlZ19iYXNlICYjNDM7IChjc3IgXHUwMDNjXHUwMDNjIDIpKTtcbiYjNDM7XG4mIzQzO1x0cG1fcnVudGltZV9wdXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkxXHQyXG4mIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTJcdDNcbiYjNDM7I2RlZmluZSBST0NLQ0hJUF9NTURfTUlJM1x0NFxuJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9QTUFQTURcdDZcbiYjNDM7I2RlZmluZSBST0NLQ0hJUF9NTURfTUlJXHQ3XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShpbnQgYWRkcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhKGFkZHIgXHUwMDNjIDAgfHwgYWRkciBcdTAwM2UgMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChkZXYpIHtcbiYjNDM7XHRjYXNlIE1ESU9fTU1EX1BNQVBNRDpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xuJiM0MztcdGNhc2UgTURJT19NTURfVkVORDI6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FTlhJTztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVhZHMgYXJlIHJlZGlyZWN0ZWQgYnkgaGFyZHdhcmUgdG8gdGhlIHBvcnQmIzM5O3MgcmVhZC1vbmx5IG1pcnJvcjtcbiYjNDM7XHQgKiBvbmx5IHdyaXRlcyBoYXZlIHRvIGJlIHRhcmdldGVkIGF0IE1JSSAoc2VlIHRoZSB3cml0ZSBwYXRoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2l0Y2ggKGFkZHIpIHtcbiYjNDM7XHRjYXNlIDA6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyO1xuJiM0MztcdGNhc2UgMzpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGRldikge1xuJiM0MztcdGNhc2UgTURJT19NTURfUE1BUE1EOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9QTUFQTUQ7XG4mIzQzO1x0Y2FzZSBNRElPX01NRF9WRU5EMjpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGVzZSByZWdpc3RlcnMgcGh5c2ljYWxseSBsaXZlIG9ubHkgaW4gTUlJICh0aGUgbWFuYWdlbWVudCBwb3J0KS5cbiYjNDM7XHQgKiBQb3J0cyAxLTMgZXhwb3NlIHJlYWQtb25seSBtaXJyb3JzIG9mIHRoZXNlIGJpdHMsIHNvIHdyaXRlcyBtdXN0XG4mIzQzO1x0ICogYWx3YXlzIHRhcmdldCBNSUk7IHRoZSByZWFkIHBhdGggcmVtYXBzIHBlciBhZGRyZXNzIGFuZCB0aGVcbiYjNDM7XHQgKiBoYXJkd2FyZSByZWRpcmVjdHMgdG8gdGhlIHBvcnQmIzM5O3MgbWlycm9yLlxuJiM0MztcdCAqL1xuJiM0MztcdHN3aXRjaCAocmVnKSB7XG4mIzQzO1x0Y2FzZSBEV19WUl9NSUlfQU5fQ1RSTDpcbiYjNDM7XHRjYXNlIERXX1ZSX01JSV9BTl9JTlRSX1NUUzpcbiYjNDM7XHRjYXNlIERXX1ZSX01JSV9FRUVfTUNUUkwwOlxuJiM0MztcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDE6XG4mIzQzO1x0Y2FzZSBEV19WUl9NSUlfRElHX0NUUkwyOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChhZGRyKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkxO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMjtcbiYjNDM7XHRjYXNlIDM6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IGRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgTURJT19NTURfVkVORDIsIHJlZyk7XG4mIzQzO1x0aWYgKGRldiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAweGZmZmY7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGRldiA9IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoYWRkciwgTURJT19NTURfVkVORDIsIHJlZyk7XG4mIzQzO1x0aWYgKGRldiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpO1xuJiM0MztcdGlmIChkZXYgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gMHhmZmZmO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geHBjc19ya19yZWFkX3JlZyhweHBjcywgZGV2LCByZWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0ZGV2ID0geHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7XG4mIzQzO1x0aWYgKGRldiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGR3X3hwY3NfcmsgKnhwY3NfcmtfY3JlYXRlX2RhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbiYjNDM7XG4mIzQzO1x0cHhwY3MgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqcHhwY3MpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXB4cGNzKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdHB4cGNzLVx1MDAzZXBkZXYgPSBwZGV2O1xuJiM0MztcbiYjNDM7XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHB4cGNzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHB4cGNzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfc2VyZGVzX3BoeV9pbml0KHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRweHBjcy1cdTAwM2VzZXJkZXNfcGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgXCYjMzQ7c2VyZGVzXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGdldCBTZXJEZXMgUEhZXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9mZih2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0cGh5X3Bvd2VyX29mZihweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbiYjNDM7XHRwaHlfZXhpdChweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbiYjNDM7XG4mIzQzO1x0ZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb24oc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgcG93ZXIgZG9tYWluIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGVuYWJsZWQsIHdoaWNoIGFsbG93cyB1cyB0b1xuJiM0MztcdCAqIGR5bmFtaWNhbGx5IHR1cm4gdGhlIENTUiBjbG9jayBvbi9vZmYgdXNpbmcgUE0gd2hpbGUga2VlcGluZyB0aGUgUENTXG4mIzQzO1x0ICogcG93ZXJlZCBvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIHRydWUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gcG93ZXIgb24gcG93ZXItZG9tYWluc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X2luaXQocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBpbml0IFNlckRlcyBQSFlcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBwbV9kb21haW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcG93ZXJfb24ocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBwb3dlciBvbiBTZXJEZXMgUEhZXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gc2VyZGVzX3BoeTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9mZiwgcHhwY3MpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bSBmb3IgU2VyRGVzIFBIWTogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztzZXJkZXNfcGh5OlxuJiM0MztcdHBoeV9leGl0KHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuJiM0MztwbV9kb21haW46XG4mIzQzO1x0ZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCBmYWxzZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfcmVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBweHBjcy1cdTAwM2VwZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApO1xuJiM0MztcdGlmICghcmVzKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7Tm8gcmVnLXNwYWNlIGZvdW5kXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJlc291cmNlX3NpemUocmVzKSBcdTAwM2MgU1pfMk0pIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtJbnZhbGlkIHJlZy1zcGFjZSBzaXplXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHhwY3MtXHUwMDNlcmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xuJiM0MztcdGlmIChJU19FUlIocHhwY3MtXHUwMDNlcmVnX2Jhc2UpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIG1hcCByZWctc3BhY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocHhwY3MtXHUwMDNlcmVnX2Jhc2UpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHhwY3NfcmtfZXhpdF9jbGsodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRhdGE7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZChkZXYpO1xuJiM0MztcdGNsa19kaXNhYmxlX3VucHJlcGFyZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfY2xrKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcbiYjNDM7XHR1NjQgbXVsdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRweHBjcy1cdTAwM2Vjc3JfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgXCYjMzQ7Y3NyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZWNzcl9jbGspKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZWNzcl9jbGspLFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byBnZXQgQ1NSIGNsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cHhwY3MtXHUwMDNlZWVlX2NsayA9IGRldm1fY2xrX2dldChkZXYsIFwmIzM0O2VlZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VlZWVfY2xrKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy1cdTAwM2VlZWVfY2xrKSxcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgdG8gZ2V0IEVFRSBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBFRUUgY2xvY2tcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpO1xuJiM0MztcdHBtX3J1bnRpbWVfZW5hYmxlKGRldik7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHhwY3NfcmtfZXhpdF9jbGssIHB4cGNzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIEVFRSBjbG9jazogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDb21wdXRlIHRoZSBtdWx0aXBsaWVyIGZvciB0aGUgRUVFIGNsb2NrIHNvIHRoYXRcbiYjNDM7XHQgKiBjbGtfZWVlX3BlcmlvZCAqIChtdWx0X2ZhY3QgJiM0MzsgMSkgZmFsbHMgd2l0aGluIDgwLi4xMjAgbnMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBPbiBSSzM1NjgsIGNsa194cGNzX2VlZSBpcyBtdXhlZCBiZXR3ZWVuIGdwbGwyMDAgKDIwMCBNSHosIDUgbnMpXG4mIzQzO1x0ICogYW5kIGNwbGwxMjUgKDEyNSBNSHosIDggbnMpLCBzZWxlY3RlZCBieSBDUlVfQ0xLU0VMX0NPTjI5IGJpdCAxMy5cbiYjNDM7XHQgKiBUaGUgcmVzZXQgdmFsdWUgaXMgMCAoMjAwIE1IeiksIGJ1dCBkZXJpdmUgdGhlIHZhbHVlIGF0IHJ1bnRpbWUgdG9cbiYjNDM7XHQgKiBzdGF5IGNvcnJlY3QgaWYgdGhlIG11eCBpcyBjaGFuZ2VkIGJ5IGEgYm9hcmQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBVc2UgYSA2NC1iaXQgaW50ZXJtZWRpYXRlOiBvbiAzMi1iaXQgYnVpbGRzLCAxMDAgKiAyMDAwMDAwMDBcbiYjNDM7XHQgKiBkb2VzIG5vdCBmaXQgaW4gdW5zaWduZWQgbG9uZy4gQ2xhbXAgdG8gdGhlIDQtYml0XG4mIzQzO1x0ICogRFdfVlJfTUlJX0VFRV9NVUxUX0ZBQ1RfMTAwTlMgZmllbGQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmF0ZSA9IGNsa19nZXRfcmF0ZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbiYjNDM7XHRpZiAoIXJhdGUpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsIFwmIzM0O0ludmFsaWQgRUVFIGNsb2NrIHJhdGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtdWx0ID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKDEwMFVMTCAqIHJhdGUsIE5TRUNfUEVSX1NFQykgLSAxO1xuJiM0MztcdHB4cGNzLVx1MDAzZWVlZV9tdWx0X2ZhY3QgPSBtaW5fdCh1NjQsIG11bHQsIDE1KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfYnVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0YXRpYyBhdG9taWNfdCBpZCA9IEFUT01JQ19JTklUKC0xKTtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGJ1cyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKGRldiwgMCk7XG4mIzQzO1x0aWYgKCFidXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0YnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtSb2NrY2hpcCBEVyBYUENTIE1DSS9BUEIzXCYjMzQ7O1xuJiM0MztcdGJ1cy1cdTAwM2VyZWFkID0geHBjc19ya19yZWFkX2MyMjtcbiYjNDM7XHRidXMtXHUwMDNld3JpdGUgPSB4cGNzX3JrX3dyaXRlX2MyMjtcbiYjNDM7XHRidXMtXHUwMDNlcmVhZF9jNDUgPSB4cGNzX3JrX3JlYWRfYzQ1O1xuJiM0MztcdGJ1cy1cdTAwM2V3cml0ZV9jNDUgPSB4cGNzX3JrX3dyaXRlX2M0NTtcbiYjNDM7XHRidXMtXHUwMDNlcGh5X21hc2sgPSB+MDtcbiYjNDM7XHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuJiM0MztcdGJ1cy1cdTAwM2Vwcml2ID0gcHhwY3M7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLFxuJiM0MztcdFx0IFwmIzM0O3JvY2tjaGlwX2R3eHBjcy0leFwmIzM0OywgYXRvbWljX2luY19yZXR1cm4oXHUwMDI2aWQpKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNRElPLWJ1cyBoZXJlIHNlcnZlcyBhcyBqdXN0IGEgYmFjay1lbmQgZW5naW5lIGFic3RyYWN0aW5nIG91dFxuJiM0MztcdCAqIHRoZSBNRElPIGFuZCBNQ0kvQVBCMyBJTyBpbnRlcmZhY2VzIHV0aWxpemVkIGZvciB0aGUgUm9ja2NoaXAgRFdYUENTIENTUnNcbiYjNDM7XHQgKiBhY2Nlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBNRElPIGJ1c1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHhwY3MtXHUwMDNlYnVzID0gYnVzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRweHBjcyA9IHhwY3NfcmtfY3JlYXRlX2RhdGEocGRldik7XG4mIzQzO1x0aWYgKElTX0VSUihweHBjcykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihweHBjcyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIFhQQ1MgbWF5IGJlIGF0dGFjaGVkIHRvIGEgcG93ZXIgZG9tYWluIChlLmcuIFBEX1BJUEUpLiBUaGUgZG9tYWluXG4mIzQzO1x0ICogbXVzdCBiZSBwb3dlcmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQyB3aWxsXG4mIzQzO1x0ICogdHJpZ2dlciBhIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0IChTRXJyb3IpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQWNjZXNzaW5nIHRoZSBYUENTIHJlZ2lzdGVycyBhbHNvIHJlcXVpcmVzIGEgVFggY2xvY2sgZnJvbSB0aGUgU2VyRGVzLFxuJiM0MztcdCAqIHdoaWNoIGlzIG5lZWRlZCBmb3IgdGhlIHNvZnQgcmVzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X2luaXQocHhwY3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihweHBjcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHhwY3NfcmtfaW5pdF9yZXMocHhwY3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB4cGNzX3JrX2luaXRfY2xrKHB4cGNzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geHBjc19ya19pbml0X2J1cyhweHBjcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4cGNzX3JrX29mX2lkc1tdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyb2NrY2hpcCxyazM1NjgteHBjc1wmIzM0OyB9LFxuJiM0MztcdHsgLyogc2VudGluZWwgKi8gfSxcbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHBjc19ya19vZl9pZHMpO1xuJiM0MztcbiYjNDM7c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwY3NfbnA7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xuJiM0MztcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuJiM0MztcdHUzMiBwb3J0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4mIzQzO1xuJiM0MztcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZwb3J0KSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKChpbnQpcG9ydCkpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIFhQQ1MgcGRldiBpcyBhdHRhY2hlZCB0byB0aGUgcGFyZW50IG5vZGUgKi9cbiYjNDM7XHRwY3NfbnAgPSBvZl9nZXRfcGFyZW50KG5wKTtcbiYjNDM7XHRpZiAoIXBjc19ucClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGNzX25wKSkge1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQocGNzX25wKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFvZl9tYXRjaF9ub2RlKHhwY3Nfcmtfb2ZfaWRzLCBwY3NfbnApKSB7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChwY3NfbnApO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwY3NfbnApO1xuJiM0MztcdG9mX25vZGVfcHV0KHBjc19ucCk7XG4mIzQzO1x0aWYgKCFwZGV2KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXHUwMDI2cGRldi1cdTAwM2VkZXYsIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHtcbiYjNDM7XHRcdHB1dF9kZXZpY2UoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdGlmICghcHhwY3MgfHwgIXB4cGNzLVx1MDAzZWJ1cykge1xuJiM0MztcdFx0ZGV2aWNlX2xpbmtfcmVtb3ZlKGRldiwgXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0cHV0X2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHB4cGNzLVx1MDAzZWJ1cywgKGludClwb3J0KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHhwY3MpKSB7XG4mIzQzO1x0XHRkZXZpY2VfbGlua19yZW1vdmUoZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdHJldHVybiB4cGNzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eHBjc19jb25maWdfZWVlX211bHRfZmFjdCh4cGNzLCBweHBjcy1cdTAwM2VlZWVfbXVsdF9mYWN0KTtcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRyZXR1cm4geHBjcztcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh4cGNzX3JrX2NyZWF0ZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcbiYjNDM7XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtXHUwMDNlY3NyX2Nsayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtXHUwMDNlY3NyX2Nsayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUlVOVElNRV9ERVZfUE1fT1BTKHhwY3NfcmtfcG1fb3BzLFxuJiM0MztcdFx0XHQgICB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZCxcbiYjNDM7XHRcdFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3Jlc3VtZSxcbiYjNDM7XHRcdFx0ICAgTlVMTCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4cGNzX3JrX2RyaXZlciA9IHtcbiYjNDM7XHQucHJvYmUgPSB4cGNzX3JrX3Byb2JlLFxuJiM0MztcdC5kcml2ZXIgPSB7XG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3JrX3hwY3MtZHd4cGNzXCYjMzQ7LFxuJiM0MztcdFx0LnBtID0gcG1fcHRyKFx1MDAyNnhwY3NfcmtfcG1fb3BzKSxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZSA9IHhwY3Nfcmtfb2ZfaWRzLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeHBjc19ya19kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JvY2tjaGlwIFhQQ1MgcGxhdGZvcm0gZGV2aWNlIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Q29pYSBQcmFudCBcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXG5pbmRleCAwMzM3ZTJiY2MwMTI1Li44YzM4NzViNjk4NWI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXG5AQCAtNzYxLDcgJiM0Mzs3NjEsOSBAQCBzdGF0aWMgaW50IHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxuIFx0ICogICAgRFcgeFBDUyB1c2VkIHdpdGggRFcgRVFvUyBNQUMgaXMgYWx3YXlzIE1BQyBzaWRlIFNHTUlJLlxuIFx0ICogNCkgVlJfTUlJX0RJR19DVFJMMSBCaXQoOSkgW01BQ19BVVRPX1NXXSA9IDFiIChBdXRvbWF0aWNcbiBcdCAqICAgIHNwZWVkL2R1cGxleCBtb2RlIGNoYW5nZSBieSBIVyBhZnRlciBTR01JSSBBTiBjb21wbGV0ZSlcbi1cdCAqIDUpIFZSX01JSV9NTURfQ1RSTCBCaXQoMTIpIFtBTl9FTkFCTEVdID0gMWIgKEVuYWJsZSBTR01JSSBBTilcbiYjNDM7XHQgKiA1KSBWUl9NSUlfQU5fSU5UUl9TVFMgPSAweDAgKENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzKVxuJiM0MztcdCAqIDYpIFZSX01JSV9NTURfQ1RSTCBCaXQoMTIpIFtBTl9FTkFCTEVdID0gMWIgKEVuYWJsZSBTR01JSSBBTilcbiYjNDM7XHQgKiAgICBWUl9NSUlfTU1EX0NUUkwgQml0KDkpIFtBTl9SRVNUQVJUXSA9IDFiIChSZXN0YXJ0IFNHTUlJIEFOKVxuIFx0ICpcbiBcdCAqIE5vdGUgdGhhdCBWUl9NSUlfTU1EX0NUUkwgaXMgTUlJX0JNQ1IuXG4gXHQgKlxuQEAgLTc2OSw3ICYjNDM7NzcxLDE0IEBAIHN0YXRpYyBpbnQgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsXG4gXHQgKlx0IFNSX01JSV9BTl9BRFYuIE1BQyBzaWRlIFNHTUlJIHJlY2VpdmVzIEFOIFR4IENvbmZpZyBmcm9tXG4gXHQgKlx0IFBIWSBhYm91dCB0aGUgbGluayBzdGF0ZSBjaGFuZ2UgYWZ0ZXIgQzI4IEFOIGlzIGNvbXBsZXRlZFxuIFx0ICpcdCBiZXR3ZWVuIFBIWSBhbmQgTGluayBQYXJ0bmVyLiBUaGVyZSBpcyBhbHNvIG5vIG5lZWQgdG9cbi1cdCAqXHQgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSS5cbiYjNDM7XHQgKlx0IHRyaWdnZXIgQU4gcmVzdGFydCBmb3IgTUFDLXNpZGUgU0dNSUkgb24gbW9zdCBkZXZpY2VzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90ZTogV2hpbGUgdGhlIERlc2lnbldhcmUgZGF0YWJvb2sgc3RhdGVzIHRoYXQgQU4gcmVzdGFydCBpc1xuJiM0MztcdCAqXHQgbm90IG5lZWRlZCBmb3IgTUFDIHNpZGUgU0dNSUksIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuXG4mIzQzO1x0ICpcdCBSb2NrY2hpcCBSSzM1NjgpIGV4aGliaXQgYSB0aW1pbmcgcXVpcmsgd2hlbiBpbnRlZ3JhdGVkIHdpdGhcbiYjNDM7XHQgKlx0IHBoeWxpbmsgYW5kIGRvIG5vdCByZXN0YXJ0IEFOIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgbGlua1xuJiM0MztcdCAqXHQgY29tZXMgYmFjayB1cC4gQW4gZXhwbGljaXQgQU4gcmVzdGFydCBpcyByZXF1aXJlZCBvbiB0aG9zZVxuJiM0MztcdCAqXHQgcGFydHMgdG8gcmVjb3ZlciB0aGUgbGluayBhZnRlciBhIGRpc2Nvbm5lY3QuXG4gXHQgKi9cbiBcdG1kaW9fY3RybCA9IHhwY3NfcmVhZCh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IpO1xuIFx0aWYgKG1kaW9fY3RybCBcdTAwM2MgMClcbkBAIC04MTYsOSAmIzQzOzgyNSwxNCBAQCBzdGF0aWMgaW50IHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiYjNDM7XHQvKiBDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cyAqL1xuJiM0MztcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIERXX1ZSX01JSV9BTl9JTlRSX1NUUywgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0aWYgKG5lZ19tb2RlID09IFBIWUxJTktfUENTX05FR19JTkJBTkRfRU5BQkxFRClcbiBcdFx0cmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsXG4tXHRcdFx0XHQgbWRpb19jdHJsIHwgQk1DUl9BTkVOQUJMRSk7XG4mIzQzO1x0XHRcdFx0IG1kaW9fY3RybCB8IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xMDkzLDkgJiM0MzsxMTA3LDE4IEBAIHN0YXRpYyBpbnQgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cbi1cdGlmIChzdGF0ZS1cdTAwM2Vhbl9jb21wbGV0ZSlcbi1cdFx0eHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcbiYjNDM7XHRpZiAoc3RhdGUtXHUwMDNlYW5fY29tcGxldGUpIHtcbiYjNDM7XHRcdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cbiYjNDM7XHRcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIERXX1ZSX01JSV9BTl9JTlRSX1NUUywgMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIEluaXRpYXRlIHRoZSBuZXh0IHJvdW5kIG9mIEFOICovXG4mIzQzO1x0XHRyZXQgPSB4cGNzX21vZGlmeSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsIEJNQ1JfQU5SRVNUQVJULFxuJiM0MztcdFx0XHRcdCAgQk1DUl9BTlJFU1RBUlQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uN2I4NjdlNzUyMDA2NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3hwY3NfcGh5X3JlYWR5O1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfcGNpZTFsMF9zZWw7XG4gXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwxX3NlbDtcbiYjNDM7XHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9zZ21paV9tYWNfc2VsO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMF9wb3J0X2VuO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMV9wb3J0X2VuO1xuIH07XG5AQCAtMjEyLDYgJiM0MzsyMTMsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2IHtcbiBcdGJvb2wgZW5hYmxlX3NzYztcbiBcdGJvb2wgZXh0X3JlZmNsaztcbiBcdHN0cnVjdCBjbGsgKnJlZmNsaztcbiYjNDM7XHR1MzIgc2dtaWlfbWFjX3NlbDtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2LFxuQEAgLTM3NSw2ICYjNDM7Mzc3LDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9jb21icGh5X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlcbiBcbiBcdHByaXYtXHUwMDNlZXh0X3JlZmNsayA9IGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KGRldiwgXCYjMzQ7cm9ja2NoaXAsZXh0LXJlZmNsa1wmIzM0Oyk7XG4gXG4mIzQzO1x0cHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsID0gMTtcbiYjNDM7XHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcJiMzNDtyb2NrY2hpcCxzZ21paS1tYWMtc2VsXCYjMzQ7LCBcdTAwMjZwcml2LVx1MDAzZXNnbWlpX21hY19zZWwpO1xuJiM0MztcbiBcdHByaXYtXHUwMDNlcGh5X3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgXCYjMzQ7cGh5XCYjMzQ7KTtcbiBcdC8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi9cbiBcdGlmIChQVFJfRVJSKHByaXYtXHUwMDNlcGh5X3JzdCkgPT0gLUVOT0VOVClcbkBAIC04NzMsNiAmIzQzOzg3OCw4IEBAIHN0YXRpYyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBQSFlfVFlQRV9TR01JSTpcbiYjNDM7XHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaXBlX2dyZiwgXHUwMDI2Y2ZnLVx1MDAzZXBpcGVfc2dtaWlfbWFjX3NlbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsIFx1MDAzZSAwKTtcbiBcdFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVx1MDAzZXBpcGVfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV94cGNzX3BoeV9yZWFkeSwgdHJ1ZSk7XG4gXHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaHlfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV9waHltb2RlX3NlbCwgdHJ1ZSk7XG4gXHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaHlfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV9zZWxfcXNnbWlpLCB0cnVlKTtcbkBAIC05ODQsNiAmIzQzOzk5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcgcmszNTY4X2NvbWJwaHlfZ3JmY2ZncyA9IHtcbiBcdC5jb24zX2Zvcl9zYXRhXHRcdD0geyAweDAwMGMsIDE1LCAwLCAweDAwLCAweDQ0MDcgfSxcbiBcdC8qIHBpcGUtZ3JmICovXG4gXHQucGlwZV9jb24wX2Zvcl9zYXRhXHQ9IHsgMHgwMDAwLCAxNSwgMCwgMHgwMCwgMHgyMjIwIH0sXG4mIzQzO1x0LnBpcGVfc2dtaWlfbWFjX3NlbFx0PSB7IDB4MDA0MCwgMSwgMSwgMHgwMCwgMHgwMSB9LFxuIFx0LnBpcGVfeHBjc19waHlfcmVhZHlcdD0geyAweDAwNDAsIDIsIDIsIDB4MDAsIDB4MDEgfSxcbiBcdC51M290ZzBfcG9ydF9lblx0XHQ9IHsgMHgwMTA0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSxcbiBcdC51M290ZzFfcG9ydF9lblx0XHQ9IHsgMHgwMTQ0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIGIvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4NzIzZDViZDc1Y2Ncbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcbkBAIC0wLDAgJiM0MzsxLDExIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXG4mIzQzOyNkZWZpbmUgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZHdfeHBjcyAqeHBjc19ya19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgUm9ja2NoaXAgUkszNTY4IERlc2lnbldhcmUgRXRoZXJuZXQgUENTIChYUENTKSBhbmQgcmVmYWN0b3JzIFBDUyBpbml0aWFsaXphdGlvbiBpbiB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlciBmYW1pbHkgKGR3bWFjLXJrLCBkd21hYy1pbnRlbCwgZHdtYWMtcmVuZXNhcywgZHdtYWMtc29jZnBnYSwgZHdtYWMtcnpuMSkuIEFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpOiBkb2N1bWVudGF0aW9uL2RldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBhcm02NCBEVFMgY2hhbmdlcyBhcmUgbm9uLWV4ZWN1dGFibGUgb24gYW1kNjQsIGFuZCB0aGUgYWZmZWN0ZWQgZHJpdmVycyAoc3RtbWFjIGR3bWFjIHZhcmlhbnRzIGFuZCBTeW5vcHN5cyBEVyBYUENTKSByZXF1aXJlIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIG9yIHBoeXNpY2FsIEludGVsL1JvY2tjaGlwL1JlbmVzYXMgc2lsaWNvbiBub3QgZW11bGF0ZWQgYnkgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMTFmYzIxNWZhYmQ1ZmE5NTE3OWNjMzhiZDBiYTgxMWU2MGY5OTljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTY6MjU6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43MDNmY2ZmMGUzZjcwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbApAQCAtMCwwICYjNDM7MSwxMTAgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogUm9ja2NoaXAgUkszNTY4IFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUENTCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIENvaWEgUHJhbnQgJmx0O2NvaWFwcmFudEBnbWFpbC5jb20mZ3Q7CiYjNDM7CiYjNDM7ZGVzY3JpcHRpb246IHwKJiM0MzsgIFJvY2tjaGlwIFJLMzU2OCBTb0MgaW50ZWdyYXRlcyBhIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUGh5c2ljYWwKJiM0MzsgIENvZGluZyBTdWJsYXllciAoWFBDUykuCiYjNDM7ICBUaGUgUENTIHByb3ZpZGVzIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbCAoTUFDKQomIzQzOyAgYW5kIHRoZSBQaHlzaWNhbCBNZWRpdW0gQXR0YWNobWVudCAoUE1BKSBzdWJsYXllciB0aHJvdWdoIGEgTWVkaWEKJiM0MzsgIEluZGVwZW5kZW50IEludGVyZmFjZSAoR01JSSkuCiYjNDM7CiYjNDM7ICBUaGUgWFBDUyBpcyBhY2Nlc3NlZCBvdmVyIHRoZSBBUEIzIGJ1cyBhbmQgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gYQomIzQzOyAgTmFuZW5nIENvbWJvIFNlckRlcyBQSFkuCiYjNDM7ICBJdCBzdXBwb3J0cyAxMDAwQkFTRS1YLCBTR01JSSBhbmQgUVNHTUlJIG1vZGVzLgomIzQzOwomIzQzOyAgVGhlIGJsb2NrIGNvbnRhaW5zIGZvdXIgTUlJIHBvcnRzIHRoYXQgY2FuIGJlIGluZGl2aWR1YWxseSBlbmFibGVkIGFuZAomIzQzOyAgcm91dGVkIHRvIG9uZSBvZiB0aGUgRXRoZXJuZXQgR01BQyBjb250cm9sbGVycyB2aWEgdGhlIHBjcy1oYW5kbGUKJiM0MzsgIHByb3BlcnR5IGluIHRoZSBNQUMgZGV2aWNlIHRyZWUgbm9kZS4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgY29uc3Q6IHJvY2tjaGlwLHJrMzU2OC14cGNzCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICAmIzM0OyNhZGRyZXNzLWNlbGxzJiMzNDs6CiYjNDM7ICAgIGNvbnN0OiAxCiYjNDM7CiYjNDM7ICAmIzM0OyNzaXplLWNlbGxzJiMzNDs6CiYjNDM7ICAgIGNvbnN0OiAwCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEFQQjMgYnVzIGludGVyZmFjZSBjbG9jayAoY2xrX2Nzcl9pKSwgcmVxdWlyZWQgZm9yIHJlZ2lzdGVyIGFjY2VzcwomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEVFRSBjbG9jayAoY2xrX2VlZV9pKSwgcmVxdWlyZWQgZm9yIEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXQgb3BlcmF0aW9uCiYjNDM7CiYjNDM7ICBjbG9jay1uYW1lczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBjb25zdDogY3NyCiYjNDM7ICAgICAgLSBjb25zdDogZWVlCiYjNDM7CiYjNDM7ICBwaHlzOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgcGh5LW5hbWVzOgomIzQzOyAgICBjb25zdDogc2VyZGVzCiYjNDM7CiYjNDM7ICBwb3dlci1kb21haW5zOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOgomIzQzOyAgJiMzNDteZXRoZXJuZXQtcGNzLW1paUBbMC0zXSQmIzM0OzoKJiM0MzsgICAgdHlwZTogb2JqZWN0CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIE9uZSBvZiB0aGUgZm91ciBNSUkgcG9ydHMgb2YgdGhlIFhQQ1MuIFRoZSBwb3J0IGlzIGxpbmtlZCB0byBhbgomIzQzOyAgICAgIEV0aGVybmV0IE1BQyBjb250cm9sbGVyIHZpYSB0aGUgcGNzLWhhbmRsZSBwcm9wZXJ0eSBpbiB0aGUgTUFDJiMzOTtzCiYjNDM7ICAgICAgZGV2aWNlIHRyZWUgbm9kZS4KJiM0MzsKJiM0MzsgICAgcHJvcGVydGllczoKJiM0MzsgICAgICByZWc6CiYjNDM7ICAgICAgICBkZXNjcmlwdGlvbjogTUlJIHBvcnQgbnVtYmVyLgomIzQzOyAgICAgICAgZW51bTogWzAsIDEsIDIsIDNdCiYjNDM7CiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gcmVnCiYjNDM7CiYjNDM7ICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIHJlZwomIzQzOyAgLSAmIzM0OyNhZGRyZXNzLWNlbGxzJiMzNDsKJiM0MzsgIC0gJiMzNDsjc2l6ZS1jZWxscyYjMzQ7CiYjNDM7ICAtIGNsb2NrcwomIzQzOyAgLSBjbG9jay1uYW1lcwomIzQzOyAgLSBwaHlzCiYjNDM7ICAtIHBoeS1uYW1lcwomIzQzOyAgLSBwb3dlci1kb21haW5zCiYjNDM7CiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2Nsb2NrL3JrMzU2OC1jcnUuaCZndDsKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL3Bvd2VyL3JrMzU2OC1wb3dlci5oJmd0OwomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvcGh5L3BoeS5oJmd0OwomIzQzOwomIzQzOyAgICBldGhlcm5ldC1wY3NAZmRhMDAwMDAgewomIzQzOyAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3JvY2tjaGlwLHJrMzU2OC14cGNzJiMzNDs7CiYjNDM7ICAgICAgcmVnID0gJmx0OzB4ZmRhMDAwMDAgMHgyMDAwMDAmZ3Q7OwomIzQzOyAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO2NydSBQQ0xLX1hQQ1MmZ3Q7LCAmbHQ7JmFtcDtjcnUgQ0xLX1hQQ1NfRUVFJmd0OzsKJiM0MzsgICAgICBjbG9jay1uYW1lcyA9ICYjMzQ7Y3NyJiMzNDssICYjMzQ7ZWVlJiMzNDs7CiYjNDM7ICAgICAgcGh5cyA9ICZsdDsmYW1wO2NvbWJwaHkyIFBIWV9UWVBFX1NHTUlJJmd0OzsKJiM0MzsgICAgICBwaHktbmFtZXMgPSAmIzM0O3NlcmRlcyYjMzQ7OwomIzQzOyAgICAgIHBvd2VyLWRvbWFpbnMgPSAmbHQ7JmFtcDtwb3dlciBSSzM1NjhfUERfUElQRSZndDs7CiYjNDM7CiYjNDM7ICAgICAgZXRoZXJuZXQtcGNzLW1paUAwIHsKJiM0MzsgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICB9OwomIzQzOyAgICB9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yb2NrY2hpcC1kd21hYy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yb2NrY2hpcC1kd21hYy55YW1sCmluZGV4IDgwYzI1Mjg0NTM0OWMuLjY3YjIxZWE3N2VjOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcm9ja2NoaXAtZHdtYWMueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWwKQEAgLTEyMCw2ICYjNDM7MTIwLDEyIEBAIHByb3BlcnRpZXM6CiAgICAgbWF4aW11bTogMHg3RgogICAgIGRlZmF1bHQ6IDB4MTAKIAomIzQzOyAgcGNzLWhhbmRsZToKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgU3BlY2lmaWVzIGEgcmVmZXJlbmNlIHRvIGEgbm9kZSByZXByZXNlbnRpbmcgdGhlIFBDUyBkZXZpY2UKJiM0MzsgICAgICBjb25uZWN0ZWQgdG8gdGhpcyBHTUFDLiBSZXF1aXJlZCB3aGVuIHBoeS1tb2RlIGlzICYjMzQ7c2dtaWkmIzM0Oy4KJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKICAgcGh5LXN1cHBseToKICAgICBkZXNjcmlwdGlvbjogUEhZIHJlZ3VsYXRvcgogCkBAIC0xNTksNiAmIzQzOzE2NSwxNSBAQCBhbGxPZjoKICAgICAgICAgY2xvY2tzOgogICAgICAgICAgIG1pbkl0ZW1zOiA1CiAKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHBoeS1tb2RlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBjb25zdDogc2dtaWkKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gcGNzLWhhbmRsZQomIzQzOwogdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQogCiBleGFtcGxlczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sCmluZGV4IDM3OWIwOGJkOWU5N2EuLjhlODk4YmNlOWFmNzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbApAQCAtODAsNiAmIzQzOzgwLDE1IEBAIHByb3BlcnRpZXM6CiAgICAgZGVzY3JpcHRpb246CiAgICAgICBTb21lIGFkZGl0aW9uYWwgcGlwZSBzZXR0aW5ncyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBHUkYgcmVncy4KIAomIzQzOyAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyCiYjNDM7ICAgIGVudW06IFswLCAxXQomIzQzOyAgICBkZWZhdWx0OiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFNlbGVjdCBnbWFjMCBvciBnbWFjMSB0byBiZSB1c2VkIGFzIFNHTUlJIGNvbnRyb2xsZXIuCiYjNDM7ICAgICAgVGhlIGhhcmR3YXJlIHJlc2V0IHZhbHVlIGlzIEdNQUMxICgxKS4gU2V0IHRoaXMgdG8gMCB0byByb3V0ZQomIzQzOyAgICAgIFNHTUlJIHRvIEdNQUMwLgomIzQzOwogICAmIzM0OyNwaHktY2VsbHMmIzM0OzoKICAgICBjb25zdDogMQogCkBAIC0xMDUsNiAmIzQzOzExNCwxMCBAQCBhbGxPZjoKICAgICAgICAgICBtYXhJdGVtczogMQogICAgICAgICByZXNldC1uYW1lczoKICAgICAgICAgICBtYXhJdGVtczogMQomIzQzOyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogdHJ1ZQomIzQzOyAgICBlbHNlOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiBmYWxzZQogICAtIGlmOgogICAgICAgcHJvcGVydGllczoKICAgICAgICAgY29tcGF0aWJsZToKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggM2IyZWIyYTdhODlhOC4uZjUzYTUxOWRhNjI5OCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTIzNzM5LDYgJiM0MzsyMzczOSwxNSBAQCBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcm9ja2NoaXAscmszNTc2LXNhaS55YW1sCiBGOglzb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfc2FpLioKIAomIzQzO1JPQ0tDSElQIFhQQ1MgRFJJVkVSCiYjNDM7TToJQ29pYSBQcmFudCAmbHQ7Y29pYXByYW50QGdtYWlsLmNvbSZndDsKJiM0MztMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiYjNDM7TDoJbGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZwomIzQzO1M6CU1haW50YWluZWQKJiM0MztGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sCiYjNDM7RjoJZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMKJiM0MztGOglpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oCiYjNDM7CiBST0NLRVIgRFJJVkVSCiBNOglKaXJpIFBpcmtvICZsdDtqaXJpQHJlc251bGxpLnVzJmd0OwogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0cwppbmRleCA1OGMxMDUyYmE4ZWYzLi5mZGFhNGEyYTQzMjhiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0cwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0cwpAQCAtMyw2ICYjNDM7Myw3IEBACiAvZHRzLXYxLzsKIAogI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oJmd0OwogI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL3BpbmN0cmwvcm9ja2NoaXAuaCZndDsKICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9zb2Mvcm9ja2NoaXAsdm9wMi5oJmd0OwogI2luY2x1ZGUgJiMzNDtyazM1NjguZHRzaSYjMzQ7CkBAIC0yNDEsNiAmIzQzOzI0Miw3IEBAICZhbXA7Y29tYnBoeTEgewogfTsKIAogJmFtcDtjb21icGh5MiB7CiYjNDM7CXJvY2tjaGlwLHNnbWlpLW1hYy1zZWwgPSAmbHQ7MCZndDs7CiAJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiB9OwogCkBAIC0yNjAsOSAmIzQzOzI2MiwxOCBAQCAmYW1wO2NwdTMgewogCWNwdS1zdXBwbHkgPSAmbHQ7JmFtcDt2ZGRfY3B1Jmd0OzsKIH07CiAKLS8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAocmVxdWlyZSBTR01JSSkgKi8KJiM0MzsvKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKi8KICZhbXA7Z21hYzAgewotCXN0YXR1cyA9ICYjMzQ7ZGlzYWJsZWQmIzM0OzsKJiM0MzsJYXNzaWduZWQtY2xvY2tzID0gJmx0OyZhbXA7Y3J1IFNDTEtfR01BQzBfUlhfVFgmZ3Q7OwomIzQzOwlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gJmx0OyZhbXA7Y2xrX2dtYWMwX3hwY3NfbWlpJmd0OzsKJiM0MzsJbWFuYWdlZCA9ICYjMzQ7aW4tYmFuZC1zdGF0dXMmIzM0OzsKJiM0MzsJcGNzLWhhbmRsZSA9ICZsdDsmYW1wO3hwY3NfbWlpMCZndDs7CiYjNDM7CXBoeS1oYW5kbGUgPSAmbHQ7JmFtcDtzZ21paV9waHkmZ3Q7OwomIzQzOwlwaHktbW9kZSA9ICYjMzQ7c2dtaWkmIzM0OzsKJiM0MzsJcGh5LXN1cHBseSA9ICZsdDsmYW1wO3ZjY18zdjMmZ3Q7OwomIzQzOwlwaW5jdHJsLW5hbWVzID0gJiMzNDtkZWZhdWx0JiMzNDs7CiYjNDM7CXBpbmN0cmwtMCA9ICZsdDsmYW1wO2dtYWMwX21paW0mZ3Q7OwomIzQzOwlzdGF0dXMgPSAmIzM0O29rYXkmIzM0OzsKIH07CiAKIC8qIE1vdG9yY29tbSBZVDg1MjFTQyBXQU4gcG9ydCAqLwpAQCAtMzQxLDYgJiM0MzszNTIsMzYgQEAgJmFtcDtpMnMwXzhjaCB7CiAJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiB9OwogCiYjNDM7JmFtcDttZGlvMCB7CiYjNDM7CXNnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMgewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjImIzM0OzsKJiM0MzsJCXJlZyA9ICZsdDsweDMmZ3Q7OwomIzQzOwkJbWF4LXNwZWVkID0gJmx0OzEwMDAmZ3Q7OwomIzQzOwkJcmVzZXQtYXNzZXJ0LXVzID0gJmx0OzIwMDAwJmd0OzsKJiM0MzsJCXJlc2V0LWRlYXNzZXJ0LXVzID0gJmx0OzEwMDAwMCZndDs7CiYjNDM7CQlyZXNldC1ncGlvcyA9ICZsdDsmYW1wO2dwaW8zIFJLX1BDNiBHUElPX0FDVElWRV9MT1cmZ3Q7OwomIzQzOwomIzQzOwkJbGVkcyB7CiYjNDM7CQkJI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CQkJI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7CQkJbGVkQDEgewomIzQzOwkJCQlyZWcgPSAmbHQ7MSZndDs7CiYjNDM7CQkJCWNvbG9yID0gJmx0O0xFRF9DT0xPUl9JRF9BTUJFUiZndDs7CiYjNDM7CQkJCWZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjsKJiM0MzsJCQkJZGVmYXVsdC1zdGF0ZSA9ICYjMzQ7a2VlcCYjMzQ7OwomIzQzOwkJCX07CiYjNDM7CiYjNDM7CQkJbGVkQDIgewomIzQzOwkJCQlyZWcgPSAmbHQ7MiZndDs7CiYjNDM7CQkJCWNvbG9yID0gJmx0O0xFRF9DT0xPUl9JRF9HUkVFTiZndDs7CiYjNDM7CQkJCWZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjsKJiM0MzsJCQkJZGVmYXVsdC1zdGF0ZSA9ICYjMzQ7a2VlcCYjMzQ7OwomIzQzOwkJCX07CiYjNDM7CQl9OwomIzQzOwl9OwomIzQzO307CiYjNDM7CiAmYW1wO21kaW8xIHsKIAlyZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHsKIAkJY29tcGF0aWJsZSA9ICYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjImIzM0OzsKQEAgLTM1MCw2ICYjNDM7MzkxLDI1IEBAIHJnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMgewogCQlyZXNldC1ncGlvcyA9ICZsdDsmYW1wO2dwaW80IFJLX1BDMCBHUElPX0FDVElWRV9MT1cmZ3Q7OwogCQlyeC1pbnRlcm5hbC1kZWxheS1wcyA9ICZsdDsxNTAwJmd0OzsKIAkJdHgtaW50ZXJuYWwtZGVsYXktcHMgPSAmbHQ7MTUwMCZndDs7CiYjNDM7CiYjNDM7CQlsZWRzIHsKJiM0MzsJCQkjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsJCQkjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsJCQlsZWRAMSB7CiYjNDM7CQkJCXJlZyA9ICZsdDsxJmd0OzsKJiM0MzsJCQkJY29sb3IgPSAmbHQ7TEVEX0NPTE9SX0lEX0FNQkVSJmd0OzsKJiM0MzsJCQkJZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOOwomIzQzOwkJCQlkZWZhdWx0LXN0YXRlID0gJiMzNDtrZWVwJiMzNDs7CiYjNDM7CQkJfTsKJiM0MzsKJiM0MzsJCQlsZWRAMiB7CiYjNDM7CQkJCXJlZyA9ICZsdDsyJmd0OzsKJiM0MzsJCQkJY29sb3IgPSAmbHQ7TEVEX0NPTE9SX0lEX0dSRUVOJmd0OzsKJiM0MzsJCQkJZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOOwomIzQzOwkJCQlkZWZhdWx0LXN0YXRlID0gJiMzNDtrZWVwJiMzNDs7CiYjNDM7CQkJfTsKJiM0MzsJCX07CiAJfTsKIH07CiAKQEAgLTU4NiwzICYjNDM7NjQ2LDEzIEBAICZhbXA7eGluMzJrIHsKIAlwaW5jdHJsLW5hbWVzID0gJiMzNDtkZWZhdWx0JiMzNDs7CiAJcGluY3RybC0wID0gJmx0OyZhbXA7Y2xrMzJrX291dDEmZ3Q7OwogfTsKJiM0MzsKJiM0MzsmYW1wO3hwY3MgewomIzQzOwlwaHlzID0gJmx0OyZhbXA7Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUkmZ3Q7OwomIzQzOwlwaHktbmFtZXMgPSAmIzM0O3NlcmRlcyYjMzQ7OwomIzQzOwlzdGF0dXMgPSAmIzM0O29rYXkmIzM0OzsKJiM0Mzt9OwomIzQzOwomIzQzOyZhbXA7eHBjc19taWkwIHsKJiM0MzsJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiYjNDM7fTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpCmluZGV4IDNiYzY1M2YwMjdmMWYuLjIyN2QwM2UzMzYwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaQpAQCAtMTEwLDYgJiM0MzsxMTAsNTEgQEAgc2F0YTA6IHNhdGFAZmMwMDAwMDAgewogCQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiAJfTsKIAomIzQzOwl4cGNzOiBldGhlcm5ldC1wY3NAZmRhMDAwMDAgewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7cm9ja2NoaXAscmszNTY4LXhwY3MmIzM0OzsKJiM0MzsJCSNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOwkJI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CQlyZWcgPSAmbHQ7MHgwIDB4ZmRhMDAwMDAgMHgwIDB4MjAwMDAwJmd0OzsKJiM0MzsJCWNsb2NrcyA9ICZsdDsmYW1wO2NydSBQQ0xLX1hQQ1MmZ3Q7LCAmbHQ7JmFtcDtjcnUgQ0xLX1hQQ1NfRUVFJmd0OzsKJiM0MzsJCWNsb2NrLW5hbWVzID0gJiMzNDtjc3ImIzM0OywgJiMzNDtlZWUmIzM0OzsKJiM0MzsJCXBvd2VyLWRvbWFpbnMgPSAmbHQ7JmFtcDtwb3dlciBSSzM1NjhfUERfUElQRSZndDs7CiYjNDM7CQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CiYjNDM7CQl4cGNzX21paTA6IGV0aGVybmV0LXBjcy1taWlAMCB7CiYjNDM7CQkJcmVnID0gJmx0OzAmZ3Q7OwomIzQzOwkJCXN0YXR1cyA9ICYjMzQ7ZGlzYWJsZWQmIzM0OzsKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQl4cGNzX21paTE6IGV0aGVybmV0LXBjcy1taWlAMSB7CiYjNDM7CQkJcmVnID0gJmx0OzEmZ3Q7OwomIzQzOwkJCXN0YXR1cyA9ICYjMzQ7ZGlzYWJsZWQmIzM0OzsKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQl4cGNzX21paTI6IGV0aGVybmV0LXBjcy1taWlAMiB7CiYjNDM7CQkJcmVnID0gJmx0OzImZ3Q7OwomIzQzOwkJCXN0YXR1cyA9ICYjMzQ7ZGlzYWJsZWQmIzM0OzsKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQl4cGNzX21paTM6IGV0aGVybmV0LXBjcy1taWlAMyB7CiYjNDM7CQkJcmVnID0gJmx0OzMmZ3Q7OwomIzQzOwkJCXN0YXR1cyA9ICYjMzQ7ZGlzYWJsZWQmIzM0OzsKJiM0MzsJCX07CiYjNDM7CX07CiYjNDM7CiYjNDM7CWNsa19nbWFjMF94cGNzX21paTogY2xvY2steHBjcy1nbWFjMCB7CiYjNDM7CQljb21wYXRpYmxlID0gJiMzNDtmaXhlZC1jbG9jayYjMzQ7OwomIzQzOwkJY2xvY2stZnJlcXVlbmN5ID0gJmx0OzEyNTAwMDAwMCZndDs7CiYjNDM7CQljbG9jay1vdXRwdXQtbmFtZXMgPSAmIzM0O2Nsa19nbWFjMF94cGNzX21paSYjMzQ7OwomIzQzOwkJI2Nsb2NrLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwl9OwomIzQzOwomIzQzOwljbGtfZ21hYzFfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzEgewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7Zml4ZWQtY2xvY2smIzM0OzsKJiM0MzsJCWNsb2NrLWZyZXF1ZW5jeSA9ICZsdDsxMjUwMDAwMDAmZ3Q7OwomIzQzOwkJY2xvY2stb3V0cHV0LW5hbWVzID0gJiMzNDtjbGtfZ21hYzFfeHBjc19taWkmIzM0OzsKJiM0MzsJCSNjbG9jay1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsJfTsKJiM0MzsKIAlwaXBlX3BoeV9ncmYwOiBzeXNjb25AZmRjNzAwMDAgewogCQljb21wYXRpYmxlID0gJiMzNDtyb2NrY2hpcCxyazM1NjgtcGlwZS1waHktZ3JmJiMzNDssICYjMzQ7c3lzY29uJiMzNDs7CiAJCXJlZyA9ICZsdDsweDAgMHhmZGM3MDAwMCAweDAgMHgxMDAwJmd0OzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnCmluZGV4IGUzZGQ1YWRkYTVhY2EuLjUwODhhY2MwNjk4MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZwpAQCAtMTcwLDYgJiM0MzsxNzAsNyBAQCBjb25maWcgRFdNQUNfUk9DS0NISVAKIAlkZWZhdWx0IEFSQ0hfUk9DS0NISVAKIAlkZXBlbmRzIG9uIE9GICZhbXA7JmFtcDsgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKQogCXNlbGVjdCBNRkRfU1lTQ09OCiYjNDM7CXNlbGVjdCBQQ1NfWFBDU19ST0NLQ0hJUAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszMjg4IFNvQy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMKaW5kZXggZjVmOWZhNjdlY2Q3Ny4uNDMwOGRjY2JmMjU3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jCkBAIC02MDMsMTMgJiM0Mzs2MDMsNDcgQEAgc3RhdGljIHZvaWQgY29tbW9uX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpCiAJcGxhdC0mZ3Q7bWRpb19idXNfZGF0YS0mZ3Q7bmVlZHNfcmVzZXQgPSB0cnVlOwogfQogCiYjNDM7c3RhdGljIGludCBpbnRlbF9tZ2JlX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTsKJiM0MzsJc3RydWN0IGR3X3hwY3MgKnhwY3M7CiYjNDM7CWludCBhZGRyOwomIzQzOwomIzQzOwlkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LSZndDtkZXZpY2UpOwomIzQzOwomIzQzOwlpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgJiMzNDtwY3MtaGFuZGxlJiMzNDspKSB7CiYjNDM7CQlwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7LCAwKTsKJiM0MzsJCXhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7CiYjNDM7CQlmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWFkZHIgPSBmZnMocHJpdi0mZ3Q7cGxhdC0mZ3Q7bWRpb19idXNfZGF0YS0mZ3Q7cGNzX21hc2spIC0gMTsKJiM0MzsJCXhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtJmd0O21paSwgYWRkcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKElTX0VSUih4cGNzKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHhwY3MpOwomIzQzOwomIzQzOwl4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtJmd0O3BsYXQtJmd0O211bHRfZmFjdF8xMDBucyk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGludGVsX21nYmVfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7eHBjcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJeHBjc19kZXN0cm95KHByaXYtJmd0O2h3LSZndDt4cGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3hwY3MgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmludGVsX21nYmVfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJCQkJCQkgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKIHsKLQkvKiBwbGF0LSZndDttZGlvX2J1c19kYXRhLSZndDtoYXNfeHBjcyBoYXMgYmVlbiBzZXQgdHJ1ZSwgc28gdGhlcmUKLQkgKiBzaG91bGQgYWx3YXlzIGJlIGFuIFhQQ1MuIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGFsd2F5cwotCSAqIHJldHVybiB0aGlzIGlmIHByZXNlbnQuCi0JICovCiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKIAlyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LSZndDtody0mZ3Q7eHBjcyk7CiB9CiAKQEAgLTczMyw2ICYjNDM7NzY3LDggQEAgc3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCSAgICBwbGF0LSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpIHsKIAkJcGxhdC0mZ3Q7bWRpb19idXNfZGF0YS0mZ3Q7cGNzX21hc2sgPSBCSVRfVTMyKElOVEVMX01HQkVfWFBDU19BRERSKTsKIAkJcGxhdC0mZ3Q7ZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlOwomIzQzOwkJcGxhdC0mZ3Q7cGNzX2luaXQgPSBpbnRlbF9tZ2JlX3Bjc19pbml0OwomIzQzOwkJcGxhdC0mZ3Q7cGNzX2V4aXQgPSBpbnRlbF9tZ2JlX3Bjc19leGl0OwogCQlwbGF0LSZndDtzZWxlY3RfcGNzID0gaW50ZWxfbWdiZV9zZWxlY3RfcGNzOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jCmluZGV4IDE5ZjM0ZTE4YmZlZjIuLjlhZjMyYzI2ZjljMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMKQEAgLTgxLDggJiM0Mzs4MSwxMSBAQCBzdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAKIHN0YXRpYyB2b2lkIHJlbmVzYXNfZ21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7Ci0JaWYgKHByaXYtJmd0O2h3LSZndDtwaHlsaW5rX3BjcykKLQkJbWlpY19kZXN0cm95KHByaXYtJmd0O2h3LSZndDtwaHlsaW5rX3Bjcyk7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltaWljX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzID0gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmVuZXNhc19nbWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmMKaW5kZXggOGQ3MDQyZTY4OTI2MS4uYjNkNzQ2ZGQ5NjZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWZkL3N5c2Nvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY3MvcGNzLXhwY3MtcmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbV9ydW50aW1lLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7c3RtbWFjX3BsYXRmb3JtLmgmIzM0OwpAQCAtNDcsNiAmIzQzOzQ4LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHsKIAl2b2lkICgqc2V0X3RvX3JnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdiwKIAkJCSAgICAgaW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpOwogCXZvaWQgKCpzZXRfdG9fcm1paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpOwomIzQzOwl2b2lkICgqc2V0X3RvX3NnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7CiAJaW50ICgqc2V0X3NwZWVkKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdiwKIAkJCSBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQpOwogCXZvaWQgKCppbnRlZ3JhdGVkX3BoeV9wb3dlcnVwKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7CkBAIC02Myw2ICYjNDM7NjUsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMgewogCWJvb2wgY2xvY2tfZ3JmX3JlZ19pbl9waHA7CiAJYm9vbCBzdXBwb3J0c19yZ21paTsKIAlib29sIHN1cHBvcnRzX3JtaWk7CiYjNDM7CWJvb2wgc3VwcG9ydHNfc2dtaWk7CiAJYm9vbCBwaHBfZ3JmX3JlcXVpcmVkOwogCWJvb2wgcmVnc192YWxpZDsKIAl1MzIgcmVnc1tdOwpAQCAtOTgsNiAmIzQzOzEwMSw3IEBAIHN0cnVjdCBya19wcml2X2RhdGEgewogCWJvb2wgaW50ZWdyYXRlZF9waHk7CiAJYm9vbCBzdXBwb3J0c19yZ21paTsKIAlib29sIHN1cHBvcnRzX3JtaWk7CiYjNDM7CWJvb2wgc3VwcG9ydHNfc2dtaWk7CiAKIAlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqY2xrczsKIAlpbnQgbnVtX2Nsa3M7CkBAIC04MDksNiAmIzQzOzgxMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTI4X29wcyA9IHsKICNkZWZpbmUgUkszNTY4X0dSRl9HTUFDMV9DT04xCQkweDAzOGMKIAogLyogUkszNTY4X0dSRl9HTUFDMF9DT04xICZhbXA7JmFtcDsgUkszNTY4X0dSRl9HTUFDMV9DT04xICovCiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkJCUdSRl9DTFJfQklUKDcpCiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSQkJR1JGX0JJVCg3KQogI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkwJCQlHUkZfQklUKDMpCiAjZGVmaW5lIFJLMzU2OF9HTUFDX0ZMT1dfQ1RSTF9DTFIJCUdSRl9DTFJfQklUKDMpCiAjZGVmaW5lIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUJCUdSRl9CSVQoMSkKQEAgLTgzNiw2ICYjNDM7ODQyLDE2IEBAIHN0YXRpYyBpbnQgcmszNTY4X2luaXQoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgcmszNTY4X3NldF90b19ybWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQomIzQzO3sKJiM0MzsJdTMyIGNvbjE7CiYjNDM7CiYjNDM7CWNvbjEgPSAoYnNwX3ByaXYtJmd0O2lkID09IDEpID8gUkszNTY4X0dSRl9HTUFDMV9DT04xIDoKJiM0MzsJCQkJICAgICBSSzM1NjhfR1JGX0dNQUMwX0NPTjE7CiYjNDM7CiYjNDM7CXJlZ21hcF93cml0ZShic3BfcHJpdi0mZ3Q7Z3JmLCBjb24xLCBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsCiAJCQkJaW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpCiB7CkBAIC04NTEsMTkgJiM0Mzs4NjcsMzEgQEAgc3RhdGljIHZvaWQgcmszNTY4X3NldF90b19yZ21paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdiwKIAkJICAgICBSSzM1NjhfR01BQ19DTEtfVFhfRExfQ0ZHKHR4X2RlbGF5KSk7CiAKIAlyZWdtYXBfd3JpdGUoYnNwX3ByaXYtJmd0O2dyZiwgY29uMSwKJiM0MzsJCSAgICAgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJIHwKIAkJICAgICBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFIHwKIAkJICAgICBSSzM1NjhfR01BQ19UWENMS19ETFlfRU5BQkxFKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fc2dtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiYjNDM7ewomIzQzOwl1MzIgY29uMTsKJiM0MzsKJiM0MzsJY29uMSA9IChic3BfcHJpdi0mZ3Q7aWQgPT0gMSkgPyBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgOgomIzQzOwkJCQkgICAgIFJLMzU2OF9HUkZfR01BQzBfQ09OMTsKJiM0MzsKJiM0MzsJcmVnbWFwX3dyaXRlKGJzcF9wcml2LSZndDtncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzIHJrMzU2OF9vcHMgPSB7CiAJLmluaXQgPSByazM1NjhfaW5pdCwKJiM0MzsJLnNldF90b19ybWlpID0gcmszNTY4X3NldF90b19ybWlpLAogCS5zZXRfdG9fcmdtaWkgPSByazM1Njhfc2V0X3RvX3JnbWlpLAomIzQzOwkuc2V0X3RvX3NnbWlpID0gcmszNTY4X3NldF90b19zZ21paSwKJiM0MzsKIAkuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsCiAKIAkuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLAogCi0JLnN1cHBvcnRzX3JtaWkgPSB0cnVlLAotCiAJLnJlZ3NfdmFsaWQgPSB0cnVlLAogCS5yZWdzID0gewogCQkweGZlMmEwMDAwLCAvKiBnbWFjMCAqLwpAQCAtMTIwOCw2ICYjNDM7MTIzNiw0MyBAQCBzdGF0aWMgdm9pZCBya19waHlfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCQlkZXZfZXJyKGJzcF9wcml2LSZndDtkZXYsICYjMzQ7ZmFpbCB0byBkaXNhYmxlIHBoeS1zdXBwbHlcbiYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcmtfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtJmd0O2RldmljZS0mZ3Q7b2Zfbm9kZTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpwY3Nfbm9kZTsKJiM0MzsJc3RydWN0IGR3X3hwY3MgKnhwY3M7CiYjNDM7CiYjNDM7CXBjc19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgJiMzNDtwY3MtaGFuZGxlJiMzNDssIDApOwomIzQzOwlpZiAoIXBjc19ub2RlKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXhwY3MgPSB4cGNzX3JrX2NyZWF0ZShwcml2LSZndDtkZXZpY2UsIHBjc19ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQocGNzX25vZGUpOwomIzQzOwlpZiAoSVNfRVJSKHhwY3MpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoeHBjcyk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJrX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXhwY3NfZGVzdHJveShwcml2LSZndDtody0mZ3Q7eHBjcyk7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiYjNDM7CQkJCQkgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi0mZ3Q7aHctJmd0O3hwY3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJCSAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0LAogCQkJCQkgIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyAqb3BzKQpAQCAtMTMzMCw2ICYjNDM7MTM5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAKIAlic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfcmdtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3JnbWlpIHx8ICEhb3BzLSZndDtzZXRfdG9fcmdtaWk7CiAJYnNwX3ByaXYtJmd0O3N1cHBvcnRzX3JtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3JtaWkgfHwgISFvcHMtJmd0O3NldF90b19ybWlpOwomIzQzOwlic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfc2dtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3NnbWlpIHx8ICEhb3BzLSZndDtzZXRfdG9fc2dtaWk7CiAKIAlpZiAob3BzLSZndDtpbml0KSB7CiAJCXJldCA9IG9wcy0mZ3Q7aW5pdChic3BfcHJpdik7CkBAIC0xMzYxLDYgJiM0MzsxNDI3LDEwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19jaGVja19vcHMoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWlmICghYnNwX3ByaXYtJmd0O3N1cHBvcnRzX3JtaWkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgomIzQzOwkJaWYgKCFic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfc2dtaWkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGJzcF9wcml2LSZndDtkZXYsCiAJCQkmIzM0O3Vuc3VwcG9ydGVkIGludGVyZmFjZSAlZCYjMzQ7LCBic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKTsKQEAgLTEzNzksMTYgJiM0MzsxNDQ5LDE5IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJcmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKJiM0MzsJCWdvdG8gc2V0X21vZGU7CiYjNDM7CiAJcmV0ID0gcmtfZ2V0X3BoeV9pbnRmX3NlbChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKTsKIAlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gY2xrX2Rpc2FibGU7CiAKIAlpbnRmID0gcmV0OwogCi0JcmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWYgKGJzcF9wcml2LSZndDtnbWFjX3BoeV9pbnRmX3NlbF9tYXNrIHx8CiAJICAgIGJzcF9wcml2LSZndDtnbWFjX3JtaWlfbW9kZV9tYXNrKSB7CiAJCS8qIElmIGRlZmluZWQsIGVuY29kZSB0aGUgcGh5X2ludGZfc2VsIHZhbHVlICovCkBAIC0xMzk5LDEwICYjNDM7MTQ3Miw4IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCQkJCSAgICAgIGJzcF9wcml2LSZndDtnbWFjX3JtaWlfbW9kZV9tYXNrKTsKIAogCQlyZXQgPSBya193cml0ZV9nbWFjX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7Ci0JCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xrX2Rpc2FibGU7CiAJfQogCiAJaWYgKGJzcF9wcml2LSZndDtjbG9jay5ybWlpX21vZGVfbWFzaykgewpAQCAtMTQxMCwxMyAmIzQzOzE0ODEsMTIgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCQkJICAgICBic3BfcHJpdi0mZ3Q7Y2xvY2sucm1paV9tb2RlX21hc2spOwogCiAJCXJldCA9IHJrX3dyaXRlX2Nsb2NrX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7Ci0JCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xrX2Rpc2FibGU7CiAJfQogCi0JLypybWlpIG9yIHJnbWlpKi8KJiM0MztzZXRfbW9kZToKJiM0MzsJLyogcm1paSwgcmdtaWksIHNnbWlpICovCiAJc3dpdGNoIChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKSB7CiAJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6CiAJCWRldl9pbmZvKGRldiwgJiMzNDtpbml0IGZvciBSR01JSVxuJiMzNDspOwpAQCAtMTQ0NywxNSAmIzQzOzE1MTcsMjAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWlmIChic3BfcHJpdi0mZ3Q7b3BzLSZndDtzZXRfdG9fcm1paSkKIAkJCWJzcF9wcml2LSZndDtvcHMtJmd0O3NldF90b19ybWlpKGJzcF9wcml2KTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgomIzQzOwkJZGV2X2luZm8oZGV2LCAmIzM0O2luaXQgZm9yIFNHTUlJXG4mIzM0Oyk7CiYjNDM7CQlpZiAoYnNwX3ByaXYtJmd0O29wcy0mZ3Q7c2V0X3RvX3NnbWlpKQomIzQzOwkJCWJzcF9wcml2LSZndDtvcHMtJmd0O3NldF90b19zZ21paShic3BfcHJpdik7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGRldiwgJiMzNDtOTyBpbnRlcmZhY2UgZGVmaW5lZCFcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGNsa19kaXNhYmxlOwogCX0KIAogCXJldCA9IHJrX3BoeV9wb3dlcnVwKGJzcF9wcml2KTsKLQlpZiAocmV0KSB7Ci0JCWdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpOwotCQlyZXR1cm4gcmV0OwotCX0KJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2xrX2Rpc2FibGU7CiAKIAlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CiAKQEAgLTE0NjMsNiAmIzQzOzE1MzgsMTAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWJzcF9wcml2LSZndDtvcHMtJmd0O2ludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2xrX2Rpc2FibGU6CiYjNDM7CWdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBya19nbWFjX3Bvd2VyZG93bihzdHJ1Y3QgcmtfcHJpdl9kYXRhICpnbWFjKQpAQCAtMTQ4Niw2ICYjNDM7MTU2NSw5IEBAIHN0YXRpYyB2b2lkIHJrX2dldF9pbnRlcmZhY2VzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCAqYnNwX3ByaXYsCiAKIAlpZiAocmstJmd0O3N1cHBvcnRzX3JtaWkpCiAJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CWlmIChyay0mZ3Q7c3VwcG9ydHNfc2dtaWkpCiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLCBpbnRlcmZhY2VzKTsKIH0KIAogc3RhdGljIGludCBya19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXZfLCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSwKQEAgLTE2MDIsNiAmIzQzOzE2ODQsMTcgQEAgc3RhdGljIGludCBya19nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcGxhdF9kYXQtJmd0O3N1c3BlbmQgPSBya19nbWFjX3N1c3BlbmQ7CiAJcGxhdF9kYXQtJmd0O3Jlc3VtZSA9IHJrX2dtYWNfcmVzdW1lOwogCiYjNDM7CWlmIChwbGF0X2RhdC0mZ3Q7cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHsKJiM0MzsJCS8qIFNHTUlJIGNsb2NrIGFsd2F5cyBydW5zIGF0IDEyNSBNSHogKi8KJiM0MzsJCXBsYXRfZGF0LSZndDtzZXRfY2xrX3R4X3JhdGUgPSBOVUxMOwomIzQzOwomIzQzOwkJLyogU0dNSUkgcmVxdWlyZXMgYSBQQ1MgKi8KJiM0MzsJCXBsYXRfZGF0LSZndDtkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7CiYjNDM7CQlwbGF0X2RhdC0mZ3Q7cGNzX2luaXQgPSBya19wY3NfaW5pdDsKJiM0MzsJCXBsYXRfZGF0LSZndDtwY3NfZXhpdCA9IHJrX3Bjc19leGl0OwomIzQzOwkJcGxhdF9kYXQtJmd0O3NlbGVjdF9wY3MgPSBya19zZWxlY3RfcGNzOwomIzQzOwl9CiYjNDM7CiAJcGxhdF9kYXQtJmd0O2JzcF9wcml2ID0gcmtfZ21hY19zZXR1cChwZGV2LCBwbGF0X2RhdCwgZGF0YSk7CiAJaWYgKElTX0VSUihwbGF0X2RhdC0mZ3Q7YnNwX3ByaXYpKQogCQlyZXR1cm4gUFRSX0VSUihwbGF0X2RhdC0mZ3Q7YnNwX3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jCmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMKQEAgLTM1LDggJiM0MzszNSwxMSBAQCBzdGF0aWMgaW50IHJ6bjFfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCiBzdGF0aWMgdm9pZCByem4xX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKLQlpZiAocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKQotCQltaWljX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1paWNfZGVzdHJveShwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpOwomIzQzOwlwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MgPSBOVUxMOwogfQogCiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyem4xX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jCmluZGV4IDFkN2YwYTU3ZDI4ODkuLjZkNGJjMWZlOGY3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMKQEAgLTUzOSw4ICYjNDM7NTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAKIHN0YXRpYyB2b2lkIHNvY2ZwZ2FfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewotCWlmIChwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCi0JCWx5bnhfcGNzX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWx5bnhfcGNzX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzID0gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqc29jZnBnYV9kd21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jCmluZGV4IGFmZTk4ZmY1YmRjYjAuLjczOTZiNjg4OTljNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYwpAQCAtNDI2LDM1ICYjNDM7NDI2LDE0IEBAIGludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlOwotCXN0cnVjdCBkd194cGNzICp4cGNzID0gTlVMTDsKLQlpbnQgYWRkciwgcmV0OwotCi0JZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi0mZ3Q7ZGV2aWNlKTsKLQotCWlmIChwcml2LSZndDtwbGF0LSZndDtwY3NfaW5pdCkgewotCQlyZXQgPSBwcml2LSZndDtwbGF0LSZndDtwY3NfaW5pdChwcml2KTsKLQl9IGVsc2UgaWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7KSkgewotCQlwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7LCAwKTsKLQkJeHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTsKLQkJZndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7Ci0JCXJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTsKLQl9IGVsc2UgaWYgKHByaXYtJmd0O3BsYXQtJmd0O21kaW9fYnVzX2RhdGEgJmFtcDsmYW1wOwotCQkgICBwcml2LSZndDtwbGF0LSZndDttZGlvX2J1c19kYXRhLSZndDtwY3NfbWFzaykgewotCQlhZGRyID0gZmZzKHByaXYtJmd0O3BsYXQtJmd0O21kaW9fYnVzX2RhdGEtJmd0O3Bjc19tYXNrKSAtIDE7Ci0JCXhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtJmd0O21paSwgYWRkcik7Ci0JCXJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTsKLQl9IGVsc2UgewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3BsYXQtJmd0O3Bjc19pbml0KQogCQlyZXR1cm4gMDsKLQl9CiAKJiM0MzsJcmV0ID0gcHJpdi0mZ3Q7cGxhdC0mZ3Q7cGNzX2luaXQocHJpdik7CiAJaWYgKHJldCkKLQkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi0mZ3Q7ZGV2aWNlLCByZXQsICYjMzQ7Tm8geFBDUyBmb3VuZFxuJiMzNDspOwotCi0JaWYgKHhwY3MpCi0JCXhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi0mZ3Q7cGxhdC0mZ3Q7bXVsdF9mYWN0XzEwMG5zKTsKLQotCXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtJmd0O2RldmljZSwgcmV0LCAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIFBDU1xuJiMzNDspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NjMsMTQgJiM0Mzs0NDIsMTAgQEAgdm9pZCBzdG1tYWNfcGNzX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCi0JaWYgKHByaXYtJmd0O3BsYXQtJmd0O3Bjc19leGl0KQotCQlwcml2LSZndDtwbGF0LSZndDtwY3NfZXhpdChwcml2KTsKLQotCWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CWlmICghcHJpdi0mZ3Q7cGxhdC0mZ3Q7cGNzX2V4aXQpCiAJCXJldHVybjsKIAotCXhwY3NfZGVzdHJveShwcml2LSZndDtody0mZ3Q7eHBjcyk7Ci0JcHJpdi0mZ3Q7aHctJmd0O3hwY3MgPSBOVUxMOwomIzQzOwlwcml2LSZndDtwbGF0LSZndDtwY3NfZXhpdChwcml2KTsKIH0KIAogc3RydWN0IHN0bW1hY19jbGtfcmF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCmluZGV4IGU0MTdmZDY2ZjY2MGEuLjNkYjliMzQzYWMwYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCkBAIC0xMiw2ICYjNDM7MTIsMzEgQEAgY29uZmlnIFBDU19YUENTCiAJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU3lub3BzeXMKIAkgIERlc2lnbldhcmUgWFBDUyBjb250cm9sbGVycy4KIAomIzQzO2lmIFBDU19YUENTCiYjNDM7CiYjNDM7Y29uZmlnIFBDU19YUENTX1BMQVRGT1JNCiYjNDM7CXRyaXN0YXRlICYjMzQ7R2VuZXJpYyBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydCYjMzQ7CiYjNDM7CWRlZmF1bHQgUENTX1hQQ1MKJiM0MzsJaGVscAomIzQzOwkgIEdlbmVyaWMgRFdYUENTIGRyaXZlciBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJiMzOTt0IHJlcXVpcmUgYW55CiYjNDM7CSAgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB0byBmdW5jdGlvbiBvciBpcyB1c2luZyBwbGF0Zm9ybQomIzQzOwkgIGRhdGEgZm9yIHNldHVwLgomIzQzOwomIzQzOwkgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuCiYjNDM7CiYjNDM7Y29uZmlnIFBDU19YUENTX1JPQ0tDSElQCiYjNDM7CXRyaXN0YXRlICYjMzQ7Um9ja2NoaXAgWFBDUyBjb250cm9sbGVyIHN1cHBvcnQmIzM0OwomIzQzOwlkZWZhdWx0IEFSQ0hfUk9DS0NISVAKJiM0MzsJZGVwZW5kcyBvbiBPRiAmYW1wOyZhbXA7IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVCkKJiM0MzsJc2VsZWN0IEdFTkVSSUNfUEhZCiYjNDM7CXNlbGVjdCBQTV9HRU5FUklDX0RPTUFJTlMKJiM0MzsJaGVscAomIzQzOwkgIFN1cHBvcnQgZm9yIFhQQ1MgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzM1NnggU29DLgomIzQzOwomIzQzOwkgIElmIHlvdSBoYXZlIGEgUm9ja2NoaXAgU29DIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS4KJiM0MzsKJiM0MztlbmRpZiAjIFBDU19YUENTCiYjNDM7CiBjb25maWcgUENTX0xZTlgKIAl0cmlzdGF0ZQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZQppbmRleCA0Zjc5MjA2MThiOTAwLi5mOWY2Y2YyNTc4ZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlCkBAIC0xLDEwICYjNDM7MSwxMSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogIyBNYWtlZmlsZSBmb3IgTGludXggUENTIGRyaXZlcnMKIAotcGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpCTo9IHBjcy14cGNzLm8gcGNzLXhwY3MtcGxhdC5vIFwKLQkJCQkgICBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vCiYjNDM7cGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpCTo9IHBjcy14cGNzLm8gcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gubwogCiBvYmotJChDT05GSUdfUENTX1hQQ1MpCQkmIzQzOz0gcGNzX3hwY3MubwomIzQzO29iai0kKENPTkZJR19QQ1NfWFBDU19QTEFURk9STSkgJiM0Mzs9IHBjcy14cGNzLXBsYXQubwomIzQzO29iai0kKENPTkZJR19QQ1NfWFBDU19ST0NLQ0hJUCkgJiM0Mzs9IHBjcy14cGNzLXJrLm8KIG9iai0kKENPTkZJR19QQ1NfTFlOWCkJCSYjNDM7PSBwY3MtbHlueC5vCiBvYmotJChDT05GSUdfUENTX01US19MWU5YSSkJJiM0Mzs9IHBjcy1tdGstbHlueGkubwogb2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpCSYjNDM7PSBwY3MtcnpuMS1taWljLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZDVlMGYyMmM5NzNjMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jCkBAIC0wLDAgJiM0MzsxLDU3MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIEJhc2VkIG9uIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIFhQQ1MgcGxhdGZvcm0gZHJpdmVyLgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNCBTZXJnZSBTZW1pbgomIzQzOyAqCiYjNDM7ICogQWRhcHRlZCBmb3IgUm9ja2NoaXAgU29Dcywgd2l0aCByZWZlcmVuY2UgdG8gdGhlIFJvY2tjaGlwIE9FTSBkcml2ZXIuCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvaWEgUHJhbnQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21hdGguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2ZfcGxhdGZvcm0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNzL3Bjcy14cGNzLXJrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wbV9kb21haW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG1fcnVudGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtwY3MteHBjcy5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgZHdfeHBjc19yayB7CiYjNDM7CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXM7CiYjNDM7CXZvaWQgX19pb21lbSAqcmVnX2Jhc2U7CiYjNDM7CXN0cnVjdCBwaHkgKnNlcmRlc19waHk7CiYjNDM7CXN0cnVjdCBjbGsgKmNzcl9jbGs7CiYjNDM7CXN0cnVjdCBjbGsgKmVlZV9jbGs7CiYjNDM7CXU4IGVlZV9tdWx0X2ZhY3Q7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgcHRyZGlmZl90IHhwY3NfcmtfYWRkcl9mb3JtYXQoaW50IGRldiwgaW50IHJlZykKJiM0Mzt7CiYjNDM7CXJldHVybiBGSUVMRF9QUkVQKDB4NzAwMDAsIGRldikgfCBGSUVMRF9QUkVQKDB4ZmZmZiwgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3JlYWRfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZykKJiM0Mzt7CiYjNDM7CXB0cmRpZmZfdCBjc3I7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpOwomIzQzOwomIzQzOwlyZXQgPSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KCZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2Rldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkbChweHBjcy0mZ3Q7cmVnX2Jhc2UgJiM0MzsgKGNzciAmbHQ7Jmx0OyAyKSkgJmFtcDsgMHhmZmZmOwomIzQzOwomIzQzOwlwbV9ydW50aW1lX3B1dCgmYW1wO3B4cGNzLSZndDtwZGV2LSZndDtkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXB0cmRpZmZfdCBjc3I7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpOwomIzQzOwomIzQzOwlyZXQgPSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KCZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2Rldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwl3cml0ZWwodmFsLCBweHBjcy0mZ3Q7cmVnX2Jhc2UgJiM0MzsgKGNzciAmbHQ7Jmx0OyAyKSk7CiYjNDM7CiYjNDM7CXBtX3J1bnRpbWVfcHV0KCZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2Rldik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkxCTIKJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkyCTMKJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkzCTQKJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9QTUFQTUQJNgomIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSQk3CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgeHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoaW50IGFkZHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gIShhZGRyICZsdDsgMCB8fCBhZGRyICZndDsgMyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJc3dpdGNoIChkZXYpIHsKJiM0MzsJY2FzZSBNRElPX01NRF9QTUFQTUQ6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDsKJiM0MzsJY2FzZSBNRElPX01NRF9WRU5EMjoKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFkcyBhcmUgcmVkaXJlY3RlZCBieSBoYXJkd2FyZSB0byB0aGUgcG9ydCYjMzk7cyByZWFkLW9ubHkgbWlycm9yOwomIzQzOwkgKiBvbmx5IHdyaXRlcyBoYXZlIHRvIGJlIHRhcmdldGVkIGF0IE1JSSAoc2VlIHRoZSB3cml0ZSBwYXRoKS4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAoYWRkcikgewomIzQzOwljYXNlIDA6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTsKJiM0MzsJY2FzZSAxOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkxOwomIzQzOwljYXNlIDI6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7CiYjNDM7CWNhc2UgMzoKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJMzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoZGV2KSB7CiYjNDM7CWNhc2UgTURJT19NTURfUE1BUE1EOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9QTUFQTUQ7CiYjNDM7CWNhc2UgTURJT19NTURfVkVORDI6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlc2UgcmVnaXN0ZXJzIHBoeXNpY2FsbHkgbGl2ZSBvbmx5IGluIE1JSSAodGhlIG1hbmFnZW1lbnQgcG9ydCkuCiYjNDM7CSAqIFBvcnRzIDEtMyBleHBvc2UgcmVhZC1vbmx5IG1pcnJvcnMgb2YgdGhlc2UgYml0cywgc28gd3JpdGVzIG11c3QKJiM0MzsJICogYWx3YXlzIHRhcmdldCBNSUk7IHRoZSByZWFkIHBhdGggcmVtYXBzIHBlciBhZGRyZXNzIGFuZCB0aGUKJiM0MzsJICogaGFyZHdhcmUgcmVkaXJlY3RzIHRvIHRoZSBwb3J0JiMzOTtzIG1pcnJvci4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAocmVnKSB7CiYjNDM7CWNhc2UgRFdfVlJfTUlJX0FOX0NUUkw6CiYjNDM7CWNhc2UgRFdfVlJfTUlJX0FOX0lOVFJfU1RTOgomIzQzOwljYXNlIERXX1ZSX01JSV9FRUVfTUNUUkwwOgomIzQzOwljYXNlIERXX1ZSX01JSV9FRUVfTUNUUkwxOgomIzQzOwljYXNlIERXX1ZSX01JSV9ESUdfQ1RSTDI6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoYWRkcikgewomIzQzOwljYXNlIDA6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTsKJiM0MzsJY2FzZSAxOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkxOwomIzQzOwljYXNlIDI6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7CiYjNDM7CWNhc2UgMzoKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJMzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IGRldjsKJiM0MzsKJiM0MzsJaWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgTURJT19NTURfVkVORDIsIHJlZyk7CiYjNDM7CWlmIChkZXYgJmx0OyAwKQomIzQzOwkJcmV0dXJuIDB4ZmZmZjsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3NfcmtfcmVhZF9yZWcocHhwY3MsIGRldiwgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZywgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IGRldjsKJiM0MzsKJiM0MzsJaWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpOwomIzQzOwlpZiAoZGV2ICZsdDsgMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIGRldiwgcmVnKTsKJiM0MzsJaWYgKGRldiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gMHhmZmZmOwomIzQzOwomIzQzOwlyZXR1cm4geHBjc19ya19yZWFkX3JlZyhweHBjcywgZGV2LCByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CWRldiA9IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpOwomIzQzOwlpZiAoZGV2ICZsdDsgMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGR3X3hwY3NfcmsgKnhwY3NfcmtfY3JlYXRlX2RhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkd194cGNzX3JrICpweHBjczsKJiM0MzsKJiM0MzsJcHhwY3MgPSBkZXZtX2t6YWxsb2MoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqcHhwY3MpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFweHBjcykKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwlweHBjcy0mZ3Q7cGRldiA9IHBkZXY7CiYjNDM7CiYjNDM7CWRldl9zZXRfZHJ2ZGF0YSgmYW1wO3BkZXYtJmd0O2RldiwgcHhwY3MpOwomIzQzOwomIzQzOwlyZXR1cm4gcHhwY3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X2luaXQoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlweHBjcy0mZ3Q7c2VyZGVzX3BoeSA9IGRldm1fcGh5X2dldChkZXYsICYjMzQ7c2VyZGVzJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHB4cGNzLSZndDtzZXJkZXNfcGh5KSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy0mZ3Q7c2VyZGVzX3BoeSksCiYjNDM7CQkJCQkmIzM0O0ZhaWxlZCB0byBnZXQgU2VyRGVzIFBIWVxuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3B4cGNzLSZndDtwZGV2LSZndDtkZXY7CiYjNDM7CiYjNDM7CXBoeV9wb3dlcl9vZmYocHhwY3MtJmd0O3NlcmRlc19waHkpOwomIzQzOwlwaHlfZXhpdChweHBjcy0mZ3Q7c2VyZGVzX3BoeSk7CiYjNDM7CiYjNDM7CWRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9uKHN0cnVjdCBkd194cGNzX3JrICpweHBjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2RldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHBvd2VyIGRvbWFpbiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBlbmFibGVkLCB3aGljaCBhbGxvd3MgdXMgdG8KJiM0MzsJICogZHluYW1pY2FsbHkgdHVybiB0aGUgQ1NSIGNsb2NrIG9uL29mZiB1c2luZyBQTSB3aGlsZSBrZWVwaW5nIHRoZSBQQ1MKJiM0MzsJICogcG93ZXJlZCBvbi4KJiM0MzsJICovCiYjNDM7CXJldCA9IGRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgdHJ1ZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBwb3dlciBvbiBwb3dlci1kb21haW5zXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9pbml0KHB4cGNzLSZndDtzZXJkZXNfcGh5KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGluaXQgU2VyRGVzIFBIWVxuJiMzNDspOwomIzQzOwkJZ290byBwbV9kb21haW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3Bvd2VyX29uKHB4cGNzLSZndDtzZXJkZXNfcGh5KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHBvd2VyIG9uIFNlckRlcyBQSFlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gc2VyZGVzX3BoeTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYsIHB4cGNzKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIFNlckRlcyBQSFk6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7c2VyZGVzX3BoeToKJiM0MzsJcGh5X2V4aXQocHhwY3MtJmd0O3NlcmRlc19waHkpOwomIzQzO3BtX2RvbWFpbjoKJiM0MzsJZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCBmYWxzZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19pbml0X3JlcyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcHhwY3MtJmd0O3BkZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKJiM0MzsKJiM0MzsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKJiM0MzsJaWYgKCFyZXMpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O05vIHJlZy1zcGFjZSBmb3VuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJlc291cmNlX3NpemUocmVzKSAmbHQ7IFNaXzJNKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtJbnZhbGlkIHJlZy1zcGFjZSBzaXplXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlweHBjcy0mZ3Q7cmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwomIzQzOwlpZiAoSVNfRVJSKHB4cGNzLSZndDtyZWdfYmFzZSkpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBtYXAgcmVnLXNwYWNlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihweHBjcy0mZ3Q7cmVnX2Jhc2UpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB4cGNzX3JrX2V4aXRfY2xrKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3B4cGNzLSZndDtwZGV2LSZndDtkZXY7CiYjNDM7CiYjNDM7CXBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZChkZXYpOwomIzQzOwljbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtJmd0O2VlZV9jbGspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfaW5pdF9jbGsoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2OwomIzQzOwl1bnNpZ25lZCBsb25nIHJhdGU7CiYjNDM7CXU2NCBtdWx0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlweHBjcy0mZ3Q7Y3NyX2NsayA9IGRldm1fY2xrX2dldChkZXYsICYjMzQ7Y3NyJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHB4cGNzLSZndDtjc3JfY2xrKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy0mZ3Q7Y3NyX2NsayksCiYjNDM7CQkJCQkgJiMzNDtGYWlsZWQgdG8gZ2V0IENTUiBjbG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlweHBjcy0mZ3Q7ZWVlX2NsayA9IGRldm1fY2xrX2dldChkZXYsICYjMzQ7ZWVlJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHB4cGNzLSZndDtlZWVfY2xrKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy0mZ3Q7ZWVlX2NsayksCiYjNDM7CQkJCQkgJiMzNDtGYWlsZWQgdG8gZ2V0IEVFRSBjbG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtJmd0O2VlZV9jbGspOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gZW5hYmxlIEVFRSBjbG9ja1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTsKJiM0MzsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19leGl0X2NsaywgcHhwY3MpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bSBmb3IgRUVFIGNsb2NrOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENvbXB1dGUgdGhlIG11bHRpcGxpZXIgZm9yIHRoZSBFRUUgY2xvY2sgc28gdGhhdAomIzQzOwkgKiBjbGtfZWVlX3BlcmlvZCAqIChtdWx0X2ZhY3QgJiM0MzsgMSkgZmFsbHMgd2l0aGluIDgwLi4xMjAgbnMuCiYjNDM7CSAqCiYjNDM7CSAqIE9uIFJLMzU2OCwgY2xrX3hwY3NfZWVlIGlzIG11eGVkIGJldHdlZW4gZ3BsbDIwMCAoMjAwIE1IeiwgNSBucykKJiM0MzsJICogYW5kIGNwbGwxMjUgKDEyNSBNSHosIDggbnMpLCBzZWxlY3RlZCBieSBDUlVfQ0xLU0VMX0NPTjI5IGJpdCAxMy4KJiM0MzsJICogVGhlIHJlc2V0IHZhbHVlIGlzIDAgKDIwMCBNSHopLCBidXQgZGVyaXZlIHRoZSB2YWx1ZSBhdCBydW50aW1lIHRvCiYjNDM7CSAqIHN0YXkgY29ycmVjdCBpZiB0aGUgbXV4IGlzIGNoYW5nZWQgYnkgYSBib2FyZC4KJiM0MzsJICoKJiM0MzsJICogVXNlIGEgNjQtYml0IGludGVybWVkaWF0ZTogb24gMzItYml0IGJ1aWxkcywgMTAwICogMjAwMDAwMDAwCiYjNDM7CSAqIGRvZXMgbm90IGZpdCBpbiB1bnNpZ25lZCBsb25nLiBDbGFtcCB0byB0aGUgNC1iaXQKJiM0MzsJICogRFdfVlJfTUlJX0VFRV9NVUxUX0ZBQ1RfMTAwTlMgZmllbGQuCiYjNDM7CSAqLwomIzQzOwlyYXRlID0gY2xrX2dldF9yYXRlKHB4cGNzLSZndDtlZWVfY2xrKTsKJiM0MzsJaWYgKCFyYXRlKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCAmIzM0O0ludmFsaWQgRUVFIGNsb2NrIHJhdGVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXVsdCA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCgxMDBVTEwgKiByYXRlLCBOU0VDX1BFUl9TRUMpIC0gMTsKJiM0MzsJcHhwY3MtJmd0O2VlZV9tdWx0X2ZhY3QgPSBtaW5fdCh1NjQsIG11bHQsIDE1KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19pbml0X2J1cyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3B4cGNzLSZndDtwZGV2LSZndDtkZXY7CiYjNDM7CXN0YXRpYyBhdG9taWNfdCBpZCA9IEFUT01JQ19JTklUKC0xKTsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1czsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJYnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCAwKTsKJiM0MzsJaWYgKCFidXMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJYnVzLSZndDtuYW1lID0gJiMzNDtSb2NrY2hpcCBEVyBYUENTIE1DSS9BUEIzJiMzNDs7CiYjNDM7CWJ1cy0mZ3Q7cmVhZCA9IHhwY3NfcmtfcmVhZF9jMjI7CiYjNDM7CWJ1cy0mZ3Q7d3JpdGUgPSB4cGNzX3JrX3dyaXRlX2MyMjsKJiM0MzsJYnVzLSZndDtyZWFkX2M0NSA9IHhwY3NfcmtfcmVhZF9jNDU7CiYjNDM7CWJ1cy0mZ3Q7d3JpdGVfYzQ1ID0geHBjc19ya193cml0ZV9jNDU7CiYjNDM7CWJ1cy0mZ3Q7cGh5X21hc2sgPSB+MDsKJiM0MzsJYnVzLSZndDtwYXJlbnQgPSBkZXY7CiYjNDM7CWJ1cy0mZ3Q7cHJpdiA9IHB4cGNzOwomIzQzOwomIzQzOwlzbnByaW50ZihidXMtJmd0O2lkLCBNSUlfQlVTX0lEX1NJWkUsCiYjNDM7CQkgJiMzNDtyb2NrY2hpcF9kd3hwY3MtJXgmIzM0OywgYXRvbWljX2luY19yZXR1cm4oJmFtcDtpZCkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNRElPLWJ1cyBoZXJlIHNlcnZlcyBhcyBqdXN0IGEgYmFjay1lbmQgZW5naW5lIGFic3RyYWN0aW5nIG91dAomIzQzOwkgKiB0aGUgTURJTyBhbmQgTUNJL0FQQjMgSU8gaW50ZXJmYWNlcyB1dGlsaXplZCBmb3IgdGhlIFJvY2tjaGlwIERXWFBDUyBDU1JzCiYjNDM7CSAqIGFjY2Vzcy4KJiM0MzsJICovCiYjNDM7CXJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgTURJTyBidXNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHhwY3MtJmd0O2J1cyA9IGJ1czsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlweHBjcyA9IHhwY3NfcmtfY3JlYXRlX2RhdGEocGRldik7CiYjNDM7CWlmIChJU19FUlIocHhwY3MpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHhwY3MpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgWFBDUyBtYXkgYmUgYXR0YWNoZWQgdG8gYSBwb3dlciBkb21haW4gKGUuZy4gUERfUElQRSkuIFRoZSBkb21haW4KJiM0MzsJICogbXVzdCBiZSBwb3dlcmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQyB3aWxsCiYjNDM7CSAqIHRyaWdnZXIgYSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCAoU0Vycm9yKS4KJiM0MzsJICoKJiM0MzsJICogQWNjZXNzaW5nIHRoZSBYUENTIHJlZ2lzdGVycyBhbHNvIHJlcXVpcmVzIGEgVFggY2xvY2sgZnJvbSB0aGUgU2VyRGVzLAomIzQzOwkgKiB3aGljaCBpcyBuZWVkZWQgZm9yIHRoZSBzb2Z0IHJlc2V0LgomIzQzOwkgKi8KJiM0MzsJcmV0ID0geHBjc19ya19zZXJkZXNfcGh5X2luaXQocHhwY3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb24ocHhwY3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geHBjc19ya19pbml0X3JlcyhweHBjcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB4cGNzX3JrX2luaXRfY2xrKHB4cGNzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHhwY3NfcmtfaW5pdF9idXMocHhwY3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhwY3Nfcmtfb2ZfaWRzW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JvY2tjaGlwLHJrMzU2OC14cGNzJiMzNDsgfSwKJiM0MzsJeyAvKiBzZW50aW5lbCAqLyB9LAomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHBjc19ya19vZl9pZHMpOwomIzQzOwomIzQzO3N0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjc19ucDsKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzOwomIzQzOwlzdHJ1Y3QgZHdfeHBjcyAqeHBjczsKJiM0MzsJdTMyIHBvcnQ7CiYjNDM7CiYjNDM7CWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKJiM0MzsKJiM0MzsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO3BvcnQpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CWlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoKGludClwb3J0KSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwkvKiBUaGUgWFBDUyBwZGV2IGlzIGF0dGFjaGVkIHRvIHRoZSBwYXJlbnQgbm9kZSAqLwomIzQzOwlwY3NfbnAgPSBvZl9nZXRfcGFyZW50KG5wKTsKJiM0MzsJaWYgKCFwY3NfbnApCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKJiM0MzsKJiM0MzsJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBjc19ucCkpIHsKJiM0MzsJCW9mX25vZGVfcHV0KHBjc19ucCk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIW9mX21hdGNoX25vZGUoeHBjc19ya19vZl9pZHMsIHBjc19ucCkpIHsKJiM0MzsJCW9mX25vZGVfcHV0KHBjc19ucCk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwY3NfbnApOwomIzQzOwlvZl9ub2RlX3B1dChwY3NfbnApOwomIzQzOwlpZiAoIXBkZXYpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKJiM0MzsKJiM0MzsJaWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCAmYW1wO3BkZXYtJmd0O2RldiwgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkgewomIzQzOwkJcHV0X2RldmljZSgmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwomIzQzOwlweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlpZiAoIXB4cGNzIHx8ICFweHBjcy0mZ3Q7YnVzKSB7CiYjNDM7CQlkZXZpY2VfbGlua19yZW1vdmUoZGV2LCAmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CQlwdXRfZGV2aWNlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHB4cGNzLSZndDtidXMsIChpbnQpcG9ydCk7CiYjNDM7CWlmIChJU19FUlIoeHBjcykpIHsKJiM0MzsJCWRldmljZV9saW5rX3JlbW92ZShkZXYsICZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJCXB1dF9kZXZpY2UoJmFtcDtwZGV2LSZndDtkZXYpOwomIzQzOwkJcmV0dXJuIHhwY3M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJeHBjc19jb25maWdfZWVlX211bHRfZmFjdCh4cGNzLCBweHBjcy0mZ3Q7ZWVlX211bHRfZmFjdCk7CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDtwZGV2LSZndDtkZXYpOwomIzQzOwlyZXR1cm4geHBjczsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19ya19jcmVhdGUpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CWNsa19kaXNhYmxlX3VucHJlcGFyZShweHBjcy0mZ3Q7Y3NyX2Nsayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtJmd0O2Nzcl9jbGspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1JVTlRJTUVfREVWX1BNX09QUyh4cGNzX3JrX3BtX29wcywKJiM0MzsJCQkgICB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZCwKJiM0MzsJCQkgICB4cGNzX3JrX3BtX3J1bnRpbWVfcmVzdW1lLAomIzQzOwkJCSAgIE5VTEwpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhwY3NfcmtfZHJpdmVyID0gewomIzQzOwkucHJvYmUgPSB4cGNzX3JrX3Byb2JlLAomIzQzOwkuZHJpdmVyID0gewomIzQzOwkJLm5hbWUgPSAmIzM0O3JrX3hwY3MtZHd4cGNzJiMzNDssCiYjNDM7CQkucG0gPSBwbV9wdHIoJmFtcDt4cGNzX3JrX3BtX29wcyksCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUgPSB4cGNzX3JrX29mX2lkcywKJiM0MzsJfSwKJiM0Mzt9OwomIzQzO21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeHBjc19ya19kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1JvY2tjaGlwIFhQQ1MgcGxhdGZvcm0gZGV2aWNlIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Q29pYSBQcmFudCAmbHQ7Y29pYXByYW50QGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCmluZGV4IDAzMzdlMmJjYzAxMjUuLjhjMzg3NWI2OTg1YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCkBAIC03NjEsNyAmIzQzOzc2MSw5IEBAIHN0YXRpYyBpbnQgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsCiAJICogICAgRFcgeFBDUyB1c2VkIHdpdGggRFcgRVFvUyBNQUMgaXMgYWx3YXlzIE1BQyBzaWRlIFNHTUlJLgogCSAqIDQpIFZSX01JSV9ESUdfQ1RSTDEgQml0KDkpIFtNQUNfQVVUT19TV10gPSAxYiAoQXV0b21hdGljCiAJICogICAgc3BlZWQvZHVwbGV4IG1vZGUgY2hhbmdlIGJ5IEhXIGFmdGVyIFNHTUlJIEFOIGNvbXBsZXRlKQotCSAqIDUpIFZSX01JSV9NTURfQ1RSTCBCaXQoMTIpIFtBTl9FTkFCTEVdID0gMWIgKEVuYWJsZSBTR01JSSBBTikKJiM0MzsJICogNSkgVlJfTUlJX0FOX0lOVFJfU1RTID0gMHgwIChDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cykKJiM0MzsJICogNikgVlJfTUlJX01NRF9DVFJMIEJpdCgxMikgW0FOX0VOQUJMRV0gPSAxYiAoRW5hYmxlIFNHTUlJIEFOKQomIzQzOwkgKiAgICBWUl9NSUlfTU1EX0NUUkwgQml0KDkpIFtBTl9SRVNUQVJUXSA9IDFiIChSZXN0YXJ0IFNHTUlJIEFOKQogCSAqCiAJICogTm90ZSB0aGF0IFZSX01JSV9NTURfQ1RSTCBpcyBNSUlfQk1DUi4KIAkgKgpAQCAtNzY5LDcgJiM0Mzs3NzEsMTQgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcywKIAkgKgkgU1JfTUlJX0FOX0FEVi4gTUFDIHNpZGUgU0dNSUkgcmVjZWl2ZXMgQU4gVHggQ29uZmlnIGZyb20KIAkgKgkgUEhZIGFib3V0IHRoZSBsaW5rIHN0YXRlIGNoYW5nZSBhZnRlciBDMjggQU4gaXMgY29tcGxldGVkCiAJICoJIGJldHdlZW4gUEhZIGFuZCBMaW5rIFBhcnRuZXIuIFRoZXJlIGlzIGFsc28gbm8gbmVlZCB0bwotCSAqCSB0cmlnZ2VyIEFOIHJlc3RhcnQgZm9yIE1BQy1zaWRlIFNHTUlJLgomIzQzOwkgKgkgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSSBvbiBtb3N0IGRldmljZXMuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGU6IFdoaWxlIHRoZSBEZXNpZ25XYXJlIGRhdGFib29rIHN0YXRlcyB0aGF0IEFOIHJlc3RhcnQgaXMKJiM0MzsJICoJIG5vdCBuZWVkZWQgZm9yIE1BQyBzaWRlIFNHTUlJLCBzb21lIGltcGxlbWVudGF0aW9ucyAoZS5nLgomIzQzOwkgKgkgUm9ja2NoaXAgUkszNTY4KSBleGhpYml0IGEgdGltaW5nIHF1aXJrIHdoZW4gaW50ZWdyYXRlZCB3aXRoCiYjNDM7CSAqCSBwaHlsaW5rIGFuZCBkbyBub3QgcmVzdGFydCBBTiBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGxpbmsKJiM0MzsJICoJIGNvbWVzIGJhY2sgdXAuIEFuIGV4cGxpY2l0IEFOIHJlc3RhcnQgaXMgcmVxdWlyZWQgb24gdGhvc2UKJiM0MzsJICoJIHBhcnRzIHRvIHJlY292ZXIgdGhlIGxpbmsgYWZ0ZXIgYSBkaXNjb25uZWN0LgogCSAqLwogCW1kaW9fY3RybCA9IHhwY3NfcmVhZCh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IpOwogCWlmIChtZGlvX2N0cmwgJmx0OyAwKQpAQCAtODE2LDkgJiM0Mzs4MjUsMTQgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcywKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAomIzQzOwkvKiBDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cyAqLwomIzQzOwlyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJaWYgKG5lZ19tb2RlID09IFBIWUxJTktfUENTX05FR19JTkJBTkRfRU5BQkxFRCkKIAkJcmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsCi0JCQkJIG1kaW9fY3RybCB8IEJNQ1JfQU5FTkFCTEUpOwomIzQzOwkJCQkgbWRpb19jdHJsIHwgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDkzLDkgJiM0MzsxMTA3LDE4IEBAIHN0YXRpYyBpbnQgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBDbGVhciBBTiBjb21wbGV0ZSBzdGF0dXMgb3IgaW50ZXJydXB0ICovCi0JaWYgKHN0YXRlLSZndDthbl9jb21wbGV0ZSkKLQkJeHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTsKJiM0MzsJaWYgKHN0YXRlLSZndDthbl9jb21wbGV0ZSkgewomIzQzOwkJLyogQ2xlYXIgQU4gY29tcGxldGUgc3RhdHVzIG9yIGludGVycnVwdCAqLwomIzQzOwkJcmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBJbml0aWF0ZSB0aGUgbmV4dCByb3VuZCBvZiBBTiAqLwomIzQzOwkJcmV0ID0geHBjc19tb2RpZnkoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSLCBCTUNSX0FOUkVTVEFSVCwKJiM0MzsJCQkJICBCTUNSX0FOUkVTVEFSVCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jIGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uN2I4NjdlNzUyMDA2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV94cGNzX3BoeV9yZWFkeTsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwwX3NlbDsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwxX3NlbDsKJiM0MzsJc3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfc2dtaWlfbWFjX3NlbDsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgdTNvdGcwX3BvcnRfZW47CiAJc3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMV9wb3J0X2VuOwogfTsKQEAgLTIxMiw2ICYjNDM7MjEzLDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiB7CiAJYm9vbCBlbmFibGVfc3NjOwogCWJvb2wgZXh0X3JlZmNsazsKIAlzdHJ1Y3QgY2xrICpyZWZjbGs7CiYjNDM7CXUzMiBzZ21paV9tYWNfc2VsOwogfTsKIAogc3RhdGljIHZvaWQgcm9ja2NoaXBfY29tYnBoeV91cGRhdGVsKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYsCkBAIC0zNzUsNiAmIzQzOzM3Nyw5IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfY29tYnBoeV9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByb2NrY2hpcF9jb21icGh5CiAKIAlwcml2LSZndDtleHRfcmVmY2xrID0gZGV2aWNlX3Byb3BlcnR5X3ByZXNlbnQoZGV2LCAmIzM0O3JvY2tjaGlwLGV4dC1yZWZjbGsmIzM0Oyk7CiAKJiM0MzsJcHJpdi0mZ3Q7c2dtaWlfbWFjX3NlbCA9IDE7CiYjNDM7CWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICYjMzQ7cm9ja2NoaXAsc2dtaWktbWFjLXNlbCYjMzQ7LCAmYW1wO3ByaXYtJmd0O3NnbWlpX21hY19zZWwpOwomIzQzOwogCXByaXYtJmd0O3BoeV9yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X2V4Y2x1c2l2ZShkZXYsICYjMzQ7cGh5JiMzNDspOwogCS8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi8KIAlpZiAoUFRSX0VSUihwcml2LSZndDtwaHlfcnN0KSA9PSAtRU5PRU5UKQpAQCAtODczLDYgJiM0Mzs4NzgsOCBAQCBzdGF0aWMgaW50IHJrMzU2OF9jb21icGh5X2NmZyhzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2KQogCQlicmVhazsKIAogCWNhc2UgUEhZX1RZUEVfU0dNSUk6CiYjNDM7CQlyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtJmd0O3BpcGVfZ3JmLCAmYW1wO2NmZy0mZ3Q7cGlwZV9zZ21paV9tYWNfc2VsLAomIzQzOwkJCQkJICAgICBwcml2LSZndDtzZ21paV9tYWNfc2VsICZndDsgMCk7CiAJCXJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi0mZ3Q7cGlwZV9ncmYsICZhbXA7Y2ZnLSZndDtwaXBlX3hwY3NfcGh5X3JlYWR5LCB0cnVlKTsKIAkJcm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LSZndDtwaHlfZ3JmLCAmYW1wO2NmZy0mZ3Q7cGlwZV9waHltb2RlX3NlbCwgdHJ1ZSk7CiAJCXJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi0mZ3Q7cGh5X2dyZiwgJmFtcDtjZmctJmd0O3BpcGVfc2VsX3FzZ21paSwgdHJ1ZSk7CkBAIC05ODQsNiAmIzQzOzk5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcgcmszNTY4X2NvbWJwaHlfZ3JmY2ZncyA9IHsKIAkuY29uM19mb3Jfc2F0YQkJPSB7IDB4MDAwYywgMTUsIDAsIDB4MDAsIDB4NDQwNyB9LAogCS8qIHBpcGUtZ3JmICovCiAJLnBpcGVfY29uMF9mb3Jfc2F0YQk9IHsgMHgwMDAwLCAxNSwgMCwgMHgwMCwgMHgyMjIwIH0sCiYjNDM7CS5waXBlX3NnbWlpX21hY19zZWwJPSB7IDB4MDA0MCwgMSwgMSwgMHgwMCwgMHgwMSB9LAogCS5waXBlX3hwY3NfcGh5X3JlYWR5CT0geyAweDAwNDAsIDIsIDIsIDB4MDAsIDB4MDEgfSwKIAkudTNvdGcwX3BvcnRfZW4JCT0geyAweDAxMDQsIDE1LCAwLCAweDAxODEsIDB4MTEwMCB9LAogCS51M290ZzFfcG9ydF9lbgkJPSB7IDB4MDE0NCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIGIvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yODcyM2Q1YmQ3NWNjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaApAQCAtMCwwICYjNDM7MSwxMSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7I2lmbmRlZiBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0gKJiM0MzsjZGVmaW5lIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNzL3Bjcy14cGNzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA3MQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDExMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gaXRzIGZlYXNpYmlsaXR5IGZvciBmdXp6aW5nLCBnaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUgb2YgY29uY2Vybi4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBwYXRjaCBhY3R1YWxseSAqZG9lcyouIExvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZpbGVzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3MgYSB3aWRlIHJhbmdlOiBkZXZpY2UgdHJlZSBiaW5kaW5ncyAoUm9ja2NoaXAgYW5kIHBvdGVudGlhbGx5IGdlbmVyaWMpLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgKE1BSU5UQUlORVJTKSwgRFRTIGZpbGVzIChSSzM1NjgpLCBkcml2ZXIgY29kZSAoc3RtbWFjLCBSb2NrY2hpcC1zcGVjaWZpYyBkd21hYywgUENTIGRyaXZlcnMsIGFuZCBhIFJvY2tjaGlwIGNvbWJwaHkpLCBLY29uZmlnIGFuZCBNYWtlZmlsZXMgcmVsYXRlZCB0byBQQ1MgYW5kIHN0bW1hYy4gVGhpcyBzdWdnZXN0cyBjaGFuZ2VzIHJlbGF0ZWQgdG8gRXRoZXJuZXQgY29ubmVjdGl2aXR5LCBwb3NzaWJseSBpbmNsdWRpbmcgYSBuZXcgUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybS4KClRoZSBmaWxlcyB0aGF0IGp1bXAgb3V0IGFyZSB0aGUgYGR3bWFjLWludGVsLmNgIGZpbGUgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgYHBjcy14cGNzLXJrLmNgIGZpbGUsIGFsb25nIHdpdGggcmVsYXRlZCBLY29uZmlnIGFuZCBoZWFkZXIgZmlsZXMuIEl0IGxvb2tzIGxpa2Ugd2UgYXJlIGFkZGluZyBzdXBwb3J0IGZvciBhIFJvY2tjaGlwIFhQQ1MgdG8gc3RtbWFjIHZpYSB0aGUgaW50ZWwgbWdiZSBtb2R1bGUuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqcmVhY2hhYmlsaXR5Ki4gQ2FuIHRoaXMgY29kZSBiZSBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRT8gVGhpcyBpcyBwYXJhbW91bnQgZm9yIGZ1enppbmcgZWZmZWN0aXZlbmVzcy4gU3BlY2lmaWNhbGx5LCB0aGUgaW5zdHJ1Y3Rpb24mIzM5O3Mgc2VjdGlvbiAyIG91dGxpbmVzIHRoYXQgY29kZSBNVVNUIE5PVCBiZSBmdXp6ZWQgaWYgaXQmIzM5O3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHRoZXNlIGVudmlyb25tZW50cy4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCBgZHdtYWMtaW50ZWwuY2AuIElzIHRoZSBjb2RlIGluIHRoaXMgZmlsZSByZWFjaGFibGUgb24gYW1kNjQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSXMgaXQgc3RyaWN0bHkgZm9yIHBoeXNpY2FsIGhhcmR3YXJlPyBJIG5lZWQgdG8ga25vdyBpZiBJbnRlbCBFdGhlcm5ldC9QQ0kgaXMgZW11bGF0ZWQgaW4gUUVNVSwgb3IgaWYgYHN0bW1hY2AgaXMgdHlwaWNhbGx5IHRpZWQgdG8gc3BlY2lmaWMgU29DIGhhcmR3YXJlLiBEb2VzIFFFTVUgZW11bGF0ZSB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGBkd21hYy1pbnRlbGAgb3IgYHN0bW1hY2Agc3RhY2s/CgpUaGUgaW5zdHJ1Y3Rpb24gc2V0IGhpZ2hsaWdodHMgdGhpcyBhcyBhIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciBmdXp6aW5nOiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyBvciB0aG9zZSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRoYXQgYXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEFsc28gaW1wb3J0YW50IGFyZSBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgcmVseSBvbiBhIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCB1bmJpbmRpbmcuIEFkZGl0aW9uYWxseSwgdGhpcyBpcyBsaWtlbHkgdG8gYXBwbHkgdG8gY29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgZHdtYWMtaW50ZWxgIG9yIGBzdG1tYWNgICpjYW4qIGJlIHJlYWNoZWQgaW4gYSBRRU1VIGVudmlyb25tZW50LiBJIG5lZWQgdG8gZ3JlcCB0aGUga2VybmVsIHNvdXJjZXMgdG8gdW5kZXJzdGFuZCB0aGUgdHlwaWNhbCB1c2UgY2FzZXMgZm9yIHRoZXNlIGRyaXZlcnMuIElmIGl0JiMzOTtzIHRpZ2h0bHkgY291cGxlZCB0byBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0JiMzOTtzIG5vdCBlbXVsYXRlZCwgdGhlbiBmdXp6aW5nIHdvdWxkIGJlIGEgd2FzdGUgb2YgdGltZSBhbmQgcmVzb3VyY2VzIGFuZCB0aGlzIHBhdGNoIHdvdWxkIGJlIG5vbi13b3J0aHdoaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9ERVZJQ0VfVEFCTEUuKnBjaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xNDMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xNDUwLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0NTE6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGludGVsX2V0aF9wY2lfaWRfdGFibGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xNDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTcyCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJbnRlbCBFdGhlcm5ldCBQQ0kgSUQgVGFibGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBQQ0kgZGV2aWNlIElEcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBJbnRlbCBFdGhlcm5ldCBjb250cm9sbGVycy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlYCBkYXRhIHN0cnVjdHVyZS4gVGhhdCB0YWJsZSBpcyBkZWZpbmVkIGluIGBkd21hYy1pbnRlbC5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gaGVhZC4gSSBzdXNwZWN0IHRoaXMgdGFibGUgaG9sZHMgdGhlIGtleSB0byBob3cgdGhlIGRyaXZlciByZWNvZ25pemVzIGFuZCBzdXBwb3J0cyBkaWZmZXJlbnQgSW50ZWwgRXRoZXJuZXQgaGFyZHdhcmUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkLCB3aGF0IGZpZWxkcyBhcmUgaW5jbHVkZWQgKFZlbmRvciBJRCwgRGV2aWNlIElELCBTdWJzeXN0ZW0gSURzLCBldGMuKSwgYW5kIGhvdyB0aGUgZHJpdmVyIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiBkdXJpbmcgZGV2aWNlIHByb2JlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIFBDSSBkZXZpY2UgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBhbmQgaG93IGl0IHRoZW4gYXNzb2NpYXRlcyB0aGUgZGV2aWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gYW5kIHNldHVwIHJvdXRpbmVzLiBNeSBnb2FsIGlzIGEgc29saWQgZ3Jhc3Agb2YgdGhlIGRldmljZSBtYXRjaGluZyBhbmQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQzMDpcdFxuMTQzMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlW10gPSB7XG4xNDMyOlx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgUVVBUkssIFx1MDAyNnF1YXJrX2luZm8pIH0sXG4xNDMzOlx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1JHTUlJMUcsIFx1MDAyNmVobF9yZ21paTFnX2luZm8pIH0sXG4xNDM0Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1NHTUlJMUcsIFx1MDAyNmVobF9zZ21paTFnX2luZm8pIH0sXG4xNDM1Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1NHTUlJMkc1LCBcdTAwMjZlaGxfc2dtaWkxZ19pbmZvKSB9LFxuMTQzNjpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UwX1JHTUlJMUcsIFx1MDAyNmVobF9wc2UwX3JnbWlpMWdfaW5mbykgfSxcbjE0Mzc6XHRcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMF9TR01JSTFHLCBcdTAwMjZlaGxfcHNlMF9zZ21paTFnX2luZm8pIH0sXG4xNDM4Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTBfU0dNSUkyRzUsIFx1MDAyNmVobF9wc2UwX3NnbWlpMWdfaW5mbykgfSxcbjE0Mzk6XHRcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMV9SR01JSTFHLCBcdTAwMjZlaGxfcHNlMV9yZ21paTFnX2luZm8pIH0sXG4xNDQwOlx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTFfU0dNSUkxRywgXHUwMDI2ZWhsX3BzZTFfc2dtaWkxZ19pbmZvKSB9LFxuMTQ0MTpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UxX1NHTUlJMkc1LCBcdTAwMjZlaGxfcHNlMV9zZ21paTFnX2luZm8pIH0sXG4xNDQyOlx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMX1NHTUlJMUcsIFx1MDAyNnRnbF9zZ21paTFnX3BoeTBfaW5mbykgfSxcbjE0NDM6XHRcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBUR0xIX1NHTUlJMUdfMCwgXHUwMDI2dGdsX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxuMTQ0NDpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFRHTEhfU0dNSUkxR18xLCBcdTAwMjZ0Z2xfc2dtaWkxZ19waHkxX2luZm8pIH0sXG4xNDQ1Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgQURMU19TR01JSTFHXzAsIFx1MDAyNmFkbHNfc2dtaWkxZ19waHkwX2luZm8pIH0sXG4xNDQ2Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgQURMU19TR01JSTFHXzEsIFx1MDAyNmFkbHNfc2dtaWkxZ19waHkxX2luZm8pIH0sXG4xNDQ3Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgQURMTl9TR01JSTFHLCBcdTAwMjZhZGxuX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxuMTQ0ODpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFJQTFBfU0dNSUkxRywgXHUwMDI2YWRsbl9zZ21paTFnX3BoeTBfaW5mbykgfSxcbjE0NDk6XHRcdHt9XG4xNDUwOlx0fTtcbjE0NTE6XHRNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaW50ZWxfZXRoX3BjaV9pZF90YWJsZSk7XG4xNDUyOlx0XG4xNDUzOlx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGludGVsX2V0aF9wY2lfZHJpdmVyID0ge1xuMTQ1NDpcdFx0Lm5hbWUgPSBcJiMzNDtpbnRlbC1ldGgtcGNpXCYjMzQ7LFxuMTQ1NTpcdFx0LmlkX3RhYmxlID0gaW50ZWxfZXRoX3BjaV9pZF90YWJsZSxcbjE0NTY6XHRcdC5wcm9iZSA9IGludGVsX2V0aF9wY2lfcHJvYmUsXG4xNDU3Olx0XHQucmVtb3ZlID0gaW50ZWxfZXRoX3BjaV9yZW1vdmUsXG4xNDU4Olx0XHQuZHJpdmVyICAgICAgICAgPSB7XG4xNDU5Olx0XHRcdC5wbSAgICAgPSBcdTAwMjZzdG1tYWNfc2ltcGxlX3BtX29wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE5MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDY5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBEcml2ZXIgQ29tcGF0aWJpbGl0eSBvbiBhbWQ2NCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGR3bWFjLWludGVsLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgc2VlbXMgc3BlY2lmaWMgdG8gSW50ZWwgUXVhcmssIEVsa2hhcnQgTGFrZSwgVGlnZXIgTGFrZSwgQWxkZXIgTGFrZSwgYW5kIFJhcHRvciBMYWtlIGludGVncmF0ZWQgTUFDcy4gUmlnaHQsIHBoeXNpY2FsIEludGVsIFBDSSBkZXZpY2VzIG9uIHRob3NlIHNwZWNpZmljIEludGVsIFNvQ3MuIEJ1dCB0aGVuIEkgc3RvcCBhbmQgdGhpbmssICYjMzQ7RG9lcyBRRU1VIGFjdHVhbGx5IGVtdWxhdGUgYW4gSW50ZWwgUXVhcmsvRUhML1RHTCBzdG1tYWMgRXRoZXJuZXQgZGV2aWNlPyYjMzQ7IEkgZG9uJiMzOTt0ICp0aGluayogc28sIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4KCkxldCYjMzk7cyBjaGVjayB3aGF0IGVsc2UgaXMgYmVpbmcgcmVmZXJlbmNlZC4gSSBzZWUgZHJpdmVycyBmb3IgUm9ja2NoaXA6IGBwY3MteHBjcy1yay5jYCwgYGR3bWFjLXJrLmNgLCBhbmQgYHBoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jYCwgYXMgd2VsbCBhcyBkZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgYXNzb2NpYXRlZCBhcmNoaXRlY3R1cmUgZmlsZXMuIFRoZXNlIGFyZSBhbGwgY2xlYXJseSBmb3IgUm9ja2NoaXAgU29Dcywgc3BlY2lmaWNhbGx5IHRoZSBSSzM1NjgsIGFuIEFSTTY0IHBsYXRmb3JtLiBIb3dldmVyLCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCEgVGhpcyBtZWFucyBgYXJjaC9hcm02NC8uLi5gIGlzICpub3QqIGNvbXBpbGVkIG9yIHVzZWQgb24gdGhlIGFtZDY0IGJ1aWxkIEkmIzM5O20gd29ya2luZyB3aXRoLgoKSSBkcmlsbCBkb3duIGZ1cnRoZXI6IGBkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY2AgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIFJvY2tjaGlwIFJLMzU2eCBTb0NzLCBhbmQgcmVxdWlyZXMgT3BlbkZpcm13YXJlIGRldmljZSB0cmVlIGFuZCBSb2NrY2hpcCBoYXJkd2FyZS4gRXZlbiBpZiBgQ09NUElMRV9URVNUYCBlbmFibGVzIGl0LCBpdCYjMzk7cyBtYXRjaGluZyBgcm9ja2NoaXAscmszNTY4LXhwY3NgIHdoaWNoICp3b24mIzM5O3QqIGluc3RhbnRpYXRlIG9uIGFtZDY0IGluIFFFTVUuIFNhbWUgZ29lcyBmb3IgYGR3bWFjLXJrLmNgLCBgcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNgLCBgZHdtYWMtcmVuZXNhcy1nYmV0aC5jYCwgYGR3bWFjLXJ6bjEuY2AsIGFuZCBgZHdtYWMtc29jZnBnYS5jYC4gQWxsIHBsYXRmb3JtIGRyaXZlcnMsIHRhcmdldGluZyBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIG9yIGhhcmR3YXJlIHRoYXQgYXJlIG5vdCByZWxldmFudCB0byBteSBjdXJyZW50IGFtZDY0IFFFTVUgc2V0dXAuCgpTbywgYmFjayB0byB0aGUgc3RtbWFjIHF1ZXN0aW9uOiB3aGF0IGFib3V0IGBzdG1tYWNfbWRpby5jYCwgYHBjcy14cGNzLmNgLCBhbmQgYGR3bWFjLWludGVsLmNgPyBJIGhhdmUgdG8gbG9vayBpbnRvIGBzdG1tYWNfbWRpby5jYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHZpcnR1YWwgb3IgZW11bGF0ZWQgZGV2aWNlIGluIGl0LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgc3RtbWFjYCBkcml2ZXJzIGFuZCBzZWUgaWYgYW55IGFyZSBlbXVsYXRlZCBieSBRRU1VLCBvciBwcm92aWRlIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIG15IGFuYWx5c2lzLiBJIHdpbGwgbm93IHNlYXJjaCB0aGUga2VybmVsIHRyZWUgZm9yIGRyaXZlcnMgdGhhdCB1c2Ugc3RtbWFjLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19kdnJfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYz0yODM9c3RhdGljIGludCBkd2NfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jOjMzMDpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzMxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM9NDI9c3RhdGljIGludCBpbnRlbF9ldGhfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYy0xMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM6MTE4Olx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMjk5PXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzNzc6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzc4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYz0zNzQ9c3RhdGljIGludCBpcHE4MDZ4X2dtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jOjQ4MzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDg0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NDk4PXN0YXRpYyBpbnQgbG9vbmdzb25fZHdtYWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU2MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTYyOlx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM9NDI9c3RhdGljIGludCBscGMxOHh4X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jOjY4Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02OS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYz01OTk9c3RhdGljIGludCBtZWRpYXRla19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYzo2NDI6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jLTY0My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYz00Nz1zdGF0aWMgaW50IG1lc29uNl9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jOjczOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYz0zODI9c3RhdGljIGludCBtZXNvbjhiX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jLTQ2My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYzo0NjQ6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jLTQ2NS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjkzPXN0YXRpYyBpbnQgbW90b3Jjb21tX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MzU5Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNjAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYz01MT1zdGF0aWMgaW50IHJ6bjFfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM6NzE6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTcyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYz0zNT1zdGF0aWMgaW50IHNvcGhnb19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmM6NjU6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY2LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jPTE0Nz1zdGF0aWMgaW50IHNwYWNlbWl0X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jOjIwNzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmM9OTA9c3RhdGljIGludCBzdGFyZml2ZV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmMtMTUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYzoxNTM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTI1PXN0YXRpYyBpbnQgc3RtMzJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM6NTc5Olx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy01ODAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM9MTEwNT1zdGF0aWMgaW50IHN1bjhpX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjAyOlx0LyogdGhlIE1BQyBpcyBydW50aW1lIHN1c3BlbmRlZCBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKCksIHNvIHdlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDMtXHQgKiBuZWVkIHRvIGVuc3VyZSB0aGUgTUFDIHJlc3VtZSBiYWNrIGJlZm9yZSBvdGhlciBvcGVyYXRpb25zIHN1Y2hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDgtXHQvKiBUaGUgbXV4IG11c3QgYmUgcmVnaXN0ZXJlZCBhZnRlciBwYXJlbnQgTURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjA5Olx0ICogc28gYWZ0ZXIgc3RtbWFjX2R2cl9wcm9iZSgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMTAtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jPTIxND1zdGF0aWMgaW50IHRlZ3JhX21nYmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTM3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM6Mzc2Olx0ZXJyID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc3LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jPTIwNT1zdGF0aWMgaW50IHZpc2NvbnRpX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYzoyMzc6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jLTIzOC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDExPXZvaWQgc3RtbWFjX2R2cl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxMjppbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTMtXHRcdCAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc4MTQ9RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX3BsYXRfZGF0X2FsbG9jKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzgxNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzgxNjpzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4MTctXHRcdFx0ICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTktLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMjA6ICogc3RtbWFjX2R2cl9wcm9iZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTIxLSAqIEBkZXY6IGRldmljZSBwb2ludGVyXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTI4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTI5OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzMC1cdFx0ICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODE0MDpcdHJldCA9IF9fc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCByZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTQxLVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcGxhdF9kYXQtXHUwMDNlZXhpdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNDUtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTQ2OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTQ3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTgzOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg0LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz04NDY9aW50IHN0bW1hY19wbHRmcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jOjg1NTpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCByZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU4MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDU0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRXRoZXJuZXQgRGV2aWNlIERyaXZlcnMgYW5kIFFFTVUgRW11bGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGxpc3Qgb2YgRXRoZXJuZXQgZHJpdmVycyBhbmQgZGV2aWNlcy4gSSBzZWUgYSB3aG9sZSBzbGV3IG9mIHRoZW06IGBkd21hYy1kd2MtcW9zLWV0aGAsIGBkd21hYy1pbnRlbC1wbGF0YCwgYGR3bWFjLWludGVsYCwgYGR3bWFjLWlwcTgwNnhgLCBgZHdtYWMtbG9vbmdzb25gLCBhbmQgdGhlIGxpc3QgZ29lcyBvbi4gIEl0JiMzOTtzIGNsZWFyLCB0aGV5JiMzOTtyZSBhbGwgaGFyZHdhcmUgTUFDIGNvbnRyb2xsZXJzLiAgU29DIHBsYXRmb3JtIGRldmljZXMsIG1vc3RseSwgb3IgcGh5c2ljYWwgUENJIGRldmljZXMuICBNYWtlcyBzZW5zZSwgcmlnaHQ/CgpCdXQgdGhlbiBJIGhhZCBhIHRob3VnaHQuIFdoYXQgYWJvdXQgUUVNVT8gRG9lcyBRRU1VLCB0aGUgc3RhbmRhcmQgeDg2XzY0IHZlcnNpb24sIGVtdWxhdGUgYW55IG9mIHRoZXNlIGRyaXZlcnMg4oCTIHNvbWV0aGluZyBsaWtlIGBzdG1tYWNgLCBgZHdtYWMtaW50ZWxgLCBvciBhbnkgb2YgdGhvc2UgRFcgWFBDUyBkZXZpY2VzPyAgTGV0JiMzOTtzIGNoZWNrIHdoYXQgbmV0d29yayBkZXZpY2VzIFFFTVUgKmRvZXMqIGVtdWxhdGU6IGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgZXRjLiAgQWgsIG5vIHNpZ24gb2YgdGhlIFN5bm9wc3lzIG9yIERlc2lnbldhcmUgZGV2aWNlcyEgIEFuZCwgdGhpbmtpbmcgYWJvdXQgaXQsIGV2ZW4gb24gQVJNIHRhcmdldHMsIFFFTVUgZW11bGF0ZXMgb3RoZXIgdGhpbmdzLiAgQnV0IHdlJiMzOTtyZSBmb2N1c2VkIG9uIHg4Nl82NCBoZXJlLiBObywgbm8gYHN0bW1hY2Agb3IgYGR3bWFjYCBlbXVsYXRpb24gdG8gYmUgZm91bmQhCgpBbHJpZ2h0LCBuZXh0IHN0ZXA6IGxldCYjMzk7cyB2ZXJpZnkgdGhlcmUgaXNuJiMzOTt0IHNvbWUgc29ydCBvZiB2aXJ0dWFsIGJ1cyBvciBzb2Z0d2FyZSBkZXZpY2UgdXNpbmcgdGhlc2UgZHJpdmVycyB1bmRlciB0aGUgaG9vZC4gVGhpbmdzIGxpa2UgVVNCIG9yIG5ldHdvcmsgZGV2aWNlIGVtdWxhdGlvbiwgdGhhdCBtaWdodCBhYnN0cmFjdCB0aGUgdW5kZXJseWluZyBjb250cm9sbGVyLiBPa2F5LCBzbyBJIHNob3VsZCBsb29rIGludG8gd2hhdCB1c2VzIGBwY3MteHBjc2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHBjc19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0zMjE9c3RhdGljIGludCBrc3o5NDc3X3Bjc19jcmVhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDUtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozNDY6XHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihidXMsIDApO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQ3LVx0aWYgKElTX0VSUihwY3MpKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTM2OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19wY3NfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00MTEtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzo0MTI6XHRcdHBjcyA9IHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KGJ1cywgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00MTMtXHRcdGlmIChJU19FUlIocGNzKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jPTE5Nz1pbnQgZmJuaWNfcGh5bGlua19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYy0yMDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYzoyMDU6XHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihmYmQtXHUwMDNlbWRpb19idXMsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMjA2LVx0aWYgKElTX0VSUihwY3MpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz02MDY9c3RhdGljIGludCBpbnRlbF9tZ2JlX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTYxNS1cdFx0cGNzbm9kZSA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZub2RlLCBcJiMzNDtwY3MtaGFuZGxlXCYjMzQ7LCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NjE2Olx0XHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MTctXHRcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE5LVx0XHRhZGRyID0gZmZzKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrKSAtIDE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjYyMDpcdFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cdTAwM2VtaWksIGFkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MjEtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0xMjY9c3RhdGljIGludCB0eGdiZV9tZGlvX3Bjc19pbml0KHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0xNTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE1NDpcdHBjcyA9IHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KG1paV9idXMsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0xNTUtXHRpZiAoSVNfRVJSKHBjcykpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmM9NDc4PXN0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMtNTI2LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmM6NTI3Olx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXHUwMDNlYnVzLCAoaW50KXBvcnQpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMtNTI4LVx0aWYgKElTX0VSUih4cGNzKSkge1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jPTE1MTI9c3RhdGljIGludCB4cGNzX2lkZW50aWZ5KHN0cnVjdCBkd194cGNzICp4cGNzKVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1MzEtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTMyOnN0YXRpYyBzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfZGF0YShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTMzLXtcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYz0xNTg0PXN0YXRpYyBpbnQgeHBjc19pbml0X2lkKHN0cnVjdCBkd194cGNzICp4cGNzKVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1OTgtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTk5OnN0YXRpYyBzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYwMC17XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYwMy1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2MDQ6XHR4cGNzID0geHBjc19jcmVhdGVfZGF0YShtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MDUtXHRpZiAoSVNfRVJSKHhwY3MpKVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MzUtLyoqXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjM2OiAqIHhwY3NfY3JlYXRlX21kaW9kZXYoKSAtIGNyZWF0ZSBhIERXIHhQQ1MgaW5zdGFuY2Ugd2l0aCB0aGUgTURJTyBAYWRkclxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYzNy0gKiBAYnVzOiBwb2ludGVyIHRvIHRoZSBNRElPLWJ1cyBkZXNjcmlwdG9yIGZvciB0aGUgZGV2aWNlIHRvIGJlIGxvb2tlZCBhdFxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NDMtICovXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjQ0OnN0cnVjdCBkd194cGNzICp4cGNzX2NyZWF0ZV9tZGlvZGV2KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY0NS17XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1Mi1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NTM6XHR4cGNzID0geHBjc19jcmVhdGUobWRpb2Rldik7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjU0LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY1NTpcdC8qIHhwY3NfY3JlYXRlKCkgaGFzIHRha2VuIGEgcmVmY291bnQgb24gdGhlIG1kaW9kZXYgaWYgaXQgd2FzXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjU2Olx0ICogc3VjY2Vzc2Z1bC4gSWYgeHBjc19jcmVhdGUoKSBmYWlscywgdGhpcyB3aWxsIGZyZWUgdGhlIG1kaW9cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NTctXHQgKiBkZXZpY2UgaGVyZS4gSW4gYW55IGNhc2UsIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGhvbGQgb3VyIHJlZmVyZW5jZVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NjQtfVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY2NTpFWFBPUlRfU1lNQk9MX0dQTCh4cGNzX2NyZWF0ZV9tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NjYtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjY3OnN0cnVjdCBwaHlsaW5rX3BjcyAqeHBjc19jcmVhdGVfcGNzX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY4LXtcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjcwLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY3MTpcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KGJ1cywgYWRkcik7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjcyLVx0aWYgKElTX0VSUih4cGNzKSlcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjc2LX1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2Nzc6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfcGNzX21kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY3OC1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NzktLyoqXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjgwOiAqIHhwY3NfY3JlYXRlX2Z3bm9kZSgpIC0gQ3JlYXRlIGEgRFcgeFBDUyBpbnN0YW5jZSBmcm9tIEBmd25vZGVcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2ODEtICogQGZ3bm9kZTogZndub2RlIGhhbmRsZSBwb2luaW5nIHRvIHRoZSBEVyBYUENTIGRldmljZVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2ODgtICovXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjg5OnN0cnVjdCBkd194cGNzICp4cGNzX2NyZWF0ZV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2OTAte1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE3MDAtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNzAxOlx0eHBjcyA9IHhwY3NfY3JlYXRlKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTcwMi1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE3MDM6XHQvKiB4cGNzX2NyZWF0ZSgpIGhhcyB0YWtlbiBhIHJlZmNvdW50IG9uIHRoZSBtZGlvZGV2IGlmIGl0IHdhc1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTcwNDpcdCAqIHN1Y2Nlc3NmdWwuIElmIHhwY3NfY3JlYXRlKCkgZmFpbHMsIHRoaXMgd2lsbCBmcmVlIHRoZSBtZGlvXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzA1LVx0ICogZGV2aWNlIGhlcmUuIEluIGFueSBjYXNlLCB3ZSBkb24mIzM5O3QgbmVlZCB0byBob2xkIG91ciByZWZlcmVuY2Vcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzEyLX1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE3MTM6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfZndub2RlKTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE3MTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDU2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTM0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBYUENTIERyaXZlciBNb2RpZmljYXRpb25zIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIGB4cGNzX2NyZWF0ZSpgIGZ1bmN0aW9ucywgYW5kIG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCB3ZSYjMzk7cmUgbGlrZWx5ICpub3QqIGdvaW5nIHRvIGJlIGFibGUgdG8gZnV6eiB0aGlzIGVmZmVjdGl2ZWx5IGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGtleSBpcyB0byBzZWUgaWYgYW55IG9mIHRoZXNlIGNoYW5nZXMgcGFzcyB0aGUgKm5lZ2F0aXZlKiBjcml0ZXJpYS4KCkkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgY2FsbGVycyBvZiBgeHBjc19jcmVhdGUqYDoga3N6OTQ3Nywgc2phMTEwNSwgZmJuaWMsIGR3bWFjLWludGVsLCB0eGdiZSwgYW5kIHBjcy14cGNzLXJrLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhlIHBhdHRlcm47IG5vbmUgb2YgdGhlbSBhcmUgZW11bGF0ZWQgYnkgUUVNVSwgdGhleSBhcmUgYWxsIGRlcGVuZGVudCBvbiBlaXRoZXIgcGh5c2ljYWwgU29DcyBvciBzcGVjaWZpYyBQQ0llIGNhcmRzIHRoYXQgYXJlIG5vdCBzdGFuZGFyZCBmYXJlLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBjaGVja2xpc3QuCgoxLiAgV2UgaGF2ZSBgRG9jdW1lbnRhdGlvbmAgY2hhbmdlcyAoYC55YW1sYCBhbmQgYC5kdHNgIGZpbGVzKSwgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZS4gVGhhdCYjMzk7cyBhIG5vLWdvIGZvciBmdXp6aW5nLiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZSBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSwgYW5kIGRvbiYjMzk7dCBkaXJlY3RseSBpbXBhY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS4KCjIuICBUaGUgYGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXBgIGZpbGVzIGFyZSBhbHNvIG91dCwgYXMgdGhlc2UgYXJlIERUUyBmaWxlcyBmb3IgYW4gYGFybTY0YCBSb2NrY2hpcCBhcmNoaXRlY3R1cmUsIGFuZCB3aGlsZSBEVCBpcyB1c2VkIG9uIG90aGVyIHBsYXRmb3JtcywgdGhpcyB0YXJnZXRzIEFSTSwgYW5kIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGBhbWQ2NGAuCgozLiAgVGhlIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBjaGFuZ2VzIGluIHRoZSBgZHJpdmVycy9uZXQvcGNzYCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjYCBkaXJlY3RvcmllcyBhcmUgYSBncmV5IGFyZWEuIFdoaWxlIHRoZXNlIGFmZmVjdCB0aGUgYnVpbGQgc3lzdGVtLCB0aGV5IGRvbiYjMzk7dCBkaXJlY3RseSBpbnRyb2R1Y2UgYW55IG5ldyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQsIHNvIGl0IG1heSBvciBtYXkgbm90IGRpc3F1YWxpZnkgdGhlIG1vZGlmaWNhdGlvbi4KCjQuICBOb3csIHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMsIGFuZCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IGBwY3MteHBjcy1yay5jYCwgYHBoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jYCwgYGR3bWFjLXJrLmNgLCBgZHdtYWMtcmVuZXNhcy1nYmV0aC5jYCwgYGR3bWFjLXJ6bjEuY2AsIGBkd21hYy1zb2NmcGdhLmNgLCBhbmQgYGR3bWFjLWludGVsLmNgLiBUaGVzZSBhbGwgdGFyZ2V0IHNwZWNpZmljIGhhcmR3YXJlOiBSb2NrY2hpcCBTb0NzLCBSZW5lc2FzIFNvQ3MsIEludGVsIFNvQyBGUEdBcywgYW5kIEludGVsIFNvQ3MuIFRoZXkgcmVxdWlyZSAqcGh5c2ljYWwqIGRldmljZXMgb3IsIGluIHRoZSBjYXNlIG9mIGBkd21hYy1pbnRlbGAsIGEgc3BlY2lmaWMgUENJZSBkZXZpY2UgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgYXZhaWxhYmxlIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgKmRlZmluaXRlbHkqIGEgbmVnYXRpdmUuCgo1LiBGaW5hbGx5LCB3ZSBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXI6IGBkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgWFBDUyBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkLiBFeGFtaW5pbmcgdGhlIG1vZGlmaWNhdGlvbnMsIEkgc2VlIGB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paWAgYW5kIGB4cGNzX2dldF9zdGF0ZV9jMzdfc2dtaWlgLiBIb3dldmVyLCB0aGVzZSBhcmUgcGFydCBvZiB0aGUgRFcgWFBDUyBQQ1MgZHJpdmVyLCB3aGljaCBpcyBvbmx5IGluc3RhbnRpYXRlZCBieSBkcml2ZXJzIGZvciB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgKHRoZSBkZXZpY2VzIGxpc3RlZCBhYm92ZSkuIFNvIGFnYWluLCB3ZSYjMzk7cmUgc3R1Y2suCgo2LiBUaGUgbW9kaWZpY2F0aW9uIHRvIGBzdG1tYWNfbWRpby5jYCBsb29rcyBpbnRlcmVzdGluZzogYHN0bW1hY19wY3Nfc2V0dXBgIGFuZCBgc3RtbWFjX3Bjc19jbGVhbmAsIGJ1dCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgc3RtbWFjX2R2cl9wcm9iZWAgLyBgc3RtbWFjX2R2cl9yZW1vdmVgLiBTbywgd2UgbmVlZCB0byB2ZXJpZnkgd2hlcmUgYHN0bW1hY19wY3Nfc2V0dXBgIGlzIGNhbGxlZCwgYW5kLCBtb3N0IGxpa2VseSwgd2lsbCBiZSByZWxhdGVkIHRvIHRoZXNlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBkcml2ZXJzLgoKU28sIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBhbGwgbW9kaWZpY2F0aW9ucyBmYWxsIGludG8gdGhlICYjMzQ7bmVnYXRpdmUgY3JpdGVyaWEmIzM0OyBjYXRlZ29yaWVzLiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZSBlaXRoZXIgZG9jdW1lbnRhdGlvbiwgQVJNL1JvY2tjaGlwIFNvQyBzcGVjaWZpYywgZGVwZW5kZW50IG9uIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQmIzM5O3Mgbm90IGVtdWxhdGVkIGJ5IFFFTVUsIG9yIHBhcnQgb2YgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmUuICoqSW4gY29uY2x1c2lvbiwgSSYjMzk7ZCBzYXkgdGhpcyBpcyBub3Qgd29ydGggZnV6emluZyBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuKioKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX3Bjc19zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD0zOTk9dm9pZCBzdG1tYWNfbWRpb191bmxvY2soc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQwMDppbnQgc3RtbWFjX3Bjc19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDEtdm9pZCBzdG1tYWNfcGNzX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc4MTY9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODA2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA2NjpcdHJldCA9IHN0bW1hY19wY3Nfc2V0dXAobmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwNjctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9MzgxPWludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNDI1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo0MjY6aW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTQyNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzQyCgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBObyBGdXp6aW5nIE5lZWRlZCBIZXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHN0bW1hY19wY3Nfc2V0dXBgIGlzIG9ubHkgY2FsbGVkIGR1cmluZyB0aGUgZHJpdmVyIHByb2JpbmcgcGhhc2UgKGBfX3N0bW1hY19kdnJfcHJvYmVgKSB3aXRoaW4gYHN0bW1hY19tYWluLmNgLCBhbmQgdGhlIGNsZWFudXAgY291bnRlcnBhcnQgKGBzdG1tYWNfcGNzX2NsZWFuYCkgb25seSBydW5zIHdoZW4gdGhlIGRyaXZlciBpcyBiZWluZyB0b3JuIGRvd24gb3IgaWYgcHJvYmluZyBmYWlscy4gTm93LCB0aGF0IGBfX3N0bW1hY19kdnJfcHJvYmVgIGZ1bmN0aW9uPyBJdCYjMzk7cyBzdHJpY3RseSBmb3IgcGh5c2ljYWwgc3RtbWFjIGRldmljZXMg4oCTIHRob3NlIGBkd21hYy0qYCBjb250cm9sbGVycyB5b3UgZmluZCBvbiBTb0NzIG9yIHBoeXNpY2FsIFBDSWUgY2FyZHMuIEFuZCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IG5vbmUgb2YgdGhlc2UgYXJlIGVtdWxhdGVkIGluIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCB3aGljaCBhcmUgdGhlIHN0YW5kYXJkIGVudmlyb25tZW50cyB3ZSYjMzk7cmUgY29uc2lkZXJpbmcuCgpGdXJ0aGVybW9yZSwgbG9va2luZyBhdCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCBhbGwgdGhvc2UgcGxhdGZvcm0gZHJpdmVycyBzcGVjaWZpYyB0byBBUk0sIFJvY2tjaGlwLCBSZW5lc2FzLCBTb0NGUEdBIGFyZSB0b3RhbGx5IGlycmVsZXZhbnQuIFRoZXkmIzM5O3JlIG5vbi1leGlzdGVudCBpbiB0aGlzIGNvbnRleHQuIFRoZSBJbnRlbCBQQ0kgZHJpdmVyIChgZHdtYWMtaW50ZWxgKSBoYXMgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIEludGVsIGhhcmR3YXJlIChFbGtoYXJ0IExha2UsIFRpZ2VyIExha2UsIFF1YXJrLCBBbGRlciBMYWtlIEV0aGVybmV0IGNvbnRyb2xsZXJzKSB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQgYnkgdGhlIHN0YW5kYXJkIFFFTVUgb3IgYXJlIGF2YWlsYWJsZSBvbiBjbG91ZCBWTXMuCgpUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhlcmUgYXJlIGxpbWl0ZWQgdG86CgoxLiAgTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgc3R1ZmY6IGRvY3VtZW50YXRpb24sIERUIGJpbmRpbmdzLCBhbmQgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZS4KMi4gIENvZGUgcGF0aHMgdGhhdCBhcmUgKm9ubHkqIHJlbGV2YW50IHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiBhbWQ2NCAobGlrZSB0aG9zZSBgYXJjaC9hcm02NGAgRGV2aWNlIFRyZWUgZmlsZXMpLgozLiAgSGFyZHdhcmUgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBoYXJkd2FyZSB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gUUVNVSBvciBHQ0UuIFRoaXMgaW5jbHVkZXMgUm9ja2NoaXAsIFJlbmVzYXMsIFNvQyBGUEdBLCBhbmQgSW50ZWwgU29DIEV0aGVybmV0IGNvbnRyb2xsZXJzIGFuZCBEVyBYUENTIFBIWS9QQ1MuCgpFdmVyeXRoaW5nIHBvaW50cyBkaXJlY3RseSB0byBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBhbGlnbnM6CgoqICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlIC0gKkNoZWNrISoKKiAgIGBSZWFzb25pbmdgOiAqQ2xlYXIgZXhwbGFuYXRpb24gYWJvdmU7IERldmljZSBUcmVlLCBhbWQ2NCwgcGxhdGZvcm0vUENJIGRyaXZlcnMgaXJyZWxldmFudCB0byBhbWQ2NC9RRU1VL0dDRSwgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiogLSAqQ2hlY2shKgoqICAgYEZvY3VzU3ltYm9sc2A6IFxbIF0gKG9yIG51bGwvZW1wdHkpIC0gKk1ha2VzIHNlbnNlOyBub3RoaW5nIHRvIGZvY3VzIG9uLioKKiAgIGBFbmFibGVDb25maWdzYDogXFsgXSAob3IgbnVsbC9lbXB0eSkgLSAqQ29ycmVjdDsgbm8gc3BlY2lmaWMgY29uZmlncyBhcmUgbmVlZGVkLioKCk9rYXksIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyBhIG5vLWdvIGZvciBmdXp6aW5nIGluIHRoaXMgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgUm9ja2NoaXAgUkszNTY4IERlc2lnbldhcmUgRXRoZXJuZXQgUENTIChYUENTKSBhbmQgcmVmYWN0b3JzIFBDUyBpbml0aWFsaXphdGlvbiBpbiB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlciBmYW1pbHkgKGR3bWFjLXJrLCBkd21hYy1pbnRlbCwgZHdtYWMtcmVuZXNhcywgZHdtYWMtc29jZnBnYSwgZHdtYWMtcnpuMSkuIEFsbCBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpOiBkb2N1bWVudGF0aW9uL2RldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBhcm02NCBEVFMgY2hhbmdlcyBhcmUgbm9uLWV4ZWN1dGFibGUgb24gYW1kNjQsIGFuZCB0aGUgYWZmZWN0ZWQgZHJpdmVycyAoc3RtbWFjIGR3bWFjIHZhcmlhbnRzIGFuZCBTeW5vcHN5cyBEVyBYUENTKSByZXF1aXJlIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIG9yIHBoeXNpY2FsIEludGVsL1JvY2tjaGlwL1JlbmVzYXMgc2lsaWNvbiBub3QgZW11bGF0ZWQgYnkgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBSb2NrY2hpcCBSSzM1NjggRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1MgKFhQQ1MpIGFuZCByZWZhY3RvcnMgUENTIGluaXRpYWxpemF0aW9uIGluIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIGZhbWlseSAoZHdtYWMtcmssIGR3bWFjLWludGVsLCBkd21hYy1yZW5lc2FzLCBkd21hYy1zb2NmcGdhLCBkd21hYy1yem4xKS4gQWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSk6IGRvY3VtZW50YXRpb24vZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIGFybTY0IERUUyBjaGFuZ2VzIGFyZSBub24tZXhlY3V0YWJsZSBvbiBhbWQ2NCwgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzIChzdG1tYWMgZHdtYWMgdmFyaWFudHMgYW5kIFN5bm9wc3lzIERXIFhQQ1MpIHJlcXVpcmUgcGh5c2ljYWwgU29DIHBsYXRmb3JtIGRldmljZXMgb3IgcGh5c2ljYWwgSW50ZWwvUm9ja2NoaXAvUmVuZXNhcyBzaWxpY29uIG5vdCBlbXVsYXRlZCBieSBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI1OjM2LjY2OTUzMzA3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNTk4Mjg4NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIFJvY2tjaGlwIFJLMzU2OCBEZXNpZ25XYXJlIEV0aGVybmV0IFBDUyAoWFBDUykgYW5kIHJlZmFjdG9ycyBQQ1MgaW5pdGlhbGl6YXRpb24gaW4gdGhlIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIgZmFtaWx5IChkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMsIGR3bWFjLXNvY2ZwZ2EsIGR3bWFjLXJ6bjEpLiBBbGwgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKTogZG9jdW1lbnRhdGlvbi9kZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgYXJtNjQgRFRTIGNoYW5nZXMgYXJlIG5vbi1leGVjdXRhYmxlIG9uIGFtZDY0LCBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHN0bW1hYyBkd21hYyB2YXJpYW50cyBhbmQgU3lub3BzeXMgRFcgWFBDUykgcmVxdWlyZSBwaHlzaWNhbCBTb0MgcGxhdGZvcm0gZGV2aWNlcyBvciBwaHlzaWNhbCBJbnRlbC9Sb2NrY2hpcC9SZW5lc2FzIHNpbGljb24gbm90IGVtdWxhdGVkIGJ5IFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNTozNi42Njk1Mzg1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5NzUwNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDExZmMyMTVmYWJkNWZhOTUxNzljYzM4YmQwYmE4MTFlNjBmOTk5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAxNjoyNTozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzAzZmNmZjBlM2Y3MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sXFxuQEAgLTAsMCArMSwxMTAgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JvY2tjaGlwLHJrMzU2OC14cGNzLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFJvY2tjaGlwIFJLMzU2OCBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IFBDU1xcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBDb2lhIFByYW50IFxcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXFx1MDAzZVxcbitcXG4rZGVzY3JpcHRpb246IHxcXG4rICBSb2NrY2hpcCBSSzM1NjggU29DIGludGVncmF0ZXMgYSBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IFBoeXNpY2FsXFxuKyAgQ29kaW5nIFN1YmxheWVyIChYUENTKS5cXG4rICBUaGUgUENTIHByb3ZpZGVzIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbCAoTUFDKVxcbisgIGFuZCB0aGUgUGh5c2ljYWwgTWVkaXVtIEF0dGFjaG1lbnQgKFBNQSkgc3VibGF5ZXIgdGhyb3VnaCBhIE1lZGlhXFxuKyAgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChHTUlJKS5cXG4rXFxuKyAgVGhlIFhQQ1MgaXMgYWNjZXNzZWQgb3ZlciB0aGUgQVBCMyBidXMgYW5kIGludGVybmFsbHkgY29ubmVjdGVkIHRvIGFcXG4rICBOYW5lbmcgQ29tYm8gU2VyRGVzIFBIWS5cXG4rICBJdCBzdXBwb3J0cyAxMDAwQkFTRS1YLCBTR01JSSBhbmQgUVNHTUlJIG1vZGVzLlxcbitcXG4rICBUaGUgYmxvY2sgY29udGFpbnMgZm91ciBNSUkgcG9ydHMgdGhhdCBjYW4gYmUgaW5kaXZpZHVhbGx5IGVuYWJsZWQgYW5kXFxuKyAgcm91dGVkIHRvIG9uZSBvZiB0aGUgRXRoZXJuZXQgR01BQyBjb250cm9sbGVycyB2aWEgdGhlIHBjcy1oYW5kbGVcXG4rICBwcm9wZXJ0eSBpbiB0aGUgTUFDIGRldmljZSB0cmVlIG5vZGUuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBjb25zdDogcm9ja2NoaXAscmszNTY4LXhwY3NcXG4rXFxuKyAgcmVnOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgXFxcIiNhZGRyZXNzLWNlbGxzXFxcIjpcXG4rICAgIGNvbnN0OiAxXFxuK1xcbisgIFxcXCIjc2l6ZS1jZWxsc1xcXCI6XFxuKyAgICBjb25zdDogMFxcbitcXG4rICBjbG9ja3M6XFxuKyAgICBpdGVtczpcXG4rICAgICAgLSBkZXNjcmlwdGlvbjogQVBCMyBidXMgaW50ZXJmYWNlIGNsb2NrIChjbGtfY3NyX2kpLCByZXF1aXJlZCBmb3IgcmVnaXN0ZXIgYWNjZXNzXFxuKyAgICAgIC0gZGVzY3JpcHRpb246IEVFRSBjbG9jayAoY2xrX2VlZV9pKSwgcmVxdWlyZWQgZm9yIEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXQgb3BlcmF0aW9uXFxuK1xcbisgIGNsb2NrLW5hbWVzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gY29uc3Q6IGNzclxcbisgICAgICAtIGNvbnN0OiBlZWVcXG4rXFxuKyAgcGh5czpcXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbisgIHBoeS1uYW1lczpcXG4rICAgIGNvbnN0OiBzZXJkZXNcXG4rXFxuKyAgcG93ZXItZG9tYWluczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbitwYXR0ZXJuUHJvcGVydGllczpcXG4rICBcXFwiXmV0aGVybmV0LXBjcy1taWlAWzAtM10kXFxcIjpcXG4rICAgIHR5cGU6IG9iamVjdFxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIE9uZSBvZiB0aGUgZm91ciBNSUkgcG9ydHMgb2YgdGhlIFhQQ1MuIFRoZSBwb3J0IGlzIGxpbmtlZCB0byBhblxcbisgICAgICBFdGhlcm5ldCBNQUMgY29udHJvbGxlciB2aWEgdGhlIHBjcy1oYW5kbGUgcHJvcGVydHkgaW4gdGhlIE1BQydzXFxuKyAgICAgIGRldmljZSB0cmVlIG5vZGUuXFxuK1xcbisgICAgcHJvcGVydGllczpcXG4rICAgICAgcmVnOlxcbisgICAgICAgIGRlc2NyaXB0aW9uOiBNSUkgcG9ydCBudW1iZXIuXFxuKyAgICAgICAgZW51bTogWzAsIDEsIDIsIDNdXFxuK1xcbisgICAgcmVxdWlyZWQ6XFxuKyAgICAgIC0gcmVnXFxuK1xcbisgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIHJlZ1xcbisgIC0gXFxcIiNhZGRyZXNzLWNlbGxzXFxcIlxcbisgIC0gXFxcIiNzaXplLWNlbGxzXFxcIlxcbisgIC0gY2xvY2tzXFxuKyAgLSBjbG9jay1uYW1lc1xcbisgIC0gcGh5c1xcbisgIC0gcGh5LW5hbWVzXFxuKyAgLSBwb3dlci1kb21haW5zXFxuK1xcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2Nsb2NrL3JrMzU2OC1jcnUuaFxcdTAwM2VcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9wb3dlci9yazM1NjgtcG93ZXIuaFxcdTAwM2VcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9waHkvcGh5LmhcXHUwMDNlXFxuK1xcbisgICAgZXRoZXJuZXQtcGNzQGZkYTAwMDAwIHtcXG4rICAgICAgY29tcGF0aWJsZSA9IFxcXCJyb2NrY2hpcCxyazM1NjgteHBjc1xcXCI7XFxuKyAgICAgIHJlZyA9IFxcdTAwM2MweGZkYTAwMDAwIDB4MjAwMDAwXFx1MDAzZTtcXG4rICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmNydSBQQ0xLX1hQQ1NcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmNydSBDTEtfWFBDU19FRUVcXHUwMDNlO1xcbisgICAgICBjbG9jay1uYW1lcyA9IFxcXCJjc3JcXFwiLCBcXFwiZWVlXFxcIjtcXG4rICAgICAgcGh5cyA9IFxcdTAwM2NcXHUwMDI2Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUlcXHUwMDNlO1xcbisgICAgICBwaHktbmFtZXMgPSBcXFwic2VyZGVzXFxcIjtcXG4rICAgICAgcG93ZXItZG9tYWlucyA9IFxcdTAwM2NcXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcXHUwMDNlO1xcbitcXG4rICAgICAgZXRoZXJuZXQtcGNzLW1paUAwIHtcXG4rICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWxcXG5pbmRleCA4MGMyNTI4NDUzNDljLi42N2IyMWVhNzdlYzk2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcm9ja2NoaXAtZHdtYWMueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcm9ja2NoaXAtZHdtYWMueWFtbFxcbkBAIC0xMjAsNiArMTIwLDEyIEBAIHByb3BlcnRpZXM6XFxuICAgICBtYXhpbXVtOiAweDdGXFxuICAgICBkZWZhdWx0OiAweDEwXFxuIFxcbisgIHBjcy1oYW5kbGU6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgU3BlY2lmaWVzIGEgcmVmZXJlbmNlIHRvIGEgbm9kZSByZXByZXNlbnRpbmcgdGhlIFBDUyBkZXZpY2VcXG4rICAgICAgY29ubmVjdGVkIHRvIHRoaXMgR01BQy4gUmVxdWlyZWQgd2hlbiBwaHktbW9kZSBpcyBcXFwic2dtaWlcXFwiLlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuICAgcGh5LXN1cHBseTpcXG4gICAgIGRlc2NyaXB0aW9uOiBQSFkgcmVndWxhdG9yXFxuIFxcbkBAIC0xNTksNiArMTY1LDE1IEBAIGFsbE9mOlxcbiAgICAgICAgIGNsb2NrczpcXG4gICAgICAgICAgIG1pbkl0ZW1zOiA1XFxuIFxcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgcGh5LW1vZGU6XFxuKyAgICAgICAgICBjb250YWluczpcXG4rICAgICAgICAgICAgY29uc3Q6IHNnbWlpXFxuKyAgICB0aGVuOlxcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIHBjcy1oYW5kbGVcXG4rXFxuIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4gXFxuIGV4YW1wbGVzOlxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbFxcbmluZGV4IDM3OWIwOGJkOWU5N2EuLjhlODk4YmNlOWFmNzMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcXG5AQCAtODAsNiArODAsMTUgQEAgcHJvcGVydGllczpcXG4gICAgIGRlc2NyaXB0aW9uOlxcbiAgICAgICBTb21lIGFkZGl0aW9uYWwgcGlwZSBzZXR0aW5ncyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBHUkYgcmVncy5cXG4gXFxuKyAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxcbisgICAgZW51bTogWzAsIDFdXFxuKyAgICBkZWZhdWx0OiAxXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgU2VsZWN0IGdtYWMwIG9yIGdtYWMxIHRvIGJlIHVzZWQgYXMgU0dNSUkgY29udHJvbGxlci5cXG4rICAgICAgVGhlIGhhcmR3YXJlIHJlc2V0IHZhbHVlIGlzIEdNQUMxICgxKS4gU2V0IHRoaXMgdG8gMCB0byByb3V0ZVxcbisgICAgICBTR01JSSB0byBHTUFDMC5cXG4rXFxuICAgXFxcIiNwaHktY2VsbHNcXFwiOlxcbiAgICAgY29uc3Q6IDFcXG4gXFxuQEAgLTEwNSw2ICsxMTQsMTAgQEAgYWxsT2Y6XFxuICAgICAgICAgICBtYXhJdGVtczogMVxcbiAgICAgICAgIHJlc2V0LW5hbWVzOlxcbiAgICAgICAgICAgbWF4SXRlbXM6IDFcXG4rICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiB0cnVlXFxuKyAgICBlbHNlOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6IGZhbHNlXFxuICAgLSBpZjpcXG4gICAgICAgcHJvcGVydGllczpcXG4gICAgICAgICBjb21wYXRpYmxlOlxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggM2IyZWIyYTdhODlhOC4uZjUzYTUxOWRhNjI5OCAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTIzNzM5LDYgKzIzNzM5LDE1IEBAIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9yb2NrY2hpcCxyazM1NzYtc2FpLnlhbWxcXG4gRjpcXHRzb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfc2FpLipcXG4gXFxuK1JPQ0tDSElQIFhQQ1MgRFJJVkVSXFxuK006XFx0Q29pYSBQcmFudCBcXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVxcdTAwM2VcXG4rTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuK0w6XFx0bGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sXFxuK0Y6XFx0ZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcXG4rRjpcXHRpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXFxuK1xcbiBST0NLRVIgRFJJVkVSXFxuIE06XFx0SmlyaSBQaXJrbyBcXHUwMDNjamlyaUByZXNudWxsaS51c1xcdTAwM2VcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcXG5pbmRleCA1OGMxMDUyYmE4ZWYzLi5mZGFhNGEyYTQzMjhiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcXG5AQCAtMyw2ICszLDcgQEBcXG4gL2R0cy12MS87XFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvcGluY3RybC9yb2NrY2hpcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3Mvc29jL3JvY2tjaGlwLHZvcDIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInJrMzU2OC5kdHNpXFxcIlxcbkBAIC0yNDEsNiArMjQyLDcgQEAgXFx1MDAyNmNvbWJwaHkxIHtcXG4gfTtcXG4gXFxuIFxcdTAwMjZjb21icGh5MiB7XFxuK1xcdHJvY2tjaGlwLHNnbWlpLW1hYy1zZWwgPSBcXHUwMDNjMFxcdTAwM2U7XFxuIFxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4gfTtcXG4gXFxuQEAgLTI2MCw5ICsyNjIsMTggQEAgXFx1MDAyNmNwdTMge1xcbiBcXHRjcHUtc3VwcGx5ID0gXFx1MDAzY1xcdTAwMjZ2ZGRfY3B1XFx1MDAzZTtcXG4gfTtcXG4gXFxuLS8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAocmVxdWlyZSBTR01JSSkgKi9cXG4rLyogTW90b3Jjb21tIFlUODUyMVNDIExBTiBwb3J0ICovXFxuIFxcdTAwMjZnbWFjMCB7XFxuLVxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcdGFzc2lnbmVkLWNsb2NrcyA9IFxcdTAwM2NcXHUwMDI2Y3J1IFNDTEtfR01BQzBfUlhfVFhcXHUwMDNlO1xcbitcXHRhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gXFx1MDAzY1xcdTAwMjZjbGtfZ21hYzBfeHBjc19taWlcXHUwMDNlO1xcbitcXHRtYW5hZ2VkID0gXFxcImluLWJhbmQtc3RhdHVzXFxcIjtcXG4rXFx0cGNzLWhhbmRsZSA9IFxcdTAwM2NcXHUwMDI2eHBjc19taWkwXFx1MDAzZTtcXG4rXFx0cGh5LWhhbmRsZSA9IFxcdTAwM2NcXHUwMDI2c2dtaWlfcGh5XFx1MDAzZTtcXG4rXFx0cGh5LW1vZGUgPSBcXFwic2dtaWlcXFwiO1xcbitcXHRwaHktc3VwcGx5ID0gXFx1MDAzY1xcdTAwMjZ2Y2NfM3YzXFx1MDAzZTtcXG4rXFx0cGluY3RybC1uYW1lcyA9IFxcXCJkZWZhdWx0XFxcIjtcXG4rXFx0cGluY3RybC0wID0gXFx1MDAzY1xcdTAwMjZnbWFjMF9taWltXFx1MDAzZTtcXG4rXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbiB9O1xcbiBcXG4gLyogTW90b3Jjb21tIFlUODUyMVNDIFdBTiBwb3J0ICovXFxuQEAgLTM0MSw2ICszNTIsMzYgQEAgXFx1MDAyNmkyczBfOGNoIHtcXG4gXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbiB9O1xcbiBcXG4rXFx1MDAyNm1kaW8wIHtcXG4rXFx0c2dtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjJcXFwiO1xcbitcXHRcXHRyZWcgPSBcXHUwMDNjMHgzXFx1MDAzZTtcXG4rXFx0XFx0bWF4LXNwZWVkID0gXFx1MDAzYzEwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1hc3NlcnQtdXMgPSBcXHUwMDNjMjAwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1kZWFzc2VydC11cyA9IFxcdTAwM2MxMDAwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1ncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzMgUktfUEM2IEdQSU9fQUNUSVZFX0xPV1xcdTAwM2U7XFxuK1xcbitcXHRcXHRsZWRzIHtcXG4rXFx0XFx0XFx0I2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcdFxcdFxcdCNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rXFx0XFx0XFx0bGVkQDEge1xcbitcXHRcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcdFxcdFxcdFxcdGNvbG9yID0gXFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlxcdTAwM2U7XFxuK1xcdFxcdFxcdFxcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcXG4rXFx0XFx0XFx0XFx0ZGVmYXVsdC1zdGF0ZSA9IFxcXCJrZWVwXFxcIjtcXG4rXFx0XFx0XFx0fTtcXG4rXFxuK1xcdFxcdFxcdGxlZEAyIHtcXG4rXFx0XFx0XFx0XFx0cmVnID0gXFx1MDAzYzJcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfR1JFRU5cXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XFxuK1xcdFxcdFxcdFxcdGRlZmF1bHQtc3RhdGUgPSBcXFwia2VlcFxcXCI7XFxuK1xcdFxcdFxcdH07XFxuK1xcdFxcdH07XFxuK1xcdH07XFxuK307XFxuK1xcbiBcXHUwMDI2bWRpbzEge1xcbiBcXHRyZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHtcXG4gXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlxcXCI7XFxuQEAgLTM1MCw2ICszOTEsMjUgQEAgcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XFxuIFxcdFxcdHJlc2V0LWdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvNCBSS19QQzAgR1BJT19BQ1RJVkVfTE9XXFx1MDAzZTtcXG4gXFx0XFx0cngtaW50ZXJuYWwtZGVsYXktcHMgPSBcXHUwMDNjMTUwMFxcdTAwM2U7XFxuIFxcdFxcdHR4LWludGVybmFsLWRlbGF5LXBzID0gXFx1MDAzYzE1MDBcXHUwMDNlO1xcbitcXG4rXFx0XFx0bGVkcyB7XFxuK1xcdFxcdFxcdCNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHQjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuK1xcdFxcdFxcdGxlZEAxIHtcXG4rXFx0XFx0XFx0XFx0cmVnID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9XQU47XFxuK1xcdFxcdFxcdFxcdGRlZmF1bHQtc3RhdGUgPSBcXFwia2VlcFxcXCI7XFxuK1xcdFxcdFxcdH07XFxuK1xcbitcXHRcXHRcXHRsZWRAMiB7XFxuK1xcdFxcdFxcdFxcdHJlZyA9IFxcdTAwM2MyXFx1MDAzZTtcXG4rXFx0XFx0XFx0XFx0Y29sb3IgPSBcXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXFx1MDAzZTtcXG4rXFx0XFx0XFx0XFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xcbitcXHRcXHRcXHRcXHRkZWZhdWx0LXN0YXRlID0gXFxcImtlZXBcXFwiO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHR9O1xcbiBcXHR9O1xcbiB9O1xcbiBcXG5AQCAtNTg2LDMgKzY0NiwxMyBAQCBcXHUwMDI2eGluMzJrIHtcXG4gXFx0cGluY3RybC1uYW1lcyA9IFxcXCJkZWZhdWx0XFxcIjtcXG4gXFx0cGluY3RybC0wID0gXFx1MDAzY1xcdTAwMjZjbGszMmtfb3V0MVxcdTAwM2U7XFxuIH07XFxuK1xcbitcXHUwMDI2eHBjcyB7XFxuK1xcdHBoeXMgPSBcXHUwMDNjXFx1MDAyNmNvbWJwaHkyIFBIWV9UWVBFX1NHTUlJXFx1MDAzZTtcXG4rXFx0cGh5LW5hbWVzID0gXFxcInNlcmRlc1xcXCI7XFxuK1xcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4rfTtcXG4rXFxuK1xcdTAwMjZ4cGNzX21paTAge1xcbitcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuK307XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXFxuaW5kZXggM2JjNjUzZjAyN2YxZi4uMjI3ZDAzZTMzNjA0MyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxcbkBAIC0xMTAsNiArMTEwLDUxIEBAIHNhdGEwOiBzYXRhQGZjMDAwMDAwIHtcXG4gXFx0XFx0c3RhdHVzID0gXFxcImRpc2FibGVkXFxcIjtcXG4gXFx0fTtcXG4gXFxuK1xcdHhwY3M6IGV0aGVybmV0LXBjc0BmZGEwMDAwMCB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwicm9ja2NoaXAscmszNTY4LXhwY3NcXFwiO1xcbitcXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0I3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdFxcdHJlZyA9IFxcdTAwM2MweDAgMHhmZGEwMDAwMCAweDAgMHgyMDAwMDBcXHUwMDNlO1xcbitcXHRcXHRjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmNydSBQQ0xLX1hQQ1NcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmNydSBDTEtfWFBDU19FRUVcXHUwMDNlO1xcbitcXHRcXHRjbG9jay1uYW1lcyA9IFxcXCJjc3JcXFwiLCBcXFwiZWVlXFxcIjtcXG4rXFx0XFx0cG93ZXItZG9tYWlucyA9IFxcdTAwM2NcXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcXHUwMDNlO1xcbitcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXG4rXFx0XFx0eHBjc19taWkwOiBldGhlcm5ldC1wY3MtbWlpQDAge1xcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdFxcdFxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHR4cGNzX21paTE6IGV0aGVybmV0LXBjcy1taWlAMSB7XFxuK1xcdFxcdFxcdHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0XFx0c3RhdHVzID0gXFxcImRpc2FibGVkXFxcIjtcXG4rXFx0XFx0fTtcXG4rXFxuK1xcdFxcdHhwY3NfbWlpMjogZXRoZXJuZXQtcGNzLW1paUAyIHtcXG4rXFx0XFx0XFx0cmVnID0gXFx1MDAzYzJcXHUwMDNlO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXHRcXHR9O1xcbitcXG4rXFx0XFx0eHBjc19taWkzOiBldGhlcm5ldC1wY3MtbWlpQDMge1xcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjM1xcdTAwM2U7XFxuK1xcdFxcdFxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcdFxcdH07XFxuK1xcdH07XFxuK1xcbitcXHRjbGtfZ21hYzBfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzAge1xcbitcXHRcXHRjb21wYXRpYmxlID0gXFxcImZpeGVkLWNsb2NrXFxcIjtcXG4rXFx0XFx0Y2xvY2stZnJlcXVlbmN5ID0gXFx1MDAzYzEyNTAwMDAwMFxcdTAwM2U7XFxuK1xcdFxcdGNsb2NrLW91dHB1dC1uYW1lcyA9IFxcXCJjbGtfZ21hYzBfeHBjc19taWlcXFwiO1xcbitcXHRcXHQjY2xvY2stY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdH07XFxuK1xcbitcXHRjbGtfZ21hYzFfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzEge1xcbitcXHRcXHRjb21wYXRpYmxlID0gXFxcImZpeGVkLWNsb2NrXFxcIjtcXG4rXFx0XFx0Y2xvY2stZnJlcXVlbmN5ID0gXFx1MDAzYzEyNTAwMDAwMFxcdTAwM2U7XFxuK1xcdFxcdGNsb2NrLW91dHB1dC1uYW1lcyA9IFxcXCJjbGtfZ21hYzFfeHBjc19taWlcXFwiO1xcbitcXHRcXHQjY2xvY2stY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdH07XFxuK1xcbiBcXHRwaXBlX3BoeV9ncmYwOiBzeXNjb25AZmRjNzAwMDAge1xcbiBcXHRcXHRjb21wYXRpYmxlID0gXFxcInJvY2tjaGlwLHJrMzU2OC1waXBlLXBoeS1ncmZcXFwiLCBcXFwic3lzY29uXFxcIjtcXG4gXFx0XFx0cmVnID0gXFx1MDAzYzB4MCAweGZkYzcwMDAwIDB4MCAweDEwMDBcXHUwMDNlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1xcbmluZGV4IGUzZGQ1YWRkYTVhY2EuLjUwODhhY2MwNjk4MmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcXG5AQCAtMTcwLDYgKzE3MCw3IEBAIGNvbmZpZyBEV01BQ19ST0NLQ0hJUFxcbiBcXHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcXG4gXFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxFX1RFU1QpXFxuIFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuK1xcdHNlbGVjdCBQQ1NfWFBDU19ST0NLQ0hJUFxcbiBcXHRoZWxwXFxuIFxcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzMyODggU29DLlxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcXG5pbmRleCBmNWY5ZmE2N2VjZDc3Li40MzA4ZGNjYmYyNTcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXFxuQEAgLTYwMywxMyArNjAzLDQ3IEBAIHN0YXRpYyB2b2lkIGNvbW1vbl9kZWZhdWx0X2RhdGEoc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KVxcbiBcXHRwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VuZWVkc19yZXNldCA9IHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaW50ZWxfbWdiZV9wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlO1xcbitcXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcztcXG4rXFx0aW50IGFkZHI7XFxuK1xcbitcXHRkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LVxcdTAwM2VkZXZpY2UpO1xcbitcXG4rXFx0aWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGRldm5vZGUsIFxcXCJwY3MtaGFuZGxlXFxcIikpIHtcXG4rXFx0XFx0cGNzbm9kZSA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZub2RlLCBcXFwicGNzLWhhbmRsZVxcXCIsIDApO1xcbitcXHRcXHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xcbitcXHRcXHRmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0YWRkciA9IGZmcyhwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VwY3NfbWFzaykgLSAxO1xcbitcXHRcXHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2Rldihwcml2LVxcdTAwM2VtaWksIGFkZHIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoSVNfRVJSKHhwY3MpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUih4cGNzKTtcXG4rXFxuK1xcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbXVsdF9mYWN0XzEwMG5zKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0geHBjcztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGludGVsX21nYmVfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHhwY3NfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqaW50ZWxfbWdiZV9zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuIHtcXG4tXFx0LyogcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YS1cXHUwMDNlaGFzX3hwY3MgaGFzIGJlZW4gc2V0IHRydWUsIHNvIHRoZXJlXFxuLVxcdCAqIHNob3VsZCBhbHdheXMgYmUgYW4gWFBDUy4gVGhlIG9yaWdpbmFsIGNvZGUgd291bGQgYWx3YXlzXFxuLVxcdCAqIHJldHVybiB0aGlzIGlmIHByZXNlbnQuXFxuLVxcdCAqL1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuIFxcdHJldHVybiB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzKTtcXG4gfVxcbiBcXG5AQCAtNzMzLDYgKzc2Nyw4IEBAIHN0YXRpYyBpbnQgaW50ZWxfbWdiZV9jb21tb25fZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0ICAgIHBsYXQtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xcbiBcXHRcXHRwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VwY3NfbWFzayA9IEJJVF9VMzIoSU5URUxfTUdCRV9YUENTX0FERFIpO1xcbiBcXHRcXHRwbGF0LVxcdTAwM2VkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XFxuK1xcdFxcdHBsYXQtXFx1MDAzZXBjc19pbml0ID0gaW50ZWxfbWdiZV9wY3NfaW5pdDtcXG4rXFx0XFx0cGxhdC1cXHUwMDNlcGNzX2V4aXQgPSBpbnRlbF9tZ2JlX3Bjc19leGl0O1xcbiBcXHRcXHRwbGF0LVxcdTAwM2VzZWxlY3RfcGNzID0gaW50ZWxfbWdiZV9zZWxlY3RfcGNzO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcXG5pbmRleCAxOWYzNGUxOGJmZWYyLi45YWYzMmMyNmY5YzE0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguY1xcbkBAIC04MSw4ICs4MSwxMSBAQCBzdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgdm9pZCByZW5lc2FzX2dtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiB7XFxuLVxcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpXFxuLVxcdFxcdG1paWNfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpO1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3BjcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWlpY19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJlbmVzYXNfZ21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmNcXG5pbmRleCA4ZDcwNDJlNjg5MjYxLi5iM2Q3NDZkZDk2NmZmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXFxuQEAgLTIwLDYgKzIwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fcnVudGltZS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInN0bW1hY19wbGF0Zm9ybS5oXFxcIlxcbkBAIC00Nyw2ICs0OCw3IEBAIHN0cnVjdCBya19nbWFjX29wcyB7XFxuIFxcdHZvaWQgKCpzZXRfdG9fcmdtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxcbiBcXHRcXHRcXHQgICAgIGludCB0eF9kZWxheSwgaW50IHJ4X2RlbGF5KTtcXG4gXFx0dm9pZCAoKnNldF90b19ybWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7XFxuK1xcdHZvaWQgKCpzZXRfdG9fc2dtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcXG4gXFx0aW50ICgqc2V0X3NwZWVkKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdixcXG4gXFx0XFx0XFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCk7XFxuIFxcdHZvaWQgKCppbnRlZ3JhdGVkX3BoeV9wb3dlcnVwKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7XFxuQEAgLTYzLDYgKzY1LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHtcXG4gXFx0Ym9vbCBjbG9ja19ncmZfcmVnX2luX3BocDtcXG4gXFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcXG4gXFx0Ym9vbCBzdXBwb3J0c19ybWlpO1xcbitcXHRib29sIHN1cHBvcnRzX3NnbWlpO1xcbiBcXHRib29sIHBocF9ncmZfcmVxdWlyZWQ7XFxuIFxcdGJvb2wgcmVnc192YWxpZDtcXG4gXFx0dTMyIHJlZ3NbXTtcXG5AQCAtOTgsNiArMTAxLDcgQEAgc3RydWN0IHJrX3ByaXZfZGF0YSB7XFxuIFxcdGJvb2wgaW50ZWdyYXRlZF9waHk7XFxuIFxcdGJvb2wgc3VwcG9ydHNfcmdtaWk7XFxuIFxcdGJvb2wgc3VwcG9ydHNfcm1paTtcXG4rXFx0Ym9vbCBzdXBwb3J0c19zZ21paTtcXG4gXFxuIFxcdHN0cnVjdCBjbGtfYnVsa19kYXRhICpjbGtzO1xcbiBcXHRpbnQgbnVtX2Nsa3M7XFxuQEAgLTgwOSw2ICs4MTMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzIHJrMzUyOF9vcHMgPSB7XFxuICNkZWZpbmUgUkszNTY4X0dSRl9HTUFDMV9DT04xXFx0XFx0MHgwMzhjXFxuIFxcbiAvKiBSSzM1NjhfR1JGX0dNQUMwX0NPTjEgXFx1MDAyNlxcdTAwMjYgUkszNTY4X0dSRl9HTUFDMV9DT04xICovXFxuKyNkZWZpbmUgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJXFx0XFx0R1JGX0NMUl9CSVQoNylcXG4rI2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSVxcdFxcdEdSRl9CSVQoNylcXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxcXHRcXHRcXHRHUkZfQklUKDMpXFxuICNkZWZpbmUgUkszNTY4X0dNQUNfRkxPV19DVFJMX0NMUlxcdFxcdEdSRl9DTFJfQklUKDMpXFxuICNkZWZpbmUgUkszNTY4X0dNQUNfUlhDTEtfRExZX0VOQUJMRVxcdFxcdEdSRl9CSVQoMSlcXG5AQCAtODM2LDYgKzg0MiwxNiBAQCBzdGF0aWMgaW50IHJrMzU2OF9pbml0KHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcm1paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcXG4re1xcbitcXHR1MzIgY29uMTtcXG4rXFxuK1xcdGNvbjEgPSAoYnNwX3ByaXYtXFx1MDAzZWlkID09IDEpID8gUkszNTY4X0dSRl9HTUFDMV9DT04xIDpcXG4rXFx0XFx0XFx0XFx0ICAgICBSSzM1NjhfR1JGX0dNQUMwX0NPTjE7XFxuK1xcbitcXHRyZWdtYXBfd3JpdGUoYnNwX3ByaXYtXFx1MDAzZWdyZiwgY29uMSwgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcmszNTY4X3NldF90b19yZ21paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdixcXG4gXFx0XFx0XFx0XFx0aW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpXFxuIHtcXG5AQCAtODUxLDE5ICs4NjcsMzEgQEAgc3RhdGljIHZvaWQgcmszNTY4X3NldF90b19yZ21paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdixcXG4gXFx0XFx0ICAgICBSSzM1NjhfR01BQ19DTEtfVFhfRExfQ0ZHKHR4X2RlbGF5KSk7XFxuIFxcbiBcXHRyZWdtYXBfd3JpdGUoYnNwX3ByaXYtXFx1MDAzZWdyZiwgY29uMSxcXG4rXFx0XFx0ICAgICBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkgfFxcbiBcXHRcXHQgICAgIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUgfFxcbiBcXHRcXHQgICAgIFJLMzU2OF9HTUFDX1RYQ0xLX0RMWV9FTkFCTEUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3NnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxcbit7XFxuK1xcdHUzMiBjb24xO1xcbitcXG4rXFx0Y29uMSA9IChic3BfcHJpdi1cXHUwMDNlaWQgPT0gMSkgPyBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgOlxcbitcXHRcXHRcXHRcXHQgICAgIFJLMzU2OF9HUkZfR01BQzBfQ09OMTtcXG4rXFxuK1xcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cXHUwMDNlZ3JmLCBjb24xLCBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSSk7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTY4X29wcyA9IHtcXG4gXFx0LmluaXQgPSByazM1NjhfaW5pdCxcXG4rXFx0LnNldF90b19ybWlpID0gcmszNTY4X3NldF90b19ybWlpLFxcbiBcXHQuc2V0X3RvX3JnbWlpID0gcmszNTY4X3NldF90b19yZ21paSxcXG4rXFx0LnNldF90b19zZ21paSA9IHJrMzU2OF9zZXRfdG9fc2dtaWksXFxuK1xcbiBcXHQuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsXFxuIFxcbiBcXHQuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLFxcbiBcXG4tXFx0LnN1cHBvcnRzX3JtaWkgPSB0cnVlLFxcbi1cXG4gXFx0LnJlZ3NfdmFsaWQgPSB0cnVlLFxcbiBcXHQucmVncyA9IHtcXG4gXFx0XFx0MHhmZTJhMDAwMCwgLyogZ21hYzAgKi9cXG5AQCAtMTIwOCw2ICsxMjM2LDQzIEBAIHN0YXRpYyB2b2lkIHJrX3BoeV9wb3dlcmRvd24oc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGRldl9lcnIoYnNwX3ByaXYtXFx1MDAzZWRldiwgXFxcImZhaWwgdG8gZGlzYWJsZSBwaHktc3VwcGx5XFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBya19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtXFx1MDAzZWRldmljZS1cXHUwMDNlb2Zfbm9kZTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwY3Nfbm9kZTtcXG4rXFx0c3RydWN0IGR3X3hwY3MgKnhwY3M7XFxuK1xcbitcXHRwY3Nfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsIFxcXCJwY3MtaGFuZGxlXFxcIiwgMCk7XFxuK1xcdGlmICghcGNzX25vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0eHBjcyA9IHhwY3NfcmtfY3JlYXRlKHByaXYtXFx1MDAzZWRldmljZSwgcGNzX25vZGUpO1xcbitcXHRvZl9ub2RlX3B1dChwY3Nfbm9kZSk7XFxuK1xcdGlmIChJU19FUlIoeHBjcykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MgPSB4cGNzO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmtfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHhwY3NfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHJrX3ByaXZfZGF0YSAqcmtfZ21hY19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgKm9wcylcXG5AQCAtMTMzMCw2ICsxMzk1LDcgQEAgc3RhdGljIHN0cnVjdCBya19wcml2X2RhdGEgKnJrX2dtYWNfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG4gXFxuIFxcdGJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19yZ21paSA9IG9wcy1cXHUwMDNlc3VwcG9ydHNfcmdtaWkgfHwgISFvcHMtXFx1MDAzZXNldF90b19yZ21paTtcXG4gXFx0YnNwX3ByaXYtXFx1MDAzZXN1cHBvcnRzX3JtaWkgPSBvcHMtXFx1MDAzZXN1cHBvcnRzX3JtaWkgfHwgISFvcHMtXFx1MDAzZXNldF90b19ybWlpO1xcbitcXHRic3BfcHJpdi1cXHUwMDNlc3VwcG9ydHNfc2dtaWkgPSBvcHMtXFx1MDAzZXN1cHBvcnRzX3NnbWlpIHx8ICEhb3BzLVxcdTAwM2VzZXRfdG9fc2dtaWk7XFxuIFxcbiBcXHRpZiAob3BzLVxcdTAwM2Vpbml0KSB7XFxuIFxcdFxcdHJldCA9IG9wcy1cXHUwMDNlaW5pdChic3BfcHJpdik7XFxuQEAgLTEzNjEsNiArMTQyNywxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfY2hlY2tfb3BzKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxcbiBcXHRcXHRpZiAoIWJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19ybWlpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbitcXHRcXHRpZiAoIWJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19zZ21paSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRkZXZfZXJyKGJzcF9wcml2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcXCJ1bnN1cHBvcnRlZCBpbnRlcmZhY2UgJWRcXFwiLCBic3BfcHJpdi1cXHUwMDNlcGh5X2lmYWNlKTtcXG5AQCAtMTM3OSwxNiArMTQ0OSwxOSBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdHJldCA9IGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgdHJ1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoYnNwX3ByaXYtXFx1MDAzZXBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpXFxuK1xcdFxcdGdvdG8gc2V0X21vZGU7XFxuK1xcbiBcXHRyZXQgPSBya19nZXRfcGh5X2ludGZfc2VsKGJzcF9wcml2LVxcdTAwM2VwaHlfaWZhY2UpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBjbGtfZGlzYWJsZTtcXG4gXFxuIFxcdGludGYgPSByZXQ7XFxuIFxcbi1cXHRyZXQgPSBnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIHRydWUpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0aWYgKGJzcF9wcml2LVxcdTAwM2VnbWFjX3BoeV9pbnRmX3NlbF9tYXNrIHx8XFxuIFxcdCAgICBic3BfcHJpdi1cXHUwMDNlZ21hY19ybWlpX21vZGVfbWFzaykge1xcbiBcXHRcXHQvKiBJZiBkZWZpbmVkLCBlbmNvZGUgdGhlIHBoeV9pbnRmX3NlbCB2YWx1ZSAqL1xcbkBAIC0xMzk5LDEwICsxNDcyLDggQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdFxcdFxcdCAgICAgIGJzcF9wcml2LVxcdTAwM2VnbWFjX3JtaWlfbW9kZV9tYXNrKTtcXG4gXFxuIFxcdFxcdHJldCA9IHJrX3dyaXRlX2dtYWNfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChic3BfcHJpdi1cXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spIHtcXG5AQCAtMTQxMCwxMyArMTQ4MSwxMiBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcXG4gXFx0XFx0XFx0XFx0ICAgICBic3BfcHJpdi1cXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spO1xcbiBcXG4gXFx0XFx0cmV0ID0gcmtfd3JpdGVfY2xvY2tfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcdH1cXG4gXFxuLVxcdC8qcm1paSBvciByZ21paSovXFxuK3NldF9tb2RlOlxcbitcXHQvKiBybWlpLCByZ21paSwgc2dtaWkgKi9cXG4gXFx0c3dpdGNoIChic3BfcHJpdi1cXHUwMDNlcGh5X2lmYWNlKSB7XFxuIFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbiBcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJpbml0IGZvciBSR01JSVxcXFxuXFxcIik7XFxuQEAgLTE0NDcsMTUgKzE1MTcsMjAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGlmIChic3BfcHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfdG9fcm1paSlcXG4gXFx0XFx0XFx0YnNwX3ByaXYtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X3RvX3JtaWkoYnNwX3ByaXYpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuK1xcdFxcdGRldl9pbmZvKGRldiwgXFxcImluaXQgZm9yIFNHTUlJXFxcXG5cXFwiKTtcXG4rXFx0XFx0aWYgKGJzcF9wcml2LVxcdTAwM2VvcHMtXFx1MDAzZXNldF90b19zZ21paSlcXG4rXFx0XFx0XFx0YnNwX3ByaXYtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X3RvX3NnbWlpKGJzcF9wcml2KTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiTk8gaW50ZXJmYWNlIGRlZmluZWQhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBjbGtfZGlzYWJsZTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gcmtfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHR9XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcbiBcXHRwbV9ydW50aW1lX2dldF9zeW5jKGRldik7XFxuIFxcbkBAIC0xNDYzLDYgKzE1MzgsMTAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGJzcF9wcml2LVxcdTAwM2VvcHMtXFx1MDAzZWludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitjbGtfZGlzYWJsZTpcXG4rXFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJrX2dtYWNfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmdtYWMpXFxuQEAgLTE0ODYsNiArMTU2NSw5IEBAIHN0YXRpYyB2b2lkIHJrX2dldF9pbnRlcmZhY2VzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCAqYnNwX3ByaXYsXFxuIFxcbiBcXHRpZiAocmstXFx1MDAzZXN1cHBvcnRzX3JtaWkpXFxuIFxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7XFxuK1xcbitcXHRpZiAocmstXFx1MDAzZXN1cHBvcnRzX3NnbWlpKVxcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLCBpbnRlcmZhY2VzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBya19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXZfLCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSxcXG5AQCAtMTYwMiw2ICsxNjg0LDE3IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRwbGF0X2RhdC1cXHUwMDNlc3VzcGVuZCA9IHJrX2dtYWNfc3VzcGVuZDtcXG4gXFx0cGxhdF9kYXQtXFx1MDAzZXJlc3VtZSA9IHJrX2dtYWNfcmVzdW1lO1xcbiBcXG4rXFx0aWYgKHBsYXRfZGF0LVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbitcXHRcXHQvKiBTR01JSSBjbG9jayBhbHdheXMgcnVucyBhdCAxMjUgTUh6ICovXFxuK1xcdFxcdHBsYXRfZGF0LVxcdTAwM2VzZXRfY2xrX3R4X3JhdGUgPSBOVUxMO1xcbitcXG4rXFx0XFx0LyogU0dNSUkgcmVxdWlyZXMgYSBQQ1MgKi9cXG4rXFx0XFx0cGxhdF9kYXQtXFx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcXG4rXFx0XFx0cGxhdF9kYXQtXFx1MDAzZXBjc19pbml0ID0gcmtfcGNzX2luaXQ7XFxuK1xcdFxcdHBsYXRfZGF0LVxcdTAwM2VwY3NfZXhpdCA9IHJrX3Bjc19leGl0O1xcbitcXHRcXHRwbGF0X2RhdC1cXHUwMDNlc2VsZWN0X3BjcyA9IHJrX3NlbGVjdF9wY3M7XFxuK1xcdH1cXG4rXFxuIFxcdHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdiA9IHJrX2dtYWNfc2V0dXAocGRldiwgcGxhdF9kYXQsIGRhdGEpO1xcbiBcXHRpZiAoSVNfRVJSKHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdikpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xcbmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXFxuQEAgLTM1LDggKzM1LDExIEBAIHN0YXRpYyBpbnQgcnpuMV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgdm9pZCByem4xX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbi1cXHRcXHRtaWljX2Rlc3Ryb3kocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1paWNfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpO1xcbitcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyem4xX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcXG5pbmRleCAxZDdmMGE1N2QyODg5Li42ZDRiYzFmZThmNzUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xcbkBAIC01MzksOCArNTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgdm9pZCBzb2NmcGdhX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbi1cXHRcXHRseW54X3Bjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRseW54X3Bjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnNvY2ZwZ2FfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXFxuaW5kZXggYWZlOThmZjViZGNiMC4uNzM5NmI2ODg5OWM2NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xcbkBAIC00MjYsMzUgKzQyNiwxNCBAQCBpbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcXG4gaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG4gXFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuLVxcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcXG4tXFx0c3RydWN0IGR3X3hwY3MgKnhwY3MgPSBOVUxMO1xcbi1cXHRpbnQgYWRkciwgcmV0O1xcbi1cXG4tXFx0ZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi1cXHUwMDNlZGV2aWNlKTtcXG4tXFxuLVxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdCkge1xcbi1cXHRcXHRyZXQgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdChwcml2KTtcXG4tXFx0fSBlbHNlIGlmIChmd25vZGVfcHJvcGVydHlfcHJlc2VudChkZXZub2RlLCBcXFwicGNzLWhhbmRsZVxcXCIpKSB7XFxuLVxcdFxcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXFxcInBjcy1oYW5kbGVcXFwiLCAwKTtcXG4tXFx0XFx0eHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTtcXG4tXFx0XFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTtcXG4tXFx0fSBlbHNlIGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEtXFx1MDAzZXBjc19tYXNrKSB7XFxuLVxcdFxcdGFkZHIgPSBmZnMocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YS1cXHUwMDNlcGNzX21hc2spIC0gMTtcXG4tXFx0XFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cXHUwMDNlbWlpLCBhZGRyKTtcXG4tXFx0XFx0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHhwY3MpO1xcbi1cXHR9IGVsc2Uge1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4gXFxuK1xcdHJldCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBjc19pbml0KHByaXYpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVxcdTAwM2VkZXZpY2UsIHJldCwgXFxcIk5vIHhQQ1MgZm91bmRcXFxcblxcXCIpO1xcbi1cXG4tXFx0aWYgKHhwY3MpXFxuLVxcdFxcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbXVsdF9mYWN0XzEwMG5zKTtcXG4tXFxuLVxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0geHBjcztcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi1cXHUwMDNlZGV2aWNlLCByZXQsIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBQQ1NcXFxcblxcXCIpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNDYzLDE0ICs0NDIsMTAgQEAgdm9pZCBzdG1tYWNfcGNzX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBjc19leGl0KVxcbi1cXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfZXhpdChwcml2KTtcXG4tXFxuLVxcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcGNzX2V4aXQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHhwY3NfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcyk7XFxuLVxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0gTlVMTDtcXG4rXFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcGNzX2V4aXQocHJpdik7XFxuIH1cXG4gXFxuIHN0cnVjdCBzdG1tYWNfY2xrX3JhdGUge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXFxuaW5kZXggZTQxN2ZkNjZmNjYwYS4uM2RiOWIzNDNhYzBjNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXFxuQEAgLTEyLDYgKzEyLDMxIEBAIGNvbmZpZyBQQ1NfWFBDU1xcbiBcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGZvciBTeW5vcHN5c1xcbiBcXHQgIERlc2lnbldhcmUgWFBDUyBjb250cm9sbGVycy5cXG4gXFxuK2lmIFBDU19YUENTXFxuK1xcbitjb25maWcgUENTX1hQQ1NfUExBVEZPUk1cXG4rXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgWFBDUyBjb250cm9sbGVyIHN1cHBvcnRcXFwiXFxuK1xcdGRlZmF1bHQgUENTX1hQQ1NcXG4rXFx0aGVscFxcbitcXHQgIEdlbmVyaWMgRFdYUENTIGRyaXZlciBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgcmVxdWlyZSBhbnlcXG4rXFx0ICBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIHRvIGZ1bmN0aW9uIG9yIGlzIHVzaW5nIHBsYXRmb3JtXFxuK1xcdCAgZGF0YSBmb3Igc2V0dXAuXFxuK1xcbitcXHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuK1xcbitjb25maWcgUENTX1hQQ1NfUk9DS0NISVBcXG4rXFx0dHJpc3RhdGUgXFxcIlJvY2tjaGlwIFhQQ1MgY29udHJvbGxlciBzdXBwb3J0XFxcIlxcbitcXHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcXG4rXFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxFX1RFU1QpXFxuK1xcdHNlbGVjdCBHRU5FUklDX1BIWVxcbitcXHRzZWxlY3QgUE1fR0VORVJJQ19ET01BSU5TXFxuK1xcdGhlbHBcXG4rXFx0ICBTdXBwb3J0IGZvciBYUENTIGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszNTZ4IFNvQy5cXG4rXFxuK1xcdCAgSWYgeW91IGhhdmUgYSBSb2NrY2hpcCBTb0Mgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxcbitcXG4rZW5kaWYgIyBQQ1NfWFBDU1xcbitcXG4gY29uZmlnIFBDU19MWU5YXFxuIFxcdHRyaXN0YXRlXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlXFxuaW5kZXggNGY3OTIwNjE4YjkwMC4uZjlmNmNmMjU3OGQ3MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcXG5AQCAtMSwxMCArMSwxMSBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICMgTWFrZWZpbGUgZm9yIExpbnV4IFBDUyBkcml2ZXJzXFxuIFxcbi1wY3NfeHBjcy0kKENPTkZJR19QQ1NfWFBDUylcXHQ6PSBwY3MteHBjcy5vIHBjcy14cGNzLXBsYXQubyBcXFxcXFxuLVxcdFxcdFxcdFxcdCAgIHBjcy14cGNzLW54cC5vIHBjcy14cGNzLXd4Lm9cXG4rcGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpXFx0Oj0gcGNzLXhwY3MubyBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vXFxuIFxcbiBvYmotJChDT05GSUdfUENTX1hQQ1MpXFx0XFx0Kz0gcGNzX3hwY3Mub1xcbitvYmotJChDT05GSUdfUENTX1hQQ1NfUExBVEZPUk0pICs9IHBjcy14cGNzLXBsYXQub1xcbitvYmotJChDT05GSUdfUENTX1hQQ1NfUk9DS0NISVApICs9IHBjcy14cGNzLXJrLm9cXG4gb2JqLSQoQ09ORklHX1BDU19MWU5YKVxcdFxcdCs9IHBjcy1seW54Lm9cXG4gb2JqLSQoQ09ORklHX1BDU19NVEtfTFlOWEkpXFx0Kz0gcGNzLW10ay1seW54aS5vXFxuIG9iai0kKENPTkZJR19QQ1NfUlpOMV9NSUlDKVxcdCs9IHBjcy1yem4xLW1paWMub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNWUwZjIyYzk3M2MyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXFxuQEAgLTAsMCArMSw1NzMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyXFxuKyAqXFxuKyAqIEJhc2VkIG9uIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIFhQQ1MgcGxhdGZvcm0gZHJpdmVyLlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgU2VyZ2UgU2VtaW5cXG4rICpcXG4rICogQWRhcHRlZCBmb3IgUm9ja2NoaXAgU29Dcywgd2l0aCByZWZlcmVuY2UgdG8gdGhlIFJvY2tjaGlwIE9FTSBkcml2ZXIuXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2lhIFByYW50XFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYXRoLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fZG9tYWluLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2l6ZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWUuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJwY3MteHBjcy5oXFxcIlxcbitcXG4rc3RydWN0IGR3X3hwY3Nfcmsge1xcbitcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbitcXHR2b2lkIF9faW9tZW0gKnJlZ19iYXNlO1xcbitcXHRzdHJ1Y3QgcGh5ICpzZXJkZXNfcGh5O1xcbitcXHRzdHJ1Y3QgY2xrICpjc3JfY2xrO1xcbitcXHRzdHJ1Y3QgY2xrICplZWVfY2xrO1xcbitcXHR1OCBlZWVfbXVsdF9mYWN0O1xcbit9O1xcbitcXG4rc3RhdGljIHB0cmRpZmZfdCB4cGNzX3JrX2FkZHJfZm9ybWF0KGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0cmV0dXJuIEZJRUxEX1BSRVAoMHg3MDAwMCwgZGV2KSB8IEZJRUxEX1BSRVAoMHhmZmZmLCByZWcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9yZWcoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzLCBpbnQgZGV2LCBpbnQgcmVnKVxcbit7XFxuK1xcdHB0cmRpZmZfdCBjc3I7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRjc3IgPSB4cGNzX3JrX2FkZHJfZm9ybWF0KGRldiwgcmVnKTtcXG4rXFxuK1xcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZGwocHhwY3MtXFx1MDAzZXJlZ19iYXNlICsgKGNzciBcXHUwMDNjXFx1MDAzYyAyKSkgXFx1MDAyNiAweGZmZmY7XFxuK1xcbitcXHRwbV9ydW50aW1lX3B1dChcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9yZWcoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKVxcbit7XFxuK1xcdHB0cmRpZmZfdCBjc3I7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRjc3IgPSB4cGNzX3JrX2FkZHJfZm9ybWF0KGRldiwgcmVnKTtcXG4rXFxuK1xcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0d3JpdGVsKHZhbCwgcHhwY3MtXFx1MDAzZXJlZ19iYXNlICsgKGNzciBcXHUwMDNjXFx1MDAzYyAyKSk7XFxuK1xcbitcXHRwbV9ydW50aW1lX3B1dChcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkxXFx0MlxcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkyXFx0M1xcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkzXFx0NFxcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9QTUFQTURcXHQ2XFxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSVxcdDdcXG4rXFxuK3N0YXRpYyBib29sIHhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGludCBhZGRyKVxcbit7XFxuK1xcdHJldHVybiAhKGFkZHIgXFx1MDAzYyAwIHx8IGFkZHIgXFx1MDAzZSAzKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0c3dpdGNoIChkZXYpIHtcXG4rXFx0Y2FzZSBNRElPX01NRF9QTUFQTUQ6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xcbitcXHRjYXNlIE1ESU9fTU1EX1ZFTkQyOlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogUmVhZHMgYXJlIHJlZGlyZWN0ZWQgYnkgaGFyZHdhcmUgdG8gdGhlIHBvcnQncyByZWFkLW9ubHkgbWlycm9yO1xcbitcXHQgKiBvbmx5IHdyaXRlcyBoYXZlIHRvIGJlIHRhcmdldGVkIGF0IE1JSSAoc2VlIHRoZSB3cml0ZSBwYXRoKS5cXG4rXFx0ICovXFxuK1xcdHN3aXRjaCAoYWRkcikge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMTtcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7XFxuK1xcdGNhc2UgMzpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0c3dpdGNoIChkZXYpIHtcXG4rXFx0Y2FzZSBNRElPX01NRF9QTUFQTUQ6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xcbitcXHRjYXNlIE1ESU9fTU1EX1ZFTkQyOlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlc2UgcmVnaXN0ZXJzIHBoeXNpY2FsbHkgbGl2ZSBvbmx5IGluIE1JSSAodGhlIG1hbmFnZW1lbnQgcG9ydCkuXFxuK1xcdCAqIFBvcnRzIDEtMyBleHBvc2UgcmVhZC1vbmx5IG1pcnJvcnMgb2YgdGhlc2UgYml0cywgc28gd3JpdGVzIG11c3RcXG4rXFx0ICogYWx3YXlzIHRhcmdldCBNSUk7IHRoZSByZWFkIHBhdGggcmVtYXBzIHBlciBhZGRyZXNzIGFuZCB0aGVcXG4rXFx0ICogaGFyZHdhcmUgcmVkaXJlY3RzIHRvIHRoZSBwb3J0J3MgbWlycm9yLlxcbitcXHQgKi9cXG4rXFx0c3dpdGNoIChyZWcpIHtcXG4rXFx0Y2FzZSBEV19WUl9NSUlfQU5fQ1RSTDpcXG4rXFx0Y2FzZSBEV19WUl9NSUlfQU5fSU5UUl9TVFM6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDA6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDE6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0RJR19DVFJMMjpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKGFkZHIpIHtcXG4rXFx0Y2FzZSAwOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyO1xcbitcXHRjYXNlIDM6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKVxcbit7XFxuK1xcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGRldjtcXG4rXFxuK1xcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0ZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDB4ZmZmZjtcXG4rXFxuK1xcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgZGV2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDB4ZmZmZjtcXG4rXFxuK1xcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIGRldiwgcmVnKTtcXG4rXFx0aWYgKGRldiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHhwY3Nfcmtfd3JpdGVfcmVnKHB4cGNzLCBkZXYsIHJlZywgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkd194cGNzX3JrICp4cGNzX3JrX2NyZWF0ZV9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xcbitcXG4rXFx0cHhwY3MgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpweHBjcyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXB4cGNzKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHB4cGNzLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4rXFxuK1xcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBweHBjcyk7XFxuK1xcbitcXHRyZXR1cm4gcHhwY3M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X2luaXQoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZweHBjcy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcbitcXG4rXFx0cHhwY3MtXFx1MDAzZXNlcmRlc19waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCBcXFwic2VyZGVzXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGdldCBTZXJEZXMgUEhZXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHBoeV9wb3dlcl9vZmYocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRwaHlfZXhpdChweHBjcy1cXHUwMDNlc2VyZGVzX3BoeSk7XFxuK1xcbitcXHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcG93ZXIgZG9tYWluIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGVuYWJsZWQsIHdoaWNoIGFsbG93cyB1cyB0b1xcbitcXHQgKiBkeW5hbWljYWxseSB0dXJuIHRoZSBDU1IgY2xvY2sgb24vb2ZmIHVzaW5nIFBNIHdoaWxlIGtlZXBpbmcgdGhlIFBDU1xcbitcXHQgKiBwb3dlcmVkIG9uLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCB0cnVlKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBwb3dlciBvbiBwb3dlci1kb21haW5zXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcGh5X2luaXQocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGluaXQgU2VyRGVzIFBIWVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gcG1fZG9tYWluO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBwaHlfcG93ZXJfb24ocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHBvd2VyIG9uIFNlckRlcyBQSFlcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIHNlcmRlc19waHk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9mZiwgcHhwY3MpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIFNlckRlcyBQSFk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK3NlcmRlc19waHk6XFxuK1xcdHBoeV9leGl0KHB4cGNzLVxcdTAwM2VzZXJkZXNfcGh5KTtcXG4rcG1fZG9tYWluOlxcbitcXHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfcmVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcXG4re1xcbitcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcHhwY3MtXFx1MDAzZXBkZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbitcXG4rXFx0cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTtcXG4rXFx0aWYgKCFyZXMpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJObyByZWctc3BhY2UgZm91bmRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJlc291cmNlX3NpemUocmVzKSBcXHUwMDNjIFNaXzJNKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiSW52YWxpZCByZWctc3BhY2Ugc2l6ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRweHBjcy1cXHUwMDNlcmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xcbitcXHRpZiAoSVNfRVJSKHB4cGNzLVxcdTAwM2VyZWdfYmFzZSkpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gbWFwIHJlZy1zcGFjZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHB4cGNzLVxcdTAwM2VyZWdfYmFzZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB4cGNzX3JrX2V4aXRfY2xrKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQoZGV2KTtcXG4rXFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4cGNzLVxcdTAwM2VlZWVfY2xrKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfY2xrKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldjtcXG4rXFx0dW5zaWduZWQgbG9uZyByYXRlO1xcbitcXHR1NjQgbXVsdDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHB4cGNzLVxcdTAwM2Vjc3JfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgXFxcImNzclxcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHB4cGNzLVxcdTAwM2Vjc3JfY2xrKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVxcdTAwM2Vjc3JfY2xrKSxcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgdG8gZ2V0IENTUiBjbG9ja1xcXFxuXFxcIik7XFxuK1xcbitcXHRweHBjcy1cXHUwMDNlZWVlX2NsayA9IGRldm1fY2xrX2dldChkZXYsIFxcXCJlZWVcXFwiKTtcXG4rXFx0aWYgKElTX0VSUihweHBjcy1cXHUwMDNlZWVlX2NsaykpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy1cXHUwMDNlZWVlX2NsayksXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIGdldCBFRUUgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHB4cGNzLVxcdTAwM2VlZWVfY2xrKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBlbmFibGUgRUVFIGNsb2NrXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7XFxuK1xcdHBtX3J1bnRpbWVfZW5hYmxlKGRldik7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB4cGNzX3JrX2V4aXRfY2xrLCBweHBjcyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bSBmb3IgRUVFIGNsb2NrOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ29tcHV0ZSB0aGUgbXVsdGlwbGllciBmb3IgdGhlIEVFRSBjbG9jayBzbyB0aGF0XFxuK1xcdCAqIGNsa19lZWVfcGVyaW9kICogKG11bHRfZmFjdCArIDEpIGZhbGxzIHdpdGhpbiA4MC4uMTIwIG5zLlxcbitcXHQgKlxcbitcXHQgKiBPbiBSSzM1NjgsIGNsa194cGNzX2VlZSBpcyBtdXhlZCBiZXR3ZWVuIGdwbGwyMDAgKDIwMCBNSHosIDUgbnMpXFxuK1xcdCAqIGFuZCBjcGxsMTI1ICgxMjUgTUh6LCA4IG5zKSwgc2VsZWN0ZWQgYnkgQ1JVX0NMS1NFTF9DT04yOSBiaXQgMTMuXFxuK1xcdCAqIFRoZSByZXNldCB2YWx1ZSBpcyAwICgyMDAgTUh6KSwgYnV0IGRlcml2ZSB0aGUgdmFsdWUgYXQgcnVudGltZSB0b1xcbitcXHQgKiBzdGF5IGNvcnJlY3QgaWYgdGhlIG11eCBpcyBjaGFuZ2VkIGJ5IGEgYm9hcmQuXFxuK1xcdCAqXFxuK1xcdCAqIFVzZSBhIDY0LWJpdCBpbnRlcm1lZGlhdGU6IG9uIDMyLWJpdCBidWlsZHMsIDEwMCAqIDIwMDAwMDAwMFxcbitcXHQgKiBkb2VzIG5vdCBmaXQgaW4gdW5zaWduZWQgbG9uZy4gQ2xhbXAgdG8gdGhlIDQtYml0XFxuK1xcdCAqIERXX1ZSX01JSV9FRUVfTVVMVF9GQUNUXzEwME5TIGZpZWxkLlxcbitcXHQgKi9cXG4rXFx0cmF0ZSA9IGNsa19nZXRfcmF0ZShweHBjcy1cXHUwMDNlZWVlX2Nsayk7XFxuK1xcdGlmICghcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcXFwiSW52YWxpZCBFRUUgY2xvY2sgcmF0ZVxcXFxuXFxcIik7XFxuK1xcbitcXHRtdWx0ID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKDEwMFVMTCAqIHJhdGUsIE5TRUNfUEVSX1NFQykgLSAxO1xcbitcXHRweHBjcy1cXHUwMDNlZWVlX211bHRfZmFjdCA9IG1pbl90KHU2NCwgbXVsdCwgMTUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfYnVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RhdGljIGF0b21pY190IGlkID0gQVRPTUlDX0lOSVQoLTEpO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCAwKTtcXG4rXFx0aWYgKCFidXMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0YnVzLVxcdTAwM2VuYW1lID0gXFxcIlJvY2tjaGlwIERXIFhQQ1MgTUNJL0FQQjNcXFwiO1xcbitcXHRidXMtXFx1MDAzZXJlYWQgPSB4cGNzX3JrX3JlYWRfYzIyO1xcbitcXHRidXMtXFx1MDAzZXdyaXRlID0geHBjc19ya193cml0ZV9jMjI7XFxuK1xcdGJ1cy1cXHUwMDNlcmVhZF9jNDUgPSB4cGNzX3JrX3JlYWRfYzQ1O1xcbitcXHRidXMtXFx1MDAzZXdyaXRlX2M0NSA9IHhwY3Nfcmtfd3JpdGVfYzQ1O1xcbitcXHRidXMtXFx1MDAzZXBoeV9tYXNrID0gfjA7XFxuK1xcdGJ1cy1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbitcXHRidXMtXFx1MDAzZXByaXYgPSBweHBjcztcXG4rXFxuK1xcdHNucHJpbnRmKGJ1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSxcXG4rXFx0XFx0IFxcXCJyb2NrY2hpcF9kd3hwY3MtJXhcXFwiLCBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2aWQpKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1ESU8tYnVzIGhlcmUgc2VydmVzIGFzIGp1c3QgYSBiYWNrLWVuZCBlbmdpbmUgYWJzdHJhY3Rpbmcgb3V0XFxuK1xcdCAqIHRoZSBNRElPIGFuZCBNQ0kvQVBCMyBJTyBpbnRlcmZhY2VzIHV0aWxpemVkIGZvciB0aGUgUm9ja2NoaXAgRFdYUENTIENTUnNcXG4rXFx0ICogYWNjZXNzLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBjcmVhdGUgTURJTyBidXNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRweHBjcy1cXHUwMDNlYnVzID0gYnVzO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHhwY3MgPSB4cGNzX3JrX2NyZWF0ZV9kYXRhKHBkZXYpO1xcbitcXHRpZiAoSVNfRVJSKHB4cGNzKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocHhwY3MpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIFhQQ1MgbWF5IGJlIGF0dGFjaGVkIHRvIGEgcG93ZXIgZG9tYWluIChlLmcuIFBEX1BJUEUpLiBUaGUgZG9tYWluXFxuK1xcdCAqIG11c3QgYmUgcG93ZXJlZCBvbiBiZWZvcmUgYW55IHJlZ2lzdGVyIGFjY2Vzcywgb3RoZXJ3aXNlIHRoZSBTb0Mgd2lsbFxcbitcXHQgKiB0cmlnZ2VyIGEgc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnQgKFNFcnJvcikuXFxuK1xcdCAqXFxuK1xcdCAqIEFjY2Vzc2luZyB0aGUgWFBDUyByZWdpc3RlcnMgYWxzbyByZXF1aXJlcyBhIFRYIGNsb2NrIGZyb20gdGhlIFNlckRlcyxcXG4rXFx0ICogd2hpY2ggaXMgbmVlZGVkIGZvciB0aGUgc29mdCByZXNldC5cXG4rXFx0ICovXFxuK1xcdHJldCA9IHhwY3Nfcmtfc2VyZGVzX3BoeV9pbml0KHB4cGNzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9uKHB4cGNzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHhwY3NfcmtfaW5pdF9yZXMocHhwY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geHBjc19ya19pbml0X2NsayhweHBjcyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB4cGNzX3JrX2luaXRfYnVzKHB4cGNzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4cGNzX3JrX29mX2lkc1tdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJvY2tjaGlwLHJrMzU2OC14cGNzXFxcIiB9LFxcbitcXHR7IC8qIHNlbnRpbmVsICovIH0sXFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhwY3Nfcmtfb2ZfaWRzKTtcXG4rXFxuK3N0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuK3tcXG4rXFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwY3NfbnA7XFxuK1xcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcXG4rXFx0c3RydWN0IGR3X3hwY3MgKnhwY3M7XFxuK1xcdHUzMiBwb3J0O1xcbitcXG4rXFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuK1xcbitcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFxcXCJyZWdcXFwiLCBcXHUwMDI2cG9ydCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZSgoaW50KXBvcnQpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFxuK1xcdC8qIFRoZSBYUENTIHBkZXYgaXMgYXR0YWNoZWQgdG8gdGhlIHBhcmVudCBub2RlICovXFxuK1xcdHBjc19ucCA9IG9mX2dldF9wYXJlbnQobnApO1xcbitcXHRpZiAoIXBjc19ucClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuK1xcbitcXHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGNzX25wKSkge1xcbitcXHRcXHRvZl9ub2RlX3B1dChwY3NfbnApO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFvZl9tYXRjaF9ub2RlKHhwY3Nfcmtfb2ZfaWRzLCBwY3NfbnApKSB7XFxuK1xcdFxcdG9mX25vZGVfcHV0KHBjc19ucCk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXHR9XFxuK1xcbitcXHRwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwY3NfbnApO1xcbitcXHRvZl9ub2RlX3B1dChwY3NfbnApO1xcbitcXHRpZiAoIXBkZXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xcbitcXG4rXFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XFxuK1xcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbitcXHRweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHRpZiAoIXB4cGNzIHx8ICFweHBjcy1cXHUwMDNlYnVzKSB7XFxuK1xcdFxcdGRldmljZV9saW5rX3JlbW92ZShkZXYsIFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcXG4rXFx0fVxcbitcXG4rXFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXFx1MDAzZWJ1cywgKGludClwb3J0KTtcXG4rXFx0aWYgKElTX0VSUih4cGNzKSkge1xcbitcXHRcXHRkZXZpY2VfbGlua19yZW1vdmUoZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cHV0X2RldmljZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cmV0dXJuIHhwY3M7XFxuK1xcdH1cXG4rXFxuK1xcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHhwY3MtXFx1MDAzZWVlZV9tdWx0X2ZhY3QpO1xcbitcXHRwdXRfZGV2aWNlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRyZXR1cm4geHBjcztcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTCh4cGNzX3JrX2NyZWF0ZSk7XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFxuK1xcdGNsa19kaXNhYmxlX3VucHJlcGFyZShweHBjcy1cXHUwMDNlY3NyX2Nsayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFxuK1xcdHJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtXFx1MDAzZWNzcl9jbGspO1xcbit9XFxuK1xcbitzdGF0aWMgREVGSU5FX1JVTlRJTUVfREVWX1BNX09QUyh4cGNzX3JrX3BtX29wcyxcXG4rXFx0XFx0XFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQsXFxuK1xcdFxcdFxcdCAgIHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUsXFxuK1xcdFxcdFxcdCAgIE5VTEwpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHBjc19ya19kcml2ZXIgPSB7XFxuK1xcdC5wcm9iZSA9IHhwY3NfcmtfcHJvYmUsXFxuK1xcdC5kcml2ZXIgPSB7XFxuK1xcdFxcdC5uYW1lID0gXFxcInJrX3hwY3MtZHd4cGNzXFxcIixcXG4rXFx0XFx0LnBtID0gcG1fcHRyKFxcdTAwMjZ4cGNzX3JrX3BtX29wcyksXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZSA9IHhwY3Nfcmtfb2ZfaWRzLFxcbitcXHR9LFxcbit9O1xcbittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHhwY3NfcmtfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkNvaWEgUHJhbnQgXFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xcbmluZGV4IDAzMzdlMmJjYzAxMjUuLjhjMzg3NWI2OTg1YjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xcbkBAIC03NjEsNyArNzYxLDkgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcXG4gXFx0ICogICAgRFcgeFBDUyB1c2VkIHdpdGggRFcgRVFvUyBNQUMgaXMgYWx3YXlzIE1BQyBzaWRlIFNHTUlJLlxcbiBcXHQgKiA0KSBWUl9NSUlfRElHX0NUUkwxIEJpdCg5KSBbTUFDX0FVVE9fU1ddID0gMWIgKEF1dG9tYXRpY1xcbiBcXHQgKiAgICBzcGVlZC9kdXBsZXggbW9kZSBjaGFuZ2UgYnkgSFcgYWZ0ZXIgU0dNSUkgQU4gY29tcGxldGUpXFxuLVxcdCAqIDUpIFZSX01JSV9NTURfQ1RSTCBCaXQoMTIpIFtBTl9FTkFCTEVdID0gMWIgKEVuYWJsZSBTR01JSSBBTilcXG4rXFx0ICogNSkgVlJfTUlJX0FOX0lOVFJfU1RTID0gMHgwIChDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cylcXG4rXFx0ICogNikgVlJfTUlJX01NRF9DVFJMIEJpdCgxMikgW0FOX0VOQUJMRV0gPSAxYiAoRW5hYmxlIFNHTUlJIEFOKVxcbitcXHQgKiAgICBWUl9NSUlfTU1EX0NUUkwgQml0KDkpIFtBTl9SRVNUQVJUXSA9IDFiIChSZXN0YXJ0IFNHTUlJIEFOKVxcbiBcXHQgKlxcbiBcXHQgKiBOb3RlIHRoYXQgVlJfTUlJX01NRF9DVFJMIGlzIE1JSV9CTUNSLlxcbiBcXHQgKlxcbkBAIC03NjksNyArNzcxLDE0IEBAIHN0YXRpYyBpbnQgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsXFxuIFxcdCAqXFx0IFNSX01JSV9BTl9BRFYuIE1BQyBzaWRlIFNHTUlJIHJlY2VpdmVzIEFOIFR4IENvbmZpZyBmcm9tXFxuIFxcdCAqXFx0IFBIWSBhYm91dCB0aGUgbGluayBzdGF0ZSBjaGFuZ2UgYWZ0ZXIgQzI4IEFOIGlzIGNvbXBsZXRlZFxcbiBcXHQgKlxcdCBiZXR3ZWVuIFBIWSBhbmQgTGluayBQYXJ0bmVyLiBUaGVyZSBpcyBhbHNvIG5vIG5lZWQgdG9cXG4tXFx0ICpcXHQgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSS5cXG4rXFx0ICpcXHQgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSSBvbiBtb3N0IGRldmljZXMuXFxuK1xcdCAqXFxuK1xcdCAqIE5vdGU6IFdoaWxlIHRoZSBEZXNpZ25XYXJlIGRhdGFib29rIHN0YXRlcyB0aGF0IEFOIHJlc3RhcnQgaXNcXG4rXFx0ICpcXHQgbm90IG5lZWRlZCBmb3IgTUFDIHNpZGUgU0dNSUksIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuXFxuK1xcdCAqXFx0IFJvY2tjaGlwIFJLMzU2OCkgZXhoaWJpdCBhIHRpbWluZyBxdWlyayB3aGVuIGludGVncmF0ZWQgd2l0aFxcbitcXHQgKlxcdCBwaHlsaW5rIGFuZCBkbyBub3QgcmVzdGFydCBBTiBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGxpbmtcXG4rXFx0ICpcXHQgY29tZXMgYmFjayB1cC4gQW4gZXhwbGljaXQgQU4gcmVzdGFydCBpcyByZXF1aXJlZCBvbiB0aG9zZVxcbitcXHQgKlxcdCBwYXJ0cyB0byByZWNvdmVyIHRoZSBsaW5rIGFmdGVyIGEgZGlzY29ubmVjdC5cXG4gXFx0ICovXFxuIFxcdG1kaW9fY3RybCA9IHhwY3NfcmVhZCh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IpO1xcbiBcXHRpZiAobWRpb19jdHJsIFxcdTAwM2MgMClcXG5AQCAtODE2LDkgKzgyNSwxNCBAQCBzdGF0aWMgaW50IHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdC8qIENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzICovXFxuK1xcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIERXX1ZSX01JSV9BTl9JTlRSX1NUUywgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0aWYgKG5lZ19tb2RlID09IFBIWUxJTktfUENTX05FR19JTkJBTkRfRU5BQkxFRClcXG4gXFx0XFx0cmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsXFxuLVxcdFxcdFxcdFxcdCBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFKTtcXG4rXFx0XFx0XFx0XFx0IG1kaW9fY3RybCB8IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTEwOTMsOSArMTEwNywxOCBAQCBzdGF0aWMgaW50IHhwY3NfZ2V0X3N0YXRlX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cXG4tXFx0aWYgKHN0YXRlLVxcdTAwM2Vhbl9jb21wbGV0ZSlcXG4tXFx0XFx0eHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcXG4rXFx0aWYgKHN0YXRlLVxcdTAwM2Vhbl9jb21wbGV0ZSkge1xcbitcXHRcXHQvKiBDbGVhciBBTiBjb21wbGV0ZSBzdGF0dXMgb3IgaW50ZXJydXB0ICovXFxuK1xcdFxcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIERXX1ZSX01JSV9BTl9JTlRSX1NUUywgMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LyogSW5pdGlhdGUgdGhlIG5leHQgcm91bmQgb2YgQU4gKi9cXG4rXFx0XFx0cmV0ID0geHBjc19tb2RpZnkoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSLCBCTUNSX0FOUkVTVEFSVCxcXG4rXFx0XFx0XFx0XFx0ICBCTUNSX0FOUkVTVEFSVCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuYyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXFxuaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uN2I4NjdlNzUyMDA2NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xcbisrKyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXFxuQEAgLTE4Niw2ICsxODYsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcge1xcbiBcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV94cGNzX3BoeV9yZWFkeTtcXG4gXFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfcGNpZTFsMF9zZWw7XFxuIFxcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3BjaWUxbDFfc2VsO1xcbitcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9zZ21paV9tYWNfc2VsO1xcbiBcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgdTNvdGcwX3BvcnRfZW47XFxuIFxcdHN0cnVjdCBjb21icGh5X3JlZyB1M290ZzFfcG9ydF9lbjtcXG4gfTtcXG5AQCAtMjEyLDYgKzIxMyw3IEBAIHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYge1xcbiBcXHRib29sIGVuYWJsZV9zc2M7XFxuIFxcdGJvb2wgZXh0X3JlZmNsaztcXG4gXFx0c3RydWN0IGNsayAqcmVmY2xrO1xcbitcXHR1MzIgc2dtaWlfbWFjX3NlbDtcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2LFxcbkBAIC0zNzUsNiArMzc3LDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9jb21icGh5X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlcXG4gXFxuIFxcdHByaXYtXFx1MDAzZWV4dF9yZWZjbGsgPSBkZXZpY2VfcHJvcGVydHlfcHJlc2VudChkZXYsIFxcXCJyb2NrY2hpcCxleHQtcmVmY2xrXFxcIik7XFxuIFxcbitcXHRwcml2LVxcdTAwM2VzZ21paV9tYWNfc2VsID0gMTtcXG4rXFx0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXFxcInJvY2tjaGlwLHNnbWlpLW1hYy1zZWxcXFwiLCBcXHUwMDI2cHJpdi1cXHUwMDNlc2dtaWlfbWFjX3NlbCk7XFxuK1xcbiBcXHRwcml2LVxcdTAwM2VwaHlfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9leGNsdXNpdmUoZGV2LCBcXFwicGh5XFxcIik7XFxuIFxcdC8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi9cXG4gXFx0aWYgKFBUUl9FUlIocHJpdi1cXHUwMDNlcGh5X3JzdCkgPT0gLUVOT0VOVClcXG5AQCAtODczLDYgKzg3OCw4IEBAIHN0YXRpYyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBQSFlfVFlQRV9TR01JSTpcXG4rXFx0XFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVxcdTAwM2VwaXBlX2dyZiwgXFx1MDAyNmNmZy1cXHUwMDNlcGlwZV9zZ21paV9tYWNfc2VsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHByaXYtXFx1MDAzZXNnbWlpX21hY19zZWwgXFx1MDAzZSAwKTtcXG4gXFx0XFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVxcdTAwM2VwaXBlX2dyZiwgXFx1MDAyNmNmZy1cXHUwMDNlcGlwZV94cGNzX3BoeV9yZWFkeSwgdHJ1ZSk7XFxuIFxcdFxcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cXHUwMDNlcGh5X2dyZiwgXFx1MDAyNmNmZy1cXHUwMDNlcGlwZV9waHltb2RlX3NlbCwgdHJ1ZSk7XFxuIFxcdFxcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cXHUwMDNlcGh5X2dyZiwgXFx1MDAyNmNmZy1cXHUwMDNlcGlwZV9zZWxfcXNnbWlpLCB0cnVlKTtcXG5AQCAtOTg0LDYgKzk5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcgcmszNTY4X2NvbWJwaHlfZ3JmY2ZncyA9IHtcXG4gXFx0LmNvbjNfZm9yX3NhdGFcXHRcXHQ9IHsgMHgwMDBjLCAxNSwgMCwgMHgwMCwgMHg0NDA3IH0sXFxuIFxcdC8qIHBpcGUtZ3JmICovXFxuIFxcdC5waXBlX2NvbjBfZm9yX3NhdGFcXHQ9IHsgMHgwMDAwLCAxNSwgMCwgMHgwMCwgMHgyMjIwIH0sXFxuK1xcdC5waXBlX3NnbWlpX21hY19zZWxcXHQ9IHsgMHgwMDQwLCAxLCAxLCAweDAwLCAweDAxIH0sXFxuIFxcdC5waXBlX3hwY3NfcGh5X3JlYWR5XFx0PSB7IDB4MDA0MCwgMiwgMiwgMHgwMCwgMHgwMSB9LFxcbiBcXHQudTNvdGcwX3BvcnRfZW5cXHRcXHQ9IHsgMHgwMTA0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSxcXG4gXFx0LnUzb3RnMV9wb3J0X2VuXFx0XFx0PSB7IDB4MDE0NCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmggYi9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yODcyM2Q1YmQ3NWNjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcXG5AQCAtMCwwICsxLDExIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZm5kZWYgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXFxuKyNkZWZpbmUgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNzL3Bjcy14cGNzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgZHdfeHBjcyAqeHBjc19ya19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcXG4rXFxuKyNlbmRpZiAvKiBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6MjU6MzcuMjMwMTE1NTAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzEwMzc2OTI5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBSb2NrY2hpcCBSSzM1NjggRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1MgKFhQQ1MpIGFuZCByZWZhY3RvcnMgUENTIGluaXRpYWxpemF0aW9uIGluIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIGZhbWlseSAoZHdtYWMtcmssIGR3bWFjLWludGVsLCBkd21hYy1yZW5lc2FzLCBkd21hYy1zb2NmcGdhLCBkd21hYy1yem4xKS4gQWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSk6IGRvY3VtZW50YXRpb24vZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIGFybTY0IERUUyBjaGFuZ2VzIGFyZSBub24tZXhlY3V0YWJsZSBvbiBhbWQ2NCwgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzIChzdG1tYWMgZHdtYWMgdmFyaWFudHMgYW5kIFN5bm9wc3lzIERXIFhQQ1MpIHJlcXVpcmUgcGh5c2ljYWwgU29DIHBsYXRmb3JtIGRldmljZXMgb3IgcGh5c2ljYWwgSW50ZWwvUm9ja2NoaXAvUmVuZXNhcyBzaWxpY29uIG5vdCBlbXVsYXRlZCBieSBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMTFmYzIxNWZhYmQ1ZmE5NTE3OWNjMzhiZDBiYTgxMWU2MGY5OTljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTY6MjU6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcCxyazM1NjgteHBjcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcwM2ZjZmYwZTNmNzBcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLHJrMzU2OC14cGNzLnlhbWxcbkBAIC0wLDAgKzEsMTEwIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JvY2tjaGlwLHJrMzU2OC14cGNzLnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFJvY2tjaGlwIFJLMzU2OCBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IFBDU1xuK1xuK21haW50YWluZXJzOlxuKyAgLSBDb2lhIFByYW50IFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjogfFxuKyAgUm9ja2NoaXAgUkszNTY4IFNvQyBpbnRlZ3JhdGVzIGEgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbFxuKyAgQ29kaW5nIFN1YmxheWVyIChYUENTKS5cbisgIFRoZSBQQ1MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIChNQUMpXG4rICBhbmQgdGhlIFBoeXNpY2FsIE1lZGl1bSBBdHRhY2htZW50IChQTUEpIHN1YmxheWVyIHRocm91Z2ggYSBNZWRpYVxuKyAgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChHTUlJKS5cbitcbisgIFRoZSBYUENTIGlzIGFjY2Vzc2VkIG92ZXIgdGhlIEFQQjMgYnVzIGFuZCBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBhXG4rICBOYW5lbmcgQ29tYm8gU2VyRGVzIFBIWS5cbisgIEl0IHN1cHBvcnRzIDEwMDBCQVNFLVgsIFNHTUlJIGFuZCBRU0dNSUkgbW9kZXMuXG4rXG4rICBUaGUgYmxvY2sgY29udGFpbnMgZm91ciBNSUkgcG9ydHMgdGhhdCBjYW4gYmUgaW5kaXZpZHVhbGx5IGVuYWJsZWQgYW5kXG4rICByb3V0ZWQgdG8gb25lIG9mIHRoZSBFdGhlcm5ldCBHTUFDIGNvbnRyb2xsZXJzIHZpYSB0aGUgcGNzLWhhbmRsZVxuKyAgcHJvcGVydHkgaW4gdGhlIE1BQyBkZXZpY2UgdHJlZSBub2RlLlxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBjb25zdDogcm9ja2NoaXAscmszNTY4LXhwY3NcbitcbisgIHJlZzpcbisgICAgbWF4SXRlbXM6IDFcbitcbisgIFwiI2FkZHJlc3MtY2VsbHNcIjpcbisgICAgY29uc3Q6IDFcbitcbisgIFwiI3NpemUtY2VsbHNcIjpcbisgICAgY29uc3Q6IDBcbitcbisgIGNsb2NrczpcbisgICAgaXRlbXM6XG4rICAgICAgLSBkZXNjcmlwdGlvbjogQVBCMyBidXMgaW50ZXJmYWNlIGNsb2NrIChjbGtfY3NyX2kpLCByZXF1aXJlZCBmb3IgcmVnaXN0ZXIgYWNjZXNzXG4rICAgICAgLSBkZXNjcmlwdGlvbjogRUVFIGNsb2NrIChjbGtfZWVlX2kpLCByZXF1aXJlZCBmb3IgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldCBvcGVyYXRpb25cbitcbisgIGNsb2NrLW5hbWVzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGNvbnN0OiBjc3JcbisgICAgICAtIGNvbnN0OiBlZWVcbitcbisgIHBoeXM6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICBwaHktbmFtZXM6XG4rICAgIGNvbnN0OiBzZXJkZXNcbitcbisgIHBvd2VyLWRvbWFpbnM6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rcGF0dGVyblByb3BlcnRpZXM6XG4rICBcIl5ldGhlcm5ldC1wY3MtbWlpQFswLTNdJFwiOlxuKyAgICB0eXBlOiBvYmplY3RcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgT25lIG9mIHRoZSBmb3VyIE1JSSBwb3J0cyBvZiB0aGUgWFBDUy4gVGhlIHBvcnQgaXMgbGlua2VkIHRvIGFuXG4rICAgICAgRXRoZXJuZXQgTUFDIGNvbnRyb2xsZXIgdmlhIHRoZSBwY3MtaGFuZGxlIHByb3BlcnR5IGluIHRoZSBNQUMnc1xuKyAgICAgIGRldmljZSB0cmVlIG5vZGUuXG4rXG4rICAgIHByb3BlcnRpZXM6XG4rICAgICAgcmVnOlxuKyAgICAgICAgZGVzY3JpcHRpb246IE1JSSBwb3J0IG51bWJlci5cbisgICAgICAgIGVudW06IFswLCAxLCAyLCAzXVxuK1xuKyAgICByZXF1aXJlZDpcbisgICAgICAtIHJlZ1xuK1xuKyAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuKyAgLSByZWdcbisgIC0gXCIjYWRkcmVzcy1jZWxsc1wiXG4rICAtIFwiI3NpemUtY2VsbHNcIlxuKyAgLSBjbG9ja3NcbisgIC0gY2xvY2stbmFtZXNcbisgIC0gcGh5c1xuKyAgLSBwaHktbmFtZXNcbisgIC0gcG93ZXItZG9tYWluc1xuK1xuK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2Nsb2NrL3JrMzU2OC1jcnUuaFx1MDAzZVxuKyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9wb3dlci9yazM1NjgtcG93ZXIuaFx1MDAzZVxuKyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9waHkvcGh5LmhcdTAwM2VcbitcbisgICAgZXRoZXJuZXQtcGNzQGZkYTAwMDAwIHtcbisgICAgICBjb21wYXRpYmxlID0gXCJyb2NrY2hpcCxyazM1NjgteHBjc1wiO1xuKyAgICAgIHJlZyA9IFx1MDAzYzB4ZmRhMDAwMDAgMHgyMDAwMDBcdTAwM2U7XG4rICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZjcnUgUENMS19YUENTXHUwMDNlLCBcdTAwM2NcdTAwMjZjcnUgQ0xLX1hQQ1NfRUVFXHUwMDNlO1xuKyAgICAgIGNsb2NrLW5hbWVzID0gXCJjc3JcIiwgXCJlZWVcIjtcbisgICAgICBwaHlzID0gXHUwMDNjXHUwMDI2Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUlcdTAwM2U7XG4rICAgICAgcGh5LW5hbWVzID0gXCJzZXJkZXNcIjtcbisgICAgICBwb3dlci1kb21haW5zID0gXHUwMDNjXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcdTAwM2U7XG4rXG4rICAgICAgZXRoZXJuZXQtcGNzLW1paUAwIHtcbisgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgfTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWxcbmluZGV4IDgwYzI1Mjg0NTM0OWMuLjY3YjIxZWE3N2VjOTYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcm9ja2NoaXAtZHdtYWMueWFtbFxuQEAgLTEyMCw2ICsxMjAsMTIgQEAgcHJvcGVydGllczpcbiAgICAgbWF4aW11bTogMHg3RlxuICAgICBkZWZhdWx0OiAweDEwXG4gXG4rICBwY3MtaGFuZGxlOlxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBTcGVjaWZpZXMgYSByZWZlcmVuY2UgdG8gYSBub2RlIHJlcHJlc2VudGluZyB0aGUgUENTIGRldmljZVxuKyAgICAgIGNvbm5lY3RlZCB0byB0aGlzIEdNQUMuIFJlcXVpcmVkIHdoZW4gcGh5LW1vZGUgaXMgXCJzZ21paVwiLlxuKyAgICBtYXhJdGVtczogMVxuK1xuICAgcGh5LXN1cHBseTpcbiAgICAgZGVzY3JpcHRpb246IFBIWSByZWd1bGF0b3JcbiBcbkBAIC0xNTksNiArMTY1LDE1IEBAIGFsbE9mOlxuICAgICAgICAgY2xvY2tzOlxuICAgICAgICAgICBtaW5JdGVtczogNVxuIFxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcGh5LW1vZGU6XG4rICAgICAgICAgIGNvbnRhaW5zOlxuKyAgICAgICAgICAgIGNvbnN0OiBzZ21paVxuKyAgICB0aGVuOlxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBwY3MtaGFuZGxlXG4rXG4gdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuIFxuIGV4YW1wbGVzOlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXG5pbmRleCAzNzliMDhiZDllOTdhLi44ZTg5OGJjZTlhZjczIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbFxuQEAgLTgwLDYgKzgwLDE1IEBAIHByb3BlcnRpZXM6XG4gICAgIGRlc2NyaXB0aW9uOlxuICAgICAgIFNvbWUgYWRkaXRpb25hbCBwaXBlIHNldHRpbmdzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIEdSRiByZWdzLlxuIFxuKyAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDpcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyXG4rICAgIGVudW06IFswLCAxXVxuKyAgICBkZWZhdWx0OiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFNlbGVjdCBnbWFjMCBvciBnbWFjMSB0byBiZSB1c2VkIGFzIFNHTUlJIGNvbnRyb2xsZXIuXG4rICAgICAgVGhlIGhhcmR3YXJlIHJlc2V0IHZhbHVlIGlzIEdNQUMxICgxKS4gU2V0IHRoaXMgdG8gMCB0byByb3V0ZVxuKyAgICAgIFNHTUlJIHRvIEdNQUMwLlxuK1xuICAgXCIjcGh5LWNlbGxzXCI6XG4gICAgIGNvbnN0OiAxXG4gXG5AQCAtMTA1LDYgKzExNCwxMCBAQCBhbGxPZjpcbiAgICAgICAgICAgbWF4SXRlbXM6IDFcbiAgICAgICAgIHJlc2V0LW5hbWVzOlxuICAgICAgICAgICBtYXhJdGVtczogMVxuKyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogdHJ1ZVxuKyAgICBlbHNlOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiBmYWxzZVxuICAgLSBpZjpcbiAgICAgICBwcm9wZXJ0aWVzOlxuICAgICAgICAgY29tcGF0aWJsZTpcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAzYjJlYjJhN2E4OWE4Li5mNTNhNTE5ZGE2Mjk4IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMjM3MzksNiArMjM3MzksMTUgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3JvY2tjaGlwLHJrMzU3Ni1zYWkueWFtbFxuIEY6XHRzb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfc2FpLipcbiBcbitST0NLQ0hJUCBYUENTIERSSVZFUlxuK006XHRDb2lhIFByYW50IFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cdTAwM2VcbitMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuK0w6XHRsaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAscmszNTY4LXhwY3MueWFtbFxuK0Y6XHRkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xuK0Y6XHRpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXG4rXG4gUk9DS0VSIERSSVZFUlxuIE06XHRKaXJpIFBpcmtvIFx1MDAzY2ppcmlAcmVzbnVsbGkudXNcdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbmluZGV4IDU4YzEwNTJiYThlZjMuLmZkYWE0YTJhNDMyOGIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0c1xuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbkBAIC0zLDYgKzMsNyBAQFxuIC9kdHMtdjEvO1xuIFxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3BpbmN0cmwvcm9ja2NoaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3NvYy9yb2NrY2hpcCx2b3AyLmhcdTAwM2VcbiAjaW5jbHVkZSBcInJrMzU2OC5kdHNpXCJcbkBAIC0yNDEsNiArMjQyLDcgQEAgXHUwMDI2Y29tYnBoeTEge1xuIH07XG4gXG4gXHUwMDI2Y29tYnBoeTIge1xuK1x0cm9ja2NoaXAsc2dtaWktbWFjLXNlbCA9IFx1MDAzYzBcdTAwM2U7XG4gXHRzdGF0dXMgPSBcIm9rYXlcIjtcbiB9O1xuIFxuQEAgLTI2MCw5ICsyNjIsMTggQEAgXHUwMDI2Y3B1MyB7XG4gXHRjcHUtc3VwcGx5ID0gXHUwMDNjXHUwMDI2dmRkX2NwdVx1MDAzZTtcbiB9O1xuIFxuLS8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAocmVxdWlyZSBTR01JSSkgKi9cbisvKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKi9cbiBcdTAwMjZnbWFjMCB7XG4tXHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4rXHRhc3NpZ25lZC1jbG9ja3MgPSBcdTAwM2NcdTAwMjZjcnUgU0NMS19HTUFDMF9SWF9UWFx1MDAzZTtcbitcdGFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSBcdTAwM2NcdTAwMjZjbGtfZ21hYzBfeHBjc19taWlcdTAwM2U7XG4rXHRtYW5hZ2VkID0gXCJpbi1iYW5kLXN0YXR1c1wiO1xuK1x0cGNzLWhhbmRsZSA9IFx1MDAzY1x1MDAyNnhwY3NfbWlpMFx1MDAzZTtcbitcdHBoeS1oYW5kbGUgPSBcdTAwM2NcdTAwMjZzZ21paV9waHlcdTAwM2U7XG4rXHRwaHktbW9kZSA9IFwic2dtaWlcIjtcbitcdHBoeS1zdXBwbHkgPSBcdTAwM2NcdTAwMjZ2Y2NfM3YzXHUwMDNlO1xuK1x0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuK1x0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Z21hYzBfbWlpbVx1MDAzZTtcbitcdHN0YXR1cyA9IFwib2theVwiO1xuIH07XG4gXG4gLyogTW90b3Jjb21tIFlUODUyMVNDIFdBTiBwb3J0ICovXG5AQCAtMzQxLDYgKzM1MiwzNiBAQCBcdTAwMjZpMnMwXzhjaCB7XG4gXHRzdGF0dXMgPSBcIm9rYXlcIjtcbiB9O1xuIFxuK1x1MDAyNm1kaW8wIHtcbitcdHNnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuK1x0XHRjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwiO1xuK1x0XHRyZWcgPSBcdTAwM2MweDNcdTAwM2U7XG4rXHRcdG1heC1zcGVlZCA9IFx1MDAzYzEwMDBcdTAwM2U7XG4rXHRcdHJlc2V0LWFzc2VydC11cyA9IFx1MDAzYzIwMDAwXHUwMDNlO1xuK1x0XHRyZXNldC1kZWFzc2VydC11cyA9IFx1MDAzYzEwMDAwMFx1MDAzZTtcbitcdFx0cmVzZXQtZ3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMyBSS19QQzYgR1BJT19BQ1RJVkVfTE9XXHUwMDNlO1xuK1xuK1x0XHRsZWRzIHtcbitcdFx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuK1x0XHRcdGxlZEAxIHtcbitcdFx0XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlx1MDAzZTtcbitcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcbitcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbitcdFx0XHR9O1xuK1xuK1x0XHRcdGxlZEAyIHtcbitcdFx0XHRcdHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4rXHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9HUkVFTlx1MDAzZTtcbitcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcbitcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbitcdFx0XHR9O1xuK1x0XHR9O1xuK1x0fTtcbit9O1xuK1xuIFx1MDAyNm1kaW8xIHtcbiBcdHJnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuIFx0XHRjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwiO1xuQEAgLTM1MCw2ICszOTEsMjUgQEAgcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XG4gXHRcdHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzQgUktfUEMwIEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiBcdFx0cngtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxNTAwXHUwMDNlO1xuIFx0XHR0eC1pbnRlcm5hbC1kZWxheS1wcyA9IFx1MDAzYzE1MDBcdTAwM2U7XG4rXG4rXHRcdGxlZHMge1xuK1x0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rXHRcdFx0bGVkQDEge1xuK1x0XHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0FNQkVSXHUwMDNlO1xuK1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuK1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwia2VlcFwiO1xuK1x0XHRcdH07XG4rXG4rXHRcdFx0bGVkQDIge1xuK1x0XHRcdFx0cmVnID0gXHUwMDNjMlx1MDAzZTtcbitcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXHUwMDNlO1xuK1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuK1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwia2VlcFwiO1xuK1x0XHRcdH07XG4rXHRcdH07XG4gXHR9O1xuIH07XG4gXG5AQCAtNTg2LDMgKzY0NiwxMyBAQCBcdTAwMjZ4aW4zMmsge1xuIFx0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuIFx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Y2xrMzJrX291dDFcdTAwM2U7XG4gfTtcbitcbitcdTAwMjZ4cGNzIHtcbitcdHBoeXMgPSBcdTAwM2NcdTAwMjZjb21icGh5MiBQSFlfVFlQRV9TR01JSVx1MDAzZTtcbitcdHBoeS1uYW1lcyA9IFwic2VyZGVzXCI7XG4rXHRzdGF0dXMgPSBcIm9rYXlcIjtcbit9O1xuK1xuK1x1MDAyNnhwY3NfbWlpMCB7XG4rXHRzdGF0dXMgPSBcIm9rYXlcIjtcbit9O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXG5pbmRleCAzYmM2NTNmMDI3ZjFmLi4yMjdkMDNlMzM2MDQzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuQEAgLTExMCw2ICsxMTAsNTEgQEAgc2F0YTA6IHNhdGFAZmMwMDAwMDAge1xuIFx0XHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4gXHR9O1xuIFxuK1x0eHBjczogZXRoZXJuZXQtcGNzQGZkYTAwMDAwIHtcbitcdFx0Y29tcGF0aWJsZSA9IFwicm9ja2NoaXAscmszNTY4LXhwY3NcIjtcbitcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuK1x0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXHRcdHJlZyA9IFx1MDAzYzB4MCAweGZkYTAwMDAwIDB4MCAweDIwMDAwMFx1MDAzZTtcbitcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFBDTEtfWFBDU1x1MDAzZSwgXHUwMDNjXHUwMDI2Y3J1IENMS19YUENTX0VFRVx1MDAzZTtcbitcdFx0Y2xvY2stbmFtZXMgPSBcImNzclwiLCBcImVlZVwiO1xuK1x0XHRwb3dlci1kb21haW5zID0gXHUwMDNjXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcdTAwM2U7XG4rXHRcdHN0YXR1cyA9IFwiZGlzYWJsZWRcIjtcbitcbitcdFx0eHBjc19taWkwOiBldGhlcm5ldC1wY3MtbWlpQDAge1xuK1x0XHRcdHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rXHRcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0XHR9O1xuK1xuK1x0XHR4cGNzX21paTE6IGV0aGVybmV0LXBjcy1taWlAMSB7XG4rXHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4rXHRcdH07XG4rXG4rXHRcdHhwY3NfbWlpMjogZXRoZXJuZXQtcGNzLW1paUAyIHtcbitcdFx0XHRyZWcgPSBcdTAwM2MyXHUwMDNlO1xuK1x0XHRcdHN0YXR1cyA9IFwiZGlzYWJsZWRcIjtcbitcdFx0fTtcbitcbitcdFx0eHBjc19taWkzOiBldGhlcm5ldC1wY3MtbWlpQDMge1xuK1x0XHRcdHJlZyA9IFx1MDAzYzNcdTAwM2U7XG4rXHRcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0XHR9O1xuK1x0fTtcbitcbitcdGNsa19nbWFjMF94cGNzX21paTogY2xvY2steHBjcy1nbWFjMCB7XG4rXHRcdGNvbXBhdGlibGUgPSBcImZpeGVkLWNsb2NrXCI7XG4rXHRcdGNsb2NrLWZyZXF1ZW5jeSA9IFx1MDAzYzEyNTAwMDAwMFx1MDAzZTtcbitcdFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCJjbGtfZ21hYzBfeHBjc19taWlcIjtcbitcdFx0I2Nsb2NrLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcdH07XG4rXG4rXHRjbGtfZ21hYzFfeHBjc19taWk6IGNsb2NrLXhwY3MtZ21hYzEge1xuK1x0XHRjb21wYXRpYmxlID0gXCJmaXhlZC1jbG9ja1wiO1xuK1x0XHRjbG9jay1mcmVxdWVuY3kgPSBcdTAwM2MxMjUwMDAwMDBcdTAwM2U7XG4rXHRcdGNsb2NrLW91dHB1dC1uYW1lcyA9IFwiY2xrX2dtYWMxX3hwY3NfbWlpXCI7XG4rXHRcdCNjbG9jay1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXHR9O1xuK1xuIFx0cGlwZV9waHlfZ3JmMDogc3lzY29uQGZkYzcwMDAwIHtcbiBcdFx0Y29tcGF0aWJsZSA9IFwicm9ja2NoaXAscmszNTY4LXBpcGUtcGh5LWdyZlwiLCBcInN5c2NvblwiO1xuIFx0XHRyZWcgPSBcdTAwM2MweDAgMHhmZGM3MDAwMCAweDAgMHgxMDAwXHUwMDNlO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXG5pbmRleCBlM2RkNWFkZGE1YWNhLi41MDg4YWNjMDY5ODJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1xuQEAgLTE3MCw2ICsxNzAsNyBAQCBjb25maWcgRFdNQUNfUk9DS0NISVBcbiBcdGRlZmF1bHQgQVJDSF9ST0NLQ0hJUFxuIFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxuIFx0c2VsZWN0IE1GRF9TWVNDT05cbitcdHNlbGVjdCBQQ1NfWFBDU19ST0NLQ0hJUFxuIFx0aGVscFxuIFx0ICBTdXBwb3J0IGZvciBFdGhlcm5ldCBjb250cm9sbGVyIG9uIFJvY2tjaGlwIFJLMzI4OCBTb0MuXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcbmluZGV4IGY1ZjlmYTY3ZWNkNzcuLjQzMDhkY2NiZjI1NzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXG5AQCAtNjAzLDEzICs2MDMsNDcgQEAgc3RhdGljIHZvaWQgY29tbW9uX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpXG4gXHRwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlbmVlZHNfcmVzZXQgPSB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcbitcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuK1x0aW50IGFkZHI7XG4rXG4rXHRkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSk7XG4rXG4rXHRpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgXCJwY3MtaGFuZGxlXCIpKSB7XG4rXHRcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXCJwY3MtaGFuZGxlXCIsIDApO1xuK1x0XHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xuK1x0XHRmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTtcbitcdH0gZWxzZSB7XG4rXHRcdGFkZHIgPSBmZnMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIC0gMTtcbitcdFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cdTAwM2VtaWksIGFkZHIpO1xuK1x0fVxuK1xuK1x0aWYgKElTX0VSUih4cGNzKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoeHBjcyk7XG4rXG4rXHR4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtdWx0X2ZhY3RfMTAwbnMpO1xuK1xuK1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBpbnRlbF9tZ2JlX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbit7XG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0eHBjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4rXHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICppbnRlbF9tZ2JlX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuIHtcbi1cdC8qIHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VoYXNfeHBjcyBoYXMgYmVlbiBzZXQgdHJ1ZSwgc28gdGhlcmVcbi1cdCAqIHNob3VsZCBhbHdheXMgYmUgYW4gWFBDUy4gVGhlIG9yaWdpbmFsIGNvZGUgd291bGQgYWx3YXlzXG4tXHQgKiByZXR1cm4gdGhpcyBpZiBwcmVzZW50LlxuLVx0ICovXG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4gXHRyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuIH1cbiBcbkBAIC03MzMsNiArNzY3LDggQEAgc3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ICAgIHBsYXQtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKSB7XG4gXHRcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzayA9IEJJVF9VMzIoSU5URUxfTUdCRV9YUENTX0FERFIpO1xuIFx0XHRwbGF0LVx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbitcdFx0cGxhdC1cdTAwM2VwY3NfaW5pdCA9IGludGVsX21nYmVfcGNzX2luaXQ7XG4rXHRcdHBsYXQtXHUwMDNlcGNzX2V4aXQgPSBpbnRlbF9tZ2JlX3Bjc19leGl0O1xuIFx0XHRwbGF0LVx1MDAzZXNlbGVjdF9wY3MgPSBpbnRlbF9tZ2JlX3NlbGVjdF9wY3M7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXG5pbmRleCAxOWYzNGUxOGJmZWYyLi45YWYzMmMyNmY5YzE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbkBAIC04MSw4ICs4MSwxMSBAQCBzdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgcmVuZXNhc19nbWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB7XG4tXHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcylcbi1cdFx0bWlpY19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuK1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtaWljX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4rXHRwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmVuZXNhc19nbWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG5pbmRleCA4ZDcwNDJlNjg5MjYxLi5iM2Q3NDZkZDk2NmZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWZkL3N5c2Nvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MtcmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwic3RtbWFjX3BsYXRmb3JtLmhcIlxuQEAgLTQ3LDYgKzQ4LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHtcbiBcdHZvaWQgKCpzZXRfdG9fcmdtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxuIFx0XHRcdCAgICAgaW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpO1xuIFx0dm9pZCAoKnNldF90b19ybWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7XG4rXHR2b2lkICgqc2V0X3RvX3NnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7XG4gXHRpbnQgKCpzZXRfc3BlZWQpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxuIFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQpO1xuIFx0dm9pZCAoKmludGVncmF0ZWRfcGh5X3Bvd2VydXApKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbkBAIC02Myw2ICs2NSw3IEBAIHN0cnVjdCBya19nbWFjX29wcyB7XG4gXHRib29sIGNsb2NrX2dyZl9yZWdfaW5fcGhwO1xuIFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcbiBcdGJvb2wgc3VwcG9ydHNfcm1paTtcbitcdGJvb2wgc3VwcG9ydHNfc2dtaWk7XG4gXHRib29sIHBocF9ncmZfcmVxdWlyZWQ7XG4gXHRib29sIHJlZ3NfdmFsaWQ7XG4gXHR1MzIgcmVnc1tdO1xuQEAgLTk4LDYgKzEwMSw3IEBAIHN0cnVjdCBya19wcml2X2RhdGEge1xuIFx0Ym9vbCBpbnRlZ3JhdGVkX3BoeTtcbiBcdGJvb2wgc3VwcG9ydHNfcmdtaWk7XG4gXHRib29sIHN1cHBvcnRzX3JtaWk7XG4rXHRib29sIHN1cHBvcnRzX3NnbWlpO1xuIFxuIFx0c3RydWN0IGNsa19idWxrX2RhdGEgKmNsa3M7XG4gXHRpbnQgbnVtX2Nsa3M7XG5AQCAtODA5LDYgKzgxMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTI4X29wcyA9IHtcbiAjZGVmaW5lIFJLMzU2OF9HUkZfR01BQzFfQ09OMVx0XHQweDAzOGNcbiBcbiAvKiBSSzM1NjhfR1JGX0dNQUMwX0NPTjEgXHUwMDI2XHUwMDI2IFJLMzU2OF9HUkZfR01BQzFfQ09OMSAqL1xuKyNkZWZpbmUgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJXHRcdEdSRl9DTFJfQklUKDcpXG4rI2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSVx0XHRHUkZfQklUKDcpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxcdFx0XHRHUkZfQklUKDMpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxfQ0xSXHRcdEdSRl9DTFJfQklUKDMpXG4gI2RlZmluZSBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFXHRcdEdSRl9CSVQoMSlcbkBAIC04MzYsNiArODQyLDE2IEBAIHN0YXRpYyBpbnQgcmszNTY4X2luaXQoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcm1paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbit7XG4rXHR1MzIgY29uMTtcbitcbitcdGNvbjEgPSAoYnNwX3ByaXYtXHUwMDNlaWQgPT0gMSkgPyBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgOlxuK1x0XHRcdFx0ICAgICBSSzM1NjhfR1JGX0dNQUMwX0NPTjE7XG4rXG4rXHRyZWdtYXBfd3JpdGUoYnNwX3ByaXYtXHUwMDNlZ3JmLCBjb24xLCBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkpO1xuK31cbitcbiBzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3JnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxuIFx0XHRcdFx0aW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpXG4ge1xuQEAgLTg1MSwxOSArODY3LDMxIEBAIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdCAgICAgUkszNTY4X0dNQUNfQ0xLX1RYX0RMX0NGRyh0eF9kZWxheSkpO1xuIFxuIFx0cmVnbWFwX3dyaXRlKGJzcF9wcml2LVx1MDAzZWdyZiwgY29uMSxcbitcdFx0ICAgICBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkgfFxuIFx0XHQgICAgIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUgfFxuIFx0XHQgICAgIFJLMzU2OF9HTUFDX1RYQ0xLX0RMWV9FTkFCTEUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3NnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuK3tcbitcdHUzMiBjb24xO1xuK1xuK1x0Y29uMSA9IChic3BfcHJpdi1cdTAwM2VpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6XG4rXHRcdFx0XHQgICAgIFJLMzU2OF9HUkZfR01BQzBfQ09OMTtcbitcbitcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cdTAwM2VncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyByazM1Njhfb3BzID0ge1xuIFx0LmluaXQgPSByazM1NjhfaW5pdCxcbitcdC5zZXRfdG9fcm1paSA9IHJrMzU2OF9zZXRfdG9fcm1paSxcbiBcdC5zZXRfdG9fcmdtaWkgPSByazM1Njhfc2V0X3RvX3JnbWlpLFxuK1x0LnNldF90b19zZ21paSA9IHJrMzU2OF9zZXRfdG9fc2dtaWksXG4rXG4gXHQuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsXG4gXG4gXHQuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLFxuIFxuLVx0LnN1cHBvcnRzX3JtaWkgPSB0cnVlLFxuLVxuIFx0LnJlZ3NfdmFsaWQgPSB0cnVlLFxuIFx0LnJlZ3MgPSB7XG4gXHRcdDB4ZmUyYTAwMDAsIC8qIGdtYWMwICovXG5AQCAtMTIwOCw2ICsxMjM2LDQzIEBAIHN0YXRpYyB2b2lkIHJrX3BoeV9wb3dlcmRvd24oc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdGRldl9lcnIoYnNwX3ByaXYtXHUwMDNlZGV2LCBcImZhaWwgdG8gZGlzYWJsZSBwaHktc3VwcGx5XFxuXCIpO1xuIH1cbiBcbitzdGF0aWMgaW50IHJrX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcHJpdi1cdTAwM2VkZXZpY2UtXHUwMDNlb2Zfbm9kZTtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNzX25vZGU7XG4rXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcztcbitcbitcdHBjc19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgXCJwY3MtaGFuZGxlXCIsIDApO1xuK1x0aWYgKCFwY3Nfbm9kZSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHR4cGNzID0geHBjc19ya19jcmVhdGUocHJpdi1cdTAwM2VkZXZpY2UsIHBjc19ub2RlKTtcbitcdG9mX25vZGVfcHV0KHBjc19ub2RlKTtcbitcdGlmIChJU19FUlIoeHBjcykpXG4rXHRcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xuK1xuK1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBya19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpXG4rXHRcdHJldHVybjtcbitcbitcdHhwY3NfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuK1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0gTlVMTDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4rXHRcdFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuK3tcbitcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0LFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyAqb3BzKVxuQEAgLTEzMzAsNiArMTM5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4gXG4gXHRic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19yZ21paSA9IG9wcy1cdTAwM2VzdXBwb3J0c19yZ21paSB8fCAhIW9wcy1cdTAwM2VzZXRfdG9fcmdtaWk7XG4gXHRic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19ybWlpID0gb3BzLVx1MDAzZXN1cHBvcnRzX3JtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3JtaWk7XG4rXHRic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19zZ21paSA9IG9wcy1cdTAwM2VzdXBwb3J0c19zZ21paSB8fCAhIW9wcy1cdTAwM2VzZXRfdG9fc2dtaWk7XG4gXG4gXHRpZiAob3BzLVx1MDAzZWluaXQpIHtcbiBcdFx0cmV0ID0gb3BzLVx1MDAzZWluaXQoYnNwX3ByaXYpO1xuQEAgLTEzNjEsNiArMTQyNywxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfY2hlY2tfb3BzKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRpZiAoIWJzcF9wcml2LVx1MDAzZXN1cHBvcnRzX3JtaWkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4rXHRcdGlmICghYnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfc2dtaWkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X2Vycihic3BfcHJpdi1cdTAwM2VkZXYsXG4gXHRcdFx0XCJ1bnN1cHBvcnRlZCBpbnRlcmZhY2UgJWRcIiwgYnNwX3ByaXYtXHUwMDNlcGh5X2lmYWNlKTtcbkBAIC0xMzc5LDE2ICsxNDQ5LDE5IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdHJldCA9IGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgdHJ1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGJzcF9wcml2LVx1MDAzZXBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpXG4rXHRcdGdvdG8gc2V0X21vZGU7XG4rXG4gXHRyZXQgPSBya19nZXRfcGh5X2ludGZfc2VsKGJzcF9wcml2LVx1MDAzZXBoeV9pZmFjZSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFxuIFx0aW50ZiA9IHJldDtcbiBcbi1cdHJldCA9IGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgdHJ1ZSk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0aWYgKGJzcF9wcml2LVx1MDAzZWdtYWNfcGh5X2ludGZfc2VsX21hc2sgfHxcbiBcdCAgICBic3BfcHJpdi1cdTAwM2VnbWFjX3JtaWlfbW9kZV9tYXNrKSB7XG4gXHRcdC8qIElmIGRlZmluZWQsIGVuY29kZSB0aGUgcGh5X2ludGZfc2VsIHZhbHVlICovXG5AQCAtMTM5OSwxMCArMTQ3Miw4IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRcdFx0ICAgICAgYnNwX3ByaXYtXHUwMDNlZ21hY19ybWlpX21vZGVfbWFzayk7XG4gXG4gXHRcdHJldCA9IHJrX3dyaXRlX2dtYWNfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH1cbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFx0fVxuIFxuIFx0aWYgKGJzcF9wcml2LVx1MDAzZWNsb2NrLnJtaWlfbW9kZV9tYXNrKSB7XG5AQCAtMTQxMCwxMyArMTQ4MSwxMiBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0XHRcdCAgICAgYnNwX3ByaXYtXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spO1xuIFxuIFx0XHRyZXQgPSBya193cml0ZV9jbG9ja19ncmZfcmVnKGJzcF9wcml2LCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXHR9XG4gXG4tXHQvKnJtaWkgb3IgcmdtaWkqL1xuK3NldF9tb2RlOlxuK1x0Lyogcm1paSwgcmdtaWksIHNnbWlpICovXG4gXHRzd2l0Y2ggKGJzcF9wcml2LVx1MDAzZXBoeV9pZmFjZSkge1xuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG4gXHRcdGRldl9pbmZvKGRldiwgXCJpbml0IGZvciBSR01JSVxcblwiKTtcbkBAIC0xNDQ3LDE1ICsxNTE3LDIwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRpZiAoYnNwX3ByaXYtXHUwMDNlb3BzLVx1MDAzZXNldF90b19ybWlpKVxuIFx0XHRcdGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fcm1paShic3BfcHJpdik7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4rXHRcdGRldl9pbmZvKGRldiwgXCJpbml0IGZvciBTR01JSVxcblwiKTtcbitcdFx0aWYgKGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fc2dtaWkpXG4rXHRcdFx0YnNwX3ByaXYtXHUwMDNlb3BzLVx1MDAzZXNldF90b19zZ21paShic3BfcHJpdik7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X2VycihkZXYsIFwiTk8gaW50ZXJmYWNlIGRlZmluZWQhXFxuXCIpO1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFx0fVxuIFxuIFx0cmV0ID0gcmtfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKGRldik7XG4gXG5AQCAtMTQ2Myw2ICsxNTM4LDEwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlaW50ZWdyYXRlZF9waHlfcG93ZXJ1cChic3BfcHJpdik7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitjbGtfZGlzYWJsZTpcbitcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmtfZ21hY19wb3dlcmRvd24oc3RydWN0IHJrX3ByaXZfZGF0YSAqZ21hYylcbkBAIC0xNDg2LDYgKzE1NjUsOSBAQCBzdGF0aWMgdm9pZCBya19nZXRfaW50ZXJmYWNlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgKmJzcF9wcml2LFxuIFxuIFx0aWYgKHJrLVx1MDAzZXN1cHBvcnRzX3JtaWkpXG4gXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7XG4rXG4rXHRpZiAocmstXHUwMDNlc3VwcG9ydHNfc2dtaWkpXG4rXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksIGludGVyZmFjZXMpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJrX3NldF9jbGtfdHhfcmF0ZSh2b2lkICpic3BfcHJpdl8sIHN0cnVjdCBjbGsgKmNsa190eF9pLFxuQEAgLTE2MDIsNiArMTY4NCwxNyBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHBsYXRfZGF0LVx1MDAzZXN1c3BlbmQgPSBya19nbWFjX3N1c3BlbmQ7XG4gXHRwbGF0X2RhdC1cdTAwM2VyZXN1bWUgPSBya19nbWFjX3Jlc3VtZTtcbiBcbitcdGlmIChwbGF0X2RhdC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuK1x0XHQvKiBTR01JSSBjbG9jayBhbHdheXMgcnVucyBhdCAxMjUgTUh6ICovXG4rXHRcdHBsYXRfZGF0LVx1MDAzZXNldF9jbGtfdHhfcmF0ZSA9IE5VTEw7XG4rXG4rXHRcdC8qIFNHTUlJIHJlcXVpcmVzIGEgUENTICovXG4rXHRcdHBsYXRfZGF0LVx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbitcdFx0cGxhdF9kYXQtXHUwMDNlcGNzX2luaXQgPSBya19wY3NfaW5pdDtcbitcdFx0cGxhdF9kYXQtXHUwMDNlcGNzX2V4aXQgPSBya19wY3NfZXhpdDtcbitcdFx0cGxhdF9kYXQtXHUwMDNlc2VsZWN0X3BjcyA9IHJrX3NlbGVjdF9wY3M7XG4rXHR9XG4rXG4gXHRwbGF0X2RhdC1cdTAwM2Vic3BfcHJpdiA9IHJrX2dtYWNfc2V0dXAocGRldiwgcGxhdF9kYXQsIGRhdGEpO1xuIFx0aWYgKElTX0VSUihwbGF0X2RhdC1cdTAwM2Vic3BfcHJpdikpXG4gXHRcdHJldHVybiBQVFJfRVJSKHBsYXRfZGF0LVx1MDAzZWJzcF9wcml2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmNcbmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xuQEAgLTM1LDggKzM1LDExIEBAIHN0YXRpYyBpbnQgcnpuMV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgcnpuMV9kd21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4tXHRcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbitcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWlpY19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuK1x0cHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJ6bjFfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG5pbmRleCAxZDdmMGE1N2QyODg5Li42ZDRiYzFmZThmNzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbkBAIC01MzksOCArNTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIHZvaWQgc29jZnBnYV9kd21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4tXHRcdGx5bnhfcGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4rXHRcdHJldHVybjtcbitcbitcdGx5bnhfcGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4rXHRwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqc29jZnBnYV9kd21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xuaW5kZXggYWZlOThmZjViZGNiMC4uNzM5NmI2ODg5OWM2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcbkBAIC00MjYsMzUgKzQyNiwxNCBAQCBpbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcbiBpbnQgc3RtbWFjX3Bjc19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcbi1cdHN0cnVjdCBkd194cGNzICp4cGNzID0gTlVMTDtcbi1cdGludCBhZGRyLCByZXQ7XG4tXG4tXHRkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSk7XG4tXG4tXHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KSB7XG4tXHRcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdChwcml2KTtcbi1cdH0gZWxzZSBpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgXCJwY3MtaGFuZGxlXCIpKSB7XG4tXHRcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXCJwY3MtaGFuZGxlXCIsIDApO1xuLVx0XHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xuLVx0XHRmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTtcbi1cdFx0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHhwY3MpO1xuLVx0fSBlbHNlIGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIHtcbi1cdFx0YWRkciA9IGZmcyhwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzaykgLSAxO1xuLVx0XHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2Rldihwcml2LVx1MDAzZW1paSwgYWRkcik7XG4tXHRcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTtcbi1cdH0gZWxzZSB7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2luaXQpXG4gXHRcdHJldHVybiAwO1xuLVx0fVxuIFxuK1x0cmV0ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KHByaXYpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi1cdTAwM2VkZXZpY2UsIHJldCwgXCJObyB4UENTIGZvdW5kXFxuXCIpO1xuLVxuLVx0aWYgKHhwY3MpXG4tXHRcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZW11bHRfZmFjdF8xMDBucyk7XG4tXG4tXHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSB4cGNzO1xuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVx1MDAzZWRldmljZSwgcmV0LCBcIkZhaWxlZCB0byBpbml0aWFsaXplIFBDU1xcblwiKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC00NjMsMTQgKzQ0MiwxMCBAQCB2b2lkIHN0bW1hY19wY3NfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuLVx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQocHJpdik7XG4tXG4tXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbitcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbi1cdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4rXHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQocHJpdik7XG4gfVxuIFxuIHN0cnVjdCBzdG1tYWNfY2xrX3JhdGUge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbmluZGV4IGU0MTdmZDY2ZjY2MGEuLjNkYjliMzQzYWMwYzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbkBAIC0xMiw2ICsxMiwzMSBAQCBjb25maWcgUENTX1hQQ1NcbiBcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgYW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIFN5bm9wc3lzXG4gXHQgIERlc2lnbldhcmUgWFBDUyBjb250cm9sbGVycy5cbiBcbitpZiBQQ1NfWFBDU1xuK1xuK2NvbmZpZyBQQ1NfWFBDU19QTEFURk9STVxuK1x0dHJpc3RhdGUgXCJHZW5lcmljIFhQQ1MgY29udHJvbGxlciBzdXBwb3J0XCJcbitcdGRlZmF1bHQgUENTX1hQQ1NcbitcdGhlbHBcbitcdCAgR2VuZXJpYyBEV1hQQ1MgZHJpdmVyIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCByZXF1aXJlIGFueVxuK1x0ICBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIHRvIGZ1bmN0aW9uIG9yIGlzIHVzaW5nIHBsYXRmb3JtXG4rXHQgIGRhdGEgZm9yIHNldHVwLlxuK1xuK1x0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuK1xuK2NvbmZpZyBQQ1NfWFBDU19ST0NLQ0hJUFxuK1x0dHJpc3RhdGUgXCJSb2NrY2hpcCBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydFwiXG4rXHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcbitcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVClcbitcdHNlbGVjdCBHRU5FUklDX1BIWVxuK1x0c2VsZWN0IFBNX0dFTkVSSUNfRE9NQUlOU1xuK1x0aGVscFxuK1x0ICBTdXBwb3J0IGZvciBYUENTIGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszNTZ4IFNvQy5cbitcbitcdCAgSWYgeW91IGhhdmUgYSBSb2NrY2hpcCBTb0Mgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuK1xuK2VuZGlmICMgUENTX1hQQ1NcbitcbiBjb25maWcgUENTX0xZTlhcbiBcdHRyaXN0YXRlXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlXG5pbmRleCA0Zjc5MjA2MThiOTAwLi5mOWY2Y2YyNTc4ZDcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcbkBAIC0xLDEwICsxLDExIEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICMgTWFrZWZpbGUgZm9yIExpbnV4IFBDUyBkcml2ZXJzXG4gXG4tcGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpXHQ6PSBwY3MteHBjcy5vIHBjcy14cGNzLXBsYXQubyBcXFxuLVx0XHRcdFx0ICAgcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gub1xuK3Bjc194cGNzLSQoQ09ORklHX1BDU19YUENTKVx0Oj0gcGNzLXhwY3MubyBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vXG4gXG4gb2JqLSQoQ09ORklHX1BDU19YUENTKVx0XHQrPSBwY3NfeHBjcy5vXG4rb2JqLSQoQ09ORklHX1BDU19YUENTX1BMQVRGT1JNKSArPSBwY3MteHBjcy1wbGF0Lm9cbitvYmotJChDT05GSUdfUENTX1hQQ1NfUk9DS0NISVApICs9IHBjcy14cGNzLXJrLm9cbiBvYmotJChDT05GSUdfUENTX0xZTlgpXHRcdCs9IHBjcy1seW54Lm9cbiBvYmotJChDT05GSUdfUENTX01US19MWU5YSSlcdCs9IHBjcy1tdGstbHlueGkub1xuIG9iai0kKENPTkZJR19QQ1NfUlpOMV9NSUlDKVx0Kz0gcGNzLXJ6bjEtbWlpYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ1ZTBmMjJjOTczYzJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXG5AQCAtMCwwICsxLDU3MyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXJcbisgKlxuKyAqIEJhc2VkIG9uIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIFhQQ1MgcGxhdGZvcm0gZHJpdmVyLlxuKyAqIENvcHlyaWdodCAoQykgMjAyNCBTZXJnZSBTZW1pblxuKyAqXG4rICogQWRhcHRlZCBmb3IgUm9ja2NoaXAgU29Dcywgd2l0aCByZWZlcmVuY2UgdG8gdGhlIFJvY2tjaGlwIE9FTSBkcml2ZXIuXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IENvaWEgUHJhbnRcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfcGxhdGZvcm0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX2RvbWFpbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInBjcy14cGNzLmhcIlxuK1xuK3N0cnVjdCBkd194cGNzX3JrIHtcbitcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuK1x0dm9pZCBfX2lvbWVtICpyZWdfYmFzZTtcbitcdHN0cnVjdCBwaHkgKnNlcmRlc19waHk7XG4rXHRzdHJ1Y3QgY2xrICpjc3JfY2xrO1xuK1x0c3RydWN0IGNsayAqZWVlX2NsaztcbitcdHU4IGVlZV9tdWx0X2ZhY3Q7XG4rfTtcbitcbitzdGF0aWMgcHRyZGlmZl90IHhwY3NfcmtfYWRkcl9mb3JtYXQoaW50IGRldiwgaW50IHJlZylcbit7XG4rXHRyZXR1cm4gRklFTERfUFJFUCgweDcwMDAwLCBkZXYpIHwgRklFTERfUFJFUCgweGZmZmYsIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX3JlZyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0cHRyZGlmZl90IGNzcjtcbitcdGludCByZXQ7XG4rXG4rXHRjc3IgPSB4cGNzX3JrX2FkZHJfZm9ybWF0KGRldiwgcmVnKTtcbitcbitcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHJlYWRsKHB4cGNzLVx1MDAzZXJlZ19iYXNlICsgKGNzciBcdTAwM2NcdTAwM2MgMikpIFx1MDAyNiAweGZmZmY7XG4rXG4rXHRwbV9ydW50aW1lX3B1dChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcbit7XG4rXHRwdHJkaWZmX3QgY3NyO1xuK1x0aW50IHJldDtcbitcbitcdGNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpO1xuK1xuK1x0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0d3JpdGVsKHZhbCwgcHhwY3MtXHUwMDNlcmVnX2Jhc2UgKyAoY3NyIFx1MDAzY1x1MDAzYyAyKSk7XG4rXG4rXHRwbV9ydW50aW1lX3B1dChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJMVx0MlxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTJcdDNcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkzXHQ0XG4rI2RlZmluZSBST0NLQ0hJUF9NTURfUE1BUE1EXHQ2XG4rI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJXHQ3XG4rXG4rc3RhdGljIGJvb2wgeHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoaW50IGFkZHIpXG4re1xuK1x0cmV0dXJuICEoYWRkciBcdTAwM2MgMCB8fCBhZGRyIFx1MDAzZSAzKTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0c3dpdGNoIChkZXYpIHtcbitcdGNhc2UgTURJT19NTURfUE1BUE1EOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDtcbitcdGNhc2UgTURJT19NTURfVkVORDI6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcdH1cbitcbitcdC8qXG4rXHQgKiBSZWFkcyBhcmUgcmVkaXJlY3RlZCBieSBoYXJkd2FyZSB0byB0aGUgcG9ydCdzIHJlYWQtb25seSBtaXJyb3I7XG4rXHQgKiBvbmx5IHdyaXRlcyBoYXZlIHRvIGJlIHRhcmdldGVkIGF0IE1JSSAoc2VlIHRoZSB3cml0ZSBwYXRoKS5cbitcdCAqL1xuK1x0c3dpdGNoIChhZGRyKSB7XG4rXHRjYXNlIDA6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMjtcbitcdGNhc2UgMzpcbitcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZylcbit7XG4rXHRzd2l0Y2ggKGRldikge1xuK1x0Y2FzZSBNRElPX01NRF9QTUFQTUQ6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xuK1x0Y2FzZSBNRElPX01NRF9WRU5EMjpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVOWElPO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoZXNlIHJlZ2lzdGVycyBwaHlzaWNhbGx5IGxpdmUgb25seSBpbiBNSUkgKHRoZSBtYW5hZ2VtZW50IHBvcnQpLlxuK1x0ICogUG9ydHMgMS0zIGV4cG9zZSByZWFkLW9ubHkgbWlycm9ycyBvZiB0aGVzZSBiaXRzLCBzbyB3cml0ZXMgbXVzdFxuK1x0ICogYWx3YXlzIHRhcmdldCBNSUk7IHRoZSByZWFkIHBhdGggcmVtYXBzIHBlciBhZGRyZXNzIGFuZCB0aGVcbitcdCAqIGhhcmR3YXJlIHJlZGlyZWN0cyB0byB0aGUgcG9ydCdzIG1pcnJvci5cbitcdCAqL1xuK1x0c3dpdGNoIChyZWcpIHtcbitcdGNhc2UgRFdfVlJfTUlJX0FOX0NUUkw6XG4rXHRjYXNlIERXX1ZSX01JSV9BTl9JTlRSX1NUUzpcbitcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDA6XG4rXHRjYXNlIERXX1ZSX01JSV9FRUVfTUNUUkwxOlxuK1x0Y2FzZSBEV19WUl9NSUlfRElHX0NUUkwyOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChhZGRyKSB7XG4rXHRjYXNlIDA6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMjtcbitcdGNhc2UgMzpcbitcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZylcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbitcdGludCBkZXY7XG4rXG4rXHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGRldiA9IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhhZGRyLCBNRElPX01NRF9WRU5EMiwgcmVnKTtcbitcdGlmIChkZXYgXHUwMDNjIDApXG4rXHRcdHJldHVybiAweGZmZmY7XG4rXG4rXHRyZXR1cm4geHBjc19ya19yZWFkX3JlZyhweHBjcywgZGV2LCByZWcpO1xuK31cbitcbitzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cdTAwM2Vwcml2O1xuK1x0aW50IGRldjtcbitcbitcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0ZGV2ID0geHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhhZGRyLCBNRElPX01NRF9WRU5EMiwgcmVnKTtcbitcdGlmIChkZXYgXHUwMDNjIDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHhwY3Nfcmtfd3JpdGVfcmVnKHB4cGNzLCBkZXYsIHJlZywgdmFsKTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpO1xuK1x0aWYgKGRldiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDB4ZmZmZjtcbitcbitcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGRldiA9IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpO1xuK1x0aWYgKGRldiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGR3X3hwY3NfcmsgKnhwY3NfcmtfY3JlYXRlX2RhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3M7XG4rXG4rXHRweHBjcyA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpweHBjcyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFweHBjcylcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRweHBjcy1cdTAwM2VwZGV2ID0gcGRldjtcbitcbitcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcHhwY3MpO1xuK1xuK1x0cmV0dXJuIHB4cGNzO1xuK31cbitcbitzdGF0aWMgaW50IHhwY3Nfcmtfc2VyZGVzX3BoeV9pbml0KHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbitcbitcdHB4cGNzLVx1MDAzZXNlcmRlc19waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCBcInNlcmRlc1wiKTtcbitcdGlmIChJU19FUlIocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSkpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy1cdTAwM2VzZXJkZXNfcGh5KSxcbitcdFx0XHRcdFx0XCJGYWlsZWQgdG8gZ2V0IFNlckRlcyBQSFlcXG5cIik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuK1xuK1x0cGh5X3Bvd2VyX29mZihweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbitcdHBoeV9leGl0KHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuK1xuK1x0ZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb24oc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuK1x0aW50IHJldDtcbitcbitcdC8qXG4rXHQgKiBUaGUgcG93ZXIgZG9tYWluIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGVuYWJsZWQsIHdoaWNoIGFsbG93cyB1cyB0b1xuK1x0ICogZHluYW1pY2FsbHkgdHVybiB0aGUgQ1NSIGNsb2NrIG9uL29mZiB1c2luZyBQTSB3aGlsZSBrZWVwaW5nIHRoZSBQQ1NcbitcdCAqIHBvd2VyZWQgb24uXG4rXHQgKi9cbitcdHJldCA9IGRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgdHJ1ZSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBwb3dlciBvbiBwb3dlci1kb21haW5zXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0ID0gcGh5X2luaXQocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBpbml0IFNlckRlcyBQSFlcXG5cIik7XG4rXHRcdGdvdG8gcG1fZG9tYWluO1xuK1x0fVxuK1xuK1x0cmV0ID0gcGh5X3Bvd2VyX29uKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gcG93ZXIgb24gU2VyRGVzIFBIWVxcblwiKTtcbitcdFx0Z290byBzZXJkZXNfcGh5O1xuK1x0fVxuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmLCBweHBjcyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBkZXZtIGZvciBTZXJEZXMgUEhZOiAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rc2VyZGVzX3BoeTpcbitcdHBoeV9leGl0KHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuK3BtX2RvbWFpbjpcbitcdGRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgZmFsc2UpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfcmVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbit7XG4rXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcHhwY3MtXHUwMDNlcGRldjtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJlc291cmNlICpyZXM7XG4rXG4rXHRyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApO1xuK1x0aWYgKCFyZXMpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiTm8gcmVnLXNwYWNlIGZvdW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChyZXNvdXJjZV9zaXplKHJlcykgXHUwMDNjIFNaXzJNKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkludmFsaWQgcmVnLXNwYWNlIHNpemVcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cHhwY3MtXHUwMDNlcmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xuK1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VyZWdfYmFzZSkpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIG1hcCByZWctc3BhY2VcXG5cIik7XG4rXHRcdHJldHVybiBQVFJfRVJSKHB4cGNzLVx1MDAzZXJlZ19iYXNlKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB4cGNzX3JrX2V4aXRfY2xrKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuK1xuK1x0cG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7XG4rXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtXHUwMDNlZWVlX2Nsayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19pbml0X2NsayhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4rXHR1bnNpZ25lZCBsb25nIHJhdGU7XG4rXHR1NjQgbXVsdDtcbitcdGludCByZXQ7XG4rXG4rXHRweHBjcy1cdTAwM2Vjc3JfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgXCJjc3JcIik7XG4rXHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZWNzcl9jbGspKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXHUwMDNlY3NyX2NsayksXG4rXHRcdFx0XHRcdCBcIkZhaWxlZCB0byBnZXQgQ1NSIGNsb2NrXFxuXCIpO1xuK1xuK1x0cHhwY3MtXHUwMDNlZWVlX2NsayA9IGRldm1fY2xrX2dldChkZXYsIFwiZWVlXCIpO1xuK1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VlZWVfY2xrKSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZWVlZV9jbGspLFxuK1x0XHRcdFx0XHQgXCJGYWlsZWQgdG8gZ2V0IEVFRSBjbG9ja1xcblwiKTtcbitcbitcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIGVuYWJsZSBFRUUgY2xvY2tcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTtcbitcdHBtX3J1bnRpbWVfZW5hYmxlKGRldik7XG4rXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB4cGNzX3JrX2V4aXRfY2xrLCBweHBjcyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBkZXZtIGZvciBFRUUgY2xvY2s6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogQ29tcHV0ZSB0aGUgbXVsdGlwbGllciBmb3IgdGhlIEVFRSBjbG9jayBzbyB0aGF0XG4rXHQgKiBjbGtfZWVlX3BlcmlvZCAqIChtdWx0X2ZhY3QgKyAxKSBmYWxscyB3aXRoaW4gODAuLjEyMCBucy5cbitcdCAqXG4rXHQgKiBPbiBSSzM1NjgsIGNsa194cGNzX2VlZSBpcyBtdXhlZCBiZXR3ZWVuIGdwbGwyMDAgKDIwMCBNSHosIDUgbnMpXG4rXHQgKiBhbmQgY3BsbDEyNSAoMTI1IE1IeiwgOCBucyksIHNlbGVjdGVkIGJ5IENSVV9DTEtTRUxfQ09OMjkgYml0IDEzLlxuK1x0ICogVGhlIHJlc2V0IHZhbHVlIGlzIDAgKDIwMCBNSHopLCBidXQgZGVyaXZlIHRoZSB2YWx1ZSBhdCBydW50aW1lIHRvXG4rXHQgKiBzdGF5IGNvcnJlY3QgaWYgdGhlIG11eCBpcyBjaGFuZ2VkIGJ5IGEgYm9hcmQuXG4rXHQgKlxuK1x0ICogVXNlIGEgNjQtYml0IGludGVybWVkaWF0ZTogb24gMzItYml0IGJ1aWxkcywgMTAwICogMjAwMDAwMDAwXG4rXHQgKiBkb2VzIG5vdCBmaXQgaW4gdW5zaWduZWQgbG9uZy4gQ2xhbXAgdG8gdGhlIDQtYml0XG4rXHQgKiBEV19WUl9NSUlfRUVFX01VTFRfRkFDVF8xMDBOUyBmaWVsZC5cbitcdCAqL1xuK1x0cmF0ZSA9IGNsa19nZXRfcmF0ZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbitcdGlmICghcmF0ZSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcIkludmFsaWQgRUVFIGNsb2NrIHJhdGVcXG5cIik7XG4rXG4rXHRtdWx0ID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKDEwMFVMTCAqIHJhdGUsIE5TRUNfUEVSX1NFQykgLSAxO1xuK1x0cHhwY3MtXHUwMDNlZWVlX211bHRfZmFjdCA9IG1pbl90KHU2NCwgbXVsdCwgMTUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19pbml0X2J1cyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4rXHRzdGF0aWMgYXRvbWljX3QgaWQgPSBBVE9NSUNfSU5JVCgtMSk7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuK1x0aW50IHJldDtcbitcbitcdGJ1cyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKGRldiwgMCk7XG4rXHRpZiAoIWJ1cylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRidXMtXHUwMDNlbmFtZSA9IFwiUm9ja2NoaXAgRFcgWFBDUyBNQ0kvQVBCM1wiO1xuK1x0YnVzLVx1MDAzZXJlYWQgPSB4cGNzX3JrX3JlYWRfYzIyO1xuK1x0YnVzLVx1MDAzZXdyaXRlID0geHBjc19ya193cml0ZV9jMjI7XG4rXHRidXMtXHUwMDNlcmVhZF9jNDUgPSB4cGNzX3JrX3JlYWRfYzQ1O1xuK1x0YnVzLVx1MDAzZXdyaXRlX2M0NSA9IHhwY3Nfcmtfd3JpdGVfYzQ1O1xuK1x0YnVzLVx1MDAzZXBoeV9tYXNrID0gfjA7XG4rXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuK1x0YnVzLVx1MDAzZXByaXYgPSBweHBjcztcbitcbitcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLFxuK1x0XHQgXCJyb2NrY2hpcF9kd3hwY3MtJXhcIiwgYXRvbWljX2luY19yZXR1cm4oXHUwMDI2aWQpKTtcbitcbitcdC8qXG4rXHQgKiBNRElPLWJ1cyBoZXJlIHNlcnZlcyBhcyBqdXN0IGEgYmFjay1lbmQgZW5naW5lIGFic3RyYWN0aW5nIG91dFxuK1x0ICogdGhlIE1ESU8gYW5kIE1DSS9BUEIzIElPIGludGVyZmFjZXMgdXRpbGl6ZWQgZm9yIHRoZSBSb2NrY2hpcCBEV1hQQ1MgQ1NSc1xuK1x0ICogYWNjZXNzLlxuK1x0ICovXG4rXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gY3JlYXRlIE1ESU8gYnVzXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cHhwY3MtXHUwMDNlYnVzID0gYnVzO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbitcdGludCByZXQ7XG4rXG4rXHRweHBjcyA9IHhwY3NfcmtfY3JlYXRlX2RhdGEocGRldik7XG4rXHRpZiAoSVNfRVJSKHB4cGNzKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocHhwY3MpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBYUENTIG1heSBiZSBhdHRhY2hlZCB0byBhIHBvd2VyIGRvbWFpbiAoZS5nLiBQRF9QSVBFKS4gVGhlIGRvbWFpblxuK1x0ICogbXVzdCBiZSBwb3dlcmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQyB3aWxsXG4rXHQgKiB0cmlnZ2VyIGEgc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnQgKFNFcnJvcikuXG4rXHQgKlxuK1x0ICogQWNjZXNzaW5nIHRoZSBYUENTIHJlZ2lzdGVycyBhbHNvIHJlcXVpcmVzIGEgVFggY2xvY2sgZnJvbSB0aGUgU2VyRGVzLFxuK1x0ICogd2hpY2ggaXMgbmVlZGVkIGZvciB0aGUgc29mdCByZXNldC5cbitcdCAqL1xuK1x0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X2luaXQocHhwY3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9uKHB4cGNzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB4cGNzX3JrX2luaXRfcmVzKHB4cGNzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB4cGNzX3JrX2luaXRfY2xrKHB4cGNzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB4cGNzX3JrX2luaXRfYnVzKHB4cGNzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeHBjc19ya19vZl9pZHNbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcInJvY2tjaGlwLHJrMzU2OC14cGNzXCIgfSxcbitcdHsgLyogc2VudGluZWwgKi8gfSxcbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhwY3Nfcmtfb2ZfaWRzKTtcbitcbitzdHJ1Y3QgZHdfeHBjcyAqeHBjc19ya19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuK3tcbitcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjc19ucDtcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbitcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuK1x0dTMyIHBvcnQ7XG4rXG4rXHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbitcbitcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCJyZWdcIiwgXHUwMDI2cG9ydCkpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZSgoaW50KXBvcnQpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcbitcdC8qIFRoZSBYUENTIHBkZXYgaXMgYXR0YWNoZWQgdG8gdGhlIHBhcmVudCBub2RlICovXG4rXHRwY3NfbnAgPSBvZl9nZXRfcGFyZW50KG5wKTtcbitcdGlmICghcGNzX25wKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbitcbitcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwY3NfbnApKSB7XG4rXHRcdG9mX25vZGVfcHV0KHBjc19ucCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuK1x0fVxuK1xuK1x0aWYgKCFvZl9tYXRjaF9ub2RlKHhwY3Nfcmtfb2ZfaWRzLCBwY3NfbnApKSB7XG4rXHRcdG9mX25vZGVfcHV0KHBjc19ucCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1x0fVxuK1xuK1x0cGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGNzX25wKTtcbitcdG9mX25vZGVfcHV0KHBjc19ucCk7XG4rXHRpZiAoIXBkZXYpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xuK1xuK1x0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldiwgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuK1x0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHR9XG4rXG4rXHRweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0aWYgKCFweHBjcyB8fCAhcHhwY3MtXHUwMDNlYnVzKSB7XG4rXHRcdGRldmljZV9saW5rX3JlbW92ZShkZXYsIFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdFx0cHV0X2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xuK1x0fVxuK1xuK1x0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXHUwMDNlYnVzLCAoaW50KXBvcnQpO1xuK1x0aWYgKElTX0VSUih4cGNzKSkge1xuK1x0XHRkZXZpY2VfbGlua19yZW1vdmUoZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRcdHB1dF9kZXZpY2UoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuK1x0XHRyZXR1cm4geHBjcztcbitcdH1cbitcbitcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHhwY3MtXHUwMDNlZWVlX211bHRfZmFjdCk7XG4rXHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdHJldHVybiB4cGNzO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTCh4cGNzX3JrX2NyZWF0ZSk7XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXG4rXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtXHUwMDNlY3NyX2Nsayk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcbitcdHJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtXHUwMDNlY3NyX2Nsayk7XG4rfVxuK1xuK3N0YXRpYyBERUZJTkVfUlVOVElNRV9ERVZfUE1fT1BTKHhwY3NfcmtfcG1fb3BzLFxuK1x0XHRcdCAgIHhwY3NfcmtfcG1fcnVudGltZV9zdXNwZW5kLFxuK1x0XHRcdCAgIHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUsXG4rXHRcdFx0ICAgTlVMTCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHBjc19ya19kcml2ZXIgPSB7XG4rXHQucHJvYmUgPSB4cGNzX3JrX3Byb2JlLFxuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWUgPSBcInJrX3hwY3MtZHd4cGNzXCIsXG4rXHRcdC5wbSA9IHBtX3B0cihcdTAwMjZ4cGNzX3JrX3BtX29wcyksXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IHhwY3Nfcmtfb2ZfaWRzLFxuK1x0fSxcbit9O1xuK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeHBjc19ya19kcml2ZXIpO1xuK1xuK01PRFVMRV9ERVNDUklQVElPTihcIlJvY2tjaGlwIFhQQ1MgcGxhdGZvcm0gZGV2aWNlIGRyaXZlclwiKTtcbitNT0RVTEVfQVVUSE9SKFwiQ29pYSBQcmFudCBcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXHUwMDNlXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmNcbmluZGV4IDAzMzdlMmJjYzAxMjUuLjhjMzg3NWI2OTg1YjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xuKysrIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmNcbkBAIC03NjEsNyArNzYxLDkgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcbiBcdCAqICAgIERXIHhQQ1MgdXNlZCB3aXRoIERXIEVRb1MgTUFDIGlzIGFsd2F5cyBNQUMgc2lkZSBTR01JSS5cbiBcdCAqIDQpIFZSX01JSV9ESUdfQ1RSTDEgQml0KDkpIFtNQUNfQVVUT19TV10gPSAxYiAoQXV0b21hdGljXG4gXHQgKiAgICBzcGVlZC9kdXBsZXggbW9kZSBjaGFuZ2UgYnkgSFcgYWZ0ZXIgU0dNSUkgQU4gY29tcGxldGUpXG4tXHQgKiA1KSBWUl9NSUlfTU1EX0NUUkwgQml0KDEyKSBbQU5fRU5BQkxFXSA9IDFiIChFbmFibGUgU0dNSUkgQU4pXG4rXHQgKiA1KSBWUl9NSUlfQU5fSU5UUl9TVFMgPSAweDAgKENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzKVxuK1x0ICogNikgVlJfTUlJX01NRF9DVFJMIEJpdCgxMikgW0FOX0VOQUJMRV0gPSAxYiAoRW5hYmxlIFNHTUlJIEFOKVxuK1x0ICogICAgVlJfTUlJX01NRF9DVFJMIEJpdCg5KSBbQU5fUkVTVEFSVF0gPSAxYiAoUmVzdGFydCBTR01JSSBBTilcbiBcdCAqXG4gXHQgKiBOb3RlIHRoYXQgVlJfTUlJX01NRF9DVFJMIGlzIE1JSV9CTUNSLlxuIFx0ICpcbkBAIC03NjksNyArNzcxLDE0IEBAIHN0YXRpYyBpbnQgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsXG4gXHQgKlx0IFNSX01JSV9BTl9BRFYuIE1BQyBzaWRlIFNHTUlJIHJlY2VpdmVzIEFOIFR4IENvbmZpZyBmcm9tXG4gXHQgKlx0IFBIWSBhYm91dCB0aGUgbGluayBzdGF0ZSBjaGFuZ2UgYWZ0ZXIgQzI4IEFOIGlzIGNvbXBsZXRlZFxuIFx0ICpcdCBiZXR3ZWVuIFBIWSBhbmQgTGluayBQYXJ0bmVyLiBUaGVyZSBpcyBhbHNvIG5vIG5lZWQgdG9cbi1cdCAqXHQgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSS5cbitcdCAqXHQgdHJpZ2dlciBBTiByZXN0YXJ0IGZvciBNQUMtc2lkZSBTR01JSSBvbiBtb3N0IGRldmljZXMuXG4rXHQgKlxuK1x0ICogTm90ZTogV2hpbGUgdGhlIERlc2lnbldhcmUgZGF0YWJvb2sgc3RhdGVzIHRoYXQgQU4gcmVzdGFydCBpc1xuK1x0ICpcdCBub3QgbmVlZGVkIGZvciBNQUMgc2lkZSBTR01JSSwgc29tZSBpbXBsZW1lbnRhdGlvbnMgKGUuZy5cbitcdCAqXHQgUm9ja2NoaXAgUkszNTY4KSBleGhpYml0IGEgdGltaW5nIHF1aXJrIHdoZW4gaW50ZWdyYXRlZCB3aXRoXG4rXHQgKlx0IHBoeWxpbmsgYW5kIGRvIG5vdCByZXN0YXJ0IEFOIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgbGlua1xuK1x0ICpcdCBjb21lcyBiYWNrIHVwLiBBbiBleHBsaWNpdCBBTiByZXN0YXJ0IGlzIHJlcXVpcmVkIG9uIHRob3NlXG4rXHQgKlx0IHBhcnRzIHRvIHJlY292ZXIgdGhlIGxpbmsgYWZ0ZXIgYSBkaXNjb25uZWN0LlxuIFx0ICovXG4gXHRtZGlvX2N0cmwgPSB4cGNzX3JlYWQoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSKTtcbiBcdGlmIChtZGlvX2N0cmwgXHUwMDNjIDApXG5AQCAtODE2LDkgKzgyNSwxNCBAQCBzdGF0aWMgaW50IHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdC8qIENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzICovXG4rXHRyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdGlmIChuZWdfbW9kZSA9PSBQSFlMSU5LX1BDU19ORUdfSU5CQU5EX0VOQUJMRUQpXG4gXHRcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSLFxuLVx0XHRcdFx0IG1kaW9fY3RybCB8IEJNQ1JfQU5FTkFCTEUpO1xuK1x0XHRcdFx0IG1kaW9fY3RybCB8IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xMDkzLDkgKzExMDcsMTggQEAgc3RhdGljIGludCB4cGNzX2dldF9zdGF0ZV9jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0LyogQ2xlYXIgQU4gY29tcGxldGUgc3RhdHVzIG9yIGludGVycnVwdCAqL1xuLVx0aWYgKHN0YXRlLVx1MDAzZWFuX2NvbXBsZXRlKVxuLVx0XHR4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApO1xuK1x0aWYgKHN0YXRlLVx1MDAzZWFuX2NvbXBsZXRlKSB7XG4rXHRcdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cbitcdFx0cmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBJbml0aWF0ZSB0aGUgbmV4dCByb3VuZCBvZiBBTiAqL1xuK1x0XHRyZXQgPSB4cGNzX21vZGlmeSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsIEJNQ1JfQU5SRVNUQVJULFxuK1x0XHRcdFx0ICBCTUNSX0FOUkVTVEFSVCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuYyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXG5pbmRleCA3ODQzMzU2YTRkZDQ3Li43Yjg2N2U3NTIwMDY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNcbisrKyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXG5AQCAtMTg2LDYgKzE4Niw3IEBAIHN0cnVjdCByb2NrY2hpcF9jb21icGh5X2dyZmNmZyB7XG4gXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV94cGNzX3BoeV9yZWFkeTtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3BjaWUxbDBfc2VsO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfcGNpZTFsMV9zZWw7XG4rXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9zZ21paV9tYWNfc2VsO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMF9wb3J0X2VuO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMV9wb3J0X2VuO1xuIH07XG5AQCAtMjEyLDYgKzIxMyw3IEBAIHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYge1xuIFx0Ym9vbCBlbmFibGVfc3NjO1xuIFx0Ym9vbCBleHRfcmVmY2xrO1xuIFx0c3RydWN0IGNsayAqcmVmY2xrO1xuK1x0dTMyIHNnbWlpX21hY19zZWw7XG4gfTtcbiBcbiBzdGF0aWMgdm9pZCByb2NrY2hpcF9jb21icGh5X3VwZGF0ZWwoc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiAqcHJpdixcbkBAIC0zNzUsNiArMzc3LDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9jb21icGh5X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlcbiBcbiBcdHByaXYtXHUwMDNlZXh0X3JlZmNsayA9IGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KGRldiwgXCJyb2NrY2hpcCxleHQtcmVmY2xrXCIpO1xuIFxuK1x0cHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsID0gMTtcbitcdGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFwicm9ja2NoaXAsc2dtaWktbWFjLXNlbFwiLCBcdTAwMjZwcml2LVx1MDAzZXNnbWlpX21hY19zZWwpO1xuK1xuIFx0cHJpdi1cdTAwM2VwaHlfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9leGNsdXNpdmUoZGV2LCBcInBoeVwiKTtcbiBcdC8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi9cbiBcdGlmIChQVFJfRVJSKHByaXYtXHUwMDNlcGh5X3JzdCkgPT0gLUVOT0VOVClcbkBAIC04NzMsNiArODc4LDggQEAgc3RhdGljIGludCByazM1NjhfY29tYnBoeV9jZmcoc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiAqcHJpdilcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIFBIWV9UWVBFX1NHTUlJOlxuK1x0XHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXHUwMDNlcGlwZV9ncmYsIFx1MDAyNmNmZy1cdTAwM2VwaXBlX3NnbWlpX21hY19zZWwsXG4rXHRcdFx0XHRcdCAgICAgcHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsIFx1MDAzZSAwKTtcbiBcdFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVx1MDAzZXBpcGVfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV94cGNzX3BoeV9yZWFkeSwgdHJ1ZSk7XG4gXHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaHlfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV9waHltb2RlX3NlbCwgdHJ1ZSk7XG4gXHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaHlfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV9zZWxfcXNnbWlpLCB0cnVlKTtcbkBAIC05ODQsNiArOTkxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByb2NrY2hpcF9jb21icGh5X2dyZmNmZyByazM1NjhfY29tYnBoeV9ncmZjZmdzID0ge1xuIFx0LmNvbjNfZm9yX3NhdGFcdFx0PSB7IDB4MDAwYywgMTUsIDAsIDB4MDAsIDB4NDQwNyB9LFxuIFx0LyogcGlwZS1ncmYgKi9cbiBcdC5waXBlX2NvbjBfZm9yX3NhdGFcdD0geyAweDAwMDAsIDE1LCAwLCAweDAwLCAweDIyMjAgfSxcbitcdC5waXBlX3NnbWlpX21hY19zZWxcdD0geyAweDAwNDAsIDEsIDEsIDB4MDAsIDB4MDEgfSxcbiBcdC5waXBlX3hwY3NfcGh5X3JlYWR5XHQ9IHsgMHgwMDQwLCAyLCAyLCAweDAwLCAweDAxIH0sXG4gXHQudTNvdGcwX3BvcnRfZW5cdFx0PSB7IDB4MDEwNCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXG4gXHQudTNvdGcxX3BvcnRfZW5cdFx0PSB7IDB4MDE0NCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaCBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yODcyM2Q1YmQ3NWNjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXG5AQCAtMCwwICsxLDExIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisjaWZuZGVmIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSFxuKyNkZWZpbmUgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNzL3Bjcy14cGNzLmhcdTAwM2VcbitcbitzdHJ1Y3QgZHdfeHBjcyAqeHBjc19ya19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbitcbisjZW5kaWYgLyogX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNTozNy4yMzAxMTc3MzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTE3NTYwMjU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gaXRzIGZlYXNpYmlsaXR5IGZvciBmdXp6aW5nLCBnaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUgb2YgY29uY2Vybi5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gTG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIHdpZGUgcmFuZ2U6IGRldmljZSB0cmVlIGJpbmRpbmdzIChSb2NrY2hpcCBhbmQgcG90ZW50aWFsbHkgZ2VuZXJpYyksIGRvY3VtZW50YXRpb24gdXBkYXRlcyAoTUFJTlRBSU5FUlMpLCBEVFMgZmlsZXMgKFJLMzU2OCksIGRyaXZlciBjb2RlIChzdG1tYWMsIFJvY2tjaGlwLXNwZWNpZmljIGR3bWFjLCBQQ1MgZHJpdmVycywgYW5kIGEgUm9ja2NoaXAgY29tYnBoeSksIEtjb25maWcgYW5kIE1ha2VmaWxlcyByZWxhdGVkIHRvIFBDUyBhbmQgc3RtbWFjLiBUaGlzIHN1Z2dlc3RzIGNoYW5nZXMgcmVsYXRlZCB0byBFdGhlcm5ldCBjb25uZWN0aXZpdHksIHBvc3NpYmx5IGluY2x1ZGluZyBhIG5ldyBSb2NrY2hpcCBYUENTIHBsYXRmb3JtLlxuXG5UaGUgZmlsZXMgdGhhdCBqdW1wIG91dCBhcmUgdGhlIGBkd21hYy1pbnRlbC5jYCBmaWxlIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGBwY3MteHBjcy1yay5jYCBmaWxlLCBhbG9uZyB3aXRoIHJlbGF0ZWQgS2NvbmZpZyBhbmQgaGVhZGVyIGZpbGVzLiBJdCBsb29rcyBsaWtlIHdlIGFyZSBhZGRpbmcgc3VwcG9ydCBmb3IgYSBSb2NrY2hpcCBYUENTIHRvIHN0bW1hYyB2aWEgdGhlIGludGVsIG1nYmUgbW9kdWxlLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqcmVhY2hhYmlsaXR5Ki4gQ2FuIHRoaXMgY29kZSBiZSBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRT8gVGhpcyBpcyBwYXJhbW91bnQgZm9yIGZ1enppbmcgZWZmZWN0aXZlbmVzcy4gU3BlY2lmaWNhbGx5LCB0aGUgaW5zdHJ1Y3Rpb24ncyBzZWN0aW9uIDIgb3V0bGluZXMgdGhhdCBjb2RlIE1VU1QgTk9UIGJlIGZ1enplZCBpZiBpdCdzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiB0aGVzZSBlbnZpcm9ubWVudHMuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCBgZHdtYWMtaW50ZWwuY2AuIElzIHRoZSBjb2RlIGluIHRoaXMgZmlsZSByZWFjaGFibGUgb24gYW1kNjQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSXMgaXQgc3RyaWN0bHkgZm9yIHBoeXNpY2FsIGhhcmR3YXJlPyBJIG5lZWQgdG8ga25vdyBpZiBJbnRlbCBFdGhlcm5ldC9QQ0kgaXMgZW11bGF0ZWQgaW4gUUVNVSwgb3IgaWYgYHN0bW1hY2AgaXMgdHlwaWNhbGx5IHRpZWQgdG8gc3BlY2lmaWMgU29DIGhhcmR3YXJlLiBEb2VzIFFFTVUgZW11bGF0ZSB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGBkd21hYy1pbnRlbGAgb3IgYHN0bW1hY2Agc3RhY2s/XG5cblRoZSBpbnN0cnVjdGlvbiBzZXQgaGlnaGxpZ2h0cyB0aGlzIGFzIGEgbmVnYXRpdmUgY3JpdGVyaWEgZm9yIGZ1enppbmc6IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIG9yIHRob3NlIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gQWxzbyBpbXBvcnRhbnQgYXJlIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCByZWx5IG9uIGEgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHVuYmluZGluZy4gQWRkaXRpb25hbGx5LCB0aGlzIGlzIGxpa2VseSB0byBhcHBseSB0byBjb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cblNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGR3bWFjLWludGVsYCBvciBgc3RtbWFjYCAqY2FuKiBiZSByZWFjaGVkIGluIGEgUUVNVSBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGdyZXAgdGhlIGtlcm5lbCBzb3VyY2VzIHRvIHVuZGVyc3RhbmQgdGhlIHR5cGljYWwgdXNlIGNhc2VzIGZvciB0aGVzZSBkcml2ZXJzLiBJZiBpdCdzIHRpZ2h0bHkgY291cGxlZCB0byBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0J3Mgbm90IGVtdWxhdGVkLCB0aGVuIGZ1enppbmcgd291bGQgYmUgYSB3YXN0ZSBvZiB0aW1lIGFuZCByZXNvdXJjZXMgYW5kIHRoaXMgcGF0Y2ggd291bGQgYmUgbm9uLXdvcnRod2hpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDcxLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI2OjQ2LjQwNTcyMjY5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzOTIwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTU9EVUxFX0RFVklDRV9UQUJMRS4qcGNpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xNDMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NTAtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0NTE6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGludGVsX2V0aF9wY2lfaWRfdGFibGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTQ1Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6MjY6NDYuNTg4MTE5NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NjE0MzY4NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSW50ZWwgRXRoZXJuZXQgUENJIElEIFRhYmxlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBQQ0kgZGV2aWNlIElEcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBJbnRlbCBFdGhlcm5ldCBjb250cm9sbGVycy4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGUgYGludGVsX2V0aF9wY2lfaWRfdGFibGVgIGRhdGEgc3RydWN0dXJlLiBUaGF0IHRhYmxlIGlzIGRlZmluZWQgaW4gYGR3bWFjLWludGVsLmNgLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGhlYWQuIEkgc3VzcGVjdCB0aGlzIHRhYmxlIGhvbGRzIHRoZSBrZXkgdG8gaG93IHRoZSBkcml2ZXIgcmVjb2duaXplcyBhbmQgc3VwcG9ydHMgZGlmZmVyZW50IEludGVsIEV0aGVybmV0IGhhcmR3YXJlLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBpdCdzIHN0cnVjdHVyZWQsIHdoYXQgZmllbGRzIGFyZSBpbmNsdWRlZCAoVmVuZG9yIElELCBEZXZpY2UgSUQsIFN1YnN5c3RlbSBJRHMsIGV0Yy4pLCBhbmQgaG93IHRoZSBkcml2ZXIgdXNlcyB0aGlzIGluZm9ybWF0aW9uIGR1cmluZyBkZXZpY2UgcHJvYmUuIEknbSBsb29raW5nIGZvciB0aGUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIGlmIGEgcGFydGljdWxhciBQQ0kgZGV2aWNlIGlzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgYW5kIGhvdyBpdCB0aGVuIGFzc29jaWF0ZXMgdGhlIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIGFuZCBzZXR1cCByb3V0aW5lcy4gTXkgZ29hbCBpcyBhIHNvbGlkIGdyYXNwIG9mIHRoZSBkZXZpY2UgbWF0Y2hpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NzIsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNjo1My4yMDI0OTIwNjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDMwOlxcdFxcbjE0MzE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGludGVsX2V0aF9wY2lfaWRfdGFibGVbXSA9IHtcXG4xNDMyOlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBRVUFSSywgXFx1MDAyNnF1YXJrX2luZm8pIH0sXFxuMTQzMzpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1JHTUlJMUcsIFxcdTAwMjZlaGxfcmdtaWkxZ19pbmZvKSB9LFxcbjE0MzQ6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9TR01JSTFHLCBcXHUwMDI2ZWhsX3NnbWlpMWdfaW5mbykgfSxcXG4xNDM1OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfU0dNSUkyRzUsIFxcdTAwMjZlaGxfc2dtaWkxZ19pbmZvKSB9LFxcbjE0MzY6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UwX1JHTUlJMUcsIFxcdTAwMjZlaGxfcHNlMF9yZ21paTFnX2luZm8pIH0sXFxuMTQzNzpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTBfU0dNSUkxRywgXFx1MDAyNmVobF9wc2UwX3NnbWlpMWdfaW5mbykgfSxcXG4xNDM4OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMF9TR01JSTJHNSwgXFx1MDAyNmVobF9wc2UwX3NnbWlpMWdfaW5mbykgfSxcXG4xNDM5OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBFSExfUFNFMV9SR01JSTFHLCBcXHUwMDI2ZWhsX3BzZTFfcmdtaWkxZ19pbmZvKSB9LFxcbjE0NDA6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEVITF9QU0UxX1NHTUlJMUcsIFxcdTAwMjZlaGxfcHNlMV9zZ21paTFnX2luZm8pIH0sXFxuMTQ0MTpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgRUhMX1BTRTFfU0dNSUkyRzUsIFxcdTAwMjZlaGxfcHNlMV9zZ21paTFnX2luZm8pIH0sXFxuMTQ0MjpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMX1NHTUlJMUcsIFxcdTAwMjZ0Z2xfc2dtaWkxZ19waHkwX2luZm8pIH0sXFxuMTQ0MzpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMSF9TR01JSTFHXzAsIFxcdTAwMjZ0Z2xfc2dtaWkxZ19waHkwX2luZm8pIH0sXFxuMTQ0NDpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgVEdMSF9TR01JSTFHXzEsIFxcdTAwMjZ0Z2xfc2dtaWkxZ19waHkxX2luZm8pIH0sXFxuMTQ0NTpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShJTlRFTCwgQURMU19TR01JSTFHXzAsIFxcdTAwMjZhZGxzX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxcbjE0NDY6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIEFETFNfU0dNSUkxR18xLCBcXHUwMDI2YWRsc19zZ21paTFnX3BoeTFfaW5mbykgfSxcXG4xNDQ3OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKElOVEVMLCBBRExOX1NHTUlJMUcsIFxcdTAwMjZhZGxuX3NnbWlpMWdfcGh5MF9pbmZvKSB9LFxcbjE0NDg6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoSU5URUwsIFJQTFBfU0dNSUkxRywgXFx1MDAyNmFkbG5fc2dtaWkxZ19waHkwX2luZm8pIH0sXFxuMTQ0OTpcXHRcXHR7fVxcbjE0NTA6XFx0fTtcXG4xNDUxOlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlKTtcXG4xNDUyOlxcdFxcbjE0NTM6XFx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGludGVsX2V0aF9wY2lfZHJpdmVyID0ge1xcbjE0NTQ6XFx0XFx0Lm5hbWUgPSBcXFwiaW50ZWwtZXRoLXBjaVxcXCIsXFxuMTQ1NTpcXHRcXHQuaWRfdGFibGUgPSBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlLFxcbjE0NTY6XFx0XFx0LnByb2JlID0gaW50ZWxfZXRoX3BjaV9wcm9iZSxcXG4xNDU3OlxcdFxcdC5yZW1vdmUgPSBpbnRlbF9ldGhfcGNpX3JlbW92ZSxcXG4xNDU4OlxcdFxcdC5kcml2ZXIgICAgICAgICA9IHtcXG4xNDU5OlxcdFxcdFxcdC5wbSAgICAgPSBcXHUwMDI2c3RtbWFjX3NpbXBsZV9wbV9vcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI2OjUzLjIwMjYwMzMxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3Mjg3ODEzMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIERyaXZlciBDb21wYXRpYmlsaXR5IG9uIGFtZDY0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGR3bWFjLWludGVsLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgc2VlbXMgc3BlY2lmaWMgdG8gSW50ZWwgUXVhcmssIEVsa2hhcnQgTGFrZSwgVGlnZXIgTGFrZSwgQWxkZXIgTGFrZSwgYW5kIFJhcHRvciBMYWtlIGludGVncmF0ZWQgTUFDcy4gUmlnaHQsIHBoeXNpY2FsIEludGVsIFBDSSBkZXZpY2VzIG9uIHRob3NlIHNwZWNpZmljIEludGVsIFNvQ3MuIEJ1dCB0aGVuIEkgc3RvcCBhbmQgdGhpbmssIFwiRG9lcyBRRU1VIGFjdHVhbGx5IGVtdWxhdGUgYW4gSW50ZWwgUXVhcmsvRUhML1RHTCBzdG1tYWMgRXRoZXJuZXQgZGV2aWNlP1wiIEkgZG9uJ3QgKnRoaW5rKiBzbywgYnV0IEkgbmVlZCB0byBiZSBzdXJlLlxuXG5MZXQncyBjaGVjayB3aGF0IGVsc2UgaXMgYmVpbmcgcmVmZXJlbmNlZC4gSSBzZWUgZHJpdmVycyBmb3IgUm9ja2NoaXA6IGBwY3MteHBjcy1yay5jYCwgYGR3bWFjLXJrLmNgLCBhbmQgYHBoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jYCwgYXMgd2VsbCBhcyBkZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgYXNzb2NpYXRlZCBhcmNoaXRlY3R1cmUgZmlsZXMuIFRoZXNlIGFyZSBhbGwgY2xlYXJseSBmb3IgUm9ja2NoaXAgU29Dcywgc3BlY2lmaWNhbGx5IHRoZSBSSzM1NjgsIGFuIEFSTTY0IHBsYXRmb3JtLiBIb3dldmVyLCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCEgVGhpcyBtZWFucyBgYXJjaC9hcm02NC8uLi5gIGlzICpub3QqIGNvbXBpbGVkIG9yIHVzZWQgb24gdGhlIGFtZDY0IGJ1aWxkIEknbSB3b3JraW5nIHdpdGguXG5cbkkgZHJpbGwgZG93biBmdXJ0aGVyOiBgZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBSb2NrY2hpcCBSSzM1NnggU29DcywgYW5kIHJlcXVpcmVzIE9wZW5GaXJtd2FyZSBkZXZpY2UgdHJlZSBhbmQgUm9ja2NoaXAgaGFyZHdhcmUuIEV2ZW4gaWYgYENPTVBJTEVfVEVTVGAgZW5hYmxlcyBpdCwgaXQncyBtYXRjaGluZyBgcm9ja2NoaXAscmszNTY4LXhwY3NgIHdoaWNoICp3b24ndCogaW5zdGFudGlhdGUgb24gYW1kNjQgaW4gUUVNVS4gU2FtZSBnb2VzIGZvciBgZHdtYWMtcmsuY2AsIGBwaHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY2AsIGBkd21hYy1yZW5lc2FzLWdiZXRoLmNgLCBgZHdtYWMtcnpuMS5jYCwgYW5kIGBkd21hYy1zb2NmcGdhLmNgLiBBbGwgcGxhdGZvcm0gZHJpdmVycywgdGFyZ2V0aW5nIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IgaGFyZHdhcmUgdGhhdCBhcmUgbm90IHJlbGV2YW50IHRvIG15IGN1cnJlbnQgYW1kNjQgUUVNVSBzZXR1cC5cblxuU28sIGJhY2sgdG8gdGhlIHN0bW1hYyBxdWVzdGlvbjogd2hhdCBhYm91dCBgc3RtbWFjX21kaW8uY2AsIGBwY3MteHBjcy5jYCwgYW5kIGBkd21hYy1pbnRlbC5jYD8gSSBoYXZlIHRvIGxvb2sgaW50byBgc3RtbWFjX21kaW8uY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSB2aXJ0dWFsIG9yIGVtdWxhdGVkIGRldmljZSBpbiBpdC4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgc3RtbWFjYCBkcml2ZXJzIGFuZCBzZWUgaWYgYW55IGFyZSBlbXVsYXRlZCBieSBRRU1VLCBvciBwcm92aWRlIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIG15IGFuYWx5c2lzLiBJIHdpbGwgbm93IHNlYXJjaCB0aGUga2VybmVsIHRyZWUgZm9yIGRyaXZlcnMgdGhhdCB1c2Ugc3RtbWFjLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE5MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI3OjEwLjQ5MDQxOTM2N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUwMTY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfZHZyX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jPTI4Mz1zdGF0aWMgaW50IGR3Y19ldGhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM6MzMwOlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jLTMzMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jPTQyPXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BsYXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYy0xMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jOjExODpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExOS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMjk5PXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM3Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzNzc6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNzgtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jPTM3ND1zdGF0aWMgaW50IGlwcTgwNnhfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jLTQ4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM6NDgzOlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jLTQ4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NDk4PXN0YXRpYyBpbnQgbG9vbmdzb25fZHdtYWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTYyOlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYz00Mj1zdGF0aWMgaW50IGxwYzE4eHhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM6Njg6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmMtNjktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYz01OTk9c3RhdGljIGludCBtZWRpYXRla19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYzo2NDI6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jPTQ3PXN0YXRpYyBpbnQgbWVzb242X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jLTcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM6NzM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jLTc0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYz0zODI9c3RhdGljIGludCBtZXNvbjhiX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYzo0NjQ6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDY1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jPTI5Mz1zdGF0aWMgaW50IG1vdG9yY29tbV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjM1OTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNjAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jPTUxPXN0YXRpYyBpbnQgcnpuMV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTcwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzo3MTpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNzItXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jPTM1PXN0YXRpYyBpbnQgc29waGdvX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYy02NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYzo2NTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYz0xNDc9c3RhdGljIGludCBzcGFjZW1pdF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYzoyMDc6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmMtMjA4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmM9OTA9c3RhdGljIGludCBzdGFyZml2ZV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYzoxNTM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jPTUyNT1zdGF0aWMgaW50IHN0bTMyX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jOjU3OTpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy01ODAtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM9MTEwNT1zdGF0aWMgaW50IHN1bjhpX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjAyOlxcdC8qIHRoZSBNQUMgaXMgcnVudGltZSBzdXNwZW5kZWQgYWZ0ZXIgc3RtbWFjX2R2cl9wcm9iZSgpLCBzbyB3ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMy1cXHQgKiBuZWVkIHRvIGVuc3VyZSB0aGUgTUFDIHJlc3VtZSBiYWNrIGJlZm9yZSBvdGhlciBvcGVyYXRpb25zIHN1Y2hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwOC1cXHQvKiBUaGUgbXV4IG11c3QgYmUgcmVnaXN0ZXJlZCBhZnRlciBwYXJlbnQgTURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM6MTIwOTpcXHQgKiBzbyBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMTAtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jPTIxND1zdGF0aWMgaW50IHRlZ3JhX21nYmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM6Mzc2OlxcdGVyciA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzctXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jPTIwNT1zdGF0aWMgaW50IHZpc2NvbnRpX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYzoyMzc6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTE9dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxMjppbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDEzLVxcdFxcdCAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzgxND1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGxhdF9kYXRfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzgxNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc4MTY6c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzgxNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTE5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODEyMDogKiBzdG1tYWNfZHZyX3Byb2JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTIxLSAqIEBkZXY6IGRldmljZSBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMjgtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTI5OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMzAtXFx0XFx0ICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODE0MDpcXHRyZXQgPSBfX3N0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNDEtXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBwbGF0X2RhdC1cXHUwMDNlZXhpdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODE0NS19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTQ2OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODE0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTgzOlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM9ODQ2PWludCBzdG1tYWNfcGx0ZnJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYzo4NTU6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04NTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNzoxMC41Mzk5Mjk0MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ1NDczOTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRXRoZXJuZXQgRGV2aWNlIERyaXZlcnMgYW5kIFFFTVUgRW11bGF0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBsaXN0IG9mIEV0aGVybmV0IGRyaXZlcnMgYW5kIGRldmljZXMuIEkgc2VlIGEgd2hvbGUgc2xldyBvZiB0aGVtOiBgZHdtYWMtZHdjLXFvcy1ldGhgLCBgZHdtYWMtaW50ZWwtcGxhdGAsIGBkd21hYy1pbnRlbGAsIGBkd21hYy1pcHE4MDZ4YCwgYGR3bWFjLWxvb25nc29uYCwgYW5kIHRoZSBsaXN0IGdvZXMgb24uICBJdCdzIGNsZWFyLCB0aGV5J3JlIGFsbCBoYXJkd2FyZSBNQUMgY29udHJvbGxlcnMuICBTb0MgcGxhdGZvcm0gZGV2aWNlcywgbW9zdGx5LCBvciBwaHlzaWNhbCBQQ0kgZGV2aWNlcy4gIE1ha2VzIHNlbnNlLCByaWdodD9cblxuQnV0IHRoZW4gSSBoYWQgYSB0aG91Z2h0LiBXaGF0IGFib3V0IFFFTVU/IERvZXMgUUVNVSwgdGhlIHN0YW5kYXJkIHg4Nl82NCB2ZXJzaW9uLCBlbXVsYXRlIGFueSBvZiB0aGVzZSBkcml2ZXJzIOKAkyBzb21ldGhpbmcgbGlrZSBgc3RtbWFjYCwgYGR3bWFjLWludGVsYCwgb3IgYW55IG9mIHRob3NlIERXIFhQQ1MgZGV2aWNlcz8gIExldCdzIGNoZWNrIHdoYXQgbmV0d29yayBkZXZpY2VzIFFFTVUgKmRvZXMqIGVtdWxhdGU6IGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgZXRjLiAgQWgsIG5vIHNpZ24gb2YgdGhlIFN5bm9wc3lzIG9yIERlc2lnbldhcmUgZGV2aWNlcyEgIEFuZCwgdGhpbmtpbmcgYWJvdXQgaXQsIGV2ZW4gb24gQVJNIHRhcmdldHMsIFFFTVUgZW11bGF0ZXMgb3RoZXIgdGhpbmdzLiAgQnV0IHdlJ3JlIGZvY3VzZWQgb24geDg2XzY0IGhlcmUuIE5vLCBubyBgc3RtbWFjYCBvciBgZHdtYWNgIGVtdWxhdGlvbiB0byBiZSBmb3VuZCFcblxuQWxyaWdodCwgbmV4dCBzdGVwOiBsZXQncyB2ZXJpZnkgdGhlcmUgaXNuJ3Qgc29tZSBzb3J0IG9mIHZpcnR1YWwgYnVzIG9yIHNvZnR3YXJlIGRldmljZSB1c2luZyB0aGVzZSBkcml2ZXJzIHVuZGVyIHRoZSBob29kLiBUaGluZ3MgbGlrZSBVU0Igb3IgbmV0d29yayBkZXZpY2UgZW11bGF0aW9uLCB0aGF0IG1pZ2h0IGFic3RyYWN0IHRoZSB1bmRlcmx5aW5nIGNvbnRyb2xsZXIuIE9rYXksIHNvIEkgc2hvdWxkIGxvb2sgaW50byB3aGF0IHVzZXMgYHBjcy14cGNzYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTU4MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNzoyMC45OTQ2NzE2MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzM4MjQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4cGNzX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0zMjE9c3RhdGljIGludCBrc3o5NDc3X3Bjc19jcmVhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0NS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozNDY6XFx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYoYnVzLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDctXFx0aWYgKElTX0VSUihwY3MpKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDExLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQxMjpcXHRcXHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihidXMsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQxMy1cXHRcXHRpZiAoSVNfRVJSKHBjcykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jPTE5Nz1pbnQgZmJuaWNfcGh5bGlua19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTIwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYzoyMDU6XFx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYoZmJkLVxcdTAwM2VtZGlvX2J1cywgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMjA2LVxcdGlmIChJU19FUlIocGNzKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz02MDY9c3RhdGljIGludCBpbnRlbF9tZ2JlX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE1LVxcdFxcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXFxcInBjcy1oYW5kbGVcXFwiLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjYxNjpcXHRcXHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE3LVxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MTktXFx0XFx0YWRkciA9IGZmcyhwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VwY3NfbWFzaykgLSAxO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NjIwOlxcdFxcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtXFx1MDAzZW1paSwgYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MjEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0xMjY9c3RhdGljIGludCB0eGdiZV9tZGlvX3Bjc19pbml0KHN0cnVjdCB0eGdiZSAqdHhnYmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE1NDpcXHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihtaWlfYnVzLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1NS1cXHRpZiAoSVNfRVJSKHBjcykpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYz00Nzg9c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jLTUyNi1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYzo1Mjc6XFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXFx1MDAzZWJ1cywgKGludClwb3J0KTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYy01MjgtXFx0aWYgKElTX0VSUih4cGNzKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM9MTUxMj1zdGF0aWMgaW50IHhwY3NfaWRlbnRpZnkoc3RydWN0IGR3X3hwY3MgKnhwY3MpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTMxLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE1MzI6c3RhdGljIHN0cnVjdCBkd194cGNzICp4cGNzX2NyZWF0ZV9kYXRhKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jPTE1ODQ9c3RhdGljIGludCB4cGNzX2luaXRfaWQoc3RydWN0IGR3X3hwY3MgKnhwY3MpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTk4LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE1OTk6c3RhdGljIHN0cnVjdCBkd194cGNzICp4cGNzX2NyZWF0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjAzLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2MDQ6XFx0eHBjcyA9IHhwY3NfY3JlYXRlX2RhdGEobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYwNS1cXHRpZiAoSVNfRVJSKHhwY3MpKVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYzNS0vKipcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjM2OiAqIHhwY3NfY3JlYXRlX21kaW9kZXYoKSAtIGNyZWF0ZSBhIERXIHhQQ1MgaW5zdGFuY2Ugd2l0aCB0aGUgTURJTyBAYWRkclxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MzctICogQGJ1czogcG9pbnRlciB0byB0aGUgTURJTy1idXMgZGVzY3JpcHRvciBmb3IgdGhlIGRldmljZSB0byBiZSBsb29rZWQgYXRcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NDMtICovXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY0NDpzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjQ1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NTItXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY1MzpcXHR4cGNzID0geHBjc19jcmVhdGUobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1NC1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjU1OlxcdC8qIHhwY3NfY3JlYXRlKCkgaGFzIHRha2VuIGEgcmVmY291bnQgb24gdGhlIG1kaW9kZXYgaWYgaXQgd2FzXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY1NjpcXHQgKiBzdWNjZXNzZnVsLiBJZiB4cGNzX2NyZWF0ZSgpIGZhaWxzLCB0aGlzIHdpbGwgZnJlZSB0aGUgbWRpb1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NTctXFx0ICogZGV2aWNlIGhlcmUuIEluIGFueSBjYXNlLCB3ZSBkb24ndCBuZWVkIHRvIGhvbGQgb3VyIHJlZmVyZW5jZVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY2NC19XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY2NTpFWFBPUlRfU1lNQk9MX0dQTCh4cGNzX2NyZWF0ZV9tZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY2LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2Njc6c3RydWN0IHBoeWxpbmtfcGNzICp4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NzAtXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY3MTpcXHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2RldihidXMsIGFkZHIpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NzItXFx0aWYgKElTX0VSUih4cGNzKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NzYtfVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2Nzc6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfcGNzX21kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NzgtXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY3OS0vKipcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjgwOiAqIHhwY3NfY3JlYXRlX2Z3bm9kZSgpIC0gQ3JlYXRlIGEgRFcgeFBDUyBpbnN0YW5jZSBmcm9tIEBmd25vZGVcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjgxLSAqIEBmd25vZGU6IGZ3bm9kZSBoYW5kbGUgcG9pbmluZyB0byB0aGUgRFcgWFBDUyBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2ODgtICovXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY4OTpzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzAwLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE3MDE6XFx0eHBjcyA9IHhwY3NfY3JlYXRlKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE3MDItXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTcwMzpcXHQvKiB4cGNzX2NyZWF0ZSgpIGhhcyB0YWtlbiBhIHJlZmNvdW50IG9uIHRoZSBtZGlvZGV2IGlmIGl0IHdhc1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE3MDQ6XFx0ICogc3VjY2Vzc2Z1bC4gSWYgeHBjc19jcmVhdGUoKSBmYWlscywgdGhpcyB3aWxsIGZyZWUgdGhlIG1kaW9cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzA1LVxcdCAqIGRldmljZSBoZXJlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3QgbmVlZCB0byBob2xkIG91ciByZWZlcmVuY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE3MTItfVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE3MTM6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfZndub2RlKTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNzoyMS44NjIwNjI1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDY1MDE5NDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBYUENTIERyaXZlciBNb2RpZmljYXRpb25zIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gbG9va2luZyBhdCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIGB4cGNzX2NyZWF0ZSpgIGZ1bmN0aW9ucywgYW5kIG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCB3ZSdyZSBsaWtlbHkgKm5vdCogZ29pbmcgdG8gYmUgYWJsZSB0byBmdXp6IHRoaXMgZWZmZWN0aXZlbHkgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGUga2V5IGlzIHRvIHNlZSBpZiBhbnkgb2YgdGhlc2UgY2hhbmdlcyBwYXNzIHRoZSAqbmVnYXRpdmUqIGNyaXRlcmlhLlxuXG5JJ3ZlIGdvdCBhIGxpc3Qgb2YgY2FsbGVycyBvZiBgeHBjc19jcmVhdGUqYDoga3N6OTQ3Nywgc2phMTEwNSwgZmJuaWMsIGR3bWFjLWludGVsLCB0eGdiZSwgYW5kIHBjcy14cGNzLXJrLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhlIHBhdHRlcm47IG5vbmUgb2YgdGhlbSBhcmUgZW11bGF0ZWQgYnkgUUVNVSwgdGhleSBhcmUgYWxsIGRlcGVuZGVudCBvbiBlaXRoZXIgcGh5c2ljYWwgU29DcyBvciBzcGVjaWZpYyBQQ0llIGNhcmRzIHRoYXQgYXJlIG5vdCBzdGFuZGFyZCBmYXJlLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgY2hlY2tsaXN0LlxuXG4xLiAgV2UgaGF2ZSBgRG9jdW1lbnRhdGlvbmAgY2hhbmdlcyAoYC55YW1sYCBhbmQgYC5kdHNgIGZpbGVzKSwgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZS4gVGhhdCdzIGEgbm8tZ28gZm9yIGZ1enppbmcuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlLCBhbmQgZG9uJ3QgZGlyZWN0bHkgaW1wYWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuXG5cbjIuICBUaGUgYGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXBgIGZpbGVzIGFyZSBhbHNvIG91dCwgYXMgdGhlc2UgYXJlIERUUyBmaWxlcyBmb3IgYW4gYGFybTY0YCBSb2NrY2hpcCBhcmNoaXRlY3R1cmUsIGFuZCB3aGlsZSBEVCBpcyB1c2VkIG9uIG90aGVyIHBsYXRmb3JtcywgdGhpcyB0YXJnZXRzIEFSTSwgYW5kIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGBhbWQ2NGAuXG5cbjMuICBUaGUgYEtjb25maWdgIGFuZCBgTWFrZWZpbGVgIGNoYW5nZXMgaW4gdGhlIGBkcml2ZXJzL25ldC9wY3NgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWNgIGRpcmVjdG9yaWVzIGFyZSBhIGdyZXkgYXJlYS4gV2hpbGUgdGhlc2UgYWZmZWN0IHRoZSBidWlsZCBzeXN0ZW0sIHRoZXkgZG9uJ3QgZGlyZWN0bHkgaW50cm9kdWNlIGFueSBuZXcgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkLCBzbyBpdCBtYXkgb3IgbWF5IG5vdCBkaXNxdWFsaWZ5IHRoZSBtb2RpZmljYXRpb24uXG5cbjQuICBOb3csIHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMsIGFuZCBoZXJlJ3MgdGhlIGtpY2tlcjogYHBjcy14cGNzLXJrLmNgLCBgcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNgLCBgZHdtYWMtcmsuY2AsIGBkd21hYy1yZW5lc2FzLWdiZXRoLmNgLCBgZHdtYWMtcnpuMS5jYCwgYGR3bWFjLXNvY2ZwZ2EuY2AsIGFuZCBgZHdtYWMtaW50ZWwuY2AuIFRoZXNlIGFsbCB0YXJnZXQgc3BlY2lmaWMgaGFyZHdhcmU6IFJvY2tjaGlwIFNvQ3MsIFJlbmVzYXMgU29DcywgSW50ZWwgU29DIEZQR0FzLCBhbmQgSW50ZWwgU29Dcy4gVGhleSByZXF1aXJlICpwaHlzaWNhbCogZGV2aWNlcyBvciwgaW4gdGhlIGNhc2Ugb2YgYGR3bWFjLWludGVsYCwgYSBzcGVjaWZpYyBQQ0llIGRldmljZSB0aGF0J3Mgbm90IGdvaW5nIHRvIGJlIGF2YWlsYWJsZSBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0J3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgKmRlZmluaXRlbHkqIGEgbmVnYXRpdmUuXG5cbjUuIEZpbmFsbHksIHdlIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlcjogYGRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBYUENTIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQuIEV4YW1pbmluZyB0aGUgbW9kaWZpY2F0aW9ucywgSSBzZWUgYHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpYCBhbmQgYHhwY3NfZ2V0X3N0YXRlX2MzN19zZ21paWAuIEhvd2V2ZXIsIHRoZXNlIGFyZSBwYXJ0IG9mIHRoZSBEVyBYUENTIFBDUyBkcml2ZXIsIHdoaWNoIGlzIG9ubHkgaW5zdGFudGlhdGVkIGJ5IGRyaXZlcnMgZm9yIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSAodGhlIGRldmljZXMgbGlzdGVkIGFib3ZlKS4gU28gYWdhaW4sIHdlJ3JlIHN0dWNrLlxuXG42LiBUaGUgbW9kaWZpY2F0aW9uIHRvIGBzdG1tYWNfbWRpby5jYCBsb29rcyBpbnRlcmVzdGluZzogYHN0bW1hY19wY3Nfc2V0dXBgIGFuZCBgc3RtbWFjX3Bjc19jbGVhbmAsIGJ1dCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgc3RtbWFjX2R2cl9wcm9iZWAgLyBgc3RtbWFjX2R2cl9yZW1vdmVgLiBTbywgd2UgbmVlZCB0byB2ZXJpZnkgd2hlcmUgYHN0bW1hY19wY3Nfc2V0dXBgIGlzIGNhbGxlZCwgYW5kLCBtb3N0IGxpa2VseSwgd2lsbCBiZSByZWxhdGVkIHRvIHRoZXNlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBkcml2ZXJzLlxuXG5TbywgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGFsbCBtb2RpZmljYXRpb25zIGZhbGwgaW50byB0aGUgXCJuZWdhdGl2ZSBjcml0ZXJpYVwiIGNhdGVnb3JpZXMuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGVpdGhlciBkb2N1bWVudGF0aW9uLCBBUk0vUm9ja2NoaXAgU29DIHNwZWNpZmljLCBkZXBlbmRlbnQgb24gcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCdzIG5vdCBlbXVsYXRlZCBieSBRRU1VLCBvciBwYXJ0IG9mIGhlbHBlciBmdW5jdGlvbnMgdGhhdCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlLiAqKkluIGNvbmNsdXNpb24sIEknZCBzYXkgdGhpcyBpcyBub3Qgd29ydGggZnV6emluZyBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuKipcblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI3OjQyLjUxMjI2MDg2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MjkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3Bjc19zZXR1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9Mzk5PXZvaWQgc3RtbWFjX21kaW9fdW5sb2NrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDAwOmludCBzdG1tYWNfcGNzX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDEtdm9pZCBzdG1tYWNfcGNzX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzgxNj1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwNjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDY2OlxcdHJldCA9IHN0bW1hY19wY3Nfc2V0dXAobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDY3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTM4MT1pbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNDI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NDI2OmludCBzdG1tYWNfcGNzX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNDI3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6Mjc6NDIuNTYxOTk1NjQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU3MDU3ODAyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm8gRnV6emluZyBOZWVkZWQgSGVyZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBzdG1tYWNfcGNzX3NldHVwYCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgdGhlIGRyaXZlciBwcm9iaW5nIHBoYXNlIChgX19zdG1tYWNfZHZyX3Byb2JlYCkgd2l0aGluIGBzdG1tYWNfbWFpbi5jYCwgYW5kIHRoZSBjbGVhbnVwIGNvdW50ZXJwYXJ0IChgc3RtbWFjX3Bjc19jbGVhbmApIG9ubHkgcnVucyB3aGVuIHRoZSBkcml2ZXIgaXMgYmVpbmcgdG9ybiBkb3duIG9yIGlmIHByb2JpbmcgZmFpbHMuIE5vdywgdGhhdCBgX19zdG1tYWNfZHZyX3Byb2JlYCBmdW5jdGlvbj8gSXQncyBzdHJpY3RseSBmb3IgcGh5c2ljYWwgc3RtbWFjIGRldmljZXMg4oCTIHRob3NlIGBkd21hYy0qYCBjb250cm9sbGVycyB5b3UgZmluZCBvbiBTb0NzIG9yIHBoeXNpY2FsIFBDSWUgY2FyZHMuIEFuZCBoZXJlJ3MgdGhlIGtpY2tlcjogbm9uZSBvZiB0aGVzZSBhcmUgZW11bGF0ZWQgaW4gUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHdoaWNoIGFyZSB0aGUgc3RhbmRhcmQgZW52aXJvbm1lbnRzIHdlJ3JlIGNvbnNpZGVyaW5nLlxuXG5GdXJ0aGVybW9yZSwgbG9va2luZyBhdCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCBhbGwgdGhvc2UgcGxhdGZvcm0gZHJpdmVycyBzcGVjaWZpYyB0byBBUk0sIFJvY2tjaGlwLCBSZW5lc2FzLCBTb0NGUEdBIGFyZSB0b3RhbGx5IGlycmVsZXZhbnQuIFRoZXkncmUgbm9uLWV4aXN0ZW50IGluIHRoaXMgY29udGV4dC4gVGhlIEludGVsIFBDSSBkcml2ZXIgKGBkd21hYy1pbnRlbGApIGhhcyBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgSW50ZWwgaGFyZHdhcmUgKEVsa2hhcnQgTGFrZSwgVGlnZXIgTGFrZSwgUXVhcmssIEFsZGVyIExha2UgRXRoZXJuZXQgY29udHJvbGxlcnMpIHRoYXQgYXJlbid0IGVtdWxhdGVkIGJ5IHRoZSBzdGFuZGFyZCBRRU1VIG9yIGFyZSBhdmFpbGFibGUgb24gY2xvdWQgVk1zLlxuXG5UaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhlcmUgYXJlIGxpbWl0ZWQgdG86XG5cbjEuICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBzdHVmZjogZG9jdW1lbnRhdGlvbiwgRFQgYmluZGluZ3MsIGFuZCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlLlxuMi4gIENvZGUgcGF0aHMgdGhhdCBhcmUgKm9ubHkqIHJlbGV2YW50IHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiBhbWQ2NCAobGlrZSB0aG9zZSBgYXJjaC9hcm02NGAgRGV2aWNlIFRyZWUgZmlsZXMpLlxuMy4gIEhhcmR3YXJlIHRoYXQncyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBoYXJkd2FyZSB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBRRU1VIG9yIEdDRS4gVGhpcyBpbmNsdWRlcyBSb2NrY2hpcCwgUmVuZXNhcywgU29DIEZQR0EsIGFuZCBJbnRlbCBTb0MgRXRoZXJuZXQgY29udHJvbGxlcnMgYW5kIERXIFhQQ1MgUEhZL1BDUy5cblxuRXZlcnl0aGluZyBwb2ludHMgZGlyZWN0bHkgdG8gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGFsaWduczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZSAtICpDaGVjayEqXG4qICAgYFJlYXNvbmluZ2A6ICpDbGVhciBleHBsYW5hdGlvbiBhYm92ZTsgRGV2aWNlIFRyZWUsIGFtZDY0LCBwbGF0Zm9ybS9QQ0kgZHJpdmVycyBpcnJlbGV2YW50IHRvIGFtZDY0L1FFTVUvR0NFLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuKiAtICpDaGVjayEqXG4qICAgYEZvY3VzU3ltYm9sc2A6IFxcWyBdIChvciBudWxsL2VtcHR5KSAtICpNYWtlcyBzZW5zZTsgbm90aGluZyB0byBmb2N1cyBvbi4qXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBcXFsgXSAob3IgbnVsbC9lbXB0eSkgLSAqQ29ycmVjdDsgbm8gc3BlY2lmaWMgY29uZmlncyBhcmUgbmVlZGVkLipcblxuT2theSwgbGV0J3MgZ28gYWhlYWQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4gSXQncyBhIG5vLWdvIGZvciBmdXp6aW5nIGluIHRoaXMgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3NDIsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjI3OjQ4LjI2Nzc3OTM4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBSb2NrY2hpcCBSSzM1NjggRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1MgKFhQQ1MpIGFuZCByZWZhY3RvcnMgUENTIGluaXRpYWxpemF0aW9uIGluIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIGZhbWlseSAoZHdtYWMtcmssIGR3bWFjLWludGVsLCBkd21hYy1yZW5lc2FzLCBkd21hYy1zb2NmcGdhLCBkd21hYy1yem4xKS4gQWxsIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSk6IGRvY3VtZW50YXRpb24vZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIGFybTY0IERUUyBjaGFuZ2VzIGFyZSBub24tZXhlY3V0YWJsZSBvbiBhbWQ2NCwgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzIChzdG1tYWMgZHdtYWMgdmFyaWFudHMgYW5kIFN5bm9wc3lzIERXIFhQQ1MpIHJlcXVpcmUgcGh5c2ljYWwgU29DIHBsYXRmb3JtIGRldmljZXMgb3IgcGh5c2ljYWwgSW50ZWwvUm9ja2NoaXAvUmVuZXNhcyBzaWxpY29uIG5vdCBlbXVsYXRlZCBieSBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIFJvY2tjaGlwIFJLMzU2OCBEZXNpZ25XYXJlIEV0aGVybmV0IFBDUyAoWFBDUykgYW5kIHJlZmFjdG9ycyBQQ1MgaW5pdGlhbGl6YXRpb24gaW4gdGhlIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIgZmFtaWx5IChkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMsIGR3bWFjLXNvY2ZwZ2EsIGR3bWFjLXJ6bjEpLiBBbGwgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKTogZG9jdW1lbnRhdGlvbi9kZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgYXJtNjQgRFRTIGNoYW5nZXMgYXJlIG5vbi1leGVjdXRhYmxlIG9uIGFtZDY0LCBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHN0bW1hYyBkd21hYyB2YXJpYW50cyBhbmQgU3lub3BzeXMgRFcgWFBDUykgcmVxdWlyZSBwaHlzaWNhbCBTb0MgcGxhdGZvcm0gZGV2aWNlcyBvciBwaHlzaWNhbCBJbnRlbC9Sb2NrY2hpcC9SZW5lc2FzIHNpbGljb24gbm90IGVtdWxhdGVkIGJ5IFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoyNzo0OC4yNjc4MTA2OTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxhqbd[1] Phase: Running StartedAt: 2026-09-15 16:27:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhqbd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-15 16:27:59 +0000 UTC FinishedAt: 2026-09-15 16:28:04 +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,}