LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTcyMCBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcvZnZXIgPG1hZ0BzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSnVtcCB2ZWN0b3IgdGFibGUgYXMgaW4gdGFibGUgMy4xIGluIFsxXQogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCgouZ2xvYmwgX3N0YXJ0Cl9zdGFydDogYglyZXNldAoJbGRyCXBjLCBfdW5kZWZpbmVkX2luc3RydWN0aW9uCglsZHIJcGMsIF9zb2Z0d2FyZV9pbnRlcnJ1cHQKCWxkcglwYywgX3ByZWZldGNoX2Fib3J0CglsZHIJcGMsIF9kYXRhX2Fib3J0CiNpZmRlZiBDT05GSUdfTFBDMjI5MgoJLndvcmQJMHhCNDQwNUY3NiAvKiAyJ3MgY29tcGxlbWVudCBvZiB0aGUgY2hlY2tzdW0gb2YgdGhlIHZlY3RvcnMgKi8KI2Vsc2UKCWxkcglwYywgX25vdF91c2VkCiNlbmRpZgoJbGRyCXBjLCBfaXJxCglsZHIJcGMsIF9maXEKCl91bmRlZmluZWRfaW5zdHJ1Y3Rpb246IC53b3JkIHVuZGVmaW5lZF9pbnN0cnVjdGlvbgpfc29mdHdhcmVfaW50ZXJydXB0Ogkud29yZCBzb2Z0d2FyZV9pbnRlcnJ1cHQKX3ByZWZldGNoX2Fib3J0Ogkud29yZCBwcmVmZXRjaF9hYm9ydApfZGF0YV9hYm9ydDoJCS53b3JkIGRhdGFfYWJvcnQKX25vdF91c2VkOgkJLndvcmQgbm90X3VzZWQKX2lycToJCQkud29yZCBpcnEKX2ZpcToJCQkud29yZCBmaXEKCgkuYmFsaWdubCAxNiwweGRlYWRiZWVmCgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogU3RhcnR1cCBDb2RlIChyZXNldCB2ZWN0b3IpCiAqCiAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBSQU0hCiAqIHJlbG9jYXRlIGFybWJvb3QgdG8gcmFtCiAqIHNldHVwIHN0YWNrCiAqIGp1bXAgdG8gc2Vjb25kIHN0YWdlCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKX1RFWFRfQkFTRToKCS53b3JkCVRFWFRfQkFTRQoKLmdsb2JsIF9hcm1ib290X3N0YXJ0Cl9hcm1ib290X3N0YXJ0OgoJLndvcmQgX3N0YXJ0CgovKgogKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiB0aGUgYm9hcmQtc3BlY2lmaWMgbGlua2VyIHNjcmlwdC4KICovCi5nbG9ibCBfYnNzX3N0YXJ0Cl9ic3Nfc3RhcnQ6Cgkud29yZCBfX2Jzc19zdGFydAoKLmdsb2JsIF9ic3NfZW5kCl9ic3NfZW5kOgoJLndvcmQgX2VuZAoKI2lmZGVmIENPTkZJR19VU0VfSVJRCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCi5nbG9ibCBJUlFfU1RBQ0tfU1RBUlQKSVJRX1NUQUNLX1NUQVJUOgoJLndvcmQJMHgwYmFkYzBkZQoKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIEZJUV9TVEFDS19TVEFSVApGSVFfU1RBQ0tfU1RBUlQ6Cgkud29yZCAweDBiYWRjMGRlCiNlbmRpZgoKCi8qCiAqIHRoZSBhY3R1YWwgcmVzZXQgY29kZQogKi8KCnJlc2V0OgoJLyoKCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKCSAqLwoJbXJzCXIwLGNwc3IKCWJpYwlyMCxyMCwjMHgxZgoJb3JyCXIwLHIwLCMweDEzCgltc3IJY3BzcixyMAoKCS8qCgkgKiB3ZSBkbyBzeXMtY3JpdGljYWwgaW5pdHMgb25seSBhdCByZWJvb3QsCgkgKiBub3Qgd2hlbiBib290aW5nIGZyb20gcmFtIQoJICovCiNpZm5kZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAoJYmwJY3B1X2luaXRfY3JpdAojZW5kaWYKCiNpZmRlZiBDT05GSUdfTFBDMjI5MgoJYmwJbG93bGV2ZWxfaW5pdAojZW5kaWYKCiNpZm5kZWYgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKcmVsb2NhdGU6CQkJCS8qIHJlbG9jYXRlIFUtQm9vdCB0byBSQU0JICAgICovCglhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gKi8KCWNtcAlyMCwgcjEJCQkvKiBkb24ndCByZWxvYyBkdXJpbmcgZGVidWcJICAgICovCgliZXEJc3RhY2tfc2V0dXAKCiNpZiBURVhUX0JBU0UKI2lmbmRlZiBDT05GSUdfTFBDMjI5MiAvKiBhbHJlYWR5IGRvbmUgaW4gbG93bGV2ZWxfaW5pdCAqLwoJbGRyCXIyLCA9MHgwCQkvKiBSZWxvY2F0ZSB0aGUgZXhjZXB0aW9uIHZlY3RvcnMgICAqLwoJY21wCXIxLCByMgkJCS8qIGFuZCBhc3NvY2lhdGVkIGRhdGEgdG8gYWRkcmVzcyAgICovCglsZG1uZWlhIHIwISwge3IzLXIxMH0JCS8qIDB4MC4gRG8gbm90aGluZyBpZiBURVhUX0JBU0UgaXMgICovCglzdG1uZWlhIHIyISwge3IzLXIxMH0JCS8qIDB4MC4gQ29weSB0aGUgZmlyc3QgMTUgd29yZHMuICAgICovCglsZG1uZWlhIHIwLCB7cjMtcjl9CglzdG1uZWlhIHIyLCB7cjMtcjl9CglhZHJuZQlyMCwgX3N0YXJ0CQkvKiByZXN0b3JlIHIwCQkJICAgICovCiNlbmRpZgkvKiAhQ09ORklHX0xQQzIyOTIgKi8KI2VuZGlmCgoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJbGRyCXIzLCBfYnNzX3N0YXJ0CglzdWIJcjIsIHIzLCByMgkJLyogcjIgPC0gc2l6ZSBvZiBhcm1ib290CSAgICAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcwkgICAgKi8KCmNvcHlfbG9vcDoKCWxkbWlhCXIwISwge3IzLXIxMH0JCS8qIGNvcHkgZnJvbSBzb3VyY2UgYWRkcmVzcyBbcjBdICAgICovCglzdG1pYQlyMSEsIHtyMy1yMTB9CQkvKiBjb3B5IHRvICAgdGFyZ2V0IGFkZHJlc3MgW3IxXSAgICAqLwoJY21wCXIwLCByMgkJCS8qIHVudGlsIHNvdXJjZSBlbmQgYWRkcmVlZSBbcjJdICAgICovCglibGUJY29weV9sb29wCgojZW5kaWYJLyogQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QgKi8KCgkvKiBTZXQgdXAgdGhlIHN0YWNrCQkJCQkJICAgICovCnN0YWNrX3NldHVwOgoJbGRyCXIwLCBfVEVYVF9CQVNFCQkvKiB1cHBlciAxMjggS2lCOiByZWxvY2F0ZWQgdWJvb3QgICAqLwoJc3ViCXIwLCByMCwgI0NPTkZJR19TWVNfTUFMTE9DX0xFTiAvKiBtYWxsb2MgYXJlYQkJCSAgICAqLwoJc3ViCXIwLCByMCwgI0NPTkZJR19TWVNfR0JMX0RBVEFfU0laRSAvKiBiZGluZm8JCQkgICAgKi8KI2lmZGVmIENPTkZJR19VU0VfSVJRCglzdWIJcjAsIHIwLCAjKENPTkZJR19TVEFDS1NJWkVfSVJRK0NPTkZJR19TVEFDS1NJWkVfRklRKQojZW5kaWYKCXN1YglzcCwgcjAsICMxMgkJLyogbGVhdmUgMyB3b3JkcyBmb3IgYWJvcnQtc3RhY2sgICAgKi8KCWJpYwlzcCwgc3AsICM3CQkvKiA4LWJ5dGUgYWxpZ25tZW50IGZvciBBQkkgY29tcGxpYW5jZSAqLwoKY2xlYXJfYnNzOgoJbGRyCXIwLCBfYnNzX3N0YXJ0CQkvKiBmaW5kIHN0YXJ0IG9mIGJzcyBzZWdtZW50CSAgICAqLwoJbGRyCXIxLCBfYnNzX2VuZAkJLyogc3RvcCBoZXJlCQkJICAgICovCgltb3YJcjIsICMweDAwMDAwMDAwCQkvKiBjbGVhcgkJCSAgICAqLwoKY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4JCSAgICAqLwoJYWRkCXIwLCByMCwgIzQKCWNtcAlyMCwgcjEKCWJsZQljbGJzc19sCgoJbGRyCXBjLCBfc3RhcnRfYXJtYm9vdAoKX3N0YXJ0X2FybWJvb3Q6IC53b3JkIHN0YXJ0X2FybWJvb3QKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIENQVV9pbml0X2NyaXRpY2FsIHJlZ2lzdGVycwogKgogKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCiAqIHNldHVwIG1lbW9yeSB0aW1pbmcKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgojaWYgZGVmaW5lZChDT05GSUdfSU1QQTcpIHx8IGRlZmluZWQoQ09ORklHX0VQNzMxMikgfHwgZGVmaW5lZChDT05GSUdfQVJNQURJTExPKQoKLyogSW50ZXJ1cHQtQ29udHJvbGxlciBiYXNlIGFkZHJlc3NlcyAqLwpJTlRNUjE6CQkud29yZAkweDgwMDAwMjgwIEAgMzIgYml0IHNpemUKSU5UTVIyOgkJLndvcmQJMHg4MDAwMTI4MCBAIDE2IGJpdCBzaXplCklOVE1SMzoJCS53b3JkCTB4ODAwMDIyODAgQCAgOCBiaXQgc2l6ZQoKLyogU1lTQ09OcyAqLwpTWVNDT04xOgkud29yZAkweDgwMDAwMTAwClNZU0NPTjI6CS53b3JkCTB4ODAwMDExMDAKU1lTQ09OMzoJLndvcmQJMHg4MDAwMjIwMAoKI2RlZmluZSBDTEtDVEwJICAgICAgIDB4NiAgLyogbWFzayAqLwojZGVmaW5lIENMS0NUTF8xOCAgICAgIDB4MCAgLyogMTguNDMyIE1IeiAqLwojZGVmaW5lIENMS0NUTF8zNiAgICAgIDB4MiAgLyogMzYuODY0IE1IeiAqLwojZGVmaW5lIENMS0NUTF80OSAgICAgIDB4NCAgLyogNDkuMTUyIE1IeiAqLwojZGVmaW5lIENMS0NUTF83MyAgICAgIDB4NiAgLyogNzMuNzI4IE1IeiAqLwoKI2VsaWYgZGVmaW5lZChDT05GSUdfTFBDMjI5MikKUExMQ0ZHX0FEUjoJLndvcmQJUExMQ0ZHClBMTEZFRURfQURSOgkud29yZAlQTExGRUVEClBMTENPTl9BRFI6CS53b3JkCVBMTENPTgpQTExTVEFUX0FEUjoJLndvcmQJUExMU1RBVApWUEJESVZfQURSOgkud29yZAlWUEJESVYKTUVNTUFQX0FEUjoJLndvcmQJTUVNTUFQCgojZW5kaWYKCmNwdV9pbml0X2NyaXQ6CiNpZiBkZWZpbmVkKENPTkZJR19JTVBBNykgfHwgZGVmaW5lZChDT05GSUdfRVA3MzEyKSB8fCBkZWZpbmVkKENPTkZJR19BUk1BRElMTE8pCgoJLyoKCSAqIG1hc2sgYWxsIElSUXMgYnkgY2xlYXJpbmcgYWxsIGJpdHMgaW4gdGhlIElOVE1ScwoJICovCgltb3YJcjEsICMweDAwCglsZHIJcjAsIElOVE1SMQoJc3RyCXIxLCBbcjBdCglsZHIJcjAsIElOVE1SMgoJc3RyCXIxLCBbcjBdCglsZHIJcjAsIElOVE1SMwoJc3RyCXIxLCBbcjBdCgoJLyoKCSAqIGZsdXNoIHY0IEkvRCBjYWNoZXMKCSAqLwoJbW92CXIwLCAjMAoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkvKiBmbHVzaCB2My92NCBjYWNoZSAqLwoJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkvKiBmbHVzaCB2NCBUTEIgKi8KCgkvKgoJICogZGlzYWJsZSBNTVUgc3R1ZmYgYW5kIGNhY2hlcwoJICovCgltcmMJcDE1LDAscjAsYzEsYzAKCWJpYwlyMCwgcjAsICMweDAwMDAyMzAwCUAgY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpCgliaWMJcjAsIHIwLCAjMHgwMDAwMDA4ZglAIGNsZWFyIGJpdHMgNywgMzowIChCLS0tIFdDQU0pCglvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMglAIHNldCBiaXQgMiAoQSkgQWxpZ24KCW1jcglwMTUsMCxyMCxjMSxjMAojZWxpZiBkZWZpbmVkKENPTkZJR19ORVRBUk0pCgkvKgoJICogcHJpb3IgdG8gc29mdHdhcmUgcmVzZXQgOiBuZWVkIHRvIHNldCBwaW4gUE9SVEM0IHRvIGJlICpIUkVTRVQKCSAqLwoJbGRyCXIwLCA9TkVUQVJNX0dFTl9NT0RVTEVfQkFTRQoJbGRyCXIxLCA9KE5FVEFSTV9HRU5fUE9SVF9NT0RFKDB4MTApIHwgXAoJCQlORVRBUk1fR0VOX1BPUlRfRElSKDB4MTApKQoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9QT1JUQ10KCS8qCgkgKiBzb2Z0d2FyZSByZXNldCA6IHNlZSBIVyBSZWYuIEd1aWRlIDguMi40IDogU29mdHdhcmUgU2VydmljZSByZWdpc3RlcgoJICoJCSAgICBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhpcyBwcm9jZXNzCgkgKi8KCWxkcglyMCwgPU5FVEFSTV9HRU5fTU9EVUxFX0JBU0UKCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQQoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRCCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEEKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQgoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJLyoKCSAqIHNldHVwIFBMTCBhbmQgU3lzdGVtIENvbmZpZwoJICovCglsZHIJcjAsID1ORVRBUk1fR0VOX01PRFVMRV9CQVNFCgoJbGRyCXIxLCA9KAlORVRBUk1fR0VOX1NZU19DRkdfTEVORElBTiB8IFwKCQkJTkVUQVJNX0dFTl9TWVNfQ0ZHX0JVU0ZVTEwgfCBcCgkJCU5FVEFSTV9HRU5fU1lTX0NGR19VU0VSX0VOIHwgXAoJCQlORVRBUk1fR0VOX1NZU19DRkdfQUxJR05fQUJPUlQgfCBcCgkJCU5FVEFSTV9HRU5fU1lTX0NGR19CVVNBUkJfSU5UIHwgXAoJCQlORVRBUk1fR0VOX1NZU19DRkdfQlVTTU9OX0VOICkKCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1NZU1RFTV9DT05UUk9MXQoKI2lmbmRlZiBDT05GSUdfTkVUQVJNX1BMTF9CWVBBU1MKCWxkcglyMSwgPSgJTkVUQVJNX0dFTl9QTExfQ1RMX1BMTENOVChORVRBUk1fUExMX0NPVU5UX1ZBTCkgfCBcCgkJCU5FVEFSTV9HRU5fUExMX0NUTF9QT0xUU1RfREVGIHwgXAoJCQlORVRBUk1fR0VOX1BMTF9DVExfSU5ESVYoMSkgfCBcCgkJCU5FVEFSTV9HRU5fUExMX0NUTF9JQ1BfREVGIHwgXAoJCQlORVRBUk1fR0VOX1BMTF9DVExfT1VURElWKDIpICkKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fUExMX0NPTlRST0xdCiNlbmRpZgoKCS8qCgkgKiBtYXNrIGFsbCBJUlFzIGJ5IGNsZWFyaW5nIGFsbCBiaXRzIGluIHRoZSBJTlRNUnMKCSAqLwoJbW92CXIxLCAjMAoJbGRyCXIwLCA9TkVUQVJNX0dFTl9NT0RVTEVfQkFTRQoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9JTlRSX0VOQUJMRV0KCiNlbGlmIGRlZmluZWQoQ09ORklHX1MzQzQ1MTBCKQoKCS8qCgkgKiBNYXNrIG9mZiBhbGwgSVJRIHNvdXJjZXMKCSAqLwoJbGRyCXIxLCA9UkVHX0lOVE1BU0sKCWxkcglyMCwgPTB4M0ZGRkZGCglzdHIJcjAsIFtyMV0KCgkvKgoJICogRGlzYWJsZSBDYWNoZQoJICovCglsZHIgcjAsID1SRUdfU1lTQ0ZHCglsZHIgcjEsID0weDgzZmZmZmEwCS8qIGNhY2hlLWRpc2FibGVkICAqLwoJc3RyIHIxLCBbcjBdCgojZWxpZiBkZWZpbmVkKENPTkZJR19JTlRFR1JBVE9SKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpCgkvKiBObyBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBmb3IgSW50ZWdyYXRvckFQL0NNNzIwVCBhcyB5ZXQgKi8KI2VsaWYgZGVmaW5lZChDT05GSUdfTFBDMjI5MikKCS8qIFNldC11cCBQTEwgKi8KCW1vdglyMywgIzB4QUEKCW1vdglyNCwgIzB4NTUKCS8qIEZpcnN0IGRpc2Nvbm5lY3QgYW5kIGRpc2FibGUgdGhlIFBMTCAqLwoJbGRyCXIwLCBQTExDT05fQURSCgltb3YJcjEsICMweDAwCglzdHIJcjEsIFtyMF0KCWxkcglyMCwgUExMRkVFRF9BRFIgLyogc3RhcnQgZmVlZCBzZXF1ZW5jZSAqLwoJc3RyCXIzLCBbcjBdCglzdHIJcjQsIFtyMF0JLyogZmVlZCBzZXF1ZW5jZSBkb25lICovCgkvKiBTZXQgbmV3IE0gYW5kIFAgdmFsdWVzICovCglsZHIJcjAsIFBMTENGR19BRFIKCW1vdglyMSwgIzB4MjMJLyogTT00IGFuZCBQPTIgKi8KCXN0cglyMSwgW3IwXQoJbGRyCXIwLCBQTExGRUVEX0FEUiAvKiBzdGFydCBmZWVkIHNlcXVlbmNlICovCglzdHIJcjMsIFtyMF0KCXN0cglyNCwgW3IwXQkvKiBmZWVkIHNlcXVlbmNlIGRvbmUgKi8KCS8qIFRoZW4gZW5hYmxlIHRoZSBQTEwgKi8KCWxkcglyMCwgUExMQ09OX0FEUgoJbW92CXIxLCAjMHgwMQkvKiBQTEwgZW5hYmxlIGJpdCAqLwoJc3RyCXIxLCBbcjBdCglsZHIJcjAsIFBMTEZFRURfQURSIC8qIHN0YXJ0IGZlZWQgc2VxdWVuY2UgKi8KCXN0cglyMywgW3IwXQoJc3RyCXI0LCBbcjBdCS8qIGZlZWQgc2VxdWVuY2UgZG9uZSAqLwoJLyogV2FpdCBmb3IgdGhlIGxvY2sgKi8KCWxkcglyMCwgUExMU1RBVF9BRFIKCW1vdglyMSwgIzB4NDAwCS8qIGxvY2sgYml0ICovCmxvY2tfbG9vcDoKCWxkcglyMiwgW3IwXQoJYW5kCXIyLCByMSwgcjIKCWNtcAlyMiwgIzAKCWJlcQlsb2NrX2xvb3AKCS8qIEFuZCBmaW5hbGx5IGNvbm5lY3QgdGhlIFBMTCAqLwoJbGRyCXIwLCBQTExDT05fQURSCgltb3YJcjEsICMweDAzCS8qIFBMTCBlbmFibGUgYml0IGFuZCBjb25uZWN0IGJpdCAqLwoJc3RyCXIxLCBbcjBdCglsZHIJcjAsIFBMTEZFRURfQURSIC8qIHN0YXJ0IGZlZWQgc2VxdWVuY2UgKi8KCXN0cglyMywgW3IwXQoJc3RyCXI0LCBbcjBdCS8qIGZlZWQgc2VxdWVuY2UgZG9uZSAqLwoJLyogU2V0LXVwIFZQQkRJViByZWdpc3RlciAqLwoJbGRyCXIwLCBWUEJESVZfQURSCgltb3YJcjEsICMweDAxCS8qIFZQQiBjbG9jayBpcyBzYW1lIGFzIHByb2Nlc3MgY2xvY2sgKi8KCXN0cglyMSwgW3IwXQojZWxzZQojZXJyb3IgTm8gY3B1X2luaXRfY3JpdCgpIGRlZmluZWQgZm9yIGN1cnJlbnQgQ1BVIHR5cGUKI2VuZGlmCgojaWZkZWYgQ09ORklHX0FSTTdfUkVWRAoJLyogc2V0IGNsb2NrIHNwZWVkICovCgkvKiAhISEgd2UgcnVuIEAgMzYgTUh6IGR1ZSB0byBhIGhhcmR3YXJlIGZsYXcgaW4gUmV2LiBEIHByb2Nlc3NvcnMgKi8KCS8qICEhISBub3QgZG9pbmcgRFJBTSByZWZyZXNoIHByb3Blcmx5ISAqLwoJbGRyCXIwLCBTWVNDT04zCglsZHIJcjEsIFtyMF0KCWJpYwlyMSwgcjEsICNDTEtDVEwKCW9ycglyMSwgcjEsICNDTEtDVExfMzYKCXN0cglyMSwgW3IwXQojZW5kaWYKCiNpZm5kZWYgQ09ORklHX0xQQzIyOTIKCW1vdglpcCwgbHIKCS8qCgkgKiBiZWZvcmUgcmVsb2NhdGluZywgd2UgaGF2ZSB0byBzZXR1cCBSQU0gdGltaW5nCgkgKiBiZWNhdXNlIG1lbW9yeSB0aW1pbmcgaXMgYm9hcmQtZGVwZW5kZW50LCB5b3Ugd2lsbAoJICogZmluZCBhIGxvd2xldmVsX2luaXQuUyBpbiB5b3VyIGJvYXJkIGRpcmVjdG9yeS4KCSAqLwoJYmwJbG93bGV2ZWxfaW5pdAoJbW92CWxyLCBpcAojZW5kaWYKCgltb3YJcGMsIGxyCgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSW50ZXJydXB0IGhhbmRsaW5nCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKQApAIElSUSBzdGFjayBmcmFtZS4KQAojZGVmaW5lIFNfRlJBTUVfU0laRQk3MgoKI2RlZmluZSBTX09MRF9SMAk2OAojZGVmaW5lIFNfUFNSCQk2NAojZGVmaW5lIFNfUEMJCTYwCiNkZWZpbmUgU19MUgkJNTYKI2RlZmluZSBTX1NQCQk1MgoKI2RlZmluZSBTX0lQCQk0OAojZGVmaW5lIFNfRlAJCTQ0CiNkZWZpbmUgU19SMTAJCTQwCiNkZWZpbmUgU19SOQkJMzYKI2RlZmluZSBTX1I4CQkzMgojZGVmaW5lIFNfUjcJCTI4CiNkZWZpbmUgU19SNgkJMjQKI2RlZmluZSBTX1I1CQkyMAojZGVmaW5lIFNfUjQJCTE2CiNkZWZpbmUgU19SMwkJMTIKI2RlZmluZSBTX1IyCQk4CiNkZWZpbmUgU19SMQkJNAojZGVmaW5lIFNfUjAJCTAKCiNkZWZpbmUgTU9ERV9TVkMgMHgxMwojZGVmaW5lIElfQklUCSAweDgwCgovKgogKiB1c2UgYmFkX3NhdmVfdXNlcl9yZWdzIGZvciBhYm9ydC9wcmVmZXRjaC91bmRlZi9zd2kgLi4uCiAqIHVzZSBpcnFfc2F2ZV91c2VyX3JlZ3MgLyBpcnFfcmVzdG9yZV91c2VyX3JlZ3MgZm9yIElSUS9GSVEgaGFuZGxpbmcKICovCgoJLm1hY3JvCWJhZF9zYXZlX3VzZXJfcmVncwoJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIENhbGxpbmcgcjAtcjEyCglhZGQJcjgsIHNwLCAjU19QQwoKCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKCXN1YglyMiwgcjIsICMoQ09ORklHX1NUQUNLU0laRStDT05GSUdfU1lTX01BTExPQ19MRU4pCglzdWIJcjIsIHIyLCAjKENPTkZJR19TWVNfR0JMX0RBVEFfU0laRSs4KQlAIHNldCBiYXNlIDIgd29yZHMgaW50byBhYm9ydCBzdGFjawoJbGRtaWEJcjIsIHtyMiAtIHI0fQkJCUAgZ2V0IHBjLCBjcHNyLCBvbGRfcjAKCWFkZAlyMCwgc3AsICNTX0ZSQU1FX1NJWkUJCUAgcmVzdG9yZSBzcF9TVkMKCglhZGQJcjUsIHNwLCAjU19TUAoJbW92CXIxLCBscgoJc3RtaWEJcjUsIHtyMCAtIHI0fQkJCUAgc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IsIG9sZF9yCgltb3YJcjAsIHNwCgkuZW5kbQoKCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJYWRkCXI4LCBzcCwgI1NfUEMKCXN0bWRiCXI4LCB7c3AsIGxyfV4JCQlAIENhbGxpbmcgU1AsIExSCglzdHIJbHIsIFtyOCwgIzBdCQkJQCBTYXZlIGNhbGxpbmcgUEMKCW1ycwlyNiwgc3BzcgoJc3RyCXI2LCBbcjgsICM0XQkJCUAgU2F2ZSBDUFNSCglzdHIJcjAsIFtyOCwgIzhdCQkJQCBTYXZlIE9MRF9SMAoJbW92CXIwLCBzcAoJLmVuZG0KCgkubWFjcm8JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCglsZG1pYQlzcCwge3IwIC0gbHJ9XgkJCUAgQ2FsbGluZyByMCAtIGxyCgltb3YJcjAsIHIwCglsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN1YnMJcGMsIGxyLCAjNAkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKCS5lbmRtCgoJLm1hY3JvIGdldF9iYWRfc3RhY2sKCWxkcglyMTMsIF9hcm1ib290X3N0YXJ0CQlAIHNldHVwIG91ciBtb2RlIHN0YWNrCglzdWIJcjEzLCByMTMsICMoQ09ORklHX1NUQUNLU0laRStDT05GSUdfU1lTX01BTExPQ19MRU4pCglzdWIJcjEzLCByMTMsICMoQ09ORklHX1NZU19HQkxfREFUQV9TSVpFKzgpIEAgcmVzZXJ2ZWQgYSBjb3VwbGUgc3BvdHMgaW4gYWJvcnQgc3RhY2sKCglzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciAvIHNwc3IKCW1ycwlsciwgc3BzcgoJc3RyCWxyLCBbcjEzLCAjNF0KCgltb3YJcjEzLCAjTU9ERV9TVkMJCQlAIHByZXBhcmUgU1ZDLU1vZGUKCW1zcglzcHNyX2MsIHIxMwoJbW92CWxyLCBwYwoJbW92cwlwYywgbHIKCS5lbmRtCgoJLm1hY3JvIGdldF9pcnFfc3RhY2sJCQlAIHNldHVwIElSUSBzdGFjawoJbGRyCXNwLCBJUlFfU1RBQ0tfU1RBUlQKCS5lbmRtCgoJLm1hY3JvIGdldF9maXFfc3RhY2sJCQlAIHNldHVwIEZJUSBzdGFjawoJbGRyCXNwLCBGSVFfU1RBQ0tfU1RBUlQKCS5lbmRtCgovKgogKiBleGNlcHRpb24gaGFuZGxlcnMKICovCgkuYWxpZ24JNQp1bmRlZmluZWRfaW5zdHJ1Y3Rpb246CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgoKCS5hbGlnbgk1CnNvZnR3YXJlX2ludGVycnVwdDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fc29mdHdhcmVfaW50ZXJydXB0CgoJLmFsaWduCTUKcHJlZmV0Y2hfYWJvcnQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX3ByZWZldGNoX2Fib3J0CgoJLmFsaWduCTUKZGF0YV9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fZGF0YV9hYm9ydAoKCS5hbGlnbgk1Cm5vdF91c2VkOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19ub3RfdXNlZAoKI2lmZGVmIENPTkZJR19VU0VfSVJRCgoJLmFsaWduCTUKaXJxOgoJZ2V0X2lycV9zdGFjawoJaXJxX3NhdmVfdXNlcl9yZWdzCglibAlkb19pcnEKCWlycV9yZXN0b3JlX3VzZXJfcmVncwoKCS5hbGlnbgk1CmZpcToKCWdldF9maXFfc3RhY2sKCS8qIHNvbWVvbmUgb3VnaHQgdG8gd3JpdGUgYSBtb3JlIGVmZmljdGlvbiBmaXFfc2F2ZV91c2VyX3JlZ3MgKi8KCWlycV9zYXZlX3VzZXJfcmVncwoJYmwJZG9fZmlxCglpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCiNlbHNlCgoJLmFsaWduCTUKaXJxOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19pcnEKCgkuYWxpZ24JNQpmaXE6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2ZpcQoKI2VuZGlmCgojaWYgZGVmaW5lZChDT05GSUdfSU1QQTcpIHx8IGRlZmluZWQoQ09ORklHX0VQNzMxMikgfHwgZGVmaW5lZChDT05GSUdfQVJNQURJTExPKQoJLmFsaWduCTUKLmdsb2JsIHJlc2V0X2NwdQpyZXNldF9jcHU6Cgltb3YJaXAsICMwCgltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgY2FjaGUKCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgZmx1c2ggVExCICh2NCkKCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgZ2V0IGN0cmwgcmVnaXN0ZXIKCWJpYwlpcCwgaXAsICMweDAwMGYJCQlAIC4uLi4uLi4uLi4uLndjYW0KCWJpYwlpcCwgaXAsICMweDIxMDAJCQlAIC4udi4uLi5zLi4uLi4uLi4KCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgoJbW92CXBjLCByMAojZWxpZiBkZWZpbmVkKENPTkZJR19ORVRBUk0pCgkuYWxpZ24JNQouZ2xvYmwgcmVzZXRfY3B1CnJlc2V0X2NwdToKCWxkcglyMSwgPU5FVEFSTV9NRU1fTU9EVUxFX0JBU0UKCWxkcglyMCwgW3IxLCAjK05FVEFSTV9NRU1fQ1MwX0JBU0VfQUREUl0KCWxkcglyMSwgPTB4RkZGRkYwMDAKCWFuZAlyMCwgcjEsIHIwCglsZHIJcjEsID0ocmVsb2NhdGUtVEVYVF9CQVNFKQoJYWRkCXIwLCByMSwgcjAKCWxkcglyNCwgPU5FVEFSTV9HRU5fTU9EVUxFX0JBU0UKCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQQoJc3RyCXIxLCBbcjQsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRCCglzdHIJcjEsIFtyNCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEEKCXN0cglyMSwgW3I0LCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQgoJc3RyCXIxLCBbcjQsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbW92CXBjLCByMAojZWxpZiBkZWZpbmVkKENPTkZJR19TM0M0NTEwQikKLyogTm90aGluZyBkb25lIGhlcmUgYXMgcmVzZXRpbmcgdGhlIENQVSBpcyBib2FyZCBzcGVjaWZpYywgZGVwZW5kaW5nCiAqIG9uIGV4dGVybmFsIHBlcmlwaGVyYWxzIHN1Y2ggYXMgd2F0Y2hkb2cgdGltZXJzLCBldGMuICovCiNlbGlmIGRlZmluZWQoQ09ORklHX0lOVEVHUkFUT1IpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfSU5URUdSQVRPUikKCS8qIE5vIHNwZWNpZmljIHJlc2V0IGFjdGlvbnMgZm9yIEludGVncmF0b3JBUC9DTTcyMFQgYXMgeWV0ICovCiNlbGlmIGRlZmluZWQoQ09ORklHX0xQQzIyOTIpCgkuYWxpZ24JNQouZ2xvYmwgcmVzZXRfY3B1CnJlc2V0X2NwdToKCW1vdglwYywgcjAKI2Vsc2UKI2Vycm9yIE5vIHJlc2V0X2NwdSgpIGRlZmluZWQgZm9yIGN1cnJlbnQgQ1BVIHR5cGUKI2VuZGlmCg==