ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCAxMzUxNmRlLi5jN2I2NzNkIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsMjkgQEAKIENoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMjoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorKiBQYXRjaGVzIGJ5IFJlaW5oYXJkIE1leWVyLCAxNCBGZWIgMjAwNDoKKyAgLSB1cGRhdGUgYm9hcmQvZW1rIHRyZWU7IHVzZSBjb21tb24gZmxhc2ggZHJpdmVyCisgIC0gQ29ycmVjdGVkIHRlc3RlZCBiaXRzIGluIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uIGluIGNwdS9tcGM1eHh4L3RyYXBzLmMKKyAgICBbYWRhcHRlZCBmb3Igb3RoZXIgUFBDIENQVXMgLS0gd2RdCisgIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIE00OFQwOCBvbiB0aGUgRVZBTDUyMDAgYm9hcmQgaW4gcnRjL21rNDh0NTkuYworCisqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMyBGZWIgMjAwNDoKKyAgQ2FsbCBzaG93X2Jvb3RfcHJvZ3Jlc3MoKSB3aGVuZXZlciBQT1NUICJGQUlMRUQiIGlzIHByaW50ZWQuCisKKyogUGF0Y2ggYnkgTmlzaGFudCBLYW1hdCwgMTMgRmViIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBUSSBPTUFQMTYxMCBIMiBCb2FyZAorICBGaXhlcyBmb3IgY3B1L2FybTkyNmVqcy9pbnRlcnJ1cHQuYworCShiYXNlZCBvbiBSaWNoYXJkIFdvb2RydWZmJ3MgcGF0Y2ggZm9yIGFybTkyNSwgMTYgT2N0IDAzKQorICBGaXggZm9yIGEgdGltZXIgYnVnIGluIE9NQVAxNjEwIElubm92YXRvcgorICBBZGQgc3VwcG9ydCBmb3IgQ1MwIChST00pL0NTMyAoRmxhc2gpIGJvb3QgaW4gT01BUDE2MTAgSW5ub3ZhdG9yIGFuZCBIMgorCisqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAxMiBGZWIgMjAwNDoKKyAgLSBhZGQgc3VwcG9ydCBmb3IgTklPUyB0aW1lciB3aXRoIHZhcmlhYmxlIHBlcmlvZCBwcmVsb2FkIGNvdW50ZXIgdmFsdWUKKyAgLSBwcmVwYXJlIFBPU1QgZnJhbWV3b3JrIHN1cHBvcnQgZm9yIE5JT1MgdGFyZ2V0cworCisqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxMSBGZWIgMjAwNDoKKyAgYWRkIFBPU1Qgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBib2FyZAorCiAqIFBhdGNoIGJ5IExhdXJlbnQgTW9oaW4sIDEwIEZlYiAyMDA0OgogICBGaXggYnVmZmVyIG92ZXJmbG93IGluIGNvbW1vbi91c2IuYwogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDllMTgzZjAuLmYyM2Q5ZTIgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xODcsNiArMTg3LDkgQEAKIAogCUVCT05ZCQkJUFBDNDQwR1AKIAorVG9sdW5heSBPcmt1biA8dG9ya3VuQG5leHRpby5jb20+CisJY3NiMjcyCQkJUFBDNHh4CisKIEtlaXRoIE91dHdhdGVyIDxLZWl0aF9PdXR3YXRlckBtdmlzLmNvbT4KIAogCUdFTjg2MFQJCQlNUEM4NjBUCkBAIC0zMDcsOSArMzEwLDE0IEBACiAJdHJhYgkJCUFSTTkyMFQKIAogS3NoaXRpaiBHdXB0YSA8a3NoaXRpakB0aS5jb20+CisKIAlvbWFwMTUxMGlubgkJQVJNOTI1VAogCW9tYXAxNjEwaW5uCQlBUk05MjZFSlMKIAorTmlzaGFudCBLYW1hdCA8bnNrYW1hdEB0aS5jb20+CisKKwlvbWFwMTYxMGgyCQlBUk05MjZFSlMKKwogRGF2aWQgTfxsbGVyIDxkLm11ZWxsZXJAZWxzb2Z0LmNoPgogCiAJc21kazI0MTAJCUFSTTkyMFQKZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IDA3MDU0ODguLmJjZjg5MDQgMTAwNjQ0Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtMTM1LDcgKzEzNSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIExJU1RfQVJNOT0iCVwKLQlhdDkxcm05MjAwZGsJb21hcDE1MTBpbm4Jb21hcDE2MTBpbm4JCQlcCisJYXQ5MXJtOTIwMGRrCW9tYXAxNTEwaW5uCW9tYXAxNjEwaDIJb21hcDE2MTBpbm4JXAogCXNtZGsyNDAwCXNtZGsyNDEwCXRyYWIJCQkJXAogCVZDTUE5CQkJCQkJCQlcCiAiCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDE1MjBmNTcuLjllZWJmOWMgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC05MTIsMTEgKzkxMiwyNSBAQAogCiB4dHJhY3RfdHJhYiA9ICQoc3Vic3QgX2JpZ3JhbSwsJChzdWJzdCBfYmlnZmxhc2gsLCQoc3Vic3QgX29sZCwsJChzdWJzdCBfY29uZmlnLCwkMSkpKSkKIAoreHRyYWN0X29tYXAxNjEweHh4ID0gJChzdWJzdCBfY3MwYm9vdCwsJChzdWJzdCBfY3MzYm9vdCwsICQoc3Vic3QgX2NvbmZpZywsJDEpKSkKKwogb21hcDE1MTBpbm5fY29uZmlnIDoJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjV0IG9tYXAxNTEwaW5uCiAKLW9tYXAxNjEwaW5uX2NvbmZpZyA6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTI2ZWpzIG9tYXAxNjEwaW5uCitvbWFwMTYxMGlubl9jb25maWcgXAorb21hcDE2MTBpbm5fY3MwYm9vdF9jb25maWcgXAorb21hcDE2MTBpbm5fY3MzYm9vdF9jb25maWcgXAorb21hcDE2MTBoMl9jb25maWcgXAorb21hcDE2MTBoMl9jczBib290X2NvbmZpZyBcCitvbWFwMTYxMGgyX2NzM2Jvb3RfY29uZmlnIDoJdW5jb25maWcKKwlAaWYgWyAiJChmaW5kc3RyaW5nIF9jczBib290XywgJEApIiBdIDsgdGhlbiBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0NTMF9CT09UIiA+PiAuL2luY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIkNvbmZpZ3VyZWQgZm9yIENTMCBib290IjsgXAorCWVsc2UgXAorCQllY2hvICIjZGVmaW5lIENPTkZJR19DUzNfQk9PVCIgPj4gLi9pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICJDb25maWd1cmVkIGZvciBDUzMgYm9vdCI7IFwKKwlmaTsKKwlALi9ta2NvbmZpZyAtYSAkKGNhbGwgeHRyYWN0X29tYXAxNjEweHh4LCRAKSBhcm0gYXJtOTI2ZWpzIG9tYXAxNjEwaW5uCiAKIHNtZGsyNDAwX2NvbmZpZwk6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBzbWRrMjQwMApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDJjNTY4MjAuLjM2MzFmMDEgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTIxOSw3ICsyMTksNyBAQAogLSBib2FyZC9vbWFwMTUxMGlubgogCQlGaWxlcyBzcGVjaWZpYyB0byBPTUFQIDE1MTAgSW5ub3ZhdG9yIGJvYXJkcwogLSBib2FyZC9vbWFwMTYxMGlubgotCQlGaWxlcyBzcGVjaWZpYyB0byBPTUFQIDE2MTAgSW5ub3ZhdG9yIGJvYXJkcworCQlGaWxlcyBzcGVjaWZpYyB0byBPTUFQIDE2MTAgSW5ub3ZhdG9yIGFuZCBIMiBib2FyZHMKIC0gYm9hcmQvcGNpcHBjMiBGaWxlcyBzcGVjaWZpYyB0byBQQ0lQUEMyL1BDSVBQQzYgYm9hcmRzCiAtIGJvYXJkL3BtODI2CUZpbGVzIHNwZWNpZmljIHRvIFBNODI2CSAgICAgYm9hcmRzCiAtIGJvYXJkL3BwbWM4MjYwCkBAIC0zNzUsMTEgKzM3NSwxMiBAQAogCQlBUk0gYmFzZWQgYm9hcmRzOgogCQktLS0tLS0tLS0tLS0tLS0tLQogCi0JCUNPTkZJR19ISFBfQ1JBRExFLCAgQ09ORklHX0ROUDExMTAsICAgIENPTkZJR19FUDczMTIsCi0JCUNPTkZJR19JTVBBNywJICAgIENPTkZJR19MQVJULCAgICAgICBDT05GSUdfTFVCQk9DSywKLQkJQ09ORklHX0lOTk9WQVRPUk9NQVAxNTEwLAlDT05GSUdfSU5OT1ZBVE9ST01BUDE2MTAKLQkJQ09ORklHX1NIQU5OT04sCSAgICBDT05GSUdfU01ESzI0MDAsICAgQ09ORklHX1NNREsyNDEwLAotCQlDT05GSUdfVFJBQiwJICAgIENPTkZJR19WQ01BOSwgICAgICBDT05GSUdfQVQ5MVJNOTIwMERLCisJCUNPTkZJR19ISFBfQ1JBRExFLCAgQ09ORklHX0ROUDExMTAsCUNPTkZJR19FUDczMTIsCisJCUNPTkZJR19JTVBBNywJICAgIENPTkZJR19MQVJULAlDT05GSUdfTFVCQk9DSywKKwkJQ09ORklHX0lOTk9WQVRPUk9NQVAxNTEwLCAgICAgIENPTkZJR19JTk5PVkFUT1JPTUFQMTYxMCwKKwkJQ09ORklHX0gyX09NQVAxNjEwLCBDT05GSUdfU0hBTk5PTiwJQ09ORklHX1NNREsyNDAwLAorCQlDT05GSUdfU01ESzI0MTAsICAgIENPTkZJR19UUkFCLAlDT05GSUdfVkNNQTksCisJCUNPTkZJR19BVDkxUk05MjAwREsKIAogCiAtIENQVSBNb2R1bGUgVHlwZTogKGlmIENPTkZJR19DT0dFTlQgaXMgZGVmaW5lZCkKQEAgLTE0NjUsNiArMTQ2NiwxMCBAQAogICAgMTQJY29tbW9uL2NtZF9ib290bS5jCU5vIGluaXRpYWwgcmFtZGlzaywgbm8gbXVsdGlmaWxlLCBjb250aW51ZS4KICAgIDE1CWNvbW1vbi9jbWRfYm9vdG0uYwlBbGwgcHJlcGFyYXRpb24gZG9uZSwgdHJhbnNmZXJyaW5nIGNvbnRyb2wgdG8gT1MKIAorICAtMzAgICBsaWJfcHBjL2JvYXJkLmMJICAgICAgICBGYXRhbCBlcnJvciwgaGFuZyB0aGUgc3lzdGVtCisgIC0zMSAgIHBvc3QvcG9zdC5jCSAgICAgICAgUE9TVCB0ZXN0IGZhaWxlZCwgZGV0ZWN0ZWQgYnkgcG9zdF9vdXRwdXRfYmFja2xvZygpCisgIC0zMiAgIHBvc3QvcG9zdC5jCSAgICAgICAgUE9TVCB0ZXN0IGZhaWxlZCwgZGV0ZWN0ZWQgYnkgcG9zdF9ydW5fc2luZ2xlKCkKKwogICAgLTEJY29tbW9uL2NtZF9kb2MuYwlCYWQgdXNhZ2Ugb2YgImRvYyIgY29tbWFuZAogICAgLTEJY29tbW9uL2NtZF9kb2MuYwlObyBib290IGRldmljZQogICAgLTEJY29tbW9uL2NtZF9kb2MuYwlVbmtub3duIENoaXAgSUQgb24gYm9vdCBkZXZpY2UKQEAgLTIwMzksNyArMjA0NCw3IEBACiAgICAgYXQ5MXJtOTIwMGRrX2NvbmZpZwkgIG9tYXAxNTEwaW5uX2NvbmZpZwlNUEM4MjYwQURTX2NvbmZpZwogICAgIG9tYXAxNjEwaW5uX2NvbmZpZwkgIFpQQzE5MDBfY29uZmlnCU1QQzg1NDBBRFNfY29uZmlnCiAgICAgTVBDODU2MEFEU19jb25maWcJICBRUzg1MF9jb25maWcJCVFTODIzX2NvbmZpZwotICAgIFFTODYwVF9jb25maWcJICBEVUVUX0FEU19jb25maWcKKyAgICBRUzg2MFRfY29uZmlnCSAgRFVFVF9BRFNfY29uZmlnCW9tYXAxNjEwaDJfY29uZmlnCiAKIE5vdGU6IGZvciBzb21lIGJvYXJkIHNwZWNpYWwgY29uZmlndXJhdGlvbiBuYW1lcyBtYXkgZXhpc3Q7IGNoZWNrICBpZgogICAgICAgYWRkaXRpb25hbCAgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGZyb20gdGhlIGJvYXJkIHZlbmRvcjsgZm9yCmRpZmYgLS1naXQgYS9ib2FyZC9lbWsvY29tbW9uL2ZsYXNoLmMgYi9ib2FyZC9lbWsvY29tbW9uL2ZsYXNoLmMKaW5kZXggYjJhMjEzOC4uYWRmYTlhMCAxMDA2NDQKLS0tIGEvYm9hcmQvZW1rL2NvbW1vbi9mbGFzaC5jCisrKyBiL2JvYXJkL2Vtay9jb21tb24vZmxhc2guYwpAQCAtMjgsMTUgKzI4LDMzIEBACiAKIGZsYXNoX2luZm9fdAlmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOyAvKiBpbmZvIGZvciBGTEFTSCBjaGlwcyAqLwogCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgRkxBU0hfUE9SVF9XSURUSDsKLXR5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBGTEFTSF9QT1JUX1dJRFRIVjsKLSNkZWZpbmUJRkxBU0hfSURfTUFTSwkweEZGCisjaWYgZGVmaW5lZCAoQ09ORklHX1RPUDg2MCkKKyAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBGTEFTSF9QT1JUX1dJRFRIOworICB0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IEZMQVNIX1BPUlRfV0lEVEhWOworICAjZGVmaW5lCUZMQVNIX0lEX01BU0sJMHhGRgogCi0jZGVmaW5lIEZQVwlGTEFTSF9QT1JUX1dJRFRICi0jZGVmaW5lIEZQV1YJRkxBU0hfUE9SVF9XSURUSFYKKyAgI2RlZmluZSBGUFcJRkxBU0hfUE9SVF9XSURUSAorICAjZGVmaW5lIEZQV1YJRkxBU0hfUE9SVF9XSURUSFYKIAotI2RlZmluZSBGTEFTSF9DWUNMRTEJMHgwYWFhCi0jZGVmaW5lIEZMQVNIX0NZQ0xFMgkweDA1NTUKKyAgI2RlZmluZSBGTEFTSF9DWUNMRTEJMHgwNTU1CisgICNkZWZpbmUgRkxBU0hfQ1lDTEUyCTB4MDJhYQorICAjZGVmaW5lIEZMQVNIX0lEMQkJMAorICAjZGVmaW5lIEZMQVNIX0lEMgkJMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfVE9QNTIwMCkKKyAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEZMQVNIX1BPUlRfV0lEVEg7CisgIHR5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBGTEFTSF9QT1JUX1dJRFRIVjsKKyAgI2RlZmluZQlGTEFTSF9JRF9NQVNLCTB4RkYKKworICAjZGVmaW5lIEZQVwlGTEFTSF9QT1JUX1dJRFRICisgICNkZWZpbmUgRlBXVglGTEFTSF9QT1JUX1dJRFRIVgorCisgICNkZWZpbmUgRkxBU0hfQ1lDTEUxCTB4MGFhYQorICAjZGVmaW5lIEZMQVNIX0NZQ0xFMgkweDA1NTUKKyAgI2RlZmluZSBGTEFTSF9JRDEJCTAKKyAgI2RlZmluZSBGTEFTSF9JRDIJCTIKKyNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbnMKQEAgLTE3OSwxMiArMTk3LDMzIEBACiAJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwogCiAJZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKKwkJdWxvbmcJc2l6ZTsKKwkJaW50CQllcmFzZWQ7CisJCXVsb25nCSpmbGFzaCA9ICh1bnNpZ25lZCBsb25nICopIGluZm8tPnN0YXJ0W2ldOworCiAJCWlmICgoaSAlIDUpID09IDApIHsKIAkJCXByaW50ZiAoIlxuICAgIik7CiAJCX0KIAotCQlwcmludGYgKCIgJTA4bFglcyIsIGluZm8tPnN0YXJ0W2ldLAotCQkJaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiKTsKKwkJLyoKKwkJICogQ2hlY2sgaWYgd2hvbGUgc2VjdG9yIGlzIGVyYXNlZAorCQkgKi8KKwkJc2l6ZSA9CisJCQkoaSAhPSAoaW5mby0+c2VjdG9yX2NvdW50IC0gMSkpID8KKwkJCShpbmZvLT5zdGFydFtpICsgMV0gLSBpbmZvLT5zdGFydFtpXSkgPj4gMiA6CisJCShpbmZvLT5zdGFydFswXSArIGluZm8tPnNpemUgLSBpbmZvLT5zdGFydFtpXSkgPj4gMjsKKworCQlmb3IgKAorCQkJZmxhc2ggPSAodW5zaWduZWQgbG9uZyAqKSBpbmZvLT5zdGFydFtpXSwgZXJhc2VkID0gMTsKKwkJCQkoZmxhc2ggIT0gKHVuc2lnbmVkIGxvbmcgKikgaW5mby0+c3RhcnRbaV0gKyBzaXplKSAmJiBlcmFzZWQ7CisJCQkJCWZsYXNoKysKKwkJCSkKKwkJCWVyYXNlZCA9ICpmbGFzaCA9PSB+MHgwVUw7CisKKwkJcHJpbnRmICgiICUwOGxYICVzICVzIiwKKwkJCWluZm8tPnN0YXJ0W2ldLAorCQkJZXJhc2VkID8gIkUiOiAiICIsCisJCQlpbmZvLT5wcm90ZWN0W2ldID8gIihSTykiIDogIiAgICAiKTsKIAl9CiAKIAlwcmludGYgKCJcbiIpOwpAQCAtMjEyLDcgKzI1MSw3IEBACiAJICogVGhpcyB3b3JrcyBmb3IgYW55IGJ1cyB3aWR0aCBhbmQgYW55IEZMQVNIIGRldmljZSB3aWR0aC4KIAkgKi8KIAl1ZGVsYXkoMTAwKTsKLQlzd2l0Y2ggKGFkZHJbMF0gJiAweGZmKSB7CisJc3dpdGNoIChhZGRyW0ZMQVNIX0lEMV0gJiAweGZmKSB7CiAKIAljYXNlICh1Y2hhcilBTURfTUFOVUZBQ1Q6CiAJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRDsKQEAgLTIyNSw3ICsyNjQsNyBAQAogI2VuZGlmCiAKIAlkZWZhdWx0OgotCQlwcmludGYgKCJ1bmtub3duIHZlbmRvcj0leCAiLCBhZGRyWzBdICYgMHhmZik7CisJCXByaW50ZiAoInVua25vd24gdmVuZG9yPSV4ICIsIGFkZHJbRkxBU0hfSUQxXSAmIDB4ZmYpOwogCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CiAJCWluZm8tPnNpemUgPSAwOwpAQCAtMjMzLDcgKzI3Miw3IEBACiAJfQogCiAJLyogQ2hlY2sgMTYgYml0cyBvciAzMiBiaXRzIG9mIElEIHNvIHdvcmsgb24gMzIgb3IgMTYgYml0IGJ1cy4gKi8KLQlpZiAoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTikgc3dpdGNoICgoRlBXKWFkZHJbMl0pIHsKKwlpZiAoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTikgc3dpdGNoICgoRlBXKWFkZHJbRkxBU0hfSUQyXSkgewogCiAJY2FzZSAoRlBXKUFNRF9JRF9MVjE2MEI6CiAJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMTYwQjsKQEAgLTI1NSw3ICsyOTQsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ZiAoInVua25vd24gQU1EIGRldmljZT0leCAiLCAoRlBXKWFkZHJbMl0pOworCQlwcmludGYgKCJ1bmtub3duIEFNRCBkZXZpY2U9JXggIiwgKEZQVylhZGRyW0ZMQVNIX0lEMl0pOwogCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CiAJCWluZm8tPnNpemUgPSAwOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZW1rL3RvcDUyMDAvTWFrZWZpbGUgYi9ib2FyZC9lbWsvdG9wNTIwMC9NYWtlZmlsZQppbmRleCBlYjVlZDU5Li45ODY2MDhiIDEwMDY0NAotLS0gYS9ib2FyZC9lbWsvdG9wNTIwMC9NYWtlZmlsZQorKysgYi9ib2FyZC9lbWsvdG9wNTIwMC9NYWtlZmlsZQpAQCAtMjYsNyArMjYsNyBAQAogCiBMSUIJPSBsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vCitPQkpTCTo9ICQoQk9BUkQpLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL3ZwZC5vIC4uL2NvbW1vbi9hbTc5Yzg3NC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9lbWsvdG9wNTIwMC9mbGFzaC5jIGIvYm9hcmQvZW1rL3RvcDUyMDAvZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2YmNlMy4uMDAwMDAwMAotLS0gYS9ib2FyZC9lbWsvdG9wNTIwMC9mbGFzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTAyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDMKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAzCi0gKiBSZWluaGFyZCBNZXllciwgRU1LIEVsZWt0cm9uaWsgR21iSCwgci5tZXllckBlbWstZWxla3Ryb25pay5kZQotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLQotZmxhc2hfaW5mb190CWZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107IC8qIGluZm8gZm9yIEZMQVNIIGNoaXBzCSovCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBGTEFTSF9QT1JUX1dJRFRIOwotdHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIEZMQVNIX1BPUlRfV0lEVEhWOwotI2RlZmluZQlGTEFTSF9JRF9NQVNLCTB4RkYKLQotI2RlZmluZSBGUFcJRkxBU0hfUE9SVF9XSURUSAotI2RlZmluZSBGUFdWCUZMQVNIX1BPUlRfV0lEVEhWCi0KLSNkZWZpbmUgRkxBU0hfQ1lDTEUxCTB4MGFhYQotI2RlZmluZSBGTEFTSF9DWUNMRTIJMHgwNTU1Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9ucwotICovCi1zdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUoRlBXViAqYWRkciwgZmxhc2hfaW5mb190ICppbmZvKTsKLXN0YXRpYyB2b2lkIGZsYXNoX3Jlc2V0KGZsYXNoX2luZm9fdCAqaW5mbyk7Ci1zdGF0aWMgaW50IHdyaXRlX3dvcmRfYW1kKGZsYXNoX2luZm9fdCAqaW5mbywgRlBXViAqZGVzdCwgRlBXIGRhdGEpOwotc3RhdGljIGZsYXNoX2luZm9fdCAqZmxhc2hfZ2V0X2luZm8odWxvbmcgYmFzZSk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGZsYXNoX2luaXQoKQotICoKLSAqIHNldHMgdXAgZmxhc2hfaW5mbyBhbmQgcmV0dXJucyBzaXplIG9mIEZMQVNIIChieXRlcykKLSAqLwotdW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7Ci0JaW50IGkgPSAwOwotCWV4dGVybiB2b2lkIGZsYXNoX3ByZWluaXQodm9pZCk7Ci0JZXh0ZXJuIHZvaWQgZmxhc2hfYWZ0ZXJpbml0KHVpbnQsIHVsb25nLCB1bG9uZyk7Ci0JdWxvbmcgZmxhc2hiYXNlID0gQ0ZHX0ZMQVNIX0JBU0U7Ci0KLQlmbGFzaF9wcmVpbml0KCk7Ci0KLQkvKiBUaGVyZSBpcyBvbmx5IE9ORSBGTEFTSCBkZXZpY2UgKi8KLQltZW1zZXQoJmZsYXNoX2luZm9baV0sIDAsIHNpemVvZihmbGFzaF9pbmZvX3QpKTsKLQlmbGFzaF9pbmZvW2ldLnNpemUgPQotCQkJZmxhc2hfZ2V0X3NpemUoKEZQVyAqKWZsYXNoYmFzZSwgJmZsYXNoX2luZm9baV0pOwotCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOwotCi0jaWYgQ0ZHX01PTklUT1JfQkFTRSA+PSBDRkdfRkxBU0hfQkFTRQotCS8qIG1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCi0JZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotCQkgICAgICBDRkdfTU9OSVRPUl9CQVNFLAotCQkgICAgICBDRkdfTU9OSVRPUl9CQVNFK21vbml0b3JfZmxhc2hfbGVuLTEsCi0JCSAgICAgIGZsYXNoX2dldF9pbmZvKENGR19NT05JVE9SX0JBU0UpKTsKLSNlbmRpZgotCi0jaWZkZWYJQ0ZHX0VOVl9JU19JTl9GTEFTSAotCS8qIEVOViBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KLQlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0JCSAgICAgIENGR19FTlZfQUREUiwKLQkJICAgICAgQ0ZHX0VOVl9BRERSK0NGR19FTlZfU0laRS0xLAotCQkgICAgICBmbGFzaF9nZXRfaW5mbyhDRkdfRU5WX0FERFIpKTsKLSNlbmRpZgotCi0KLQlmbGFzaF9hZnRlcmluaXQoaSwgZmxhc2hfaW5mb1tpXS5zdGFydFswXSwgZmxhc2hfaW5mb1tpXS5zaXplKTsKLQlyZXR1cm4gc2l6ZSA/IHNpemUgOiAxOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyB2b2lkIGZsYXNoX3Jlc2V0KGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlGUFdWICpiYXNlID0gKEZQV1YgKikoaW5mby0+c3RhcnRbMF0pOwotCi0JLyogUHV0IEZMQVNIIGJhY2sgaW4gcmVhZCBtb2RlICovCi0JaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUwpCi0JCSpiYXNlID0gKEZQVykweDAwRkYwMEZGOwkvKiBJbnRlbCBSZWFkIE1vZGUgKi8KLQllbHNlIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0FNRCkKLQkJKmJhc2UgPSAoRlBXKTB4MDBGMDAwRjA7CS8qIEFNRCBSZWFkIE1vZGUgKi8KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLXN0YXRpYyBmbGFzaF9pbmZvX3QgKmZsYXNoX2dldF9pbmZvKHVsb25nIGJhc2UpCi17Ci0JaW50IGk7Ci0JZmxhc2hfaW5mb190ICogaW5mbzsKLQotCWZvciAoaSA9IDA7IGkgPCBDRkdfTUFYX0ZMQVNIX0JBTktTOyBpICsrKSB7Ci0JCWluZm8gPSAmIGZsYXNoX2luZm9baV07Ci0JCWlmIChpbmZvLT5zaXplICYmCi0JCQlpbmZvLT5zdGFydFswXSA8PSBiYXNlICYmIGJhc2UgPD0gaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplIC0gMSkKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBpID09IENGR19NQVhfRkxBU0hfQkFOS1MgPyAwIDogaW5mbzsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLXZvaWQgZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICppbmZvKQotewotCWludCBpOwotCXVjaGFyICpib290dHlwZTsKLQl1Y2hhciAqYm9vdGxldHRlcjsKLQl1Y2hhciAqZm10OwotCXVjaGFyIGJvdGJvb3RsZXR0ZXJbXSA9ICJCIjsKLQl1Y2hhciB0b3Bib290bGV0dGVyW10gPSAiVCI7Ci0JdWNoYXIgYm90Ym9vdHR5cGVbXSA9ICJib3R0b20gYm9vdCBzZWN0b3IiOwotCXVjaGFyIHRvcGJvb3R0eXBlW10gPSAidG9wIGJvb3Qgc2VjdG9yIjsKLQotCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0JCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgewotCWNhc2UgRkxBU0hfTUFOX0FNRDoJcHJpbnRmICgiQU1EICIpOwkJYnJlYWs7Ci0jaWYgMAotCWNhc2UgRkxBU0hfTUFOX0JNOglwcmludGYgKCJCUklHSFQgTUlDUk8gIik7CWJyZWFrOwotCWNhc2UgRkxBU0hfTUFOX0ZVSjoJcHJpbnRmICgiRlVKSVRTVSAiKTsJCWJyZWFrOwotCWNhc2UgRkxBU0hfTUFOX1NTVDoJcHJpbnRmICgiU1NUICIpOwkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9NQU5fU1RNOglwcmludGYgKCJTVE0gIik7CQlicmVhazsKLQljYXNlIEZMQVNIX01BTl9JTlRFTDoJcHJpbnRmICgiSU5URUwgIik7CQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6CQlwcmludGYgKCJVbmtub3duIFZlbmRvciAiKTsJYnJlYWs7Ci0JfQotCi0JLyogY2hlY2sgZm9yIHRvcCBvciBib3R0b20gYm9vdCwgaWYgaXQgYXBwbGllcyAqLwotCWlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX0JUWVBFKSB7Ci0JCWJvb3R0eXBlID0gYm90Ym9vdHR5cGU7Ci0JCWJvb3RsZXR0ZXIgPSBib3Rib290bGV0dGVyOwotCX0KLQllbHNlIHsKLQkJYm9vdHR5cGUgPSB0b3Bib290dHlwZTsKLQkJYm9vdGxldHRlciA9IHRvcGJvb3RsZXR0ZXI7Ci0JfQotCi0Jc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7Ci0JY2FzZSBGTEFTSF9BTTE2MFQ6Ci0JY2FzZSBGTEFTSF9BTTE2MEI6Ci0JCWZtdCA9ICIyOUxWMTYwJXMgKDE2IE1iaXQsICVzKVxuIjsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9BTURMVjA2NUQ6Ci0JCWZtdCA9ICIyOUxWMDY1ICg2NCBNYml0LCB1bmlmb3JtIHNlY3RvcnMpXG4iOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlmbXQgPSAiVW5rbm93biBDaGlwIFR5cGVcbiI7Ci0JCWJyZWFrOwotCX0KLQotCXByaW50ZiAoZm10LCBib290bGV0dGVyLCBib290dHlwZSk7Ci0KLQlwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAotCQlpbmZvLT5zaXplID4+IDIwLAotCQlpbmZvLT5zZWN0b3JfY291bnQpOwotCi0JcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwotCi0JZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKLQkJaWYgKChpICUgNSkgPT0gMCkgewotCQkJcHJpbnRmICgiXG4gICAiKTsKLQkJfQotCi0JCXByaW50ZiAoIiAlMDhsWCVzIiwgaW5mby0+c3RhcnRbaV0sCi0JCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIpOwotCX0KLQotCXByaW50ZiAoIlxuIik7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0vKgotICogVGhlIGZvbGxvd2luZyBjb2RlIGNhbm5vdCBiZSBydW4gZnJvbSBGTEFTSCEKLSAqLwotCi11bG9uZyBmbGFzaF9nZXRfc2l6ZSAoRlBXViAqYWRkciwgZmxhc2hfaW5mb190ICppbmZvKQotewotCWludAkJaTsKLQl1bG9uZwlvZmZzZXQ7Ci0KLQkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLwotCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQgc2VxdWVuY2UgYW5kIHRlc3QgRkxBU0ggYW5zd2VyICovCi0JYWRkcltGTEFTSF9DWUNMRTFdID0gKEZQVykweDAwQUEwMEFBOwkvKiBmb3IgQU1ELCBJbnRlbCBpZ25vcmVzIHRoaXMgKi8KLQlhZGRyW0ZMQVNIX0NZQ0xFMl0gPSAoRlBXKTB4MDA1NTAwNTU7CS8qIGZvciBBTUQsIEludGVsIGlnbm9yZXMgdGhpcyAqLwotCWFkZHJbRkxBU0hfQ1lDTEUxXSA9IChGUFcpMHgwMDkwMDA5MDsJLyogc2VsZWN0cyBJbnRlbCBvciBBTUQgKi8KLQotCS8qIFRoZSBtYW51ZmFjdHVyZXIgY29kZXMgYXJlIG9ubHkgMSBieXRlLCBzbyBqdXN0IHVzZSAxIGJ5dGUuCi0JICogVGhpcyB3b3JrcyBmb3IgYW55IGJ1cyB3aWR0aCBhbmQgYW55IEZMQVNIIGRldmljZSB3aWR0aC4KLQkgKi8KLQl1ZGVsYXkoMTAwKTsKLQlzd2l0Y2ggKGFkZHJbMF0gJiAweGZmKSB7Ci0KLQljYXNlICh1Y2hhcilBTURfTUFOVUZBQ1Q6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRDsKLQkJYnJlYWs7Ci0KLSNpZiAwCi0JY2FzZSAodWNoYXIpSU5URUxfTUFOVUZBQ1Q6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0lOVEVMOwotCQlicmVhazsKLSNlbmRpZgotCi0JZGVmYXVsdDoKLQkJcHJpbnRmICgidW5rbm93biB2ZW5kb3I9JXggIiwgYWRkclswXSAmIDB4ZmYpOwotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7Ci0JCWluZm8tPnNpemUgPSAwOwotCQlicmVhazsKLQl9Ci0KLQkvKiBDaGVjayAxNiBiaXRzIG9yIDMyIGJpdHMgb2YgSUQgc28gd29yayBvbiAzMiBvciAxNiBiaXQgYnVzLiAqLwotCWlmIChpbmZvLT5mbGFzaF9pZCAhPSBGTEFTSF9VTktOT1dOKSBzd2l0Y2ggKChGUFcpYWRkclsyXSkgewotCi0JY2FzZSAoRlBXKUFNRF9JRF9MVjE2MEI6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMTYwQjsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMzU7Ci0JCWluZm8tPnNpemUgPSAweDAwMjAwMDAwOwotI2lmZGVmIENGR19MT1dCT09UCi0JCW9mZnNldCA9IDA7Ci0jZWxzZQotCQlvZmZzZXQgPSAweDAwZTAwMDAwOwotI2VuZGlmCi0JCWluZm8tPnN0YXJ0WzBdID0gKHVsb25nKWFkZHIgKyBvZmZzZXQ7Ci0JCWluZm8tPnN0YXJ0WzFdID0gKHVsb25nKWFkZHIgKyBvZmZzZXQgKyAweDQwMDA7Ci0JCWluZm8tPnN0YXJ0WzJdID0gKHVsb25nKWFkZHIgKyBvZmZzZXQgKyAweDYwMDA7Ci0JCWluZm8tPnN0YXJ0WzNdID0gKHVsb25nKWFkZHIgKyBvZmZzZXQgKyAweDgwMDA7Ci0JCWZvciAoaSA9IDQ7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKLQkJewotCQkJaW5mby0+c3RhcnRbaV0gPSAodWxvbmcpYWRkciArIG9mZnNldCArIDB4MTAwMDAgKiAoaS0zKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgKEZQVylBTURfSURfTFYwNjVEOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTURMVjA2NUQ7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDEyODsKLQkJaW5mby0+c2l6ZSA9IDB4MDA4MDAwMDA7Ci0jaWZkZWYgQ0ZHX0xPV0JPT1QKLQkJb2Zmc2V0ID0gMDsKLSNlbHNlCi0JCW9mZnNldCA9IDB4MDA4MDAwMDA7Ci0jZW5kaWYKLQkJZm9yKCBpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrICkKLQkJCWluZm8tPnN0YXJ0W2ldID0gKHVsb25nKWFkZHIgKyBvZmZzZXQgKyAoaSAqIDB4MTAwMDApOwotCQlicmVhazsJCQkJLyogPT4gOCBvciAxNiBNQgkqLwotCi0JZGVmYXVsdDoKLQkJcHJpbnRmICgidW5rbm93biBBTUQgZGV2aWNlPSV4ICIsIChGUFcpYWRkclsyXSk7Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKLQkJaW5mby0+c2l6ZSA9IDA7Ci0JCXJldHVybiAoMCk7CQkJLyogPT4gbm8gb3IgdW5rbm93biBmbGFzaCAqLwotCX0KLQotCS8qIFB1dCBGTEFTSCBiYWNrIGluIHJlYWQgbW9kZSAqLwotCWZsYXNoX3Jlc2V0KGluZm8pOwotCi0JcmV0dXJuIChpbmZvLT5zaXplKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLWludAlmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICppbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKLXsKLQlGUFdWICphZGRyOwotCWludCBmbGFnLCBwcm90LCBzZWN0OwotCWludCBpbnRlbCA9IChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUw7Ci0JdWxvbmcgc3RhcnQsIG5vdywgbGFzdDsKLQlpbnQgcmNvZGUgPSAwOwotCi0JaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7Ci0JCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0JCQlwcmludGYgKCItIG1pc3NpbmdcbiIpOwotCQl9IGVsc2UgewotCQkJcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKLQkJfQotCQlyZXR1cm4gMTsKLQl9Ci0KLQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKLQljYXNlIEZMQVNIX0FNRExWMDY1RDoKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9VTktOT1dOOgotCWRlZmF1bHQ6Ci0JCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAlMDhseCAtIGFib3J0ZWRcbiIsCi0JCQlpbmZvLT5mbGFzaF9pZCk7Ci0JCXJldHVybiAxOwotCX0KLQotCXByb3QgPSAwOwotCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgewotCQkJcHJvdCsrOwotCQl9Ci0JfQotCi0JaWYgKHByb3QpIHsKLQkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAotCQkJcHJvdCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmICgiXG4iKTsKLQl9Ci0KLQlsYXN0ICA9IGdldF90aW1lcigwKTsKLQotCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3QgJiYgcmNvZGUgPT0gMDsgc2VjdCsrKSB7Ci0KLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gIT0gMCkJLyogcHJvdGVjdGVkLCBza2lwIGl0ICovCi0JCQljb250aW51ZTsKLQotCQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQkJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotCi0JCWFkZHIgPSAoRlBXViAqKShpbmZvLT5zdGFydFtzZWN0XSk7Ci0JCWlmIChpbnRlbCkgewotCQkJKmFkZHIgPSAoRlBXKTB4MDA1MDAwNTA7IC8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLwotCQkJKmFkZHIgPSAoRlBXKTB4MDAyMDAwMjA7IC8qIGVyYXNlIHNldHVwICovCi0JCQkqYWRkciA9IChGUFcpMHgwMEQwMDBEMDsgLyogZXJhc2UgY29uZmlybSAqLwotCQl9Ci0JCWVsc2UgewotCQkJLyogbXVzdCBiZSBBTUQgc3R5bGUgaWYgbm90IEludGVsICovCi0JCQlGUFdWICpiYXNlOwkJLyogZmlyc3QgYWRkcmVzcyBpbiBiYW5rICovCi0KLQkJCWJhc2UgPSAoRlBXViAqKShpbmZvLT5zdGFydFswXSk7Ci0JCQliYXNlW0ZMQVNIX0NZQ0xFMV0gPSAoRlBXKTB4MDBBQTAwQUE7CS8qIHVubG9jayAqLwotCQkJYmFzZVtGTEFTSF9DWUNMRTJdID0gKEZQVykweDAwNTUwMDU1OwkvKiB1bmxvY2sgKi8KLQkJCWJhc2VbRkxBU0hfQ1lDTEUxXSA9IChGUFcpMHgwMDgwMDA4MDsJLyogZXJhc2UgbW9kZSAqLwotCQkJYmFzZVtGTEFTSF9DWUNMRTFdID0gKEZQVykweDAwQUEwMEFBOwkvKiB1bmxvY2sgKi8KLQkJCWJhc2VbRkxBU0hfQ1lDTEUyXSA9IChGUFcpMHgwMDU1MDA1NTsJLyogdW5sb2NrICovCi0JCQkqYWRkciA9IChGUFcpMHgwMDMwMDAzMDsJLyogZXJhc2Ugc2VjdG9yICovCi0JCX0KLQotCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLQkJaWYgKGZsYWcpCi0JCQllbmFibGVfaW50ZXJydXB0cygpOwotCi0JCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOwotCi0JCS8qIHdhaXQgYXQgbGVhc3QgNTB1cyBmb3IgQU1ELCA4MHVzIGZvciBJbnRlbC4KLQkJICogTGV0J3Mgd2FpdCAxIG1zLgotCQkgKi8KLQkJdWRlbGF5ICgxMDAwKTsKLQotCQl3aGlsZSAoKCphZGRyICYgKEZQVykweDAwODAwMDgwKSAhPSAoRlBXKTB4MDA4MDAwODApIHsKLQkJCWlmICgobm93ID0gZ2V0X3RpbWVyKHN0YXJ0KSkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgewotCQkJCXByaW50ZiAoIlRpbWVvdXRcbiIpOwotCi0JCQkJaWYgKGludGVsKSB7Ci0JCQkJCS8qIHN1c3BlbmQgZXJhc2UJKi8KLQkJCQkJKmFkZHIgPSAoRlBXKTB4MDBCMDAwQjA7Ci0JCQkJfQotCi0JCQkJZmxhc2hfcmVzZXQoaW5mbyk7CS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotCQkJCXJjb2RlID0gMTsJCS8qIGZhaWxlZCAqLwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLwotCQkJaWYgKChnZXRfdGltZXIobGFzdCkpID4gQ0ZHX0haKSB7LyogZXZlcnkgc2Vjb25kICovCi0JCQkJcHV0YyAoJy4nKTsKLQkJCQlsYXN0ID0gZ2V0X3RpbWVyKDApOwotCQkJfQotCQl9Ci0KLQkJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KLQkJaWYgKChnZXRfdGltZXIobGFzdCkpID4gQ0ZHX0haKSB7CS8qIGV2ZXJ5IHNlY29uZCAqLwotCQkJcHV0YyAoJy4nKTsKLQkJCWxhc3QgPSBnZXRfdGltZXIoMCk7Ci0JCX0KLQotCQlmbGFzaF9yZXNldChpbmZvKTsJLyogcmVzZXQgdG8gcmVhZCBtb2RlCSovCi0JfQotCi0JcHJpbnRmICgiIGRvbmVcbiIpOwotCXJldHVybiByY29kZTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICovCi1pbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCi17Ci0JRlBXIGRhdGEgPSAwOyAvKiAxNiBvciAzMiBiaXQgd29yZCwgbWF0Y2hlcyBmbGFzaCBidXMgd2lkdGggb24gTVBDOFhYICovCi0JaW50IGJ5dGVzOwkgIC8qIG51bWJlciBvZiBieXRlcyB0byBwcm9ncmFtIGluIGN1cnJlbnQgd29yZAkJKi8KLQlpbnQgbGVmdDsJICAvKiBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byBwcm9ncmFtCQkJKi8KLQlpbnQgaSwgcmVzOwotCi0JZm9yIChsZWZ0ID0gY250LCByZXMgPSAwOwotCQkgbGVmdCA+IDAgJiYgcmVzID09IDA7Ci0JCSBhZGRyICs9IHNpemVvZihkYXRhKSwgbGVmdCAtPSBzaXplb2YoZGF0YSkgLSBieXRlcykgewotCi0JCWJ5dGVzID0gYWRkciAmIChzaXplb2YoZGF0YSkgLSAxKTsKLQkJYWRkciAmPSB+KHNpemVvZihkYXRhKSAtIDEpOwotCi0JCS8qIGNvbWJpbmUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkYXRhIHNvIGNhbiBwcm9ncmFtCi0JCSAqIGFuIGVudGlyZSB3b3JkIG9mIDE2IG9yIDMyIGJpdHMKLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGF0YSk7IGkrKykgewotCQkJZGF0YSA8PD0gODsKLQkJCWlmIChpIDwgYnl0ZXMgfHwgaSAtIGJ5dGVzID49IGxlZnQgKQotCQkJCWRhdGEgKz0gKigodWNoYXIgKilhZGRyICsgaSk7Ci0JCQllbHNlCi0JCQkJZGF0YSArPSAqc3JjKys7Ci0JCX0KLQotCQkvKiB3cml0ZSBvbmUgd29yZCB0byB0aGUgZmxhc2ggKi8KLQkJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSB7Ci0JCWNhc2UgRkxBU0hfTUFOX0FNRDoKLQkJCXJlcyA9IHdyaXRlX3dvcmRfYW1kKGluZm8sIChGUFdWICopYWRkciwgZGF0YSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIHVua25vd24gZmxhc2ggdHlwZSwgZXJyb3IhICovCi0JCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0JCQlyZXMgPSAxOwkvKiBub3QgcmVhbGx5IGEgdGltZW91dCwgYnV0IGdpdmVzIGVycm9yICovCi0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiAocmVzKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogV3JpdGUgYSB3b3JkIHRvIEZsYXNoIGZvciBBTUQgRkxBU0gKLSAqIEEgd29yZCBpcyAxNiBvciAzMiBiaXRzLCB3aGljaGV2ZXIgdGhlIGJ1cyB3aWR0aCBvZiB0aGUgZmxhc2ggYmFuawotICogKG5vdCBhbiBpbmRpdmlkdWFsIGNoaXApIGlzLgotICoKLSAqIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICovCi1zdGF0aWMgaW50IHdyaXRlX3dvcmRfYW1kIChmbGFzaF9pbmZvX3QgKmluZm8sIEZQV1YgKmRlc3QsIEZQVyBkYXRhKQotewotCXVsb25nIHN0YXJ0OwotCWludCBmbGFnOwotCWludCByZXMgPSAwOwkvKiByZXN1bHQsIGFzc3VtZSBzdWNjZXNzCSovCi0JRlBXViAqYmFzZTsJCS8qIGZpcnN0IGFkZHJlc3MgaW4gZmxhc2ggYmFuawkqLwotCi0JLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCi0JaWYgKCgqZGVzdCAmIGRhdGEpICE9IGRhdGEpIHsKLQkJcmV0dXJuICgyKTsKLQl9Ci0KLQotCWJhc2UgPSAoRlBXViAqKShpbmZvLT5zdGFydFswXSk7Ci0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQliYXNlW0ZMQVNIX0NZQ0xFMV0gPSAoRlBXKTB4MDBBQTAwQUE7CS8qIHVubG9jayAqLwotCWJhc2VbRkxBU0hfQ1lDTEUyXSA9IChGUFcpMHgwMDU1MDA1NTsJLyogdW5sb2NrICovCi0JYmFzZVtGTEFTSF9DWUNMRTFdID0gKEZQVykweDAwQTAwMEEwOwkvKiBzZWxlY3RzIHByb2dyYW0gbW9kZSAqLwotCi0JKmRlc3QgPSBkYXRhOwkJLyogc3RhcnQgcHJvZ3JhbW1pbmcgdGhlIGRhdGEJKi8KLQotCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwotCWlmIChmbGFnKQotCQllbmFibGVfaW50ZXJydXB0cygpOwotCi0Jc3RhcnQgPSBnZXRfdGltZXIgKDApOwotCi0JLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLwotCXdoaWxlIChyZXMgPT0gMCAmJiAoKmRlc3QgJiAoRlBXKTB4MDA4MDAwODApICE9IChkYXRhICYgKEZQVykweDAwODAwMDgwKSkgewotCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7Ci0JCQkqZGVzdCA9IChGUFcpMHgwMEYwMDBGMDsJLyogcmVzZXQgYmFuayAqLwotCQkJcmVzID0gMTsKLQkJfQotCX0KLQotCXJldHVybiAocmVzKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2Vtay90b3A1MjAwL3RvcDUyMDAuYyBiL2JvYXJkL2Vtay90b3A1MjAwL3RvcDUyMDAuYwppbmRleCAzOTY5ZTJhLi5iNjVkMmQwIDEwMDY0NAotLS0gYS9ib2FyZC9lbWsvdG9wNTIwMC90b3A1MjAwLmMKKysrIGIvYm9hcmQvZW1rL3RvcDUyMDAvdG9wNTIwMC5jCkBAIC0xNTYsNTMgKzE1Niw5IEBACiBpbnQgbWlzY19pbml0X3IgKHZvaWQpCiB7CiAJLyogcmVhZCAnZmFjdG9yeScgcGFydCBvZiBFRVBST00gKi8KLQl1Y2hhciBidWZbODFdOwotCXVjaGFyICpwOwotCXVpbnQgbGVuZ3RoOwotCXVpbnQgYWRkcjsKLQl1aW50IGxlbjsKLQotCS8qIGdldCBsZW5ndGggZmlyc3QgKi8KLQlhZGRyID0gQ0ZHX0ZBQ1RfT0ZGU0VUOwotCWlmIChlZXByb21fcmVhZCAoQ0ZHX0kyQ19GQUNUX0FERFIsIGFkZHIsIGJ1ZiwgMikpIHsKLWJhaWxvdXQ6Ci0JCXByaW50ZiAoImNhbm5vdCByZWFkIGZhY3RvcnkgY29uZmlndXJhdGlvblxuIik7Ci0JCXByaW50ZiAoImJlIHN1cmUgdG8gc2V0IGV0aGFkZHIJeW91cnNlbGYhXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWxlbmd0aCA9IGJ1ZlswXSArIChidWZbMV0gPDwgOCk7Ci0JYWRkciArPSAyOwotCi0JLyogc2FuaXR5IGNoZWNrICovCi0JaWYgKGxlbmd0aCA8IDIwIHx8IGxlbmd0aCA+IENGR19GQUNUX1NJWkUgLSAyKQotCQlnb3RvIGJhaWxvdXQ7CisJZXh0ZXJuIHZvaWQgcmVhZF9mYWN0b3J5X3IgKHZvaWQpOworCXJlYWRfZmFjdG9yeV9yICgpOwogCi0JLyogcmVhZCBsaW5lcyAqLwotCXdoaWxlIChsZW5ndGggPiAwKSB7Ci0JCS8qIHJlYWQgb25lIGxpbmUgKi8KLQkJbGVuID0gbGVuZ3RoID4gODAgPyA4MCA6IGxlbmd0aDsKLQkJaWYgKGVlcHJvbV9yZWFkIChDRkdfSTJDX0ZBQ1RfQUREUiwgYWRkciwgYnVmLCBsZW4pKQotCQkJZ290byBiYWlsb3V0OwotCQkvKiBtYXJrIGVuZCBvZiBidWZmZXIgKi8KLQkJYnVmW2xlbl0gPSAwOwotCQkvKiBzZWFyY2ggZW5kIG9mIGxpbmUgKi8KLQkJZm9yIChwID0gYnVmOyAqcCAmJiAqcCAhPSAweDBhOyBwKyspOwotCQlpZiAoISpwKQotCQkJZ290byBiYWlsb3V0OwotCQkqcCsrID0gMDsKLQkJLyogYWR2YW5jZSB0byBuZXh0IGxpbmUgc3RhcnQgKi8KLQkJbGVuZ3RoIC09IHAgLSBidWY7Ci0JCWFkZHIgKz0gcCAtIGJ1ZjsKLQkJLypwcmludGYgKCIlc1xuIiwgYnVmKTsgKi8KLQkJLyogc2VhcmNoIGZvciBvdXIgc3BlY2lmaWMgZW50cnkgKi8KLQkJaWYgKCFzdHJuY21wICgoY2hhciAqKSBidWYsICJbUkxBL2xhbi9FdGhlcm5ldF0gIiwgMTkpKSB7Ci0JCQlzZXRlbnYgKCJldGhhZGRyIiwgYnVmICsgMTkpOwotCQl9IGVsc2UgaWYgKCFzdHJuY21wICgoY2hhciAqKSBidWYsICJbQk9BUkQvU0VSSUFMXSAiLCAxNSkpIHsKLQkJCXNldGVudiAoInNlcmlhbCMiLCBidWYgKyAxNSk7Ci0JCX0gZWxzZSBpZiAoIXN0cm5jbXAgKChjaGFyICopIGJ1ZiwgIltCT0FSRC9UWVBFXSAiLCAxMykpIHsKLQkJCXNldGVudiAoImJvYXJkX2lkIiwgYnVmICsgMTMpOwotCQl9Ci0JfQogCXJldHVybiAoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2Vtay90b3A4NjAvTWFrZWZpbGUgYi9ib2FyZC9lbWsvdG9wODYwL01ha2VmaWxlCmluZGV4IDEzY2U5ZmMuLmE3NGRkMmYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Vtay90b3A4NjAvTWFrZWZpbGUKKysrIGIvYm9hcmQvZW1rL3RvcDg2MC9NYWtlZmlsZQpAQCAtMjUsNyArMjUsNyBAQAogCiBMSUIJPSBsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK09CSlMJPSAkKEJPQVJEKS5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi92cGQubyAuLi9jb21tb24vYW03OWM4NzQubwogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9lbWsvdG9wODYwL2ZsYXNoLmMgYi9ib2FyZC9lbWsvdG9wODYwL2ZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmODI3ZGYuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZW1rL3RvcDg2MC9mbGFzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDg5ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDMKLSAqIEVNSyBFbGVrdHJvbmlrIEdtYkggPHd3dy5lbWstZWxla3Ryb25pay5kZT4KLSAqIFJlaW5oYXJkIE1leWVyIDxyLm1leWVyQGVtay1lbGVrdHJvbmlrLmRlPgotICoKLSAqIGNvcGllZCBmcm9tIHRoZSBCTVcgUG9ydCAtIHNlZW1zIHRoYXQgaXRzIHNpbWlsaWFyIGVub3VnaAotICogdG8gYmUgZWFzaWx5IGFkYXBlZCA7KSAtLS0gV2VsbCwgaXQgdHVybmVkIG91dCB0byBiZWNvbWUgYQotICogbWVyZ2VyIGJldHdlZW4gcGFydHMgb2YgdGhlIEVNS3N0YXggRmxhc2ggcm91dGluZXMgYW5kIHRoZQotICogQk1XIGZ1bnRpb24gZnJhbWVzLi4uCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxtcGM4eHguaD4KLQotI2RlZmluZQlGTEFTSF9XT1JEX1NJWkUJCXVuc2lnbmVkIHNob3J0Ci0jZGVmaW5lIEZMQVNIX1dPUkRfV0lEVEgJKHNpemVvZiAoRkxBU0hfV09SRF9TSVpFKSkKLQotZmxhc2hfaW5mb190IGZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107IC8qIGluZm8gZm9yIEZMQVNIIGNoaXBzICAgICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9ucwotICovCi1zdGF0aWMgaW50IHdyaXRlX3dvcmQgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSk7Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBzb2Z0d2FyZSBwcm9kdWN0IElEIGVudHJ5L2V4aXQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIEZsYXNoUHJvZHVjdElkTW9kZSAoCi0Jdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpiLAotCWludCBvbl9vZmYpCi17Ci0JYlsweDU1NTVdID0gMHhhYTsKLQliWzB4MmFhYV0gPSAweDU1OwotCWJbMHg1NTU1XSA9IG9uX29mZiA/IDB4OTAgOiAweGYwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIHNlY3RvciBlcmFzZSBzdGFydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgRmxhc2hTZWN0b3JFcmFzZSAoCi0Jdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpiLAotCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYSkKLXsKLQliWzB4NTU1NV0gPSAweGFhOwotCWJbMHgyYWFhXSA9IDB4NTU7Ci0JYlsweDU1NTVdID0gMHg4MDsKLQliWzB4NTU1NV0gPSAweGFhOwotCWJbMHgyYWFhXSA9IDB4NTU7Ci0JYVswXSA9IDB4MzA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcHJvZ3JhbSBhIHdvcmQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIEZsYXNoUHJvZ1dvcmQgKAotCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYiwKLQl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmEsCi0JRkxBU0hfV09SRF9TSVpFIHYpCi17Ci0JYlsweDU1NTVdID0gMHhhYTsKLQliWzB4MmFhYV0gPSAweDU1OwotCWJbMHg1NTU1XSA9IDB4YTA7Ci0JYVswXSA9IHY7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcmVzZXQgYmFuaywgYmFjayB0byByZWFkIG1vZGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIEZsYXNoUmVzZXQgKHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYikKLXsKLQliWzBdID0gMHhmMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpZGVudGlmeSBGTEFTSCBjaGlwCi0gKiB0aGlzIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHRoZSBGbGFzaEdldFR5cGUoKSBmdW5jdGlvbiBpbiBFTUtzdGF4Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpCi17Ci0Jdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICogY29uc3QgZmxhc2ggPSAodm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICopIENGR19GTEFTSF9CQVNFOwotCUZMQVNIX1dPUkRfU0laRQltYW51LCBkZXY7Ci0JZmxhc2hfaW5mb190ICogY29uc3QgcGZsaW5mbyA9ICZmbGFzaF9pbmZvWzBdOwotCWludCBqOwotCi0JLyogZ2V0IElkIEJ5dGVzICovCi0JRmxhc2hQcm9kdWN0SWRNb2RlIChmbGFzaCwgMSk7Ci0JbWFudSA9IGZsYXNoWzBdOwotCWRldiAgPSBmbGFzaFsxXTsKLQlGbGFzaFByb2R1Y3RJZE1vZGUgKGZsYXNoLCAwKTsKLQotCXBmbGluZm8tPnNpemUgPSAwOwotCXBmbGluZm8tPnNlY3Rvcl9jb3VudCA9IDA7Ci0JcGZsaW5mby0+Zmxhc2hfaWQgPSAweGZmZmZmZmZmOwotCXBmbGluZm8tPnBvcnR3aWR0aCA9IEZMQVNIX0NGSV8xNkJJVDsKLQlwZmxpbmZvLT5jaGlwd2lkdGggPSBGTEFTSF9DRklfQlkxNjsKLQotCXN3aXRjaCAobWFudSYweGZmKQotCXsKLQljYXNlIDB4MDE6CS8qIEFNRCAqLwotCQlwZmxpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQ7Ci0JCXN3aXRjaCAoZGV2JjB4ZmYpCi0JCXsKLQkJY2FzZSAweDQ5OgotCQkJcGZsaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDA7Ci0JCQlwZmxpbmZvLT5zZWN0b3JfY291bnQgPSAzNTsKLQkJCXBmbGluZm8tPmZsYXNoX2lkIHw9IEZMQVNIX0FNMTYwQjsKLQkJCXBmbGluZm8tPnN0YXJ0WzBdID0gQ0ZHX0ZMQVNIX0JBU0U7Ci0JCQlwZmxpbmZvLT5zdGFydFsxXSA9IENGR19GTEFTSF9CQVNFICsgMHg0MDAwOwotCQkJcGZsaW5mby0+c3RhcnRbMl0gPSBDRkdfRkxBU0hfQkFTRSArIDB4NjAwMDsKLQkJCXBmbGluZm8tPnN0YXJ0WzNdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDgwMDA7Ci0JCQlmb3IgKGogPSA0OyBqIDwgMzU7IGorKykKLQkJCXsKLQkJCQlwZmxpbmZvLT5zdGFydFtqXSA9IENGR19GTEFTSF9CQVNFICsgMHgwMDAxMDAwMCAqIChqLTMpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweGY5OgotCQkJcGZsaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7Ci0JCQlwZmxpbmZvLT5zZWN0b3JfY291bnQgPSA3MTsKLQkJCXBmbGluZm8tPmZsYXNoX2lkIHw9IEZMQVNIX0FNMzIwQjsKLQkJCXBmbGluZm8tPnN0YXJ0WzBdID0gQ0ZHX0ZMQVNIX0JBU0U7Ci0JCQlwZmxpbmZvLT5zdGFydFsxXSA9IENGR19GTEFTSF9CQVNFICsgMHg0MDAwOwotCQkJcGZsaW5mby0+c3RhcnRbMl0gPSBDRkdfRkxBU0hfQkFTRSArIDB4NjAwMDsKLQkJCXBmbGluZm8tPnN0YXJ0WzNdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDgwMDA7Ci0JCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQotCQkJewotCQkJCXBmbGluZm8tPnN0YXJ0W2pdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDAwMDAyMDAwICogKGopOwotCQkJfQotCQkJZm9yIChqID0gODsgaiA8IDcxOyBqKyspCi0JCQl7Ci0JCQkJcGZsaW5mby0+c3RhcnRbal0gPSBDRkdfRkxBU0hfQkFTRSArIDB4MDAwMTAwMDAgKiAoai03KTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGYgKCJ1bmtub3duIEFNRCBkZXY9JXggIiwgZGV2KTsKLQkJCXBmbGluZm8tPmZsYXNoX2lkIHw9IEZMQVNIX1VOS05PV047Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwcmludGYgKCJ1bmtub3duIG1hbnU9JXggIiwgbWFudSk7Ci0JfQotCXJldHVybiBwZmxpbmZvLT5zaXplOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIHByaW50IGluZm8gYWJvdXQgYSBGTEFTSAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBmbGFzaF9wcmludF9pbmZvIChmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIJdW5rW10gPSAiVW5rbm93biI7Ci0JdW5zaWduZWQgaW50CQlpOwotCWNvbnN0IGNoYXIJCQkqbWZjdD11bmssCi0JCQkJCQkqdHlwZT11bms7Ci0KLQlpZihpbmZvLT5mbGFzaF9pZCAhPSBGTEFTSF9VTktOT1dOKQotCXsKLQkJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKQotCQl7Ci0JCWNhc2UgRkxBU0hfTUFOX0FNRDoKLQkJCW1mY3QgPSAiQU1EIjsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKQotCQl7Ci0JCWNhc2UgRkxBU0hfQU0xNjBCOgotCQkJdHlwZSA9ICJBTTI5TFYxNjBCICgxNiBNYml0LCBib3R0b20gYm9vdCBzZWN0KSI7Ci0JCQlicmVhazsKLQkJY2FzZSBGTEFTSF9BTTMyMEI6Ci0JCQl0eXBlID0gIkFNMjlMVjMyMEIgKDMyIE1iaXQsIGJvdHRvbSBib290IHNlY3QpIjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcHJpbnRmICgKLQkJIlxuICBCcmFuZDogJXMgVHlwZTogJXNcbiIKLQkJIiAgU2l6ZTogJWx1IEtCIGluICVkIFNlY3RvcnNcbiIsCi0JCW1mY3QsCi0JCXR5cGUsCi0JCWluZm8tPnNpemUgPj4gMTAsCi0JCWluZm8tPnNlY3Rvcl9jb3VudAotCQkpOwotCi0JcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwotCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQotCXsKLQkJdW5zaWduZWQgbG9uZwlzaXplOwotCQl1bnNpZ25lZCBpbnQJZXJhc2VkOwotCQl1bnNpZ25lZCBsb25nCSpmbGFzaCA9ICh1bnNpZ25lZCBsb25nICopIGluZm8tPnN0YXJ0W2ldOwotCi0JCS8qCi0JCSAqIENoZWNrIGlmIHdob2xlIHNlY3RvciBpcyBlcmFzZWQKLQkJICovCi0JCXNpemUgPQotCQkJKGkgIT0gKGluZm8tPnNlY3Rvcl9jb3VudCAtIDEpKSA/Ci0JCQkoaW5mby0+c3RhcnRbaSArIDFdIC0gaW5mby0+c3RhcnRbaV0pID4+IDIgOgotCQkoaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplIC0gaW5mby0+c3RhcnRbaV0pID4+IDI7Ci0KLQkJZm9yICgKLQkJCWZsYXNoID0gKHVuc2lnbmVkIGxvbmcgKikgaW5mby0+c3RhcnRbaV0sIGVyYXNlZCA9IDE7Ci0JCQkJKGZsYXNoICE9ICh1bnNpZ25lZCBsb25nICopIGluZm8tPnN0YXJ0W2ldICsgc2l6ZSkgJiYgZXJhc2VkOwotCQkJCQlmbGFzaCsrCi0JCQkpCi0JCQllcmFzZWQgPSAqZmxhc2ggPT0gfjB4MFVMOwotCi0JCXByaW50ZiAoCi0JCQkiJXMgJTA4bFggJXMgJXMiLAotCQkJKGkgJSA1KSA/ICIiIDogIlxuICAgIiwKLQkJCWluZm8tPnN0YXJ0W2ldLAotCQkJZXJhc2VkID8gIkUiIDogIiAiLAotCQkJaW5mby0+cHJvdGVjdFtpXSA/ICJSTyIgOiAiICAiCi0JCQkpOwotCX0KLQotCXB1dHMgKCJcbiIpOwotCXJldHVybjsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBlcmFzZSBvbmUgb3IgbW9yZSBzZWN0b3JzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQJZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCi17Ci0Jdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFCSphZGRyID0gKEZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFswXSk7Ci0JaW50CQkJCQkJCWZsYWcsCi0JCQkJCQkJCXByb3QsCi0JCQkJCQkJCXNlY3QsCi0JCQkJCQkJCWxfc2VjdDsKLQl1bG9uZwkJCQkJCXN0YXJ0LAotCQkJCQkJCQlub3csCi0JCQkJCQkJCWxhc3Q7Ci0KLQlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpCi0JewotCQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikKLQkJewotCQkJcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7Ci0JCX0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB8fAotCQkoaW5mby0+Zmxhc2hfaWQgPiAoRkxBU0hfTUFOX1NUTSB8IEZMQVNIX0FNRF9DT01QKSkpCi0JewotCQlwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgLSBhYm9ydGVkXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcHJvdCA9IDA7Ci0JZm9yIChzZWN0PXNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgKytzZWN0KQotCXsKLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pCi0JCXsKLQkJCXByb3QrKzsKLQkJfQotCX0KLQotCWlmIChwcm90KQotCXsKLQkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAotCQkJcHJvdCk7Ci0JfQotCWVsc2UKLQl7Ci0JCXByaW50ZiAoIlxuIik7Ci0JfQotCi0JbF9zZWN0ID0gLTE7Ci0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCi0JZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdDw9c19sYXN0OyBzZWN0KyspCi0JewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKQotCQl7IC8qIG5vdCBwcm90ZWN0ZWQgKi8KLQkJCUZsYXNoU2VjdG9yRXJhc2UgKChGTEFTSF9XT1JEX1NJWkUgKilpbmZvLT5zdGFydFswXSwgKEZMQVNIX1dPUkRfU0laRSAqKWluZm8tPnN0YXJ0W3NlY3RdKTsKLQkJCWxfc2VjdCA9IHNlY3Q7Ci0JCX0KLQl9Ci0KLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoZmxhZykKLQkJZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCS8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwotCXVkZWxheSAoMTAwMCk7Ci0KLQkvKgotCSogV2Ugd2FpdCBmb3IgdGhlIGxhc3QgdHJpZ2dlcmVkIHNlY3RvcgotCSovCi0JaWYgKGxfc2VjdCA8IDApCi0JCWdvdG8gRE9ORTsKLQotCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKLQlsYXN0ICA9IHN0YXJ0OwotCWFkZHIgPSAoRkxBU0hfV09SRF9TSVpFICopaW5mby0+c3RhcnRbbF9zZWN0XTsKLQl3aGlsZSAoKGFkZHJbMF0gJiAweDAwODApICE9IDB4MDA4MCkKLQl7Ci0JCWlmICgobm93ID0gZ2V0X3RpbWVyIChzdGFydCkpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpCi0JCXsKLQkJCXByaW50ZiAoIlRpbWVvdXRcbiIpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KLQkJaWYgKChub3cgLSBsYXN0KSA+IDEwMDApCi0JCXsgIC8qIGV2ZXJ5IHNlY29uZCAqLwotCQkJc2VyaWFsX3B1dGMgKCcuJyk7Ci0JCQlsYXN0ID0gbm93OwotCQl9Ci0JfQotCi0JRE9ORToKLQkvKiByZXNldCB0byByZWFkIG1vZGUgKi8KLQlGbGFzaFJlc2V0ICgoRkxBU0hfV09SRF9TSVpFICopaW5mby0+c3RhcnRbMF0pOwotCi0JcHJpbnRmICgiIGRvbmVcbiIpOwotCXJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKmluZm8sIHVjaGFyICpzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKLXsKLQl1bG9uZwkJY3AsCi0JCQkJd3AsCi0JCQkJZGF0YTsKLQlpbnQJCQlpLAotCQkJCWwsCi0JCQkJcmM7Ci0KLQl3cCA9IChhZGRyICYgfihGTEFTSF9XT1JEX1dJRFRILTEpKTsgICAvKiBnZXQgbG93ZXIgd29yZCBhbGlnbmVkIGFkZHJlc3MgKi8KLQotCS8qCi0JICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcywgaWYgdGhlcmUgYXJlLi4uCi0JICovCi0JaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKQotCXsKLQkJZGF0YSA9IDA7Ci0KLQkJLyogZ2V0IHRoZSBjdXJyZW50IGJlZm9yZSB0aGUgbmV3IGRhdGEgaW50byBvdXIgZGF0YSB3b3JkICovCi0JCWZvciAoaT0wLCBjcD13cDsgaTxsOyArK2ksICsrY3ApCi0JCXsKLQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotCQl9Ci0KLQkJLyogbm93IG1lcmdlIHRoZSB0byBiZSBwcm9ncmFtbWVkIHZhbHVlcyAqLwotCQlmb3IgKDsgaTw0ICYmIGNudD4wOyArK2ksICsrY3AsIC0tY250KQotCQl7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JCX0KLQotCQkvKiBnZXQgdGhlIGN1cnJlbnQgYWZ0ZXIgdGhlIG5ldyBkYXRhIGludG8gb3VyIGRhdGEgd29yZCAqLwotCQlmb3IgKDsgY250PT0wICYmIGk8RkxBU0hfV09SRF9XSURUSDsgKytpLCArK2NwKQotCQl7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQkJfQotCi0JCS8qIG5vdyB3cml0ZSB0aGUgY29tYmluZWQgd29yZCAqLwotCQlpZiAoKHJjID0gd3JpdGVfd29yZCAoaW5mbywgd3AsIGRhdGEpKSAhPSAwKQotCQl7Ci0JCQlyZXR1cm4gKHJjKTsKLQkJfQotCQl3cCArPSBGTEFTSF9XT1JEX1dJRFRIOwotCX0KLQotCS8qCi0JICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0Ci0JICovCi0Jd2hpbGUgKGNudCA+PSBGTEFTSF9XT1JEX1dJRFRIKQotCXsKLQkJZGF0YSA9IDA7Ci0JCWZvciAoaT0wOyBpPEZMQVNIX1dPUkRfV0lEVEg7ICsraSkKLQkJewotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCQl9Ci0JCWlmICgocmMgPSB3cml0ZV93b3JkIChpbmZvLCB3cCwgZGF0YSkpICE9IDApCi0JCXsKLQkJCXJldHVybiAocmMpOwotCQl9Ci0JCXdwICArPSBGTEFTSF9XT1JEX1dJRFRIOwotCQljbnQgLT0gRkxBU0hfV09SRF9XSURUSDsKLQl9Ci0KLQlpZiAoY250ID09IDApCi0JewotCQlyZXR1cm4gKDApOwotCX0KLQotCS8qCi0JICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzLCBpZiB0aGVyZSBhcmUuLi4KLQkgKi8KLQlkYXRhID0gMDsKLQotCS8qIG5vdyBtZXJnZSB0aGUgdG8gYmUgcHJvZ3JhbW1lZCB2YWx1ZXMgKi8KLQlmb3IgKGk9MCwgY3A9d3A7IGk8RkxBU0hfV09SRF9XSURUSCAmJiBjbnQ+MDsgKytpLCArK2NwKQotCXsKLQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCQktLWNudDsKLQl9Ci0KLQkvKiBnZXQgdGhlIGN1cnJlbnQgYWZ0ZXIgdGhlIG5ldyBkYXRhIGludG8gb3VyIGRhdGEgd29yZCAqLwotCWZvciAoOyBpPEZMQVNIX1dPUkRfV0lEVEg7ICsraSwgKytjcCkKLQl7Ci0JCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotCX0KLQotCS8qIG5vdyB3cml0ZSB0aGUgY29tYmluZWQgd29yZCAqLwotCXJldHVybiAod3JpdGVfd29yZCAoaW5mbywgd3AsIGRhdGEpKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBXcml0ZSBhIHdvcmQgdG8gRmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpCi17Ci0Jdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFCSphZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKilpbmZvLT5zdGFydFswXTsKLQl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUJKmRlc3QyID0gKEZMQVNIX1dPUkRfU0laRSAqKWRlc3Q7Ci0JRkxBU0hfV09SRF9TSVpFCQkJCWRhdGEyID0gZGF0YTsKLQl1bG9uZwkJCQkJCXN0YXJ0OwotCWludAkJCQkJCQlmbGFnOwotCi0JLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCi0JaWYgKCgqZGVzdDIgJiBkYXRhMikgIT0gZGF0YTIpCi0JewotCQlyZXR1cm4gKDIpOwotCX0KLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7Ci0KLQlGbGFzaFByb2dXb3JkIChhZGRyMiwgZGVzdDIsIGRhdGEyKTsKLQotCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwotCWlmIChmbGFnKQotCQllbmFibGVfaW50ZXJydXB0cyAoKTsKLQotCS8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KLQlzdGFydCA9IGdldF90aW1lciAoMCk7Ci0Jd2hpbGUgKCgqZGVzdDIgJiAweDAwODApICE9IChkYXRhMiAmIDB4MDA4MCkpCi0JewotCQlpZiAoZ2V0X3RpbWVyIChzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkKLQkJewotCQkJcmV0dXJuICgxKTsKLQkJfQotCX0KLQotCXJldHVybiAoMCk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZW1rL3RvcDg2MC90b3A4NjAuYyBiL2JvYXJkL2Vtay90b3A4NjAvdG9wODYwLmMKaW5kZXggZDEzYmU5OC4uOTMxYzBkMSAxMDA2NDQKLS0tIGEvYm9hcmQvZW1rL3RvcDg2MC90b3A4NjAuYworKysgYi9ib2FyZC9lbWsvdG9wODYwL3RvcDg2MC5jCkBAIC0xMjAsNTggKzEyMCwyOSBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHByZXBhcmUgZm9yIEZMQVNIIGRldGVjdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBmbGFzaF9wcmVpbml0KHZvaWQpCit7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZmluYWxpemUgRkxBU0ggc2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZmxhc2hfYWZ0ZXJpbml0KHVpbnQgYmFuaywgdWxvbmcgc3RhcnQsIHVsb25nIHNpemUpCit7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogb3RoZXJpbml0cyBhZnRlciBSQU0gaXMgdGhlcmUgYW5kIHdlIGFyZSByZWxvY2F0ZWQgdG8gUkFNCiAgKiBub3RlOiB0aG91Z2ggdGhpcyBpcyBhbiBpbnQgZnVuY3Rpb24sIG5vYm9keSBjYXJlcyBmb3IgdGhlIHJlc3VsdCEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBtaXNjX2luaXRfciAodm9pZCkKIHsKIAkvKiByZWFkICdmYWN0b3J5JyBwYXJ0IG9mIEVFUFJPTSAqLwotCXVjaGFyIGJ1Zls4MV07Ci0JdWNoYXIgKnA7Ci0JdWludCBsZW5ndGg7Ci0JdWludCBhZGRyOwotCXVpbnQgbGVuOworCWV4dGVybiB2b2lkIHJlYWRfZmFjdG9yeV9yICh2b2lkKTsKKwlyZWFkX2ZhY3RvcnlfciAoKTsKIAotCS8qIGdldCBsZW5ndGggZmlyc3QgKi8KLQlhZGRyID0gQ0ZHX0ZBQ1RfT0ZGU0VUOwotCWlmIChlZXByb21fcmVhZCAoQ0ZHX0kyQ19GQUNUX0FERFIsIGFkZHIsIGJ1ZiwgMikpIHsKLQkgIGJhaWxvdXQ6Ci0JCXByaW50ZiAoImNhbm5vdCByZWFkIGZhY3RvcnkgY29uZmlndXJhdGlvblxuIik7Ci0JCXByaW50ZiAoImJlIHN1cmUgdG8gc2V0IGV0aGFkZHIJeW91cnNlbGYhXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWxlbmd0aCA9IGJ1ZlswXSArIChidWZbMV0gPDwgOCk7Ci0JYWRkciArPSAyOwotCi0JLyogc2FuaXR5IGNoZWNrICovCi0JaWYgKGxlbmd0aCA8IDIwIHx8IGxlbmd0aCA+IENGR19GQUNUX1NJWkUgLSAyKQotCQlnb3RvIGJhaWxvdXQ7Ci0KLQkvKiByZWFkIGxpbmVzICovCi0Jd2hpbGUgKGxlbmd0aCA+IDApIHsKLQkJLyogcmVhZCBvbmUgbGluZSAqLwotCQlsZW4gPSBsZW5ndGggPiA4MCA/IDgwIDogbGVuZ3RoOwotCQlpZiAoZWVwcm9tX3JlYWQgKENGR19JMkNfRkFDVF9BRERSLCBhZGRyLCBidWYsIGxlbikpCi0JCQlnb3RvIGJhaWxvdXQ7Ci0JCS8qIG1hcmsgZW5kIG9mIGJ1ZmZlciAqLwotCQlidWZbbGVuXSA9IDA7Ci0JCS8qIHNlYXJjaCBlbmQgb2YgbGluZSAqLwotCQlmb3IgKHAgPSBidWY7ICpwICYmICpwICE9IDB4MGE7IHArKyk7Ci0JCWlmICghKnApCi0JCQlnb3RvIGJhaWxvdXQ7Ci0JCSpwKysgPSAwOwotCQkvKiBhZHZhbmNlIHRvIG5leHQgbGluZSBzdGFydCAqLwotCQlsZW5ndGggLT0gcCAtIGJ1ZjsKLQkJYWRkciArPSBwIC0gYnVmOwotCQkvKnByaW50ZiAoIiVzXG4iLCBidWYpOyAqLwotCQkvKiBzZWFyY2ggZm9yIG91ciBzcGVjaWZpYyBlbnRyeSAqLwotCQlpZiAoIXN0cm5jbXAgKChjaGFyICopIGJ1ZiwgIltSTEEvbGFuL0V0aGVybmV0XSAiLCAxOSkpIHsKLQkJCXNldGVudiAoImV0aGFkZHIiLCBidWYgKyAxOSk7Ci0JCX0gZWxzZSBpZiAoIXN0cm5jbXAgKChjaGFyICopIGJ1ZiwgIltCT0FSRC9TRVJJQUxdICIsIDE1KSkgewotCQkJc2V0ZW52ICgic2VyaWFsIyIsIGJ1ZiArIDE1KTsKLQkJfSBlbHNlIGlmICghc3RybmNtcCAoKGNoYXIgKikgYnVmLCAiW0JPQVJEL1RZUEVdICIsIDEzKSkgewotCQkJc2V0ZW52ICgiYm9hcmRfaWQiLCBidWYgKyAxMyk7Ci0JCX0KLQl9CiAJcmV0dXJuICgwKTsKIH0KKwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL21pcDQwNS9taXA0MDUuYyBiL2JvYXJkL21wbC9taXA0MDUvbWlwNDA1LmMKaW5kZXggNzA5ZTFhNC4uYjFhZGRlNiAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL21pcDQwNS9taXA0MDUuYworKysgYi9ib2FyZC9tcGwvbWlwNDA1L21pcDQwNS5jCkBAIC03MDksNiArNzA5LDE4IEBACiAJCQl2YXIsIHBjYnJldiArICdBJywgcGFydCAmIDB4N0YsIHZlcnMpOwogfQogCisKKyNpZmRlZiBDT05GSUdfUE9TVAorLyoKKyAqIFJldHVybnMgMSBpZiBrZXlzIHByZXNzZWQgdG8gc3RhcnQgdGhlIHBvd2VyLW9uIGxvbmctcnVubmluZyB0ZXN0cworICogQ2FsbGVkIGZyb20gYm9hcmRfaW5pdF9mKCkuCisgKi8KK2ludCBwb3N0X2hvdGtleXNfcHJlc3NlZCh2b2lkKQoreworCXJldHVybiAwOwkvKiBObyBob3RrZXlzIHN1cHBvcnRlZCAqLworfQorI2VuZGlmCisKIGV4dGVybiB2b2lkIG1lbV90ZXN0X3JlbG9jKHZvaWQpOwogZXh0ZXJuIGludCBta19kYXRlIChjaGFyICosIHN0cnVjdCBydGNfdGltZSAqKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDE2MTBpbm4vb21hcDE2MTBpbm5vdmF0b3IuYyBiL2JvYXJkL29tYXAxNjEwaW5uL29tYXAxNjEwaW5ub3ZhdG9yLmMKaW5kZXggZDczN2YxYi4uMGY2N2EwYyAxMDA2NDQKLS0tIGEvYm9hcmQvb21hcDE2MTBpbm4vb21hcDE2MTBpbm5vdmF0b3IuYworKysgYi9ib2FyZC9vbWFwMTYxMGlubi9vbWFwMTYxMGlubm92YXRvci5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CiAgKiBLc2hpdGlqIEd1cHRhIDxLc2hpdGlqQHRpLmNvbT4KICAqCisgKiBNb2RpZmllZCBmb3IgT01BUCAxNjEwIEgyIGJvYXJkIGJ5IE5pc2hhbnQgS2FtYXQsIEphbiAyMDA0CisgKiAKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgogICoKQEAgLTEwNSw3ICsxMDcsMjggQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGV0aGVyX19pbml0ICh2b2lkKQogewotI2RlZmluZSBFVEhfQ09OVFJPTF9SRUcgMHgwNDAwMDAwYgorI2RlZmluZSBFVEhfQ09OVFJPTF9SRUcgMHgwNDAwMDMwYgorCisjaWZkZWYgQ09ORklHX0gyX09NQVAxNjEwCisJI2RlZmluZSBMQU5fUkVTRVRfUkVHSVNURVIgMHgwNDAwMDAxYworCisJLyogVGhlIGRlYnVnIGJvYXJkIG9uIHdoaWNoIHRoZSBsYW4gY2hpcCByZXNpZGVzIG1heSBub3QgYmUgcG93ZXJlZCAKKwkgKiBPTiBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBPTUFQIGNoaXAuIFNvIHdhaXQgaW4gYSBsb29wIHVudGlsIHRoZSAKKwkgKiBsYW4gcmVzZXQgcmVnaXN0ZXIgKG9uIHRoZSBkZWJ1ZyBib2FyZCkgaXMgYXZhaWxhYmxlIChwb3dlcmVkIG9uKSAKKwkgKiBhbmQgcmVzZXQgdGhlIGxhbiBjaGlwLgorCSAqLworCisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgTEFOX1JFU0VUX1JFR0lTVEVSKSA9IDB4MDAwMDsKKwlkbyB7CisJCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIExBTl9SRVNFVF9SRUdJU1RFUikgPSAweDAwMDE7CisJCXVkZWxheSAoMyk7CisJfSB3aGlsZSAoKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgTEFOX1JFU0VUX1JFR0lTVEVSKSAhPSAweDAwMDEpOworCQorCWRvIHsKKwkJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgTEFOX1JFU0VUX1JFR0lTVEVSKSA9IDB4MDAwMDsKKwkJdWRlbGF5ICgzKTsKKwl9IHdoaWxlICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBMQU5fUkVTRVRfUkVHSVNURVIpICE9IDB4MDAwMCk7CisjZW5kaWYKIAogCSooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgRVRIX0NPTlRST0xfUkVHKSAmPSB+MHgwMTsKIAl1ZGVsYXkgKDMpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDE2MTBpbm4vcGxhdGZvcm0uUyBiL2JvYXJkL29tYXAxNjEwaW5uL3BsYXRmb3JtLlMKaW5kZXggY2FkMTUyYi4uMTc3NTY5NSAxMDA2NDQKLS0tIGEvYm9hcmQvb21hcDE2MTBpbm4vcGxhdGZvcm0uUworKysgYi9ib2FyZC9vbWFwMTYxMGlubi9wbGF0Zm9ybS5TCkBAIC01LDYgKzUsOCBAQAogICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgogICogS3NoaXRpaiBHdXB0YSA8S3NoaXRpakB0aS5jb20+CiAgKgorICogTW9kaWZpZWQgZm9yIE9NQVAgMTYxMCBIMiBib2FyZCBieSBOaXNoYW50IEthbWF0LCBKYW4gMjAwNAorICogCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KICAqCkBAIC0yNDgsNiArMjUwLDIyIEBACiAJbGRyCXIxLAlWQUxfVENfRU1JRlNfQ1MzX0NPTkZJRwogCWxkcglyMCwJUkVHX1RDX0VNSUZTX0NTM19DT05GSUcKIAlzdHIJcjEsCVtyMF0gLyogQ2hpcCBTZWxlY3QgMyAqLworCisjaWZkZWYgQ09ORklHX0gyX09NQVAxNjEwCQorCS8qIGluc2VydGluZyBhZGRpdGlvbmFsIDIgY2xvY2sgY3ljbGUgaG9sZCB0aW1lIGZvciBMQU4gKi8KKwlsZHIgICAgIHIwLCAgICAgUkVHX1RDX0VNSUZTX0NTMV9BRFZBTkNFRAorCWxkciAgICAJcjEsICAgICBWQUxfVENfRU1JRlNfQ1MxX0FEVkFOQ0VECisJc3RyICAgICByMSwgICAgIFtyMF0KKyNlbmRpZgorCS8qIFN0YXJ0IE1QVSBUaW1lciAxICovCisJbGRyCXIwLAlSRUdfTVBVX0xPQURfVElNRVIKKwlsZHIJcjEsCVZBTF9NUFVfTE9BRF9USU1FUgorCXN0cglyMSwJW3IwXQorCisJbGRyCXIwLAlSRUdfTVBVX0NOVExfVElNRVIKKwlsZHIJcjEsCVZBTF9NUFVfQ05UTF9USU1FUgorCXN0cglyMSwJW3IwXQorCiAJLyogYmFjayB0byBhcmNoIGNhbGxpbmcgY29kZSAqLwogCW1vdglwYywJbHIKIApAQCAtMjY2LDYgKzI4NCwxMSBAQAogUkVHX1RDX0VNSUZTX0NTM19DT05GSUc6CS8qIDMyIGJpdHMgKi8KIAkud29yZCAweGZmZmVjYzFjCiAKKyNpZmRlZiBDT05GSUdfSDJfT01BUDE2MTAKK1JFR19UQ19FTUlGU19DUzFfQURWQU5DRUQ6CS8qIDMyIGJpdHMgKi8KKwkud29yZCAweGZmZmVjYzU0CisjZW5kaWYKKwogLyogTVBVIGNsb2NrL3Jlc2V0L3Bvd2VyIG1vZGUgY29udHJvbCByZWdpc3RlcnMgKi8KIFJFR19BUk1fQ0tDVEw6CQkJLyogMTYgYml0cyAqLwogCS53b3JkIDB4ZmZmZWNlMDAKQEAgLTMzOCw2ICszNjEsMTEgQEAKIFJFR19XQVRDSERPRzoKIAkud29yZCAweGZmZmVjODA4CiAKK1JFR19NUFVfTE9BRF9USU1FUjoKKwkud29yZCAweGZmZmVjNjAwCitSRUdfTVBVX0NOVExfVElNRVI6CisJLndvcmQgMHhmZmZlYzUwMAorCiAvKiA5NiBNSHogU2Ftc3VuZyBNb2JpbGUgRERSICovCiBTRFJBTV9DT05GSUdfVkFMOgogCS53b3JkIDB4MDAxMjAwZjQKQEAgLTM1MCw2ICszNzgsNyBAQAogVkFMX0RQTEwxX0NUTDoKIAkud29yZCAweDI4MzAKIAorI2lmZGVmIENPTkZJR19JTk5PVkFUT1JPTUFQMTYxMAogVkFMX1RDX0VNSUZTX0NTMF9DT05GSUc6CiAJLndvcmQgMHgwMDIxMzBiMAogVkFMX1RDX0VNSUZTX0NTMV9DT05GSUc6CkBAIC0zNTgsNiArMzg3LDIxIEBACiAJLndvcmQgMHgwMDAwNTVmMAogVkFMX1RDX0VNSUZTX0NTM19DT05GSUc6CiAJLndvcmQgMHg4ODAxMTEzMQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSDJfT01BUDE2MTAKK1ZBTF9UQ19FTUlGU19DUzBfQ09ORklHOgorCS53b3JkIDB4MDAyMDMzMzEKK1ZBTF9UQ19FTUlGU19DUzFfQ09ORklHOgorCS53b3JkIDB4ODE4MGZmZjMKK1ZBTF9UQ19FTUlGU19DUzJfQ09ORklHOgorCS53b3JkIDB4ZjgwMGYyMmEKK1ZBTF9UQ19FTUlGU19DUzNfQ09ORklHOgorCS53b3JkIDB4ODgwMTExMzEKK1ZBTF9UQ19FTUlGU19DUzFfQURWQU5DRUQ6CisJLndvcmQgMHgwMDAwMDAyMgorI2VuZGlmCisKIFZBTF9UQ19FTUlGRl9TRFJBTV9DT05GSUc6CiAJLndvcmQgMHgwMTAyOTBmYwogVkFMX1RDX0VNSUZGX01SUzoKQEAgLTM3Niw2ICs0MjAsMTEgQEAKIFdBVENIRE9HX1ZBTDI6CiAJLndvcmQgMHgwMDAwMDBhMAogCitWQUxfTVBVX0xPQURfVElNRVI6CisJLndvcmQgMHhmZmZmZmZmZgorVkFMX01QVV9DTlRMX1RJTUVSOgorCS53b3JkIDB4ZmZmZmZmYTEKKwogLyogY29tbWFuZCB2YWx1ZXMgKi8KIC5lcXUgQ01EX1NEUkFNX05PUCwJCTB4MDAwMDAwMDAKIC5lcXUgQ01EX1NEUkFNX1BSRUNIQVJHRSwJMHgwMDAwMDAwMQpkaWZmIC0tZ2l0IGEvY3B1Lzc0eHhfN3h4L3RyYXBzLmMgYi9jcHUvNzR4eF83eHgvdHJhcHMuYwppbmRleCA2ZTk0NjAxLi5hYzVmOGJmIDEwMDY0NAotLS0gYS9jcHUvNzR4eF83eHgvdHJhcHMuYworKysgYi9jcHUvNzR4eF83eHgvdHJhcHMuYwpAQCAtMTQwLDE5ICsxNDAsMTggQEAKIAlwcmludGYoIk1hY2hpbmUgY2hlY2sgaW4ga2VybmVsIG1vZGUuXG4iKTsKIAlwcmludGYoIkNhdXNlZCBieSAoZnJvbSBtc3IpOiAiKTsKIAlwcmludGYoInJlZ3MgJXAgIixyZWdzKTsKLQlzd2l0Y2goIHJlZ3MtPm1zciAmIDB4MDAwMEYwMDApCi0JewotCWNhc2UgKDE8PDEyKSA6CisJc3dpdGNoKCByZWdzLT5tc3IgJiAweDAwMEYwMDAwKSB7CisJY2FzZSAoMHg4MDAwMDAwMD4+MTIpOgogCQlwcmludGYoIk1hY2hpbmUgY2hlY2sgc2lnbmFsIC0gcHJvYmFibHkgZHVlIHRvIG1tIGZhdWx0XG4iCiAJCQkid2l0aCBtbXUgb2ZmXG4iKTsKIAkJYnJlYWs7Ci0JY2FzZSAoMTw8MTMpIDoKKwljYXNlICgweDgwMDAwMDAwPj4xMyk6CiAJCXByaW50ZigiVHJhbnNmZXIgZXJyb3IgYWNrIHNpZ25hbFxuIik7CiAJCWJyZWFrOwotCWNhc2UgKDE8PDE0KSA6CisJY2FzZSAoMHg4MDAwMDAwMD4+MTQpOgogCQlwcmludGYoIkRhdGEgcGFyaXR5IHNpZ25hbFxuIik7CiAJCWJyZWFrOwotCWNhc2UgKDE8PDE1KSA6CisJY2FzZSAoMHg4MDAwMDAwMD4+MTUpOgogCQlwcmludGYoIkFkZHJlc3MgcGFyaXR5IHNpZ25hbFxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9jcHUvYXJtOTI2ZWpzL2ludGVycnVwdHMuYyBiL2NwdS9hcm05MjZlanMvaW50ZXJydXB0cy5jCmluZGV4IDM5ODUyMTcuLjRkNmVmZWIgMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjZlanMvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9hcm05MjZlanMvaW50ZXJydXB0cy5jCkBAIC0xLDQgKzEsNyBAQAogLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogVGV4YXMgSW5zdHJ1bWVudHMgPHd3dy50aS5jb20+CisgKgogICogKEMpIENvcHlyaWdodCAyMDAyCiAgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KICAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KQEAgLTMxLDcgKzM0LDYgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGFybTkyNXQuaD4KLSNpbmNsdWRlIDxjb25maWdzL29tYXAxNTEwLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvYy1hcm12L3B0cmFjZS5oPgogCkBAIC00NywxMiArNDksMTQgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHRlbXA7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1ycyAlMCwgY3BzclxuIgotCQkiYmljICUwLCAlMCwgIzB4ODBcbiIKLQkJIm1zciBjcHNyX2MsICUwIgotCQk6ICI9ciIgKHRlbXApCi0JCTogIm1lbW9yeSIpOworCQkJICAgICAiYmljICUwLCAlMCwgIzB4ODBcbiIKKwkJCSAgICAgIm1zciBjcHNyX2MsICUwIgorCQkJICAgICA6ICI9ciIgKHRlbXApCisJCQkgICAgIDoKKwkJCSAgICAgOiAibWVtb3J5Iik7CiB9CiAKKwogLyoKICAqIGRpc2FibGUgSVJRL0ZJUSBpbnRlcnJ1cHRzCiAgKiByZXR1cm5zIHRydWUgaWYgaW50ZXJydXB0cyBoYWQgYmVlbiBlbmFibGVkIGJlZm9yZSB3ZSBkaXNhYmxlZCB0aGVtCkBAIC02MSwxMCArNjUsMTEgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG9sZCx0ZW1wOwogCV9fYXNtX18gX192b2xhdGlsZV9fKCJtcnMgJTAsIGNwc3JcbiIKLQkJIm9yciAlMSwgJTAsICMweGMwXG4iCi0JCSJtc3IgY3Bzcl9jLCAlMSIKLQkJOiAiPXIiIChvbGQpLCAiPXIiICh0ZW1wKQotCQk6ICJtZW1vcnkiKTsKKwkJCSAgICAgIm9yciAlMSwgJTAsICMweGMwXG4iCisJCQkgICAgICJtc3IgY3Bzcl9jLCAlMSIKKwkJCSAgICAgOiAiPXIiIChvbGQpLCAiPXIiICh0ZW1wKQorCQkJICAgICA6CisJCQkgICAgIDogIm1lbW9yeSIpOwogCXJldHVybiAob2xkICYgMHg4MCkgPT0gMDsKIH0KICNlbHNlCkBAIC0xNzksMTAgKzE4NCwxNCBAQAogewogCWludDMyX3QgdmFsOwogCisJLyogU3RhcnQgdGhlIGRlY3JlbWVudGVyIHRpY2tpbmcgZG93biBmcm9tIDB4ZmZmZmZmZmYgKi8KIAkqKChpbnQzMl90ICopIChDRkdfVElNRVJCQVNFICsgTE9BRF9USU0pKSA9IFRJTUVSX0xPQURfVkFMOwotCXZhbCA9IE1QVVRJTV9TVCB8IE1QVVRJTV9BUiB8IE1QVVRJTV9DTE9DS19FTkFCTEUgfAotCQkJKENGR19QVlQgPDwgTVBVVElNX1BUVl9CSVQpOworCXZhbCA9IE1QVVRJTV9TVCB8IE1QVVRJTV9BUiB8IE1QVVRJTV9DTE9DS19FTkFCTEUgfCAoQ0ZHX1BWVCA8PCBNUFVUSU1fUFRWX0JJVCk7CiAJKigoaW50MzJfdCAqKSAoQ0ZHX1RJTUVSQkFTRSArIENOVExfVElNRVIpKSA9IHZhbDsKKworCS8qIGluaXQgdGhlIHRpbWVzdGFtcCBhbmQgbGFzdGRlYyB2YWx1ZSAqLworCXJlc2V0X3RpbWVyX21hc2tlZCgpOworCiAJcmV0dXJuICgwKTsKIH0KIApAQCAtMjA1LDQ0ICsyMTQsNTAgQEAKIAl0aW1lc3RhbXAgPSB0OwogfQogCi0vKiB2ZXJ5IHJvdWdoIHRpbWVyLi4uICovCisvKiBkZWxheSB4IHVzZWNvbmRzIEFORCBwZXJzZXJ2ZSBhZHZhbmNlIHRpbXN0YW1wIHZhbHVlICovCiB2b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewotI2lmZGVmIENPTkZJR19JTk5PVkFUT1JPTUFQMTYxMAotI2RlZmluZSBMT09QU19QRVJfTVNFQyAxMDAJCS8qIHR1bmVkIG9uIG9tYXAxNjEwICovCi0Jdm9sYXRpbGUgaW50IGksIHRpbWVfcmVtYWluaW5nID0gTE9PUFNfUEVSX01TRUMgKiB1c2VjOworCXVsb25nIHRtbywgdG1wOwogCi0JZm9yIChpID0gdGltZV9yZW1haW5pbmc7IGkgPiAwOyBpLS0pIHsKKwlpZih1c2VjID49IDEwMDApeyAgICAgICAgICAgICAgIC8qIGlmICJiaWciIG51bWJlciwgc3ByZWFkIG5vcm1hbGl6YXRpb24gdG8gc2Vjb25kcyAqLworCQl0bW8gPSB1c2VjIC8gMTAwMDsgICAgICAvKiBzdGFydCB0byBub3JtYWxpemUgZm9yIHVzZWMgdG8gdGlja3MgcGVyIHNlYyAqLworCQl0bW8gKj0gQ0ZHX0haOyAgICAgICAgICAvKiBmaW5kIG51bWJlciBvZiAidGlja3MiIHRvIHdhaXQgdG8gYWNoaWV2ZSB0YXJnZXQgKi8KKwkJdG1vIC89IDEwMDA7ICAgICAgICAgICAgLyogZmluaXNoIG5vcm1hbGl6ZS4gKi8KKwl9ZWxzZXsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVsc2Ugc21hbGwgbnVtYmVyLCBkb24ndCBraWxsIGl0IHByaW9yIHRvIEhaIG11bHRpcGx5ICovCisJCXRtbyA9IHVzZWMgKiBDRkdfSFo7CisJCXRtbyAvPSAoMTAwMCoxMDAwKTsKIAl9Ci0jZWxzZQogCi0JdWxvbmcgdG1vOwotCXRtbyA9IHVzZWMgLyAxMDAwOwotCXRtbyAqPSBDRkdfSFo7Ci0JdG1vIC89IDEwMDA7Ci0JdG1vICs9IGdldF90aW1lciAoMCk7Ci0Jd2hpbGUgKGdldF90aW1lcl9tYXNrZWQgKCkgPCB0bW8pCisJdG1wID0gZ2V0X3RpbWVyICgwKTsJCS8qIGdldCBjdXJyZW50IHRpbWVzdGFtcCAqLworCWlmKCAodG1vICsgdG1wKSA8IHRtcCApIAkvKiBpZiBzZXR0aW5nIHRoaXMgZm9yZHdhcmQgd2lsbCByb2xsIHRpbWUgc3RhbXAgKi8KKwkJcmVzZXRfdGltZXJfbWFza2VkICgpOwkvKiByZXNldCAiYWR2YW5jaW5nIiB0aW1lc3RhbXAgdG8gMCwgc2V0IGxhc3RkZWMgdmFsdWUgKi8KKwllbHNlCisJCXRtbyArPSB0bXA7CQkvKiBlbHNlLCBzZXQgYWR2YW5jaW5nIHN0YW1wIHdha2UgdXAgdGltZSAqLworCisJd2hpbGUgKGdldF90aW1lcl9tYXNrZWQgKCkgPCB0bW8pLyogbG9vcCB0aWxsIGV2ZW50ICovCiAJCS8qTk9QKi87Ci0jZW5kaWYKIH0KIAogdm9pZCByZXNldF90aW1lcl9tYXNrZWQgKHZvaWQpCiB7CiAJLyogcmVzZXQgdGltZSAqLwotCWxhc3RkZWMgPSBSRUFEX1RJTUVSOwotCXRpbWVzdGFtcCA9IDA7CisJbGFzdGRlYyA9IFJFQURfVElNRVI7ICAvKiBjYXB1cmUgY3VycmVudCBkZWNyZW1lbnRlciB2YWx1ZSB0aW1lICovCisJdGltZXN0YW1wID0gMDsgICAgICAgICAvKiBzdGFydCAiYWR2YW5jaW5nIiB0aW1lIHN0YW1wIGZyb20gMCAqLwogfQogCiB1bG9uZyBnZXRfdGltZXJfbWFza2VkICh2b2lkKQogewogCXVsb25nIG5vdyA9IFJFQURfVElNRVI7CQkvKiBjdXJyZW50IHRpY2sgdmFsdWUgKi8KIAotCWlmIChsYXN0ZGVjID49IG5vdykgewkJLyogZGlkIEkgcm9sbCAocmVtIGRlY3JlbWVudGVyKSAqLworCWlmIChsYXN0ZGVjID49IG5vdykgewkJLyogbm9ybWFsIG1vZGUgKG5vbiByb2xsKSAqLwogCQkvKiBub3JtYWwgbW9kZSAqLwotCQkvKiByZWNvcmQgYW1vdW50IG9mIHRpbWUgc2luY2UgbGFzdCBjaGVjayAqLwotCQl0aW1lc3RhbXAgKz0gbGFzdGRlYyAtIG5vdzsKLQl9IGVsc2UgewotCQkvKiB3ZSBoYXZlIGFuIG92ZXJmbG93IC4uLiAqLworCQl0aW1lc3RhbXAgKz0gbGFzdGRlYyAtIG5vdzsgLyogbW92ZSBzdGFtcCBmb3Jkd2FyZCB3aXRoIGFic291bHRlIGRpZmYgdGlja3MgKi8KKwl9IGVsc2UgewkJCS8qIHdlIGhhdmUgb3ZlcmZsb3cgb2YgdGhlIGNvdW50IGRvd24gdGltZXIgKi8KKwkJLyogbnRzID0gdHMgKyBsZCArIChUTFYgLSBub3cpCisJCSAqIHRzPW9sZCBzdGFtcCwgbGQ9dGltZSB0aGF0IHBhc3NlZCBiZWZvcmUgcGFzc2luZyB0aHJvdWdoIC0xCisJCSAqIChUTFYtbm93KSBhbW91bnQgb2YgdGltZSBhZnRlciBwYXNzaW5nIHRob3VnaCAtMQorCQkgKiBudHMgPSBuZXcgImFkdmFuY2luZyB0aW1lIHN0YW1wIi4uLml0IGNvdWxkIGFsc28gcm9sbCBhbmQgY2F1c2UgcHJvYmxlbXMuCisJCSAqLwogCQl0aW1lc3RhbXAgKz0gbGFzdGRlYyArIFRJTUVSX0xPQURfVkFMIC0gbm93OwogCX0KIAlsYXN0ZGVjID0gbm93OwpAQCAtMjUwLDI1ICsyNjUsMjQgQEAKIAlyZXR1cm4gdGltZXN0YW1wOwogfQogCisvKiB3YWl0cyBzcGVjaWZpZWQgZGVsYXkgdmFsdWUgYW5kIHJlc2V0cyB0aW1lc3RhbXAgKi8KIHZvaWQgdWRlbGF5X21hc2tlZCAodW5zaWduZWQgbG9uZyB1c2VjKQogewotI2lmZGVmIENPTkZJR19JTk5PVkFUT1JPTUFQMTYxMAotCSNkZWZpbmUgTE9PUFNfUEVSX01TRUMgMTAwIC8qIHR1bmVkIG9uIG9tYXAxNjEwICovCi0Jdm9sYXRpbGUgaW50IGksIHRpbWVfcmVtYWluaW5nID0gTE9PUFNfUEVSX01TRUMqdXNlYzsKLQlmb3IgKGk9dGltZV9yZW1haW5pbmc7IGk+MDsgaS0tKSB7IH0KLSNlbHNlCi0KLQl1bG9uZyB0bW87CisJdWxvbmcgdG1vLCB0bXA7CiAKLQl0bW8gPSB1c2VjIC8gMTAwMDsKLQl0bW8gKj0gQ0ZHX0haOwotCXRtbyAvPSAxMDAwOworCWlmKHVzZWMgPj0gMTAwMCl7ICAgICAgICAgICAgICAgLyogaWYgImJpZyIgbnVtYmVyLCBzcHJlYWQgbm9ybWFsaXphdGlvbiB0byBzZWNvbmRzICovCisJCXRtbyA9IHVzZWMgLyAxMDAwOyAgICAgIC8qIHN0YXJ0IHRvIG5vcm1hbGl6ZSBmb3IgdXNlYyB0byB0aWNrcyBwZXIgc2VjICovCisJCXRtbyAqPSBDRkdfSFo7ICAgICAgICAgIC8qIGZpbmQgbnVtYmVyIG9mICJ0aWNrcyIgdG8gd2FpdCB0byBhY2hpZXZlIHRhcmdldCAqLworCQl0bW8gLz0gMTAwMDsgICAgICAgICAgICAvKiBmaW5pc2ggbm9ybWFsaXplLiAqLworCX1lbHNleyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZWxzZSBzbWFsbCBudW1iZXIsIGRvbid0IGtpbGwgaXQgcHJpb3IgdG8gSFogbXVsdGlwbHkgKi8KKwkJdG1vID0gdXNlYyAqIENGR19IWjsKKwkJdG1vIC89ICgxMDAwKjEwMDApOworCX0KIAotCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKKwlyZXNldF90aW1lcl9tYXNrZWQgKCk7CS8qIHNldCAiYWR2YW5jaW5nIiB0aW1lc3RhbXAgdG8gMCwgc2V0IGxhc3RkZWMgdmF1bGUgKi8KIAotCXdoaWxlIChnZXRfdGltZXJfbWFza2VkICgpIDwgdG1vKQorCXdoaWxlIChnZXRfdGltZXJfbWFza2VkICgpIDwgdG1vKSAvKiB3YWl0IGZvciB0aW1lIHN0YW1wIHRvIG92ZXJ0YWtlIHRpY2sgbnVtYmVyLiovCiAJCS8qTk9QKi87Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTI4Nyw2ICszMDEsNyBAQAogdWxvbmcgZ2V0X3RiY2xrICh2b2lkKQogewogCXVsb25nIHRiY2xrOworCiAJdGJjbGsgPSBDRkdfSFo7CiAJcmV0dXJuIHRiY2xrOwogfQpkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eC90cmFwcy5jIGIvY3B1L21wYzV4eC90cmFwcy5jCmluZGV4IDQxOTM5YzEuLjE0ZmQ1OWUgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHgvdHJhcHMuYworKysgYi9jcHUvbXBjNXh4L3RyYXBzLmMKQEAgLTEzOSwxOCArMTM5LDE3IEBACiAJcHJpbnRmKCJNYWNoaW5lIGNoZWNrIGluIGtlcm5lbCBtb2RlLlxuIik7CiAJcHJpbnRmKCJDYXVzZWQgYnkgKGZyb20gbXNyKTogIik7CiAJcHJpbnRmKCJyZWdzICVwICIscmVncyk7Ci0Jc3dpdGNoKCByZWdzLT5tc3IgJiAweDAwMDBGMDAwKQotCXsKLQljYXNlICgxPDwxMikgOgorCXN3aXRjaCggcmVncy0+bXNyICYgMHgwMDBGMDAwMCkgeworCWNhc2UgKDB4ODAwMDAwMDA+PjEyKToKIAkJcHJpbnRmKCJNYWNoaW5lIGNoZWNrIHNpZ25hbFxuIik7CiAJCWJyZWFrOwotCWNhc2UgKDE8PDEzKSA6CisJY2FzZSAoMHg4MDAwMDAwMD4+MTMpOgogCQlwcmludGYoIlRyYW5zZmVyIGVycm9yIGFjayBzaWduYWxcbiIpOwogCQlicmVhazsKLQljYXNlICgxPDwxNCkgOgorCWNhc2UgKDB4ODAwMDAwMDA+PjE0KToKIAkJcHJpbnRmKCJEYXRhIHBhcml0eSBzaWduYWxcbiIpOwogCQlicmVhazsKLQljYXNlICgxPDwxNSkgOgorCWNhc2UgKDB4ODAwMDAwMDA+PjE1KToKIAkJcHJpbnRmKCJBZGRyZXNzIHBhcml0eSBzaWduYWxcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eHgvdHJhcHMuYyBiL2NwdS9tcGM1eHh4L3RyYXBzLmMKaW5kZXggNWQ0MzM5NC4uMmVlNzgyYiAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eHgvdHJhcHMuYworKysgYi9jcHUvbXBjNXh4eC90cmFwcy5jCkBAIC01LDYgKzUsNyBAQAogICoKICAqIE1vZGlmaWVkIGJ5IENvcnQgRG91Z2FuIChjb3J0QGNzLm5tdC5lZHUpCiAgKiBhbmQgUGF1bCBNYWNrZXJyYXMgKHBhdWx1c0Bjcy5hbnUuZWR1LmF1KQorICogZml4ZWQgTWFjaGluZSBDaGVjayBSZWFzb25zIGJ5IFJlaW5oYXJkIE1leWVyIChyLm1leWVyQGVtay1lbGVrdHJvbmlrLmRlKQogICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgpAQCAtMTMwLDE5ICsxMzEsMjAgQEAKIAlwcmludGYoIk1hY2hpbmUgY2hlY2sgaW4ga2VybmVsIG1vZGUuXG4iKTsKIAlwcmludGYoIkNhdXNlZCBieSAoZnJvbSBtc3IpOiAiKTsKIAlwcmludGYoInJlZ3MgJXAgIixyZWdzKTsKLQlzd2l0Y2goIHJlZ3MtPm1zciAmIDB4MDAwMEYwMDApCisJLyogcmVmZXIgdG8gNjAzZSBNYW51YWwgKE1QQzYwM0VVTS9BRCksIGNoYXB0ZXIgNC41LjIuMSAqLworCXN3aXRjaCggcmVncy0+bXNyICYgMHgwMDBGMDAwMCkKIAl7Ci0JY2FzZSAoMTw8MTIpIDoKKwljYXNlICgweDgwMDAwMDAwPj4xMikgOgogCQlwcmludGYoIk1hY2hpbmUgY2hlY2sgc2lnbmFsIC0gcHJvYmFibHkgZHVlIHRvIG1tIGZhdWx0XG4iCiAJCQkid2l0aCBtbXUgb2ZmXG4iKTsKIAkJYnJlYWs7Ci0JY2FzZSAoMTw8MTMpIDoKKwljYXNlICgweDgwMDAwMDAwPj4xMykgOgogCQlwcmludGYoIlRyYW5zZmVyIGVycm9yIGFjayBzaWduYWxcbiIpOwogCQlicmVhazsKLQljYXNlICgxPDwxNCkgOgorCWNhc2UgKDB4ODAwMDAwMDA+PjE0KSA6CiAJCXByaW50ZigiRGF0YSBwYXJpdHkgc2lnbmFsXG4iKTsKIAkJYnJlYWs7Ci0JY2FzZSAoMTw8MTUpIDoKKwljYXNlICgweDgwMDAwMDAwPj4xNSkgOgogCQlwcmludGYoIkFkZHJlc3MgcGFyaXR5IHNpZ25hbFxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC90cmFwcy5jIGIvY3B1L21wYzgyNHgvdHJhcHMuYwppbmRleCA5NTYyNDRmLi4wNzFkMDAzIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC90cmFwcy5jCisrKyBiL2NwdS9tcGM4MjR4L3RyYXBzLmMKQEAgLTEyMCwxOSArMTIwLDE4IEBACiAJcHJpbnRmKCJNYWNoaW5lIGNoZWNrIGluIGtlcm5lbCBtb2RlLlxuIik7CiAJcHJpbnRmKCJDYXVzZWQgYnkgKGZyb20gbXNyKTogIik7CiAJcHJpbnRmKCJyZWdzICVwICIscmVncyk7Ci0Jc3dpdGNoKCByZWdzLT5tc3IgJiAweDAwMDBGMDAwKQotCXsKLQljYXNlICgxPDwxMikgOgorCXN3aXRjaCggcmVncy0+bXNyICYgMHgwMDBGMDAwMCkgeworCWNhc2UgKDB4ODAwMDAwMDA+PjEyKToKIAkJcHJpbnRmKCJNYWNoaW5lIGNoZWNrIHNpZ25hbCAtIHByb2JhYmx5IGR1ZSB0byBtbSBmYXVsdFxuIgogCQkJIndpdGggbW11IG9mZlxuIik7CiAJCWJyZWFrOwotCWNhc2UgKDE8PDEzKSA6CisJY2FzZSAoMHg4MDAwMDAwMD4+MTMpOgogCQlwcmludGYoIlRyYW5zZmVyIGVycm9yIGFjayBzaWduYWxcbiIpOwogCQlicmVhazsKLQljYXNlICgxPDwxNCkgOgorCWNhc2UgKDB4ODAwMDAwMDA+PjE0KToKIAkJcHJpbnRmKCJEYXRhIHBhcml0eSBzaWduYWxcbiIpOwogCQlicmVhazsKLQljYXNlICgxPDwxNSkgOgorCWNhc2UgKDB4ODAwMDAwMDA+PjE1KToKIAkJcHJpbnRmKCJBZGRyZXNzIHBhcml0eSBzaWduYWxcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNjAvdHJhcHMuYyBiL2NwdS9tcGM4MjYwL3RyYXBzLmMKaW5kZXggZGVhYjgwOC4uNjkzZGIzOSAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNjAvdHJhcHMuYworKysgYi9jcHUvbXBjODI2MC90cmFwcy5jCkBAIC0xNTgsMTggKzE1OCwxOCBAQAogCXByaW50ZigiTWFjaGluZSBjaGVjayBpbiBrZXJuZWwgbW9kZS5cbiIpOwogCXByaW50ZigiQ2F1c2VkIGJ5IChmcm9tIG1zcik6ICIpOwogCXByaW50ZigicmVncyAlcCAiLHJlZ3MpOwotCXN3aXRjaCggcmVncy0+bXNyICYgMHgwMDAwRjAwMCkgewotCWNhc2UgKDE8PDEyKSA6CisJc3dpdGNoKCByZWdzLT5tc3IgJiAweDAwMEYwMDAwKSB7CisJY2FzZSAoMHg4MDAwMDAwMD4+MTIpOgogCQlwcmludGYoIk1hY2hpbmUgY2hlY2sgc2lnbmFsIC0gcHJvYmFibHkgZHVlIHRvIG1tIGZhdWx0XG4iCiAJCQkid2l0aCBtbXUgb2ZmXG4iKTsKIAkJYnJlYWs7Ci0JY2FzZSAoMTw8MTMpIDoKKwljYXNlICgweDgwMDAwMDAwPj4xMyk6CiAJCXByaW50ZigiVHJhbnNmZXIgZXJyb3IgYWNrIHNpZ25hbFxuIik7CiAJCWJyZWFrOwotCWNhc2UgKDE8PDE0KSA6CisJY2FzZSAoMHg4MDAwMDAwMD4+MTQpOgogCQlwcmludGYoIkRhdGEgcGFyaXR5IHNpZ25hbFxuIik7CiAJCWJyZWFrOwotCWNhc2UgKDE8PDE1KSA6CisJY2FzZSAoMHg4MDAwMDAwMD4+MTUpOgogCQlwcmludGYoIkFkZHJlc3MgcGFyaXR5IHNpZ25hbFxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9jcHUvbXBjODV4eC90cmFwcy5jIGIvY3B1L21wYzg1eHgvdHJhcHMuYwppbmRleCBmZDBiNDM2Li5hMzQ4ZWFiIDEwMDY0NAotLS0gYS9jcHUvbXBjODV4eC90cmFwcy5jCisrKyBiL2NwdS9tcGM4NXh4L3RyYXBzLmMKQEAgLTE2NCwxOSArMTY0LDE4IEBACiAJcHJpbnRmKCJNYWNoaW5lIGNoZWNrIGluIGtlcm5lbCBtb2RlLlxuIik7CiAJcHJpbnRmKCJDYXVzZWQgYnkgKGZyb20gbXNyKTogIik7CiAJcHJpbnRmKCJyZWdzICVwICIscmVncyk7Ci0Jc3dpdGNoKCByZWdzLT5tc3IgJiAweDAwMDBGMDAwKQotCXsKLQljYXNlICgxPDwxMikgOgorCXN3aXRjaCggcmVncy0+bXNyICYgMHgwMDBGMDAwMCkgeworCWNhc2UgKDB4ODAwMDAwMDA+PjEyKToKIAkJcHJpbnRmKCJNYWNoaW5lIGNoZWNrIHNpZ25hbCAtIHByb2JhYmx5IGR1ZSB0byBtbSBmYXVsdFxuIgogCQkgICAgICAgIndpdGggbW11IG9mZlxuIik7CiAJCWJyZWFrOwotCWNhc2UgKDE8PDEzKSA6CisJY2FzZSAoMHg4MDAwMDAwMD4+MTMpOgogCQlwcmludGYoIlRyYW5zZmVyIGVycm9yIGFjayBzaWduYWxcbiIpOwogCQlicmVhazsKLQljYXNlICgxPDwxNCkgOgorCWNhc2UgKDB4ODAwMDAwMDA+PjE0KToKIAkJcHJpbnRmKCJEYXRhIHBhcml0eSBzaWduYWxcbiIpOwogCQlicmVhazsKLQljYXNlICgxPDwxNSkgOgorCWNhc2UgKDB4ODAwMDAwMDA+PjE1KToKIAkJcHJpbnRmKCJBZGRyZXNzIHBhcml0eSBzaWduYWxcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC90cmFwcy5jIGIvY3B1L21wYzh4eC90cmFwcy5jCmluZGV4IGM0MzJiZTYuLjY3Yjc1Y2MgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvdHJhcHMuYworKysgYi9jcHUvbXBjOHh4L3RyYXBzLmMKQEAgLTEzNCwxOSArMTM0LDE4IEBACiAJcHJpbnRmKCJNYWNoaW5lIGNoZWNrIGluIGtlcm5lbCBtb2RlLlxuIik7CiAJcHJpbnRmKCJDYXVzZWQgYnkgKGZyb20gbXNyKTogIik7CiAJcHJpbnRmKCJyZWdzICVwICIscmVncyk7Ci0Jc3dpdGNoKCByZWdzLT5tc3IgJiAweDAwMDBGMDAwKQotCXsKLQljYXNlICgxPDwxMikgOgorCXN3aXRjaCggcmVncy0+bXNyICYgMHgwMDBGMDAwMCkgeworCWNhc2UgKDB4ODAwMDAwMDA+PjEyKToKIAkJcHJpbnRmKCJNYWNoaW5lIGNoZWNrIHNpZ25hbCAtIHByb2JhYmx5IGR1ZSB0byBtbSBmYXVsdFxuIgogCQkJIndpdGggbW11IG9mZlxuIik7CiAJCWJyZWFrOwotCWNhc2UgKDE8PDEzKSA6CisJY2FzZSAoMHg4MDAwMDAwMD4+MTMpOgogCQlwcmludGYoIlRyYW5zZmVyIGVycm9yIGFjayBzaWduYWxcbiIpOwogCQlicmVhazsKLQljYXNlICgxPDwxNCkgOgorCWNhc2UgKDB4ODAwMDAwMDA+PjE0KToKIAkJcHJpbnRmKCJEYXRhIHBhcml0eSBzaWduYWxcbiIpOwogCQlicmVhazsKLQljYXNlICgxPDwxNSkgOgorCWNhc2UgKDB4ODAwMDAwMDA+PjE1KToKIAkJcHJpbnRmKCJBZGRyZXNzIHBhcml0eSBzaWduYWxcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvY3B1L25pb3MvaW50ZXJydXB0cy5jIGIvY3B1L25pb3MvaW50ZXJydXB0cy5jCmluZGV4IDMxZWFiZGUuLjQ1MDk0NmIgMTAwNjQ0Ci0tLSBhL2NwdS9uaW9zL2ludGVycnVwdHMuYworKysgYi9jcHUvbmlvcy9pbnRlcnJ1cHRzLmMKQEAgLTEyOCw2ICsxMjgsMTAgQEAKIAogCXRtci0+Y29udHJvbCAmPSB+TklPU19USU1FUl9JVE87CiAJdG1yLT5jb250cm9sIHw9IE5JT1NfVElNRVJfU1RPUDsKKyNpZiBkZWZpbmVkKENGR19OSU9TX1RNUkNOVCkKKwl0bXItPnBlcmlvZGwgPSBDRkdfTklPU19UTVJDTlQgJiAweGZmZmY7CisJdG1yLT5wZXJpb2RoID0gKENGR19OSU9TX1RNUkNOVCA+PiAxNikgJiAweGZmZmY7CisjZW5kaWYKICNlbmRpZgogCiAJZm9yICh2ZWM9MDsgdmVjPDY0OyB2ZWMrKyApIHsKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvTWFrZWZpbGUgYi9jcHUvcHBjNHh4L01ha2VmaWxlCmluZGV4IDliNTRkMzIuLmE4NDExMDkgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvTWFrZWZpbGUKKysrIGIvY3B1L3BwYzR4eC9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogU1RBUlQJPSBzdGFydC5vIHJlc2V0dmVjLm8ga2dkYi5vCiBBT0JKUwk9IGRjci5vCiBDT0JKUwk9IDQwNWdwX2VuZXQubyA0MDVncF9wY2kubyA0NDBneF9lbmV0Lm8gXAotCSAgYmVkYnVnXzQwNS5vIFwKKwkgIGJlZGJ1Z180MDUubyBjb21tcHJvYy5vIFwKIAkgIGNwdS5vIGNwdV9pbml0Lm8gaTJjLm8gaW50ZXJydXB0cy5vIFwKIAkgIG1paXBoeS5vIG1paXBoeV80NDAubyBzZHJhbS5vIHNlcmlhbC5vIFwKIAkgIHNwZF9zZHJhbS5vIHNwZWVkLm8gdHJhcHMubwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9jb21tcHJvYy5jIGIvY3B1L3BwYzR4eC9jb21tcHJvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YWFiNWIKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvcHBjNHh4L2NvbW1wcm9jLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqCisgKiBBdGFwdGVkIGZvciBwcGM0WFggYnkgRGVuaXMgUGV0ZXIKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbXByb2MuaD4KKworCisjaWYgZGVmaW5lZChDT05GSUdfUE9TVCkgfHwgZGVmaW5lZChDT05GSUdfTE9HQlVGRkVSKQorCit2b2lkIHBvc3Rfd29yZF9zdG9yZSAodWxvbmcgYSkKK3sKKwl2b2xhdGlsZSB2b2lkICpzYXZlX2FkZHIgPSAodm9sYXRpbGUgdm9pZCAqKShDRkdfT0NNX0RBVEFfQUREUiArIENGR19QT1NUX1dPUkRfQUREUik7CisJKih2b2xhdGlsZSB1bG9uZyAqKSBzYXZlX2FkZHIgPSBhOworfQorCit1bG9uZyBwb3N0X3dvcmRfbG9hZCAodm9pZCkKK3sKKwl2b2xhdGlsZSB2b2lkICpzYXZlX2FkZHIgPSAodm9sYXRpbGUgdm9pZCAqKShDRkdfT0NNX0RBVEFfQUREUiArIENGR19QT1NUX1dPUkRfQUREUik7CisJcmV0dXJuICoodm9sYXRpbGUgdWxvbmcgKikgc2F2ZV9hZGRyOworfQorCisjZW5kaWYJLyogQ09ORklHX1BPU1QgfHwgQ09ORklHX0xPR0JVRkZFUiovCisKKyNpZmRlZiBDT05GSUdfQk9PVENPVU5UX0xJTUlUCisKK3ZvaWQgYm9vdGNvdW50X3N0b3JlICh1bG9uZyBhKQoreworCXZvbGF0aWxlIHVsb25nICpzYXZlX2FkZHIgPQorCQkodm9sYXRpbGUgdWxvbmcgKikoQ0ZHX09DTV9EQVRBX0FERFIgKyBDRkdfQk9PVENPVU5UX0FERFIpOworCisJc2F2ZV9hZGRyWzBdID0gYTsKKwlzYXZlX2FkZHJbMV0gPSBCT09UQ09VTlRfTUFHSUM7Cit9CisKK3Vsb25nIGJvb3Rjb3VudF9sb2FkICh2b2lkKQoreworCXZvbGF0aWxlIHVsb25nICpzYXZlX2FkZHIgPQorCQkodm9sYXRpbGUgdWxvbmcgKikoQ0ZHX09DTV9EQVRBX0FERFIgKyBDRkdfQk9PVENPVU5UX0FERFIpOworCisJaWYgKHNhdmVfYWRkclsxXSAhPSBCT09UQ09VTlRfTUFHSUMpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIHNhdmVfYWRkclswXTsKK30KKworI2VuZGlmIC8qIENPTkZJR19CT09UQ09VTlRfTElNSVQgKi8KZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvdHJhcHMuYyBiL2NwdS9wcGM0eHgvdHJhcHMuYwppbmRleCAxY2Y4OTllLi42YWVjY2EyIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L3RyYXBzLmMKKysrIGIvY3B1L3BwYzR4eC90cmFwcy5jCkBAIC0xNjQsMTkgKzE2NCwxOCBAQAogCXByaW50ZigiTWFjaGluZSBjaGVjayBpbiBrZXJuZWwgbW9kZS5cbiIpOwogCXByaW50ZigiQ2F1c2VkIGJ5IChmcm9tIG1zcik6ICIpOwogCXByaW50ZigicmVncyAlcCAiLHJlZ3MpOwotCXN3aXRjaCggcmVncy0+bXNyICYgMHgwMDAwRjAwMCkKLQl7Ci0JY2FzZSAoMTw8MTIpIDoKKwlzd2l0Y2goIHJlZ3MtPm1zciAmIDB4MDAwRjAwMDApIHsKKwljYXNlICgweDgwMDAwMDAwPj4xMik6CiAJCXByaW50ZigiTWFjaGluZSBjaGVjayBzaWduYWwgLSBwcm9iYWJseSBkdWUgdG8gbW0gZmF1bHRcbiIKIAkJICAgICAgICJ3aXRoIG1tdSBvZmZcbiIpOwogCQlicmVhazsKLQljYXNlICgxPDwxMykgOgorCWNhc2UgKDB4ODAwMDAwMDA+PjEzKToKIAkJcHJpbnRmKCJUcmFuc2ZlciBlcnJvciBhY2sgc2lnbmFsXG4iKTsKIAkJYnJlYWs7Ci0JY2FzZSAoMTw8MTQpIDoKKwljYXNlICgweDgwMDAwMDAwPj4xNCk6CiAJCXByaW50ZigiRGF0YSBwYXJpdHkgc2lnbmFsXG4iKTsKIAkJYnJlYWs7Ci0JY2FzZSAoMTw8MTUpIDoKKwljYXNlICgweDgwMDAwMDAwPj4xNSk6CiAJCXByaW50ZigiQWRkcmVzcyBwYXJpdHkgc2lnbmFsXG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubmlvcyBiL2RvYy9SRUFETUUubmlvcwppbmRleCAwOGY0ZTdlLi5kM2E5Mjc3IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLm5pb3MKKysrIGIvZG9jL1JFQURNRS5uaW9zCkBAIC0xMDAsNiArMTAwLDkgQEAKIAogQ0ZHX05JT1NfVE1STVMgLS0gdGhlIHBlcmlvZCBvZiB0aGUgdGltZXIgaW4gbWlsbGlzZWNvbmRzLgogCitDRkdfTklPU19UTVJDTlQgLS0gdGhlIHByZWxvYWRhYmxlIGNvdW50ZXIgdmFsdWUgZm9yIHRoZSB0aW1lciBpZiBpdCBoYXMKKwlubyBmaXhlZCBwZXJpb2QuCisKIENGR19OSU9TX0FTTUlCQVNFIC0tIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFTTUkgcGVyaXBoZXJhbC4KIAkoc3RhbmRhcmQtMzI6IG5hX2FzbWlfYmFzZSkuCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW5pb3MvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLW5pb3MvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2RiNzAzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbmlvcy9jYWNoZS5oCkBAIC0wLDAgKzEgQEAKKy8qRklYTUU6IEltcGxlbWVudCB0aGlzISAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbmlvcy9nbG9iYWxfZGF0YS5oIGIvaW5jbHVkZS9hc20tbmlvcy9nbG9iYWxfZGF0YS5oCmluZGV4IDkzNWQwOGUuLmZkMTEzODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW5pb3MvZ2xvYmFsX2RhdGEuaAorKysgYi9pbmNsdWRlL2FzbS1uaW9zL2dsb2JhbF9kYXRhLmgKQEAgLTM0LDYgKzM0LDEwIEBACiAJdW5zaWduZWQgbG9uZwlyZWxvY19vZmY7CS8qIFJlbG9jYXRpb24gT2Zmc2V0ICovCiAJdW5zaWduZWQgbG9uZwllbnZfYWRkcjsJLyogQWRkcmVzcyAgb2YgRW52aXJvbm1lbnQgc3RydWN0ICovCiAJdW5zaWduZWQgbG9uZwllbnZfdmFsaWQ7CS8qIENoZWNrc3VtIG9mIEVudmlyb25tZW50IHZhbGlkICovCisjaWYgZGVmaW5lZChDT05GSUdfUE9TVCkgfHwgZGVmaW5lZChDT05GSUdfTE9HQlVGRkVSKQorCXVuc2lnbmVkIGxvbmcJcG9zdF9sb2dfd29yZDsJLyogUmVjb3JkIFBPU1QgYWN0aXZpdGllcyAqLworCXVuc2lnbmVkIGxvbmcJcG9zdF9pbml0X2ZfdGltZTsgLyogV2hlbiBwb3N0X2luaXRfZiBzdGFydGVkICovCisjZW5kaWYKIAl2b2lkCQkqKmp0OwkJLyogU3RhbmRhbG9uZSBhcHAganVtcCB0YWJsZSAqLwogfSBnZF90OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvREsxQzIwLmggYi9pbmNsdWRlL2NvbmZpZ3MvREsxQzIwLmgKaW5kZXggMmQ3N2RkNy4uOWI0ZjE0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0RLMUMyMC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9ESzFDMjAuaApAQCAtMTQ2LDE3ICsxNDYsNjAgQEAKIAogI2lmCShDRkdfTklPU19DUFVfVElDS19USU1FUiA9PSAwKQogCi0jZXJyb3IgKioqIENGR19FUlJPUjogdGljayB0aW1lciBhdCBUSU1FUjAgbm90IHN1cHBvcnRlZCwgZXhwYW5kIHlvdXIgY29uZmlnLmgKKyNkZWZpbmUgQ0ZHX05JT1NfVE1SQkFTRQlDRkdfTklPU19DUFVfVElNRVIwIC8qIFRJTUVSMCBhcyB0aWNrCSovCisjZGVmaW5lIENGR19OSU9TX1RNUklSUQkJQ0ZHX05JT1NfQ1BVX1RJTUVSMF9JUlEKKworI2lmCShDRkdfTklPU19DUFVfVElNRVIwX0ZQID09IDEpCQkgICAgLyogZml4ZWQgcGVyaW9kICovCisKKyNpZgkoQ0ZHX05JT1NfQ1BVX1RJTUVSMF9QRVIgPj0gQ0ZHX0haKQorI2RlZmluZSBDRkdfTklPU19UTVJNUwkJKENGR19OSU9TX0NQVV9USU1FUjBfUEVSIC8gQ0ZHX0haKQorI2Vsc2UKKyNlcnJvciAqKiogQ0ZHX0VSUk9SOiB5b3UgaGF2ZSB0byB1c2UgYSB0aW1lciBwZXJpb2RlIGdyZWF0ZXIgdGhhbiBDRkdfSFoKKyNlbmRpZgorCisjdW5kZWYJQ0ZHX05JT1NfVE1SQ05UCS8qIG5vIHByZWxvYWRhYmxlIGNvdW50ZXIgdmFsdWUgKi8KKworI2VsaWYJKENGR19OSU9TX0NQVV9USU1FUjBfRlAgPT0gMCkJCSAgICAvKiB2YXJpYWJsZSBwZXJpb2QgKi8KKworI2lmCShDRkdfSFogPD0gMTAwMCkKKyNkZWZpbmUgQ0ZHX05JT1NfVE1STVMJCSgxMDAwIC8gQ0ZHX0haKQorI2Vsc2UKKyNlcnJvciAqKiogQ0ZHX0VSUk9SOiBzb3JyeSwgQ0ZHX0haIGhhdmUgdG8gYmUgbGVzcyB0aGFuIDEwMDAKKyNlbmRpZgorCisjZGVmaW5lCUNGR19OSU9TX1RNUkNOVAkJKENPTkZJR19TWVNfQ0xLX0ZSRVEgLyBDRkdfSFopCisKKyNlbHNlCisjZXJyb3IgKioqIENGR19FUlJPUjogeW91IGhhdmUgdG8gZGVmaW5lIENGR19OSU9TX0NQVV9USU1FUjBfRlAgY29ycmVjdAorI2VuZGlmCiAKICNlbGlmCShDRkdfTklPU19DUFVfVElDS19USU1FUiA9PSAxKQogCiAjZGVmaW5lIENGR19OSU9TX1RNUkJBU0UJQ0ZHX05JT1NfQ1BVX1RJTUVSMSAvKiBUSU1FUjEgYXMgdGljawkqLwogI2RlZmluZSBDRkdfTklPU19UTVJJUlEJCUNGR19OSU9TX0NQVV9USU1FUjFfSVJRCiAKKyNpZgkoQ0ZHX05JT1NfQ1BVX1RJTUVSMV9GUCA9PSAxKQkJICAgIC8qIGZpeGVkIHBlcmlvZCAqLworCiAjaWYJKENGR19OSU9TX0NQVV9USU1FUjFfUEVSID49IENGR19IWikKICNkZWZpbmUgQ0ZHX05JT1NfVE1STVMJCShDRkdfTklPU19DUFVfVElNRVIxX1BFUiAvIENGR19IWikKICNlbHNlCisjZXJyb3IgKioqIENGR19FUlJPUjogeW91IGhhdmUgdG8gdXNlIGEgdGltZXIgcGVyaW9kZSBncmVhdGVyIHRoYW4gQ0ZHX0haCisjZW5kaWYKKworI3VuZGVmCUNGR19OSU9TX1RNUkNOVAkvKiBubyBwcmVsb2FkYWJsZSBjb3VudGVyIHZhbHVlICovCisKKyNlbGlmCShDRkdfTklPU19DUFVfVElNRVIxX0ZQID09IDApCQkgICAgLyogdmFyaWFibGUgcGVyaW9kICovCisKKyNpZgkoQ0ZHX0haIDw9IDEwMDApCisjZGVmaW5lIENGR19OSU9TX1RNUk1TCQkoMTAwMCAvIENGR19IWikKKyNlbHNlCisjZXJyb3IgKioqIENGR19FUlJPUjogc29ycnksIENGR19IWiBoYXZlIHRvIGJlIGxlc3MgdGhhbiAxMDAwCisjZW5kaWYKKworI2RlZmluZQlDRkdfTklPU19UTVJDTlQJCShDT05GSUdfU1lTX0NMS19GUkVRIC8gQ0ZHX0haKQorCisjZWxzZQotI2Vycm9yICoqKiBDRkdfRVJST1I6IHlvdSBoYXZlIHRvIHVzZSBhIHRpbWVyIHBlcmlvZGUgb2YgbW9yZSB0aGFuIENGR19IWgorI2Vycm9yICoqKiBDRkdfRVJST1I6IHlvdSBoYXZlIHRvIGRlZmluZSBDRkdfTklPU19DUFVfVElNRVIxX0ZQIGNvcnJlY3QKICNlbmRpZgogCiAjZW5kaWYJLyogQ0ZHX05JT1NfQ1BVX1RJQ0tfVElNRVIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9ESzFTMTAuaCBiL2luY2x1ZGUvY29uZmlncy9ESzFTMTAuaAppbmRleCA4MzVjN2EyLi5lNWU0ODdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvREsxUzEwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0RLMVMxMC5oCkBAIC0xNjgsMTAgKzE2OCwyOCBAQAogI2RlZmluZSBDRkdfTklPU19UTVJCQVNFCUNGR19OSU9TX0NQVV9USU1FUjAgLyogVElNRVIwIGFzIHRpY2sJKi8KICNkZWZpbmUgQ0ZHX05JT1NfVE1SSVJRCQlDRkdfTklPU19DUFVfVElNRVIwX0lSUQogCisjaWYJKENGR19OSU9TX0NQVV9USU1FUjBfRlAgPT0gMSkJCSAgICAvKiBmaXhlZCBwZXJpb2QgKi8KKwogI2lmCShDRkdfTklPU19DUFVfVElNRVIwX1BFUiA+PSBDRkdfSFopCiAjZGVmaW5lIENGR19OSU9TX1RNUk1TCQkoQ0ZHX05JT1NfQ1BVX1RJTUVSMF9QRVIgLyBDRkdfSFopCiAjZWxzZQorI2Vycm9yICoqKiBDRkdfRVJST1I6IHlvdSBoYXZlIHRvIHVzZSBhIHRpbWVyIHBlcmlvZGUgZ3JlYXRlciB0aGFuIENGR19IWgorI2VuZGlmCisKKyN1bmRlZglDRkdfTklPU19UTVJDTlQJLyogbm8gcHJlbG9hZGFibGUgY291bnRlciB2YWx1ZSAqLworCisjZWxpZgkoQ0ZHX05JT1NfQ1BVX1RJTUVSMF9GUCA9PSAwKQkJICAgIC8qIHZhcmlhYmxlIHBlcmlvZCAqLworCisjaWYJKENGR19IWiA8PSAxMDAwKQorI2RlZmluZSBDRkdfTklPU19UTVJNUwkJKDEwMDAgLyBDRkdfSFopCisjZWxzZQorI2Vycm9yICoqKiBDRkdfRVJST1I6IHNvcnJ5LCBDRkdfSFogaGF2ZSB0byBiZSBsZXNzIHRoYW4gMTAwMAorI2VuZGlmCisKKyNkZWZpbmUJQ0ZHX05JT1NfVE1SQ05UCQkoQ09ORklHX1NZU19DTEtfRlJFUSAvIENGR19IWikKKworI2Vsc2UKLSNlcnJvciAqKiogQ0ZHX0VSUk9SOiB5b3UgaGF2ZSB0byB1c2UgYSB0aW1lciBwZXJpb2RlIG9mIG1vcmUgdGhhbiBDRkdfSFoKKyNlcnJvciAqKiogQ0ZHX0VSUk9SOiB5b3UgaGF2ZSB0byBkZWZpbmUgQ0ZHX05JT1NfQ1BVX1RJTUVSMF9GUCBjb3JyZWN0CiAjZW5kaWYKIAogI2VsaWYJKENGR19OSU9TX0NQVV9USUNLX1RJTUVSID09IDEpCkBAIC0xNzksMTAgKzE5NywyOCBAQAogI2RlZmluZSBDRkdfTklPU19UTVJCQVNFCUNGR19OSU9TX0NQVV9USU1FUjEgLyogVElNRVIxIGFzIHRpY2sJKi8KICNkZWZpbmUgQ0ZHX05JT1NfVE1SSVJRCQlDRkdfTklPU19DUFVfVElNRVIxX0lSUQogCisjaWYJKENGR19OSU9TX0NQVV9USU1FUjFfRlAgPT0gMSkJCSAgICAvKiBmaXhlZCBwZXJpb2QgKi8KKwogI2lmCShDRkdfTklPU19DUFVfVElNRVIxX1BFUiA+PSBDRkdfSFopCiAjZGVmaW5lIENGR19OSU9TX1RNUk1TCQkoQ0ZHX05JT1NfQ1BVX1RJTUVSMV9QRVIgLyBDRkdfSFopCiAjZWxzZQorI2Vycm9yICoqKiBDRkdfRVJST1I6IHlvdSBoYXZlIHRvIHVzZSBhIHRpbWVyIHBlcmlvZGUgZ3JlYXRlciB0aGFuIENGR19IWgorI2VuZGlmCisKKyN1bmRlZglDRkdfTklPU19UTVJDTlQJLyogbm8gcHJlbG9hZGFibGUgY291bnRlciB2YWx1ZSAqLworCisjZWxpZgkoQ0ZHX05JT1NfQ1BVX1RJTUVSMV9GUCA9PSAwKQkJICAgIC8qIHZhcmlhYmxlIHBlcmlvZCAqLworCisjaWYJKENGR19IWiA8PSAxMDAwKQorI2RlZmluZSBDRkdfTklPU19UTVJNUwkJKDEwMDAgLyBDRkdfSFopCisjZWxzZQorI2Vycm9yICoqKiBDRkdfRVJST1I6IHNvcnJ5LCBDRkdfSFogaGF2ZSB0byBiZSBsZXNzIHRoYW4gMTAwMAorI2VuZGlmCisKKyNkZWZpbmUJQ0ZHX05JT1NfVE1SQ05UCQkoQ09ORklHX1NZU19DTEtfRlJFUSAvIENGR19IWikKKworI2Vsc2UKLSNlcnJvciAqKiogQ0ZHX0VSUk9SOiB5b3UgaGF2ZSB0byB1c2UgYSB0aW1lciBwZXJpb2RlIG9mIG1vcmUgdGhhbiBDRkdfSFoKKyNlcnJvciAqKiogQ0ZHX0VSUk9SOiB5b3UgaGF2ZSB0byBkZWZpbmUgQ0ZHX05JT1NfQ1BVX1RJTUVSMV9GUCBjb3JyZWN0CiAjZW5kaWYKIAogI2VuZGlmCS8qIENGR19OSU9TX0NQVV9USUNLX1RJTUVSICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTUlQNDA1LmggYi9pbmNsdWRlL2NvbmZpZ3MvTUlQNDA1LmgKaW5kZXggY2ZlNzRlMS4uMzk0MTlkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01JUDQwNS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NSVA0MDUuaApAQCAtNTUsMjAgKzU1LDIxIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIE1JUDQwNV9DT01NT05fQ01EUyBcCiAJCSAgICAgICAoQ09ORklHX0NNRF9ERkwJfCBcCi0JCQlDRkdfQ01EX0lERQl8IFwKLQkJCUNGR19DTURfREhDUAl8IFwKIAkJCUNGR19DTURfQ0FDSEUJfCBcCi0JCQlDRkdfQ01EX1BDSQl8IFwKLQkJCUNGR19DTURfSVJRCXwgXAorCQkJQ0ZHX0NNRF9EQVRFCXwgXAorCQkJQ0ZHX0NNRF9ESENQCXwgXAogCQkJQ0ZHX0NNRF9FQ0hPCXwgXAogCQkJQ0ZHX0NNRF9FRVBST00JfCBcCi0JCQlDRkdfQ01EX0kyQwl8IFwKLQkJCUNGR19DTURfUkVHSU5GTyB8IFwKLQkJCUNGR19DTURfREFURQl8IFwKIAkJCUNGR19DTURfRUxGCXwgXAorCQkJQ0ZHX0NNRF9GQVQJfCBcCisJCQlDRkdfQ01EX0kyQwl8IFwKKwkJCUNGR19DTURfSURFCXwgXAorCQkJQ0ZHX0NNRF9JUlEJfCBcCisJCQlDRkdfQ01EX0pGRlMyCXwgXAogCQkJQ0ZHX0NNRF9NSUkJfCBcCi0JCQlDRkdfQ01EX0ZBVCB8IFwKKwkJCUNGR19DTURfUENJCXwgXAogCQkJQ0ZHX0NNRF9QSU5HCXwgXAorCQkJQ0ZHX0NNRF9SRUdJTkZPIHwgXAogCQkJQ0ZHX0NNRF9TQVZFUwl8IFwKIAkJCUNGR19DTURfQlNQCSkKIApAQCAtMjM1LDYgKzIzNiw5IEBACiAjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCiAjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCiAKKyNkZWZpbmUgQ0ZHX0pGRlMyX0ZJUlNUX0JBTksgICAgMCAgICAgICAgICAgLyogdXNlIGZvciBKRkZTMiAqLworI2RlZmluZSBDRkdfSkZGUzJfTlVNX0JBTktTICAgICAxICAgICAgICAgICAvKiAhIHNlY29uZCBiYW5rIGNvbnRhaW5zIFUtQm9vdCAqLworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDYWNoZSBDb25maWd1cmF0aW9uCiAgKi8KQEAgLTI0NCw2ICsyNDgsMjUgQEAKICNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlCSovCiAjZW5kaWYKIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9nYnVmZmVyIENvbmZpZ3VyYXRpb24KKyAqLworI3VuZGVmIENPTkZJR19MT0dCVUZGRVIgCS8qIHN1cHBvcnRlZCBidXQgbm90IGVuYWJsZWQgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEJvb3Rjb3VudGxpbWl0IENvbmZpZ3VyYXRpb24KKyAqLworI3VuZGVmIENPTkZJR19CT09UQ09VTlRfTElNSVQJLyogc3VwcG9ydGVkIGJ1dCBub3QgZW5hYmxlZCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQT1NUIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIDAgLyogZW5hYmxlIHRoaXMgaWYgUE9TVCBpcyBkZXNpcmVkIChpcyBzdXBwb3J0ZWQgYnV0IG5vdCBlbmFibGVkKSAqLworI2RlZmluZSBDT05GSUdfUE9TVAkJKENGR19QT1NUX01FTU9SWQl8IFwKKwkJCQkgQ0ZHX1BPU1RfQ1BVIAkJfCBcCisJCQkJIENGR19QT1NUX1JUQyAJCXwgXAorCQkJCSBDRkdfUE9TVF9JMkMpCisKKyNlbmRpZgogLyoKICAqIEluaXQgTWVtb3J5IENvbnRyb2xsZXI6CiAgKi8KQEAgLTI3Myw3ICsyOTYsMTYgQEAKICNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAlDRkdfT0NNX0RBVEFfU0laRQkvKiBFbmQgb2YgT24gQ2hpcCBTUkFNCSAgICAgICAqLwogI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQk2NAkJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCiAjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKLSNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQKKy8qIHJlc2VydmUgc29tZSBtZW1vcnkgZm9yIFBPU1QgYW5kIEJPT1QgbGltaXQgaW5mbyAqLworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJKENGR19HQkxfREFUQV9PRkZTRVQgLSAzMikKKworI2lmZGVmICBDT05GSUdfUE9TVAkJLyogcmVzZXJ2ZSBvbmUgd29yZCBmb3IgUE9TVCBJbmZvICovCisjZGVmaW5lIENGR19QT1NUX1dPUkRfQUREUgkoQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIDQpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19CT09UQ09VTlRfTElNSVQgLyogcmVzZXJ2ZSAyIHdvcmQgZm9yIGJvb3Rjb3VudCBsaW1pdCAqLworI2RlZmluZSBDRkdfQk9PVENPVU5UX0FERFIgKENGR19HQkxfREFUQV9PRkZTRVQgLSAxMikKKyNlbmRpZgogCiAvKgogICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKQEAgLTI5OCw3ICszMzAsOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBDT05GSUdfTUlJCQkxCS8qIE1JSSBQSFkgbWFuYWdlbWVudAkJKi8KICNkZWZpbmUgQ09ORklHX1BIWV9BRERSCQkxCS8qIFBIWSBhZGRyZXNzCQkJKi8KLQorI2RlZmluZSBDT05GSUdfUEhZX1JFU0VUX0RFTEFZCTMwMAkvKiBJbnRlbCBMWFQ5NzFBIG5lZWRzIHRoaXMgKi8KKyNkZWZpbmUgQ09ORklHX1BIWV9DTURfREVMQVkJNDAJLyogSW50ZWwgTFhUOTcxQSBuZWVkcyB0aGlzICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSVEMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UT1A1MjAwLmggYi9pbmNsdWRlL2NvbmZpZ3MvVE9QNTIwMC5oCmluZGV4IDhmZjI2NGIuLmJkYjdhNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9UT1A1MjAwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1RPUDUyMDAuaApAQCAtMzE0LDcgKzMxNCwxOSBAQAogCiAjZGVmaW5lIENGR19IWgkJCTEwMDAJLyogZGVjcmVtZW50ZXIgZnJlcTogMSBtcyB0aWNrcyAqLwogCi0jZGVmaW5lCUNPTkZJR19SVENfTVBDNTIwMAkxCS8qIHVzZSA1MjAwIFJUQyAqLworI2lmZGVmIENPTkZJR19FVkFMNTIwMAkJLyogTTQ4VDA4IGlzIGF2YWlsYWJsZSB3aXRoIHRoZSBFdmFsdWF0aW9uIGJvYXJkIG9ubHkgKi8KKyAgI2RlZmluZSBDT05GSUdfUlRDX01LNDhUNTkJMQkvKiB1c2UgTTQ4VDA4IG9uIEVWQUw1MjAwICovCisgICNkZWZpbmUgUlRDKHJlZykJCSgweGYwMDEwMDAwK3JlZykKKyAgLyogc2V0dXAgQ1MyIGZvciBNNDhUMDguIE11c3QgTUFQIDY0a0IgKi8KKyAgI2RlZmluZSBDRkdfQ1MyX1NUQVJUCVJUQygwKQorICAjZGVmaW5lIENGR19DUzJfU0laRQkweDEwMDAwCisgIC8qIHNldHVwIENTMiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyOiAqLworICAvKiBXYWl0UCA9IDAsIFdhaXRYID0gNCwgTVg9MCwgQUw9MSwgQUE9MSwgQ0U9MSAqLworICAvKiBBUz0yLCBEUz0wLCBCYW5rPTAsIFdUeXA9MCwgV1M9MCwgUlM9MCwgV089MCwgUk89MCAqLworICAjZGVmaW5lIENGR19DUzJfQ0ZHCTB4MDAwNDc4MDAKKyNlbHNlCisgICNkZWZpbmUgQ09ORklHX1JUQ19NUEM1MjAwCTEJLyogdXNlIGludGVybmFsIE1QQzUyMDAgUlRDICovCisjZW5kaWYKIAogLyoKICAqIFZhcmlvdXMgbG93LWxldmVsIHNldHRpbmdzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDE2MTBoMi5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAxNjEwaDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI2NWUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXAxNjEwaDIuaApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNAorICogVGV4YXMgSW5zdHJ1bWVudHMuCisgKiBLc2hpdGlqIEd1cHRhIDxrc2hpdGlqQHRpLmNvbT4KKyAqIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBUSSBPTUFQIDE2MTAgSDIgYm9hcmQuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIElmIHdlIGFyZSBkZXZlbG9waW5nLCB3ZSBtaWdodCB3YW50IHRvIHN0YXJ0IGFybWJvb3QgZnJvbSByYW0KKyAqIHNvIHdlIE1VU1QgTk9UIGluaXRpYWxpemUgY3JpdGljYWwgcmVncyBsaWtlIG1lbS10aW1pbmcgLi4uCisgKi8KKyNkZWZpbmUgQ09ORklHX0lOSVRfQ1JJVElDQUwgICAgICAgICAgICAvKiB1bmRlZiBmb3IgZGV2ZWxvcGluZyAqLworCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqIChlYXN5IHRvIGNoYW5nZSkKKyAqLworI2RlZmluZSBDT05GSUdfQVJNOTI2RUpTCTEJLyogVGhpcyBpcyBhbiBhcm05MjZlanMgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAJCTEJLyogaW4gYSBUSSBPTUFQIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAxNjEwCQkxCS8qIHdoaWNoIGlzIGluIGEgMTYxMCAqLworI2RlZmluZSBDT05GSUdfSDJfT01BUDE2MTAJMQkvKiBvbiBhbiBIMiBCb2FyZCAqLworCisvKiBpbnB1dCBjbG9jayBvZiBQTEwgKi8KKy8qIHRoZSBPTUFQMTYxMCBIMiBoYXMgMTJNSHogaW5wdXQgY2xvY2sgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQkxMjAwMDAwMAorCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICovCisKKyNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKworLyoKKyAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCShDRkdfRU5WX1NJWkUgKyAxMjgqMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisjZGVmaW5lIENPTkZJR19EUklWRVJfTEFOOTFDOTYKKyNkZWZpbmUgQ09ORklHX0xBTjkxQzk2X0JBU0UgMHgwNDAwMDMwMAorI2RlZmluZSBDT05GSUdfTEFOOTFDOTZfRVhUX1BIWQorCisvKgorICogTlMxNjU1MCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX05TMTY1NTAKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfU0VSSUFMCisjZGVmaW5lIENGR19OUzE2NTUwX1JFR19TSVpFCSgtNCkKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ0xLCSg0ODAwMDAwMCkJCS8qIGNhbiBiZSAxMk0vMzJLaHogb3IgNDhNaHogKi8KKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMQkweGZmZmIwMDAwCS8qIHVhcnQxLCBibHVldG9vdGggdWFydCAqLworCQkJCQkJCisvKgorICogc2VsZWN0IHNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfU0VSSUFMMQkxCS8qIHdlIHVzZSBTRVJJQUwgMSBvbiBPTUFQMTYxMCBIMiAqLworCisvKiBhbGxvdyB0byBvdmVyd3JpdGUgc2VyaWFsIGFuZCBldGhhZGRyICovCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkoQ09ORklHX0NNRF9ERkwgfCBDRkdfQ01EX0RIQ1ApCisjZGVmaW5lIENPTkZJR19CT09UUF9NQVNLCUNPTkZJR19CT09UUF9ERUZBVUxUCisKKy8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKyNpbmNsdWRlIDxjb25maWdzL29tYXAxNTEwLmg+CisKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCisjZGVmaW5lIENPTkZJR19CT09UQVJHUwkibWVtPTMyTSBjb25zb2xlPXR0eVMwLDExNTIwMG44IG5vaW5pdHJkIFwKKwkJCQlyb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9MTU3Ljg3LjgyLjQ4OlwKKwkJCQkvaG9tZS9hMDg3NTQ1MS9td2QvbXlmcy90YXJnZXQgaXA9ZGhjcCIKKyNkZWZpbmUgQ09ORklHX05FVE1BU0sJMjU1LjI1NS4yNTQuMAkvKiB0YWxrIG9uIE1ZIGxvY2FsIG5ldCAqLworI2RlZmluZSBDT05GSUdfSVBBRERSCTE1Ni4xMTcuOTcuMTU2CS8qIHN0YXRpYyBJUCBJIGN1cnJlbnRseSBvd24gKi8KKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCTE1Ni4xMTcuOTcuMTM5CS8qIGN1cnJlbnQgSVAgb2YgbXkgZGV2IHBjICovCisjZGVmaW5lIENPTkZJR19CT09URklMRQkidUltYWdlIgkvKiBmaWxlIHRvIGxvYWQgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENPTkZJR19LR0RCX0JBVURSQVRFCTExNTIwMAkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLworI2RlZmluZSBDT05GSUdfS0dEQl9TRVJfSU5ERVgJMQkvKiB3aGljaCBzZXJpYWwgcG9ydCB0byB1c2UgKi8KKyNlbmRpZgorCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lIENGR19MT05HSEVMUAkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeSAqLworI2RlZmluZSBDRkdfUFJPTVBUCSJPTUFQMTYxMCBIMiAjICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKy8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19QQlNJWkUJKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KQorI2RlZmluZSBDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCTB4MTAwMDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJMHgxMjAwMDAwMAkvKiAzMiBNQiBpbiBEUkFNICovCisKKyN1bmRlZglDRkdfQ0xLU19JTl9IWgkJLyogZXZlcnl0aGluZywgaW5jbCBib2FyZCBpbmZvLCBpbiBIeiAqLworCisjZGVmaW5lIENGR19MT0FEX0FERFIJMHgxMDAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisvKiBUaGUgMTYxMCBoYXMgNiB0aW1lcnMsIHRoZXkgY2FuIGJlIGRyaXZlbiBieSB0aGUgUmVmQ2xrICgxMk1oeikgb3IgYnkKKyAqIERQTEwxLiBUaGlzIHRpbWUgaXMgZnVydGhlciBzdWJkaXZpZGVkIGJ5IGEgbG9jYWwgZGl2aXNvci4KKyAqLworI2RlZmluZSBDRkdfVElNRVJCQVNFCTB4RkZGRUM1MDAJLyogdXNlIHRpbWVyIDEgKi8KKyNkZWZpbmUgQ0ZHX1BWVAk3CS8qIDJeKHB2dCsxKSwgZGl2aWRlIGJ5IDI1NiAqLworI2RlZmluZSBDRkdfSFoJKChDT05GSUdfU1lTX0NMS19GUkVRKS8oMiA8PCBDRkdfUFZUKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU3RhY2sgc2l6ZXMKKyAqCisgKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdworICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDEyOCoxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9JUlEJKDQqMTAyNCkJLyogSVJRIHN0YWNrICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRCSg0KjEwMjQpCS8qIEZJUSBzdGFjayAqLworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBoeXNpY2FsIE1lbW9yeSBNYXAKKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCS8qIHdlIGhhdmUgMSBiYW5rIG9mIERSQU0gKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xCTB4MTAwMDAwMDAJLyogU0RSQU0gQmFuayAjMSAqLworI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRQkweDAyMDAwMDAwCS8qIDMyIE1CICovCisKKyNpZmRlZiBDT05GSUdfQ1MwX0JPT1QKKyNkZWZpbmUgUEhZU19GTEFTSF8xCTB4MEMwMDAwMDAKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DUzNfQk9PVAorI2RlZmluZSBQSFlTX0ZMQVNIXzEJMHgwMDAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJUEhZU19GTEFTSF8xCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgKi8KKyNkZWZpbmUgUEhZU19GTEFTSF9TSVpFCTB4MDIwMDAwMDAJLyogMzJNQiAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJKDI1OSkJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisvKiBhZGRyIG9mIGVudmlyb25tZW50ICovCisjZGVmaW5lIENGR19FTlZfQUREUgkoQ0ZHX0ZMQVNIX0JBU0UgKyAweDAyMDAwMCkKKworLyogdGltZW91dCB2YWx1ZXMgYXJlIGluIHRpY2tzICovCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCSgyMCpDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCSgyMCpDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisjZGVmaW5lIENGR19FTlZfU0laRQkweDIwMDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCTB4MjAwMDAJLyogZW52aXJvbm1lbnQgc3RhcnRzIGhlcmUgKi8KKworI2VuZGlmCQkJCQkJCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwMTYxMGlubi5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAxNjEwaW5uLmgKaW5kZXggOWJkZDc5NS4uZGE4MDQzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL29tYXAxNjEwaW5uLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXAxNjEwaW5uLmgKQEAgLTE1MSw3ICsxNTEsMTIgQEAKICNkZWZpbmUgUEhZU19TRFJBTV8xCTB4MTAwMDAwMDAJLyogU0RSQU0gQmFuayAjMSAqLwogI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRQkweDAyMDAwMDAwCS8qIDMyIE1CICovCiAKLSNkZWZpbmUgUEhZU19GTEFTSF8xCTB4MDAwMDAwMDAJLyogRmxhc2ggQmFuayAjMSAqLworI2lmZGVmIENPTkZJR19DUzBfQk9PVAorI2RlZmluZSBQSFlTX0ZMQVNIXzEJMHgwQzAwMDAwMAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0NTM19CT09UCisjZGVmaW5lIFBIWVNfRkxBU0hfMQkweDAwMDAwMDAwCisjZW5kaWYKIAogI2RlZmluZSBDRkdfRkxBU0hfQkFTRQlQSFlTX0ZMQVNIXzEKIApkaWZmIC0tZ2l0IGEvbGliX3BwYy9ib2FyZC5jIGIvbGliX3BwYy9ib2FyZC5jCmluZGV4IGQ3Y2VlMmIuLjA0YTFiOGIgMTAwNjQ0Ci0tLSBhL2xpYl9wcGMvYm9hcmQuYworKysgYi9saWJfcHBjL2JvYXJkLmMKQEAgLTEwMTEsNiArMTAxMSw5IEBACiB2b2lkIGhhbmcgKHZvaWQpCiB7CiAJcHV0cyAoIiMjIyBFUlJPUiAjIyMgUGxlYXNlIFJFU0VUIHRoZSBib2FyZCAjIyNcbiIpOworI2lmZGVmIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKKwlzaG93X2Jvb3RfcHJvZ3Jlc3MoLTMwKTsKKyNlbmRpZgogCWZvciAoOzspOwogfQogCmRpZmYgLS1naXQgYS9wb3N0L3Bvc3QuYyBiL3Bvc3QvcG9zdC5jCmluZGV4IDg5YWQ2ZjAuLmIzZGY5MWEgMTAwNjQ0Ci0tLSBhL3Bvc3QvcG9zdC5jCisrKyBiL3Bvc3QvcG9zdC5jCkBAIC0xMzEsOCArMTMxLDEyIEBACiAJCQlwb3N0X2xvZyAoIlBPU1QgJXMgIiwgcG9zdF9saXN0W2pdLmNtZCk7CiAJCQlpZiAoZ2QtPnBvc3RfbG9nX3dvcmQgJiBwb3N0X2xpc3Rbal0udGVzdGlkKQogCQkJCXBvc3RfbG9nICgiUEFTU0VEXG4iKTsKLQkJCWVsc2UKKwkJCWVsc2UgewogCQkJCXBvc3RfbG9nICgiRkFJTEVEXG4iKTsKKyNpZmRlZiBDT05GSUdfU0hPV19CT09UX1BST0dSRVNTCisJCQkJc2hvd19ib290X3Byb2dyZXNzKC0zMSk7CisjZW5kaWYKKwkJCX0KIAkJfQogCX0KIH0KQEAgLTIzOSw4ICsyNDMsMTIgQEAKIAkJCWlmICgoKnRlc3QtPnRlc3QpIChmbGFncykgPT0gMCkKIAkJCQlwb3N0X2xvZ19tYXJrX3N1Y2MgKCB0ZXN0LT50ZXN0aWQgKTsKIAkJfSBlbHNlIHsKLQkJaWYgKCgqdGVzdC0+dGVzdCkgKGZsYWdzKSAhPSAwKQorCQlpZiAoKCp0ZXN0LT50ZXN0KSAoZmxhZ3MpICE9IDApIHsKIAkJCXBvc3RfbG9nICgiRkFJTEVEXG4iKTsKKyNpZmRlZiBDT05GSUdfU0hPV19CT09UX1BST0dSRVNTCisJCQlzaG93X2Jvb3RfcHJvZ3Jlc3MoLTMyKTsKKyNlbmRpZgorCQl9CiAJCWVsc2UKIAkJCXBvc3RfbG9nICgiUEFTU0VEXG4iKTsKIAkJfQpkaWZmIC0tZ2l0IGEvcnRjL21rNDh0NTkuYyBiL3J0Yy9tazQ4dDU5LmMKaW5kZXggNjY0ZDMxMC4uNjRmNzUxZiAxMDA2NDQKLS0tIGEvcnRjL21rNDh0NTkuYworKysgYi9ydGMvbWs0OHQ1OS5jCkBAIC04Myw2ICs4MywxOCBAQAogICAgIG91dF9ieXRlKENNT1NfREFUQSwgKHVpbnQ4KXZhbCk7CiB9CiAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0VWQUw1MjAwKQorCitzdGF0aWMgdWNoYXIgcnRjX3JlYWQgKHNob3J0IHJlZykKK3sKKwlyZXR1cm4gaW44KFJUQyhyZWcpKTsKK30KKworc3RhdGljIHZvaWQgcnRjX3dyaXRlIChzaG9ydCByZWcsIHVjaGFyIHZhbCkKK3sKKwlvdXQ4KFJUQyhyZWcpLHZhbCk7Cit9CisKICNlbHNlCiAjIGVycm9yIEJvYXJkIHNwZWNpZmljIHJ0YyBhY2Nlc3MgZnVuY3Rpb25zIHNob3VsZCBiZSBzdXBwbGllZAogI2VuZGlmCg==