LyoKICogQWdlcmUgU3lzdGVtcyBJbmMuCiAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcwogKgogKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqIGV0MTMxeF9hZGFwdGVyLmggLSBIZWFkZXIgd2hpY2ggaW5jbHVkZXMgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUsIGFsb25nCiAqICAgICAgICAgICAgICAgICAgICB3aXRoIHJlbGF0ZWQgc3VwcG9ydCBzdHJ1Y3R1cmVzLCBtYWNyb3MsIGRlZmluaXRpb25zLCBldGMuCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqIFNPRlRXQVJFIExJQ0VOU0UKICoKICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCiAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbwogKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCiAqCiAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKICoKICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICoKICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCiAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAqCiAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCiAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQogKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogRGlzY2xhaW1lcgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCiAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCiAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwogKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCiAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICiAqIERBTUFHRS4KICoKICovCgojaWZuZGVmIF9fRVQxMzFYX0FEQVBURVJfSF9fCiNkZWZpbmUgX19FVDEzMVhfQURBUFRFUl9IX18KCiNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKI2luY2x1ZGUgImV0MTMxMF90eC5oIgojaW5jbHVkZSAiZXQxMzEwX3J4LmgiCgovKgogKiBEbyBub3QgY2hhbmdlIHRoZXNlIHZhbHVlczogaWYgY2hhbmdlZCwgdGhlbiBjaGFuZ2UgYWxzbyBpbiByZXNwZWN0aXZlCiAqIFRYZG1hIGFuZCBSeGRtYSBlbmdpbmVzCiAqLwojZGVmaW5lIE5VTV9ERVNDX1BFUl9SSU5HX1RYICAgICAgICAgNTEyCS8vIFRYIERvIG5vdCBjaGFuZ2UgdGhlc2UgdmFsdWVzCiNkZWZpbmUgTlVNX1RDQiAgICAgICAgICAgICAgICAgICAgICA2NAoKLyoKICogVGhlc2UgdmFsdWVzIGFyZSBhbGwgc3VwZXJzZWRlZCBieSByZWdpc3RyeSBlbnRyaWVzIHRvIGZhY2lsaXRhdGUgdHVuaW5nLgogKiBPbmNlIHRoZSBkZXNpcmVkIHBlcmZvcm1hbmNlIGhhcyBiZWVuIGFjaGlldmVkLCB0aGUgb3B0aW1hbCByZWdpc3RyeSB2YWx1ZXMKICogc2hvdWxkIGJlIHJlLXBvcHVsYXRlZCB0byB0aGVzZSAjZGVmaW5lczoKICovCiNkZWZpbmUgTlVNX1RSQUZGSUNfQ0xBU1NFUyAgICAgICAgICAxCgovKgogKiBUaGVyZSBhcmUgdGhyZWUgd2F5cyBvZiBjb3VudGluZyBlcnJvcnMgLSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIFggZXJyb3JzCiAqIGluIFkgcGFja2V0cyAocmVwcmVzZW50ZWQgYnkgdGhlICJTQU1QTEUiIG1hY3JvcyksIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4KICogTiBlcnJvcnMgaW4gYSBTIG1TZWMgdGltZSBwZXJpb2QgKHRoZSAiUEVSSU9EIiBtYWNyb3MpLCBvciBpZiB0aGVyZSBhcmUKICogY29uc2VjdXRpdmUgcGFja2V0cyB3aXRoIGVycm9ycyAoQ09OU0VDX0VSUk9SRURfVEhSRVNIKS4gIFRoaXMgbGFzdCBjb3ZlcnMKICogZm9yICJCdXJzdHkiIGVycm9ycywgYW5kIHRoZSBlcnJvcmVkIHBhY2tldHMgbWF5IHdlbGwgbm90IGJlIGNvbnRpZ3VvdXMsCiAqIGJ1dCBzZXZlcmFsIGVycm9ycyB3aGVyZSB0aGUgcGFja2V0IGNvdW50ZXIgaGFzIGNoYW5nZWQgYnkgbGVzcyB0aGFuIGEKICogc21hbGwgYW1vdW50IHdpbGwgY2F1c2UgdGhpcyBjb3VudCB0byBpbmNyZW1lbnQuCiAqLwojZGVmaW5lIFRYX1BBQ0tFVFNfSU5fU0FNUExFICAgICAgICAxMDAwMAojZGVmaW5lIFRYX01BWF9FUlJPUlNfSU5fU0FNUExFICAgICA1MAoKI2RlZmluZSBUWF9FUlJPUl9QRVJJT0QgICAgICAgICAgICAgMTAwMAojZGVmaW5lIFRYX01BWF9FUlJPUlNfSU5fUEVSSU9EICAgICAxMAoKI2RlZmluZSBMSU5LX0RFVEVDVElPTl9USU1FUiAgICAgICAgNTAwMAoKI2RlZmluZSBUWF9DT05TRUNfUkFOR0UgICAgICAgICAgICAgNQojZGVmaW5lIFRYX0NPTlNFQ19FUlJPUkVEX1RIUkVTSCAgICAxMAoKI2RlZmluZSBMT19NQVJLX1BFUkNFTlRfRk9SX1BTUiAgICAgMTUKI2RlZmluZSBMT19NQVJLX1BFUkNFTlRfRk9SX1JYICAgICAgMTUKCi8qIE1hY3JvcyBmb3IgZmxhZyBhbmQgcmVmIGNvdW50IG9wZXJhdGlvbnMgICAgICAgICovCiNkZWZpbmUgTVBfU0VUX0ZMQUcoX00sIF9GKSAgICAgICAgICgoX00pLT5GbGFncyB8PSAoX0YpKQojZGVmaW5lIE1QX0NMRUFSX0ZMQUcoX00sIF9GKSAgICAgICAoKF9NKS0+RmxhZ3MgJj0gfihfRikpCiNkZWZpbmUgTVBfQ0xFQVJfRkxBR1MoX00pICAgICAgICAgICgoX00pLT5GbGFncyA9IDApCiNkZWZpbmUgTVBfVEVTVF9GTEFHKF9NLCBfRikgICAgICAgICgoKF9NKS0+RmxhZ3MgJiAoX0YpKSAhPSAwKQojZGVmaW5lIE1QX1RFU1RfRkxBR1MoX00sIF9GKSAgICAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgPT0gKF9GKSkKI2RlZmluZSBNUF9JU19GTEFHX0NMRUFSKF9NLCBfRikgICAgKCgoX00pLT5GbGFncyAmIChfRikpID09IDApCgojZGVmaW5lIE1QX0lOQ19SQ1ZfUkVGKF9BKSAgICAgICAgICBhdG9taWNfaW5jKCYoX0EpLT5SY3ZSZWZDb3VudCkKI2RlZmluZSBNUF9ERUNfUkNWX1JFRihfQSkgICAgICAgICAgYXRvbWljX2RlYygmKF9BKS0+UmN2UmVmQ291bnQpCiNkZWZpbmUgTVBfR0VUX1JDVl9SRUYoX0EpICAgICAgICAgIGF0b21pY19yZWFkKCYoX0EpLT5SY3ZSZWZDb3VudCkKCi8qIE1hY3JvcyBzcGVjaWZpYyB0byB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLwojZGVmaW5lIE1QX1RDQl9SRVNPVVJDRVNfQVZBSUxBQkxFKF9NKSAoKF9NKS0+VHhSaW5nLm5CdXN5U2VuZCA8IE5VTV9UQ0IpCiNkZWZpbmUgTVBfVENCX1JFU09VUkNFU19OT1RfQVZBSUxBQkxFKF9NKSAoKF9NKS0+VHhSaW5nLm5CdXN5U2VuZCA+PSBOVU1fVENCKQoKI2RlZmluZSBNUF9TSE9VTERfRkFJTF9TRU5EKF9NKSAgICgoX00pLT5GbGFncyAmIGZNUF9BREFQVEVSX0ZBSUxfU0VORF9NQVNLKQojZGVmaW5lIE1QX0lTX05PVF9SRUFEWShfTSkgICAgICAgKChfTSktPkZsYWdzICYgZk1QX0FEQVBURVJfTk9UX1JFQURZX01BU0spCiNkZWZpbmUgTVBfSVNfUkVBRFkoX00pICAgICAgICAgICAhKChfTSktPkZsYWdzICYgZk1QX0FEQVBURVJfTk9UX1JFQURZX01BU0spCgojZGVmaW5lIE1QX0hBU19DQUJMRShfTSkgICAgICAgICAgICEoKF9NKS0+RmxhZ3MgJiBmTVBfQURBUFRFUl9OT19DQUJMRSkKI2RlZmluZSBNUF9MSU5LX0RFVEVDVEVEKF9NKSAgICAgICAhKChfTSktPkZsYWdzICYgZk1QX0FEQVBURVJfTElOS19ERVRFQ1RJT04pCgovKiBDb3VudGVycyBmb3IgZXJyb3IgcmF0ZSBtb25pdG9yaW5nICovCnR5cGVkZWYgc3RydWN0IF9NUF9FUlJfQ09VTlRFUlMgewoJdTMyIFBrdENvdW50VHhQYWNrZXRzOwoJdTMyIFBrdENvdW50VHhFcnJvcnM7Cgl1MzIgVGltZXJCYXNlZFR4RXJyb3JzOwoJdTMyIFBrdENvdW50TGFzdEVycm9yOwoJdTMyIEVycmVkQ29uc2VjUGFja2V0czsKfSBNUF9FUlJfQ09VTlRFUlMsICpQTVBfRVJSX0NPVU5URVJTOwoKLyogUkZEIChSZWNlaXZlIEZyYW1lIERlc2NyaXB0b3IpICovCnR5cGVkZWYgc3RydWN0IF9NUF9SRkQgewoJc3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7CglzdHJ1Y3Qgc2tfYnVmZiAqUGFja2V0OwoJdTMyIFBhY2tldFNpemU7CS8vIHRvdGFsIHNpemUgb2YgcmVjZWl2ZSBmcmFtZQoJdTE2IGlCdWZmZXJJbmRleDsKCXU4IGlSaW5nSW5kZXg7Cn0gTVBfUkZELCAqUE1QX1JGRDsKCi8qIEVudW0gZm9yIEZsb3cgQ29udHJvbCAqLwp0eXBlZGVmIGVudW0gX2VmbG93X2NvbnRyb2xfdCB7CglCb3RoID0gMCwKCVR4T25seSA9IDEsCglSeE9ubHkgPSAyLAoJTm9uZSA9IDMKfSBlRkxPV19DT05UUk9MX3QsICpQZUZMT1dfQ09OVFJPTF90OwoKLyogU3RydWN0IHRvIGRlZmluZSBzb21lIGRldmljZSBzdGF0aXN0aWNzICovCnR5cGVkZWYgc3RydWN0IF9jZV9zdGF0c190IHsKCS8qIExpbmsgSW5wdXQvT3V0cHV0IHN0YXRzICovCgl1aW50NjRfdCBpcGFja2V0czsJLy8gIyBvZiBpbiBwYWNrZXRzCgl1aW50NjRfdCBvcGFja2V0czsJLy8gIyBvZiBvdXQgcGFja2V0cwoKCS8qIE1JQiBJSSB2YXJpYWJsZXMKCSAqCgkgKiBOT1RFOiBhdG9taWNfdCB0eXBlcyBhcmUgb25seSBndWFyYW50ZWVkIHRvIHN0b3JlIDI0LWJpdHM7IGlmIHdlCgkgKiBNVVNUIGhhdmUgMzIsIHRoZW4gd2UnbGwgbmVlZCBhbm90aGVyIHdheSB0byBwZXJmb3JtIGF0b21pYwoJICogb3BlcmF0aW9ucwoJICovCgl1MzIgdW5pcmN2OwkvLyAjIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkCglhdG9taWNfdCB1bml4bXQ7CS8vICMgbXVsdGljYXN0IHBhY2tldHMgZm9yIFR4Cgl1MzIgbXVsdGlyY3Y7CS8vICMgbXVsdGljYXN0IHBhY2tldHMgcmVjZWl2ZWQKCWF0b21pY190IG11bHRpeG10OwkvLyAjIG11bHRpY2FzdCBwYWNrZXRzIGZvciBUeAoJdTMyIGJyZGNzdHJjdjsJLy8gIyBicm9hZGNhc3QgcGFja2V0cyByZWNlaXZlZAoJYXRvbWljX3QgYnJkY3N0eG10OwkvLyAjIGJyb2FkY2FzdCBwYWNrZXRzIGZvciBUeAoJdTMyIG5vcmN2YnVmOwkvLyAjIFJ4IHBhY2tldHMgZGlzY2FyZGVkCgl1MzIgbm94bXRidWY7CS8vICMgVHggcGFja2V0cyBkaXNjYXJkZWQKCgkvKiBUcmFuc2NpZXZlciBzdGF0ZSBpbmZvcm1hdGlvbnMuICovCgl1OCB4Y3ZyX2FkZHI7Cgl1MzIgeGN2cl9pZDsKCgkvKiBUeCBTdGF0aXN0aWNzLiAqLwoJdTMyIHR4X3VmbG87CQkvLyBUeCBVbmRlcnJ1bnMKCgl1MzIgY29sbGlzaW9uczsKCXUzMiBleGNlc3NpdmVfY29sbGlzaW9uczsKCXUzMiBmaXJzdF9jb2xsaXNpb247Cgl1MzIgbGF0ZV9jb2xsaXNpb25zOwoJdTMyIG1heF9wa3RfZXJyb3I7Cgl1MzIgdHhfZGVmZXJyZWQ7CgoJLyogUnggU3RhdGlzdGljcy4gKi8KCXUzMiByeF9vdl9mbG93OwkvLyBSeCBPdmVyIEZsb3cKCgl1MzIgbGVuZ3RoX2VycjsKCXUzMiBhbGlnbm1lbnRfZXJyOwoJdTMyIGNyY19lcnI7Cgl1MzIgY29kZV92aW9sYXRpb25zOwoJdTMyIG90aGVyX2Vycm9yczsKCiNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCgl1MzIgVW5oYW5kbGVkSW50ZXJydXB0c1BlclNlYzsKCXUzMiBSeERtYUludGVycnVwdHNQZXJTZWM7Cgl1MzIgVHhEbWFJbnRlcnJ1cHRzUGVyU2VjOwoJdTMyIFdhdGNoRG9nSW50ZXJydXB0c1BlclNlYzsKI2VuZGlmCS8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KCgl1MzIgU3luY2hyb3Vub3VzSXRlcmF0aW9uczsKCUlOVEVSUlVQVF90IEludGVycnVwdFN0YXR1czsKfSBDRV9TVEFUU190LCAqUENFX1NUQVRTX3Q7CgovKiBUaGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLwpzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgewoJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwoKCXN0cnVjdCB3b3JrX3N0cnVjdCB0YXNrOwoKCS8qIEZsYWdzIHRoYXQgaW5kaWNhdGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYWRhcHRlciAqLwoJdTMyIEZsYWdzOwoJdTMyIEh3RXJyQ291bnQ7CgoJLyogQ29uZmlndXJhdGlvbiAgKi8KCXU4IFBlcm1hbmVudEFkZHJlc3NbRVRIX0FMRU5dOwoJdTggQ3VycmVudEFkZHJlc3NbRVRIX0FMRU5dOwoJYm9vbCBiT3ZlcnJpZGVBZGRyZXNzOwoJYm9vbCBiRWVwcm9tUHJlc2VudDsKCXU4IGVlcHJvbURhdGFbMl07CgoJLyogU3BpbmxvY2tzICovCglzcGlubG9ja190IExvY2s7CgoJc3BpbmxvY2tfdCBUQ0JTZW5kUUxvY2s7CglzcGlubG9ja190IFRDQlJlYWR5UUxvY2s7CglzcGlubG9ja190IFNlbmRIV0xvY2s7CglzcGlubG9ja190IFNlbmRXYWl0TG9jazsKCglzcGlubG9ja190IFJjdkxvY2s7CglzcGlubG9ja190IFJjdlBlbmRMb2NrOwoJc3BpbmxvY2tfdCBGYnJMb2NrOwoKCXNwaW5sb2NrX3QgUEhZTG9jazsKCgkvKiBQYWNrZXQgRmlsdGVyIGFuZCBsb29rIGFoZWFkIHNpemUgKi8KCXUzMiBQYWNrZXRGaWx0ZXI7Cgl1MzIgdWxMb29rQWhlYWQ7Cgl1MzIgdWlMaW5rU3BlZWQ7Cgl1MzIgdWlEdXBsZXhNb2RlOwoJdTMyIHVpQXV0b05lZ1N0YXR1czsKCXU4IHVjTGlua1N0YXR1czsKCgkvKiBtdWx0aWNhc3QgbGlzdCAqLwoJdTMyIE1DQWRkcmVzc0NvdW50OwoJdTggTUNMaXN0W05JQ19NQVhfTUNBU1RfTElTVF1bRVRIX0FMRU5dOwoKCS8qIE1BQyB0ZXN0ICovCglUWE1BQ19UWFRFU1RfdCBUeE1hY1Rlc3Q7CgoJLyogUG9pbnRlciB0byB0aGUgZGV2aWNlJ3MgUENJIHJlZ2lzdGVyIHNwYWNlICovCglBRERSRVNTX01BUF90IF9faW9tZW0gKkNTUkFkZHJlc3M7CgoJLyogUENJIGNvbmZpZyBzcGFjZSBpbmZvLCBmb3IgZGVidWcgcHVycG9zZXMgb25seS4gKi8KCXU4IFJldmlzaW9uSUQ7Cgl1MTYgVmVuZG9ySUQ7Cgl1MTYgRGV2aWNlSUQ7Cgl1MTYgU3ViVmVuZG9ySUQ7Cgl1MTYgU3ViU3lzdGVtSUQ7Cgl1MzIgQ2FjaGVGaWxsU2l6ZTsKCXUxNiBQY2lYRGV2Q3RsOwoJdTggcGNpX2xhdF90aW1lcjsKCXU4IHBjaV9oZHJfdHlwZTsKCXU4IHBjaV9iaXN0OwoJdTMyIHBjaV9jZmdfc3RhdGVbNjQgLyBzaXplb2YodTMyKV07CgoJLyogUmVnaXN0cnkgcGFyYW1ldGVycyAqLwoJdTggU3BlZWREdXBsZXg7CQkvLyBzcGVlZC9kdXBsZXgKCWVGTE9XX0NPTlRST0xfdCBSZWdpc3RyeUZsb3dDb250cm9sOwkvLyBmb3IgODAyLjN4IGZsb3cgY29udHJvbAoJdTggUmVnaXN0cnlXT0xNYXRjaDsJLy8gRW5hYmxlIFdPTCBwYXR0ZXJuLW1hdGNoaW5nCgl1OCBSZWdpc3RyeVdPTExpbms7CS8vIExpbmsgc3RhdGUgY2hhbmdlIGlzIGluZGVwZW5kYW50Cgl1OCBSZWdpc3RyeVBoeUNvbWE7CS8vIFBoeSBDb21hIG1vZGUgZW5hYmxlL2Rpc2FibGUKCgl1MzIgUmVnaXN0cnlSeE1lbUVuZDsJLy8gU2l6ZSBvZiBpbnRlcm5hbCByeCBtZW1vcnkKCXU4IFJlZ2lzdHJ5TUFDU3RhdDsJLy8gSWYgc2V0LCByZWFkIE1BQ1NUQVQsIGVsc2UgZG9uJ3QKCXUzMiBSZWdpc3RyeVZsYW5UYWc7CS8vIDgwMi4xcSBWbGFuIFRBRwoJdTMyIFJlZ2lzdHJ5SnVtYm9QYWNrZXQ7CS8vIE1heCBzdXBwb3J0ZWQgZXRoZXJuZXQgcGFja2V0IHNpemUKCgl1MzIgUmVnaXN0cnlUeE51bUJ1ZmZlcnM7Cgl1MzIgUmVnaXN0cnlUeFRpbWVJbnRlcnZhbDsKCgl1MzIgUmVnaXN0cnlSeE51bUJ1ZmZlcnM7Cgl1MzIgUmVnaXN0cnlSeFRpbWVJbnRlcnZhbDsKCgkvKiBWYWxpZGF0aW9uIGhlbHBlcnMgKi8KCXU4IFJlZ2lzdHJ5UE1XT0w7Cgl1OCBSZWdpc3RyeU5NSURpc2FibGU7Cgl1MzIgUmVnaXN0cnlETUFDYWNoZTsKCXUzMiBSZWdpc3RyeVNDR2FpbjsKCXU4IFJlZ2lzdHJ5UGh5TG9vcGJrOwkvLyBFbmFibGUgUGh5IGxvb3BiYWNrCgoJLyogRGVyaXZlZCBmcm9tIHRoZSByZWdpc3RyeTogKi8KCXU4IEFpRm9yY2VEcHg7CQkvLyBkdXBsZXggc2V0dGluZwoJdTE2IEFpRm9yY2VTcGVlZDsJCS8vICdTcGVlZCcsIHVzZXIgb3Zlci1yaWRlIG9mIGxpbmUgc3BlZWQKCWVGTE9XX0NPTlRST0xfdCBGbG93Q29udHJvbDsJLy8gZmxvdyBjb250cm9sIHZhbGlkYXRlZCBieSB0aGUgZmFyLWVuZAoJZW51bSB7CgkJTkVUSUZfU1RBVFVTX0lOVkFMSUQgPSAwLAoJCU5FVElGX1NUQVRVU19NRURJQV9DT05ORUNULAoJCU5FVElGX1NUQVRVU19NRURJQV9ESVNDT05ORUNULAoJCU5FVElGX1NUQVRVU19NQVgKCX0gTWVkaWFTdGF0ZTsKCXU4IERyaXZlck5vUGh5QWNjZXNzOwoKCS8qIE1pbmltaXplIGluaXQtdGltZSAqLwoJYm9vbCBiUXVlcnlQZW5kaW5nOwoJYm9vbCBiU2V0UGVuZGluZzsKCWJvb2wgYlJlc2V0UGVuZGluZzsKCXN0cnVjdCB0aW1lcl9saXN0IEVycm9yVGltZXI7Cglib29sIGJMaW5rVGltZXJBY3RpdmU7CglNUF9QT1dFUl9NR01UIFBvTWdtdDsKCUlOVEVSUlVQVF90IENhY2hlZE1hc2tWYWx1ZTsKCglhdG9taWNfdCBSY3ZSZWZDb3VudDsJLy8gTnVtIHBhY2tldHMgbm90IHlldCByZXR1cm5lZAoKCS8qIFhjdnIgc3RhdHVzIGF0IGxhc3QgcG9sbCAqLwoJTUlfQk1TUl90IEJtc3I7CgoJLyogVHggTWVtb3J5IFZhcmlhYmxlcyAqLwoJVFhfUklOR190IFR4UmluZzsKCgkvKiBSeCBNZW1vcnkgVmFyaWFibGVzICovCglSWF9SSU5HX3QgUnhSaW5nOwoKCS8qIEVUMTMxMCByZWdpc3RlciBBY2Nlc3MgKi8KCUpBR0NPUkVfQUNDRVNTX1JFR1MgSmFnQ29yZVJlZ3M7CglQQ0lfQ0ZHX1NQQUNFX1JFR1MgUGNpQ2ZnUmVnczsKCgkvKiBMb29wYmFjayBzcGVjaWZpY3MgKi8KCXU4IFJlcGxpY2FQaHlMb29wYms7CS8vIFJlcGxpY2EgRW5hYmxlCgl1OCBSZXBsaWNhUGh5TG9vcGJrUEY7CS8vIFJlcGxpY2EgRW5hYmxlIFBhc3MvRmFpbAoKCS8qIFN0YXRzICovCglDRV9TVEFUU190IFN0YXRzOwoKCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0c19wcmV2Owp9OwoKI2RlZmluZSBNUFNlbmRQYWNrZXRzSGFuZGxlciAgTVBTZW5kUGFja2V0cwojZGVmaW5lIE1QX0ZSRUVfU0VORF9QQUNLRVRfRlVOKEFkYXB0ZXIsIHBNcFRjYikgXAoJZXQxMzF4X2ZyZWVfc2VuZF9wYWNrZXQoQWRhcHRlciwgcE1wVGNiKQojZGVmaW5lIE1wU2VuZFBhY2tldEZ1bihBZGFwdGVyLCBQYWNrZXQpIE1wU2VuZFBhY2tldChBZGFwdGVyLCBQYWNrZXQpCgojZW5kaWYgLyogX19FVDEzMVhfQURBUFRFUl9IX18gKi8K