LyoKICogQ29weXJpZ2h0IChDKSAyMDA4IE9sZSBBbmRy6SBWYWRsYSBSYXZu5XMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCiAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogKi8KCiNpZm5kZWYgX19LU0hFTFBFUlNfSF9fCiNkZWZpbmUgX19LU0hFTFBFUlNfSF9fCgojaW5jbHVkZSA8Z2xpYi5oPgojaW5jbHVkZSA8d2luZG93cy5oPgojaW5jbHVkZSA8a3MuaD4KCkdfQkVHSU5fREVDTFMKCnR5cGVkZWYgc3RydWN0IF9Lc0RldmljZUVudHJ5IEtzRGV2aWNlRW50cnk7CgpzdHJ1Y3QgX0tzRGV2aWNlRW50cnkKewogIGd1aW50IGluZGV4OwogIGdjaGFyICogbmFtZTsKICBnY2hhciAqIHBhdGg7Cn07CgpnYm9vbGVhbiBrc19pc192YWxpZF9oYW5kbGUgKEhBTkRMRSBoKTsKCkdMaXN0ICoga3NfZW51bWVyYXRlX2RldmljZXMgKGNvbnN0IEdVSUQgKiBkZXZ0eXBlLCBjb25zdCBHVUlEICogZGlyZWN0aW9uX2NhdGVnb3J5KTsKdm9pZCBrc19kZXZpY2VfZW50cnlfZnJlZSAoS3NEZXZpY2VFbnRyeSAqIGVudHJ5KTsKdm9pZCBrc19kZXZpY2VfbGlzdF9mcmVlIChHTGlzdCAqIGRldmljZXMpOwoKZ2Jvb2xlYW4ga3NfZmlsdGVyX2dldF9waW5fcHJvcGVydHkgKEhBTkRMRSBmaWx0ZXJfaGFuZGxlLCBndWxvbmcgcGluX2lkLCBHVUlEIHByb3Bfc2V0LCBndWxvbmcgcHJvcF9pZCwgZ3BvaW50ZXIgdmFsdWUsIGd1bG9uZyB2YWx1ZV9zaXplLCBndWxvbmcgKiBlcnJvcik7Cmdib29sZWFuIGtzX2ZpbHRlcl9nZXRfcGluX3Byb3BlcnR5X211bHRpIChIQU5ETEUgZmlsdGVyX2hhbmRsZSwgZ3Vsb25nIHBpbl9pZCwgR1VJRCBwcm9wX3NldCwgZ3Vsb25nIHByb3BfaWQsIEtTTVVMVElQTEVfSVRFTSAqKiBpdGVtcywgZ3Vsb25nICogZXJyb3IpOwoKZ2Jvb2xlYW4ga3Nfb2JqZWN0X3F1ZXJ5X3Byb3BlcnR5IChIQU5ETEUgaGFuZGxlLCBHVUlEIHByb3Bfc2V0LCBndWxvbmcgcHJvcF9pZCwgZ3Vsb25nIHByb3BfZmxhZ3MsIGdwb2ludGVyICogdmFsdWUsIGd1bG9uZyAqIHZhbHVlX3NpemUsIGd1bG9uZyAqIGVycm9yKTsKZ2Jvb2xlYW4ga3Nfb2JqZWN0X2dldF9wcm9wZXJ0eSAoSEFORExFIGhhbmRsZSwgR1VJRCBwcm9wX3NldCwgZ3Vsb25nIHByb3BfaWQsIGdwb2ludGVyICogdmFsdWUsIGd1bG9uZyAqIHZhbHVlX3NpemUsIGd1bG9uZyAqIGVycm9yKTsKZ2Jvb2xlYW4ga3Nfb2JqZWN0X3NldF9wcm9wZXJ0eSAoSEFORExFIGhhbmRsZSwgR1VJRCBwcm9wX3NldCwgZ3Vsb25nIHByb3BfaWQsIGdwb2ludGVyIHZhbHVlLCBndWxvbmcgdmFsdWVfc2l6ZSwgZ3Vsb25nICogZXJyb3IpOwoKZ2Jvb2xlYW4ga3Nfb2JqZWN0X2dldF9zdXBwb3J0ZWRfcHJvcGVydHlfc2V0cyAoSEFORExFIGhhbmRsZSwgR1VJRCAqKiBwcm9wc2V0cywgZ3Vsb25nICogbGVuKTsKCmdib29sZWFuIGtzX29iamVjdF9zZXRfY29ubmVjdGlvbl9zdGF0ZSAoSEFORExFIGhhbmRsZSwgS1NTVEFURSBzdGF0ZSwgZ3Vsb25nICogZXJyb3IpOwoKZ2NoYXIgKiBrc19ndWlkX3RvX3N0cmluZyAoY29uc3QgR1VJRCAqIGd1aWQpOwpjb25zdCBnY2hhciAqIGtzX3N0YXRlX3RvX3N0cmluZyAoS1NTVEFURSBzdGF0ZSk7CmdjaGFyICoga3Nfb3B0aW9uc19mbGFnc190b19zdHJpbmcgKGd1bG9uZyBmbGFncyk7CmdjaGFyICoga3NfcHJvcGVydHlfc2V0X3RvX3N0cmluZyAoY29uc3QgR1VJRCAqIGd1aWQpOwoKR19FTkRfREVDTFMKCiNlbmRpZiAvKiBfX0tTSEVMUEVSU19IX18gKi8K