LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KICoKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgovKgogKiBib2FyZC9jb25maWcuaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKICovCgojaWZuZGVmIF9fQ09ORklHX0gKI2RlZmluZSBfX0NPTkZJR19ICgovKgogKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogKiAoZWFzeSB0byBjaGFuZ2UpCiAqLwoKI2RlZmluZSBDT05GSUdfWDg2CQkxCS8qIFRoaXMgaXMgYSBYODYgQ1BVCQkqLwoKI2RlZmluZSBDRkdfU0RSQU1fUFJFQ0hBUkdFX0RFTEFZIDYgICAgIC8qIDZUICovCQojZGVmaW5lIENGR19TRFJBTV9SRUZSRVNIX1JBVEUgICAgNzggICAgLyogNy44dVMgKGNob2ljZXMgYXJlIDcuOCwgMTUuNiwgMzEuMiBvciA2Mi41dVMpICovCiNkZWZpbmUgQ0ZHX1NEUkFNX1JBU19DQVNfREVMQVkgICAzICAgICAvKiAzVCAqLwoKLyogZGVmaW5lIGF0IG1vc3Qgb25lIG9mIHRoZXNlICovCiN1bmRlZiBDRkdfU0RSQU1fQ0FTX0xBVEVOQ1lfMlQKI2RlZmluZSBDRkdfU0RSQU1fQ0FTX0xBVEVOQ1lfM1QKCiNkZWZpbmUgQ0ZHX1NDNTIwX0hJR0hfU1BFRUQgICAgMCAgICAgICAvKiAxMDAgb3IgMTMzTUh6ICovCiNkZWZpbmUgQ0ZHX1JFU0VUX0dFTkVSSUMgICAgICAgMSAgICAgICAvKiB1c2UgdHJpcHBsZS1mYXVsdCB0byByZXNldCBjcHUgKi8KI3VuZGVmICBDRkdfUkVTRVRfU0M1MjAgICAgICAgICAgICAgICAgIC8qIHVzZSBTQzUyMCBNTUNSJ3MgdG8gcmVzZXQgY3B1ICovCiN1bmRlZiAgQ0ZHX1RJTUVSX1NDNTIwICAgICAgICAgICAgICAgICAvKiB1c2UgU0M1MjAgc3d0aW1lcnMgKi8KI2RlZmluZSBDRkdfVElNRVJfR0VORVJJQyAgICAgICAxICAgICAgIC8qIHVzZSB0aGUgaTgyNTQgUElUIHRpbWVycyAqLwojdW5kZWYgIENGR19USU1FUl9UU0MgICAgICAgICAgICAgICAgICAgLyogdXNlIHRoZSBQZW50aXVtIFRTQyB0aW1lcnMgKi8KI2RlZmluZSAgQ0ZHX1VTRV9TSU9fVUFSVCAgICAgICAwICAgICAgIC8qIHByZWZlciB0aGUgdWFydHMgb24gdGhlIFNJTyB0byB0aG9zZQoJCQkJCSAqIGluIHRoZSBTQzUyMCBvbiB0aGUgQ0RQICovCgojZGVmaW5lIENGR19TVEFDS19TSVpFICAgICAgICAgIDB4ODAwMCAgLyogU2l6ZSBvZiBib290bG9hZGVyIHN0YWNrICovCgojZGVmaW5lIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MgMQojZGVmaW5lIENPTkZJR19MQVNUX1NUQUdFX0lOSVQgICAgMQoKLyoKICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCiAqLwojZGVmaW5lIENPTkZJR19NQUxMT0NfU0laRQkoQ0ZHX0VOVl9TSVpFICsgMTI4KjEwMjQpCgoKLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLwojZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCiNkZWZpbmUgQ0ZHX0VOVl9JU19OT1dIRVJFIDEKI3VuZGVmIENGR19FTlZfSVNfSU5fRkxBU0ggCiN1bmRlZiBDRkdfRU5WX0lTX0lOX05WUkFNIAojdW5kZWYgQ0ZHX0VOVl9JU19JTkVFUFJPTQoKI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTk2MDAKCiNkZWZpbmUgQ09ORklHX0NPTU1BTkRTICAgICAgICAgKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9QQ0kgfCBDRkdfQ01EX0pGRlMyIHwgQ0ZHX0NNRF9JREUgfCBDRkdfQ01EX05FVCkKCi8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgoKI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTE1CiNkZWZpbmUgQ09ORklHX0JPT1RBUkdTICAgIAkicm9vdD0vZGV2L210ZGJsb2NrMCBjb25zb2xlPXR0eVMwLDk2MDAiCi8qICNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJib290bSAzODAwMDAwMCIgKi8KCiNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQojZGVmaW5lIENPTkZJR19LR0RCX0JBVURSQVRFCTExNTIwMAkJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgKi8KI2RlZmluZSBDT05GSUdfS0dEQl9TRVJfSU5ERVgJMgkJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCiNlbmRpZgoKI2RlZmluZSBDRkdfSkZGUzJfRklSU1RfQkFOSyAgICAwICAgICAgICAgICAvKiB1c2UgZm9yIEpGRlMyICovCiNkZWZpbmUgQ0ZHX0pGRlMyX05VTV9CQU5LUyAgICAgMSAgICAgICAgICAgLyogICovCgovKgogKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCiAqLwojZGVmaW5lCUNGR19MT05HSEVMUAkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KI2RlZmluZQlDRkdfUFJPTVBUCQkiYm9vdCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLwojZGVmaW5lCUNGR19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KI2RlZmluZQlDRkdfUEJTSVpFIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KI2RlZmluZQlDRkdfTUFYQVJHUwkJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCiNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQlDRkdfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KCiNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDEwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCiNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDAxMDAwMDAwCS8qIDEgLi4uIDE2IE1CIGluIERSQU0JKi8KCiN1bmRlZiAgQ0ZHX0NMS1NfSU5fSFoJCS8qIGV2ZXJ5dGhpbmcsIGluY2wgYm9hcmQgaW5mbywgaW4gSHogKi8KCiNkZWZpbmUJQ0ZHX0xPQURfQUREUgkJMHgzODAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcwkqLwoKI2RlZmluZQlDRkdfSFoJCQkxMDI0CQkvKiBpbmNyZW1lbnRlciBmcmVxOiAxa0h6ICovCgoJCQkJCQkvKiB2YWxpZCBiYXVkcmF0ZXMgKi8KI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogUGh5c2ljYWwgTWVtb3J5IE1hcAogKi8KI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwk0CSAgIC8qIHdlIGhhdmUgNCBiYW5rcyBvZiBEUkFNICovCgoKI2RlZmluZSBQSFlTX0ZMQVNIXzEJCTB4MzgwMDAwMDAgLyogRmxhc2ggQmFuayAjMSAqLwojZGVmaW5lIFBIWVNfRkxBU0hfU0laRQkJMHgwMDgwMDAwMCAvKiA4IE1CICovCgojZGVmaW5lIENGR19GTEFTSF9CQVNFCQlQSFlTX0ZMQVNIXzEKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgogKi8KI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCiNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTY0CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwoKLyogdGltZW91dCB2YWx1ZXMgYXJlIGluIHRpY2tzICovCiNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJKDIqQ0ZHX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLwojZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCSgyKkNGR19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KCiNkZWZpbmUJQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCiNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoUEhZU19GTEFTSF8xICsgMHg3YTAwMDApCS8qIEFkZHIgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCiNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDQwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIERldmljZSBkcml2ZXJzCiAqLwojZGVmaW5lIENPTkZJR19ORVRfTVVMVEkgICAgICAgIC8qIE11bHRpIGV0aGVybmV0IGNhcmRzIHN1cHBvcnQgKi8KI2RlZmluZSBDT05GSUdfUENORVQKI2RlZmluZSBDT05GSUdfUENORVRfNzlDOTczCiNkZWZpbmUgQ09ORklHX1BDTkVUXzc5Qzk3NQojZGVmaW5lIFBDTkVUX0hBU19QUk9NICAgICAgICAgMQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElERS9BVEEgc3R1ZmYKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBDRkdfSURFX01BWEJVUwkJMiAgIC8qIG1heC4gMiBJREUgYnVzc2VzCSovCiNkZWZpbmUgQ0ZHX0lERV9NQVhERVZJQ0UJKENGR19JREVfTUFYQlVTKjIpIC8qIG1heC4gMiBkcml2ZXMgcGVyIElERSBidXMgKi8KCiNkZWZpbmUgQ0ZHX0FUQV9JREUwX09GRlNFVAkweDAxRjAJLyogaWRlMCBvZmZzdGUgKi8KI2RlZmluZSBDRkdfQVRBX0lERTFfT0ZGU0VUCTB4MDE3MAkvKiBpZGUxIG9mZnNldCAqLwojZGVmaW5lIENGR19BVEFfREFUQV9PRkZTRVQJMAkvKiBkYXRhIHJlZyBvZmZzZXQJKi8KI2RlZmluZSBDRkdfQVRBX1JFR19PRkZTRVQJMAkvKiByZWcgb2Zmc2V0ICovCiNkZWZpbmUgQ0ZHX0FUQV9BTFRfT0ZGU0VUCTB4MjAwCS8qIGFsdGVybmF0ZSByZWdpc3RlciBvZmZzZXQgKi8KCiN1bmRlZglDT05GSUdfSURFXzh4eF9ESVJFQ1QJCS8qIG5vIHBjbWNpYSBpbnRlcmZhY2UgcmVxdWlyZWQgKi8KI3VuZGVmCUNPTkZJR19JREVfTEVECQkJLyogbm8gbGVkIGZvciBpZGUgc3VwcG9ydGVkCSovCiN1bmRlZiAgQ09ORklHX0lERV9SRVNFVAkJLyogcmVzZXQgZm9yIGlkZSB1bnN1cHBvcnRlZC4uLgkqLwojdW5kZWYgIENPTkZJR19JREVfUkVTRVRfUk9VVElORQkvKiBubyBzcGVjaWFsIHJlc2V0IGZ1bmN0aW9uICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEFUQVBJIHN1cHBvcnQgKGV4cGVyaW1lbnRhbCkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBDT05GSUdfQVRBUEkJCQkvKiBlbmFibGUgQVRBUEkgU3VwcG9ydCAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBESVNLIFBhcnRpdGlvbiBzdXBwb3J0CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KI2RlZmluZSBDT05GSUdfTUFDX1BBUlRJVElPTgojZGVmaW5lIENPTkZJR19JU09fUEFSVElUSU9OIC8qIEV4cGVyaW1lbnRhbCAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBLZXlib2FyZCBzdXBwb3J0CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgQ09ORklHX0lTQV9LRVlCT0FSRAoKI2lmIDAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBWaWRlbyBzdXBwb3J0CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgQ09ORklHX1ZJREVPCQkJLypUbyBlbmFibGUgdmlkZW8gY29udHJvbGxlciBzdXBwb3J0ICovCiNkZWZpbmUgQ09ORklHX1ZJREVPX0NUNjkwMDAKI2RlZmluZSBDT05GSUdfQ0ZCX0NPTlNPTEUKI2RlZmluZSBDT05GSUdfVklERU9fTE9HTwojZGVmaW5lIENPTkZJR19DT05TT0xFX0VYVFJBX0lORk8KI2RlZmluZSBDT05GSUdfVkdBX0FTX1NJTkdMRV9ERVZJQ0UKI2RlZmluZSBDT05GSUdfVklERU9fU1dfQ1VSU09SCiNkZWZpbmUgQ09ORklHX1ZJREVPX09OQk9BUkQJCS8qIFZpZGVvIGNvbnRyb2xsZXIgaXMgb24tYm9hcmQgKi8KI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFJUQwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgQ09ORklHX1JUQ19NQzE0NjgxOAojdW5kZWYgQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQJCSovCgovKgogKiBQQ0kgc3R1ZmYKICovCiNkZWZpbmUgQ09ORklHX1BDSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5jbHVkZSBwY2kgc3VwcG9ydCAqLwojZGVmaW5lIENPTkZJR19QQ0lfUE5QICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBjaSBwbHVnLWFuZC1wbGF5ICovCiNkZWZpbmUgQ09ORklHX1BDSV9TQ0FOX1NIT1cKCiNlbmRpZgkvKiBfX0NPTkZJR19IICovCg==