LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCiAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCiAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwogKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCiAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KCiAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CiAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAogKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAogKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCiAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwogKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgogKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwogKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICogXHZlcnNpb24gMjAxNi4wNQogKiBcZGF0ZSAyMDE1LTExLTE2CiAqIFxhdXRob3IgUWlhbmcgR3UoUWlhbmcuR3VAc3lub3BzeXMuY29tKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyoqCiAqCiAqIFxmaWxlCiAqIFxpbmdyb3VwCUJPQVJEX0VNU0tfQ09NTU9OX0lOSVQKICogXGJyaWVmCWVtc2sgaGFyZHdhcmUgcmVzb3VyY2UgZGVmaW5pdGlvbnMKICovCgovKioKICogXGFkZHRvZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fSU5JVAogKiBAewogKi8KI2lmbmRlZiBfRU1TS19IQVJEV0FSRV9IXwojZGVmaW5lIF9FTVNLX0hBUkRXQVJFX0hfCgojaW5jbHVkZSAiaW5jL2FyYy9hcmNfZmVhdHVyZV9jb25maWcuaCIKCi8qKiBDUFUgQ2xvY2sgRnJlcXVlbmN5IGRlZmluaXRpb24gKi8KI2lmIGRlZmluZWQoQk9BUkRfQ1BVX0ZSRVEpCgkvKiE8IEdldCBjcHUgY2xvY2sgZnJlcXVlbmN5IGRlZmluaXRpb24gZnJvbSBidWlsZCBzeXN0ZW0gKi8KCSNkZWZpbmUgQ0xLX0NQVQkJCShCT0FSRF9DUFVfRlJFUSkKI2VsaWYgZGVmaW5lZChBUkNfRkVBVFVSRV9DUFVfQ0xPQ0tfRlJFUSkKCS8qITwgR2V0IGNwdSBjbG9jayBmcmVxdWVuY3kgZGVmaW5pdGlvbiBmcm9tIHRjZiBmaWxlICovCgkjZGVmaW5lIENMS19DUFUJCQkoQVJDX0ZFQVRVUkVfQ1BVX0NMT0NLX0ZSRVEpCiNlbHNlCgkvKiE8IERlZmF1bHQgY3B1IGNsb2NrIGZyZXF1ZW5jeSAqLwoJI2RlZmluZSBDTEtfQ1BVCQkJKDIwMDAwMDAwKQojZW5kaWYKCi8qKiBQZXJpcGhlcmFsIEJ1cyBSZWZlcmVuY2UgQ2xvY2sgZGVmaW5pdGlvbiAqLwojaWZkZWYgQk9BUkRfREVWX0ZSRVEKCS8qITwgR2V0IHBlcmlwaGVyYWwgYnVzIHJlZmVyZW5jZSBjbG9jayBkZWZpbnRpb24gZnJvbSBidWlsZCBzeXN0ZW0gKi8KCSNkZWZpbmUgQ0xLX0JVU19BUEIJCShCT0FSRF9ERVZfRlJFUSkKI2Vsc2UKCS8qITwgRGVmYXVsdCBwZXJpcGhlcmFsIGJ1cyByZWZlcmVuY2UgY2xvY2sgZGVmaW50aW9uICovCgkjZGVmaW5lIENMS19CVVNfQVBCCQkoNTAwMDAwMDBVKQojZW5kaWYKCi8qIERldmljZSBSZWdpc3RlciBCYXNlIEFkZHJlc3MgKi8KI2RlZmluZSBSRUxfUkVHQkFTRV9QSU5NVVgJCSgweDAwMDAwMDAwVSkJCS8qITwgUElOTVVYICovCiNkZWZpbmUgUkVMX1JFR0JBU0VfU1BJX01TVF9DU19DVFJMCSgweDAwMDAwMDE0VSkJCS8qITwgU1BJIE1hc3RlciBTZWxlY3QgQ3RybCAqLwojZGVmaW5lIFJFTF9SRUdCQVNFX0dQSU8wCQkoMHgwMDAwMjAwMFUpCQkvKiE8IEdQSU8gMCBPbmJvYXJkICovCiNkZWZpbmUgUkVMX1JFR0JBU0VfVElNRVJTCQkoMHgwMDAwMzAwMFUpCQkvKiE8IERXIFRJTUVSICovCiNkZWZpbmUgUkVMX1JFR0JBU0VfSTJDMAkJKDB4MDAwMDQwMDBVKQkJLyohPCBJMkMgMCAqLwojZGVmaW5lIFJFTF9SRUdCQVNFX0kyQzEJCSgweDAwMDA1MDAwVSkJCS8qITwgSTJDIDEgKi8KI2RlZmluZSBSRUxfUkVHQkFTRV9TUEkwCQkoMHgwMDAwNjAwMFUpCQkvKiE8IFNQSSBNYXN0ZXIgICovCiNkZWZpbmUgUkVMX1JFR0JBU0VfU1BJMQkJKDB4MDAwMDcwMDBVKQkJLyohPCBTUEkgU2xhdmUgICAqLwojZGVmaW5lIFJFTF9SRUdCQVNFX1VBUlQwCQkoMHgwMDAwODAwMFUpCQkvKiE8IFVBUlQwIGlzIGNvbm5lY3RlZCB0byBQTU9EICovCiNkZWZpbmUgUkVMX1JFR0JBU0VfVUFSVDEJCSgweDAwMDA5MDAwVSkJCS8qITwgVUFSVDEgaXMgVVNCLVVBUlSjrCB1c2UgVUFSVDEgYXMgZGVmYXVsdCAqLwojZGVmaW5lIFJFTF9SRUdCQVNFX1VBUlQyCQkoMHgwMDAwQTAwMFUpCQkvKiE8IFVBUlQyICovCiNkZWZpbmUgUkVMX1JFR0JBU0VfV0RUCQkJKDB4MDAwMEIwMDBVKQkJLyohPCBXRFQgICovCi8vICNkZWZpbmUgUkVMX1JFR0JBU0VfSTJTX01BU1RFUl9JTgkoMHgwMDAwQzAwMFUpCQkvKiE8IEkyUyBNYXN0ZXIgSW4gICovCi8vICNkZWZpbmUgUkVMX1JFR0JBU0VfSTJTX01BU1RFUl9PVVQJKDB4MDAwMEQwMDBVKQkJLyohPCBJMlMgTWFzdGVyIE91dCAgKi8KLy8gI2RlZmluZSBSRUxfUkVHQkFTRV9HTUFDCQkoMHgwMDAwRTAwMFUpCQkvKiE8IEdNQUMgICovCgovKiBJbnRlcnJ1cHQgQ29ubmVjdGlvbiAqLwojZGVmaW5lIElOVE5PX1RJTUVSMAkJCTE2CQkJLyohPCBBUkMgVGltZXIwICovCiNkZWZpbmUgSU5UTk9fVElNRVIxCQkJMTcJCQkvKiE8IEFSQyBUaW1lcjEgKi8KI2RlZmluZSBJTlROT19TRUNVUkVfVElNRVIwCQkyMAkJCS8qITwgQ29yZSBTZWN1cmUgVGltZXIgMCAqLwojZGVmaW5lIElOVE5PX0RNQV9TVEFSVAkJCTIyCQkJLyohPCBDb3JlIERNQSBDb250cm9sbGVyICovCiNkZWZpbmUgSU5UTk9fRE1BX0NPTVBMRVRFCQkyMgkJCS8qITwgQ29yZSBETUEgQ29udHJvbGxlciBDb21wbGV0ZSAqLwojZGVmaW5lIElOVE5PX0RNQV9FUlJPUgkJCTIzCQkJLyohPCBDb3JlIERNQSBDb250cm9sbGVyIEVycm9yICovCiNkZWZpbmUgSU5UTk9fR1BJTwkJCTI0CQkJLyohPCBHUElPIGNvbnRyb2xsZXIgKi8KI2RlZmluZSBJTlROT19JMkMwCQkJMjUJCQkvKiE8IEkyQ18wIGNvbnRyb2xsZXIgKi8KI2RlZmluZSBJTlROT19JMkMxCQkJMjYJCQkvKiE8IEkyQ18xIGNvbnRyb2xsZXIgKi8KI2RlZmluZSBJTlROT19TUElfTUFTVEVSCQkyNwkJCS8qITwgU1BJIE1hc3RlciBjb250cm9sbGVyICovCiNkZWZpbmUgSU5UTk9fU1BJX1NMQVZFCQkJMjgJCQkvKiE8IFNQSSBTbGF2ZSBjb250cm9sbGVyICovCiNkZWZpbmUgSU5UTk9fVUFSVDAJCQkyOQkJCS8qITwgVUFSVDAgKi8KI2RlZmluZSBJTlROT19VQVJUMQkJCTMwCQkJLyohPCBVQVJUMSAqLwojZGVmaW5lIElOVE5PX1VBUlQyCQkJMzEJCQkvKiE8IFVBUlQyICovCiNkZWZpbmUgSU5UTk9fRFdfV0RUCQkJMzIJCQkvKiE8IFdEVCAqLwojZGVmaW5lIElOVE5PX0RXX1RNUjAJCQkzMwkJCS8qITwgRFcgVGltZXIgMCAqLwojZGVmaW5lIElOVE5PX0RXX1RNUjEJCQkzNAkJCS8qITwgRFcgVGltZXIgMSAqLwovLyAjZGVmaW5lIElOVE5PX0kyU19NYXN0ZXJfSW4JCTMzCQkJLyohPCBJMlMgTWFzdGVyIEluICovCi8vICNkZWZpbmUgSU5UTk9fSTJTX01hc3Rlcl9PdXQJCTM0CQkJLyohPCBJMlMgTWFzdGVyIE91dCAqLwovLyAjZGVmaW5lIElOVE5PX0dNQUMJCQkzNQkJCS8qITwgR01BQyAqLwoKLyogU1BJIE1hdGVyIFNpZ25hbHMgVXNhZ2UgKi8KI2RlZmluZQlFTVNLX1NQSV9MSU5FXzAJCQkwCQkJLyohPCBDUzAgLS0gUG1vZCA2IHBpbjEgKi8KI2RlZmluZQlFTVNLX1NQSV9MSU5FXzEJCQkxCQkJLyohPCBDUzEgLS0gUG1vZCA1IHBpbjEgb3IgUG1vZCA2IHBpbiA3ICovCiNkZWZpbmUJRU1TS19TUElfTElORV8yCQkJMgkJCS8qITwgQ1MyIC0tIFBtb2QgNiBwaW44ICovCiNkZWZpbmUJRU1TS19TUElfTElORV9TRENBUkQJCTMJCQkvKiE8IENTMyAtLSBPbi1ib2FyZCBTRCBjYXJkICAqLwojZGVmaW5lCUVNU0tfU1BJX0xJTkVfU1BJU0xBVkUJCTQJCQkvKiE8IENTNCAtLSBJbnRlcm5hbCBTUEkgc2xhdmUgKi8KI2RlZmluZQlFTVNLX1NQSV9MSU5FX1NGTEFTSAkJNQkJCS8qITwgQ1M1IC0tIE9uLWJvYXJkIFNQSSBGbGFzaCBtZW1vcnkgKi8KCiNlbmRpZgkvKiBfRU1TS19IQVJEV0FSRV9IXyAqLwoKLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0NPTU1PTl9JTklUICovCg==