ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKaW5kZXggZThhZDE0ZC4uNzQyYzljNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKQEAgLTIzNCw2ICsyMzQsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdhZmVyNTgyM3dkdC4KIAorY29uZmlnIEk2MzAwRVNCX1dEVAorCXRyaXN0YXRlICJJbnRlbCA2MzAwRVNCIFRpbWVyL1dhdGNoZG9nIgorCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2ICYmIFBDSQorCS0tLWhlbHAtLS0KKwkgIEhhcmR3YXJlIGRyaXZlciBmb3IgdGhlIHdhdGNoZG9nIHRpbWVyIGJ1aWx0IGludG8gdGhlIEludGVsCisJICA2MzAwRVNCIGNvbnRyb2xsZXIgaHViLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpNjMwMGVzYi4KKwogY29uZmlnIEk4WFhfVENPCiAJdHJpc3RhdGUgIkludGVsIGk4eHggVENPIFRpbWVyL1dhdGNoZG9nIgogCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgKFg4NiB8fCBJQTY0KSAmJiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9NYWtlZmlsZQppbmRleCAyMzczZTE3Li4yZjQ1YmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlCkBAIC0zOSw2ICszOSw3IEBACiBvYmotJChDT05GSUdfRVVST1RFQ0hfV0RUKSArPSBldXJvdGVjaHdkdC5vCiBvYmotJChDT05GSUdfSUI3MDBfV0RUKSArPSBpYjcwMHdkdC5vCiBvYmotJChDT05GSUdfV0FGRVJfV0RUKSArPSB3YWZlcjU4MjN3ZHQubworb2JqLSQoQ09ORklHX0k2MzAwRVNCX1dEVCkgKz0gaTYzMDBlc2Iubwogb2JqLSQoQ09ORklHX0k4WFhfVENPKSArPSBpOHh4X3Rjby5vCiBvYmotJChDT05GSUdfU0MxMjAwX1dEVCkgKz0gc2MxMjAwd2R0Lm8KIG9iai0kKENPTkZJR19TQ3gyMDBfV0RUKSArPSBzY3gyMDBfd2R0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pNjMwMGVzYi5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k2MzAwZXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyNzM4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pNjMwMGVzYi5jCkBAIC0wLDAgKzEsNTA4IEBACisvKgorICoJaTYzMDBlc2IgMC4wMzoJV2F0Y2hkb2cgdGltZXIgZHJpdmVyIGZvciBJbnRlbCA2MzAwRVNCIGNoaXBzZXQKKyAqCisgKgkoYykgQ29weXJpZ2h0IDIwMDQgR29vZ2xlIEluYy4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICAgYmFzZWQgb24gaTgxMC10Y28uYyB3aGljaCBpcworICoKKyAqCShjKSBDb3B5cmlnaHQgMjAwMAlrZXJuZWwgY29uY2VwdHMgPG5pbHNAa2VybmVsY29uY2VwdHMuZGU+CisgKgkJCQlkZXZlbG9wZWQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEplbnRybyBBRywgSGFhci9NdW5pY2ggKEdlcm1hbnkpCisgKgorICogCXdoaWNoIGlzIGluIHR1cm4gYmFzZWQgb24gc29mdGRvZy5jIGJ5IEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CisgKgorICogCVRoZSB0aW1lciBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZm9sbG93aW5nIEkvTyBjb250cm9sbGVyIGh1YnM6CisgKiAJKFNlZSB0aGUgaW50ZWwgZG9jdW1lbnRhdGlvbiBvbiBodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS4pCisgKiAJNjMwMEVTQiBjaGlwIDogZG9jdW1lbnQgbnVtYmVyIDMwMDY0MS0wMDMKKyAqCisgKiAgMjAwNFlZWlogUm9zcyBCaXJvCisgKglJbml0aWFsIHZlcnNpb24gMC4wMQorICogIDIwMDRZWVpaIFJvc3MgQmlybworICogIAlWZXJzaW9uIDAuMDIKKyAqICAyMDA1MDIxMCBEYXZpZCBI5HJkZW1hbiA8ZGF2aWRAMmdlbi5jb20+CisgKiAgICAgIFBvcnRlZCBkcml2ZXIgdG8ga2VybmVsIDIuNgorICovCisKKy8qCisgKiAgICAgIEluY2x1ZGVzLCBkZWZpbmVzLCB2YXJpYWJsZXMsIG1vZHVsZSBwYXJhbWV0ZXJzLCAuLi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgImk2MzAwZXNiLmgiCisKKy8qIE1vZHVsZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBFU0JfVkVSU0lPTiAiMC4wMyIKKyNkZWZpbmUgRVNCX01PRFVMRV9OQU1FICJpNjMwMEVTQiB0aW1lciIKKyNkZWZpbmUgRVNCX0RSSVZFUl9OQU1FIEVTQl9NT0RVTEVfTkFNRSAiLCB2IiBFU0JfVkVSU0lPTgorI2RlZmluZSBQRlggRVNCX01PRFVMRV9OQU1FICI6ICIKKworLyogaW50ZXJuYWwgdmFyaWFibGVzICovCitzdGF0aWMgdm9pZCBfX2lvbWVtICpCQVNFQUREUjsKK3N0YXRpYyBzcGlubG9ja190IGVzYl9sb2NrOyAvKiBHdWFyZHMgdGhlIGhhcmR3YXJlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9hbGl2ZTsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZXNiX3BjaTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCB0cmlnZ2VyZWQ7IC8qIFRoZSBzdGF0dXMgb2YgdGhlIHdhdGNoZG9nIHVwb24gYm9vdCAqLworc3RhdGljIGNoYXIgZXNiX2V4cGVjdF9jbG9zZTsKKworLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDMwICAgLyogMzAgc2VjIGRlZmF1bHQgaGVhcnRiZWF0ICgxPGhlYXJ0YmVhdDwyKjEwMjMpICovCitzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsgIC8qIGluIHNlY29uZHMgKi8KK21vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMTxoZWFydGJlYXQ8MjA0NiwgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CisKKyNpZmRlZiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSAxOworI2Vsc2UKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSAwOworI2VuZGlmCittb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PUNPTkZJR19XQVRDSERPR19OT1dBWU9VVCkiKTsKKworLyoKKyAqIFNvbWUgaTYzMDBFU0Igc3BlY2lmaWMgZnVuY3Rpb25zCisgKi8KKworLyoKKyAqIFByZXBhcmUgZm9yIHJlbG9hZGluZyB0aGUgdGltZXIgYnkgdW5sb2NraW5nIHRoZSBwcm9wZXIgcmVnaXN0ZXJzLgorICogVGhpcyBpcyBwZXJmb3JtZWQgYnkgZmlyc3Qgd3JpdGluZyAweDgwIGZvbGxvd2VkIGJ5IDB4ODYgdG8gdGhlCisgKiByZWxvYWQgcmVnaXN0ZXIuIEFmdGVyIHRoaXMgdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdGVycyBjYW4gYmUgd3JpdHRlbgorICogdG8gb25jZSBiZWZvcmUgdGhleSBuZWVkIHRvIGJlIHVubG9ja2VkIGFnYWluLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZXNiX3VubG9ja19yZWdpc3RlcnModm9pZCkgeworICAgICAgICB3cml0ZWIoRVNCX1VOTE9DSzEsIEVTQl9SRUxPQURfUkVHKTsKKyAgICAgICAgd3JpdGViKEVTQl9VTkxPQ0syLCBFU0JfUkVMT0FEX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGVzYl90aW1lcl9zdGFydCh2b2lkKQoreworCXU4IHZhbDsKKworCS8qIEVuYWJsZSBvciBFbmFibGUgKyBMb2NrPyAqLworCXZhbCA9IDB4MDIgfCBub3dheW91dCA/IDB4MDEgOiAweDAwOworCisgICAgICAgIHBjaV93cml0ZV9jb25maWdfYnl0ZShlc2JfcGNpLCBFU0JfTE9DS19SRUcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgZXNiX3RpbWVyX3N0b3Aodm9pZCkKK3sKKwl1OCB2YWw7CisKKwlzcGluX2xvY2soJmVzYl9sb2NrKTsKKwkvKiBGaXJzdCwgcmVzZXQgdGltZXJzIGFzIHN1Z2dlc3RlZCBieSB0aGUgZG9jcyAqLworCWVzYl91bmxvY2tfcmVnaXN0ZXJzKCk7CisJd3JpdGV3KDB4MTAsIEVTQl9SRUxPQURfUkVHKTsKKwkvKiBUaGVuIGRpc2FibGUgdGhlIFdEVCAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShlc2JfcGNpLCBFU0JfTE9DS19SRUcsIDB4MCk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZXNiX3BjaSwgRVNCX0xPQ0tfUkVHLCAmdmFsKTsKKwlzcGluX3VubG9jaygmZXNiX2xvY2spOworCisJLyogUmV0dXJucyAwIGlmIHRoZSB0aW1lciB3YXMgZGlzYWJsZWQsIG5vbi16ZXJvIG90aGVyd2lzZSAqLworCXJldHVybiAodmFsICYgMHgwMSk7Cit9CisKK3N0YXRpYyB2b2lkIGVzYl90aW1lcl9rZWVwYWxpdmUodm9pZCkKK3sKKwlzcGluX2xvY2soJmVzYl9sb2NrKTsKKwllc2JfdW5sb2NrX3JlZ2lzdGVycygpOworCXdyaXRldygweDEwLCBFU0JfUkVMT0FEX1JFRyk7CisgICAgICAgIC8qIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGZsdXNoIGFueXRoaW5nIGhlcmU/ICovCisJc3Bpbl91bmxvY2soJmVzYl9sb2NrKTsKK30KKworc3RhdGljIGludCBlc2JfdGltZXJfc2V0X2hlYXJ0YmVhdChpbnQgdGltZSkKK3sKKwl1MzIgdmFsOworCisJaWYgKHRpbWUgPCAweDEgfHwgdGltZSA+ICgyICogMHgwM2ZmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJmVzYl9sb2NrKTsKKworCS8qIFdlIHNoaWZ0IGJ5IDksIHNvIGlmIHdlIGFyZSBwYXNzZWQgYSB2YWx1ZSBvZiAxIHNlYywKKwkgKiB2YWwgd2lsbCBiZSAxIDw8IDkgPSA1MTIsIHRoZW4gd3JpdGUgdGhhdCB0byB0d28KKwkgKiB0aW1lcnMgPT4gMiAqIDUxMiA9IDEwMjQgKHdoaWNoIGlzIGRlY3JlbWVudGVkIGF0IDFLSHopCisJICovCisJdmFsID0gdGltZSA8PCA5OworCisJLyogV3JpdGUgdGltZXIgMSAqLworCWVzYl91bmxvY2tfcmVnaXN0ZXJzKCk7CisJd3JpdGVsKHZhbCwgRVNCX1RJTUVSMV9SRUcpOworCisJLyogV3JpdGUgdGltZXIgMiAqLworCWVzYl91bmxvY2tfcmVnaXN0ZXJzKCk7CisgICAgICAgIHdyaXRlbCh2YWwsIEVTQl9USU1FUjJfUkVHKTsKKworICAgICAgICAvKiBSZWxvYWQgKi8KKwllc2JfdW5sb2NrX3JlZ2lzdGVycygpOworCXdyaXRldygweDEwLCBFU0JfUkVMT0FEX1JFRyk7CisKKwkvKiBGSVhNRTogRG8gd2UgbmVlZCB0byBmbHVzaCBldmVyeXRoaW5nIG91dD8gKi8KKworCS8qIERvbmUgKi8KKwloZWFydGJlYXQgPSB0aW1lOworCXNwaW5fdW5sb2NrKCZlc2JfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXNiX3RpbWVyX3JlYWQgKHZvaWQpCit7CisgICAgICAgCXUzMiBjb3VudDsKKworCS8qIFRoaXMgaXNuJ3QgZG9jdW1lbnRlZCwgYW5kIGRvZXNuJ3QgdGFrZSBpbnRvCisgICAgICAgICAqIGFjb3VudCB3aGljaCBzdGFnZSBpcyBydW5uaW5nLCBidXQgaXQgbG9va3MKKyAgICAgICAgICogbGlrZSBhIDIwIGJpdCBjb3VudCBkb3duLCBzbyB3ZSBtaWdodCBhcyB3ZWxsIHJlcG9ydCBpdC4KKyAgICAgICAgICovCisgICAgICAgIHBjaV9yZWFkX2NvbmZpZ19kd29yZChlc2JfcGNpLCAweDY0LCAmY291bnQpOworICAgICAgICByZXR1cm4gKGludCljb3VudDsKK30KKworLyoKKyAqIAkvZGV2L3dhdGNoZG9nIGhhbmRsaW5nCisgKi8KKworc3RhdGljIGludCBlc2Jfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisgICAgICAgIC8qIC9kZXYvd2F0Y2hkb2cgY2FuIG9ubHkgYmUgb3BlbmVkIG9uY2UgKi8KKyAgICAgICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJnRpbWVyX2FsaXZlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworCisgICAgICAgIC8qIFJlbG9hZCBhbmQgYWN0aXZhdGUgdGltZXIgKi8KKyAgICAgICAgZXNiX3RpbWVyX2tlZXBhbGl2ZSAoKTsKKyAgICAgICAgZXNiX3RpbWVyX3N0YXJ0ICgpOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IGVzYl9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKyAgICAgICAgLyogU2h1dCBvZmYgdGhlIHRpbWVyLiAqLworICAgICAgICBpZiAoZXNiX2V4cGVjdF9jbG9zZSA9PSA0MikgeworICAgICAgICAgICAgICAgIGVzYl90aW1lcl9zdG9wICgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0NSSVQgUEZYICJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKKyAgICAgICAgICAgICAgICBlc2JfdGltZXJfa2VlcGFsaXZlICgpOworICAgICAgICB9CisgICAgICAgIGNsZWFyX2JpdCgwLCAmdGltZXJfYWxpdmUpOworICAgICAgICBlc2JfZXhwZWN0X2Nsb3NlID0gMDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVzYl93cml0ZSAoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAorCQkJICBzaXplX3QgbGVuLCBsb2ZmX3QgKiBwcG9zKQoreworCS8qIFNlZSBpZiB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAnVicgYW5kIHJlbG9hZCB0aGUgdGltZXIgKi8KKyAgICAgICAgaWYgKGxlbikgeworCQlpZiAoIW5vd2F5b3V0KSB7CisJCQlzaXplX3QgaTsKKworCQkJLyogbm90ZToganVzdCBpbiBjYXNlIHNvbWVvbmUgd3JvdGUgdGhlIG1hZ2ljIGNoYXJhY3RlcgorCQkJICogZml2ZSBtb250aHMgYWdvLi4uICovCisJCQllc2JfZXhwZWN0X2Nsb3NlID0gMDsKKworCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgKi8KKwkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKwkJCQljaGFyIGM7CisJCQkJaWYoZ2V0X3VzZXIoYywgZGF0YStpKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJaWYgKGMgPT0gJ1YnKQorCQkJCQllc2JfZXhwZWN0X2Nsb3NlID0gNDI7CisJCQl9CisJCX0KKworCQkvKiBzb21lb25lIHdyb3RlIHRvIHVzLCB3ZSBzaG91bGQgcmVsb2FkIHRoZSB0aW1lciAqLworCQllc2JfdGltZXJfa2VlcGFsaXZlICgpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGVzYl9pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCBuZXdfb3B0aW9ucywgcmV0dmFsID0gLUVJTlZBTDsKKwlpbnQgbmV3X2hlYXJ0YmVhdDsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlpbnQgX191c2VyICpwID0gYXJncDsKKwlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJCS5vcHRpb25zID0gICAgICAgICAgICAgIFdESU9GX1NFVFRJTUVPVVQgfAorCQkJCQlXRElPRl9LRUVQQUxJVkVQSU5HIHwKKwkJCQkJV0RJT0ZfTUFHSUNDTE9TRSwKKwkJLmZpcm13YXJlX3ZlcnNpb24gPSAgICAgMCwKKwkJLmlkZW50aXR5ID0gICAgICAgICAgICAgRVNCX01PRFVMRV9OQU1FLAorCX07CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZpZGVudCwKKwkJCQkJICAgIHNpemVvZiAoaWRlbnQpKSA/IC1FRkFVTFQgOiAwOworCisJCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCQkJcmV0dXJuIHB1dF91c2VyIChlc2JfdGltZXJfcmVhZCgpLCBwKTsKKworCQljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CisJCQlyZXR1cm4gcHV0X3VzZXIgKHRyaWdnZXJlZCwgcCk7CisKKyAgICAgICAgICAgICAgICBjYXNlIFdESU9DX0tFRVBBTElWRToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzYl90aW1lcl9rZWVwYWxpdmUgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgICAgIGNhc2UgV0RJT0NfU0VUT1BUSU9OUzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0X3VzZXIgKG5ld19vcHRpb25zLCBwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfb3B0aW9ucyAmIFdESU9TX0RJU0FCTEVDQVJEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYl90aW1lcl9zdG9wICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3X29wdGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYl90aW1lcl9rZWVwYWxpdmUgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYl90aW1lcl9zdGFydCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIFdESU9DX1NFVFRJTUVPVVQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldF91c2VyKG5ld19oZWFydGJlYXQsIHApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVzYl90aW1lcl9zZXRfaGVhcnRiZWF0KG5ld19oZWFydGJlYXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgICAgICAgICAgICAgICAgICBlc2JfdGltZXJfa2VlcGFsaXZlICgpOworICAgICAgICAgICAgICAgICAgICAgICAgLyogRmFsbCAqLworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXRfdXNlcihoZWFydGJlYXQsIHApOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PSU9DVExDTUQ7CisgICAgICAgIH0KK30KKworLyoKKyAqICAgICAgTm90aWZ5IHN5c3RlbQorICovCisKK3N0YXRpYyBpbnQgZXNiX25vdGlmeV9zeXMgKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCit7CisgICAgICAgIGlmIChjb2RlPT1TWVNfRE9XTiB8fCBjb2RlPT1TWVNfSEFMVCkgeworICAgICAgICAgICAgICAgIC8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KKyAgICAgICAgICAgICAgICBlc2JfdGltZXJfc3RvcCAoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOT1RJRllfRE9ORTsKK30KKworLyoKKyAqICAgICAgS2VybmVsIEludGVyZmFjZXMKKyAqLworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlc2JfZm9wcyA9IHsKKyAgICAgICAgLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAorICAgICAgICAubGxzZWVrID0gICAgICAgbm9fbGxzZWVrLAorICAgICAgICAud3JpdGUgPSAgICAgICAgZXNiX3dyaXRlLAorICAgICAgICAuaW9jdGwgPSAgICAgICAgZXNiX2lvY3RsLAorICAgICAgICAub3BlbiA9ICAgICAgICAgZXNiX29wZW4sCisgICAgICAgIC5yZWxlYXNlID0gICAgICBlc2JfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBlc2JfbWlzY2RldiA9IHsKKyAgICAgICAgLm1pbm9yID0gICAgICAgIFdBVENIRE9HX01JTk9SLAorICAgICAgICAubmFtZSA9ICAgICAgICAgIndhdGNoZG9nIiwKKyAgICAgICAgLmZvcHMgPSAgICAgICAgICZlc2JfZm9wcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXNiX25vdGlmaWVyID0geworICAgICAgICAubm90aWZpZXJfY2FsbCA9ICAgICAgICBlc2Jfbm90aWZ5X3N5cywKK307CisKKy8qCisgKiBEYXRhIGZvciBQQ0kgZHJpdmVyIGludGVyZmFjZQorICoKKyAqIFRoaXMgZGF0YSBvbmx5IGV4aXN0cyBmb3IgZXhwb3J0aW5nIHRoZSBzdXBwb3J0ZWQKKyAqIFBDSSBpZHMgdmlhIE1PRFVMRV9ERVZJQ0VfVEFCTEUuICBXZSBkbyBub3QgYWN0dWFsbHkKKyAqIHJlZ2lzdGVyIGEgcGNpX2RyaXZlciwgYmVjYXVzZSBzb21lb25lIGVsc2UgbWlnaHQgb25lIGRheQorICogd2FudCB0byByZWdpc3RlciBhbm90aGVyIGRyaXZlciBvbiB0aGUgc2FtZSBQQ0kgaWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlc2JfcGNpX3RibFtdID0geworICAgICAgICB7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisgICAgICAgIHsgMCwgfSwgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBsaXN0ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBlc2JfcGNpX3RibCk7CisKKy8qCisgKiAgICAgIEluaXQgJiBleGl0IHJvdXRpbmVzCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgX19pbml0IGVzYl9nZXRkZXZpY2UgKHZvaWQpCit7CisJdTggdmFsMTsKKwl1bnNpZ25lZCBzaG9ydCB2YWwyOworCisgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworICAgICAgICAvKgorICAgICAgICAgKiAgICAgIEZpbmQgdGhlIFBDSSBkZXZpY2UKKyAgICAgICAgICovCisKKyAgICAgICAgd2hpbGUgKChkZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmIChwY2lfbWF0Y2hfZGV2aWNlKGVzYl9wY2lfdGJsLCBkZXYpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlc2JfcGNpID0gZGV2OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGVzYl9wY2kpIHsKKyAgICAgICAgCWlmIChwY2lfZW5hYmxlX2RldmljZShlc2JfcGNpKSkgeworCQkJcHJpbnRrIChLRVJOX0VSUiBQRlggImZhaWxlZCB0byBlbmFibGUgZGV2aWNlXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbihlc2JfcGNpLCAwLCBFU0JfTU9EVUxFX05BTUUpKSB7CisJCQlwcmludGsgKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlcXVlc3QgcmVnaW9uXG4iKTsKKwkJCWdvdG8gZXJyX2Rpc2FibGU7CisJCX0KKworCQlCQVNFQUREUiA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGVzYl9wY2ksIDApLAorCQkJCSAgIHBjaV9yZXNvdXJjZV9sZW4oZXNiX3BjaSwgMCkpOworCQlpZiAoQkFTRUFERFIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIAkvKiBTb21ldGhpbmcncyB3cm9uZyBoZXJlLCBCQVNFQUREUiBoYXMgdG8gYmUgc2V0ICovCisJCQlwcmludGsgKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIGdldCBCQVNFQUREUlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9yZWxlYXNlOworICAgICAgICAgICAgICAgIH0KKworCQkvKgorCQkgKiBUaGUgd2F0Y2hkb2cgaGFzIHR3byB0aW1lcnMsIGl0IGNhbiBiZSBzZXR1cCBzbyB0aGF0IHRoZQorCQkgKiBleHBpcnkgb2YgdGltZXIxIHJlc3VsdHMgaW4gYW4gaW50ZXJydXB0IGFuZCB0aGUgZXhwaXJ5IG9mCisJCSAqIHRpbWVyMiByZXN1bHRzIGluIGEgcmVib290LiBXZSBzZXQgaXQgdG8gbm90IGdlbmVyYXRlCisJCSAqIGFueSBpbnRlcnJ1cHRzIGFzIHRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyB3aXRoIGl0CisJCSAqIHJpZ2h0IG5vdy4KKwkJICoKKwkJICogV2UgYWxzbyBlbmFibGUgcmVib290cyBhbmQgc2V0IHRoZSB0aW1lciBmcmVxdWVuY3kgdG8KKwkJICogdGhlIFBDSSBjbG9jayBkaXZpZGVkIGJ5IDJeMTUgKGFwcHJveCAxS0h6KS4KKwkJICovCisJCXBjaV93cml0ZV9jb25maWdfd29yZChlc2JfcGNpLCBFU0JfQ09ORklHX1JFRywgMHgwMDAzKTsKKworCQkvKiBDaGVjayB0aGF0IHRoZSBXRFQgaXNuJ3QgYWxyZWFkeSBsb2NrZWQgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZXNiX3BjaSwgRVNCX0xPQ0tfUkVHLCAmdmFsMSk7CisJCWlmICh2YWwxICYgRVNCX1dEVF9MT0NLKQorCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgUEZYICJub3dheW91dCBhbHJlYWR5IHNldFxuIik7CisKKwkJLyogU2V0IHRoZSB0aW1lciB0byB3YXRjaGRvZyBtb2RlIGFuZCBkaXNhYmxlIGl0IGZvciBub3cgKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGVzYl9wY2ksIEVTQl9MT0NLX1JFRywgMHgwMCk7CisKKwkJLyogQ2hlY2sgaWYgdGhlIHdhdGNoZG9nIHdhcyBwcmV2aW91c2x5IHRyaWdnZXJlZCAqLworCQllc2JfdW5sb2NrX3JlZ2lzdGVycygpOworCQl2YWwyID0gcmVhZHcoRVNCX1JFTE9BRF9SRUcpOworCQl0cmlnZ2VyZWQgPSAodmFsMiAmICgweDAxIDw8IDkpID4+IDkpOworCisJCS8qIFJlc2V0IHRyaWdnZXIgZmxhZyBhbmQgdGltZXJzICovCisJCWVzYl91bmxvY2tfcmVnaXN0ZXJzKCk7CisJCXdyaXRldygoMHgxMSA8PCA4KSwgRVNCX1JFTE9BRF9SRUcpOworCisJCS8qIERvbmUgKi8KKwkJcmV0dXJuIDE7CisKK2Vycl9yZWxlYXNlOgorCQlwY2lfcmVsZWFzZV9yZWdpb24oZXNiX3BjaSwgMCk7CitlcnJfZGlzYWJsZToKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKGVzYl9wY2kpOworCX0KK291dDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgd2F0Y2hkb2dfaW5pdCAodm9pZCkKK3sKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICBzcGluX2xvY2tfaW5pdCgmZXNiX2xvY2spOworCisgICAgICAgIC8qIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBoYXJkd2FyZSB3YXRjaGRvZyBpcyB0aGVyZSAqLworICAgICAgICBpZiAoIWVzYl9nZXRkZXZpY2UgKCkgfHwgZXNiX3BjaSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworCisgICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworICAgICAgICBpZiAoZXNiX3RpbWVyX3NldF9oZWFydGJlYXQgKGhlYXJ0YmVhdCkpIHsKKyAgICAgICAgICAgICAgICBlc2JfdGltZXJfc2V0X2hlYXJ0YmVhdCAoV0FUQ0hET0dfSEVBUlRCRUFUKTsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMTxoZWFydGJlYXQ8MjA0NiwgdXNpbmcgJWRcbiIsCisJCSAgICAgICBoZWFydGJlYXQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOworICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0KTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycl91bm1hcDsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IG1pc2NfcmVnaXN0ZXIoJmVzYl9taXNjZGV2KTsKKyAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBXQVRDSERPR19NSU5PUiwgcmV0KTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycl9ub3RpZmllcjsKKyAgICAgICAgfQorCisgICAgICAgIGVzYl90aW1lcl9zdG9wICgpOworCisgICAgICAgIHByaW50ayAoS0VSTl9JTkZPIFBGWCAiaW5pdGlhbGl6ZWQgKDB4JXApLiBoZWFydGJlYXQ9JWQgc2VjIChub3dheW91dD0lZClcbiIsCisgICAgICAgICAgICAgICAgQkFTRUFERFIsIGhlYXJ0YmVhdCwgbm93YXlvdXQpOworCisgICAgICAgIHJldHVybiAwOworCitlcnJfbm90aWZpZXI6CisgICAgICAgIHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOworZXJyX3VubWFwOgorCWlvdW5tYXAoQkFTRUFERFIpOworLyogZXJyX3JlbGVhc2U6ICovCisJcGNpX3JlbGVhc2VfcmVnaW9uKGVzYl9wY2ksIDApOworLyogZXJyX2Rpc2FibGU6ICovCisJcGNpX2Rpc2FibGVfZGV2aWNlKGVzYl9wY2kpOworLyogb3V0OiAqLworICAgICAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2F0Y2hkb2dfY2xlYW51cCAodm9pZCkKK3sKKwkvKiBTdG9wIHRoZSB0aW1lciBiZWZvcmUgd2UgbGVhdmUgKi8KKwlpZiAoIW5vd2F5b3V0KQorCQllc2JfdGltZXJfc3RvcCAoKTsKKworCS8qIERlcmVnaXN0ZXIgKi8KKwltaXNjX2RlcmVnaXN0ZXIoJmVzYl9taXNjZGV2KTsKKyAgICAgICAgdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmVzYl9ub3RpZmllcik7CisJaW91bm1hcChCQVNFQUREUik7CisJcGNpX3JlbGVhc2VfcmVnaW9uKGVzYl9wY2ksIDApOworCXBjaV9kaXNhYmxlX2RldmljZShlc2JfcGNpKTsKK30KKworbW9kdWxlX2luaXQod2F0Y2hkb2dfaW5pdCk7Cittb2R1bGVfZXhpdCh3YXRjaGRvZ19jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUigiUm9zcyBCaXJvIGFuZCBEYXZpZCBI5HJkZW1hbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJXYXRjaGRvZyBkcml2ZXIgZm9yIEludGVsIDYzMDBFU0IgY2hpcHNldHMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pNjMwMGVzYi5oIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k2MzAwZXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViNDdlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pNjMwMGVzYi5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKglpNjMwMGVzYjoJV2F0Y2hkb2cgdGltZXIgZHJpdmVyIGZvciBJbnRlbCA2MzAwRVNCIGNoaXBzZXQKKyAqCisgKgkoYykgQ29weXJpZ2h0IDIwMDAga2VybmVsIGNvbmNlcHRzIDxuaWxzQGtlcm5lbGNvbmNlcHRzLmRlPiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCQkJCWh0dHA6Ly93d3cua2VybmVsY29uY2VwdHMuZGUKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCU5laXRoZXIga2VybmVsIGNvbmNlcHRzIG5vciBOaWxzIEZhZXJiZXIgYWRtaXQgbGlhYmlsaXR5IG5vciBwcm92aWRlCisgKgl3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQKKyAqCSJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKgkoYykgQ29weXJpZ2h0IDIwMDAJa2VybmVsIGNvbmNlcHRzIDxuaWxzQGtlcm5lbGNvbmNlcHRzLmRlPgorICoJCQkJZGV2ZWxvcGVkIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKZW50cm8gQUcsIEhhYXIvTXVuaWNoIChHZXJtYW55KQorICoKKyAqCVRDTyB0aW1lciBkcml2ZXIgZm9yIGk4eHggY2hpcHNldHMKKyAqCWJhc2VkIG9uIHNvZnRkb2cuYyBieSBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICoKKyAqCUZvciBoaXN0b3J5IGFuZCB0aGUgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgSS9PIENvbnRyb2xsZXIgSHViJ3MKKyAqCXNlZSBpOHh4X3Rjby5jCisgKi8KKworCisvKgorICogU29tZSBhZGRyZXNzIGRlZmluaXRpb25zIGZvciB0aGUgVENPCisgKi8KKworLyogUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCisjZGVmaW5lIEVTQl9DT05GSUdfUkVHICAweDYwICAgICAgICAgICAgLyogQ29uZmlnIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVTQl9MT0NLX1JFRyAgICAweDY4ICAgICAgICAgICAgLyogV0RUIGxvY2sgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICovCisKKy8qIE1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEVTQl9USU1FUjFfUkVHICBCQVNFQUREUiArIDB4MDAgLyogVGltZXIxIHZhbHVlIGFmdGVyIGVhY2ggcmVzZXQgICAgICovCisjZGVmaW5lIEVTQl9USU1FUjJfUkVHICBCQVNFQUREUiArIDB4MDQgLyogVGltZXIyIHZhbHVlIGFmdGVyIGVhY2ggcmVzZXQgICAgICovCisjZGVmaW5lIEVTQl9HSU5UU1JfUkVHICBCQVNFQUREUiArIDB4MDggLyogR2VuZXJhbCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEVTQl9SRUxPQURfUkVHICBCQVNFQUREUiArIDB4MGMgLyogUmVsb2FkIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisKKworLyoKKyAqIFNvbWUgcmVnaXN0ZXIgYml0cworICovCisKKy8qIExvY2sgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBFU0JfV0RUX0ZVTkMgICAgKCAweDAxIDw8IDIgKSAgIC8qIFdhdGNoZG9nIGZ1bmN0aW9uYWxpdHkgICAgICAgICAgICAqLworI2RlZmluZSBFU0JfV0RUX0VOQUJMRSAgKCAweDAxIDw8IDEgKSAgIC8qIEVuYWJsZSBXRFQgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFU0JfV0RUX0xPQ0sgICAgKCAweDAxIDw8IDAgKSAgIC8qIExvY2sgKG5vd2F5b3V0KSAgICAgICAgICAgICAgICAgICAqLworCisvKiBDb25maWcgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBFU0JfV0RUX1JFQk9PVCAgKCAweDAxIDw8IDUgKSAgIC8qIEVuYWJsZSByZWJvb3Qgb24gdGltZW91dCAgICAgICAgICAqLworI2RlZmluZSBFU0JfV0RUX0ZSRVEgICAgKCAweDAxIDw8IDIgKSAgIC8qIERlY3JlbWVudCBmcmVxdWVuY3kgICAgICAgICAgICAgICAqLworI2RlZmluZSBFU0JfV0RUX0lOVFRZUEUgKCAweDExIDw8IDAgKSAgIC8qIEludGVycnVwdCB0eXBlIG9uIHRpbWVyMSB0aW1lb3V0ICAqLworCisKKy8qCisgKiBTb21lIG1hZ2ljIGNvbnN0YW50cworICovCisjZGVmaW5lIEVTQl9VTkxPQ0sxICAgICAweDgwICAgICAgICAgICAgLyogU3RlcCAxIHRvIHVubG9jayByZXNldCByZWdpc3RlcnMgICovCisjZGVmaW5lIEVTQl9VTkxPQ0syICAgICAweDg2ICAgICAgICAgICAgLyogU3RlcCAyIHRvIHVubG9jayByZXNldCByZWdpc3RlcnMgICovCg==